feat(studio): guided-setup wizard (reuses chain init engine)

A Welcome 'Setup assistant' button opens a wizard that collects
scenario / intent / target (+ approval & data-local toggles), then calls
`chain init --answers` to preview the assembled plan and `--apply --force`
to write the config — reusing the Rust deterministic engine, no logic
duplicated. New SystemActions.chainInit; copyable errors via
showFaiProcessError; EN+DE l10n. analyze clean; smoke test + existing
welcome/sidebar tests pass.

Signed-off-by: flemming-it <stefan.a.flemming@googlemail.com>
This commit is contained in:
flemming-it 2026-06-21 21:04:13 +02:00
parent 36a8252f67
commit c9fa068991
9 changed files with 509 additions and 0 deletions

View file

@ -19,6 +19,7 @@ import '../l10n/app_localizations.dart';
import '../main.dart' show StudioShellState;
import '../theme/theme.dart';
import '../theme/tokens.dart';
import '../widgets/guided_setup_dialog.dart';
import '../widgets/widgets.dart';
class WelcomePage extends StatelessWidget {
@ -59,6 +60,15 @@ class WelcomePage extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.start,
children: [
const _Hero(),
const SizedBox(height: ChainSpace.md),
Align(
alignment: Alignment.centerLeft,
child: OutlinedButton.icon(
onPressed: () => GuidedSetupDialog.show(context),
icon: const Icon(Icons.auto_fix_high),
label: Text(AppLocalizations.of(context)!.guidedSetupTitle),
),
),
const SizedBox(height: ChainSpace.xxl),
// When the hub is down the onboarding checklist
// would render dead (all-unchecked, nothing to