Repository navigation
feat(harness): Codex and Muse /resume pickers, pi's folder trust prompt and opencode's update prompt on the phone - #446
Merged
AltanS merged 3 commits intoOct 16, 2026
Conversation
…enus Both paint the same picker: a 'Resume a previous session' title, the highlighted session (› in Codex, ⟩ at column 0 in Muse) and a footer of '<key> <verb>' hints joined by runs of spaces. harness/session-picker.ts reads it, each adapter passing its pointer and region signature, and lifts a menu with Up/Down, Resume (Enter) and Exit (Escape); ctrl+a archive and ctrl+c exit stay keyboard-only. Four live captures (Codex 0.159.3, Muse 1.4.8). Live check 2026-10-15: on both agents the picker lifted, Down changed the signature, Exit returned a ready composer, and Resume resumed a session. Co-Authored-By: Claude <noreply@anthropic.com>
pi 1.2.0 fills the screen before its editor with 'Trust project folder?' in an untrusted folder that holds project resources: the folder, an explanation, five unnumbered options with a → pointer (Trust, Trust parent folder with the parent wrapped under it, Trust (this session only), Do not trust, Do not trust (this session only)) and '↑↓ navigate enter select escape/ctrl+c cancel'. The question reader declines it for want of numbers. pi/trust.ts reads it and takes ask.ts's plan (a) from the footer through parsePiFooter (ADR 0098): each option is a pointer walk then Enter (ADR 0080), and Escape is Cancel. Unknown labels refuse. The card starts at the first option; the coreSignature blanks the pointer; the walk pair is registered; modalOnScreen counts the prompt, which has no status rows under its rule. Live check 2026-10-15 with a throwaway PI_CODING_AGENT_DIR, each tap done as the phone does it (arrows, re-read, Enter only when the tapped row reads Enter and the core is unchanged): Trust (this session only) went on and wrote no trust.json, Cancel went on untrusted, Trust wrote trust.json and the next launch showed no prompt. Co-Authored-By: Claude <noreply@anthropic.com>
opencode 1.18.34 opens 'Update Available … esc' at launch when a newer release is out, with a body and 'Skip Confirm', Confirm highlighted, so Enter installs the update. It has the pickers' title row but no Search field, so pickerOverlayUp missed it and composerReady said the composer under it was ready. chrome.ts gains confirmDialogUp (a title row ending in esc, and within six rows a Confirm ending in the esc hint's column); hasComposer, composerPrompt and modalOnScreen read it beside pickerOverlayUp, so the reply is refused and the unread-dialog card offers Escape. Live check 2026-10-15 in a throwaway Herdr session: on relaunch the prompt read as an unread dialog with the composer refused, and Escape dismissed it to a ready composer. Enter was never pressed. Co-Authored-By: Claude <noreply@anthropic.com>
Owner
|
Thanks @GGGODLIN, this lands in 1.22.0. Your three commits are kept with their hashes, and the changelog credits you. On top I labelled your seven captures for the screen corpus, moved Codex's 0.162 resume-search capture into the picker's menu list because it now lifts, and widened the opencode update prompt's title-to-button window so a narrower pane that wraps its body still refuses a reply. |
3 tasks done
GGGODLIN
added a commit
to GGGODLIN/gaddi
that referenced
this pull request
Oct 17, 2026
Merge AltanS/collie v1.22.0 (f2f4ef6) with the Send Protocol, Surface readers, hook holds, durable sessions and Themes v2. Keep fork 2.5.0 and the Gaddi brand, updater, descriptions and recap, retell, reply deliverables, local links, attention switchers, operator commands and skills, image editing, Taiwanese speech conversion, tablet layout, host clipboard and Island integration. Take upstream's integrated AltanS#446, AltanS#447, AltanS#448 and AltanS#452 captures and readers, including the opencode wrapped-body allowance and agy inline confirmation guard. Preserve the pending AltanS#449/AltanS#453 bars, Grok and Muse marks, Muse catalog and bundled skills, OMP paste support, and the 9dde2b2 Tasks dock in Chat and Terminal. Compose quoting with growing durable replies and keep the cross-host switcher's address beside its new badge. Route account-switch keys through the upstream key gate. Keep historical fork changelog sections unchanged; merge upstream 1.22.0 into Unreleased without duplicating already shipped fixes. Adopt upstream's Claude/opencode verification ledger as directed, without widening Send profile claims. Combine the existing Windows skip budgets by named tests. Root/web typechecks, lint, build and both unit suites pass; real-agent and dev-lane PWA acceptance remain with the coordinating session. No push, release or flake.lock change. Co-Authored-By: Claude <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.
Codex's and Muse's
/resumesession picker and pi's folder trust prompt now lift as cards with their own keys, and opencode's Update Available prompt now refuses a reply. Before, the phone offered only Escape on the Codex picker, showed no card over the Muse picker or the pi prompt and kept the composer open, and read the composer under opencode's prompt as ready, where a reply's Enter confirms the update. One commit each.feat(harness)session pickers/resumepaints aResume a previous sessionpicker that no reader recognised›in Codex or⟩at column 0 in Muse, a footer of<key> <verb>hints) lifts a menu with Up, Down, Resume (Enter) and Exit (Escape).ctrl+aarchive andctrl+cexit stay keyboard-onlyfeat(harness)pi trustTrust project folder?and five unnumbered options under a→pointer; the question reader declines it for want of numbersparsePiFooter(ADR 0098): each option is a pointer walk then Enter (ADR 0080), Escape is Cancel, an unknown label refusesfix(opencode)Update Available … escwithSkip Confirm, Confirm highlighted, has the pickers' title row but no Search field, sopickerOverlayUpmissed itconfirmDialogUp(a title row ending inesc, and within six rows aConfirmending in the esc hint's column) is read besidepickerOverlayUpbyhasComposer,composerPromptandmodalOnScreen, so the reply is refused and the unread-dialog card offers EscapeChange outline
Two new readers and the files that call them:
Reviewer guide
Start:web/src/lib/harness/session-picker.ts.Then:pi/trust.ts, thenconfirmDialogUpinopencode/chrome.ts.Validate:codex.test.ts,muse.test.ts,pi.test.ts,opencode.test.tsandunread-dialog.test.ts, over the seven captures below.Focus: a card offers only keys the screen prints (Enter, Escape, the arrows), and a screen that is not exactly one of these shapes keeps the composer refused.Validation beyond the suites
These ran on the fork build that carries these commits along with the fork's other changes, not on this branch over
mainalone. Each was a throwaway Herdr session with throwaway config directories, each tap sent the way the phone sends it, on 2026-10-15:trust.json; Cancel went on untrusted; Trust wrotetrust.jsonand the next launch showed no prompt.Captures. Seven new ones, each with its fixtures README row:
codex--resume-picker.txtand-moved.txt,muse--resume-picker.txtand-moved.txt,pi--trust-prompt.txtand-moved.txt,oc--update-available.txt. The pi and opencode folder paths became invented sandbox paths of the same width, and in the opencode capture the model and provider labels were renamedmini demo host.Before and after, from the playground's
PaneRouterin aPhoneFrameat 390 px with its sample pane,mainon the left and this branch on the right. No bridge is running there, so the cards' keys are inert and pi's card says "Reconnect to answer". For Codex and Muse the shot uses a copy of the capture with its run of blank rows folded to one, so the list and the keys fit on one screen.Base branch — see CONTRIBUTING.md:
main— there is one line of development, andmainis itChecks
bun run typecheckat the root and inweb/exited 0;bun run lintexited 0;bun test ./bridge ./cli ./scripts8539 pass, 70 skip, 0 fail;cd web && bun run test416 of 416 files, 26321 tests pass. With each commit's fix taken out and only its tests left, onmain8629ecb: 9 failures for the session pickers, 7 for pi's trust prompt, 3 for opencode's update prompt. Not run:cd web && bun run e2e, the Windows suites, and a live agent run on this branch overmainalone.- **Codex's and Muse's `/resume` session picker gets phone buttons.** Up, Down, Resume and Exit, where the phone used to offer Escape only on Codex and nothing on Muse.- **pi's folder trust prompt gets phone buttons.** Each option is walked to and confirmed, Escape cancels; before, the composer stayed open over the prompt.- **opencode's Update Available prompt refuses a reply from the phone.** The composer under it read as ready, so a reply's Enter would have confirmed the update; the card now offers Escape.