feat: guided setup — clickable next steps, signature relaxation, fresh-install auto-open

Post-apply the wizard now renders real Studio actions instead of CLI
text: a start-hub button that polls until the daemon answers,
per-module install buttons (capability-name install via the hub's
store index) with done/progress states, and an open-the-starter-flow
button that navigates to the Flows page. Regulated plans explain in
plain language that modules come from a signed source; the preview
offers 'allow installing from the public store' as one deliberate,
reversible switch that re-assembles the plan (allow_unsigned_modules).

Fresh installs (no config, no setup-plan.yaml) auto-open the wizard
once per run — the wizard IS the onboarding — and it steps back once
a setup exists. The welcome CTA is framed honestly ('get started in
3 questions'), and after the wizard closes the onboarding checklist
remounts, re-probes, and says what the assistant already covered
(profile line from setup-plan.yaml) instead of acting as a second,
disconnected onboarding surface.

Signed-off-by: flemming-it <stefan.a.flemming@googlemail.com>
This commit is contained in:
flemming-it 2026-07-12 23:18:41 +02:00
parent 140408d26a
commit 1f1e050b42
8 changed files with 704 additions and 51 deletions

View file

@ -25,7 +25,7 @@ class AppLocalizationsDe extends AppLocalizations {
@override
String get guidedSetupIntro =>
'Beantworte drei Fragen — Ch∆In stellt passende Konfiguration, Modul-Set und Start-Flow zusammen.';
'Beantworten Sie drei Fragen — Ch∆In stellt passende Konfiguration, Modul-Set und Beispiel-Flow zusammen.';
@override
String get guidedSetupScenario => 'Szenario';
@ -3138,11 +3138,62 @@ class AppLocalizationsDe extends AppLocalizations {
String get setupNextHubStart => 'Hub starten';
@override
String get setupNextInstall => 'Die Module installieren';
String get setupHubRunning => 'Der Hub läuft.';
@override
String get setupNextRunFlow => 'Den Beispiel-Flow ausführen';
String get setupStartHubFirst =>
'Starten Sie zuerst den Hub — dann lassen sich die Module hier installieren.';
@override
String setupActionInstall(String module) {
return '$module installieren';
}
@override
String setupActionInstalled(String module) {
return '$module ist installiert.';
}
@override
String setupActionOpenFlow(String flow) {
return 'Beispiel-Flow „$flow“ öffnen';
}
@override
String get setupModulesOfflineHint =>
'Die Module kommen ohne Internet als Offline-Paket auf den Server — die Anleitung dazu steht in der Dokumentation unter „Betrieb ohne Internet“.';
@override
String get setupModulesSignedHint =>
'Die Module kommen aus einer eigenen, signierten Quelle — nicht aus dem öffentlichen Store.';
@override
String get setupSigPublicStoreNotice =>
'Diese Einrichtung lässt nur signierte Module zu. Der öffentliche Store liefert zurzeit unsignierte Pakete — die vorbereiteten Module kommen daher aus einer eigenen, signierten Quelle.';
@override
String get setupAllowUnsigned =>
'Installation aus dem öffentlichen Store erlauben';
@override
String get setupAllowUnsignedSub =>
'Lockert die Signaturpflicht bewusst. Gut zum Ausprobieren — für den regulierten Betrieb später wieder aktivieren.';
@override
String get setupStartCta => 'In 3 Fragen loslegen';
@override
String get setupProfileDev => 'unkomplizierter Arbeitsplatz';
@override
String get setupProfileEnterprise => 'abgesicherter Team-Betrieb';
@override
String get setupProfileAirgapped =>
'vollständig lokaler, regulierter Betrieb';
@override
String welcomeChecklistSetupDone(String profile) {
return 'Die Grundeinrichtung ($profile) hat der Einrichtungs-Assistent bereits erledigt — hier sehen Sie, was auf dem Hub schon passiert ist.';
}
}