From 0f93d909637feef1a114757c2f48a215b6ed351f Mon Sep 17 00:00:00 2001 From: flemming-it Date: Tue, 16 Jun 2026 09:38:30 +0200 Subject: [PATCH] fix(studio): chain config dir + spawn path + doc URLs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- lib/data/error_presentation.dart | 2 +- lib/data/fai_log.dart | 2 +- lib/data/hub.dart | 6 ++--- lib/data/hub_auth_token.dart | 6 ++--- lib/data/registry_token.dart | 6 ++--- lib/data/system_actions.dart | 12 +++++----- lib/data/today_story_loader.dart | 4 ++-- lib/l10n/app_de.arb | 34 +++++++++++++-------------- lib/l10n/app_en.arb | 34 +++++++++++++-------------- lib/l10n/app_localizations.dart | 34 +++++++++++++-------------- lib/l10n/app_localizations_de.dart | 34 +++++++++++++-------------- lib/l10n/app_localizations_en.dart | 34 +++++++++++++-------------- lib/pages/doctor.dart | 4 ++-- lib/pages/store.dart | 12 +++++----- lib/pages/welcome.dart | 2 +- lib/widgets/fai_log_viewer.dart | 4 ++-- lib/widgets/fai_settings_dialog.dart | 10 ++++---- lib/widgets/fai_system_ai_editor.dart | 2 +- 18 files changed, 121 insertions(+), 121 deletions(-) diff --git a/lib/data/error_presentation.dart b/lib/data/error_presentation.dart index 131f5e6..8c815ec 100644 --- a/lib/data/error_presentation.dart +++ b/lib/data/error_presentation.dart @@ -6,7 +6,7 @@ // • a copyable, selectable rendition of the message // • a friendly headline (gRPC codes mapped via // 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 // // Call sites used to scatter `ScaffoldMessenger.of(ctx).showSnackBar( diff --git a/lib/data/fai_log.dart b/lib/data/fai_log.dart index e442e8f..6e87647 100644 --- a/lib/data/fai_log.dart +++ b/lib/data/fai_log.dart @@ -4,7 +4,7 @@ // went wrong without the operator having to reproduce the // 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 // `chain doctor` can parse it; humans can still read it because // the JSON is single-line and short. diff --git a/lib/data/hub.dart b/lib/data/hub.dart index 0de2e2d..93abcf4 100644 --- a/lib/data/hub.dart +++ b/lib/data/hub.dart @@ -55,7 +55,7 @@ class HubService { } /// 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, /// or omit the parameter to keep the current value. Future reconnect( @@ -241,7 +241,7 @@ class HubService { } /// 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 /// for an immediate UI refresh. Future updateSystemAi({ @@ -449,7 +449,7 @@ class HubService { /// Read the installed module's `MODULE.md` (or /// `MODULE..md`) from disk under - /// `~/.fai/modules//`. Air-gap friendly, no network. + /// `~/.chain/modules//`. Air-gap friendly, no network. /// /// `state` is one of: /// - `'found'` — `text` holds the markdown diff --git a/lib/data/hub_auth_token.dart b/lib/data/hub_auth_token.dart index f9f9375..7ef92f5 100644 --- a/lib/data/hub_auth_token.dart +++ b/lib/data/hub_auth_token.dart @@ -3,7 +3,7 @@ import 'package:path/path.dart' as p; /// Operator-managed gRPC bearer token used to authenticate /// 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 /// hygiene, different secret. /// @@ -55,7 +55,7 @@ class HubAuthToken { 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 `.tmp`, chmods 0600 on /// Unix BEFORE moving into place, then renames. This @@ -63,7 +63,7 @@ class HubAuthToken { /// `writeAsString` + later `chmod 600` sequence left the /// 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 /// enumerate the directory (the 0600 token-file mode is /// fine in isolation; combining it with a 0755 parent diff --git a/lib/data/registry_token.dart b/lib/data/registry_token.dart index b20a02c..dde1799 100644 --- a/lib/data/registry_token.dart +++ b/lib/data/registry_token.dart @@ -2,8 +2,8 @@ import 'dart:io'; import 'package:path/path.dart' as p; /// Operator-managed registry auth token, kept at -/// `~/.fai/registry-token` (mode 0600 on Unix). The hub reads -/// this file at install time when `FAI_REGISTRY_TOKEN` is unset +/// `~/.chain/registry-token` (mode 0600 on Unix). The hub reads +/// this file at install time when `CHAIN_REGISTRY_TOKEN` is unset /// — see `download_to_temp` in `crates/fai_hub/src/lib.rs`. /// /// Studio writes the file directly so a fresh install never @@ -40,7 +40,7 @@ class RegistryToken { 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 /// only). On Windows the default user-ACL is left alone — /// best-effort, no PowerShell handshake. diff --git a/lib/data/system_actions.dart b/lib/data/system_actions.dart index 200035e..6ef7822 100644 --- a/lib/data/system_actions.dart +++ b/lib/data/system_actions.dart @@ -11,7 +11,7 @@ // call for processes. // // 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 // some operators don't restart their shell after install — the // 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` /// binary can be located on the machine. const String kFaiInstallDocsUrl = - 'https://git.flemming.ai/fai/platform#installation'; + 'https://git.flemming.ai/fai/chain#installation'; class SystemActions { SystemActions._(); @@ -151,7 +151,7 @@ class SystemActions { 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 /// caller does not need a follow-up restart. 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 /// 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`, /// and `registry-token` preserved. The daemon restarts on the /// active channel before the call returns. @@ -248,8 +248,8 @@ class SystemActions { final home = Platform.environment[isWindows ? 'USERPROFILE' : 'HOME']; if (home == null || home.isEmpty) return null; final fallback = isWindows - ? '$home\\.fai\\bin\\fai.exe' - : '$home/.fai/bin/chain'; + ? '$home\\.chain\\bin\\chain.exe' + : '$home/.chain/bin/chain'; return File(fallback).existsSync() ? fallback : null; } diff --git a/lib/data/today_story_loader.dart b/lib/data/today_story_loader.dart index 09514a0..42ad8d6 100644 --- a/lib/data/today_story_loader.dart +++ b/lib/data/today_story_loader.dart @@ -1,6 +1,6 @@ // 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 // store page. On any failure (file missing, schema mismatch, // 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 /// the result into `_StoreTodayHero`. 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]. static String activePath() { final home = diff --git a/lib/l10n/app_de.arb b/lib/l10n/app_de.arb index 7eac8d1..f38d7fc 100644 --- a/lib/l10n/app_de.arb +++ b/lib/l10n/app_de.arb @@ -37,7 +37,7 @@ "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.", "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.", "errMissingValueHint": "Der Step erwartet eine Eingabe, die nicht verdrahtet ist — entweder zur Laufzeit liefern oder den vorgelagerten `$ref` korrigieren.", "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.", "settingsTlsSubtitle": "https/grpc-secure", "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", "systemAiHeader": "SYSTEM-AI", "systemAiEnabled": "aktiv", @@ -433,7 +433,7 @@ "storeOpenRepoButton": "Repository im Browser öffnen", "storeDocsErrorNotFound": "Dieses Modul ist nicht im Store-Index des Hubs enthalten.", "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": { "placeholders": { @@ -607,7 +607,7 @@ "auditClearLogButton": "Log löschen", "modulesTitle": "Module", "modulesNoneTitle": "Noch keine Module", - "modulesNoneHint": "`chain install ` ausführen oder ~/.fai/modules/ prüfen.", + "modulesNoneHint": "`chain install ` ausführen oder ~/.chain/modules/ prüfen.", "modulesReloadTooltip": "Aktualisieren", "modulesRecentActivity": "LETZTE AKTIVITÄT", "modulesRecentActivityHint": "letzte {n} install/uninstall-Ereignisse aus dem Audit-Log", @@ -758,7 +758,7 @@ } }, "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": { "placeholders": { @@ -772,7 +772,7 @@ "registryTokenFieldHint": "Forgejo- oder GitHub-PAT einfügen", "registryTokenSaveButton": "Speichern", "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.", "registryTokenClearedToast": "Registry-Token entfernt.", "registryTokenSaveFailedToast": "Speichern fehlgeschlagen: {error}", @@ -784,7 +784,7 @@ } }, "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": { "placeholders": { @@ -798,7 +798,7 @@ "hubAuthTokenFieldHint": "Token aus dem auth.tokens-Eintrag des Hub-Operators einfügen", "hubAuthTokenSaveButton": "Speichern", "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.", "hubAuthTokenClearedToast": "Hub-Token entfernt.", "hubAuthTokenSaveFailedToast": "Speichern fehlgeschlagen: {error}", @@ -830,15 +830,15 @@ "defaultScopeLoadFailed": "Standard-Scope konnte nicht geladen werden.", "defaultScopeNonEmptyError": "Standard-Scope darf nicht leer sein — mindestens ein Segment muss erhalten bleiben.", "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", - "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", - "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", "maintenanceResetInProgress": "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", "welcomeChecklistAllSetTitle": "Du bist eingerichtet.", "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.", "errAlreadyExists": "Existiert bereits.", "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.", "errFailedPreconditionHint": "Der Hub konnte nicht weiter, weil etwas Vorausgesetztes fehlt. Details unten erklären was.", "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.", "errUnavailableHint": "Sicherstellen, dass `chain serve` (oder `chain daemon start`) läuft und der Daemon-Endpunkt zu Studios Einstellungen passt.", "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", "errDetailCopied": "Detail in die Zwischenablage kopiert.", "flowsOutputUnknown": "Unbekannter Output-Payload-Typ.", @@ -1111,7 +1111,7 @@ }, "doctorApprovalsAttentionPill": "wichtig", "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", "doctorPillEmpty": "leer", "doctorRecheckTooltip": "Erneut prüfen", @@ -1477,7 +1477,7 @@ "settingsIntegrationsPanelTitle": "Integrationen", "settingsIntegrationsPanelBody": "Externe Tool-Server, deren Capabilities der Hub föderiert. MCP-Server bieten Tool-Endpunkte; n8n-Endpunkte stellen gehostete Workflows bereit.", "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", "settingsMaintenancePanelBody": "Destruktive Aktionen, abgesichert durch explizite Bestätigungs-Dialoge. Nutzen z.B. beim Re-Pilot-Testen oder Debuggen.", "tooltipMoveUp": "Nach oben", diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb index 058c1bd..7b02d9e 100644 --- a/lib/l10n/app_en.arb +++ b/lib/l10n/app_en.arb @@ -40,7 +40,7 @@ "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.", "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.", "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.", @@ -151,7 +151,7 @@ "settingsHubEndpointHint": "Where should Studio connect? Default is the local hub at 127.0.0.1:50051.", "settingsTlsSubtitle": "https/grpc-secure", "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", "systemAiHeader": "SYSTEM AI", "systemAiEnabled": "enabled", @@ -436,7 +436,7 @@ "storeOpenRepoButton": "Open repository in browser", "storeDocsErrorNotFound": "This module is not in the hub's store index.", "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": { "placeholders": { @@ -610,7 +610,7 @@ "auditClearLogButton": "Clear log", "modulesTitle": "Modules", "modulesNoneTitle": "No modules yet", - "modulesNoneHint": "Run `chain install ` or check ~/.fai/modules/.", + "modulesNoneHint": "Run `chain install ` or check ~/.chain/modules/.", "modulesReloadTooltip": "Reload", "modulesRecentActivity": "RECENT ACTIVITY", "modulesRecentActivityHint": "last {n} install/uninstall events from the audit log", @@ -761,7 +761,7 @@ } }, "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": { "placeholders": { @@ -775,7 +775,7 @@ "registryTokenFieldHint": "Paste your Forgejo or GitHub personal access token", "registryTokenSaveButton": "Save", "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.", "registryTokenClearedToast": "Registry token cleared.", "registryTokenSaveFailedToast": "Could not save: {error}", @@ -787,7 +787,7 @@ } }, "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": { "placeholders": { @@ -801,7 +801,7 @@ "hubAuthTokenFieldHint": "Paste a token from the hub operator's auth.tokens entry", "hubAuthTokenSaveButton": "Save", "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.", "hubAuthTokenClearedToast": "Hub auth token cleared.", "hubAuthTokenSaveFailedToast": "Could not save: {error}", @@ -833,15 +833,15 @@ "defaultScopeLoadFailed": "Could not load default scope.", "defaultScopeNonEmptyError": "Default scope cannot be empty — keep at least one segment.", "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", - "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", - "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", "maintenanceResetInProgress": "Resetting…", "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", "welcomeChecklistAllSetTitle": "You're set up.", "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.", "errAlreadyExists": "Already exists.", "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.", "errFailedPreconditionHint": "The hub couldn't proceed because something it needs isn't ready. The detail below explains what.", "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.", "errUnavailableHint": "Make sure `chain serve` (or `chain daemon start`) is running and the daemon endpoint matches Studio's settings.", "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", "errDetailCopied": "Detail copied to clipboard.", "flowsOutputUnknown": "Output payload variant not recognised.", @@ -1114,7 +1114,7 @@ }, "doctorApprovalsAttentionPill": "attention", "doctorServicesEmpty": "No host services declared", - "doctorServicesEmptyHint": "add to ~/.fai/config.yaml under services:", + "doctorServicesEmptyHint": "add to ~/.chain/config.yaml under services:", "doctorPillLoaded": "loaded", "doctorPillEmpty": "empty", "doctorRecheckTooltip": "Re-check", @@ -1480,7 +1480,7 @@ "settingsIntegrationsPanelTitle": "Integrations", "settingsIntegrationsPanelBody": "External tool servers the hub federates capabilities from. MCP servers expose tool-shaped endpoints; n8n endpoints expose hosted workflows.", "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", "settingsMaintenancePanelBody": "Destructive operations gated behind explicit confirm dialogs. Use when re-pilot-testing or debugging.", "tooltipMoveUp": "Move up", diff --git a/lib/l10n/app_localizations.dart b/lib/l10n/app_localizations.dart index 6ee6009..d994ad6 100644 --- a/lib/l10n/app_localizations.dart +++ b/lib/l10n/app_localizations.dart @@ -323,7 +323,7 @@ abstract class AppLocalizations { /// No description provided for @errServiceUnavailableForStepHint. /// /// 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; /// No description provided for @errMissingValue. @@ -875,7 +875,7 @@ abstract class AppLocalizations { /// No description provided for @channelsBlurb. /// /// 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; /// No description provided for @channelsActionsTooltip. @@ -1649,7 +1649,7 @@ abstract class AppLocalizations { /// No description provided for @storeDocsErrorAuth. /// /// 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; /// No description provided for @storeDocsErrorNetwork. @@ -1991,7 +1991,7 @@ abstract class AppLocalizations { /// No description provided for @modulesNoneHint. /// /// In en, this message translates to: - /// **'Run `chain install ` or check ~/.fai/modules/.'** + /// **'Run `chain install ` or check ~/.chain/modules/.'** String get modulesNoneHint; /// No description provided for @modulesReloadTooltip. @@ -2279,7 +2279,7 @@ abstract class AppLocalizations { /// No description provided for @registryCredentialsBlurb. /// /// 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; /// No description provided for @registryTokenStatusConfigured. @@ -2321,7 +2321,7 @@ abstract class AppLocalizations { /// No description provided for @registryTokenStorageHint. /// /// 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; /// No description provided for @registryTokenSavedToast. @@ -2351,7 +2351,7 @@ abstract class AppLocalizations { /// No description provided for @hubAuthTokenBlurb. /// /// 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; /// No description provided for @hubAuthTokenStatusConfigured. @@ -2393,7 +2393,7 @@ abstract class AppLocalizations { /// No description provided for @hubAuthTokenStorageHint. /// /// 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; /// No description provided for @hubAuthTokenSavedToast. @@ -2501,7 +2501,7 @@ abstract class AppLocalizations { /// No description provided for @maintenanceResetBlurb. /// /// 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; /// No description provided for @maintenanceKeepModulesTitle. @@ -2513,7 +2513,7 @@ abstract class AppLocalizations { /// No description provided for @maintenanceKeepModulesSubtitle. /// /// 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; /// No description provided for @maintenanceKeepDataTitle. @@ -2525,7 +2525,7 @@ abstract class AppLocalizations { /// No description provided for @maintenanceKeepDataSubtitle. /// /// 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; /// No description provided for @maintenanceResetButton. @@ -2549,7 +2549,7 @@ abstract class AppLocalizations { /// No description provided for @maintenanceResetConfirmBody. /// /// 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; /// No description provided for @maintenanceResetConfirmButton. @@ -2795,7 +2795,7 @@ abstract class AppLocalizations { /// No description provided for @errPermissionDeniedHint. /// /// 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; /// No description provided for @errFailedPrecondition. @@ -2819,7 +2819,7 @@ abstract class AppLocalizations { /// No description provided for @errInternalHint. /// /// 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; /// No description provided for @errUnavailable. @@ -2843,7 +2843,7 @@ abstract class AppLocalizations { /// No description provided for @errUnauthenticatedHint. /// /// 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; /// No description provided for @errCopyDetail. @@ -3155,7 +3155,7 @@ abstract class AppLocalizations { /// No description provided for @doctorServicesEmptyHint. /// /// In en, this message translates to: - /// **'add to ~/.fai/config.yaml under services:'** + /// **'add to ~/.chain/config.yaml under services:'** String get doctorServicesEmptyHint; /// No description provided for @doctorPillLoaded. @@ -4139,7 +4139,7 @@ abstract class AppLocalizations { /// No description provided for @settingsSecurityPanelBody. /// /// 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; /// No description provided for @settingsMaintenancePanelTitle. diff --git a/lib/l10n/app_localizations_de.dart b/lib/l10n/app_localizations_de.dart index 3d971f7..7e8df68 100644 --- a/lib/l10n/app_localizations_de.dart +++ b/lib/l10n/app_localizations_de.dart @@ -138,7 +138,7 @@ class AppLocalizationsDe extends AppLocalizations { @override 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 String get errMissingValue => 'Pflichtwert fehlt.'; @@ -448,7 +448,7 @@ class AppLocalizationsDe extends AppLocalizations { @override 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 String get channelsActionsTooltip => 'Kanal-Aktionen'; @@ -901,7 +901,7 @@ class AppLocalizationsDe extends AppLocalizations { @override 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 String storeDocsErrorNetwork(String detail) { @@ -1125,7 +1125,7 @@ class AppLocalizationsDe extends AppLocalizations { @override String get modulesNoneHint => - '`chain install ` ausführen oder ~/.fai/modules/ prüfen.'; + '`chain install ` ausführen oder ~/.chain/modules/ prüfen.'; @override String get modulesReloadTooltip => 'Aktualisieren'; @@ -1302,7 +1302,7 @@ class AppLocalizationsDe extends AppLocalizations { @override 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 String registryTokenStatusConfigured(int chars) { @@ -1326,7 +1326,7 @@ class AppLocalizationsDe extends AppLocalizations { @override 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 String get registryTokenSavedToast => 'Registry-Token gespeichert.'; @@ -1344,7 +1344,7 @@ class AppLocalizationsDe extends AppLocalizations { @override 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 String hubAuthTokenStatusConfigured(int chars) { @@ -1369,7 +1369,7 @@ class AppLocalizationsDe extends AppLocalizations { @override 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 String get hubAuthTokenSavedToast => 'Hub-Token gespeichert.'; @@ -1432,14 +1432,14 @@ class AppLocalizationsDe extends AppLocalizations { @override 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 String get maintenanceKeepModulesTitle => 'Installierte Module behalten'; @override 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 String get maintenanceKeepDataTitle => @@ -1447,7 +1447,7 @@ class AppLocalizationsDe extends AppLocalizations { @override 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 String get maintenanceResetButton => 'Hub zurücksetzen'; @@ -1460,7 +1460,7 @@ class AppLocalizationsDe extends AppLocalizations { @override 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 String get maintenanceResetConfirmButton => 'Zurücksetzen'; @@ -1614,7 +1614,7 @@ class AppLocalizationsDe extends AppLocalizations { @override 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 String get errFailedPrecondition => 'Setup-Problem hat das blockiert.'; @@ -1628,7 +1628,7 @@ class AppLocalizationsDe extends AppLocalizations { @override 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 String get errUnavailable => 'Hub nicht erreichbar.'; @@ -1642,7 +1642,7 @@ class AppLocalizationsDe extends AppLocalizations { @override 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 String get errCopyDetail => 'Detail kopieren'; @@ -1834,7 +1834,7 @@ class AppLocalizationsDe extends AppLocalizations { @override String get doctorServicesEmptyHint => - 'in ~/.fai/config.yaml unter services: hinzufügen'; + 'in ~/.chain/config.yaml unter services: hinzufügen'; @override String get doctorPillLoaded => 'geladen'; @@ -2421,7 +2421,7 @@ class AppLocalizationsDe extends AppLocalizations { @override 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 String get settingsMaintenancePanelTitle => 'Wartung'; diff --git a/lib/l10n/app_localizations_en.dart b/lib/l10n/app_localizations_en.dart index 7b9d408..aa3c396 100644 --- a/lib/l10n/app_localizations_en.dart +++ b/lib/l10n/app_localizations_en.dart @@ -137,7 +137,7 @@ class AppLocalizationsEn extends AppLocalizations { @override 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 String get errMissingValue => 'Required value is missing.'; @@ -448,7 +448,7 @@ class AppLocalizationsEn extends AppLocalizations { @override 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 String get channelsActionsTooltip => 'Channel actions'; @@ -919,7 +919,7 @@ class AppLocalizationsEn extends AppLocalizations { @override 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 String storeDocsErrorNetwork(String detail) { @@ -1140,7 +1140,7 @@ class AppLocalizationsEn extends AppLocalizations { @override String get modulesNoneHint => - 'Run `chain install ` or check ~/.fai/modules/.'; + 'Run `chain install ` or check ~/.chain/modules/.'; @override String get modulesReloadTooltip => 'Reload'; @@ -1315,7 +1315,7 @@ class AppLocalizationsEn extends AppLocalizations { @override 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 String registryTokenStatusConfigured(int chars) { @@ -1340,7 +1340,7 @@ class AppLocalizationsEn extends AppLocalizations { @override 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 String get registryTokenSavedToast => 'Registry token saved.'; @@ -1358,7 +1358,7 @@ class AppLocalizationsEn extends AppLocalizations { @override 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 String hubAuthTokenStatusConfigured(int chars) { @@ -1383,7 +1383,7 @@ class AppLocalizationsEn extends AppLocalizations { @override 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 String get hubAuthTokenSavedToast => 'Hub auth token saved.'; @@ -1445,21 +1445,21 @@ class AppLocalizationsEn extends AppLocalizations { @override 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 String get maintenanceKeepModulesTitle => 'Keep installed modules'; @override 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 String get maintenanceKeepDataTitle => 'Keep audit log + saved flows'; @override 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 String get maintenanceResetButton => 'Reset hub state'; @@ -1472,7 +1472,7 @@ class AppLocalizationsEn extends AppLocalizations { @override 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 String get maintenanceResetConfirmButton => 'Reset'; @@ -1624,7 +1624,7 @@ class AppLocalizationsEn extends AppLocalizations { @override 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 String get errFailedPrecondition => 'Setup issue blocked this.'; @@ -1638,7 +1638,7 @@ class AppLocalizationsEn extends AppLocalizations { @override 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 String get errUnavailable => 'Hub not reachable.'; @@ -1652,7 +1652,7 @@ class AppLocalizationsEn extends AppLocalizations { @override 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 String get errCopyDetail => 'Copy detail'; @@ -1843,7 +1843,7 @@ class AppLocalizationsEn extends AppLocalizations { @override String get doctorServicesEmptyHint => - 'add to ~/.fai/config.yaml under services:'; + 'add to ~/.chain/config.yaml under services:'; @override String get doctorPillLoaded => 'loaded'; @@ -2425,7 +2425,7 @@ class AppLocalizationsEn extends AppLocalizations { @override 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 String get settingsMaintenancePanelTitle => 'Maintenance'; diff --git a/lib/pages/doctor.dart b/lib/pages/doctor.dart index c42f7bd..5f1fc5d 100644 --- a/lib/pages/doctor.dart +++ b/lib/pages/doctor.dart @@ -481,7 +481,7 @@ class _PathRow extends StatelessWidget { /// Daemon control affordances: Restart, Apply update, Stop. /// 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. class _DaemonActionsCard extends StatefulWidget { @override @@ -817,7 +817,7 @@ class _ServicesPanel extends StatelessWidget { final l = AppLocalizations.of(context)!; if (snapshot.services.isEmpty) { // 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. return FaiCard( child: Wrap( diff --git a/lib/pages/store.dart b/lib/pages/store.dart index 6b235ed..935d75b 100644 --- a/lib/pages/store.dart +++ b/lib/pages/store.dart @@ -57,7 +57,7 @@ class _StorePageState extends State { bool _todayDismissed = false; /// 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 /// slide). Otherwise the curated fallback list rotates. late final List _todayStories = (() { @@ -2991,7 +2991,7 @@ class _ScreenshotPlaceholder extends StatelessWidget { } /// 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 /// recompiling Studio — see docs/today-pipeline.md. When the /// operator accepts a story, that single story becomes the @@ -3082,9 +3082,9 @@ const List _kFallbackTodayStories = [ titleEn: 'Tamper-evident hash chain — built in', titleDe: 'Manipulationssicher per Hash-Kette — eingebaut', 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: - '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: '', ctaLabelDe: '', icon: Icons.timeline_outlined, @@ -3110,9 +3110,9 @@ const List _kFallbackTodayStories = [ titleEn: 'Build a module in a single Rust file', titleDe: 'Ein Modul in einer einzigen Rust-Datei bauen', 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: - '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: '', ctaLabelDe: '', icon: Icons.code_outlined, diff --git a/lib/pages/welcome.dart b/lib/pages/welcome.dart index ac51686..8262f5a 100644 --- a/lib/pages/welcome.dart +++ b/lib/pages/welcome.dart @@ -1123,7 +1123,7 @@ class _DocReaderError { }); 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 /// on-screen rendering; [toString] stays English for logs. diff --git a/lib/widgets/fai_log_viewer.dart b/lib/widgets/fai_log_viewer.dart index a4b67eb..e20451d 100644 --- a/lib/widgets/fai_log_viewer.dart +++ b/lib/widgets/fai_log_viewer.dart @@ -4,10 +4,10 @@ // Use [showFaiLogViewer] to open it. Two log shapes are supported // 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; // anything else renders neutral. -// - tracing text (the daemon's `~/.fai/run/.log`): +// - tracing text (the daemon's `~/.chain/run/.log`): // `[INFO]`, `[WARN]`, `[ERROR]`, `[DEBUG]` substrings get the // matching tone from the FaiTheme palette. // diff --git a/lib/widgets/fai_settings_dialog.dart b/lib/widgets/fai_settings_dialog.dart index b067622..8fee21e 100644 --- a/lib/widgets/fai_settings_dialog.dart +++ b/lib/widgets/fai_settings_dialog.dart @@ -54,12 +54,12 @@ class _FaiSettingsDialogState extends State { _Category _category = _Category.general; /// 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. int? _registryTokenChars; /// 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. int? _hubAuthTokenChars; @@ -1822,8 +1822,8 @@ class _MaintenancePanelState extends State<_MaintenancePanel> { } /// Credentials panel for the operator's registry auth token. -/// The hub reads the same token via `~/.fai/registry-token` -/// (or the `FAI_REGISTRY_TOKEN` env var, which still wins) +/// The hub reads the same token via `~/.chain/registry-token` +/// (or the `CHAIN_REGISTRY_TOKEN` env var, which still wins) /// when downloading `.fai` bundles from a registry behind a /// signin wall — Forgejo with REQUIRE_SIGNIN_VIEW=true, /// GitHub-private releases, etc. @@ -1976,7 +1976,7 @@ class _RegistryCredentialsPanelState extends State<_RegistryCredentialsPanel> { /// Operator panel for the hub's gRPC bearer token. When the /// hub has `auth.tokens:` configured, Studio must present /// `Authorization: Bearer ` 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 /// operator paste / clear without leaving the GUI. /// diff --git a/lib/widgets/fai_system_ai_editor.dart b/lib/widgets/fai_system_ai_editor.dart index 54881f7..e8f9dde 100644 --- a/lib/widgets/fai_system_ai_editor.dart +++ b/lib/widgets/fai_system_ai_editor.dart @@ -2,7 +2,7 @@ // System AI from inside Studio. Mirrors the YAML block but with // provider presets, in-place explainers, and a "Test connection" // 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';