fix(studio): chain config dir + spawn path + doc URLs
Some checks failed
Security / Security check (push) Failing after 2s
Some checks failed
Security / Security check (push) Failing after 2s
Track the platform rename: the hub spawn path is now ~/.chain/bin/chain (was ~/.fai/bin/fai.exe on Windows — both dir and binary were stale, so Studio could not launch the hub after the config-dir rename), the ~/.fai/* help strings become ~/.chain/*, FAI_REGISTRY_TOKEN -> CHAIN_REGISTRY_TOKEN, and the two in-app doc URLs point at the public fai/chain repo (fai/platform was renamed to the private fai/chain-private). The .fai module bundle extension is left unchanged (format phase). flutter analyze: no issues. Signed-off-by: flemming-it <stefan.a.flemming@googlemail.com>
This commit is contained in:
parent
7ff4fda2a3
commit
0f93d90963
18 changed files with 121 additions and 121 deletions
|
|
@ -6,7 +6,7 @@
|
||||||
// • a copyable, selectable rendition of the message
|
// • a copyable, selectable rendition of the message
|
||||||
// • a friendly headline (gRPC codes mapped via
|
// • a friendly headline (gRPC codes mapped via
|
||||||
// friendlyError) instead of a wall-of-stack-trace
|
// friendlyError) instead of a wall-of-stack-trace
|
||||||
// • an automatic append to ~/.fai/logs/studio-errors.log so
|
// • an automatic append to ~/.chain/logs/studio-errors.log so
|
||||||
// the trail survives the dismiss action
|
// the trail survives the dismiss action
|
||||||
//
|
//
|
||||||
// Call sites used to scatter `ScaffoldMessenger.of(ctx).showSnackBar(
|
// Call sites used to scatter `ScaffoldMessenger.of(ctx).showSnackBar(
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@
|
||||||
// went wrong without the operator having to reproduce the
|
// went wrong without the operator having to reproduce the
|
||||||
// failure.
|
// failure.
|
||||||
//
|
//
|
||||||
// Path: `~/.fai/logs/studio-errors.log` (cross-platform via
|
// Path: `~/.chain/logs/studio-errors.log` (cross-platform via
|
||||||
// HOME / USERPROFILE). One line per event, JSON-shaped so
|
// HOME / USERPROFILE). One line per event, JSON-shaped so
|
||||||
// `chain doctor` can parse it; humans can still read it because
|
// `chain doctor` can parse it; humans can still read it because
|
||||||
// the JSON is single-line and short.
|
// the JSON is single-line and short.
|
||||||
|
|
|
||||||
|
|
@ -55,7 +55,7 @@ class HubService {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Reconnect to a new endpoint and persist for next launch.
|
/// Reconnect to a new endpoint and persist for next launch.
|
||||||
/// [authToken] is read from `~/.fai/hub-auth-token` by
|
/// [authToken] is read from `~/.chain/hub-auth-token` by
|
||||||
/// default — pass `null` to drop a previously-loaded token,
|
/// default — pass `null` to drop a previously-loaded token,
|
||||||
/// or omit the parameter to keep the current value.
|
/// or omit the parameter to keep the current value.
|
||||||
Future<void> reconnect(
|
Future<void> reconnect(
|
||||||
|
|
@ -241,7 +241,7 @@ class HubService {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Persist a new System-AI configuration. The hub writes back
|
/// Persist a new System-AI configuration. The hub writes back
|
||||||
/// to `~/.fai/config.yaml` and hot-reloads the in-memory copy
|
/// to `~/.chain/config.yaml` and hot-reloads the in-memory copy
|
||||||
/// in one round-trip; the caller gets the resulting status
|
/// in one round-trip; the caller gets the resulting status
|
||||||
/// for an immediate UI refresh.
|
/// for an immediate UI refresh.
|
||||||
Future<SystemAiStatus> updateSystemAi({
|
Future<SystemAiStatus> updateSystemAi({
|
||||||
|
|
@ -449,7 +449,7 @@ class HubService {
|
||||||
|
|
||||||
/// Read the installed module's `MODULE.md` (or
|
/// Read the installed module's `MODULE.md` (or
|
||||||
/// `MODULE.<locale>.md`) from disk under
|
/// `MODULE.<locale>.md`) from disk under
|
||||||
/// `~/.fai/modules/<module>/`. Air-gap friendly, no network.
|
/// `~/.chain/modules/<module>/`. Air-gap friendly, no network.
|
||||||
///
|
///
|
||||||
/// `state` is one of:
|
/// `state` is one of:
|
||||||
/// - `'found'` — `text` holds the markdown
|
/// - `'found'` — `text` holds the markdown
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ import 'package:path/path.dart' as p;
|
||||||
|
|
||||||
/// Operator-managed gRPC bearer token used to authenticate
|
/// Operator-managed gRPC bearer token used to authenticate
|
||||||
/// Studio against a hub that has `auth.tokens:` configured
|
/// Studio against a hub that has `auth.tokens:` configured
|
||||||
/// (RBAC Level 2). Stored at `~/.fai/hub-auth-token` (mode
|
/// (RBAC Level 2). Stored at `~/.chain/hub-auth-token` (mode
|
||||||
/// 0600 on Unix). Sister of [RegistryToken] — same on-disk
|
/// 0600 on Unix). Sister of [RegistryToken] — same on-disk
|
||||||
/// hygiene, different secret.
|
/// hygiene, different secret.
|
||||||
///
|
///
|
||||||
|
|
@ -55,7 +55,7 @@ class HubAuthToken {
|
||||||
return content.isEmpty ? null : content;
|
return content.isEmpty ? null : content;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Persist [token] to disk, creating `~/.fai/` if needed.
|
/// Persist [token] to disk, creating `~/.chain/` if needed.
|
||||||
///
|
///
|
||||||
/// Atomic write: writes to `<path>.tmp`, chmods 0600 on
|
/// Atomic write: writes to `<path>.tmp`, chmods 0600 on
|
||||||
/// Unix BEFORE moving into place, then renames. This
|
/// Unix BEFORE moving into place, then renames. This
|
||||||
|
|
@ -63,7 +63,7 @@ class HubAuthToken {
|
||||||
/// `writeAsString` + later `chmod 600` sequence left the
|
/// `writeAsString` + later `chmod 600` sequence left the
|
||||||
/// file world-readable for the duration of the chmod call.
|
/// file world-readable for the duration of the chmod call.
|
||||||
///
|
///
|
||||||
/// Also sets `~/.fai/` itself to 0700 on Unix on first
|
/// Also sets `~/.chain/` itself to 0700 on Unix on first
|
||||||
/// creation so other users on a shared host can't even
|
/// creation so other users on a shared host can't even
|
||||||
/// enumerate the directory (the 0600 token-file mode is
|
/// enumerate the directory (the 0600 token-file mode is
|
||||||
/// fine in isolation; combining it with a 0755 parent
|
/// fine in isolation; combining it with a 0755 parent
|
||||||
|
|
|
||||||
|
|
@ -2,8 +2,8 @@ import 'dart:io';
|
||||||
import 'package:path/path.dart' as p;
|
import 'package:path/path.dart' as p;
|
||||||
|
|
||||||
/// Operator-managed registry auth token, kept at
|
/// Operator-managed registry auth token, kept at
|
||||||
/// `~/.fai/registry-token` (mode 0600 on Unix). The hub reads
|
/// `~/.chain/registry-token` (mode 0600 on Unix). The hub reads
|
||||||
/// this file at install time when `FAI_REGISTRY_TOKEN` is unset
|
/// this file at install time when `CHAIN_REGISTRY_TOKEN` is unset
|
||||||
/// — see `download_to_temp` in `crates/fai_hub/src/lib.rs`.
|
/// — see `download_to_temp` in `crates/fai_hub/src/lib.rs`.
|
||||||
///
|
///
|
||||||
/// Studio writes the file directly so a fresh install never
|
/// Studio writes the file directly so a fresh install never
|
||||||
|
|
@ -40,7 +40,7 @@ class RegistryToken {
|
||||||
return trimmed.isEmpty ? null : trimmed.length;
|
return trimmed.isEmpty ? null : trimmed.length;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Persist [token] to disk, creating `~/.fai/` if needed.
|
/// Persist [token] to disk, creating `~/.chain/` if needed.
|
||||||
/// On Unix the file is chmod-ed to 0600 (owner read/write
|
/// On Unix the file is chmod-ed to 0600 (owner read/write
|
||||||
/// only). On Windows the default user-ACL is left alone —
|
/// only). On Windows the default user-ACL is left alone —
|
||||||
/// best-effort, no PowerShell handshake.
|
/// best-effort, no PowerShell handshake.
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@
|
||||||
// call for processes.
|
// call for processes.
|
||||||
//
|
//
|
||||||
// The `fai` binary is resolved from PATH first; falls back to
|
// The `fai` binary is resolved from PATH first; falls back to
|
||||||
// `~/.fai/bin/chain` (Unix) or `%USERPROFILE%\.fai\bin\chain.exe`
|
// `~/.chain/bin/chain` (Unix) or `%USERPROFILE%\.chain\bin\chain.exe`
|
||||||
// (Windows). The PowerShell installer puts both in PATH but
|
// (Windows). The PowerShell installer puts both in PATH but
|
||||||
// some operators don't restart their shell after install — the
|
// some operators don't restart their shell after install — the
|
||||||
// fallback covers that case.
|
// fallback covers that case.
|
||||||
|
|
@ -30,7 +30,7 @@ const String kFaiBinaryNotFound = 'fai-binary-not-found';
|
||||||
/// in the OS browser as the fallback affordance when no `fai`
|
/// in the OS browser as the fallback affordance when no `fai`
|
||||||
/// binary can be located on the machine.
|
/// binary can be located on the machine.
|
||||||
const String kFaiInstallDocsUrl =
|
const String kFaiInstallDocsUrl =
|
||||||
'https://git.flemming.ai/fai/platform#installation';
|
'https://git.flemming.ai/fai/chain#installation';
|
||||||
|
|
||||||
class SystemActions {
|
class SystemActions {
|
||||||
SystemActions._();
|
SystemActions._();
|
||||||
|
|
@ -151,7 +151,7 @@ class SystemActions {
|
||||||
return _runFai(['update', 'apply', '--channel', channel]);
|
return _runFai(['update', 'apply', '--channel', channel]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Switch the active channel pointer at `~/.fai/current-channel`.
|
/// Switch the active channel pointer at `~/.chain/current-channel`.
|
||||||
/// The CLI also restarts the daemon for the new channel, so the
|
/// The CLI also restarts the daemon for the new channel, so the
|
||||||
/// caller does not need a follow-up restart.
|
/// caller does not need a follow-up restart.
|
||||||
static Future<({bool ok, String stdout, String stderr})> faiChannelSwitch(
|
static Future<({bool ok, String stdout, String stderr})> faiChannelSwitch(
|
||||||
|
|
@ -179,7 +179,7 @@ class SystemActions {
|
||||||
|
|
||||||
/// Run `chain reset --yes`. Wipes operator state with the same
|
/// Run `chain reset --yes`. Wipes operator state with the same
|
||||||
/// safety net as the CLI: stops every daemon (including off-
|
/// safety net as the CLI: stops every daemon (including off-
|
||||||
/// channel orphans), atomically backs `~/.fai/` up, recreates
|
/// channel orphans), atomically backs `~/.chain/` up, recreates
|
||||||
/// it with `bin/`, `channels/`, `config.yaml`, `current-channel`,
|
/// it with `bin/`, `channels/`, `config.yaml`, `current-channel`,
|
||||||
/// and `registry-token` preserved. The daemon restarts on the
|
/// and `registry-token` preserved. The daemon restarts on the
|
||||||
/// active channel before the call returns.
|
/// active channel before the call returns.
|
||||||
|
|
@ -248,8 +248,8 @@ class SystemActions {
|
||||||
final home = Platform.environment[isWindows ? 'USERPROFILE' : 'HOME'];
|
final home = Platform.environment[isWindows ? 'USERPROFILE' : 'HOME'];
|
||||||
if (home == null || home.isEmpty) return null;
|
if (home == null || home.isEmpty) return null;
|
||||||
final fallback = isWindows
|
final fallback = isWindows
|
||||||
? '$home\\.fai\\bin\\fai.exe'
|
? '$home\\.chain\\bin\\chain.exe'
|
||||||
: '$home/.fai/bin/chain';
|
: '$home/.chain/bin/chain';
|
||||||
return File(fallback).existsSync() ? fallback : null;
|
return File(fallback).existsSync() ? fallback : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
// Today-Hero story loader.
|
// Today-Hero story loader.
|
||||||
//
|
//
|
||||||
// Reads ~/.fai/today/active.yaml when present, validates the
|
// Reads ~/.chain/today/active.yaml when present, validates the
|
||||||
// schema, and hands the parsed bilingual story back to the
|
// schema, and hands the parsed bilingual story back to the
|
||||||
// store page. On any failure (file missing, schema mismatch,
|
// store page. On any failure (file missing, schema mismatch,
|
||||||
// banned-words hit, parse error) the caller falls back to the
|
// banned-words hit, parse error) the caller falls back to the
|
||||||
|
|
@ -73,7 +73,7 @@ class TodayStoryData {
|
||||||
/// store page calls `loadOrFallback` once per fetch and feeds
|
/// store page calls `loadOrFallback` once per fetch and feeds
|
||||||
/// the result into `_StoreTodayHero`.
|
/// the result into `_StoreTodayHero`.
|
||||||
class TodayStoryLoader {
|
class TodayStoryLoader {
|
||||||
/// Resolves to `~/.fai/today/active.yaml` on every supported
|
/// Resolves to `~/.chain/today/active.yaml` on every supported
|
||||||
/// host. The pipeline writes here from [tools/today/accept.sh].
|
/// host. The pipeline writes here from [tools/today/accept.sh].
|
||||||
static String activePath() {
|
static String activePath() {
|
||||||
final home =
|
final home =
|
||||||
|
|
|
||||||
|
|
@ -37,7 +37,7 @@
|
||||||
"errOutputTooLarge": "Step-Output hat die Größenbegrenzung überschritten.",
|
"errOutputTooLarge": "Step-Output hat die Größenbegrenzung überschritten.",
|
||||||
"errOutputTooLargeHint": "Entweder Output kürzen (Text truncaten, Bytes komprimieren) oder `max_output_size_mb` in der Operator-Config erhöhen.",
|
"errOutputTooLargeHint": "Entweder Output kürzen (Text truncaten, Bytes komprimieren) oder `max_output_size_mb` in der Operator-Config erhöhen.",
|
||||||
"errServiceUnavailableForStep": "Host-Service nicht konfiguriert.",
|
"errServiceUnavailableForStep": "Host-Service nicht konfiguriert.",
|
||||||
"errServiceUnavailableForStepHint": "Das Modul braucht einen Service (z.B. ollama, playwright), den der Operator nicht deklariert hat. Trage ihn unter `services:` in ~/.fai/config.yaml ein.",
|
"errServiceUnavailableForStepHint": "Das Modul braucht einen Service (z.B. ollama, playwright), den der Operator nicht deklariert hat. Trage ihn unter `services:` in ~/.chain/config.yaml ein.",
|
||||||
"errMissingValue": "Pflichtwert fehlt.",
|
"errMissingValue": "Pflichtwert fehlt.",
|
||||||
"errMissingValueHint": "Der Step erwartet eine Eingabe, die nicht verdrahtet ist — entweder zur Laufzeit liefern oder den vorgelagerten `$ref` korrigieren.",
|
"errMissingValueHint": "Der Step erwartet eine Eingabe, die nicht verdrahtet ist — entweder zur Laufzeit liefern oder den vorgelagerten `$ref` korrigieren.",
|
||||||
"errMcpUnreachable": "MCP-Endpunkt nicht erreichbar.",
|
"errMcpUnreachable": "MCP-Endpunkt nicht erreichbar.",
|
||||||
|
|
@ -148,7 +148,7 @@
|
||||||
"settingsHubEndpointHint": "Wohin soll Studio sich verbinden? Standard ist der lokale Hub auf 127.0.0.1:50051.",
|
"settingsHubEndpointHint": "Wohin soll Studio sich verbinden? Standard ist der lokale Hub auf 127.0.0.1:50051.",
|
||||||
"settingsTlsSubtitle": "https/grpc-secure",
|
"settingsTlsSubtitle": "https/grpc-secure",
|
||||||
"settingsPortError": "Port muss 1–65535 sein",
|
"settingsPortError": "Port muss 1–65535 sein",
|
||||||
"channelsBlurb": "Hub-Kanal wechseln (schreibt ~/.fai/current-channel und startet den Daemon neu). Verbinden ändert nur die Wire von Studio.",
|
"channelsBlurb": "Hub-Kanal wechseln (schreibt ~/.chain/current-channel und startet den Daemon neu). Verbinden ändert nur die Wire von Studio.",
|
||||||
"channelsActionsTooltip": "Kanal-Aktionen",
|
"channelsActionsTooltip": "Kanal-Aktionen",
|
||||||
"systemAiHeader": "SYSTEM-AI",
|
"systemAiHeader": "SYSTEM-AI",
|
||||||
"systemAiEnabled": "aktiv",
|
"systemAiEnabled": "aktiv",
|
||||||
|
|
@ -433,7 +433,7 @@
|
||||||
"storeOpenRepoButton": "Repository im Browser öffnen",
|
"storeOpenRepoButton": "Repository im Browser öffnen",
|
||||||
"storeDocsErrorNotFound": "Dieses Modul ist nicht im Store-Index des Hubs enthalten.",
|
"storeDocsErrorNotFound": "Dieses Modul ist nicht im Store-Index des Hubs enthalten.",
|
||||||
"storeDocsErrorNoDocs": "Für dieses Modul ist keine Repository-URL hinterlegt.",
|
"storeDocsErrorNoDocs": "Für dieses Modul ist keine Repository-URL hinterlegt.",
|
||||||
"storeDocsErrorAuth": "Die Registry erfordert Authentifizierung, um dieses README zu laden. Setze FAI_REGISTRY_TOKEN in der Umgebung des Daemons und starte den Hub neu.",
|
"storeDocsErrorAuth": "Die Registry erfordert Authentifizierung, um dieses README zu laden. Setze CHAIN_REGISTRY_TOKEN in der Umgebung des Daemons und starte den Hub neu.",
|
||||||
"storeDocsErrorNetwork": "Netzwerkfehler beim Laden des README. {detail}",
|
"storeDocsErrorNetwork": "Netzwerkfehler beim Laden des README. {detail}",
|
||||||
"@storeDocsErrorNetwork": {
|
"@storeDocsErrorNetwork": {
|
||||||
"placeholders": {
|
"placeholders": {
|
||||||
|
|
@ -607,7 +607,7 @@
|
||||||
"auditClearLogButton": "Log löschen",
|
"auditClearLogButton": "Log löschen",
|
||||||
"modulesTitle": "Module",
|
"modulesTitle": "Module",
|
||||||
"modulesNoneTitle": "Noch keine Module",
|
"modulesNoneTitle": "Noch keine Module",
|
||||||
"modulesNoneHint": "`chain install <capability-name>` ausführen oder ~/.fai/modules/ prüfen.",
|
"modulesNoneHint": "`chain install <capability-name>` ausführen oder ~/.chain/modules/ prüfen.",
|
||||||
"modulesReloadTooltip": "Aktualisieren",
|
"modulesReloadTooltip": "Aktualisieren",
|
||||||
"modulesRecentActivity": "LETZTE AKTIVITÄT",
|
"modulesRecentActivity": "LETZTE AKTIVITÄT",
|
||||||
"modulesRecentActivityHint": "letzte {n} install/uninstall-Ereignisse aus dem Audit-Log",
|
"modulesRecentActivityHint": "letzte {n} install/uninstall-Ereignisse aus dem Audit-Log",
|
||||||
|
|
@ -758,7 +758,7 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"registryCredentialsHeader": "REGISTRY-ZUGANGSDATEN",
|
"registryCredentialsHeader": "REGISTRY-ZUGANGSDATEN",
|
||||||
"registryCredentialsBlurb": "Token zum Herunterladen von .fai-Modulen aus einer Registry mit Anmeldepflicht (Forgejo, private GitHub-Repos). Gespeichert in ~/.fai/registry-token, Modus 0600. Die Umgebungsvariable FAI_REGISTRY_TOKEN hat weiterhin Vorrang, wenn gesetzt.",
|
"registryCredentialsBlurb": "Token zum Herunterladen von .fai-Modulen aus einer Registry mit Anmeldepflicht (Forgejo, private GitHub-Repos). Gespeichert in ~/.chain/registry-token, Modus 0600. Die Umgebungsvariable CHAIN_REGISTRY_TOKEN hat weiterhin Vorrang, wenn gesetzt.",
|
||||||
"registryTokenStatusConfigured": "Konfiguriert ({chars} Zeichen)",
|
"registryTokenStatusConfigured": "Konfiguriert ({chars} Zeichen)",
|
||||||
"@registryTokenStatusConfigured": {
|
"@registryTokenStatusConfigured": {
|
||||||
"placeholders": {
|
"placeholders": {
|
||||||
|
|
@ -772,7 +772,7 @@
|
||||||
"registryTokenFieldHint": "Forgejo- oder GitHub-PAT einfügen",
|
"registryTokenFieldHint": "Forgejo- oder GitHub-PAT einfügen",
|
||||||
"registryTokenSaveButton": "Speichern",
|
"registryTokenSaveButton": "Speichern",
|
||||||
"registryTokenClearButton": "Entfernen",
|
"registryTokenClearButton": "Entfernen",
|
||||||
"registryTokenStorageHint": "Lokal gespeichert in ~/.fai/registry-token. Wird nie an einen Remote-Dienst übertragen.",
|
"registryTokenStorageHint": "Lokal gespeichert in ~/.chain/registry-token. Wird nie an einen Remote-Dienst übertragen.",
|
||||||
"registryTokenSavedToast": "Registry-Token gespeichert.",
|
"registryTokenSavedToast": "Registry-Token gespeichert.",
|
||||||
"registryTokenClearedToast": "Registry-Token entfernt.",
|
"registryTokenClearedToast": "Registry-Token entfernt.",
|
||||||
"registryTokenSaveFailedToast": "Speichern fehlgeschlagen: {error}",
|
"registryTokenSaveFailedToast": "Speichern fehlgeschlagen: {error}",
|
||||||
|
|
@ -784,7 +784,7 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"hubAuthTokenHeader": "HUB-AUTHENTIFIZIERUNG",
|
"hubAuthTokenHeader": "HUB-AUTHENTIFIZIERUNG",
|
||||||
"hubAuthTokenBlurb": "Bearer-Token für die Studio-Anbindung an einen Hub mit aktivierter auth.tokens-Konfiguration (RBAC Level 2). Gespeichert in ~/.fai/hub-auth-token, Modus 0600. Studio sendet ihn als Authorization: Bearer bei jedem gRPC-Aufruf.",
|
"hubAuthTokenBlurb": "Bearer-Token für die Studio-Anbindung an einen Hub mit aktivierter auth.tokens-Konfiguration (RBAC Level 2). Gespeichert in ~/.chain/hub-auth-token, Modus 0600. Studio sendet ihn als Authorization: Bearer bei jedem gRPC-Aufruf.",
|
||||||
"hubAuthTokenStatusConfigured": "Eingerichtet ({chars} Zeichen)",
|
"hubAuthTokenStatusConfigured": "Eingerichtet ({chars} Zeichen)",
|
||||||
"@hubAuthTokenStatusConfigured": {
|
"@hubAuthTokenStatusConfigured": {
|
||||||
"placeholders": {
|
"placeholders": {
|
||||||
|
|
@ -798,7 +798,7 @@
|
||||||
"hubAuthTokenFieldHint": "Token aus dem auth.tokens-Eintrag des Hub-Operators einfügen",
|
"hubAuthTokenFieldHint": "Token aus dem auth.tokens-Eintrag des Hub-Operators einfügen",
|
||||||
"hubAuthTokenSaveButton": "Speichern",
|
"hubAuthTokenSaveButton": "Speichern",
|
||||||
"hubAuthTokenClearButton": "Entfernen",
|
"hubAuthTokenClearButton": "Entfernen",
|
||||||
"hubAuthTokenStorageHint": "Lokal gespeichert in ~/.fai/hub-auth-token. Studio verbindet nach dem Speichern automatisch neu, der Token wirkt sofort.",
|
"hubAuthTokenStorageHint": "Lokal gespeichert in ~/.chain/hub-auth-token. Studio verbindet nach dem Speichern automatisch neu, der Token wirkt sofort.",
|
||||||
"hubAuthTokenSavedToast": "Hub-Token gespeichert.",
|
"hubAuthTokenSavedToast": "Hub-Token gespeichert.",
|
||||||
"hubAuthTokenClearedToast": "Hub-Token entfernt.",
|
"hubAuthTokenClearedToast": "Hub-Token entfernt.",
|
||||||
"hubAuthTokenSaveFailedToast": "Speichern fehlgeschlagen: {error}",
|
"hubAuthTokenSaveFailedToast": "Speichern fehlgeschlagen: {error}",
|
||||||
|
|
@ -830,15 +830,15 @@
|
||||||
"defaultScopeLoadFailed": "Standard-Scope konnte nicht geladen werden.",
|
"defaultScopeLoadFailed": "Standard-Scope konnte nicht geladen werden.",
|
||||||
"defaultScopeNonEmptyError": "Standard-Scope darf nicht leer sein — mindestens ein Segment muss erhalten bleiben.",
|
"defaultScopeNonEmptyError": "Standard-Scope darf nicht leer sein — mindestens ein Segment muss erhalten bleiben.",
|
||||||
"maintenanceHeader": "HUB-WARTUNG",
|
"maintenanceHeader": "HUB-WARTUNG",
|
||||||
"maintenanceResetBlurb": "Operator-Zustand zurücksetzen und mit einem sauberen Hub neu starten. Stoppt jeden laufenden Daemon, sichert ~/.fai/ atomar in ein Backup, legt es dann neu an — Binary, Channel-Pointer, MCP-/n8n-/System-AI-Konfiguration und Registry-Token bleiben erhalten. Wiederherstellen durch Zurückverschieben des Backup-Ordners.",
|
"maintenanceResetBlurb": "Operator-Zustand zurücksetzen und mit einem sauberen Hub neu starten. Stoppt jeden laufenden Daemon, sichert ~/.chain/ atomar in ein Backup, legt es dann neu an — Binary, Channel-Pointer, MCP-/n8n-/System-AI-Konfiguration und Registry-Token bleiben erhalten. Wiederherstellen durch Zurückverschieben des Backup-Ordners.",
|
||||||
"maintenanceKeepModulesTitle": "Installierte Module behalten",
|
"maintenanceKeepModulesTitle": "Installierte Module behalten",
|
||||||
"maintenanceKeepModulesSubtitle": "Standardverhalten löscht ~/.fai/modules/, damit eine frische Installation den Modul-Bezugspfad end-to-end verifizieren kann.",
|
"maintenanceKeepModulesSubtitle": "Standardverhalten löscht ~/.chain/modules/, damit eine frische Installation den Modul-Bezugspfad end-to-end verifizieren kann.",
|
||||||
"maintenanceKeepDataTitle": "Protokoll + gespeicherte Flows behalten",
|
"maintenanceKeepDataTitle": "Protokoll + gespeicherte Flows behalten",
|
||||||
"maintenanceKeepDataSubtitle": "Standardverhalten löscht ~/.fai/data/, damit die Audit-Kette mit einer neuen Genesis startet und die mitgelieferten Sample-Flows beim ersten Daemon-Start neu importiert werden.",
|
"maintenanceKeepDataSubtitle": "Standardverhalten löscht ~/.chain/data/, damit die Audit-Kette mit einer neuen Genesis startet und die mitgelieferten Sample-Flows beim ersten Daemon-Start neu importiert werden.",
|
||||||
"maintenanceResetButton": "Hub zurücksetzen",
|
"maintenanceResetButton": "Hub zurücksetzen",
|
||||||
"maintenanceResetInProgress": "Zurücksetzen…",
|
"maintenanceResetInProgress": "Zurücksetzen…",
|
||||||
"maintenanceResetConfirmTitle": "Hub zurücksetzen?",
|
"maintenanceResetConfirmTitle": "Hub zurücksetzen?",
|
||||||
"maintenanceResetConfirmBody": "Stoppt jeden Daemon, verschiebt ~/.fai/ in ein Backup mit Zeitstempel und startet sauber neu. Das Backup ist vollständig wiederherstellbar. Fortfahren?",
|
"maintenanceResetConfirmBody": "Stoppt jeden Daemon, verschiebt ~/.chain/ in ein Backup mit Zeitstempel und startet sauber neu. Das Backup ist vollständig wiederherstellbar. Fortfahren?",
|
||||||
"maintenanceResetConfirmButton": "Zurücksetzen",
|
"maintenanceResetConfirmButton": "Zurücksetzen",
|
||||||
"welcomeChecklistAllSetTitle": "Du bist eingerichtet.",
|
"welcomeChecklistAllSetTitle": "Du bist eingerichtet.",
|
||||||
"welcomeChecklistAllSetBody": "Drei Stränge, an denen du als nächstes ziehen kannst:",
|
"welcomeChecklistAllSetBody": "Drei Stränge, an denen du als nächstes ziehen kannst:",
|
||||||
|
|
@ -948,15 +948,15 @@
|
||||||
"errNotFoundHint": "Das Angefragte ist nicht hier — entweder entfernt oder nie existiert.",
|
"errNotFoundHint": "Das Angefragte ist nicht hier — entweder entfernt oder nie existiert.",
|
||||||
"errAlreadyExists": "Existiert bereits.",
|
"errAlreadyExists": "Existiert bereits.",
|
||||||
"errPermissionDenied": "Berechtigung verweigert.",
|
"errPermissionDenied": "Berechtigung verweigert.",
|
||||||
"errPermissionDeniedHint": "Die Operator-Policy des Hubs blockiert diese Aktion. `~/.fai/config.yaml` prüfen.",
|
"errPermissionDeniedHint": "Die Operator-Policy des Hubs blockiert diese Aktion. `~/.chain/config.yaml` prüfen.",
|
||||||
"errFailedPrecondition": "Setup-Problem hat das blockiert.",
|
"errFailedPrecondition": "Setup-Problem hat das blockiert.",
|
||||||
"errFailedPreconditionHint": "Der Hub konnte nicht weiter, weil etwas Vorausgesetztes fehlt. Details unten erklären was.",
|
"errFailedPreconditionHint": "Der Hub konnte nicht weiter, weil etwas Vorausgesetztes fehlt. Details unten erklären was.",
|
||||||
"errInternal": "Unerwarteter interner Fehler.",
|
"errInternal": "Unerwarteter interner Fehler.",
|
||||||
"errInternalHint": "Hub-Logs unter `~/.fai/logs/` prüfen. Wenn das öfter passiert, bitte melden.",
|
"errInternalHint": "Hub-Logs unter `~/.chain/logs/` prüfen. Wenn das öfter passiert, bitte melden.",
|
||||||
"errUnavailable": "Hub nicht erreichbar.",
|
"errUnavailable": "Hub nicht erreichbar.",
|
||||||
"errUnavailableHint": "Sicherstellen, dass `chain serve` (oder `chain daemon start`) läuft und der Daemon-Endpunkt zu Studios Einstellungen passt.",
|
"errUnavailableHint": "Sicherstellen, dass `chain serve` (oder `chain daemon start`) läuft und der Daemon-Endpunkt zu Studios Einstellungen passt.",
|
||||||
"errUnauthenticated": "Authentifizierung erforderlich.",
|
"errUnauthenticated": "Authentifizierung erforderlich.",
|
||||||
"errUnauthenticatedHint": "`FAI_REGISTRY_TOKEN` setzen oder in den Einstellungen anmelden, dann erneut versuchen.",
|
"errUnauthenticatedHint": "`CHAIN_REGISTRY_TOKEN` setzen oder in den Einstellungen anmelden, dann erneut versuchen.",
|
||||||
"errCopyDetail": "Detail kopieren",
|
"errCopyDetail": "Detail kopieren",
|
||||||
"errDetailCopied": "Detail in die Zwischenablage kopiert.",
|
"errDetailCopied": "Detail in die Zwischenablage kopiert.",
|
||||||
"flowsOutputUnknown": "Unbekannter Output-Payload-Typ.",
|
"flowsOutputUnknown": "Unbekannter Output-Payload-Typ.",
|
||||||
|
|
@ -1111,7 +1111,7 @@
|
||||||
},
|
},
|
||||||
"doctorApprovalsAttentionPill": "wichtig",
|
"doctorApprovalsAttentionPill": "wichtig",
|
||||||
"doctorServicesEmpty": "Keine Host-Dienste deklariert",
|
"doctorServicesEmpty": "Keine Host-Dienste deklariert",
|
||||||
"doctorServicesEmptyHint": "in ~/.fai/config.yaml unter services: hinzufügen",
|
"doctorServicesEmptyHint": "in ~/.chain/config.yaml unter services: hinzufügen",
|
||||||
"doctorPillLoaded": "geladen",
|
"doctorPillLoaded": "geladen",
|
||||||
"doctorPillEmpty": "leer",
|
"doctorPillEmpty": "leer",
|
||||||
"doctorRecheckTooltip": "Erneut prüfen",
|
"doctorRecheckTooltip": "Erneut prüfen",
|
||||||
|
|
@ -1477,7 +1477,7 @@
|
||||||
"settingsIntegrationsPanelTitle": "Integrationen",
|
"settingsIntegrationsPanelTitle": "Integrationen",
|
||||||
"settingsIntegrationsPanelBody": "Externe Tool-Server, deren Capabilities der Hub föderiert. MCP-Server bieten Tool-Endpunkte; n8n-Endpunkte stellen gehostete Workflows bereit.",
|
"settingsIntegrationsPanelBody": "Externe Tool-Server, deren Capabilities der Hub föderiert. MCP-Server bieten Tool-Endpunkte; n8n-Endpunkte stellen gehostete Workflows bereit.",
|
||||||
"settingsSecurityPanelTitle": "Sicherheit & Zugangsdaten",
|
"settingsSecurityPanelTitle": "Sicherheit & Zugangsdaten",
|
||||||
"settingsSecurityPanelBody": "Tokens, die der Hub für dich verwahrt. Liegen in ~/.fai/ mit Modus 0600; werden nie als Telemetrie versendet.",
|
"settingsSecurityPanelBody": "Tokens, die der Hub für dich verwahrt. Liegen in ~/.chain/ mit Modus 0600; werden nie als Telemetrie versendet.",
|
||||||
"settingsMaintenancePanelTitle": "Wartung",
|
"settingsMaintenancePanelTitle": "Wartung",
|
||||||
"settingsMaintenancePanelBody": "Destruktive Aktionen, abgesichert durch explizite Bestätigungs-Dialoge. Nutzen z.B. beim Re-Pilot-Testen oder Debuggen.",
|
"settingsMaintenancePanelBody": "Destruktive Aktionen, abgesichert durch explizite Bestätigungs-Dialoge. Nutzen z.B. beim Re-Pilot-Testen oder Debuggen.",
|
||||||
"tooltipMoveUp": "Nach oben",
|
"tooltipMoveUp": "Nach oben",
|
||||||
|
|
|
||||||
|
|
@ -40,7 +40,7 @@
|
||||||
"errOutputTooLarge": "Step output exceeded the size limit.",
|
"errOutputTooLarge": "Step output exceeded the size limit.",
|
||||||
"errOutputTooLargeHint": "Either trim the output (truncate text, downsample bytes) or raise `max_output_size_mb` in the operator config.",
|
"errOutputTooLargeHint": "Either trim the output (truncate text, downsample bytes) or raise `max_output_size_mb` in the operator config.",
|
||||||
"errServiceUnavailableForStep": "Host service not configured.",
|
"errServiceUnavailableForStep": "Host service not configured.",
|
||||||
"errServiceUnavailableForStepHint": "The module requires a service (e.g. ollama, playwright) the operator hasn't declared. Add it under `services:` in ~/.fai/config.yaml.",
|
"errServiceUnavailableForStepHint": "The module requires a service (e.g. ollama, playwright) the operator hasn't declared. Add it under `services:` in ~/.chain/config.yaml.",
|
||||||
"errMissingValue": "Required value is missing.",
|
"errMissingValue": "Required value is missing.",
|
||||||
"errMissingValueHint": "The step expected an input that wasn't wired up — either supply it at run time or fix the upstream `$ref`.",
|
"errMissingValueHint": "The step expected an input that wasn't wired up — either supply it at run time or fix the upstream `$ref`.",
|
||||||
"errMcpUnreachable": "MCP endpoint unreachable.",
|
"errMcpUnreachable": "MCP endpoint unreachable.",
|
||||||
|
|
@ -151,7 +151,7 @@
|
||||||
"settingsHubEndpointHint": "Where should Studio connect? Default is the local hub at 127.0.0.1:50051.",
|
"settingsHubEndpointHint": "Where should Studio connect? Default is the local hub at 127.0.0.1:50051.",
|
||||||
"settingsTlsSubtitle": "https/grpc-secure",
|
"settingsTlsSubtitle": "https/grpc-secure",
|
||||||
"settingsPortError": "port must be 1–65535",
|
"settingsPortError": "port must be 1–65535",
|
||||||
"channelsBlurb": "Switch hub channel (writes ~/.fai/current-channel and restarts the daemon). Connect just changes Studio's wire.",
|
"channelsBlurb": "Switch hub channel (writes ~/.chain/current-channel and restarts the daemon). Connect just changes Studio's wire.",
|
||||||
"channelsActionsTooltip": "Channel actions",
|
"channelsActionsTooltip": "Channel actions",
|
||||||
"systemAiHeader": "SYSTEM AI",
|
"systemAiHeader": "SYSTEM AI",
|
||||||
"systemAiEnabled": "enabled",
|
"systemAiEnabled": "enabled",
|
||||||
|
|
@ -436,7 +436,7 @@
|
||||||
"storeOpenRepoButton": "Open repository in browser",
|
"storeOpenRepoButton": "Open repository in browser",
|
||||||
"storeDocsErrorNotFound": "This module is not in the hub's store index.",
|
"storeDocsErrorNotFound": "This module is not in the hub's store index.",
|
||||||
"storeDocsErrorNoDocs": "No repository URL is recorded for this module.",
|
"storeDocsErrorNoDocs": "No repository URL is recorded for this module.",
|
||||||
"storeDocsErrorAuth": "The registry requires authentication to fetch this README. Set FAI_REGISTRY_TOKEN in the daemon's environment and restart the hub.",
|
"storeDocsErrorAuth": "The registry requires authentication to fetch this README. Set CHAIN_REGISTRY_TOKEN in the daemon's environment and restart the hub.",
|
||||||
"storeDocsErrorNetwork": "Network error while fetching the README. {detail}",
|
"storeDocsErrorNetwork": "Network error while fetching the README. {detail}",
|
||||||
"@storeDocsErrorNetwork": {
|
"@storeDocsErrorNetwork": {
|
||||||
"placeholders": {
|
"placeholders": {
|
||||||
|
|
@ -610,7 +610,7 @@
|
||||||
"auditClearLogButton": "Clear log",
|
"auditClearLogButton": "Clear log",
|
||||||
"modulesTitle": "Modules",
|
"modulesTitle": "Modules",
|
||||||
"modulesNoneTitle": "No modules yet",
|
"modulesNoneTitle": "No modules yet",
|
||||||
"modulesNoneHint": "Run `chain install <capability-name>` or check ~/.fai/modules/.",
|
"modulesNoneHint": "Run `chain install <capability-name>` or check ~/.chain/modules/.",
|
||||||
"modulesReloadTooltip": "Reload",
|
"modulesReloadTooltip": "Reload",
|
||||||
"modulesRecentActivity": "RECENT ACTIVITY",
|
"modulesRecentActivity": "RECENT ACTIVITY",
|
||||||
"modulesRecentActivityHint": "last {n} install/uninstall events from the audit log",
|
"modulesRecentActivityHint": "last {n} install/uninstall events from the audit log",
|
||||||
|
|
@ -761,7 +761,7 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"registryCredentialsHeader": "REGISTRY CREDENTIALS",
|
"registryCredentialsHeader": "REGISTRY CREDENTIALS",
|
||||||
"registryCredentialsBlurb": "Token used to download .fai modules from a registry behind a signin wall (Forgejo, GitHub-private). Stored at ~/.fai/registry-token, mode 0600. The FAI_REGISTRY_TOKEN env var still wins when set.",
|
"registryCredentialsBlurb": "Token used to download .fai modules from a registry behind a signin wall (Forgejo, GitHub-private). Stored at ~/.chain/registry-token, mode 0600. The CHAIN_REGISTRY_TOKEN env var still wins when set.",
|
||||||
"registryTokenStatusConfigured": "Configured ({chars} chars)",
|
"registryTokenStatusConfigured": "Configured ({chars} chars)",
|
||||||
"@registryTokenStatusConfigured": {
|
"@registryTokenStatusConfigured": {
|
||||||
"placeholders": {
|
"placeholders": {
|
||||||
|
|
@ -775,7 +775,7 @@
|
||||||
"registryTokenFieldHint": "Paste your Forgejo or GitHub personal access token",
|
"registryTokenFieldHint": "Paste your Forgejo or GitHub personal access token",
|
||||||
"registryTokenSaveButton": "Save",
|
"registryTokenSaveButton": "Save",
|
||||||
"registryTokenClearButton": "Clear",
|
"registryTokenClearButton": "Clear",
|
||||||
"registryTokenStorageHint": "Saved locally to ~/.fai/registry-token. Never sent to a remote service.",
|
"registryTokenStorageHint": "Saved locally to ~/.chain/registry-token. Never sent to a remote service.",
|
||||||
"registryTokenSavedToast": "Registry token saved.",
|
"registryTokenSavedToast": "Registry token saved.",
|
||||||
"registryTokenClearedToast": "Registry token cleared.",
|
"registryTokenClearedToast": "Registry token cleared.",
|
||||||
"registryTokenSaveFailedToast": "Could not save: {error}",
|
"registryTokenSaveFailedToast": "Could not save: {error}",
|
||||||
|
|
@ -787,7 +787,7 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"hubAuthTokenHeader": "HUB AUTHENTICATION",
|
"hubAuthTokenHeader": "HUB AUTHENTICATION",
|
||||||
"hubAuthTokenBlurb": "Bearer token used to authenticate Studio against a hub that has auth.tokens: configured (RBAC Level 2). Stored at ~/.fai/hub-auth-token, mode 0600. Studio sends it as Authorization: Bearer on every gRPC call.",
|
"hubAuthTokenBlurb": "Bearer token used to authenticate Studio against a hub that has auth.tokens: configured (RBAC Level 2). Stored at ~/.chain/hub-auth-token, mode 0600. Studio sends it as Authorization: Bearer on every gRPC call.",
|
||||||
"hubAuthTokenStatusConfigured": "Configured ({chars} chars)",
|
"hubAuthTokenStatusConfigured": "Configured ({chars} chars)",
|
||||||
"@hubAuthTokenStatusConfigured": {
|
"@hubAuthTokenStatusConfigured": {
|
||||||
"placeholders": {
|
"placeholders": {
|
||||||
|
|
@ -801,7 +801,7 @@
|
||||||
"hubAuthTokenFieldHint": "Paste a token from the hub operator's auth.tokens entry",
|
"hubAuthTokenFieldHint": "Paste a token from the hub operator's auth.tokens entry",
|
||||||
"hubAuthTokenSaveButton": "Save",
|
"hubAuthTokenSaveButton": "Save",
|
||||||
"hubAuthTokenClearButton": "Clear",
|
"hubAuthTokenClearButton": "Clear",
|
||||||
"hubAuthTokenStorageHint": "Saved locally to ~/.fai/hub-auth-token. Studio reconnects after save so the new token takes effect immediately.",
|
"hubAuthTokenStorageHint": "Saved locally to ~/.chain/hub-auth-token. Studio reconnects after save so the new token takes effect immediately.",
|
||||||
"hubAuthTokenSavedToast": "Hub auth token saved.",
|
"hubAuthTokenSavedToast": "Hub auth token saved.",
|
||||||
"hubAuthTokenClearedToast": "Hub auth token cleared.",
|
"hubAuthTokenClearedToast": "Hub auth token cleared.",
|
||||||
"hubAuthTokenSaveFailedToast": "Could not save: {error}",
|
"hubAuthTokenSaveFailedToast": "Could not save: {error}",
|
||||||
|
|
@ -833,15 +833,15 @@
|
||||||
"defaultScopeLoadFailed": "Could not load default scope.",
|
"defaultScopeLoadFailed": "Could not load default scope.",
|
||||||
"defaultScopeNonEmptyError": "Default scope cannot be empty — keep at least one segment.",
|
"defaultScopeNonEmptyError": "Default scope cannot be empty — keep at least one segment.",
|
||||||
"maintenanceHeader": "HUB MAINTENANCE",
|
"maintenanceHeader": "HUB MAINTENANCE",
|
||||||
"maintenanceResetBlurb": "Wipe operator state and start over with a clean hub. Stops every running daemon, atomically backs ~/.fai/ up, then recreates it with the binary, channel state, MCP / n8n / system-AI config, and registry token preserved. Restore by moving the backup directory back.",
|
"maintenanceResetBlurb": "Wipe operator state and start over with a clean hub. Stops every running daemon, atomically backs ~/.chain/ up, then recreates it with the binary, channel state, MCP / n8n / system-AI config, and registry token preserved. Restore by moving the backup directory back.",
|
||||||
"maintenanceKeepModulesTitle": "Keep installed modules",
|
"maintenanceKeepModulesTitle": "Keep installed modules",
|
||||||
"maintenanceKeepModulesSubtitle": "Default behaviour wipes ~/.fai/modules/ so a fresh install can verify the module-fetch path end-to-end.",
|
"maintenanceKeepModulesSubtitle": "Default behaviour wipes ~/.chain/modules/ so a fresh install can verify the module-fetch path end-to-end.",
|
||||||
"maintenanceKeepDataTitle": "Keep audit log + saved flows",
|
"maintenanceKeepDataTitle": "Keep audit log + saved flows",
|
||||||
"maintenanceKeepDataSubtitle": "Default behaviour wipes ~/.fai/data/ so the audit chain restarts from a fresh genesis and the bundled sample flows re-import on first daemon start.",
|
"maintenanceKeepDataSubtitle": "Default behaviour wipes ~/.chain/data/ so the audit chain restarts from a fresh genesis and the bundled sample flows re-import on first daemon start.",
|
||||||
"maintenanceResetButton": "Reset hub state",
|
"maintenanceResetButton": "Reset hub state",
|
||||||
"maintenanceResetInProgress": "Resetting…",
|
"maintenanceResetInProgress": "Resetting…",
|
||||||
"maintenanceResetConfirmTitle": "Reset hub state?",
|
"maintenanceResetConfirmTitle": "Reset hub state?",
|
||||||
"maintenanceResetConfirmBody": "This stops every daemon, moves ~/.fai/ to a timestamped backup, and starts fresh. The backup is fully restorable. Continue?",
|
"maintenanceResetConfirmBody": "This stops every daemon, moves ~/.chain/ to a timestamped backup, and starts fresh. The backup is fully restorable. Continue?",
|
||||||
"maintenanceResetConfirmButton": "Reset",
|
"maintenanceResetConfirmButton": "Reset",
|
||||||
"welcomeChecklistAllSetTitle": "You're set up.",
|
"welcomeChecklistAllSetTitle": "You're set up.",
|
||||||
"welcomeChecklistAllSetBody": "Three threads to pull on next:",
|
"welcomeChecklistAllSetBody": "Three threads to pull on next:",
|
||||||
|
|
@ -951,15 +951,15 @@
|
||||||
"errNotFoundHint": "The item you asked for isn't here — it may have been removed or never existed.",
|
"errNotFoundHint": "The item you asked for isn't here — it may have been removed or never existed.",
|
||||||
"errAlreadyExists": "Already exists.",
|
"errAlreadyExists": "Already exists.",
|
||||||
"errPermissionDenied": "Permission denied.",
|
"errPermissionDenied": "Permission denied.",
|
||||||
"errPermissionDeniedHint": "The hub's operator policy blocks this action. Check `~/.fai/config.yaml`.",
|
"errPermissionDeniedHint": "The hub's operator policy blocks this action. Check `~/.chain/config.yaml`.",
|
||||||
"errFailedPrecondition": "Setup issue blocked this.",
|
"errFailedPrecondition": "Setup issue blocked this.",
|
||||||
"errFailedPreconditionHint": "The hub couldn't proceed because something it needs isn't ready. The detail below explains what.",
|
"errFailedPreconditionHint": "The hub couldn't proceed because something it needs isn't ready. The detail below explains what.",
|
||||||
"errInternal": "Unexpected internal error.",
|
"errInternal": "Unexpected internal error.",
|
||||||
"errInternalHint": "Check the hub logs at `~/.fai/logs/`. If this repeats, please report it.",
|
"errInternalHint": "Check the hub logs at `~/.chain/logs/`. If this repeats, please report it.",
|
||||||
"errUnavailable": "Hub not reachable.",
|
"errUnavailable": "Hub not reachable.",
|
||||||
"errUnavailableHint": "Make sure `chain serve` (or `chain daemon start`) is running and the daemon endpoint matches Studio's settings.",
|
"errUnavailableHint": "Make sure `chain serve` (or `chain daemon start`) is running and the daemon endpoint matches Studio's settings.",
|
||||||
"errUnauthenticated": "Authentication required.",
|
"errUnauthenticated": "Authentication required.",
|
||||||
"errUnauthenticatedHint": "Set `FAI_REGISTRY_TOKEN` or sign in through Settings before retrying.",
|
"errUnauthenticatedHint": "Set `CHAIN_REGISTRY_TOKEN` or sign in through Settings before retrying.",
|
||||||
"errCopyDetail": "Copy detail",
|
"errCopyDetail": "Copy detail",
|
||||||
"errDetailCopied": "Detail copied to clipboard.",
|
"errDetailCopied": "Detail copied to clipboard.",
|
||||||
"flowsOutputUnknown": "Output payload variant not recognised.",
|
"flowsOutputUnknown": "Output payload variant not recognised.",
|
||||||
|
|
@ -1114,7 +1114,7 @@
|
||||||
},
|
},
|
||||||
"doctorApprovalsAttentionPill": "attention",
|
"doctorApprovalsAttentionPill": "attention",
|
||||||
"doctorServicesEmpty": "No host services declared",
|
"doctorServicesEmpty": "No host services declared",
|
||||||
"doctorServicesEmptyHint": "add to ~/.fai/config.yaml under services:",
|
"doctorServicesEmptyHint": "add to ~/.chain/config.yaml under services:",
|
||||||
"doctorPillLoaded": "loaded",
|
"doctorPillLoaded": "loaded",
|
||||||
"doctorPillEmpty": "empty",
|
"doctorPillEmpty": "empty",
|
||||||
"doctorRecheckTooltip": "Re-check",
|
"doctorRecheckTooltip": "Re-check",
|
||||||
|
|
@ -1480,7 +1480,7 @@
|
||||||
"settingsIntegrationsPanelTitle": "Integrations",
|
"settingsIntegrationsPanelTitle": "Integrations",
|
||||||
"settingsIntegrationsPanelBody": "External tool servers the hub federates capabilities from. MCP servers expose tool-shaped endpoints; n8n endpoints expose hosted workflows.",
|
"settingsIntegrationsPanelBody": "External tool servers the hub federates capabilities from. MCP servers expose tool-shaped endpoints; n8n endpoints expose hosted workflows.",
|
||||||
"settingsSecurityPanelTitle": "Security & credentials",
|
"settingsSecurityPanelTitle": "Security & credentials",
|
||||||
"settingsSecurityPanelBody": "Tokens the hub holds on the operator's behalf. Stored in ~/.fai/ with mode 0600; never sent in telemetry.",
|
"settingsSecurityPanelBody": "Tokens the hub holds on the operator's behalf. Stored in ~/.chain/ with mode 0600; never sent in telemetry.",
|
||||||
"settingsMaintenancePanelTitle": "Maintenance",
|
"settingsMaintenancePanelTitle": "Maintenance",
|
||||||
"settingsMaintenancePanelBody": "Destructive operations gated behind explicit confirm dialogs. Use when re-pilot-testing or debugging.",
|
"settingsMaintenancePanelBody": "Destructive operations gated behind explicit confirm dialogs. Use when re-pilot-testing or debugging.",
|
||||||
"tooltipMoveUp": "Move up",
|
"tooltipMoveUp": "Move up",
|
||||||
|
|
|
||||||
|
|
@ -323,7 +323,7 @@ abstract class AppLocalizations {
|
||||||
/// No description provided for @errServiceUnavailableForStepHint.
|
/// No description provided for @errServiceUnavailableForStepHint.
|
||||||
///
|
///
|
||||||
/// In en, this message translates to:
|
/// In en, this message translates to:
|
||||||
/// **'The module requires a service (e.g. ollama, playwright) the operator hasn\'t declared. Add it under `services:` in ~/.fai/config.yaml.'**
|
/// **'The module requires a service (e.g. ollama, playwright) the operator hasn\'t declared. Add it under `services:` in ~/.chain/config.yaml.'**
|
||||||
String get errServiceUnavailableForStepHint;
|
String get errServiceUnavailableForStepHint;
|
||||||
|
|
||||||
/// No description provided for @errMissingValue.
|
/// No description provided for @errMissingValue.
|
||||||
|
|
@ -875,7 +875,7 @@ abstract class AppLocalizations {
|
||||||
/// No description provided for @channelsBlurb.
|
/// No description provided for @channelsBlurb.
|
||||||
///
|
///
|
||||||
/// In en, this message translates to:
|
/// In en, this message translates to:
|
||||||
/// **'Switch hub channel (writes ~/.fai/current-channel and restarts the daemon). Connect just changes Studio\'s wire.'**
|
/// **'Switch hub channel (writes ~/.chain/current-channel and restarts the daemon). Connect just changes Studio\'s wire.'**
|
||||||
String get channelsBlurb;
|
String get channelsBlurb;
|
||||||
|
|
||||||
/// No description provided for @channelsActionsTooltip.
|
/// No description provided for @channelsActionsTooltip.
|
||||||
|
|
@ -1649,7 +1649,7 @@ abstract class AppLocalizations {
|
||||||
/// No description provided for @storeDocsErrorAuth.
|
/// No description provided for @storeDocsErrorAuth.
|
||||||
///
|
///
|
||||||
/// In en, this message translates to:
|
/// In en, this message translates to:
|
||||||
/// **'The registry requires authentication to fetch this README. Set FAI_REGISTRY_TOKEN in the daemon\'s environment and restart the hub.'**
|
/// **'The registry requires authentication to fetch this README. Set CHAIN_REGISTRY_TOKEN in the daemon\'s environment and restart the hub.'**
|
||||||
String get storeDocsErrorAuth;
|
String get storeDocsErrorAuth;
|
||||||
|
|
||||||
/// No description provided for @storeDocsErrorNetwork.
|
/// No description provided for @storeDocsErrorNetwork.
|
||||||
|
|
@ -1991,7 +1991,7 @@ abstract class AppLocalizations {
|
||||||
/// No description provided for @modulesNoneHint.
|
/// No description provided for @modulesNoneHint.
|
||||||
///
|
///
|
||||||
/// In en, this message translates to:
|
/// In en, this message translates to:
|
||||||
/// **'Run `chain install <capability-name>` or check ~/.fai/modules/.'**
|
/// **'Run `chain install <capability-name>` or check ~/.chain/modules/.'**
|
||||||
String get modulesNoneHint;
|
String get modulesNoneHint;
|
||||||
|
|
||||||
/// No description provided for @modulesReloadTooltip.
|
/// No description provided for @modulesReloadTooltip.
|
||||||
|
|
@ -2279,7 +2279,7 @@ abstract class AppLocalizations {
|
||||||
/// No description provided for @registryCredentialsBlurb.
|
/// No description provided for @registryCredentialsBlurb.
|
||||||
///
|
///
|
||||||
/// In en, this message translates to:
|
/// In en, this message translates to:
|
||||||
/// **'Token used to download .fai modules from a registry behind a signin wall (Forgejo, GitHub-private). Stored at ~/.fai/registry-token, mode 0600. The FAI_REGISTRY_TOKEN env var still wins when set.'**
|
/// **'Token used to download .fai modules from a registry behind a signin wall (Forgejo, GitHub-private). Stored at ~/.chain/registry-token, mode 0600. The CHAIN_REGISTRY_TOKEN env var still wins when set.'**
|
||||||
String get registryCredentialsBlurb;
|
String get registryCredentialsBlurb;
|
||||||
|
|
||||||
/// No description provided for @registryTokenStatusConfigured.
|
/// No description provided for @registryTokenStatusConfigured.
|
||||||
|
|
@ -2321,7 +2321,7 @@ abstract class AppLocalizations {
|
||||||
/// No description provided for @registryTokenStorageHint.
|
/// No description provided for @registryTokenStorageHint.
|
||||||
///
|
///
|
||||||
/// In en, this message translates to:
|
/// In en, this message translates to:
|
||||||
/// **'Saved locally to ~/.fai/registry-token. Never sent to a remote service.'**
|
/// **'Saved locally to ~/.chain/registry-token. Never sent to a remote service.'**
|
||||||
String get registryTokenStorageHint;
|
String get registryTokenStorageHint;
|
||||||
|
|
||||||
/// No description provided for @registryTokenSavedToast.
|
/// No description provided for @registryTokenSavedToast.
|
||||||
|
|
@ -2351,7 +2351,7 @@ abstract class AppLocalizations {
|
||||||
/// No description provided for @hubAuthTokenBlurb.
|
/// No description provided for @hubAuthTokenBlurb.
|
||||||
///
|
///
|
||||||
/// In en, this message translates to:
|
/// In en, this message translates to:
|
||||||
/// **'Bearer token used to authenticate Studio against a hub that has auth.tokens: configured (RBAC Level 2). Stored at ~/.fai/hub-auth-token, mode 0600. Studio sends it as Authorization: Bearer on every gRPC call.'**
|
/// **'Bearer token used to authenticate Studio against a hub that has auth.tokens: configured (RBAC Level 2). Stored at ~/.chain/hub-auth-token, mode 0600. Studio sends it as Authorization: Bearer on every gRPC call.'**
|
||||||
String get hubAuthTokenBlurb;
|
String get hubAuthTokenBlurb;
|
||||||
|
|
||||||
/// No description provided for @hubAuthTokenStatusConfigured.
|
/// No description provided for @hubAuthTokenStatusConfigured.
|
||||||
|
|
@ -2393,7 +2393,7 @@ abstract class AppLocalizations {
|
||||||
/// No description provided for @hubAuthTokenStorageHint.
|
/// No description provided for @hubAuthTokenStorageHint.
|
||||||
///
|
///
|
||||||
/// In en, this message translates to:
|
/// In en, this message translates to:
|
||||||
/// **'Saved locally to ~/.fai/hub-auth-token. Studio reconnects after save so the new token takes effect immediately.'**
|
/// **'Saved locally to ~/.chain/hub-auth-token. Studio reconnects after save so the new token takes effect immediately.'**
|
||||||
String get hubAuthTokenStorageHint;
|
String get hubAuthTokenStorageHint;
|
||||||
|
|
||||||
/// No description provided for @hubAuthTokenSavedToast.
|
/// No description provided for @hubAuthTokenSavedToast.
|
||||||
|
|
@ -2501,7 +2501,7 @@ abstract class AppLocalizations {
|
||||||
/// No description provided for @maintenanceResetBlurb.
|
/// No description provided for @maintenanceResetBlurb.
|
||||||
///
|
///
|
||||||
/// In en, this message translates to:
|
/// In en, this message translates to:
|
||||||
/// **'Wipe operator state and start over with a clean hub. Stops every running daemon, atomically backs ~/.fai/ up, then recreates it with the binary, channel state, MCP / n8n / system-AI config, and registry token preserved. Restore by moving the backup directory back.'**
|
/// **'Wipe operator state and start over with a clean hub. Stops every running daemon, atomically backs ~/.chain/ up, then recreates it with the binary, channel state, MCP / n8n / system-AI config, and registry token preserved. Restore by moving the backup directory back.'**
|
||||||
String get maintenanceResetBlurb;
|
String get maintenanceResetBlurb;
|
||||||
|
|
||||||
/// No description provided for @maintenanceKeepModulesTitle.
|
/// No description provided for @maintenanceKeepModulesTitle.
|
||||||
|
|
@ -2513,7 +2513,7 @@ abstract class AppLocalizations {
|
||||||
/// No description provided for @maintenanceKeepModulesSubtitle.
|
/// No description provided for @maintenanceKeepModulesSubtitle.
|
||||||
///
|
///
|
||||||
/// In en, this message translates to:
|
/// In en, this message translates to:
|
||||||
/// **'Default behaviour wipes ~/.fai/modules/ so a fresh install can verify the module-fetch path end-to-end.'**
|
/// **'Default behaviour wipes ~/.chain/modules/ so a fresh install can verify the module-fetch path end-to-end.'**
|
||||||
String get maintenanceKeepModulesSubtitle;
|
String get maintenanceKeepModulesSubtitle;
|
||||||
|
|
||||||
/// No description provided for @maintenanceKeepDataTitle.
|
/// No description provided for @maintenanceKeepDataTitle.
|
||||||
|
|
@ -2525,7 +2525,7 @@ abstract class AppLocalizations {
|
||||||
/// No description provided for @maintenanceKeepDataSubtitle.
|
/// No description provided for @maintenanceKeepDataSubtitle.
|
||||||
///
|
///
|
||||||
/// In en, this message translates to:
|
/// In en, this message translates to:
|
||||||
/// **'Default behaviour wipes ~/.fai/data/ so the audit chain restarts from a fresh genesis and the bundled sample flows re-import on first daemon start.'**
|
/// **'Default behaviour wipes ~/.chain/data/ so the audit chain restarts from a fresh genesis and the bundled sample flows re-import on first daemon start.'**
|
||||||
String get maintenanceKeepDataSubtitle;
|
String get maintenanceKeepDataSubtitle;
|
||||||
|
|
||||||
/// No description provided for @maintenanceResetButton.
|
/// No description provided for @maintenanceResetButton.
|
||||||
|
|
@ -2549,7 +2549,7 @@ abstract class AppLocalizations {
|
||||||
/// No description provided for @maintenanceResetConfirmBody.
|
/// No description provided for @maintenanceResetConfirmBody.
|
||||||
///
|
///
|
||||||
/// In en, this message translates to:
|
/// In en, this message translates to:
|
||||||
/// **'This stops every daemon, moves ~/.fai/ to a timestamped backup, and starts fresh. The backup is fully restorable. Continue?'**
|
/// **'This stops every daemon, moves ~/.chain/ to a timestamped backup, and starts fresh. The backup is fully restorable. Continue?'**
|
||||||
String get maintenanceResetConfirmBody;
|
String get maintenanceResetConfirmBody;
|
||||||
|
|
||||||
/// No description provided for @maintenanceResetConfirmButton.
|
/// No description provided for @maintenanceResetConfirmButton.
|
||||||
|
|
@ -2795,7 +2795,7 @@ abstract class AppLocalizations {
|
||||||
/// No description provided for @errPermissionDeniedHint.
|
/// No description provided for @errPermissionDeniedHint.
|
||||||
///
|
///
|
||||||
/// In en, this message translates to:
|
/// In en, this message translates to:
|
||||||
/// **'The hub\'s operator policy blocks this action. Check `~/.fai/config.yaml`.'**
|
/// **'The hub\'s operator policy blocks this action. Check `~/.chain/config.yaml`.'**
|
||||||
String get errPermissionDeniedHint;
|
String get errPermissionDeniedHint;
|
||||||
|
|
||||||
/// No description provided for @errFailedPrecondition.
|
/// No description provided for @errFailedPrecondition.
|
||||||
|
|
@ -2819,7 +2819,7 @@ abstract class AppLocalizations {
|
||||||
/// No description provided for @errInternalHint.
|
/// No description provided for @errInternalHint.
|
||||||
///
|
///
|
||||||
/// In en, this message translates to:
|
/// In en, this message translates to:
|
||||||
/// **'Check the hub logs at `~/.fai/logs/`. If this repeats, please report it.'**
|
/// **'Check the hub logs at `~/.chain/logs/`. If this repeats, please report it.'**
|
||||||
String get errInternalHint;
|
String get errInternalHint;
|
||||||
|
|
||||||
/// No description provided for @errUnavailable.
|
/// No description provided for @errUnavailable.
|
||||||
|
|
@ -2843,7 +2843,7 @@ abstract class AppLocalizations {
|
||||||
/// No description provided for @errUnauthenticatedHint.
|
/// No description provided for @errUnauthenticatedHint.
|
||||||
///
|
///
|
||||||
/// In en, this message translates to:
|
/// In en, this message translates to:
|
||||||
/// **'Set `FAI_REGISTRY_TOKEN` or sign in through Settings before retrying.'**
|
/// **'Set `CHAIN_REGISTRY_TOKEN` or sign in through Settings before retrying.'**
|
||||||
String get errUnauthenticatedHint;
|
String get errUnauthenticatedHint;
|
||||||
|
|
||||||
/// No description provided for @errCopyDetail.
|
/// No description provided for @errCopyDetail.
|
||||||
|
|
@ -3155,7 +3155,7 @@ abstract class AppLocalizations {
|
||||||
/// No description provided for @doctorServicesEmptyHint.
|
/// No description provided for @doctorServicesEmptyHint.
|
||||||
///
|
///
|
||||||
/// In en, this message translates to:
|
/// In en, this message translates to:
|
||||||
/// **'add to ~/.fai/config.yaml under services:'**
|
/// **'add to ~/.chain/config.yaml under services:'**
|
||||||
String get doctorServicesEmptyHint;
|
String get doctorServicesEmptyHint;
|
||||||
|
|
||||||
/// No description provided for @doctorPillLoaded.
|
/// No description provided for @doctorPillLoaded.
|
||||||
|
|
@ -4139,7 +4139,7 @@ abstract class AppLocalizations {
|
||||||
/// No description provided for @settingsSecurityPanelBody.
|
/// No description provided for @settingsSecurityPanelBody.
|
||||||
///
|
///
|
||||||
/// In en, this message translates to:
|
/// In en, this message translates to:
|
||||||
/// **'Tokens the hub holds on the operator\'s behalf. Stored in ~/.fai/ with mode 0600; never sent in telemetry.'**
|
/// **'Tokens the hub holds on the operator\'s behalf. Stored in ~/.chain/ with mode 0600; never sent in telemetry.'**
|
||||||
String get settingsSecurityPanelBody;
|
String get settingsSecurityPanelBody;
|
||||||
|
|
||||||
/// No description provided for @settingsMaintenancePanelTitle.
|
/// No description provided for @settingsMaintenancePanelTitle.
|
||||||
|
|
|
||||||
|
|
@ -138,7 +138,7 @@ class AppLocalizationsDe extends AppLocalizations {
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get errServiceUnavailableForStepHint =>
|
String get errServiceUnavailableForStepHint =>
|
||||||
'Das Modul braucht einen Service (z.B. ollama, playwright), den der Operator nicht deklariert hat. Trage ihn unter `services:` in ~/.fai/config.yaml ein.';
|
'Das Modul braucht einen Service (z.B. ollama, playwright), den der Operator nicht deklariert hat. Trage ihn unter `services:` in ~/.chain/config.yaml ein.';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get errMissingValue => 'Pflichtwert fehlt.';
|
String get errMissingValue => 'Pflichtwert fehlt.';
|
||||||
|
|
@ -448,7 +448,7 @@ class AppLocalizationsDe extends AppLocalizations {
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get channelsBlurb =>
|
String get channelsBlurb =>
|
||||||
'Hub-Kanal wechseln (schreibt ~/.fai/current-channel und startet den Daemon neu). Verbinden ändert nur die Wire von Studio.';
|
'Hub-Kanal wechseln (schreibt ~/.chain/current-channel und startet den Daemon neu). Verbinden ändert nur die Wire von Studio.';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get channelsActionsTooltip => 'Kanal-Aktionen';
|
String get channelsActionsTooltip => 'Kanal-Aktionen';
|
||||||
|
|
@ -901,7 +901,7 @@ class AppLocalizationsDe extends AppLocalizations {
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get storeDocsErrorAuth =>
|
String get storeDocsErrorAuth =>
|
||||||
'Die Registry erfordert Authentifizierung, um dieses README zu laden. Setze FAI_REGISTRY_TOKEN in der Umgebung des Daemons und starte den Hub neu.';
|
'Die Registry erfordert Authentifizierung, um dieses README zu laden. Setze CHAIN_REGISTRY_TOKEN in der Umgebung des Daemons und starte den Hub neu.';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String storeDocsErrorNetwork(String detail) {
|
String storeDocsErrorNetwork(String detail) {
|
||||||
|
|
@ -1125,7 +1125,7 @@ class AppLocalizationsDe extends AppLocalizations {
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get modulesNoneHint =>
|
String get modulesNoneHint =>
|
||||||
'`chain install <capability-name>` ausführen oder ~/.fai/modules/ prüfen.';
|
'`chain install <capability-name>` ausführen oder ~/.chain/modules/ prüfen.';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get modulesReloadTooltip => 'Aktualisieren';
|
String get modulesReloadTooltip => 'Aktualisieren';
|
||||||
|
|
@ -1302,7 +1302,7 @@ class AppLocalizationsDe extends AppLocalizations {
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get registryCredentialsBlurb =>
|
String get registryCredentialsBlurb =>
|
||||||
'Token zum Herunterladen von .fai-Modulen aus einer Registry mit Anmeldepflicht (Forgejo, private GitHub-Repos). Gespeichert in ~/.fai/registry-token, Modus 0600. Die Umgebungsvariable FAI_REGISTRY_TOKEN hat weiterhin Vorrang, wenn gesetzt.';
|
'Token zum Herunterladen von .fai-Modulen aus einer Registry mit Anmeldepflicht (Forgejo, private GitHub-Repos). Gespeichert in ~/.chain/registry-token, Modus 0600. Die Umgebungsvariable CHAIN_REGISTRY_TOKEN hat weiterhin Vorrang, wenn gesetzt.';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String registryTokenStatusConfigured(int chars) {
|
String registryTokenStatusConfigured(int chars) {
|
||||||
|
|
@ -1326,7 +1326,7 @@ class AppLocalizationsDe extends AppLocalizations {
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get registryTokenStorageHint =>
|
String get registryTokenStorageHint =>
|
||||||
'Lokal gespeichert in ~/.fai/registry-token. Wird nie an einen Remote-Dienst übertragen.';
|
'Lokal gespeichert in ~/.chain/registry-token. Wird nie an einen Remote-Dienst übertragen.';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get registryTokenSavedToast => 'Registry-Token gespeichert.';
|
String get registryTokenSavedToast => 'Registry-Token gespeichert.';
|
||||||
|
|
@ -1344,7 +1344,7 @@ class AppLocalizationsDe extends AppLocalizations {
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get hubAuthTokenBlurb =>
|
String get hubAuthTokenBlurb =>
|
||||||
'Bearer-Token für die Studio-Anbindung an einen Hub mit aktivierter auth.tokens-Konfiguration (RBAC Level 2). Gespeichert in ~/.fai/hub-auth-token, Modus 0600. Studio sendet ihn als Authorization: Bearer bei jedem gRPC-Aufruf.';
|
'Bearer-Token für die Studio-Anbindung an einen Hub mit aktivierter auth.tokens-Konfiguration (RBAC Level 2). Gespeichert in ~/.chain/hub-auth-token, Modus 0600. Studio sendet ihn als Authorization: Bearer bei jedem gRPC-Aufruf.';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String hubAuthTokenStatusConfigured(int chars) {
|
String hubAuthTokenStatusConfigured(int chars) {
|
||||||
|
|
@ -1369,7 +1369,7 @@ class AppLocalizationsDe extends AppLocalizations {
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get hubAuthTokenStorageHint =>
|
String get hubAuthTokenStorageHint =>
|
||||||
'Lokal gespeichert in ~/.fai/hub-auth-token. Studio verbindet nach dem Speichern automatisch neu, der Token wirkt sofort.';
|
'Lokal gespeichert in ~/.chain/hub-auth-token. Studio verbindet nach dem Speichern automatisch neu, der Token wirkt sofort.';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get hubAuthTokenSavedToast => 'Hub-Token gespeichert.';
|
String get hubAuthTokenSavedToast => 'Hub-Token gespeichert.';
|
||||||
|
|
@ -1432,14 +1432,14 @@ class AppLocalizationsDe extends AppLocalizations {
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get maintenanceResetBlurb =>
|
String get maintenanceResetBlurb =>
|
||||||
'Operator-Zustand zurücksetzen und mit einem sauberen Hub neu starten. Stoppt jeden laufenden Daemon, sichert ~/.fai/ atomar in ein Backup, legt es dann neu an — Binary, Channel-Pointer, MCP-/n8n-/System-AI-Konfiguration und Registry-Token bleiben erhalten. Wiederherstellen durch Zurückverschieben des Backup-Ordners.';
|
'Operator-Zustand zurücksetzen und mit einem sauberen Hub neu starten. Stoppt jeden laufenden Daemon, sichert ~/.chain/ atomar in ein Backup, legt es dann neu an — Binary, Channel-Pointer, MCP-/n8n-/System-AI-Konfiguration und Registry-Token bleiben erhalten. Wiederherstellen durch Zurückverschieben des Backup-Ordners.';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get maintenanceKeepModulesTitle => 'Installierte Module behalten';
|
String get maintenanceKeepModulesTitle => 'Installierte Module behalten';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get maintenanceKeepModulesSubtitle =>
|
String get maintenanceKeepModulesSubtitle =>
|
||||||
'Standardverhalten löscht ~/.fai/modules/, damit eine frische Installation den Modul-Bezugspfad end-to-end verifizieren kann.';
|
'Standardverhalten löscht ~/.chain/modules/, damit eine frische Installation den Modul-Bezugspfad end-to-end verifizieren kann.';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get maintenanceKeepDataTitle =>
|
String get maintenanceKeepDataTitle =>
|
||||||
|
|
@ -1447,7 +1447,7 @@ class AppLocalizationsDe extends AppLocalizations {
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get maintenanceKeepDataSubtitle =>
|
String get maintenanceKeepDataSubtitle =>
|
||||||
'Standardverhalten löscht ~/.fai/data/, damit die Audit-Kette mit einer neuen Genesis startet und die mitgelieferten Sample-Flows beim ersten Daemon-Start neu importiert werden.';
|
'Standardverhalten löscht ~/.chain/data/, damit die Audit-Kette mit einer neuen Genesis startet und die mitgelieferten Sample-Flows beim ersten Daemon-Start neu importiert werden.';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get maintenanceResetButton => 'Hub zurücksetzen';
|
String get maintenanceResetButton => 'Hub zurücksetzen';
|
||||||
|
|
@ -1460,7 +1460,7 @@ class AppLocalizationsDe extends AppLocalizations {
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get maintenanceResetConfirmBody =>
|
String get maintenanceResetConfirmBody =>
|
||||||
'Stoppt jeden Daemon, verschiebt ~/.fai/ in ein Backup mit Zeitstempel und startet sauber neu. Das Backup ist vollständig wiederherstellbar. Fortfahren?';
|
'Stoppt jeden Daemon, verschiebt ~/.chain/ in ein Backup mit Zeitstempel und startet sauber neu. Das Backup ist vollständig wiederherstellbar. Fortfahren?';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get maintenanceResetConfirmButton => 'Zurücksetzen';
|
String get maintenanceResetConfirmButton => 'Zurücksetzen';
|
||||||
|
|
@ -1614,7 +1614,7 @@ class AppLocalizationsDe extends AppLocalizations {
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get errPermissionDeniedHint =>
|
String get errPermissionDeniedHint =>
|
||||||
'Die Operator-Policy des Hubs blockiert diese Aktion. `~/.fai/config.yaml` prüfen.';
|
'Die Operator-Policy des Hubs blockiert diese Aktion. `~/.chain/config.yaml` prüfen.';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get errFailedPrecondition => 'Setup-Problem hat das blockiert.';
|
String get errFailedPrecondition => 'Setup-Problem hat das blockiert.';
|
||||||
|
|
@ -1628,7 +1628,7 @@ class AppLocalizationsDe extends AppLocalizations {
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get errInternalHint =>
|
String get errInternalHint =>
|
||||||
'Hub-Logs unter `~/.fai/logs/` prüfen. Wenn das öfter passiert, bitte melden.';
|
'Hub-Logs unter `~/.chain/logs/` prüfen. Wenn das öfter passiert, bitte melden.';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get errUnavailable => 'Hub nicht erreichbar.';
|
String get errUnavailable => 'Hub nicht erreichbar.';
|
||||||
|
|
@ -1642,7 +1642,7 @@ class AppLocalizationsDe extends AppLocalizations {
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get errUnauthenticatedHint =>
|
String get errUnauthenticatedHint =>
|
||||||
'`FAI_REGISTRY_TOKEN` setzen oder in den Einstellungen anmelden, dann erneut versuchen.';
|
'`CHAIN_REGISTRY_TOKEN` setzen oder in den Einstellungen anmelden, dann erneut versuchen.';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get errCopyDetail => 'Detail kopieren';
|
String get errCopyDetail => 'Detail kopieren';
|
||||||
|
|
@ -1834,7 +1834,7 @@ class AppLocalizationsDe extends AppLocalizations {
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get doctorServicesEmptyHint =>
|
String get doctorServicesEmptyHint =>
|
||||||
'in ~/.fai/config.yaml unter services: hinzufügen';
|
'in ~/.chain/config.yaml unter services: hinzufügen';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get doctorPillLoaded => 'geladen';
|
String get doctorPillLoaded => 'geladen';
|
||||||
|
|
@ -2421,7 +2421,7 @@ class AppLocalizationsDe extends AppLocalizations {
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get settingsSecurityPanelBody =>
|
String get settingsSecurityPanelBody =>
|
||||||
'Tokens, die der Hub für dich verwahrt. Liegen in ~/.fai/ mit Modus 0600; werden nie als Telemetrie versendet.';
|
'Tokens, die der Hub für dich verwahrt. Liegen in ~/.chain/ mit Modus 0600; werden nie als Telemetrie versendet.';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get settingsMaintenancePanelTitle => 'Wartung';
|
String get settingsMaintenancePanelTitle => 'Wartung';
|
||||||
|
|
|
||||||
|
|
@ -137,7 +137,7 @@ class AppLocalizationsEn extends AppLocalizations {
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get errServiceUnavailableForStepHint =>
|
String get errServiceUnavailableForStepHint =>
|
||||||
'The module requires a service (e.g. ollama, playwright) the operator hasn\'t declared. Add it under `services:` in ~/.fai/config.yaml.';
|
'The module requires a service (e.g. ollama, playwright) the operator hasn\'t declared. Add it under `services:` in ~/.chain/config.yaml.';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get errMissingValue => 'Required value is missing.';
|
String get errMissingValue => 'Required value is missing.';
|
||||||
|
|
@ -448,7 +448,7 @@ class AppLocalizationsEn extends AppLocalizations {
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get channelsBlurb =>
|
String get channelsBlurb =>
|
||||||
'Switch hub channel (writes ~/.fai/current-channel and restarts the daemon). Connect just changes Studio\'s wire.';
|
'Switch hub channel (writes ~/.chain/current-channel and restarts the daemon). Connect just changes Studio\'s wire.';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get channelsActionsTooltip => 'Channel actions';
|
String get channelsActionsTooltip => 'Channel actions';
|
||||||
|
|
@ -919,7 +919,7 @@ class AppLocalizationsEn extends AppLocalizations {
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get storeDocsErrorAuth =>
|
String get storeDocsErrorAuth =>
|
||||||
'The registry requires authentication to fetch this README. Set FAI_REGISTRY_TOKEN in the daemon\'s environment and restart the hub.';
|
'The registry requires authentication to fetch this README. Set CHAIN_REGISTRY_TOKEN in the daemon\'s environment and restart the hub.';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String storeDocsErrorNetwork(String detail) {
|
String storeDocsErrorNetwork(String detail) {
|
||||||
|
|
@ -1140,7 +1140,7 @@ class AppLocalizationsEn extends AppLocalizations {
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get modulesNoneHint =>
|
String get modulesNoneHint =>
|
||||||
'Run `chain install <capability-name>` or check ~/.fai/modules/.';
|
'Run `chain install <capability-name>` or check ~/.chain/modules/.';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get modulesReloadTooltip => 'Reload';
|
String get modulesReloadTooltip => 'Reload';
|
||||||
|
|
@ -1315,7 +1315,7 @@ class AppLocalizationsEn extends AppLocalizations {
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get registryCredentialsBlurb =>
|
String get registryCredentialsBlurb =>
|
||||||
'Token used to download .fai modules from a registry behind a signin wall (Forgejo, GitHub-private). Stored at ~/.fai/registry-token, mode 0600. The FAI_REGISTRY_TOKEN env var still wins when set.';
|
'Token used to download .fai modules from a registry behind a signin wall (Forgejo, GitHub-private). Stored at ~/.chain/registry-token, mode 0600. The CHAIN_REGISTRY_TOKEN env var still wins when set.';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String registryTokenStatusConfigured(int chars) {
|
String registryTokenStatusConfigured(int chars) {
|
||||||
|
|
@ -1340,7 +1340,7 @@ class AppLocalizationsEn extends AppLocalizations {
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get registryTokenStorageHint =>
|
String get registryTokenStorageHint =>
|
||||||
'Saved locally to ~/.fai/registry-token. Never sent to a remote service.';
|
'Saved locally to ~/.chain/registry-token. Never sent to a remote service.';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get registryTokenSavedToast => 'Registry token saved.';
|
String get registryTokenSavedToast => 'Registry token saved.';
|
||||||
|
|
@ -1358,7 +1358,7 @@ class AppLocalizationsEn extends AppLocalizations {
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get hubAuthTokenBlurb =>
|
String get hubAuthTokenBlurb =>
|
||||||
'Bearer token used to authenticate Studio against a hub that has auth.tokens: configured (RBAC Level 2). Stored at ~/.fai/hub-auth-token, mode 0600. Studio sends it as Authorization: Bearer on every gRPC call.';
|
'Bearer token used to authenticate Studio against a hub that has auth.tokens: configured (RBAC Level 2). Stored at ~/.chain/hub-auth-token, mode 0600. Studio sends it as Authorization: Bearer on every gRPC call.';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String hubAuthTokenStatusConfigured(int chars) {
|
String hubAuthTokenStatusConfigured(int chars) {
|
||||||
|
|
@ -1383,7 +1383,7 @@ class AppLocalizationsEn extends AppLocalizations {
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get hubAuthTokenStorageHint =>
|
String get hubAuthTokenStorageHint =>
|
||||||
'Saved locally to ~/.fai/hub-auth-token. Studio reconnects after save so the new token takes effect immediately.';
|
'Saved locally to ~/.chain/hub-auth-token. Studio reconnects after save so the new token takes effect immediately.';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get hubAuthTokenSavedToast => 'Hub auth token saved.';
|
String get hubAuthTokenSavedToast => 'Hub auth token saved.';
|
||||||
|
|
@ -1445,21 +1445,21 @@ class AppLocalizationsEn extends AppLocalizations {
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get maintenanceResetBlurb =>
|
String get maintenanceResetBlurb =>
|
||||||
'Wipe operator state and start over with a clean hub. Stops every running daemon, atomically backs ~/.fai/ up, then recreates it with the binary, channel state, MCP / n8n / system-AI config, and registry token preserved. Restore by moving the backup directory back.';
|
'Wipe operator state and start over with a clean hub. Stops every running daemon, atomically backs ~/.chain/ up, then recreates it with the binary, channel state, MCP / n8n / system-AI config, and registry token preserved. Restore by moving the backup directory back.';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get maintenanceKeepModulesTitle => 'Keep installed modules';
|
String get maintenanceKeepModulesTitle => 'Keep installed modules';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get maintenanceKeepModulesSubtitle =>
|
String get maintenanceKeepModulesSubtitle =>
|
||||||
'Default behaviour wipes ~/.fai/modules/ so a fresh install can verify the module-fetch path end-to-end.';
|
'Default behaviour wipes ~/.chain/modules/ so a fresh install can verify the module-fetch path end-to-end.';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get maintenanceKeepDataTitle => 'Keep audit log + saved flows';
|
String get maintenanceKeepDataTitle => 'Keep audit log + saved flows';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get maintenanceKeepDataSubtitle =>
|
String get maintenanceKeepDataSubtitle =>
|
||||||
'Default behaviour wipes ~/.fai/data/ so the audit chain restarts from a fresh genesis and the bundled sample flows re-import on first daemon start.';
|
'Default behaviour wipes ~/.chain/data/ so the audit chain restarts from a fresh genesis and the bundled sample flows re-import on first daemon start.';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get maintenanceResetButton => 'Reset hub state';
|
String get maintenanceResetButton => 'Reset hub state';
|
||||||
|
|
@ -1472,7 +1472,7 @@ class AppLocalizationsEn extends AppLocalizations {
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get maintenanceResetConfirmBody =>
|
String get maintenanceResetConfirmBody =>
|
||||||
'This stops every daemon, moves ~/.fai/ to a timestamped backup, and starts fresh. The backup is fully restorable. Continue?';
|
'This stops every daemon, moves ~/.chain/ to a timestamped backup, and starts fresh. The backup is fully restorable. Continue?';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get maintenanceResetConfirmButton => 'Reset';
|
String get maintenanceResetConfirmButton => 'Reset';
|
||||||
|
|
@ -1624,7 +1624,7 @@ class AppLocalizationsEn extends AppLocalizations {
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get errPermissionDeniedHint =>
|
String get errPermissionDeniedHint =>
|
||||||
'The hub\'s operator policy blocks this action. Check `~/.fai/config.yaml`.';
|
'The hub\'s operator policy blocks this action. Check `~/.chain/config.yaml`.';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get errFailedPrecondition => 'Setup issue blocked this.';
|
String get errFailedPrecondition => 'Setup issue blocked this.';
|
||||||
|
|
@ -1638,7 +1638,7 @@ class AppLocalizationsEn extends AppLocalizations {
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get errInternalHint =>
|
String get errInternalHint =>
|
||||||
'Check the hub logs at `~/.fai/logs/`. If this repeats, please report it.';
|
'Check the hub logs at `~/.chain/logs/`. If this repeats, please report it.';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get errUnavailable => 'Hub not reachable.';
|
String get errUnavailable => 'Hub not reachable.';
|
||||||
|
|
@ -1652,7 +1652,7 @@ class AppLocalizationsEn extends AppLocalizations {
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get errUnauthenticatedHint =>
|
String get errUnauthenticatedHint =>
|
||||||
'Set `FAI_REGISTRY_TOKEN` or sign in through Settings before retrying.';
|
'Set `CHAIN_REGISTRY_TOKEN` or sign in through Settings before retrying.';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get errCopyDetail => 'Copy detail';
|
String get errCopyDetail => 'Copy detail';
|
||||||
|
|
@ -1843,7 +1843,7 @@ class AppLocalizationsEn extends AppLocalizations {
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get doctorServicesEmptyHint =>
|
String get doctorServicesEmptyHint =>
|
||||||
'add to ~/.fai/config.yaml under services:';
|
'add to ~/.chain/config.yaml under services:';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get doctorPillLoaded => 'loaded';
|
String get doctorPillLoaded => 'loaded';
|
||||||
|
|
@ -2425,7 +2425,7 @@ class AppLocalizationsEn extends AppLocalizations {
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get settingsSecurityPanelBody =>
|
String get settingsSecurityPanelBody =>
|
||||||
'Tokens the hub holds on the operator\'s behalf. Stored in ~/.fai/ with mode 0600; never sent in telemetry.';
|
'Tokens the hub holds on the operator\'s behalf. Stored in ~/.chain/ with mode 0600; never sent in telemetry.';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get settingsMaintenancePanelTitle => 'Maintenance';
|
String get settingsMaintenancePanelTitle => 'Maintenance';
|
||||||
|
|
|
||||||
|
|
@ -481,7 +481,7 @@ class _PathRow extends StatelessWidget {
|
||||||
|
|
||||||
/// Daemon control affordances: Restart, Apply update, Stop.
|
/// Daemon control affordances: Restart, Apply update, Stop.
|
||||||
/// Each shells out to the `fai` binary (resolved via PATH or
|
/// Each shells out to the `fai` binary (resolved via PATH or
|
||||||
/// `~/.fai/bin/chain`). Studio is the GUI shell; the binary owns
|
/// `~/.chain/bin/chain`). Studio is the GUI shell; the binary owns
|
||||||
/// the supervisor logic so the daemon and CLI stay in lockstep.
|
/// the supervisor logic so the daemon and CLI stay in lockstep.
|
||||||
class _DaemonActionsCard extends StatefulWidget {
|
class _DaemonActionsCard extends StatefulWidget {
|
||||||
@override
|
@override
|
||||||
|
|
@ -817,7 +817,7 @@ class _ServicesPanel extends StatelessWidget {
|
||||||
final l = AppLocalizations.of(context)!;
|
final l = AppLocalizations.of(context)!;
|
||||||
if (snapshot.services.isEmpty) {
|
if (snapshot.services.isEmpty) {
|
||||||
// Wrap on narrow windows so the mono-spaced hint
|
// Wrap on narrow windows so the mono-spaced hint
|
||||||
// (`add to ~/.fai/config.yaml under services:`) does not
|
// (`add to ~/.chain/config.yaml under services:`) does not
|
||||||
// overflow horizontally past the card's right edge.
|
// overflow horizontally past the card's right edge.
|
||||||
return FaiCard(
|
return FaiCard(
|
||||||
child: Wrap(
|
child: Wrap(
|
||||||
|
|
|
||||||
|
|
@ -57,7 +57,7 @@ class _StorePageState extends State<StorePage> {
|
||||||
bool _todayDismissed = false;
|
bool _todayDismissed = false;
|
||||||
|
|
||||||
/// The carousel of stories rendered in the hero. When an
|
/// The carousel of stories rendered in the hero. When an
|
||||||
/// operator-accepted story exists at `~/.fai/today/active.yaml`,
|
/// operator-accepted story exists at `~/.chain/today/active.yaml`,
|
||||||
/// it is the only entry (carousel collapses to a single
|
/// it is the only entry (carousel collapses to a single
|
||||||
/// slide). Otherwise the curated fallback list rotates.
|
/// slide). Otherwise the curated fallback list rotates.
|
||||||
late final List<TodayStoryData> _todayStories = (() {
|
late final List<TodayStoryData> _todayStories = (() {
|
||||||
|
|
@ -2991,7 +2991,7 @@ class _ScreenshotPlaceholder extends StatelessWidget {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Compiled-in fallback stories shown when
|
/// Compiled-in fallback stories shown when
|
||||||
/// `~/.fai/today/active.yaml` is absent or fails schema
|
/// `~/.chain/today/active.yaml` is absent or fails schema
|
||||||
/// validation. Operator can override at any time without
|
/// validation. Operator can override at any time without
|
||||||
/// recompiling Studio — see docs/today-pipeline.md. When the
|
/// recompiling Studio — see docs/today-pipeline.md. When the
|
||||||
/// operator accepts a story, that single story becomes the
|
/// operator accepts a story, that single story becomes the
|
||||||
|
|
@ -3082,9 +3082,9 @@ const List<TodayStoryData> _kFallbackTodayStories = <TodayStoryData>[
|
||||||
titleEn: 'Tamper-evident hash chain — built in',
|
titleEn: 'Tamper-evident hash chain — built in',
|
||||||
titleDe: 'Manipulationssicher per Hash-Kette — eingebaut',
|
titleDe: 'Manipulationssicher per Hash-Kette — eingebaut',
|
||||||
bodyEn:
|
bodyEn:
|
||||||
'Every flow run, every install, every approval lands in ~/.fai/audit/ as a hash-chained event log. Any later edit invalidates the chain. CRA-ready out of the box — no compliance product to buy on top.',
|
'Every flow run, every install, every approval lands in ~/.chain/audit/ as a hash-chained event log. Any later edit invalidates the chain. CRA-ready out of the box — no compliance product to buy on top.',
|
||||||
bodyDe:
|
bodyDe:
|
||||||
'Jeder Flow-Lauf, jede Installation, jede Freigabe landet in ~/.fai/audit/ als hash-verkettetes Event-Log. Jede spätere Änderung bricht die Kette. CRA-tauglich von Haus aus — kein Compliance-Produkt zum Aufkaufen nötig.',
|
'Jeder Flow-Lauf, jede Installation, jede Freigabe landet in ~/.chain/audit/ als hash-verkettetes Event-Log. Jede spätere Änderung bricht die Kette. CRA-tauglich von Haus aus — kein Compliance-Produkt zum Aufkaufen nötig.',
|
||||||
ctaLabelEn: '',
|
ctaLabelEn: '',
|
||||||
ctaLabelDe: '',
|
ctaLabelDe: '',
|
||||||
icon: Icons.timeline_outlined,
|
icon: Icons.timeline_outlined,
|
||||||
|
|
@ -3110,9 +3110,9 @@ const List<TodayStoryData> _kFallbackTodayStories = <TodayStoryData>[
|
||||||
titleEn: 'Build a module in a single Rust file',
|
titleEn: 'Build a module in a single Rust file',
|
||||||
titleDe: 'Ein Modul in einer einzigen Rust-Datei bauen',
|
titleDe: 'Ein Modul in einer einzigen Rust-Datei bauen',
|
||||||
bodyEn:
|
bodyEn:
|
||||||
'fai-module-sdk gives you a #[fai::module] macro and a Cargo target. Declare inputs / outputs in module.yaml, write the function, cargo build, drop the wasm in ~/.fai/modules. The hub picks it up at next list. Polyglot SDKs follow in Phase 1.',
|
'fai-module-sdk gives you a #[fai::module] macro and a Cargo target. Declare inputs / outputs in module.yaml, write the function, cargo build, drop the wasm in ~/.chain/modules. The hub picks it up at next list. Polyglot SDKs follow in Phase 1.',
|
||||||
bodyDe:
|
bodyDe:
|
||||||
'fai-module-sdk liefert ein #[fai::module]-Makro und ein Cargo-Target. Inputs / Outputs in module.yaml deklarieren, Funktion schreiben, cargo build, das wasm in ~/.fai/modules legen. Der Hub erkennt es beim nächsten Listing. Polyglott-SDKs folgen in Phase 1.',
|
'fai-module-sdk liefert ein #[fai::module]-Makro und ein Cargo-Target. Inputs / Outputs in module.yaml deklarieren, Funktion schreiben, cargo build, das wasm in ~/.chain/modules legen. Der Hub erkennt es beim nächsten Listing. Polyglott-SDKs folgen in Phase 1.',
|
||||||
ctaLabelEn: '',
|
ctaLabelEn: '',
|
||||||
ctaLabelDe: '',
|
ctaLabelDe: '',
|
||||||
icon: Icons.code_outlined,
|
icon: Icons.code_outlined,
|
||||||
|
|
|
||||||
|
|
@ -1123,7 +1123,7 @@ class _DocReaderError {
|
||||||
});
|
});
|
||||||
|
|
||||||
String get forgejoUrl =>
|
String get forgejoUrl =>
|
||||||
'https://git.flemming.ai/fai/platform/src/branch/main/docs/architecture/$slug.md';
|
'https://git.flemming.ai/fai/chain/src/branch/main/docs/architecture/$slug.md';
|
||||||
|
|
||||||
/// Localized, operator-facing failure body. Use this for any
|
/// Localized, operator-facing failure body. Use this for any
|
||||||
/// on-screen rendering; [toString] stays English for logs.
|
/// on-screen rendering; [toString] stays English for logs.
|
||||||
|
|
|
||||||
|
|
@ -4,10 +4,10 @@
|
||||||
// Use [showFaiLogViewer] to open it. Two log shapes are supported
|
// Use [showFaiLogViewer] to open it. Two log shapes are supported
|
||||||
// out of the box:
|
// out of the box:
|
||||||
//
|
//
|
||||||
// - JSON-per-line (Studio's `~/.fai/logs/studio-errors.log`):
|
// - JSON-per-line (Studio's `~/.chain/logs/studio-errors.log`):
|
||||||
// fields `ts`, `level`, `source`, `error` get distinct colours;
|
// fields `ts`, `level`, `source`, `error` get distinct colours;
|
||||||
// anything else renders neutral.
|
// anything else renders neutral.
|
||||||
// - tracing text (the daemon's `~/.fai/run/<channel>.log`):
|
// - tracing text (the daemon's `~/.chain/run/<channel>.log`):
|
||||||
// `[INFO]`, `[WARN]`, `[ERROR]`, `[DEBUG]` substrings get the
|
// `[INFO]`, `[WARN]`, `[ERROR]`, `[DEBUG]` substrings get the
|
||||||
// matching tone from the FaiTheme palette.
|
// matching tone from the FaiTheme palette.
|
||||||
//
|
//
|
||||||
|
|
|
||||||
|
|
@ -54,12 +54,12 @@ class _FaiSettingsDialogState extends State<FaiSettingsDialog> {
|
||||||
_Category _category = _Category.general;
|
_Category _category = _Category.general;
|
||||||
|
|
||||||
/// Length of the configured registry token, or null when the
|
/// Length of the configured registry token, or null when the
|
||||||
/// `~/.fai/registry-token` file is missing / empty. Reloaded
|
/// `~/.chain/registry-token` file is missing / empty. Reloaded
|
||||||
/// after save / clear.
|
/// after save / clear.
|
||||||
int? _registryTokenChars;
|
int? _registryTokenChars;
|
||||||
|
|
||||||
/// Length of the configured hub gRPC bearer token, or null
|
/// Length of the configured hub gRPC bearer token, or null
|
||||||
/// when `~/.fai/hub-auth-token` is missing / empty. Reloaded
|
/// when `~/.chain/hub-auth-token` is missing / empty. Reloaded
|
||||||
/// after save / clear; UI only ever sees the trimmed length.
|
/// after save / clear; UI only ever sees the trimmed length.
|
||||||
int? _hubAuthTokenChars;
|
int? _hubAuthTokenChars;
|
||||||
|
|
||||||
|
|
@ -1822,8 +1822,8 @@ class _MaintenancePanelState extends State<_MaintenancePanel> {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Credentials panel for the operator's registry auth token.
|
/// Credentials panel for the operator's registry auth token.
|
||||||
/// The hub reads the same token via `~/.fai/registry-token`
|
/// The hub reads the same token via `~/.chain/registry-token`
|
||||||
/// (or the `FAI_REGISTRY_TOKEN` env var, which still wins)
|
/// (or the `CHAIN_REGISTRY_TOKEN` env var, which still wins)
|
||||||
/// when downloading `.fai` bundles from a registry behind a
|
/// when downloading `.fai` bundles from a registry behind a
|
||||||
/// signin wall — Forgejo with REQUIRE_SIGNIN_VIEW=true,
|
/// signin wall — Forgejo with REQUIRE_SIGNIN_VIEW=true,
|
||||||
/// GitHub-private releases, etc.
|
/// GitHub-private releases, etc.
|
||||||
|
|
@ -1976,7 +1976,7 @@ class _RegistryCredentialsPanelState extends State<_RegistryCredentialsPanel> {
|
||||||
/// Operator panel for the hub's gRPC bearer token. When the
|
/// Operator panel for the hub's gRPC bearer token. When the
|
||||||
/// hub has `auth.tokens:` configured, Studio must present
|
/// hub has `auth.tokens:` configured, Studio must present
|
||||||
/// `Authorization: Bearer <token>` on every call. The token
|
/// `Authorization: Bearer <token>` on every call. The token
|
||||||
/// is stored at `~/.fai/hub-auth-token` (mode 0600) and read
|
/// is stored at `~/.chain/hub-auth-token` (mode 0600) and read
|
||||||
/// at startup by [HubService]; this panel just lets the
|
/// at startup by [HubService]; this panel just lets the
|
||||||
/// operator paste / clear without leaving the GUI.
|
/// operator paste / clear without leaving the GUI.
|
||||||
///
|
///
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
// System AI from inside Studio. Mirrors the YAML block but with
|
// System AI from inside Studio. Mirrors the YAML block but with
|
||||||
// provider presets, in-place explainers, and a "Test connection"
|
// provider presets, in-place explainers, and a "Test connection"
|
||||||
// button. On save, calls HubAdmin.UpdateSystemAi which both
|
// button. On save, calls HubAdmin.UpdateSystemAi which both
|
||||||
// persists to ~/.fai/config.yaml and hot-reloads the live hub.
|
// persists to ~/.chain/config.yaml and hot-reloads the live hub.
|
||||||
|
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue