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:
parent
140408d26a
commit
1f1e050b42
8 changed files with 704 additions and 51 deletions
|
|
@ -4,7 +4,7 @@
|
|||
"errModuleDownloadHint": "Die Bundle-URL des Moduls ist nicht erreichbar (Statuscode unten). Der Hub läuft — URL/Host korrigieren oder anderen Store wählen.",
|
||||
"storeFromSource": "aus {store}",
|
||||
"guidedSetupTitle": "Setup-Assistent",
|
||||
"guidedSetupIntro": "Beantworte drei Fragen — Ch∆In stellt passende Konfiguration, Modul-Set und Start-Flow zusammen.",
|
||||
"guidedSetupIntro": "Beantworten Sie drei Fragen — Ch∆In stellt passende Konfiguration, Modul-Set und Beispiel-Flow zusammen.",
|
||||
"guidedSetupScenario": "Szenario",
|
||||
"guidedSetupIntent": "Aufgabe",
|
||||
"guidedSetupTarget": "Wo läuft es?",
|
||||
|
|
@ -1747,7 +1747,23 @@
|
|||
"setupApplied": "Fertig — Ch∆In ist eingerichtet.",
|
||||
"setupNextTitle": "Nächste Schritte",
|
||||
"setupNextHubStart": "Hub starten",
|
||||
"setupNextInstall": "Die Module installieren",
|
||||
"setupNextRunFlow": "Den Beispiel-Flow ausführen",
|
||||
"setupStartCta": "In 3 Fragen loslegen"
|
||||
"setupHubRunning": "Der Hub läuft.",
|
||||
"setupStartHubFirst": "Starten Sie zuerst den Hub — dann lassen sich die Module hier installieren.",
|
||||
"setupActionInstall": "{module} installieren",
|
||||
"@setupActionInstall": {"placeholders": {"module": {"type": "String"}}},
|
||||
"setupActionInstalled": "{module} ist installiert.",
|
||||
"@setupActionInstalled": {"placeholders": {"module": {"type": "String"}}},
|
||||
"setupActionOpenFlow": "Beispiel-Flow „{flow}“ öffnen",
|
||||
"@setupActionOpenFlow": {"placeholders": {"flow": {"type": "String"}}},
|
||||
"setupModulesOfflineHint": "Die Module kommen ohne Internet als Offline-Paket auf den Server — die Anleitung dazu steht in der Dokumentation unter „Betrieb ohne Internet“.",
|
||||
"setupModulesSignedHint": "Die Module kommen aus einer eigenen, signierten Quelle — nicht aus dem öffentlichen Store.",
|
||||
"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.",
|
||||
"setupAllowUnsigned": "Installation aus dem öffentlichen Store erlauben",
|
||||
"setupAllowUnsignedSub": "Lockert die Signaturpflicht bewusst. Gut zum Ausprobieren — für den regulierten Betrieb später wieder aktivieren.",
|
||||
"setupStartCta": "In 3 Fragen loslegen",
|
||||
"setupProfileDev": "unkomplizierter Arbeitsplatz",
|
||||
"setupProfileEnterprise": "abgesicherter Team-Betrieb",
|
||||
"setupProfileAirgapped": "vollständig lokaler, regulierter Betrieb",
|
||||
"welcomeChecklistSetupDone": "Die Grundeinrichtung ({profile}) hat der Einrichtungs-Assistent bereits erledigt — hier sehen Sie, was auf dem Hub schon passiert ist.",
|
||||
"@welcomeChecklistSetupDone": {"placeholders": {"profile": {"type": "String"}}}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1786,7 +1786,23 @@
|
|||
"setupApplied": "Done — Ch∆In is set up.",
|
||||
"setupNextTitle": "Next steps",
|
||||
"setupNextHubStart": "Start the hub",
|
||||
"setupNextInstall": "Install the modules",
|
||||
"setupNextRunFlow": "Run the example flow",
|
||||
"setupStartCta": "Get started in 3 questions"
|
||||
"setupHubRunning": "The hub is running.",
|
||||
"setupStartHubFirst": "Start the hub first — then the modules can be installed right here.",
|
||||
"setupActionInstall": "Install {module}",
|
||||
"@setupActionInstall": {"placeholders": {"module": {"type": "String"}}},
|
||||
"setupActionInstalled": "{module} is installed.",
|
||||
"@setupActionInstalled": {"placeholders": {"module": {"type": "String"}}},
|
||||
"setupActionOpenFlow": "Open the “{flow}” example flow",
|
||||
"@setupActionOpenFlow": {"placeholders": {"flow": {"type": "String"}}},
|
||||
"setupModulesOfflineHint": "The modules arrive as an offline bundle, without internet — the documentation explains this under “running without internet”.",
|
||||
"setupModulesSignedHint": "The modules come from your own, signed source — not from the public store.",
|
||||
"setupSigPublicStoreNotice": "This setup only accepts signed modules. The public store currently ships unsigned bundles — the prepared modules therefore come from your own, signed source.",
|
||||
"setupAllowUnsigned": "Allow installing from the public store",
|
||||
"setupAllowUnsignedSub": "Deliberately relaxes the signature requirement. Fine for trying things out — re-enable it for regulated operation.",
|
||||
"setupStartCta": "Get started in 3 questions",
|
||||
"setupProfileDev": "straightforward workstation",
|
||||
"setupProfileEnterprise": "hardened team operation",
|
||||
"setupProfileAirgapped": "fully local, regulated operation",
|
||||
"welcomeChecklistSetupDone": "The setup assistant already took care of the basics ({profile}) — this list shows what has actually happened on your hub.",
|
||||
"@welcomeChecklistSetupDone": {"placeholders": {"profile": {"type": "String"}}}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5329,23 +5329,95 @@ abstract class AppLocalizations {
|
|||
/// **'Start the hub'**
|
||||
String get setupNextHubStart;
|
||||
|
||||
/// No description provided for @setupNextInstall.
|
||||
/// No description provided for @setupHubRunning.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Install the modules'**
|
||||
String get setupNextInstall;
|
||||
/// **'The hub is running.'**
|
||||
String get setupHubRunning;
|
||||
|
||||
/// No description provided for @setupNextRunFlow.
|
||||
/// No description provided for @setupStartHubFirst.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Run the example flow'**
|
||||
String get setupNextRunFlow;
|
||||
/// **'Start the hub first — then the modules can be installed right here.'**
|
||||
String get setupStartHubFirst;
|
||||
|
||||
/// No description provided for @setupActionInstall.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Install {module}'**
|
||||
String setupActionInstall(String module);
|
||||
|
||||
/// No description provided for @setupActionInstalled.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'{module} is installed.'**
|
||||
String setupActionInstalled(String module);
|
||||
|
||||
/// No description provided for @setupActionOpenFlow.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Open the “{flow}” example flow'**
|
||||
String setupActionOpenFlow(String flow);
|
||||
|
||||
/// No description provided for @setupModulesOfflineHint.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'The modules arrive as an offline bundle, without internet — the documentation explains this under “running without internet”.'**
|
||||
String get setupModulesOfflineHint;
|
||||
|
||||
/// No description provided for @setupModulesSignedHint.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'The modules come from your own, signed source — not from the public store.'**
|
||||
String get setupModulesSignedHint;
|
||||
|
||||
/// No description provided for @setupSigPublicStoreNotice.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'This setup only accepts signed modules. The public store currently ships unsigned bundles — the prepared modules therefore come from your own, signed source.'**
|
||||
String get setupSigPublicStoreNotice;
|
||||
|
||||
/// No description provided for @setupAllowUnsigned.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Allow installing from the public store'**
|
||||
String get setupAllowUnsigned;
|
||||
|
||||
/// No description provided for @setupAllowUnsignedSub.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Deliberately relaxes the signature requirement. Fine for trying things out — re-enable it for regulated operation.'**
|
||||
String get setupAllowUnsignedSub;
|
||||
|
||||
/// No description provided for @setupStartCta.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Get started in 3 questions'**
|
||||
String get setupStartCta;
|
||||
|
||||
/// No description provided for @setupProfileDev.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'straightforward workstation'**
|
||||
String get setupProfileDev;
|
||||
|
||||
/// No description provided for @setupProfileEnterprise.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'hardened team operation'**
|
||||
String get setupProfileEnterprise;
|
||||
|
||||
/// No description provided for @setupProfileAirgapped.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'fully local, regulated operation'**
|
||||
String get setupProfileAirgapped;
|
||||
|
||||
/// No description provided for @welcomeChecklistSetupDone.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'The setup assistant already took care of the basics ({profile}) — this list shows what has actually happened on your hub.'**
|
||||
String welcomeChecklistSetupDone(String profile);
|
||||
}
|
||||
|
||||
class _AppLocalizationsDelegate
|
||||
|
|
|
|||
|
|
@ -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.';
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3136,11 +3136,60 @@ class AppLocalizationsEn extends AppLocalizations {
|
|||
String get setupNextHubStart => 'Start the hub';
|
||||
|
||||
@override
|
||||
String get setupNextInstall => 'Install the modules';
|
||||
String get setupHubRunning => 'The hub is running.';
|
||||
|
||||
@override
|
||||
String get setupNextRunFlow => 'Run the example flow';
|
||||
String get setupStartHubFirst =>
|
||||
'Start the hub first — then the modules can be installed right here.';
|
||||
|
||||
@override
|
||||
String setupActionInstall(String module) {
|
||||
return 'Install $module';
|
||||
}
|
||||
|
||||
@override
|
||||
String setupActionInstalled(String module) {
|
||||
return '$module is installed.';
|
||||
}
|
||||
|
||||
@override
|
||||
String setupActionOpenFlow(String flow) {
|
||||
return 'Open the “$flow” example flow';
|
||||
}
|
||||
|
||||
@override
|
||||
String get setupModulesOfflineHint =>
|
||||
'The modules arrive as an offline bundle, without internet — the documentation explains this under “running without internet”.';
|
||||
|
||||
@override
|
||||
String get setupModulesSignedHint =>
|
||||
'The modules come from your own, signed source — not from the public store.';
|
||||
|
||||
@override
|
||||
String get setupSigPublicStoreNotice =>
|
||||
'This setup only accepts signed modules. The public store currently ships unsigned bundles — the prepared modules therefore come from your own, signed source.';
|
||||
|
||||
@override
|
||||
String get setupAllowUnsigned => 'Allow installing from the public store';
|
||||
|
||||
@override
|
||||
String get setupAllowUnsignedSub =>
|
||||
'Deliberately relaxes the signature requirement. Fine for trying things out — re-enable it for regulated operation.';
|
||||
|
||||
@override
|
||||
String get setupStartCta => 'Get started in 3 questions';
|
||||
|
||||
@override
|
||||
String get setupProfileDev => 'straightforward workstation';
|
||||
|
||||
@override
|
||||
String get setupProfileEnterprise => 'hardened team operation';
|
||||
|
||||
@override
|
||||
String get setupProfileAirgapped => 'fully local, regulated operation';
|
||||
|
||||
@override
|
||||
String welcomeChecklistSetupDone(String profile) {
|
||||
return 'The setup assistant already took care of the basics ($profile) — this list shows what has actually happened on your hub.';
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue