Repository navigation
improve(chat): mirror dashboard welcome and recent chats - #1705
Conversation
|
🦞👀 Pull request received. I will update this pull request when review starts. ClawSweeper review completeClawSweeper finished reviewing this revision. The review result is being finalized. |
|
Post-publication proof verification: all four embedded screenshots are publicly accessible (HTTP 200 without authentication), and downloaded image bytes exactly match the captured PNG SHA-256 hashes. The live screenshot is from the final source tree at |
|
Codex review: needs real behavior proof before merge. What this changesThis PR adds an agent-centered chat welcome, recent conversations, Gateway-supplied suggestions, and first-send environment and workspace selection. Example: Open an empty conversation for agent main with a conversation last used two days ago.
Review scores
ProductKind: Feature · Worth it: Yes · Fix scope: Complete Merge readiness⛔ Blocked before merge - 5 items remain Keep this maintainer-authored PR open: it adds useful native chat functionality absent from main, but placement preparation can mutate a session after incoming history invalidates the selection. Priority: P2 Before merge
Findings
Tests
Agent review detailsHow this fits togetherThe native Reactor chat surface consumes provider snapshots and authenticated Gateway catalogs; explicit placement choices flow through the composer into project, session, and device-placement mutations before chat.send. flowchart TD
A[Native chat welcome] --> B[Composer session]
B --> C[Placement controller]
C --> D[Gateway placement client]
D --> E[Authenticated Gateway]
E --> F[Workspace and device placement]
B --> G[Existing chat send owner]
Technical reviewBest possible solution: Cancel invalidated placement before further mutations and retain the existing Gateway owners for session changes and execution authorization. Do we have a high-confidence way to reproduce the issue? Source establishes the failure: delay placement discovery, let another client complete a turn in the selected session, apply the resulting nonempty inputs, then resume discovery; preparation continues to sessions.create before the controller checks emptiness again. Is this the best way to solve the issue? The focused presentation owners and shared Gateway catalog are appropriate, but checking emptiness after preparation protects chat.send without protecting the earlier session mutations. Full review comments:
Overall correctness: patch is incorrect AGENTS.md: found and applied where relevant. Codex review notes: model internal, reasoning medium; reviewed against 16299381a4df. Merge-risk optionsMaintainer options:
Provenance checked
TestingProof path: shipped entry point. SecurityNeeds attention: The new placement execution path needs final-effect authorization evidence before merge. EvidenceWhat I checked:
LabelsLabel changes:
Label justifications:
Rating scale6/6 🦀 challenger crab · 5/6 🦞 diamond lobster · 4/6 🐚 platinum hermit · 3/6 🦐 gold shrimp · 2/6 🦪 silver shellfish · 1/6 🧂 unranked krab. Overall follows the weaker of proof and patch quality; ✨ marks media proof (a screenshot, video, or linked artifact) that directly shows the changed behavior. WorkflowClawSweeper edits this one comment on every review. Comment Reviewed October 12, 2026, 3:12 AM ET / 07:12 UTC. |
|
Documentation-only follow-up f1facec adds shared-copy ownership guidance to AGENTS.md. .\scripts\validate-docs.ps1 passed (58 Markdown files, both proof-pool schema paths); git diff --check passed. Application code is unchanged from the previously validated and captured 0c6831b source. The upstream Gateway catalog implementation remains unpublished and is still required. |
|
ClawSweeper reviews are opt-in for maintainers. If a review is required, finish the work and validation first, then comment |
Global repo triageDecision: Reviewed exact head Blocking findings
The two adversarial reviewers found different failure paths. Each blocking path above was checked against the exact-head source. Canonical P0-P3 autoreview was unavailable because its engine returned HTTP 401, so that attempt is not counted as a clean review. Required next actionResolve the merge conflicts, fix the placement admission/retry/navigation state machine, and add production-path tests for timeout, disconnect, page navigation, reconnect with stale history, and preconfigured empty sessions. Then run exact-head build/test CI and current-head No fixes, commits, branch changes, or pushes were made during this triage. |
Center the selected agent identity, keep a stable native composer, add session placement pickers and recent-chat timestamps, and load shared welcome content from the connected Gateway. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: a5312918-718f-4dfa-b80f-e23a21b064b0
Keep sidebar selection and back history aligned when opening a recent chat through the native composer. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: a5312918-718f-4dfa-b80f-e23a21b064b0
Record the build-generated welcome catalog as a reusable pattern while keeping native-only copy in resources and avoiding unnecessary cross-service APIs. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: a5312918-718f-4dfa-b80f-e23a21b064b0
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: a5312918-718f-4dfa-b80f-e23a21b064b0
Keep existing-session locations unverified until explicitly selected, require current-connection history for placement, and preserve uncertainty after admitted mutations. Localize recovery states and cover the failure and materialization paths. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 4a8948f6-7890-41ca-a89d-c115b5a56579
4f3c050 to
a2b2120
Compare
Wait for current history before subsequent placement mutations and sending, while preserving cancellation and a bounded recovery deadline. Keep valid folder selection available alongside preparation warnings, reject stale directory results, and retire obsolete history-wait notices. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 4a8948f6-7890-41ca-a89d-c115b5a56579
Bring native chat welcome, agent identity, location choices, and recent conversations in line with the connected dashboard. Preserve drafts and placement intent across session materialization. For first-send placement, require current history before later mutations and sending, bound failed-history waits, and keep valid folder recovery available alongside uncertainty warnings. Co-authored-by: Karen Lai <7976322+karkarl@users.noreply.github.com> Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 4a8948f6-7890-41ca-a89d-c115b5a56579
Related Gateway PR: openclaw/openclaw#172644 (feat(gateway): share localized welcome content with native clients).
What Problem This Solves
Native new chats should offer the same agent-centered welcome, location choices, and recent conversations as the connected web dashboard.
User Impact
User impact: new chats show the selected agent's avatar, centered name and guidance, computer/folder picker icons, and up to five recent same-agent chats with left-aligned titles and localized last-used times. Opening a recent chat preserves the draft and synchronizes Workspace navigation. Interrupted location preparation retains the selected destination and reports possible side effects rather than silently returning to Local/default. A delayed
/newcompletion no longer overrides newer navigation.Draft dependency: shared welcome copy requires the Gateway implementation of
controlUi.welcome.getin openclaw/openclaw#172644 (feat(gateway): share localized welcome content with native clients). That accompanying PR owns generation, packaging, and authenticated serving of the web-derived welcome catalog; this PR is the native consumer. Released Gateways without that method display an explicit unavailable message; the composer and recent-chat navigation remain usable. This PR does not bundle a second prompt catalog. The upstream PR is currently draft and is not a released Gateway dependency.Why This Change Was Made
Reuse the existing agent image loader and native controls, keep the composer mounted through the first message, and obtain welcome copy asynchronously once per Gateway connection. Environment/workspace selections remain local intent until first send. Loss of empty-session eligibility cancels subsequent preparation requests, while already admitted Gateway mutations drain without a false rollback claim. Per-session intent, outstanding work, and uncertainty survive navigation; disconnect alone never clears the required placement preflight. Newer navigation invalidates delayed lifecycle selection before deferred chat rendering.
Ownership: the former timeline welcome renderer is replaced by
ReactorChatWelcome, the composer-owned identity/header, and root-owned centered layout.ChatPlacementControllerowns host-local per-session placement intent;ChatComposerControllerowns lifecycle-selection fencing. Workspace and ChatPage forward navigation/unload invalidation. Existing provider send admission and Workspace navigation remain authoritative. The preserved invariants are draft/input continuity, original-session navigation without sending, and no placement mutation on merely opening a picker.Evidence
Current-source interrupted-placement proof (
4f3c0509). Native WinUI fixture: select Windows host and Repository, pause preparation, navigate away, finish the interrupted request, and return. The destination and draft remain visible with an explicit uncertainty warning; the test asserts no message was sent and preflight is still required. All names, paths, and model data are synthetic. This is native rendering/behavior proof, not a real remote-node execution claim.Earlier installed-Gateway new-session proof (
0c6831b8). User-authored session titles are redacted. The agent has no configured custom avatar, so its initial matches the Workspace agent picker. The layout is unchanged by the race fixes; this older image does not prove their new behavior.Earlier responsive recent-list fixture, 320 logical pixels. Synthetic titles and model data, not a user's conversations. This fixture isolates recents without a placement gateway.
Earlier native dropdown fixtures. Device labels and Gateway paths below are synthetic test data. Their regression tests also pass on the current source.
The earlier live native client read the installed welcome RPC successfully for
en-US -> en,fr-FR -> fr, andzh-TW -> zh-TW. Ten warmed loopback calls measured median 0.708 ms (0.414-1.198 ms); this is an observation, not a cold-start guarantee. The app does not poll or make a request per render.Hanselman review used Claude Opus 5.5 and GPT-6 Astra at
f1facec5, focusing on the post-review navigation delta and high-risk placement/cache paths. The three verified findings are addressed: delayed/newnavigation, history arriving during preparation, and lost location intent after navigation. Astra's implementation follow-up found a disconnect/emptiness conflation; that was fixed and tested too. The final narrow follow-up found no remaining blocking issues in those fixes. Source review does not close the runtime-proof gaps below.Earlier rubber-duck findings were also addressed: ordinary-send epoch gating, duplicate welcome rendering, localized relative ages, and restored-versus-explicit selection. Earlier live proof found and fixed Workspace sidebar drift after recent-chat navigation.
Change Type
Scope
winnodeRequired proof pools
windows-winui-interactive: centered native welcome, avatar, responsive pickers, recent navigation, interrupted-placement warning, and accessibility semantics.windows-11-arm64: native ARM64 build, launch, and installed-Gateway integration on the proof host.These declarations do not claim every command in either pool has run. The completed subset and remaining gaps are below.
Validation
Final local validation, with source matching
4f3c05099d12a6144df57737d0e4e5f80cd631d0:.\build.ps1dotnet test .\tests\OpenClaw.Shared.Tests\OpenClaw.Shared.Tests.csproj --no-restoredotnet test .\tests\OpenClaw.Tray.Tests\OpenClaw.Tray.Tests.csproj --no-restoredotnet test .\tests\OpenClaw.Tray.UITests\OpenClaw.Tray.UITests.csproj --no-restore -r win-arm64 --filter 'FullyQualifiedName~ReactorChatLayoutProofTests'.\scripts\validate-docs.ps1git diff --checkUsed isolated tray settings and
OPENCLAW_REPO_ROOTset to the worktree. Reused the documented GitVersion-lock workaround: pinned development-version metadata withDisableGitVersionTask=true; all project references still compiled. The source was validated before committing it, so build informational metadata identifies the pre-commit base rather than claiming release provenance.The two UI skips are opt-in native keyboard and pointer-capture proofs. The new race tests cover cancellation before subsequent create/dispatch calls, blocking repeated sends until an admitted request drains, navigation away/back before and after drain, retained completed choices, offline completion followed by reconnect, and delayed
/newwith newer navigation/draft edits.During this fix round, a malformed architecture-ledger guard reference and the new UI test's missing settled-welcome precondition were corrected. One existing queued-send acknowledgment timing test failed in an earlier full run, then passed in focused reruns and both subsequent full Tray runs without changes to that test or provider. All required build/Shared/Tray commands were rerun after the final test correction; the entire UI class also passed. Earlier avatar/layout/composition-brush test corrections remain covered by that class.
Real Behavior Proof
4f3c05099d12a6144df57737d0e4e5f80cd631d0. Earlier installed-Gateway screenshots and RPC observations match0c6831b8e8062e11e935bf56180262966be20afa.PlacementInterruptedNavigation_RestoresChoiceAndVisibleUncertainty: wait for settled empty chat, select Windows host/Repository, start delayed preparation, navigate to another session, finish the interrupted preparation, and return. Unit tests separately pause productionprojects.add, cancel it, drain its response, and assert no subsequentsessions.createorsessions.dispatch. Controller tests exercise delayed/newnavigation fencing and offline completion/reconnect./newnavigation overriding newer user intent. Already admitted mutations are not claimed to be rolled back. The native image/emoji/initials, responsive layout, picker actions, timestamps, and draft continuity regressions also pass.Yes/No/N/A): Yes, the four earlier GitHub-hosted images returned HTTP 200; the new image returned authenticated HTTP 200 before submission and is rechecked after attachment./newthrough the live Notifications page, and paid provider inference were not exercised. Provider sign-in is a separate unresolved prerequisite. Current-source fixture proof is not an installed-current-upstream-head claim. The earlier preview Gateway once timed out a session-create request before eventually materializing the session; proof used the confirmed existing session rather than claiming clean creation latency. Initial inventory refresh also required visiting Sessions.Earlier installed proof used
.\run-app-local.ps1 -NoBuild -AllowNonMain -RuntimeIdentifier win-arm64 -DataDir <isolated-profile> -Wait, local MCPtools/listandapp.connection.reconnect, Sessions inventory refresh, recent-chat selection and sidebar return, plus productionOpenClawGatewayClient.GetChatWelcomeCatalogAsyncfor the three locales above. It verified that the real recent chat and Workspace sidebar selected the same session and returning restored the centered welcome.Installed unpublished Gateway package provenance: base
openclaw/openclawHEADcb9bdcd6e78f4e6ffbce8f712de47012dbdc8681, dirty source tree05a07f32cdfa6317287397398fbca7487415bc31, archive SHA-256b701bc7b2704637e47cc68564e338447ca17b203a607dcd00a2be1e320989d47. The base commit alone does not contain the welcome implementation. Upstream focused tests/typechecks/lint/package integrity passed; its full suites were not run, one existing method-list preparation was blocked by filesystem metadata instability, and the UI startup gzip warning was 49 bytes over budget. This installed-package proof predates publication of the accompanying upstream PR and does not claim that its current head was installed or tested here.Security Impact
Yes/No) No new Windows node capability or permission toggle.Yes/No) No.Yes/No) Yes.Yes/No) Yes, first-send placement can target an existing eligible environment.Yes/No) Yes, the native picker exposes authorized Gateway workspace/project/folder choices.Yes, explain the risk and mitigation: use the connected authenticated Gateway and its existing authorization; the new welcome RPC is read-only. Placement is deferred until an explicit send, retains the selected session key, revalidates selection/epoch, and surfaces failures without dropping drafts. Cancellation stops later requests but does not imply rollback; retained per-session intent prevents retry from silently bypassing placement preflight. Avatar loading reuses the existing bounded media policy. No credential files, conversation contents, private paths, or raw logs are attached.Compatibility and Migration
Yes/No) Yes for existing chat and recent navigation; shared welcome prompts require the companion Gateway method.Yes/No) No product configuration change.Yes/No) No data migration.controlUi.welcome.get, then reconnect Companion. Do not treat the preview's nominal 2026.9.9 version as evidence that released 2026.9.9 contains it.Review Conversations