agent-orchestrator/.changeset/native-windows-support.md

2.5 KiB

@aoagents/ao-core @aoagents/ao-cli @aoagents/ao @aoagents/ao-plugin-runtime-process @aoagents/ao-plugin-runtime-tmux @aoagents/ao-plugin-agent-claude-code @aoagents/ao-plugin-agent-codex @aoagents/ao-plugin-agent-aider @aoagents/ao-plugin-agent-opencode @aoagents/ao-plugin-workspace-worktree @aoagents/ao-plugin-workspace-clone @aoagents/ao-plugin-tracker-github @aoagents/ao-plugin-tracker-linear @aoagents/ao-plugin-scm-github @aoagents/ao-plugin-notifier-desktop @aoagents/ao-plugin-notifier-slack @aoagents/ao-plugin-notifier-webhook @aoagents/ao-plugin-notifier-composio @aoagents/ao-plugin-terminal-iterm2 @aoagents/ao-plugin-terminal-web @aoagents/ao-web
minor minor minor minor minor minor minor minor minor minor minor minor minor minor minor minor minor minor minor minor minor

feat: native Windows support

AO now runs natively on Windows. The default runtime on Windows is process
(ConPTY via node-pty + named pipes — no tmux, no WSL); the dashboard,
agents (claude-code, codex, kimicode, aider, opencode, cursor), ao doctor,
and ao update all work out of the box. Each session gets a small detached
pty-host helper that wraps a ConPTY behind \\.\pipe\ao-pty-<sessionId>,
registered so ao stop can reach it.

A new cross-platform abstraction layer (packages/core/src/platform.ts)
centralises every platform branch behind helpers like isWindows(),
getDefaultRuntime(), getShell(), killProcessTree(), findPidByPort(),
and getEnvDefaults(). Path comparison uses pathsEqual /
canonicalCompareKey to handle NTFS case-insensitivity. PATH wrappers for
agent plugins (gh, git) ship as .cjs + .cmd shims on Windows;
script-runner runs .ps1 siblings of .sh scripts via PowerShell. New
ao-doctor.ps1 / ao-update.ps1 shipped.

ao open is now cross-platform: it sources sessions from sm.list()
instead of tmux list-sessions (so runtime-process sessions on Windows
appear), and the open action branches per OS — open-iterm-tab stays the
macOS path, native handling on Windows and Linux.

Behaviour on macOS and Linux is unchanged. Every Windows path is gated
behind isWindows(); runtime-tmux and the bash hook flows are untouched.

See docs/CROSS_PLATFORM.md for the developer reference (helper inventory,
EPERM-vs-ESRCH gotcha, PowerShell-vs-bash differences, pre-merge checklist).
The Windows runtime architecture (pty-host, pipe protocol, registry, sweep,
mux WS Windows branch) is documented in docs/ARCHITECTURE.md.