feat(desktop): use the shared composer in WorkHub progress cards - #5129
Merged
Merged
Conversation
Generated-by: OpenAI Codex
Generated-by: OpenAI Codex
Generated-by: OpenAI Codex
Generated-by: OpenAI Codex
Capture the visible conversation boundary at Send and preserve it across pending, live, and persisted messages in ordinary sessions and WorkHub. Dim pending steering backgrounds until consumption. Generated-by: Codex
Present steering and follow-up queues with distinct timing and shared edit, retract and reorder actions. Insert steering into the transcript at actual consumption and preserve queue order through durable edits and restart. Generated-by: Codex
Generated-by: Codex
M4n5ter
force-pushed
the
feat/workhub-progress-input
branch
from
September 10, 2026 06:20
d712aa9 to
c4df663
Compare
Generated-by: Codex
Generated-by: Codex
Normalize uploaded attachment identities at the Desktop boundary, recover coordination successors in their execution domain, and wait for durable queue edits at the provider boundary. Keep Host queue rows out of local transient state, reject ambiguous cross-mode retries, and remove the unused display anchor contract and single-owner facades. Generated-by: Codex
Defer recovered WorkHub turns until Desktop tools are bound, fence steering admissions at provider boundaries, and retain visible admission placeholders and exact retry identities until Host evidence settles them. Generated-by: Codex
Persist the authenticated capability provider identity with each WorkHub root and inherit it across successors. Recover only a matching principal, Client and credential owner; unrelated registrations and legacy admissions without evidence cannot select a provider. Generated-by: Codex
Return verified provider evidence from the same registry mutation that binds a live Session, and require it before admitting a WorkHub v2 root. Cover disconnect/reconnect followed by both cold-recovery crash cuts and reject missing or split-provider tools. Generated-by: OpenAI Codex
jackwener
approved these changes
Sep 10, 2026
jackwener
left a comment
Member
There was a problem hiding this comment.
Approved at exact head a88bf417f792b4bf4f34e8fa23f68a3e3d569c4b at the explicit direction of M4n5ter. No technical review was performed as part of this action; M4n5ter requested the approval and accepts full responsibility for subsequent handling.
At submission time, the hosted test check was terminal and successful. This approval is not a merge decision, and no merge was performed.
Review notice: This approval was submitted by an automated review agent operated by jackwener and is published at the direction of M4n5ter, who requested this action and is the human accountable for it.
Shouly
pushed a commit
to Shouly/maka
that referenced
this pull request
Sep 10, 2026
Three upstream commits, and 36 conflicts of which 30 are files this fork deleted (the WorkHub feature and its stories, upstream's composer, chat-turn and chat-view, two stylesheets, four main tests): our deletion kept in every case. - apache#5014 adds the scoped plugin services — prompt, LLM, LSP, shell, skill, tool, web and the scope registry. `packages/runtime` only; no renderer surface here. - apache#5129 gives WorkHub progress cards the shared composer. It reaches us through preload and storage, which this fork does not rewrite, and through `packages/ui`. WorkHub itself has no page here. - apache#5134 rebuilds upstream's message action rows on Astryx components. The styling does not apply — this renderer is not Astryx — but one product decision in it does, and is adopted in the commit that follows. Four resolutions worth naming: - `store/session-event-handlers.ts` keeps ours. apache#5129 stops projecting queued entries as transient messages and lets the Host queue be their only representation; here queued messages are rendered IN the transcript (`current_turn` beside the running turn, `next_turn` below it), which the core-dialogue regression pins. Adopting upstream's would delete that. - `lib/ported/turn-footer-actions.ts` auto-merged, silently taking apache#5134's removal of the `info` action while `use-turn-presentation` still computed its tooltip and the footer still rendered it. Restored to ours so the merge is consistent; the removal is done properly in the next commit. - `lib/ported/transient-message-projection.ts` keeps ours: upstream's new `pendingSteering` carry-over is for a field this fork's projection type does not have. Its main-process test is kept too, or the merge would have dropped coverage of a function we still export. - `components/ui/skeleton.tsx` was paired by git with upstream's `composer-attachments.ts` — a rename/rename false match, so ours was restored from HEAD rather than through `git checkout --ours`. `packages/ui/src/conversation-copy.ts` auto-merged and brought upstream's queue vocabulary with it: Shift+Enter is steering, Enter is a follow-up. That is already this composer's behaviour; the next commit puts it on screen. Verified after a clean rebuild of every workspace: typecheck, format, lint, asf-headers, locale hygiene, renderer architecture, e2e budget, stale-dist, third-party notices, every workspace's unit tests, both smokes, and the e2e suite (43 passed; `rename-focus` failed on the hover race that has passed three times standalone). Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Shouly
pushed a commit
to Shouly/maka
that referenced
this pull request
Sep 10, 2026
…each message is Two things upstream's apache#5134 and apache#5129 made available, adopted where they apply. The turn footer's `info` action is gone and the meta (model · duration · cost) is printed beside the actions. It was a button whose click did nothing — `SessionView` had a line for exactly that, `if (id === 'info') return;` — and existed only to hold a tooltip, which is the one place a reader has to hover to find. The id, its three locale labels and the union member go with it. The queue plate now says what each row is. Steering joins the answer being written; a follow-up starts the next turn — the composer has always sent them differently (Enter queues a follow-up, Shift+Enter steers, so a habitual Enter never interrupts the answer in progress), but the plate rendered both the same, which left the missing drag handle on a steering row looking like a bug rather than a rule. Each row carries its kind, and the plate's title carries the shortcut. The words are upstream's, from the copy the sync merged in. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
WorkHub progress cards keep the shared composer available in compact, expanded, docked and floating layouts. Focusing opens the input area, and accepted sends expand the conversation. Enter and the send button queue a follow-up while a Turn is running; Shift+Enter steers the current Turn, matching ordinary chat. Both paths preserve uploaded attachments and submission identity. An uncertain submission can only be retried with its original text, attachments and sending mode until Host evidence resolves it.
The pending panel uses the Host queue as its single authority, with editing, removal and ordering for steering and follow-ups. Local admission placeholders stay visible after an accepted response until matching queue, steering or transcript evidence arrives, including across a disconnected observer. Steering enters the transcript when Runtime consumes it; the provider boundary waits for pending steering admissions and durable queue edits and includes the entire batch in order. Follow-ups advance one per Turn and retain WorkHub coordination authority across recovery, including crashes before successor admission or before its Run starts. Cold recovery retains pending work until the original Desktop provider returns with both required WorkHub tools. Live binding verifies both tools and captures the authenticated principal, Client and capability owner fingerprint in one registry mutation; every new v2 root requires that evidence before durable admission, and successors inherit it. Unrelated providers cannot activate recovery, even with identical tool names. Older admissions without binding evidence remain pending. Stop receipts clear withdrawn rows even without retraction events. A shared question-mark tooltip explains the shortcuts. The unused display-anchor contract and two single-caller public facades are removed; compatibility epoch advances to 139.
Card and conversation transitions share a damped resize animation, preserve focus and IME input, and respect reduced motion. Compact composers resize with their content; expanded conversations allow native manual resizing. A fixed-height renderer canvas stays anchored to the native bottom during transitions, avoiding repeated conversation layout. Cancelling a transition restores normal input coordinates before docking. Warm summons retain painted content.
Verification
Before:
After:
AI use
Tool(s) and scope: OpenAI Codex — implementation, regression tests, and validation.
Checklist
Does this PR entail a change in behavior?