Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
117 commits
Select commit Hold shift + click to select a range
b0b6164
refactor(sys): add platform-abstraction layer for process and fs prim…
keinstn Jun 25, 2026
541b7d7
refactor(pty): gate the Unix PTY wrapper behind cfg(unix)
keinstn Jun 25, 2026
4d67121
refactor(sys): route remaining OS primitives through the abstraction …
keinstn Jun 25, 2026
aa10173
chore(main): gate PTY-only imports to keep the Windows build clean
keinstn Jun 25, 2026
125590d
chore(terminal): drop redundant u32 cast flagged by clippy
keinstn Jun 25, 2026
4300904
ci: add Windows build job
keinstn Jun 25, 2026
c3fb245
ci: trigger run after enabling Actions
keinstn Jun 25, 2026
ce8d54a
ci: fix Windows CI — format sys code, gate Unix-only tests
keinstn Jun 25, 2026
243a780
feat(windows): add PowerShell launch script generator
keinstn Jun 25, 2026
d17f822
feat(windows): launch agents via PowerShell instead of bash
keinstn Jun 25, 2026
c1d0265
feat(windows): run background/run-here launches via PowerShell
keinstn Jun 25, 2026
aa68f39
feat(windows): launch tools directly (non-PTY) on Windows
keinstn Jun 25, 2026
55756a5
fix(windows): make Claude hooks fire on Windows
keinstn Jun 25, 2026
3c22da6
fix(windows): Claude runs hooks via Git Bash, keep POSIX hook command
keinstn Jun 26, 2026
79ddd9d
fix(windows): poll for messages in Stop hook (no PTY mode)
keinstn Jun 26, 2026
9be8f85
refactor(windows): compile pty module on Windows (ConPTY foundation)
keinstn Jun 26, 2026
50d208c
feat(windows): ConPTY PTY proxy (run_pty works on Windows)
keinstn Jun 26, 2026
6b6adb3
feat(windows): route hcom claude through ConPTY wrapper
keinstn Jun 26, 2026
ebb2214
fix(windows): strip Win32-input/focus mode-sets from ConPTY output
keinstn Jun 26, 2026
81ede09
feat(windows): proper kill-group semantics (process tree + job object)
keinstn Jun 26, 2026
2e9da0d
ci: run Windows bin unit tests (not just compile them)
keinstn Jun 26, 2026
178ed19
fix(windows): unblock schema archive + gate Unix-only unit tests
keinstn Jun 26, 2026
3f14ead
fix(windows): resolve bare tool name in PowerShell script when no args
keinstn Jun 27, 2026
b6cfc5f
fix(windows): set EXIT_WAS_KILLED when child is terminated via hcom kill
keinstn Jun 27, 2026
9bf4582
fix(windows): retry CreateToolhelp32Snapshot once on failure in kill_…
keinstn Jun 27, 2026
1b19239
fix(windows): make terminate() a graceful request, not a hard kill
keinstn Jun 27, 2026
a668f4c
docs(windows): explain why the detached stdin thread is leak-safe
keinstn Jun 27, 2026
6606519
fix(windows): guarantee relay-worker stop where no kill fallback existed
keinstn Jun 27, 2026
d4a37f9
chore: clean up
keinstn Jun 27, 2026
0d499df
refactor(pty): extract portable PTY orchestration into shared layer
keinstn Jun 29, 2026
8ea7315
style: apply cargo fmt
keinstn Jun 30, 2026
c0973ac
fix(clippy): remove unread user_activity_cooldown_ms field
keinstn Jun 30, 2026
c52c6a4
docs(win): explain delayed delivery-init failure reporting vs Unix
keinstn Jun 30, 2026
4a5a41f
fix(win): join reader thread before reading launch-failure tail
keinstn Jun 30, 2026
0c9a731
fix(win): recover delivery handle through a poisoned mutex
keinstn Jun 30, 2026
dd918be
perf(win): skip name/status clone when the window title is unchanged
keinstn Jun 30, 2026
07dd78b
fix(win): only clear approval scrape buffer when one was actually sho…
keinstn Jun 30, 2026
b4e8911
fix(win): start delivery for a child that exits with no output
keinstn Jun 30, 2026
ad15222
fix(win): retry delivery startup after a transient init failure
keinstn Jun 30, 2026
1465025
fix(win): bound the reader-thread join so a stuck grandchild can't de…
keinstn Jun 30, 2026
c47ea0e
fix(win): don't retry delivery start after a timeout (double-delivery)
keinstn Jun 30, 2026
35bb2eb
refactor(pty): hoist Unix publish closure into a Proxy method
keinstn Jun 30, 2026
82104c5
refactor(pty): drop leftover alias bindings in start_delivery_thread
keinstn Jun 30, 2026
722e609
docs(pty): trim redundant comments on the timeout/disconnect arms
keinstn Jun 30, 2026
33d4099
docs(win): condense the start_delivery closure comment
keinstn Jun 30, 2026
1207acb
refactor(terminal): model presets as executable + argument vector
keinstn Jun 29, 2026
ea50e11
style: apply cargo fmt
keinstn Jun 30, 2026
9f1719b
fix(terminal): splice kitten --to before binary-path rewrite
keinstn Jun 30, 2026
1bb692e
fix(config): harden toml_val_to_argv error handling
keinstn Jun 30, 2026
57cbd40
fix(terminal): guard kitten --to against fd: sockets; rewrite bash on…
keinstn Jun 30, 2026
450e366
fix: eliminate double get_merged_preset call; check close_argv for pl…
keinstn Jun 30, 2026
9a7f2a3
fix(terminal): match bash {script} pair anywhere for Windows rewrite
keinstn Jun 30, 2026
be440d2
fix(kill): reuse loaded MergedPreset in pane_info_str (no double load)
keinstn Jun 30, 2026
7885edb
fix(terminal): avoid unused mut on non-Windows for custom argv shellify
keinstn Jun 30, 2026
d680b7c
docs(terminal): note HCOM_TERMINAL backslash limitation on Windows
keinstn Jun 30, 2026
e0b295a
refactor: dedup pane-title build and drop throwaway argv clones
keinstn Jun 30, 2026
6bdac19
fix(win): pin ConPTY child cwd so Claude launches in-repo
keinstn Jul 1, 2026
256822d
fix(windows): detach background processes and fix stale liveness checks
keinstn Jul 1, 2026
a3cb746
fix(windows): launch npm .cmd/.bat tool shims via cmd.exe
keinstn Jul 1, 2026
27c54eb
fix(windows): write UTF-8 BOM in generated scripts, propagate exit co…
keinstn Jul 1, 2026
7312a4e
fix(windows): make test_build_claude_command platform-aware
keinstn Jul 1, 2026
8723b0e
test(windows): cover BOM/exit-code, .cmd-shim detection, and stale-ha…
keinstn Jul 1, 2026
d58abe5
feat(windows): cross-platform hook path resolution and Claude PowerSh…
keinstn Jul 1, 2026
57b1ba5
test(windows): cover XDG precedence and existence-probe order in runt…
keinstn Jul 1, 2026
3a85d48
fix(windows): run Gemini hook commands via PowerShell
keinstn Jul 1, 2026
f2bb0ec
fix(windows): trust explicit XDG_DATA_HOME override, fix stale PowerS…
keinstn Jul 1, 2026
dd10529
fix(windows): handle HCOM_TERMINAL backslashes, fix hcom update, drop…
keinstn Jul 1, 2026
ece879f
fix(windows): move backslash handling into shell_split instead of pre…
keinstn Jul 1, 2026
296bd7d
fix(windows): stop double-killing children, escalate a stuck child.wa…
keinstn Jul 1, 2026
6e29f87
fix(windows): stop conflating internal hang-escalation with an extern…
keinstn Jul 1, 2026
359895b
fix(windows): make cli_smoke compile and run on Windows CI
keinstn Jul 1, 2026
d46e87c
fix(windows): persist early launch_context, re-scan for kill-tree str…
keinstn Jul 1, 2026
c4ff0e9
fix(windows): make kill-tree re-scan run all rounds and converge per …
keinstn Jul 1, 2026
7c28233
docs(windows): document PID-reuse window widened by kill-tree re-scan…
keinstn Jul 1, 2026
a18e337
refactor(opencode): dedup family DB-path resolution across hooks/tran…
keinstn Jul 1, 2026
ae31f35
fix(runtime_env): stop assuming OpenCode/Kilo use native Windows/macO…
keinstn Jul 1, 2026
e20ea1a
fix(windows): stop killing healthy sessions 5s after launch
keinstn Jul 1, 2026
c03dacc
fix(windows): answer ConPTY's inherit-cursor query so wait tests run …
keinstn Jul 2, 2026
13d8174
fix(windows): stop PowerShell argv mangling from breaking hcom codex …
keinstn Jul 2, 2026
3d6db39
style: apply cargo fmt
keinstn Jul 2, 2026
f9dbeef
docs(windows): note Antigravity sh -c hook verified on real Windows
keinstn Jul 2, 2026
a668857
Merge remote-tracking branch 'upstream/main' into feat/windows-support
keinstn Jul 2, 2026
2d0b7b6
fix(windows): skip OMP path-resolution tests that rely on $HOME override
keinstn Jul 2, 2026
a420b82
fix(windows): case-fold env scrub, log ctrl-handler failure, loud bas…
keinstn Jul 4, 2026
f8f37d4
fix(windows): terminal preset platform gating, bash -c detection, arg…
keinstn Jul 4, 2026
e3a0e0a
fix(windows): PTY delivery coordinator, headless DSR, per-param mode …
keinstn Jul 4, 2026
a01f426
fix(windows): make test_terminal_case_normalization platform-aware fo…
keinstn Jul 4, 2026
f3a266b
fix(windows): correct terminal preset platform gating + bash detector
keinstn Jul 4, 2026
8b86276
fix(windows): capture idle agent's final frame in hcom term snapshot
keinstn Jul 4, 2026
1cab8f6
fix(windows): bound the PTY reader producer→consumer channel
keinstn Jul 4, 2026
6ec8f5d
Merge review-round-2 fixes: PTY delivery/ConPTY (findings 1,4,5,6,8,1…
keinstn Jul 4, 2026
5f89e09
Merge review-round-2 fixes: terminal/config (findings 17,19,21,22,24,…
keinstn Jul 4, 2026
31fc83e
Merge review-round-2 fixes: cleanups (findings 11,20,26,30 + git-bash…
keinstn Jul 4, 2026
bf61250
fix(windows): harden ConPTY delivery coordinator, inject ordering, an…
aannoo Jul 5, 2026
a094d0a
feat(windows): strip verbatim \?\ paths for child processes; find hco…
aannoo Jul 5, 2026
485903b
feat(windows): resolve npm .cmd/.bat shims, PATH fallbacks, and detac…
aannoo Jul 5, 2026
058f66b
feat(windows): add a Windows zellij preset and platform-gate terminal…
aannoo Jul 5, 2026
d75aa74
fix(windows): generate cmd.exe-compatible Antigravity hook commands
aannoo Jul 5, 2026
ce111a6
fix(kimi): resolve config directory via tool_config_root instead of d…
aannoo Jul 5, 2026
18bd64c
feat(windows): resolve Git Bash and Python 3 for hcom run script exec…
aannoo Jul 5, 2026
fed17a3
feat(windows): add PowerShell installer support to hcom update
aannoo Jul 5, 2026
6a01df4
fix(reset): surface database-removal failures instead of silently ign…
aannoo Jul 5, 2026
3cbcba6
fix(transcript): surface rg/grep failures instead of returning empty …
aannoo Jul 5, 2026
867a6f9
feat(listen): add stopped: SQL preset for --sql filter
aannoo Jul 5, 2026
9c30fdb
fix(bootstrap): protect hcom tag markers from the alt-command rewrite…
aannoo Jul 5, 2026
067659c
test(windows): adapt the integration harness for Windows process/env …
aannoo Jul 5, 2026
6caca00
ci(windows): add native Windows CI gate, wheel target, and dev-workfl…
aannoo Jul 5, 2026
d688d2c
fix(windows): confirm inject text render before submitting Enter
aannoo Jul 6, 2026
f267a90
fix(windows): resolve npm .cmd shims in relay test's version check, w…
aannoo Jul 6, 2026
c006e7f
fix(windows): quote hcom recipients in bootstrap
aannoo Jul 6, 2026
02c9395
fix(pty): recognize Claude's ASCII prompt marker in bypassPermissions…
aannoo Jul 6, 2026
7c1f5a9
fix(windows): harden PTY title output boundaries
aannoo Jul 6, 2026
88a5f46
test(windows): widen codex fork-wait timeout, add Phase 10 diagnostics
aannoo Jul 6, 2026
f675434
fix(test): re-arm relay worker before Device B's turn, not after
aannoo Jul 6, 2026
060a12c
fix(test): reference the exact hcom test binary in the Phase 10 mock'…
aannoo Jul 6, 2026
9cd9b29
fix(kill): emit retry command when pane cleanup fails
aannoo Jul 6, 2026
1b1cff1
Merge remote-tracking branch 'origin/main' into feat/windows-support
aannoo Jul 6, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .github/workflows/build-wheels.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,9 @@ jobs:
- os: macos-latest
target: aarch64-apple-darwin
manylinux: auto
- os: windows-latest
target: x86_64-pc-windows-msvc
manylinux: auto
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v6
Expand Down
75 changes: 67 additions & 8 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,30 @@ jobs:
- run: cargo clippy --all-targets --locked -- -D warnings
- run: cargo test --locked

# Fast native Windows gate. The pinned real-tool lifecycle has its own matrix
# below because it is slower and needs Node-installed external binaries.
windows-build:
runs-on: windows-latest
steps:
- uses: actions/checkout@v6
- uses: dtolnay/rust-toolchain@stable
with:
components: rustfmt, clippy
- uses: Swatinem/rust-cache@v2.9.1
- run: cargo fmt --all -- --check
- run: cargo clippy --all-targets --locked -- -D warnings
- run: cargo test --all-targets --locked
- run: cargo build --release --locked
- name: Smoke-test distributable Windows binary
shell: pwsh
run: |
New-Item -ItemType Directory -Force target/package-smoke | Out-Null
Copy-Item target/release/hcom.exe target/package-smoke/hcom-windows-x86_64.exe
$version = & target/package-smoke/hcom-windows-x86_64.exe --version
if ($LASTEXITCODE -ne 0 -or $version -notmatch '^hcom ') {
throw "Packaged binary smoke test failed: $version"
}

typecheck:
runs-on: ubuntu-latest
permissions:
Expand All @@ -30,24 +54,42 @@ jobs:
- run: bash ./scripts/typecheck.sh

real-tool-tests:
name: Real tool (${{ matrix.tool }})
runs-on: ubuntu-latest
name: Real tool (${{ matrix.tool }}, ${{ matrix.os }})
runs-on: ${{ matrix.os }}
timeout-minutes: 25
permissions:
contents: read
strategy:
fail-fast: false
matrix:
include:
- tool: codex
- os: ubuntu-latest
tool: codex
package: "@openai/codex@0.141.0"
cache: codex-0.141.0
test: real_tool_codex
- os: ubuntu-latest
tool: claude
package: "@anthropic-ai/claude-code@2.1.185"
cache: claude-2.1.185
test: real_tool_claude
- os: ubuntu-latest
tool: relay
package: "@anthropic-ai/claude-code@2.1.185"
cache: relay-claude-2.1.185
test: test_relay_roundtrip
- os: windows-latest
tool: codex
package: "@openai/codex@0.141.0"
cache: codex-0.141.0
test: real_tool_codex
- tool: claude
- os: windows-latest
tool: claude
package: "@anthropic-ai/claude-code@2.1.185"
cache: claude-2.1.185
test: real_tool_claude
- tool: relay
- os: windows-latest
tool: relay
package: "@anthropic-ai/claude-code@2.1.185"
cache: relay-claude-2.1.185
test: test_relay_roundtrip
Expand All @@ -66,6 +108,23 @@ jobs:
target/mock-tools
target/npm-cache
key: ${{ runner.os }}-mock-tools-${{ matrix.cache }}
- run: ./scripts/install-mock-tools.sh '${{ matrix.package }}'
- run: echo "$PWD/target/mock-tools/bin" >> "$GITHUB_PATH"
- run: cargo test --locked --test '${{ matrix.test }}' -- --ignored --nocapture --test-threads=1
- name: Install pinned tool (Unix)
if: runner.os != 'Windows'
run: ./scripts/install-mock-tools.sh '${{ matrix.package }}'
- name: Add pinned tool to PATH (Unix)
if: runner.os != 'Windows'
run: echo "$PWD/target/mock-tools/bin" >> "$GITHUB_PATH"
- name: Install pinned tool (Windows)
if: runner.os == 'Windows'
shell: pwsh
run: ./scripts/install-mock-tools.ps1 '${{ matrix.package }}'
- name: Add pinned tool to PATH (Windows)
if: runner.os == 'Windows'
shell: pwsh
run: (Resolve-Path target/mock-tools).Path | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
- shell: bash
if: runner.os != 'Windows'
run: cargo test --locked --test '${{ matrix.test }}' -- --ignored --nocapture --test-threads=1
- shell: pwsh
if: runner.os == 'Windows'
run: cargo test --locked --test '${{ matrix.test }}' -- --ignored --nocapture --test-threads=1
Loading
Loading