Repository navigation
feat(ui-web): draw the wizard's agents step with the agent hub's rows - #587
Conversation
The row, its one control, the dot and the section block move from ExtAgentsPage.tsx into Rows.tsx so a second caller can draw them. The page draws the same markup as before; the one new seam is `onOpen`, the click a row answers with -- the page passes the sheet opener, and a caller that passes nothing gets a plain row with no button role and no focus stop. Co-authored-by: Claude (claude-fable-5-1) <noreply@anthropic.com>
The onboarding wizard's third step kept the two-bucket rows of the old settings page after the agents page moved to the hub prototype, with its own classifiers and a toast for a refused connect. It now draws the hub's rows in two of the hub's three sections -- available first, then connected -- from the hub's own `sectionOf`, so a refusal stays on the row in red with Retry and a stale row asks the same question before it migrates. What stays the wizard's: no sheet (a step is a decision, not a roster), no "not installed" section and no openai row, and the step counts itself done on an external agent alone, as the prototype does. One classifier now: `wizardSection` narrows `sectionOf`, `isFound` reads it, and the wizard-only predicates and toast verbs are gone with their tests. The wizard's duplicate section labels leave the catalogue for the hub's identical ones; `.kd` moves from the shared pins to connections' own, its one remaining reader. Co-authored-by: Claude (claude-fable-5-1) <noreply@anthropic.com>
…tep counts A row without a sheet to open kept the hand cursor and the hover the page's rows have, from rules on the row class alone; both now follow the button role that only an opening row carries. Rows.tsx keeps to itself the five pieces nothing outside it reads, the step body's header names its two sections in the order they are drawn, and isFound says that a connected row counts whatever its probe reports -- the reading sectionOf already made, which also stops a verdict lost over a re-scan from flipping the step back to not done. Co-authored-by: Claude (claude-fable-5-1) <noreply@anthropic.com>
gloryfromca
left a comment
There was a problem hiding this comment.
No blockers; suggestions only, and they are marked inline.
I reviewed the full target diff, the onboarding wiring and completion/import callers, the Agent Hub extraction, and the relevant history. I also checked AGENTS.md, CLAUDE.md, CONTEXT-MAP.md, ui-web/CONTEXT.md, and ui-web/CONTRIBUTING.md for source-language, naming, layering, rendering, CSS, i18n, and test constraints. The intended wizard-only behavior changes are coherent, and the Agent Hub path retains its existing behavior.
Backward compatibility found one narrow legacy-gateway edge, marked inline. I checked the removed tests for weakening: coverage was expanded for the shared rows and failure/retry path, but the deleted mid-build case is the compatibility gap noted inline.
Verification on this head:
cd ui-web && npm test: 190 files, 2,548 tests passedcd ui-web && npm run type-check: passedcd ui-web && npm run lint: passed with 5 pre-existing warnings and 0 errorsnpm run lint:i18n --prefix ui-tui: passednode ui-web/scripts/check-class-namespace.mjs: passeduv run python scripts/check_source_language.py github/refactor/ui_web_architecture...HEAD: passed
This can merge as-is; the inline item can be handled as a compatibility follow-up.
The rewrite dropped the exclusion the old predicate carried for an older gateway's build-in-flight flag, so the step filed such a row under available with an active Connect whose shared handler falls through to a toggle on an install that is not finished. wizardSection returns null for it again, and the table has the row back. Co-authored-by: Claude (claude-fable-5-1) <noreply@anthropic.com>
|
Thanks for the review. Verdict on the inline item, and what changed.
Left where it is, as the module's: the hub page itself draws Connect for that row too ( Verify: |
gloryfromca
left a comment
There was a problem hiding this comment.
No blockers; this can merge as far as I am concerned.
The new commit resolves the prior mid-build compatibility finding: wizardSection excludes building rows again, isFound follows that result, and the regression table now proves the Agent Hub still classifies the row as available while the wizard omits it.
I reviewed the revision delta and rechecked the full target diff, affected callers, history, backward compatibility, test changes, and the repository's documented Web UI architecture and source rules. No other behavior changed from the previously reviewed revision, and I found no new issue.
Verification on 13ed251bf2f5:
cd ui-web && npm test: 190 files, 2,549 tests passedcd ui-web && npm run type-check: passedcd ui-web && npm run lint: 0 errors; 5 pre-existing warnings- i18n generation, class-namespace, source-language, and
git diff --check: passed
…hub_step The base moved under the branch. #595 gave the agent rows an unauthorized stage, inside the row control this branch lifts into Rows.tsx and the wizard row it deletes, so the control's new branch is ported into Rows.tsx and the wizard step's test gets the refused-row case in its own idiom; the source test keeps the stageOf import the base's new cases read. #591 recounted the class-namespace pins: connections no longer names `.kd`, so with the wizard step off `.kd` and `.sulist` nothing names them, and the extAgents pin drops to the one `.pmhero` that remains. Co-authored-by: Claude (claude-fable-5-1) <noreply@anthropic.com>
gloryfromca
left a comment
There was a problem hiding this comment.
No blockers; this can merge as far as I am concerned.
The base-refresh merge preserves the target branch unauthorized-agent behavior in the extracted shared rows, adds coverage for it in the wizard, and retains the earlier building-state compatibility fix. I found no new defect.
Covered: the full target diff; the merge resolution against both parents; affected wizard and Agent Hub callers; relevant history and backward compatibility; test changes for weakening; and the repository AGENTS.md, CLAUDE.md, CONTEXT*.md, source-language, and component-architecture constraints.
Verification: npm test (189 files, 2,471 tests passed; expected happy-dom aborted-fetch noise), npm run type-check (passed), npm run lint (passed with four pre-existing warnings in untouched files), npm run lint:i18n --prefix ui-tui, node ui-web/scripts/check-class-namespace.mjs, and uv run python scripts/check_source_language.py github/refactor/ui_web_architecture...HEAD (all passed).
…#587) Draws the onboarding wizard's agents step with the Agent Hub's rows. took the agents page to the hub prototype but left the wizard's third step on the old settings page's two-bucket rows, with classifiers of its own and a toast for a refused connect -- two looks and two classifications for the same roster. The hub's row, its one control, the dot and the section block move out of `ExtAgentsPage.tsx` into `Rows.tsx`, and the wizard draws them in two of the hub's three sections -- available first, then connected -- from the hub's own `sectionOf`. So a refusal stays on the row in red with Retry, a connect in flight says so on the row, and a stale preset asks the hub's question before it migrates. The one new seam is `onOpen`: the page passes the sheet opener, the wizard passes nothing and gets a plain row. What stays the wizard's, as decided for #523: no sheet (a step is a decision, not a roster to manage), no "not installed" section and no openai row, and the step counts itself done on an external agent alone, so the shipped ravens are drawn as connected without completing it. One classifier now: `wizardSection` narrows `sectionOf` and `isFound` reads it; the wizard-only predicates and toast verbs are gone with their tests. The wizard's duplicate section labels leave the catalogue for the hub's identical ones, and the TUI copy is regenerated. In the class-namespace gate the extAgents pin drops to the one `.pmhero` the page still writes: `.kd` and `.sulist` were the old step's alone, and nothing names them now. Connectivity itself is untouched: the adapter pins, the probe and the credentials an agent needs are the sub-agents module's, and the step inherits whatever lands there through the same `subagents.*` calls. - [ ] Fix - [x] Feature - [ ] Docs - [ ] CI / tooling - [ ] Refactor - [ ] Other ``` cd ui-web && npm test # 190 files, 2549 tests passed (40 gates included) cd ui-web && npm run type-check # clean cd ui-web && npm run lint # 0 errors cd ui-web && node scripts/check-class-namespace.mjs # OK cd ui-web && npm run build && python3 build.py # boot goldens 251/252 match cd ui-web && npm run gen:check # generated.ts matches the contract npm run lint:i18n --prefix ui-tui # generated catalogue up to date ``` Real host: a fresh RAVEN_HOME served from this branch, walked with playwright to the agents step -- the two sections drawn with the hub's rows (Claude Code and Codex available with their catalogue lines, the four shipped ravens connected), rows without a button role, Connect on Claude Code showing "connecting" on the row and then landing (the adapter pin on the base is current now), the step's primary lighting up; the hub page opened beside it draws the same rows in its three sections. Base merge (refactor/ui_web_architecture at ccd32f9, one merge commit on this branch): npm test 189 files / 2471 tests, type-check, lint, the class gate, build + build.py (boot goldens 235 nodes), gen:check and lint:i18n all green; the real-host walk repeated on the merged head with the same result, and Codex shows the disabled Unauthorized control after the re-scan (the base's #595 stage, carried by the shared rows). - [x] Relevant tests pass locally - [x] Relevant lint / type checks pass locally - [ ] User-facing docs or screenshots are updated when needed - [x] Security impact considered - [x] Backward compatibility considered - [x] Rollback path is clear for risky changes Behaviour changes, wizard only: a refused connect is red text on the row with Retry rather than a toast, and -- the hub store keeping failures per row -- that row stays red on the agents page too until the next write on it; a preset the probe has not measured yet is offered like the hub offers it; a connected row counts towards the step whatever its probe says; a shim preset whose binary is absent is out of the step (the hub's "not installed"). The agents page is unchanged in markup and behaviour except that only a row that opens the sheet shows the hand cursor and the hover. Rollback is reverting the squash commit; no config or wire change. N/A --------- Co-authored-by: Claude (claude-fable-5-1) <noreply@anthropic.com>
Summary
Draws the onboarding wizard's agents step with the Agent Hub's rows. #559
took the agents page to the hub prototype but left the wizard's third step on
the old settings page's two-bucket rows, with classifiers of its own and a
toast for a refused connect -- two looks and two classifications for the
same roster.
The hub's row, its one control, the dot and the section block move out of
ExtAgentsPage.tsxintoRows.tsx, and the wizard draws them in two of thehub's three sections -- available first, then connected -- from the hub's own
sectionOf. So a refusal stays on the row in red with Retry, a connect inflight says so on the row, and a stale preset asks the hub's question before
it migrates. The one new seam is
onOpen: the page passes the sheet opener,the wizard passes nothing and gets a plain row.
What stays the wizard's, as decided for #523: no sheet (a step is a
decision, not a roster to manage), no "not installed" section and no openai
row, and the step counts itself done on an external agent alone, so the
shipped ravens are drawn as connected without completing it. One classifier
now:
wizardSectionnarrowssectionOfandisFoundreads it; thewizard-only predicates and toast verbs are gone with their tests. The
wizard's duplicate section labels leave the catalogue for the hub's identical
ones, and the TUI copy is regenerated. In the class-namespace gate the
extAgents pin drops to the one
.pmherothe page still writes:.kdand.sulistwere the old step's alone, and nothing names them now.Connectivity itself is untouched: the adapter pins, the probe and the
credentials an agent needs are the sub-agents module's, and the step inherits
whatever lands there through the same
subagents.*calls.Type
Verification
Real host: a fresh RAVEN_HOME served from this branch, walked with playwright
to the agents step -- the two sections drawn with the hub's rows (Claude Code
and Codex available with their catalogue lines, the four shipped ravens
connected), rows without a button role, Connect on Claude Code showing
"connecting" on the row and then landing (the adapter pin on the base is
current now), the step's primary lighting up; the hub page opened beside it
draws the same rows in its three sections.
Base merge (refactor/ui_web_architecture at ccd32f9, one merge commit on
this branch): npm test 189 files / 2471 tests, type-check, lint, the class
gate, build + build.py (boot goldens 235 nodes), gen:check and lint:i18n
all green; the real-host walk repeated on the merged head with the same
result, and Codex shows the disabled Unauthorized control after the re-scan
(the base's #595 stage, carried by the shared rows).
Risk
Behaviour changes, wizard only: a refused connect is red text on the row with
Retry rather than a toast, and -- the hub store keeping failures per row --
that row stays red on the agents page too until the next write on it; a
preset the probe has not measured yet is offered like the hub offers it; a
connected row counts towards the step whatever its probe says; a shim preset
whose binary is absent is out of the step (the hub's "not installed"). The
agents page is unchanged in markup and behaviour except that only a row that
opens the sheet shows the hand cursor and the hover. Rollback is reverting
the squash commit; no config or wire change.
Related Issues
N/A