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

@ -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