feat(studio): Welcome page Phase C — live getting-started checklist (v0.39.0)
Final slice of the Welcome surface. Four steps that prove
the operator has the basic loop wired up; each step is
a live probe against the running hub, no manual ticks.
The four checked signals:
1. System AI configured
→ `HubService.systemAiStatus().enabled`
2. Public capability source added
→ `listMcpClients()` returns at least one entry
3. Text module installed
→ `listModules()` contains a name starting with `text.`
4. Saved flow run
→ any `flow.completed` event in the last 100 audit
events
All four probes fire in parallel from `_OnboardingChecklist`'s
`_refresh()`. Failures stay false (catchError) so a hub that
is briefly unreachable doesn't blank the whole row — the
operator hits the explicit Refresh icon to retry.
UX:
- Renders between hero and pillars so the actionable path
beats the educational content for screen real estate.
- Each row: status icon (○ pending / ✓ done) + title +
one-line hint pointing the operator at the right Studio
surface + status pill.
- Done rows strike-through the title and dim it; pending
rows stay full-strength.
- When all four flip to done, an "All four steps complete"
footer appears with a `Hide checklist` button. Clicking
persists `welcome.checklist.dismissed = true` via
SharedPreferences; the section is gone for good (we don't
re-nag operators who chose a non-default path).
15 new ARB keys for the section header, body, four rows
plus done/pending pills, all-done footer, dismiss /
refresh / refreshing button labels.
Three-phase plan from `docs/landing-page-design.md` is now
fully shipped: Phase A scaffolding (v0.37.0), Phase B
embedded doc reader (v0.38.0), Phase C live checklist
(v0.39.0).
Signed-off-by: flemming-it <stefan.a.flemming@googlemail.com>
This commit is contained in:
parent
3b07d340d5
commit
930e246649
8 changed files with 496 additions and 2 deletions
|
|
@ -278,6 +278,102 @@ abstract class AppLocalizations {
|
|||
/// **'Could not load documentation: {error}'**
|
||||
String welcomeDocFailedToLoad(String error);
|
||||
|
||||
/// No description provided for @welcomeChecklistHeader.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'GETTING STARTED'**
|
||||
String get welcomeChecklistHeader;
|
||||
|
||||
/// No description provided for @welcomeChecklistBody.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Four steps to a working hub. Live state — refresh after changing anything.'**
|
||||
String get welcomeChecklistBody;
|
||||
|
||||
/// No description provided for @welcomeChecklistAi.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Configure System AI'**
|
||||
String get welcomeChecklistAi;
|
||||
|
||||
/// No description provided for @welcomeChecklistAiHint.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Settings → System AI. Required for the AI search and inline failure explanations.'**
|
||||
String get welcomeChecklistAiHint;
|
||||
|
||||
/// No description provided for @welcomeChecklistMcp.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Add a public capability source'**
|
||||
String get welcomeChecklistMcp;
|
||||
|
||||
/// No description provided for @welcomeChecklistMcpHint.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Store → Today hero, or Settings → MCP Clients. DeepWiki and Semgrep are one click each.'**
|
||||
String get welcomeChecklistMcpHint;
|
||||
|
||||
/// No description provided for @welcomeChecklistModule.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Install a text module'**
|
||||
String get welcomeChecklistModule;
|
||||
|
||||
/// No description provided for @welcomeChecklistModuleHint.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Store → search \"text\" → Install. Try text.extract for PDFs and DOCX.'**
|
||||
String get welcomeChecklistModuleHint;
|
||||
|
||||
/// No description provided for @welcomeChecklistFlow.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Run a saved flow'**
|
||||
String get welcomeChecklistFlow;
|
||||
|
||||
/// No description provided for @welcomeChecklistFlowHint.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Flows → pick one → Run. The bundled extract-summarize.yaml is a good first run.'**
|
||||
String get welcomeChecklistFlowHint;
|
||||
|
||||
/// No description provided for @welcomeChecklistAllDone.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'All four steps complete.'**
|
||||
String get welcomeChecklistAllDone;
|
||||
|
||||
/// No description provided for @welcomeChecklistDismiss.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Hide checklist'**
|
||||
String get welcomeChecklistDismiss;
|
||||
|
||||
/// No description provided for @welcomeChecklistRefresh.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Refresh'**
|
||||
String get welcomeChecklistRefresh;
|
||||
|
||||
/// No description provided for @welcomeChecklistRefreshing.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Checking…'**
|
||||
String get welcomeChecklistRefreshing;
|
||||
|
||||
/// No description provided for @welcomeChecklistDone.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Done'**
|
||||
String get welcomeChecklistDone;
|
||||
|
||||
/// No description provided for @welcomeChecklistTodo.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Pending'**
|
||||
String get welcomeChecklistTodo;
|
||||
|
||||
/// No description provided for @navDoctor.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue