Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
150 commits
Select commit Hold shift + click to select a range
8e4c994
feat(shortcuts): bindable New tab, Split pane right and Split pane down
sergiorademacher Oct 13, 2026
4cf5fb1
docs(changelog): link #940
sergiorademacher Oct 13, 2026
6e8ef42
fix(auth): confirm first device cookie before closing access (#915)
devswha Oct 13, 2026
b76aebe
fix(omo): recognize OmO started by a launcher on Windows (#886)
willowite Oct 13, 2026
9e9e799
ci: validate fully outside pull requests and add an opt-in self-hoste…
devswha Oct 13, 2026
510ed09
chore: write changelog entries as per-PR fragments (#947)
devswha Oct 13, 2026
57d1f32
ci: fail a release that forgets the remote bundle version or a teleme…
devswha Oct 13, 2026
5a4bfb3
test: enforce AGENTS.md conventions with repo-wide guard tests (#949)
devswha Oct 13, 2026
4ae6a25
feat(chat): port t3code chat rendering, composer and settings feature…
devswha Oct 13, 2026
ed1dccd
fix(mobile): stop pull-to-refresh at the page root (#953)
devswha Oct 13, 2026
70ee5d1
fix(terminal): back off the idle scroll-metrics poll and stop per-fra…
devswha Oct 13, 2026
1322830
fix(terminal-input): float the growing input line over the grid (#966)
devswha Oct 13, 2026
3aec2f6
fix(terminal): no autocorrect in the input line; held Backspace and p…
devswha Oct 13, 2026
4e105fa
fix(terminal): scroll a phone drag by finger travel, not per touchmov…
devswha Oct 13, 2026
cabdb00
fix(app): catch render errors at the root and around each region (#961)
devswha Oct 13, 2026
d046b99
fix(terminal): apply Backspace and tell left-out line breaks in held …
devswha Oct 13, 2026
426e493
fix(notifications): land alert taps in an app window and off removed …
devswha Oct 13, 2026
068a6a6
fix(terminal): keep the key bar live while the input line composes (#…
devswha Oct 13, 2026
d8370fd
fix(relay): stop a relayed pane only past 256 KiB queued, like this P…
devswha Oct 13, 2026
b8f0db1
fix(ws): give up a stuck connect attempt and reconnect at once on wak…
devswha Oct 13, 2026
ce1777d
fix(terminal): take the pty back from the phone's input line and key …
devswha Oct 13, 2026
54ad5d1
fix(pwa): 404 missing assets and keep the service worker cache per bu…
devswha Oct 13, 2026
eace9f0
fix(terminal): measure output stalls by ACK progress, not time since …
devswha Oct 13, 2026
8246e19
fix(ws): detect a dead socket that still reads open with an app-level…
devswha Oct 13, 2026
a338f8b
fix(terminal): attach again when a page put away comes back to a stop…
devswha Oct 13, 2026
ead02fc
test(claude): wait for a pane's subagent list instead of asking once …
devswha Oct 13, 2026
24b8c3b
refactor(herdr): type the herdr RPC seam and route callers through wr…
devswha Oct 13, 2026
026448e
fix(ws,composer): restore review fixes dropped from #967 (#972)
devswha Oct 13, 2026
9dce921
fix(terminal-input): finish the composing word on Send (#959)
devswha Oct 13, 2026
2db1507
docs(guide): describe the #951 chat, Files and palette features (#975)
devswha Oct 13, 2026
2e14abe
fix(chat): turn times follow the local day change (#973)
devswha Oct 13, 2026
2e99de9
test(paging): wait for the demo's opening turn before measuring scrol…
devswha Oct 13, 2026
f8cbe39
fix(attach): keep a held pane held when herdr's refusal trails its te…
devswha Oct 13, 2026
7030e6b
fix(sheets): keep a sheet opened during a pending step back; deflake …
devswha Oct 13, 2026
fd13de2
test(ui-regression): keep the phone plan chip and stage the split dra…
devswha Oct 13, 2026
c3c3314
perf(repo-diff): draw plain diff rows through the pool's windowed pat…
devswha Oct 13, 2026
a4b2295
perf(chat): load the chat timeline and LegendList as their own chunk …
devswha Oct 13, 2026
9e967d8
chore(composer): remove saved drafts (#988)
devswha Oct 13, 2026
42c6332
fix(chat): open an agent started from the app on its greeting, with i…
devswha Oct 13, 2026
dc1eef6
fix(sidebar): show a Codex pane's thread title without its folder (#989)
devswha Oct 13, 2026
8dc1774
feat(composer): name the branch and mark a worktree in the strip unde…
devswha Oct 13, 2026
cf19e3d
feat(agents): offer only supported agents that are installed (#994)
devswha Oct 13, 2026
e1b367d
chore(telemetry): keep the counts notice to one line (#995)
devswha Oct 13, 2026
8685ff1
fix(worktree): offer New worktree on a repository's own workspace, an…
devswha Oct 13, 2026
6f87b20
fix(chat): retain queued pane leases across navigation (#987)
demrom Oct 13, 2026
163497a
fix(sidebar): count one pane in the singular in the Close workspace c…
devswha Oct 14, 2026
6d1a79f
fix(mobile): close the workspace list when the header switches Chat a…
devswha Oct 14, 2026
b95b185
fix(header): mark the Alerts menu item with a check while alerts are …
devswha Oct 14, 2026
d3d9d2e
test(browser): four checks no longer race a slow run (#1001)
devswha Oct 14, 2026
f3cbf59
ci(browser): run a failed browser script once more and report it as f…
devswha Oct 14, 2026
db2aea4
fix(gjc): bind chat sessions through the SDK broker (#912)
devswha Oct 14, 2026
dd03c48
fix(dev): keep the browser's Host through Vite's /api proxy (#1003)
devswha Oct 14, 2026
021c4d3
fix(chat): stop delivering a queued message after the tab leaves the …
devswha Oct 14, 2026
b83c7c5
test(scripts): run the browser scripts and the check tests on a Mac a…
devswha Oct 14, 2026
3bdbf63
fix(app): Escape closes the phone workspace drawer instead of reachin…
devswha Oct 14, 2026
4a9226f
ci(browser): say which check failed, and rank failures across runs (#…
devswha Oct 14, 2026
3381f66
test(ci): the prompt dock check waits for its own card, and the SSH t…
devswha Oct 14, 2026
28f1b5b
fix(chat): do not read Claude Code's colorless empty-prompt tip as a …
devswha Oct 14, 2026
1c413a1
fix(agent-picker): keep the list open when unrelated elements scroll …
devswha Oct 14, 2026
138c1fe
fix(terminal): report a herdr the server cannot start instead of wait…
devswha Oct 14, 2026
bfaafae
fix(settings): step over buried Settings history entries; keep a prev…
devswha Oct 14, 2026
3d750cd
fix(workspace): drop a closed workspace from clients at once (#1017)
devswha Oct 14, 2026
a42151a
fix(prompt): keep GJC question IDs stable (#1020)
devswha Oct 14, 2026
d050b6e
fix(server): refuse blank and over-long workspace and tab names (#1011)
devswha Oct 14, 2026
dc2f11d
test(terminal-input): ask for the liveness probe after the snapshot, …
devswha Oct 14, 2026
9c886da
fix(test): find the test session's socket on Windows (#884)
willowite Oct 14, 2026
f62f1fd
fix(pty): a write to a child that already hung up must not crash the …
Noobear Oct 14, 2026
4de0080
docs(changelog): credit #884 under Maintenance (#1032)
devswha Oct 14, 2026
25ea874
fix(chat): show Claude Code's thinking updates as narration (#1029)
devswha Oct 14, 2026
1fe7cc9
test(math): answer a conversation request that reaches the server whi…
devswha Oct 14, 2026
928c467
fix(chat): remove the list's temporary end padding on fractional scro…
devswha Oct 14, 2026
d5dd7a6
fix(composer): never cut an attached file's path (#872)
demrom Oct 14, 2026
0de23fc
fix(composer): bring back the released control row; name a worktree's…
devswha Oct 14, 2026
9e79be6
test(server): assert resize through visible pane text (#1063)
devswha Oct 14, 2026
79562d1
fix(access): require a tailnet source for Tailscale login headers (#1…
devswha Oct 14, 2026
4a6e1ea
fix(terminal): send Ctrl+Enter on a mirrored pane as herdr's key (#1064)
devswha Oct 14, 2026
d0ca874
fix(auth): cap shared failure bookkeeping (#1059)
devswha Oct 14, 2026
454fc7b
fix(terminal): let a desktop type a password into the grid while the …
devswha Oct 14, 2026
38d6863
fix(chat): hold pending input after process replacement (#1069)
devswha Oct 14, 2026
3862339
fix(gjc): share one transcript lookup between overlapping reads of a …
devswha Oct 14, 2026
b8cd639
fix(push): make a new subscription when the push service retired the …
devswha Oct 14, 2026
473be30
fix(chat): read OmO's working input box, and offer Send anyway over a…
devswha Oct 14, 2026
2febbc7
fix(remote): honor XDG_CONFIG_HOME on Windows PCs (#1070)
devswha Oct 14, 2026
d87173d
fix(terminal): recheck mirror secret authority before Enter (#1065)
devswha Oct 14, 2026
001cd89
fix(terminal): give the shared grid back when a phone returns to Chat…
devswha Oct 14, 2026
2bd47d5
fix(plugin): wait for the Windows process tree to exit (#1074)
devswha Oct 14, 2026
67cb7b3
fix(attachments): attach files up to 32 MB and always answer an overs…
devswha Oct 14, 2026
aa6b793
fix(terminal): keep the shared pty's grid while a phone's keyboard is…
devswha Oct 14, 2026
e2bab55
fix(install): end a gh shim's lingering child with the Windows star c…
devswha Oct 14, 2026
df10b0a
fix(codex): bind short first answers and prompts after Codex notices …
devswha Oct 14, 2026
f25772b
refactor(settings): keep three color palettes (#1078)
devswha Oct 14, 2026
6df47e6
fix(push): remember retired push endpoints across a server restart (#…
devswha Oct 14, 2026
5f2db99
test(server): retry a slow pane read in the resize contract test (#1080)
devswha Oct 14, 2026
694b753
refactor(i18n): drop the Turkish UI language (#1081)
devswha Oct 14, 2026
fbe7922
ci(pages): deploy after CI's own main run instead of validating again…
devswha Oct 14, 2026
dd46202
perf(ui): keep recent tabs mounted and show the cached chat on switch…
devswha Oct 14, 2026
61ec391
ci(runner): share check slots across the self-hosted runners of a PC …
devswha Oct 14, 2026
7776c4f
fix(terminal): hand the shared grid only to a device still showing th…
devswha Oct 14, 2026
f1e233a
refactor(server): simplify validated pane search options (#1090)
devswha Oct 14, 2026
705e9ae
refactor(demo): reuse the normalized tab label (#1092)
devswha Oct 14, 2026
f979703
refactor(server): simplify notice and drafted-answer parsing (#1094)
devswha Oct 14, 2026
4b5a160
test(omo): wait for the observed pane label (#1097)
devswha Oct 14, 2026
f0f5ae5
test(find): assert the unchanged viewport independently of history gr…
devswha Oct 14, 2026
6707797
fix(scripts): pin math browser QA to English (#1102)
devswha Oct 14, 2026
70f48c4
test(opencode): isolate paging from later fixture changes (#1100)
devswha Oct 14, 2026
c46b7be
fix(chat): drop a waiting follow scroll when PageUp leaves the end (#…
devswha Oct 14, 2026
5c3ff23
docs(agents): keep only the traps code and tests do not show (#1109)
devswha Oct 14, 2026
fab585f
refactor(ui): trim the pane, tab and header menus (#1101)
devswha Oct 14, 2026
0fe7578
refactor(settings): remove eleven maintainer-added settings (#1099)
devswha Oct 14, 2026
97f06f3
refactor(settings): remove page overlap, files at once, highlight cod…
devswha Oct 14, 2026
709fc70
feat(telemetry): report every remaining setting, drop the removed one…
devswha Oct 14, 2026
c47a60a
docs(design): drop leftovers of the removed contrast, highlight and p…
devswha Oct 14, 2026
136df7c
fix(chat): keep Stop ahead of the next message without reordering typ…
devswha Oct 14, 2026
7ca102a
fix(chat): take a phone keyboard's autocorrect in the message box (#1…
devswha Oct 14, 2026
3d947d9
fix(omo): read a pending question's card under OmO 5.1.30's task stat…
devswha Oct 14, 2026
cde82e5
fix(chat): send a held copy once across tabs (#1088)
devswha Oct 14, 2026
935d35d
fix(terminal): keep the grid on a desktop that is visible but unfocus…
devswha Oct 14, 2026
41a34f3
fix(chat): follow /resume of a background Claude session to the job's…
devswha Oct 14, 2026
ac599d3
fix(chat): list symlinked skills and commands in the / picker (#981)
demrom Oct 14, 2026
2e3ffc1
fix(chat): keep Claude replies visible after hook continuations (#1024)
demrom Oct 14, 2026
e0d46dc
fix(chat): let valid reads outlast HTTP inactivity (#1023)
demrom Oct 14, 2026
2a9d4bd
fix(chat): read Pi histories past 64 MiB (#869)
Noobear Oct 14, 2026
430f612
fix(chat): keep the draft stable during agent updates (#1056)
demrom Oct 14, 2026
2e4939e
feat(terminal): remove the terminal history scrollbar (#1113)
devswha Oct 14, 2026
49a1e87
fix(chat): preserve file text in copied reply selections (#1077)
demrom Oct 14, 2026
b2afd0b
ci(coderabbit): review a PR once, not on every push (#1114)
devswha Oct 14, 2026
bf7419d
fix(terminal): keep the pty size when Android Chrome resizes the layo…
devswha Oct 14, 2026
373bfc5
fix(split): accept a pane drop whose target node was just redrawn (#984)
devswha Oct 14, 2026
be589db
fix(terminal): key bar off the pane's edge; home-indicator room only …
Noobear Oct 14, 2026
992f8f7
fix(chat): keep Find clear of pane menus (#1115)
devswha Oct 14, 2026
9af52d8
fix(chat): keep focus in the message box when Send is pressed (#937)
lunchyfox Oct 14, 2026
8e9784a
fix(omo): bind custom runtimes by native session ownership (#923)
Haeminway1 Oct 14, 2026
4ffad79
fix(windows): offer OmO when creating a workspace or tab (#885)
willowite Oct 14, 2026
f2efd80
fix(terminal): compose Hangul from an iPad hardware keyboard instead …
Noobear Oct 14, 2026
9a224b8
fix(chat): show Send progress until acknowledgement (#1025)
demrom Oct 14, 2026
77e5b3d
test(scripts): keep chat size probes through reflow (#1116)
devswha Oct 14, 2026
55d7c71
fix(gjc): derive status from the native parent turn (#928)
Haeminway1 Oct 14, 2026
1659219
fix(install): reclaim a stale install.lock and bound the bundle uploa…
suho-han Oct 14, 2026
0ea916e
fix(chat): clarify the Return newline choice on touch screens (#986)
demrom Oct 14, 2026
f361931
test(omo): wait for the custom launcher before reading its process (#…
devswha Oct 14, 2026
56aed89
feat(sidebar): pin agents from a row menu; drop Workspace cards and Q…
devswha Oct 14, 2026
b5c549b
test(scripts): wait for rendered unzoom before picking a pane (#1122)
devswha Oct 14, 2026
8b73200
fix(telemetry): drop the removed Turkish language from the settings s…
devswha Oct 14, 2026
c3a9340
fix(access): no exposure notice on a Tailscale-only bind (#1124)
devswha Oct 14, 2026
fa0b5b5
fix(composer): leave the folder and branch strip off a phone (#1127)
devswha Oct 14, 2026
a7bb1fc
feat(alerts): add a close button to the in-app alert (#1129)
devswha Oct 14, 2026
393baae
fix(terminal): watch instead of attaching from an out-of-use tab (#1130)
devswha Oct 14, 2026
525cdcf
refactor(chat): drop the per-turn edited files list (#1131)
devswha Oct 14, 2026
fd7b74d
Merge main into feat/shortcuts-new-tab-split
devswha Oct 14, 2026
3c7b5e8
fix(shortcuts): changelog fragment and one split per held chord
devswha Oct 14, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
3 changes: 3 additions & 0 deletions .coderabbit.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,9 @@ reviews:
auto_review:
enabled: true
drafts: false
# Review once when a PR opens; ask again with `@coderabbitai review` before merging,
# so each push does not spend the per-developer review allowance.
auto_incremental_review: false
path_filters:
- '!shared/herdr-api.generated.ts'
- '!docs/screenshots/**'
Expand Down
9 changes: 8 additions & 1 deletion .github/REVIEW.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,20 @@ AI review is advisory; CI and maintainer review determine whether a PR can merge
- A malformed VAPID file must fail without rotating the key. The service worker must
show a notification for every push, including while the app is visible.
- Preserve IME and native clipboard input. Use existing theme tokens for component CSS.
- The `conventions.test.ts` baselines only shrink, and CI's shallow checkout cannot compare them
with main: flag a PR that raises a count in `scripts/fixed-sleeps.json` (a rename moves its entry
with the same count) or adds an allowlist entry (DEMO_404, DEMO_IGNORES, UNIX_CONNECT_ALLOWED,
NET_CONNECT_ALLOWED) without a reason that holds.
- Installed updaters discover Git tags immediately. Release only the exact commit
that passed CI; never create the release tag as a prerequisite for validation.
- External contributors' PRs get the same priority and the same bar as maintainers'
own: review them when they arrive and consider them for the next release. Approve
their CI runs only after reading everything CI executes: workflows, scripts, tests,
`package.json` scripts and dependency changes. Workflows must keep read-only PR
permissions and never add a `pull_request_target` trigger.
permissions and never add a `pull_request_target` trigger. Never approve the run of a fork PR
that changes `runs-on`, adds self-hosted labels, or edits `.github/actions/` or
`scripts/ci-runner-route.sh`: a self-hosted runner executes an approved fork workflow only if a
workflow routes it there.

[CONTRIBUTING.md](../CONTRIBUTING.md) is the process contributors follow. The
[AGENTS.md](../AGENTS.md) files give these invariants with their reasons and the conventions
Expand Down
66 changes: 66 additions & 0 deletions .github/actions/setup-ci/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
name: Set up CI toolchain
description: Bun (with its dependency cache), and optionally Node 22 and the checksum-pinned herdr. Callers check out the repository first.
inputs:
bun-version:
description: Bun version for ci.yml, pages.yml and release.yml; the one place it is set.
required: false
default: '1.4.2'
node:
description: "'true' installs Node 22 (the PTY sidecar runs on it)."
required: false
default: 'false'
herdr:
description: "'true' installs the checksum-pinned herdr 0.9.3 (Linux x86_64) on PATH."
required: false
default: 'false'
runs:
using: composite
steps:
# Keep cached files inside the checkout. Home-directory archives contain relative paths
# that cannot be restored between GitHub's workspace and the image's shorter /w path.
- name: Select workspace-local Bun cache
shell: bash
env:
BUN_CACHE_DIR: ${{ github.workspace }}/.ci-cache/bun
run: printf 'BUN_INSTALL_CACHE_DIR=%s\n' "$BUN_CACHE_DIR" >> "$GITHUB_ENV"
- name: Select workspace-local hosted browser cache
if: runner.environment != 'self-hosted'
shell: bash
env:
BROWSER_CACHE_DIR: ${{ github.workspace }}/.ci-cache/playwright
run: printf 'PLAYWRIGHT_BROWSERS_PATH=%s\n' "$BROWSER_CACHE_DIR" >> "$GITHUB_ENV"
- name: Verify prepared self-hosted tools
if: runner.environment == 'self-hosted'
shell: bash
env:
EXPECTED_BUN_VERSION: ${{ inputs.bun-version }}
NEED_NODE: ${{ inputs.node }}
NEED_HERDR: ${{ inputs.herdr }}
run: bash scripts/ci-preinstalled-tools.sh
- uses: oven-sh/setup-bun@v2
if: runner.environment != 'self-hosted'
with:
bun-version: ${{ inputs.bun-version }}
- if: inputs.node == 'true' && runner.environment != 'self-hosted'
uses: actions/setup-node@v7
with:
node-version: '22'
- name: Cache Bun dependencies
# On the measured self-hosted connection this archive costs 37–43s to restore,
# versus 7–20s for a fresh install. Do not pay for restore/save on disposable runners.
if: runner.environment != 'self-hosted'
uses: actions/cache@v4
with:
path: .ci-cache/bun
key: bun-workspace-v2-${{ runner.environment }}-${{ runner.os }}-${{ runner.arch }}-${{ inputs.bun-version }}-${{ hashFiles('bun.lock') }}
restore-keys: |
bun-workspace-v2-${{ runner.environment }}-${{ runner.os }}-${{ runner.arch }}-${{ inputs.bun-version }}-
- name: Install checksum-pinned herdr 0.9.3
if: inputs.herdr == 'true' && runner.environment != 'self-hosted'
shell: bash
run: |
mkdir -p "$RUNNER_TEMP/herdr-bin"
curl --fail --location --retry 3 https://github.com/herdrdev/herdr/releases/download/v0.9.3/herdr-linux-x86_64 -o "$RUNNER_TEMP/herdr-bin/herdr"
echo "18a8dc65f1c2fa485884344356dea1cfd911c6f06cf46fa78e193f4087f4dba7 $RUNNER_TEMP/herdr-bin/herdr" | sha256sum --check
chmod +x "$RUNNER_TEMP/herdr-bin/herdr"
echo "$RUNNER_TEMP/herdr-bin" >> "$GITHUB_PATH"
2 changes: 1 addition & 1 deletion .github/pull_request_template.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
<!-- See CONTRIBUTING.md for checks, translations, contract tests and the changelog. -->
<!-- See CONTRIBUTING.md for checks, translations, contract tests and the changelog (a file in changelog.d/, never CHANGELOG.md). -->

## Change

Expand Down
Loading
Loading