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

@ -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.';
}
}