Skip to content

feat: adopt upstream v1.21.0 and release 1.21.0+ys.1 - #92

Merged
yousecjoe merged 268 commits into
mainfrom
dev-joe-feature/adopt-v1.21.0
Oct 14, 2026
Merged

yousecjoe merged 268 commits into
mainfrom
dev-joe-feature/adopt-v1.21.0

Conversation

@yousecjoe

Copy link
Copy Markdown
Member

Summary

Adopt upstream Collie v1.21.0 and cut source-only fork release 1.21.0+ys.1, preserving fork-specific behavior. Target main, the default branch and current home of 1.18.1+ys.2; remote dev-joe is two commits behind main. The original checkout and deployed versions remain untouched.

Commits

SHA Subject Scope
fb7d5ea feat: adopt upstream Collie v1.21.0 Merge 265 upstream commits and resolve fork integration conflicts
456e08c fix: preserve masking and opt-out launcher boundaries Correct the three required independent-review findings
094c555 chore(release): 1.21.0+ys.1 Version files and release changelog only

Changes

  • Adopt upstream 1.19.0 through 1.21.0: New page, configurable Keys board, phone and host speech, durable agents, pinned Chat prompts, harness compatibility fixes, and TLS-only crew-peer update checks.
  • Preserve optional browser pairing with a secure default, independent access controls, masking and offline-cache boundaries, scoped pins, terminal preferences, fork update selection and consent, and the Herdr 0.8.0 floor.
  • Mask durable ask display fields in local and merged crew snapshots and stale-answer responses. Keep opaque control identifiers unchanged and respect COLLIE_REDACT=off.
  • Permit authorized anonymous launcher actions with memory-only additions and launch receipts, without recording their command history or folder recents. Keep header attribution distinct from paired-device labels during browser, CLI and crew revocation.
  • Document optional X-Crew-Device-Kind attribution provenance. Crew protocol remains 2; existing admission factors are unchanged. Both lead and member must be updated for the new opt-out behavior.
  • Retain manual source-only publication, the read-only release verifier, and the fork's release history. Import the durable-example CI job using the existing pinned Bun 1.4.2.
  • Record the starting ancestry and integration decisions in docs/adoption/v1.21.0.md.

Release

Published source-only release: https://github.com/youngsecurity/collie/releases/tag/v1.21.0%2Bys.1

The annotated tag points to 094c555a6c3ac26555b9f4bf76784dd80217a87a. The only uploaded asset is collie-release.json; the notes preserve the fork's update instructions and migration warnings. Published notes and the downloaded sidecar are verified against the tagged source before this PR is opened. This does not mean main has adopted the release yet.

Out of scope

  • Upstream v1.21.1, native Windows validation, live deployment, live agent canaries, and model-backed speech tests are not claimed.
  • The Cloudflare example's imported development dependency graph reports four high-severity package entries from one sharp advisory, GHSA-wq5f-xc86-pv6w, propagated through Miniflare, Wrangler and the Vitest plugin. It is outside Collie's root runtime dependencies. No automatic dependency upgrades or Cloudflare deployment were performed; avoid untrusted-image processing with those development tools until updated.

Related

All seven upstream tags are verified ancestors of this branch. These issues concern adoption into main, so closure is deferred to this PR's merge rather than performed merely because a release tag or PR exists.

Closes #88
Closes #87
Closes #86
Closes #85
Closes #84
Closes #83
Closes #80

Test plan

  • Verify fetched origin/upstream refs and ancestry. v1.18.1 was incorporated; all seven later adoption targets are now ancestors of the branch.
  • Both typechecks and full-tree lint pass on corrected integration 456e08c4. The exact release commit 094c555a changes only four release metadata files; its full build, root suite and frontend suite were rerun successfully.
  • Full root suite on corrected integration: 6,354 bridge tests, 2,214 CLI tests, 365 script tests, plus all shell and packaging checks. Expected skips: 1 bridge, 2 CLI, 46 scripts.
  • Full frontend suite on the exact release commit: 420 files, 26,251 passing tests, 32 expected failures and 49 todos.
  • All four release version surfaces agree on 1.21.0+ys.1; generated notes and collie-release.json pass the source-only release contract. The sidecar SHA-256 is e48a8deb6444f139c9e5a5edf87eb933a4f092786304188861cad6103cca6c67.
  • Real isolated crew integration: all 66 tests pass after the review corrections.
  • Durable local example: frozen install, typecheck, 191 tests pass. Cloudflare example: its npm lockfile install, typecheck, 14 local tests pass; no deployment.
  • Chromium phone/tablet and playground checks: 78 pass, 4 skip across smoke, handles, app height, launcher recipes, Keys, folder recents, OMP Ask, question overlays, phone speech, worker CSP and voice takeover. Fixture-only servers, never a live bridge.
  • Two independent initial reviewers identified one high and two medium requirement violations; all three were fixed. Two fresh final reviewers reported no findings on 456e08c4, with 1,443 and 259 targeted tests passing respectively.

The first concurrent root/frontend run timed out in an upstream SQLite fixture setup. The root suite passed when run alone, without changing the fixture or loosening its timeout. An imported CJK rendering test was corrected to explicitly enable wrapping rather than assume upstream's default.

AltanS and others added 30 commits October 9, 2026 19:06
… home indicator

The Keys sheet says Share instead of Copy to another device, the intro and the
empty import line lose the device talk, and the Keys dock header holds only the
KEYS label and the pencil. The tall sheet ends 1.5rem plus the safe area clear
of the screen edge, and Restore default is an outlined button.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…and sharing by code

The ADR is renamed to say the pad is a board you arrange, records the area
rules, schema 2 and the new Default, and drops the per-device framing. The
configure page says where the pad is stored in one sentence.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
A key is anchored at one cell and spans 1 to 3 columns and 1 or 2 rows, never
over another key and never off the board. Drops move the whole area, a drop on
a key of the same size swaps, any other overlap is refused with a grey outline
and a line naming the key in the way. Width and Height sit in the editor
toolbar. The dock and the editor place keys with CSS grid spans. The Default
and the presets use a three-cell Space. Layout codes and storage move to
schema 2 and still read schema 1.

The chord builder gains a Modifier kind that saves a sticky Ctrl, Alt or Shift
key, and an armed modifier lets go when its key leaves the board.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
A small label on the mirror's bottom-right corner, above the belt, names
the model the pane's agent is on ("Opus 5.5"). The bridge already read the
model on every cache probe; the tracker now keeps it per session on its own
map (the engine drops the cache entry when it has nothing to say, and a
model is worth showing even then), and the snapshot attaches it as
PaneWire.model beside `cache`. A Claude `/model` written after the newest
turn wins over that turn's own model, so the label is right before the next
turn runs. The web shortens Claude ids to Claude Code's own words, drops
provider and gateway prefixes, and draws nothing without a model.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude Code's configured statusline, Codex's footer, omp's statusline and pi's
footer print the model themselves, so the label above the belt said it twice.
The label now stands down when the rows the phone draws near the bottom name
the same model: the lifted statusline strip for a harness with an adapter (in
Chat as well, the strip stands below both bodies), the last raw rows for one
without (pi) and in raw-terminal mode, which only the Terminal body draws. The
bridge parses no screen, so the web's already computed statusLines is the
signal. Words are compared, not substrings, across id and display spellings
("claude-opus-4-8" vs "[Opus 4.8]"), so "Opus 5" is not found in "Opus 5.5".
The answer is held: a naming row hides the label at once, a frame with no rows
changes nothing, and three frames in a row of rows that lack the name bring it
back, so a dialog or a redraw cannot blink it. The label is absolute and owns
no line, so it arriving or leaving moves nothing.

Its screen-reader string is now one sentence per locale ("Model {name}", like
branch.aria) instead of a word and a hard-coded colon.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…or's turn

Claude Code 2.1.291 takes a message into a running turn and writes no user
row for it, only a queued_command attachment after the absorbed_mid_turn
remove. The reducer cleared the waiting place and dropped the attachment,
so the message vanished from Chat. A human prompt attachment now becomes a
user row (same classifyUserText path, the attachment's own time, one row
per delivery_id). Other origins and non-prompt modes stay off screen.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…ent works

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
… works

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
On Windows the bridge can stay alive and stop answering every request,
/api/health included (0% CPU, port open, sockets in CLOSE_WAIT). The
Task Scheduler launcher only relaunched a bridge that exited, so it
stayed down until `collie stop` + `collie start` by hand (AltanS#386).

- The launcher asks the bridge's health route every 30 s after a 2 min
  grace, and three misses in a row (~90 s of silence) end the bridge so
  the existing loop relaunches it. Any HTTP answer counts as alive, so a
  deposed member or a cold standby door is never ended.
- The check is resolved at launch from the bridge's own environment
  (loadContext gains an `ambient` option) and asks where the update
  health gate asks (probeTarget). A peer with no standby door, mutual
  TLS only, gets no checks.
- A kill that does not take is repeated at the next silent check.
- probeTarget dials loopback for a wildcard bind and brackets an IPv6
  literal; both were broken URLs for the update gate too.

Refs AltanS#386

(cherry picked from commit 12fa274)
Bun's fetch sends even a loopback request through HTTP_PROXY. With a
proxy in the launcher's environment, every check of a healthy bridge
went to the proxy: a dead one read as a silent bridge and ended it
every few minutes, a live one answered for a bridge that had stopped.
The check now asks with node:http, which reads no proxy variable, and
uses no agent so no kept-alive socket outlives it. An address node:http
cannot parse is a miss, not a throw.

Adds the Unreleased line for the fold of PR AltanS#387.

Refs AltanS#386

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… door

realFrontDoorExec ran `tailscale serve` with spawnSync and no timeout.
A deposition that arrives on the wire runs it on the bridge's one
thread while the bridge serves, so a tailscale that never returned
froze every route, /api/health included, for good. Each call is now
killed after 30 s and reads as a failure, which the teardown already
reports as one warning.

Not the cause of AltanS#386 (that bridge is solo and records no mapping),
found while sweeping the bridge for synchronous calls without a bound.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Bun keeps a proxy it has read from the environment for the life of the
process, and deleting HTTP_PROXY afterwards does not clear it. Setting
it in the test process sent a later suite's loopback fetch to a dead
proxy (sys.test.ts, realNet and a rehearsal mirror). The probe now runs
in a child that has the proxy, and this process never sees one.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… launchers

Docs-only. Adds a Start-from-the-phone bullet, rewrites the Keys bullet and caption, and lists launchers in the Configure row.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…rade notes

Docs-only. claude-code-on-your-phone gains a section on the New page; crew.md says each machine detects its own agents; multiplexers, troubleshooting and upgrading cover the New worktree reason, greyed agents, folder refusals and the 1.19.0 changes.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
README only.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
check-mux-names refuses a multiplexer name in web/src, and the preset id and
label "tmux" tripped it (8 failures in bun run test). The preset keeps its
board and its line; only the id and the name change, in all 12 locales, the
README, docs/configure.md and ADR 0092.

SKIP_VERSION_CHECK: the Keys pad is unreleased; the release commit rewrites
its Unreleased bullet with the new preset name, so no new bullet is due.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Release counsel: commands-recent.json kept on disk, and listed on every New
page, a secret typed once (TOKEN=abc deploy). looksSecret flags an
assignment word, a URL with a password, and words such as token, secret
and password; such a line runs as usual and is not recorded. A guess that
errs towards keeping too little. ADR 0095 amended (rules 16 and 17),
configure.md and security.md say so.

SKIP_VERSION_CHECK: one-off commands are unreleased; the release commit
writes their bullet with this rule in it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… 1.19 board

Two e2e failures in the release gate. The New page dropped the sheet's
focus move after a tap on a Favourite or Recent folder, so the field kept
focus and a phone kept its keyboard open; Start now takes focus after the
render, counted per tap because the tapped folder may already be in the
field. nav-tray-enter still measured Enter across two rows; since the 1.19
board Space is three cells and Enter one, so it measures that.

SKIP_VERSION_CHECK: both are inside unreleased 1.19.0 work.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… tests read native paths

windows.yml failed 17 bridge tests on the 1.19.0 release commit. One was a
real bug: Git for Windows answers --git-common-dir with forward slashes, so
the `\.git` check missed and a linked worktree passed for its own main
checkout; the path is normalised first. A folder typed as `~\projects` now
means home on Windows, as `~/projects` does. The other sixteen were tests
that expected POSIX paths or 0600 modes; they build paths with join and
skip the mode check on NTFS, as the older state-file tests do.

SKIP_VERSION_CHECK: fixes inside the 1.19.0 work; the 1.19.0 section names
the `~\` spelling, and the tag goes on this commit.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…air (AltanS#393)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ltanS#392)

`collie update --help` began the real update, because every verb is registered with commander's
help off and received `--help` as an argument. A guard in front of every verb and sub-verb body now
prints the usage for `-h` and `--help` and returns 0. The bootstrap verbs (`build`, `_apply-update`)
hand a help request on to the table. An argument after `--` is not a help request. Parent verbs keep
their own usage action.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Drop the pointer to the external collie skill, state nothing outside the
repo, and use generic placeholders for pane ids and capture paths.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…mid-send stall

The /models-style overlay paints its own bordered box over the screen while
the composer tail stays intact, so composerReady still answers true although
typing would land in the overlay's filter, never the input box (the Navi
stall). A new optional adapter predicate, overlayHoldsKeyboard, matches only
the closed box (bar rows the heavy ┃ opens AND closes); it is consulted at
the three reads that already exist — the pre-flight probe, the sweep's
re-confirm, the chunked-send read — so no send path grows a new pane read and
force keeps overriding exactly like a missing composer. A stall whose last
verify screen shows a dialog, menu or overlay names it via reply.stalled.modal
(new key in all twelve bundles), except under force where the key-landed
warning stays.
… stall string

overlayHoldsKeyboard matched any single bar row that the heavy bar opens and
closes. A user message echoing a pasted table drawn in heavy bars (rich, eza,
lazygit) would refuse every send until it scrolled away. Now a run of at least
three consecutive closed rows is required; a bare or plain row ends the run.
The slash-palette capture has ten such rows in a row. The doc comment names the
remaining gap.

Also: reply.stalled.modal in Turkish said "yer paylasimi" (location sharing)
for overlay; it now says "ust katman". Fix an indent slip on modalOnScreen in
types.ts. Add the changelog bullet for AltanS#391.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…tor does (AltanS#383)

On macOS os.freemem() is only free plus speculative pages, so the file cache
read as used and a Mac sat at 88 to 98 percent. The sampler now starts
/usr/bin/vm_stat on darwin, async and never awaited (killed after 1 s, one in
flight at a time), and serves its last parsed answer on the next sample:
app (anonymous minus purgeable) plus wired plus compressor pages, in the page
size vm_stat prints. Until the first answer, when it is older than three idle
intervals, or after a failure, memory is totalmem - freemem. The command goes
through a new optional async run seam on MachineReaders.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- A `_` verb (`_apply-update` and the other verbs only another Collie
  spells) answers `--help` with exit 2 and runs nothing, so a wrong argv
  in an update fails loudly instead of reporting success.
- The /auth/ placeholder escapes the mount before it lands in the HTML.
- The macOS vm_stat run gets a fixed C locale.
- The AltanS#383 changelog line says the change is not yet checked on a Mac.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
AltanS and others added 14 commits October 13, 2026 12:13
… removed

Restores, from main: the PINNED corpus list and its count test (with the nine
18.10 captures added), the cohort guards, the FOREIGN and corpus size checks,
the stripChrome same-reference tests (limited to captures that end in content,
since the nine new captures end in a file newline), and the full contract
header of ask.ts with sections for batched questions, the review screen and
the Ctrl+O expand state. ASK_NOTES.md says batches and the review are lifted
only for the default glyph preset.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
TranscriptStore.page now reads through a new cached(), which returns the parsed window and whether
the file's head was clipped, without slicing it. Behaviour of page is unchanged. The next commit
reads the live window's missing prompt from this cache instead of opening the log again.

Co-Authored-By: Claude <noreply@anthropic.com>
scrollToChild moves a child's top edge to the top of the scrollport and stops following the tail.
It aligns to the padding edge, so a band inset over the top does not hide the child, and it
declines when the reader has scrolled away unless the caller passes force for a control the
reader pressed, so arriving content never overrides backscroll. ChatMessageList exposes it on its
handle. The pinned prompt in a later commit jumps with it.

Co-Authored-By: Claude <noreply@anthropic.com>
A first paint is 40 turns, and a long run of tool calls pushes the prompt that started it out of that page. The window reports the newest operator prompt it knows as a state field beside queued, capped at 1000 characters and masked like the rest of the body. A window whose opening tail landed mid-run knows none; it looks the prompt up once per generation through the History read without holding the answer, which reuses a valid History cache and otherwise costs that read once. Notes the agent sent itself and textless user rows (orphaned tool results) never count. ADR 0073 gains an amendment under queued.

Co-Authored-By: Claude <noreply@anthropic.com>
An overlay over the top of the Chat scroller, fixed at two lines so it moves nothing, names the prompt the topmost visible turns follow. A held prompt is a tap away; a prompt the first page left out comes from the bridge's lastPrompt and a tap walks older pages to it, at most ten; with neither, the pin offers older turns. A prompt that is not held pins over 'Load older' too, since a forty-call run folds into one card that fits the screen and the pin's tap does what that row does. Off on a saved copy.

A walk looks for the prompt that was tapped, so a newer prompt landing live meanwhile does not become the target. A jump lands on the prompt at the scroller's padding edge, the line the pin reads, and clears the pin. Blocks overlap by 24px (each block's -12px margin top and bottom), so the top block is measured past that overlap. Older blocks that never rendered sit at their content-visibility placeholder and take their real size after the first scroll, so the jump re-aligns at 100, 250 and 500ms; it stops when the reader touches the list or the latest-turn button beside it, and a new jump or an unmount ends the one before. A walk to an older prompt is called off the same way if the reader moves while its pages load.

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Ran the two English placeholders (ask.notTaken, connection.tokenRefused) through wordsmith, then matched each catalog's register by hand.
The zh and zh-TW ask.notTaken lines are hand-written, because the length guard kept the English.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…sts say so

Windows has no socket transport. chooseDurableTransport takes the platform as a
parameter and answers a socket path on win32 with one config error that names
COLLIE_DURABLE_URL and COLLIE_DURABLE_TOKEN. The boot line, the adapter and the
durable-env doctor row print that sentence, and the socket rows skip with the reason.

The fixture gains startWire and wire: on Windows (or with COLLIE_TEST_LOOPBACK=1)
the fake program listens on 127.0.0.1 and the adapter keeps the socket budgets,
so the control, ask, answer, receipt, events and Chat tests run on the wire
there. Tests about the socket itself skip on win32, and the Windows skip budget
names them.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Also moves ADRs 0099 to 0103 (durable programs, asks as data, screenless
controls, starters, the two transports) from Proposed to Accepted, shipped
in 1.21.0.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Merge upstream v1.21.0 while retaining fork authorization, offline cache, update selection, terminal preferences and source-only publishing boundaries.

Refs: #88

Signed-off-by: @yousecjoe
Mask durable asks on local and crew responses. Keep anonymous additions transient and distinguish header attribution from paired device revocation, including optional crew provenance.

Refs: #88

Signed-off-by: @yousecjoe
@socket-security

Copy link
Copy Markdown

@coderabbitai

coderabbitai Bot commented Oct 14, 2026

Copy link
Copy Markdown

Important

Review skipped

Too many files!

This PR contains 863 files, which is 763 over the limit of 100.

To get a review, reduce the PR to 100 files or fewer by splitting it into smaller PRs or changing its base branch.

Upgrade to a paid plan to raise the limit.

Usage-priced reviews support at most 300 files.

⚙️ Run configuration
  • Configuration used: Organization UI
  • Review profile: ASSERTIVE
  • Plan: Advanced
  • Run ID: 4c40d7c9-1a94-4348-96cb-e94a9bb89324
📥 Commits

Reviewing files that changed from the base of the PR and between a4c6f48 and 094c555.

⛔ Files ignored due to path filters: 4
  • examples/durable-member-cloudflare/package-lock.json is excluded by !**/package-lock.json
  • examples/durable-member/bun.lock is excluded by !**/*.lock
  • web/public/dog-gallop.png is excluded by !**/*.png
  • web/public/stt/needle-3-93e88ede/needle.wasm is excluded by !**/*.wasm
📒 Files selected for processing: 863
  • .adr/0010-long-sends-are-verified-via-the-paste-placeholder.md
  • .adr/0031-freshness-is-a-declared-promise.md
  • .adr/0032-a-worktree-is-opened-by-the-multiplexer-not-by-git.md
  • .adr/0053-an-unread-dialog-still-has-a-way-out.md
  • .adr/0073-a-live-session-is-a-bounded-window-on-the-existing-poll.md
  • .adr/0077-the-omp-ask-single-select-is-lifted-and-its-multi-select-is-not.md
  • .adr/0084-machines-report-their-load.md
  • .adr/0089-a-second-agent-on-a-branch.md
  • .adr/0091-launch-by-id-with-a-request-id.md
  • .adr/0092-the-keys-pad-is-a-board-you-arrange.md
  • .adr/0093-a-branch-folder-is-named-by-its-parent.md
  • .adr/0094-launchers-added-from-a-phone.md
  • .adr/0095-one-off-commands-and-their-history.md
  • .adr/0096-speech-can-stay-on-the-phone.md
  • .adr/0097-codex-speech-can-be-chosen-from-settings.md
  • .adr/0098-pi-questions-are-read-by-shape-and-footer.md
  • .adr/0099-a-durable-program-is-a-mux-with-no-screen.md
  • .adr/0100-an-ask-travels-as-data-and-is-answered-by-id.md
  • .adr/0101-a-control-on-a-screenless-pane-names-the-turn-it-saw.md
  • .adr/0102-starters-are-launcher-rows.md
  • .adr/0103-the-wire-has-two-transports-a-private-socket-or-tls-with-a-token.md
  • .adr/README.md
  • .env.example
  • .gitattributes
  • .github/workflows/ci.yml
  • .oxlintrc.json
  • ARCHITECTURE.md
  • CHANGELOG.md
  • CLAUDE.md
  • CREW_PROTOCOL.md
  • DESIGN.md
  • HARNESS_CONTRIBUTING.md
  • HERDR_API.md
  • MUX_CONTRACT.md
  • MUX_CONTRIBUTING.md
  • README.md
  • bridge/acl-policy.test.ts
  • bridge/acl-policy.ts
  • bridge/adoption-review.test.ts
  • bridge/answer-mask.ts
  • bridge/api-front-gate.test.ts
  • bridge/beacon-journal.test.ts
  • bridge/beacon/decorate.test.ts
  • bridge/cache/engine.ts
  • bridge/cache/tracker.test.ts
  • bridge/cache/tracker.ts
  • bridge/config-schema.test.ts
  • bridge/config-schema.ts
  • bridge/config.test.ts
  • bridge/config.ts
  • bridge/crew/admission.ts
  • bridge/crew/forward.test.ts
  • bridge/crew/forward.ts
  • bridge/crew/lead.ts
  • bridge/crew/mask.test.ts
  • bridge/crew/mask.ts
  • bridge/crew/merge.test.ts
  • bridge/crew/notify.test.ts
  • bridge/crew/notify.ts
  • bridge/crew/staleness.test.ts
  • bridge/crew/staleness.ts
  • bridge/device-kind.ts
  • bridge/durable/answer.test.ts
  • bridge/durable/answer.ts
  • bridge/durable/ask-push.ts
  • bridge/durable/chat.test.ts
  • bridge/durable/control.test.ts
  • bridge/durable/control.ts
  • bridge/durable/guard.test.ts
  • bridge/durable/guard.ts
  • bridge/durable/log.test.ts
  • bridge/durable/log.ts
  • bridge/durable/old-lead.test.ts
  • bridge/durable/old-lead.ts
  • bridge/durable/pane-asks.ts
  • bridge/durable/parse.ts
  • bridge/error-codes.ts
  • bridge/front-door.test.ts
  • bridge/front-door.ts
  • bridge/harness-launch.test.ts
  • bridge/harness-launch.ts
  • bridge/host-guard.test.ts
  • bridge/index.ts
  • bridge/journal/claude-resets.test.ts
  • bridge/journal/claude-resets.ts
  • bridge/journal/claude.test.ts
  • bridge/journal/claude.ts
  • bridge/journal/codex.test.ts
  • bridge/journal/codex.ts
  • bridge/journal/durable.test.ts
  • bridge/journal/durable.ts
  • bridge/journal/fixtures/openclaw/lab-sample-2026.10.2.json
  • bridge/journal/fixtures/openclaw/session-2026.10.2.json
  • bridge/journal/fixtures/openclaw/session-2026.9.8.json
  • bridge/journal/fixtures/openclaw/tui-ask-user-2026.10.2.raw.txt
  • bridge/journal/fixtures/openclaw/tui-ask-user-lab-2026.10.2.raw.txt
  • bridge/journal/fixtures/openclaw/tui-idle-2026.9.8.raw.txt
  • bridge/journal/grok.test.ts
  • bridge/journal/grok.ts
  • bridge/journal/live.test.ts
  • bridge/journal/live.ts
  • bridge/journal/muse.test.ts
  • bridge/journal/muse.ts
  • bridge/journal/openclaw.test.ts
  • bridge/journal/openclaw.ts
  • bridge/journal/opencode.test.ts
  • bridge/journal/pi.test.ts
  • bridge/journal/pi.ts
  • bridge/journal/read-since.test.ts
  • bridge/journal/reducer-equivalence.test.ts
  • bridge/journal/registry.test.ts
  • bridge/journal/registry.ts
  • bridge/journal/store.ts
  • bridge/journal/tool-call.ts
  • bridge/journal/types.ts
  • bridge/journal/unknowns.test.ts
  • bridge/launch-by-id.test.ts
  • bridge/launch-receipts.ts
  • bridge/launcher-adds.test.ts
  • bridge/launcher-adds.ts
  • bridge/launcher-recipes.test.ts
  • bridge/launcher-recipes.ts
  • bridge/launchers-added.test.ts
  • bridge/launchers-added.ts
  • bridge/launchers-durable.test.ts
  • bridge/machine-stats.test.ts
  • bridge/machine-stats.ts
  • bridge/mux/agents.test.ts
  • bridge/mux/agents.ts
  • bridge/mux/capabilities.ts
  • bridge/mux/conformance.ts
  • bridge/mux/durable/WIRE.md
  • bridge/mux/durable/adapter.test.ts
  • bridge/mux/durable/adapter.ts
  • bridge/mux/durable/asks.test.ts
  • bridge/mux/durable/clean.test.ts
  • bridge/mux/durable/clean.ts
  • bridge/mux/durable/client.test.ts
  • bridge/mux/durable/client.ts
  • bridge/mux/durable/controls.test.ts
  • bridge/mux/durable/events.test.ts
  • bridge/mux/durable/events.ts
  • bridge/mux/durable/example-cloudflare.test.ts
  • bridge/mux/durable/example.test.ts
  • bridge/mux/durable/fixture.ts
  • bridge/mux/durable/fixtures/hello.json
  • bridge/mux/durable/fixtures/snapshot.json
  • bridge/mux/durable/http-client.test.ts
  • bridge/mux/durable/http-client.ts
  • bridge/mux/durable/logo.ts
  • bridge/mux/durable/protocol.test.ts
  • bridge/mux/durable/protocol.ts
  • bridge/mux/durable/transport.ts
  • bridge/mux/durable/watch.test.ts
  • bridge/mux/durable/watch.ts
  • bridge/mux/fixtures.ts
  • bridge/mux/herdr/adapter.test.ts
  • bridge/mux/herdr/adapter.ts
  • bridge/mux/herdr/client.test.ts
  • bridge/mux/herdr/client.ts
  • bridge/mux/herdr/fixture.ts
  • bridge/mux/logo.test.ts
  • bridge/mux/registry.test.ts
  • bridge/mux/registry.ts
  • bridge/mux/types.ts
  • bridge/notifications.ts
  • bridge/operator-keys.ts
  • bridge/operator-launchers.test.ts
  • bridge/operator-launchers.ts
  • bridge/pairing.test.ts
  • bridge/pairing.ts
  • bridge/private-roots-guard.test.ts
  • bridge/prompt-binding.test.ts
  • bridge/prompt-binding.ts
  • bridge/push-titles.test.ts
  • bridge/push-titles.ts
  • bridge/recent-runs.ts
  • bridge/root.ts
  • bridge/run-once.test.ts
  • bridge/server.test.ts
  • bridge/server.ts
  • bridge/solo-baseline.test.ts
  • bridge/starter-launch.ts
  • bridge/state-engine.test.ts
  • bridge/state-engine.ts
  • bridge/stt/codex-detect.test.ts
  • bridge/stt/codex-detect.ts
  • bridge/stt/codex-setup.test.ts
  • bridge/stt/codex-setup.ts
  • bridge/stt/config.test.ts
  • bridge/stt/config.ts
  • bridge/stt/host-http.test.ts
  • bridge/stt/host-http.ts
  • bridge/stt/http.test.ts
  • bridge/stt/http.ts
  • bridge/stt/index.test.ts
  • bridge/stt/index.ts
  • bridge/stt/json.ts
  • bridge/stt/local-cli.ts
  • bridge/stt/provider.ts
  • bridge/stt/wav.test.ts
  • bridge/stt/wav.ts
  • bridge/stt/whistle-http.test.ts
  • bridge/stt/whistle-http.ts
  • bridge/stt/whistle-model.test.ts
  • bridge/stt/whistle-model.ts
  • bridge/stt/whistle-pins.test.ts
  • bridge/stt/whistle-pins.ts
  • bridge/stt/whistle.test.ts
  • bridge/stt/whistle.ts
  • bridge/types.ts
  • bridge/update-action.ts
  • bridge/worktree-base.test.ts
  • bridge/worktree-base.ts
  • bridge/worktree-bases.test.ts
  • bridge/worktree-bases.ts
  • bridge/worktree-branch.test.ts
  • bridge/worktree-branch.ts
  • bridge/worktree-choices.ts
  • bridge/worktree-folder.test.ts
  • bridge/worktree-folder.ts
  • bridge/worktree-from-folder.test.ts
  • bridge/worktree-receipts.test.ts
  • bridge/worktree-receipts.ts
  • bridge/worktree-route.test.ts
  • bunfig.toml
  • cli/context.ts
  • cli/crew-status-deputy.test.ts
  • cli/crew-status-deputy.ts
  • cli/doctor.test.ts
  • cli/doctor.ts
  • cli/durable-findings.test.ts
  • cli/durable-findings.ts
  • cli/history.test.ts
  • cli/io.ts
  • cli/lifecycle.test.ts
  • cli/lifecycle.ts
  • cli/main.test.ts
  • cli/main.ts
  • cli/mux.test.ts
  • cli/pairing.test.ts
  • cli/pairing.ts
  • cli/program.test.ts
  • cli/program.ts
  • cli/remote.test.ts
  • cli/stt-whistle.test.ts
  • cli/stt-whistle.ts
  • cli/stt.test.ts
  • cli/stt.ts
  • cli/sys.ts
  • cli/task-scheduler.test.ts
  • cli/task-scheduler.ts
  • cli/testdata/doctor-posix.golden.txt
  • cli/unit.test.ts
  • cli/unit.ts
  • cli/update-check.test.ts
  • cli/update-run.test.ts
  • cli/update-run.ts
  • cli/update.test.ts
  • cli/update.ts
  • cli/whistle-transcribe.test.ts
  • cli/whistle-transcribe.ts
  • docs/adoption/v1.21.0.md
  • docs/claude-code-on-your-phone.md
  • docs/configure.md
  • docs/crew.md
  • docs/deployment.md
  • docs/five-minute-install.md
  • docs/install.md
  • docs/multiplexers.md
  • docs/security.md
  • docs/troubleshooting.md
  • docs/upgrading.md
  • docs/voice-and-push.md
  • docs/windows.md
  • examples/durable-member-cloudflare/.dev.vars.example
  • examples/durable-member-cloudflare/.gitignore
  • examples/durable-member-cloudflare/README.md
  • examples/durable-member-cloudflare/package.json
  • examples/durable-member-cloudflare/smoke.ts
  • examples/durable-member-cloudflare/src/env.ts
  • examples/durable-member-cloudflare/src/member.ts
  • examples/durable-member-cloudflare/src/receipts.ts
  • examples/durable-member-cloudflare/src/storage.ts
  • examples/durable-member-cloudflare/src/token.ts
  • examples/durable-member-cloudflare/src/worker.ts
  • examples/durable-member-cloudflare/test/member.test.ts
  • examples/durable-member-cloudflare/tsconfig.json
  • examples/durable-member-cloudflare/vitest.config.ts
  • examples/durable-member-cloudflare/wrangler.jsonc
  • examples/durable-member/README.md
  • examples/durable-member/app.ts
  • examples/durable-member/bunfig.toml
  • examples/durable-member/package.json
  • examples/durable-member/pi-durable/index.ts
  • examples/durable-member/script.ts
  • examples/durable-member/sdk/conn.ts
  • examples/durable-member/sdk/core/handle.ts
  • examples/durable-member/sdk/core/hash.ts
  • examples/durable-member/sdk/core/index.ts
  • examples/durable-member/sdk/core/layout.ts
  • examples/durable-member/sdk/core/receipts.ts
  • examples/durable-member/sdk/core/rules.ts
  • examples/durable-member/sdk/core/types.ts
  • examples/durable-member/sdk/index.ts
  • examples/durable-member/sdk/peer.ts
  • examples/durable-member/sdk/server.ts
  • examples/durable-member/sdk/socket.ts
  • examples/durable-member/tests/caps.test.ts
  • examples/durable-member/tests/client.ts
  • examples/durable-member/tests/core.test.ts
  • examples/durable-member/tests/descendant.test.ts
  • examples/durable-member/tests/dial-child.ts
  • examples/durable-member/tests/e2e.test.ts
  • examples/durable-member/tests/hardened.test.ts
  • examples/durable-member/tests/helper-kill.test.ts
  • examples/durable-member/tests/log.test.ts
  • examples/durable-member/tests/options.test.ts
  • examples/durable-member/tests/protocol-suite.ts
  • examples/durable-member/tests/protocol.test.ts
  • examples/durable-member/tests/real-model.test.ts
  • examples/durable-member/tests/restart.test.ts
  • examples/durable-member/tests/util.ts
  • examples/durable-member/tsconfig.json
  • herdr-plugin.toml
  • package.json
  • packaging/aur/.SRCINFO
  • packaging/aur/PKGBUILD
  • packaging/nix/collie.nix
  • packaging/nix/sources.json
  • packaging/refresh.test.sh
  • scripts/check-flake-bun.test.ts
  • scripts/collie-cli.test.sh
  • scripts/git-hooks/pre-commit
  • scripts/harness-canary/README.md
  • scripts/harness-canary/agents/agy.ts
  • scripts/harness-canary/agents/claude.ts
  • scripts/harness-canary/agents/codex.ts
  • scripts/harness-canary/agents/grok.ts
  • scripts/harness-canary/agents/hermes.ts
  • scripts/harness-canary/agents/muse.ts
  • scripts/harness-canary/agents/omp.ts
  • scripts/harness-canary/agents/opencode.ts
  • scripts/harness-canary/agents/pi.ts
  • scripts/harness-canary/agents/profile.ts
  • scripts/harness-canary/args.ts
  • scripts/harness-canary/dialogs.ts
  • scripts/harness-canary/drive.test.ts
  • scripts/harness-canary/known-gaps.json
  • scripts/harness-canary/readers.ts
  • scripts/harness-canary/run.ts
  • scripts/harness-canary/scenarios.ts
  • scripts/harness-canary/transport.ts
  • scripts/harness-canary/verdict.test.ts
  • scripts/harness-canary/verdict.ts
  • scripts/install.sh
  • scripts/journal-probe.ts
  • scripts/mux-e2e.test.ts
  • scripts/mux-e2e.ts
  • scripts/mux-probe.ts
  • scripts/refresh-packages.ts
  • scripts/windows-suites.ps1
  • web/e2e/app-height.spec.ts
  • web/e2e/fixtures/csp.ts
  • web/e2e/launcher-add-recipes.spec.ts
  • web/e2e/manual/README.md
  • web/e2e/manual/check-wizard-lift.ts
  • web/e2e/manual/question-wizard-live.sh
  • web/e2e/manual/two-question.trigger.txt
  • web/e2e/nav-tray-enter.spec.ts
  • web/e2e/new-space-folders.spec.ts
  • web/e2e/omp-ask-chat.spec.ts
  • web/e2e/question-wizard-overlay.spec.ts
  • web/e2e/stt-phone.spec.ts
  • web/e2e/stt-worker-csp.spec.ts
  • web/e2e/voice-takeover.spec.ts
  • web/package.json
  • web/public/stt/needle-3-93e88ede/LICENSE
  • web/public/stt/needle-3-93e88ede/PROVENANCE.md
  • web/public/stt/needle-3-93e88ede/needle.js
  • web/src/app-height.test.ts
  • web/src/components/actions-row.test.tsx
  • web/src/components/actions-row.tsx
  • web/src/components/agent-card.tsx
  • web/src/components/agent-chat.test.tsx
  • web/src/components/agent-chat.tsx
  • web/src/components/agent-list.test.tsx
  • web/src/components/agent-list.tsx
  • web/src/components/agent-sidebar.test.tsx
  • web/src/components/agent-sidebar.tsx
  • web/src/components/ansi-output.test.tsx
  • web/src/components/ansi-output.tsx
  • web/src/components/app-header.test.tsx
  • web/src/components/ask-card.test.tsx
  • web/src/components/ask-card.tsx
  • web/src/components/build-stamp.test.tsx
  • web/src/components/build-stamp.tsx
  • web/src/components/card-dock.tsx
  • web/src/components/chat-cards.tsx
  • web/src/components/chord-builder.test.tsx
  • web/src/components/chord-builder.tsx
  • web/src/components/collie-home.tsx
  • web/src/components/composer-stt-phone.test.tsx
  • web/src/components/composer-stt.test.tsx
  • web/src/components/composer.test.tsx
  • web/src/components/composer.tsx
  • web/src/components/connection-banner.test.tsx
  • web/src/components/connection-banner.tsx
  • web/src/components/copyable-content.test.tsx
  • web/src/components/display-prefs.tsx
  • web/src/components/dog-gallop.test.tsx
  • web/src/components/dog-gallop.tsx
  • web/src/components/durable-composer.test.tsx
  • web/src/components/durable-composer.tsx
  • web/src/components/hands-free-control.tsx
  • web/src/components/idle-lock.tsx
  • web/src/components/key-board-editor.test.tsx
  • web/src/components/key-board-editor.tsx
  • web/src/components/launch-strip.test.tsx
  • web/src/components/launch-strip.tsx
  • web/src/components/launcher-added-list.tsx
  • web/src/components/launcher-how-sheet.tsx
  • web/src/components/markdown-text.tsx
  • web/src/components/model-tag.test.tsx
  • web/src/components/model-tag.tsx
  • web/src/components/mux-gated-controls.test.tsx
  • web/src/components/nav-tray.test.tsx
  • web/src/components/nav-tray.tsx
  • web/src/components/new-command-picker.tsx
  • web/src/components/new-space-folders.tsx
  • web/src/components/new-space-sheet.test.tsx
  • web/src/components/new-space-sheet.tsx
  • web/src/components/no-prompts-badge.tsx
  • web/src/components/no-prompts-sheet.tsx
  • web/src/components/option-button.test.tsx
  • web/src/components/option-button.tsx
  • web/src/components/pane-actions-sheet.test.tsx
  • web/src/components/pane-actions-sheet.tsx
  • web/src/components/pane-strip.tsx
  • web/src/components/prompt-pin.tsx
  • web/src/components/recording-strip.tsx
  • web/src/components/screen-transition.test.tsx
  • web/src/components/screen-transition.tsx
  • web/src/components/section-header.tsx
  • web/src/components/session-stream.test.tsx
  • web/src/components/session-stream.tsx
  • web/src/components/settings-page.tsx
  • web/src/components/space-overview.tsx
  • web/src/components/speech-control.test.tsx
  • web/src/components/speech-control.tsx
  • web/src/components/status-badge.test.tsx
  • web/src/components/status-badge.tsx
  • web/src/components/status-counts.tsx
  • web/src/components/strips-summary.tsx
  • web/src/components/tab-strip.tsx
  • web/src/components/tour-sheet.tsx
  • web/src/components/ui/chat/chat-message-list.tsx
  • web/src/components/ui/chip.tsx
  • web/src/components/ui/copyable-block.test.tsx
  • web/src/components/ui/copyable-block.tsx
  • web/src/components/ui/fab.test.tsx
  • web/src/components/ui/fab.tsx
  • web/src/components/ui/segmented.test.tsx
  • web/src/components/ui/segmented.tsx
  • web/src/components/ui/select.tsx
  • web/src/components/ui/sheet.test.tsx
  • web/src/components/ui/sheet.tsx
  • web/src/components/ui/tap-target.ts
  • web/src/components/ui/unseen-mark.test.tsx
  • web/src/components/ui/unseen-mark.tsx
  • web/src/components/unread-dialog-block.test.tsx
  • web/src/components/unread-dialog-block.tsx
  • web/src/components/update-card.test.tsx
  • web/src/components/update-card.tsx
  • web/src/components/voice-empty.tsx
  • web/src/components/voice-parts.tsx
  • web/src/components/voice-takeover.test.tsx
  • web/src/components/voice-takeover.tsx
  • web/src/fixtures/panes/README.md
  • web/src/fixtures/panes/claude--box-table-vs16-emoji.txt
  • web/src/fixtures/panes/claude-lab--ask-multi-named-v2296--w40.txt
  • web/src/fixtures/panes/claude-lab--ask-multi-named-v2296--w82.txt
  • web/src/fixtures/panes/claude-lab--ask-multi-v2296--w40.txt
  • web/src/fixtures/panes/claude-lab--ask-multi-v2296--w82.txt
  • web/src/fixtures/panes/claude-lab--ask-single-named-v2296--w40.txt
  • web/src/fixtures/panes/claude-lab--ask-single-named-v2296--w82.txt
  • web/src/fixtures/panes/claude-lab--ask-single-v2296--w40.txt
  • web/src/fixtures/panes/claude-lab--ask-single-v2296--w82.txt
  • web/src/fixtures/panes/claude-lab--ask-wizard-named-v2296--w40.txt
  • web/src/fixtures/panes/claude-lab--ask-wizard-named-v2296--w82.txt
  • web/src/fixtures/panes/claude-lab--ask-wizard-review-named-v2296--w40.txt
  • web/src/fixtures/panes/claude-lab--ask-wizard-review-named-v2296--w82.txt
  • web/src/fixtures/panes/claude-lab--ask-wizard-review-v2296--w40.txt
  • web/src/fixtures/panes/claude-lab--ask-wizard-review-v2296--w82.txt
  • web/src/fixtures/panes/claude-lab--ask-wizard-v2296--w40.txt
  • web/src/fixtures/panes/claude-lab--ask-wizard-v2296--w82.txt
  • web/src/fixtures/panes/claude-lab--menu-config-panel-named-v2296--w40.txt
  • web/src/fixtures/panes/claude-lab--menu-config-panel-named-v2296--w82.txt
  • web/src/fixtures/panes/claude-lab--menu-config-panel-v2296--w40.txt
  • web/src/fixtures/panes/claude-lab--menu-config-panel-v2296--w82.txt
  • web/src/fixtures/panes/claude-lab--menu-resume-picker-named-v2296--w40.txt
  • web/src/fixtures/panes/claude-lab--menu-resume-picker-named-v2296--w82.txt
  • web/src/fixtures/panes/claude-lab--menu-resume-picker-v2296--w82.txt
  • web/src/fixtures/panes/codex--v0159-task-title.txt
  • web/src/fixtures/panes/muse--approval-date-147.txt
  • web/src/fixtures/panes/muse--approval-ls-147.txt
  • web/src/fixtures/panes/muse--ask-multi-q1.txt
  • web/src/fixtures/panes/muse--ask-multi-q2.txt
  • web/src/fixtures/panes/muse--ask-multi-review.txt
  • web/src/fixtures/panes/muse--ask-season.txt
  • web/src/fixtures/panes/muse--ask-toppings-147-moved.txt
  • web/src/fixtures/panes/muse--ask-toppings-147.txt
  • web/src/fixtures/panes/muse--trust-prompt-147.txt
  • web/src/fixtures/panes/oc--draft-paste-token.txt
  • web/src/fixtures/panes/omp--v18-10-ask-batch-moved.txt
  • web/src/fixtures/panes/omp--v18-10-ask-batch-review.txt
  • web/src/fixtures/panes/omp--v18-10-ask-batch-second.txt
  • web/src/fixtures/panes/omp--v18-10-ask-batch-third.txt
  • web/src/fixtures/panes/omp--v18-10-ask-batch.txt
  • web/src/fixtures/panes/omp--v18-10-ask-long-expanded.txt
  • web/src/fixtures/panes/omp--v18-10-ask-long.txt
  • web/src/fixtures/panes/omp--v18-10-ask-revisited.txt
  • web/src/fixtures/panes/omp--v18-10-ask-single.txt
  • web/src/fixtures/panes/omp--v18-10-draft-blank-line.txt
  • web/src/fixtures/panes/omp--v18-10-draft-indented.txt
  • web/src/fixtures/panes/omp--v18-10-draft-two-lines.txt
  • web/src/fixtures/panes/omp--v18-8-ask-single-described-moved.txt
  • web/src/fixtures/panes/omp--v18-8-ask-single-described.txt
  • web/src/fixtures/panes/pi--omo-v5130-answer-editor.txt
  • web/src/fixtures/panes/pi--omo-v5130-draft.txt
  • web/src/fixtures/panes/pi--omo-v5130-idle.txt
  • web/src/fixtures/panes/pi--omo-v5130-multi.txt
  • web/src/fixtures/panes/pi--omo-v5130-panel-draft.txt
  • web/src/fixtures/panes/pi--omo-v5130-panel-idle.txt
  • web/src/fixtures/panes/pi--omo-v5130-panel-phantom.txt
  • web/src/fixtures/panes/pi--omo-v5130-panel-picker-tree.txt
  • web/src/fixtures/panes/pi--omo-v5130-panel-question.txt
  • web/src/fixtures/panes/pi--omo-v5130-panel-running.txt
  • web/src/fixtures/panes/pi--omo-v5130-panel-slash-model.txt
  • web/src/fixtures/panes/pi--omo-v5130-picker-model.txt
  • web/src/fixtures/panes/pi--omo-v5130-picker-resume.txt
  • web/src/fixtures/panes/pi--omo-v5130-picker-tree.txt
  • web/src/fixtures/panes/pi--omo-v5130-plain-draft.txt
  • web/src/fixtures/panes/pi--omo-v5130-plain-idle.txt
  • web/src/fixtures/panes/pi--omo-v5130-plain-question.txt
  • web/src/fixtures/panes/pi--omo-v5130-plain-running.txt
  • web/src/fixtures/panes/pi--omo-v5130-question-banner.txt
  • web/src/fixtures/panes/pi--omo-v5130-single-described-moved.txt
  • web/src/fixtures/panes/pi--omo-v5130-single-described.txt
  • web/src/fixtures/panes/pi--omo-v5130-single-other-focused.txt
  • web/src/fixtures/panes/pi--omo-v5130-slash-compact.txt
  • web/src/fixtures/panes/pi--omo-v5130-slash-model.txt
  • web/src/fixtures/panes/pi--prose-quoted-dialog-above-editor.txt
  • web/src/fixtures/panes/pi--prose-quoted-dialog-in-tool-result.txt
  • web/src/fixtures/panes/pi--prose-quoted-dialog-then-shell.txt
  • web/src/fixtures/panes/pi--prose-quoted-omo-dialog-above-editor.txt
  • web/src/fixtures/panes/pi--v0851-draft.txt
  • web/src/fixtures/panes/pi--v0851-idle.txt
  • web/src/fixtures/panes/pi--v0871-draft.txt
  • web/src/fixtures/panes/pi--v0871-idle.txt
  • web/src/fixtures/panes/pi--v0871-narrow-idle.txt
  • web/src/fixtures/panes/pi--v0871-question-answer-editor-typed.txt
  • web/src/fixtures/panes/pi--v0871-question-answer-editor.txt
  • web/src/fixtures/panes/pi--v0871-question-answered.txt
  • web/src/fixtures/panes/pi--v0871-question-narrow-moved.txt
  • web/src/fixtures/panes/pi--v0871-question-narrow.txt
  • web/src/fixtures/panes/pi--v0871-question-other-focused.txt
  • web/src/fixtures/panes/pi--v0871-question-plain-moved.txt
  • web/src/fixtures/panes/pi--v0871-question-plain.txt
  • web/src/fixtures/panes/pi--v0871-question-single-moved.txt
  • web/src/fixtures/panes/pi--v0871-question-single.txt
  • web/src/fixtures/panes/pi--v0871-questionnaire-answer-editor.txt
  • web/src/fixtures/panes/pi--v0871-questionnaire-single-moved.txt
  • web/src/fixtures/panes/pi--v0871-questionnaire-single.txt
  • web/src/fixtures/panes/pi--v0871-questionnaire-submit-incomplete.txt
  • web/src/fixtures/panes/pi--v0871-questionnaire-submit-ready.txt
  • web/src/fixtures/panes/pi--v0871-questionnaire-tabs-answered.txt
  • web/src/fixtures/panes/pi--v0871-questionnaire-tabs-moved.txt
  • web/src/fixtures/panes/pi--v0871-questionnaire-tabs-second-moved.txt
  • web/src/fixtures/panes/pi--v0871-questionnaire-tabs-second.txt
  • web/src/fixtures/panes/pi--v0871-questionnaire-tabs.txt
  • web/src/fixtures/panes/pi--v110-core-selector.txt
  • web/src/fixtures/panes/pi--v110-draft-multiline.txt
  • web/src/fixtures/panes/pi--v110-draft.txt
  • web/src/fixtures/panes/pi--v110-idle-default-footer.txt
  • web/src/fixtures/panes/pi--v110-idle.txt
  • web/src/fixtures/panes/pi--v110-multi-editor-open.txt
  • web/src/fixtures/panes/pi--v110-multi-moved.txt
  • web/src/fixtures/panes/pi--v110-multi-pointer-other.txt
  • web/src/fixtures/panes/pi--v110-multi-ticked.txt
  • web/src/fixtures/panes/pi--v110-multi.txt
  • web/src/fixtures/panes/pi--v110-narrow-idle.txt
  • web/src/fixtures/panes/pi--v110-question-answer-editor-typed.txt
  • web/src/fixtures/panes/pi--v110-question-answer-editor.txt
  • web/src/fixtures/panes/pi--v110-question-answered.txt
  • web/src/fixtures/panes/pi--v110-question-narrow-moved.txt
  • web/src/fixtures/panes/pi--v110-question-narrow.txt
  • web/src/fixtures/panes/pi--v110-question-other-focused.txt
  • web/src/fixtures/panes/pi--v110-question-plain-moved.txt
  • web/src/fixtures/panes/pi--v110-question-plain.txt
  • web/src/fixtures/panes/pi--v110-question-single-moved.txt
  • web/src/fixtures/panes/pi--v110-question-single.txt
  • web/src/fixtures/panes/pi--v110-questionnaire-answer-editor.txt
  • web/src/fixtures/panes/pi--v110-questionnaire-single-moved.txt
  • web/src/fixtures/panes/pi--v110-questionnaire-single.txt
  • web/src/fixtures/panes/pi--v110-questionnaire-submit-incomplete.txt
  • web/src/fixtures/panes/pi--v110-questionnaire-submit-ready.txt
  • web/src/fixtures/panes/pi--v110-questionnaire-tabs-answered.txt
  • web/src/fixtures/panes/pi--v110-questionnaire-tabs-moved.txt
  • web/src/fixtures/panes/pi--v110-questionnaire-tabs-second-moved.txt
  • web/src/fixtures/panes/pi--v110-questionnaire-tabs-second.txt
  • web/src/fixtures/panes/pi--v110-questionnaire-tabs.txt
  • web/src/fixtures/panes/pi--v110-review-complete.txt
  • web/src/fixtures/panes/pi--v110-review-incomplete.txt
  • web/src/fixtures/panes/pi--v110-single-desc.txt
  • web/src/fixtures/panes/pi--v110-single-editor-open.txt
  • web/src/fixtures/panes/pi--v110-single-moved.txt
  • web/src/fixtures/panes/pi--v110-single-narrow.txt
  • web/src/fixtures/panes/pi--v110-single.txt
  • web/src/fixtures/panes/pi--v110-slash-palette.txt
  • web/src/fixtures/panes/pi--v110-stock-draft.txt
  • web/src/fixtures/panes/pi--v110-stock-idle.txt
  • web/src/fixtures/panes/pi--v110-stock-narrow-idle.txt
  • web/src/fixtures/panes/pi--v110-stock-picker-resume.txt
  • web/src/fixtures/panes/pi--v110-stock-picker-tree.txt
  • web/src/fixtures/panes/pi--v110-tabs-compact.txt
  • web/src/fixtures/panes/pi--v110-tabs-editor-open.txt
  • web/src/fixtures/panes/pi--v110-tabs-multi.txt
  • web/src/fixtures/panes/pi--v110-tabs-single-recorded.txt
  • web/src/fixtures/panes/pi--v110-tabs-single.txt
  • web/src/fixtures/panes/pi--v110-working.txt
  • web/src/fixtures/panes/shell--box-table-vs16-emoji.txt
  • web/src/fixtures/prompt-binding-regions.json
  • web/src/hooks/use-auto-scroll.ts
  • web/src/hooks/use-board-drag.ts
  • web/src/hooks/use-chat-window.test.tsx
  • web/src/hooks/use-chat-window.ts
  • web/src/hooks/use-key-queue.ts
  • web/src/hooks/use-model-on-screen.test.ts
  • web/src/hooks/use-model-on-screen.ts
  • web/src/hooks/use-nav.test.tsx
  • web/src/hooks/use-nav.ts
  • web/src/hooks/use-no-prompts-guard.test.tsx
  • web/src/hooks/use-no-prompts-guard.tsx
  • web/src/hooks/use-phone-engine.ts
  • web/src/hooks/use-sheet-pull.ts
  • web/src/hooks/use-spaces.test.tsx
  • web/src/hooks/use-spaces.ts
  • web/src/hooks/use-stored-model.ts
  • web/src/hooks/use-stt-recorder-phone.test.ts
  • web/src/hooks/use-stt-recorder.test.ts
  • web/src/hooks/use-stt-recorder.ts
  • web/src/hooks/use-swipe.ts
  • web/src/hooks/use-voice-levels.ts
  • web/src/index.css
  • web/src/lib/ack-manifest.ts
  • web/src/lib/api-durable.test.ts
  • web/src/lib/api-error-codes.ts
  • web/src/lib/api-launchers-added.test.ts
  • web/src/lib/api.test.ts
  • web/src/lib/api.ts
  • web/src/lib/ask.test.ts
  • web/src/lib/ask.ts
  • web/src/lib/audio-meter.ts
  • web/src/lib/branch-off.test.ts
  • web/src/lib/branch-off.ts
  • web/src/lib/chat-gate.test.ts
  • web/src/lib/chat-gate.ts
  • web/src/lib/chat-window.test.ts
  • web/src/lib/chat-window.ts
  • web/src/lib/chunk-reload.test.ts
  • web/src/lib/chunk-reload.ts
  • web/src/lib/clipboard.test.ts
  • web/src/lib/clipboard.ts
  • web/src/lib/column-range.ts
  • web/src/lib/dialog-guard.test.ts
  • web/src/lib/dialog-guard.ts
  • web/src/lib/diff-highlight.ts
  • web/src/lib/durable-control.test.ts
  • web/src/lib/durable-control.ts
  • web/src/lib/folders.test.ts
  • web/src/lib/folders.ts
  • web/src/lib/harness/agy/agy.test.ts
  • web/src/lib/harness/agy/chrome.ts
  • web/src/lib/harness/claude/chrome.test.ts
  • web/src/lib/harness/claude/claude-lab-corpus.json
  • web/src/lib/harness/claude/claude-lab-corpus.test.ts
  • web/src/lib/harness/claude/closing-rule.test.ts
  • web/src/lib/harness/claude/closing-rule.ts
  • web/src/lib/harness/claude/index.ts
  • web/src/lib/harness/claude/markers.test.ts
  • web/src/lib/harness/claude/markers.ts
  • web/src/lib/harness/claude/multi-select.ts
  • web/src/lib/harness/claude/prompt-select.ts
  • web/src/lib/harness/claude/wizard.ts
  • web/src/lib/harness/codex.test.ts
  • web/src/lib/harness/codex/index.ts
  • web/src/lib/harness/codex/markers.ts
  • web/src/lib/harness/conformance.test.ts
  • web/src/lib/harness/conformance.ts
  • web/src/lib/harness/dialog-contract.ts
  • web/src/lib/harness/grok/index.ts
  • web/src/lib/harness/guard.ts
  • web/src/lib/harness/index.test.ts
  • web/src/lib/harness/invariants.test.ts
  • web/src/lib/harness/muse.test.ts
  • web/src/lib/harness/muse/DIALOG_NOTES.md
  • web/src/lib/harness/muse/approval.ts
  • web/src/lib/harness/muse/checkbox.ts
  • web/src/lib/harness/muse/chrome.test.ts
  • web/src/lib/harness/muse/detectors.test.ts
  • web/src/lib/harness/muse/index.ts
  • web/src/lib/harness/muse/markers.ts
  • web/src/lib/harness/muse/question.ts
  • web/src/lib/harness/muse/trust.ts
  • web/src/lib/harness/omp.test.ts
  • web/src/lib/harness/omp/ASK_NOTES.md
  • web/src/lib/harness/omp/ask.test.ts
  • web/src/lib/harness/omp/ask.ts
  • web/src/lib/harness/omp/chrome.test.ts
  • web/src/lib/harness/omp/chrome.ts
  • web/src/lib/harness/omp/index.ts
  • web/src/lib/harness/omp/markers.ts
  • web/src/lib/harness/omp/modal.test.ts
  • web/src/lib/harness/omp/modal.ts
  • web/src/lib/harness/opencode.test.ts
  • web/src/lib/harness/opencode/chrome.ts
  • web/src/lib/harness/opencode/index.ts
  • web/src/lib/harness/opencode/paste.test.ts
  • web/src/lib/harness/opencode/paste.ts
  • web/src/lib/harness/opencode/reply-chunks.ts
  • web/src/lib/harness/pi.test.ts
  • web/src/lib/harness/pi/ASK_NOTES.md
  • web/src/lib/harness/pi/ask.test.ts
  • web/src/lib/harness/pi/ask.ts
  • web/src/lib/harness/pi/composer.test.ts
  • web/src/lib/harness/pi/composer.ts
  • web/src/lib/harness/pi/footer.test.ts
  • web/src/lib/harness/pi/footer.ts
  • web/src/lib/harness/pi/index.ts
  • web/src/lib/harness/pi/panel.test.ts
  • web/src/lib/harness/pi/panel.ts
  • web/src/lib/harness/prompt-binding-contract.test.ts
  • web/src/lib/harness/prompt-model.ts
  • web/src/lib/harness/registry.test.ts
  • web/src/lib/harness/registry.ts
  • web/src/lib/harness/types.ts
  • web/src/lib/harness/unread-dialog.test.ts
  • web/src/lib/harness/verified-versions.json
  • web/src/lib/harness/verified-versions.test.ts
  • web/src/lib/harness/walk-pairs.ts
  • web/src/lib/i18n/index.ts
  • web/src/lib/i18n/messages/de.ts
  • web/src/lib/i18n/messages/en.ts
  • web/src/lib/i18n/messages/es.ts
  • web/src/lib/i18n/messages/fr.ts
  • web/src/lib/i18n/messages/it.ts
  • web/src/lib/i18n/messages/ja.ts
  • web/src/lib/i18n/messages/ko.ts
  • web/src/lib/i18n/messages/pt.ts
  • web/src/lib/i18n/messages/ru.ts
  • web/src/lib/i18n/messages/tr.ts
  • web/src/lib/i18n/messages/zh-TW.ts
  • web/src/lib/i18n/messages/zh.ts
  • web/src/lib/journal-agents.ts
  • web/src/lib/key-board-store.test.ts
  • web/src/lib/key-board-store.ts
  • web/src/lib/key-board.test.ts
  • web/src/lib/key-board.ts
  • web/src/lib/launcher-add.test.ts
  • web/src/lib/launcher-add.ts
  • web/src/lib/launchers.test.ts
  • web/src/lib/launchers.ts
  • web/src/lib/loaders.test.ts
  • web/src/lib/loaders.ts
  • web/src/lib/machine-units.ts
  • web/src/lib/markdown.test.ts
  • web/src/lib/markdown.ts
  • web/src/lib/model-label.test.ts
  • web/src/lib/model-label.ts
  • web/src/lib/mux-capability.ts
  • web/src/lib/nav.test.ts
  • web/src/lib/nav.ts
  • web/src/lib/new-page.test.ts
  • web/src/lib/new-page.ts
  • web/src/lib/no-prompts.test.ts
  • web/src/lib/no-prompts.ts
  • web/src/lib/operator-config.ts
  • web/src/lib/operator-keys.ts
  • web/src/lib/prompt-action.ts
  • web/src/lib/prompt-pin.test.ts
  • web/src/lib/prompt-pin.ts
  • web/src/lib/push-title-codes.ts
  • web/src/lib/pwa.test.ts
  • web/src/lib/pwa.ts
  • web/src/lib/reply-action.test.ts
  • web/src/lib/reply-action.ts
  • web/src/lib/session.test.tsx
  • web/src/lib/session.ts
  • web/src/lib/solo-baseline.test.ts
  • web/src/lib/speech-endpoint.test.ts
  • web/src/lib/speech-endpoint.ts
  • web/src/lib/storage-keys.test.ts
  • web/src/lib/stt-cache.test.ts
  • web/src/lib/stt-cache.ts
  • web/src/lib/stt-consent.ts
  • web/src/lib/stt-engine.test.ts
  • web/src/lib/stt-engine.ts
  • web/src/lib/stt-model.test.ts
  • web/src/lib/stt-model.ts
  • web/src/lib/stt-pcm.test.ts
  • web/src/lib/stt-pcm.ts
  • web/src/lib/stt.test.ts
  • web/src/lib/stt.ts
  • web/src/lib/sw-routes.test.ts
  • web/src/lib/table-run.test.ts
  • web/src/lib/table-run.ts
  • web/src/lib/text-width.test.ts
  • web/src/lib/text-width.ts
  • web/src/lib/types.ts
  • web/src/lib/update-run-store-retry.test.ts
  • web/src/lib/update-run-store.ts
  • web/src/lib/voice-levels.test.ts
  • web/src/lib/voice-levels.ts
  • web/src/lib/voice.test.ts
  • web/src/lib/voice.ts
  • web/src/lib/wipe.test.ts
  • web/src/lib/wipe.ts
  • web/src/lib/worktree-name.test.ts
  • web/src/lib/worktree-name.ts
  • web/src/main.tsx
  • web/src/playground/dashboard-card.tsx
  • web/src/playground/harness.tsx
  • web/src/playground/sections/dashboard-nav.tsx
  • web/src/playground/sections/motion.tsx
  • web/src/playground/sections/pane.tsx
  • web/src/playground/sections/settings.tsx
  • web/src/playground/sections/voice-takeover.tsx
  • web/src/router.tsx
  • web/src/routes/home-new-button.test.tsx
  • web/src/routes/home.tsx
  • web/src/routes/new-add.test.tsx
  • web/src/routes/new-add.tsx
  • web/src/routes/new.test.tsx
  • web/src/routes/new.tsx
  • web/src/routes/root.tsx
  • web/src/routes/settings-sections.tsx
  • web/src/routes/settings-voice.test.tsx
  • web/src/routes/settings.test.tsx
  • web/src/routes/settings.tsx
  • web/src/routes/space.tsx
  • web/src/stt/pins.ts
  • web/src/stt/protocol.ts
  • web/src/stt/worker-core.test.ts
  • web/src/stt/worker-core.ts
  • web/src/stt/worker.ts
  • web/src/sw.ts
  • web/src/test/handlers.ts
  • web/src/test/setup.ts
  • web/src/test/use-swipe.test.ts
  • web/tsconfig.json
  • web/tsconfig.worker.json
  • web/vite.config.ts

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@yousecjoe
yousecjoe merged commit 2ae3d03 into main Oct 14, 2026
11 checks passed
@yousecjoe
yousecjoe deleted the dev-joe-feature/adopt-v1.21.0 branch October 14, 2026 14:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment