v0.3.0
What's Changed
- feat: conductor foundations — session resolution (P0–P1) + durable owner-delegated identity (P2) by @saucam in #51
- fix: re-check token expiry on every Telegram command and callback by @saucam in #121
- fix: correlate tool calls by the SDK's toolUseID and keep subagent text out of canonical history by @saucam in #118
- fix: re-attach sessions after TUI reconnect; treat transient token failures as retryable by @saucam in #119
- fix: harden the pinned-file export, workdir, and provider-env read paths by @saucam in #120
- fix: sanitize untrusted output in the legacy readline terminal client by @saucam in #122
- feat: conductor session + read-only fleet tools (P3) by @saucam in #124
- fix: stop the busy indicator looping forever after a mid-turn model switch by @saucam in #125
- fix(web): functional/interaction bug batch (Esc-interrupt, IME, mergeSession, memo, approvals, dropdowns) by @saucam in #126
- perf(web): stop large streaming code blocks and Write previews from melting the renderer by @saucam in #127
- fix(web): state leaks + storage hardening by @saucam in #128
- fix(web): OAuth reconnect fallback + all-session notifications + reconnect ordering/proto guards by @saucam in #129
- feat: dispatch + routing — the conductor directs the fleet (P4) by @saucam in #130
- feat: provider extension surface — dialogs, dynamic commands, rich parts, provider registry by @saucam in #131
- feat: pi (pi.dev) as an officially supported session backend by @saucam in #132
- feat: mid-session provider switching with provider-owned history seeding by @saucam in #133
- feat(web): visual backend switcher + provider chips by @saucam in #134
- fix: allowlist the pi subprocess environment (GHSA-38vh parity) by @saucam in #135
- devops: replace CodeRabbit with the Gemini review bot by @saucam in #136
- feat: daemon-native hook bus — uniform tool/turn/lifecycle hooks for every backend by @saucam in #137
- feat: Phase-2 canonical history — native tool_use/functionCall replay across backends by @saucam in #138
- devops: stop stray PR comments from cancelling an in-flight Gemini review by @saucam in #139
- fix: close post-merge test gaps in hooks + Phase-2 history by @saucam in #140
- feat: bundle pi so the backend works with zero install by @saucam in #141
- feat: OpenAI Codex as a codeoid backend (app-server JSON-RPC, first slice) by @saucam in #142
- feat: gemini-cli as a codeoid backend over ACP (bundled, Google-subscription auth) by @saucam in #143
- fix: ACP authenticate fallback when session/new requires an auth selection by @saucam in #144
- fix: codex real token usage + resolve codex outside the daemon PATH by @saucam in #145
- feat: session.fork — branch a conversation, optionally onto another backend by @saucam in #146
- feat: surface backend-switch + fork on telegram and web by @saucam in #147
- fix: /fork slash misroute + session-scoped attachments + Esc/search correctness by @saucam in #148
- fix: web feedback for destroy/mode/model/approve, guarded-mode fallback, live clocks, thinking throttle by @saucam in #149
- fix: send during pending approval no longer auto-denies + daemon correctness batch by @saucam in #150
- fix: telegram robustness — approval races, swallowed errors, MarkdownV2 code spans, tool-line coalescing by @saucam in #151
- fix: LRU-bound the embedding-matrix cache by @saucam in #156
- fix: rebuild the warm query loop when systemPromptAppend changes by @saucam in #155
- feat: tail-first attach + on-demand scrollback paging by @saucam in #157
- feat: web tail-first attach — loading states + scroll-up history backfill (#152) by @saucam in #158
- fix: model catalog follows the session's backend (web) by @saucam in #160
- feat: make the attach tail window configurable (session.attachTailBytes) by @saucam in #159
- fix: don't advertise openai/gemini backends without their API key by @saucam in #161
- feat: fork lineage — record + surface where a session was forked from by @saucam in #162
- fix: codex executes approved actions — disable its redundant sandbox by @saucam in #163
- fix: send codex sandboxPolicy in its real internally-tagged wire shape by @saucam in #164
- feat: real cross-backend integration tests (fresh + resume) + pi harness by @saucam in #165
- test: guard fork-while-mid-turn in the web UI by @saucam in #166
- fix: de-flake hook-bus observe-hook test (JSON EOF race) by @saucam in #168
- feat: size the cross-backend history seed to the target model's context window by @saucam in #169
- feat: isolate forks in their own git worktree (carry the parent's live state) by @saucam in #170
- feat: fork setup command, base-branch forks, and a fresh-worktree note by @saucam in #171
- feat(web): session search UX — sidebar name filter + cross-session Ctrl+K by @saucam in #172
- feat(web): "Fork from current state" toggle + base-branch input by @saucam in #173
- fix(web): show forked session in sidebar immediately by @saucam in #174
- chore(release): add release-smoke pre-release gate + fix stale CLI --version by @saucam in #175
- docs: restructure README — screenshots, slim comparison by @saucam in #176
- chore: release v0.3.0 by @saucam in #177
Full Changelog: v0.2.0...v0.3.0
What's Changed
- feat: conductor foundations — session resolution (P0–P1) + durable owner-delegated identity (P2) by @saucam in #51
- fix: re-check token expiry on every Telegram command and callback by @saucam in #121
- fix: correlate tool calls by the SDK's toolUseID and keep subagent text out of canonical history by @saucam in #118
- fix: re-attach sessions after TUI reconnect; treat transient token failures as retryable by @saucam in #119
- fix: harden the pinned-file export, workdir, and provider-env read paths by @saucam in #120
- fix: sanitize untrusted output in the legacy readline terminal client by @saucam in #122
- feat: conductor session + read-only fleet tools (P3) by @saucam in #124
- fix: stop the busy indicator looping forever after a mid-turn model switch by @saucam in #125
- fix(web): functional/interaction bug batch (Esc-interrupt, IME, mergeSession, memo, approvals, dropdowns) by @saucam in #126
- perf(web): stop large streaming code blocks and Write previews from melting the renderer by @saucam in #127
- fix(web): state leaks + storage hardening by @saucam in #128
- fix(web): OAuth reconnect fallback + all-session notifications + reconnect ordering/proto guards by @saucam in #129
- feat: dispatch + routing — the conductor directs the fleet (P4) by @saucam in #130
- feat: provider extension surface — dialogs, dynamic commands, rich parts, provider registry by @saucam in #131
- feat: pi (pi.dev) as an officially supported session backend by @saucam in #132
- feat: mid-session provider switching with provider-owned history seeding by @saucam in #133
- feat(web): visual backend switcher + provider chips by @saucam in #134
- fix: allowlist the pi subprocess environment (GHSA-38vh parity) by @saucam in #135
- devops: replace CodeRabbit with the Gemini review bot by @saucam in #136
- feat: daemon-native hook bus — uniform tool/turn/lifecycle hooks for every backend by @saucam in #137
- feat: Phase-2 canonical history — native tool_use/functionCall replay across backends by @saucam in #138
- devops: stop stray PR comments from cancelling an in-flight Gemini review by @saucam in #139
- fix: close post-merge test gaps in hooks + Phase-2 history by @saucam in #140
- feat: bundle pi so the backend works with zero install by @saucam in #141
- feat: OpenAI Codex as a codeoid backend (app-server JSON-RPC, first slice) by @saucam in #142
- feat: gemini-cli as a codeoid backend over ACP (bundled, Google-subscription auth) by @saucam in #143
- fix: ACP authenticate fallback when session/new requires an auth selection by @saucam in #144
- fix: codex real token usage + resolve codex outside the daemon PATH by @saucam in #145
- feat: session.fork — branch a conversation, optionally onto another backend by @saucam in #146
- feat: surface backend-switch + fork on telegram and web by @saucam in #147
- fix: /fork slash misroute + session-scoped attachments + Esc/search correctness by @saucam in #148
- fix: web feedback for destroy/mode/model/approve, guarded-mode fallback, live clocks, thinking throttle by @saucam in #149
- fix: send during pending approval no longer auto-denies + daemon correctness batch by @saucam in #150
- fix: telegram robustness — approval races, swallowed errors, MarkdownV2 code spans, tool-line coalescing by @saucam in #151
- fix: LRU-bound the embedding-matrix cache by @saucam in #156
- fix: rebuild the warm query loop when systemPromptAppend changes by @saucam in #155
- feat: tail-first attach + on-demand scrollback paging by @saucam in #157
- feat: web tail-first attach — loading states + scroll-up history backfill (#152) by @saucam in #158
- fix: model catalog follows the session's backend (web) by @saucam in #160
- feat: make the attach tail window configurable (session.attachTailBytes) by @saucam in #159
- fix: don't advertise openai/gemini backends without their API key by @saucam in #161
- feat: fork lineage — record + surface where a session was forked from by @saucam in #162
- fix: codex executes approved actions — disable its redundant sandbox by @saucam in #163
- fix: send codex sandboxPolicy in its real internally-tagged wire shape by @saucam in #164
- feat: real cross-backend integration tests (fresh + resume) + pi harness by @saucam in #165
- test: guard fork-while-mid-turn in the web UI by @saucam in #166
- fix: de-flake hook-bus observe-hook test (JSON EOF race) by @saucam in #168
- feat: size the cross-backend history seed to the target model's context window by @saucam in #169
- feat: isolate forks in their own git worktree (carry the parent's live state) by @saucam in #170
- feat: fork setup command, base-branch forks, and a fresh-worktree note by @saucam in #171
- feat(web): session search UX — sidebar name filter + cross-session Ctrl+K by @saucam in #172
- feat(web): "Fork from current state" toggle + base-branch input by @saucam in #173
- fix(web): show forked session in sidebar immediately by @saucam in #174
- chore(release): add release-smoke pre-release gate + fix stale CLI --version by @saucam in #175
- docs: restructure README — screenshots, slim comparison by @saucam in #176
- chore: release v0.3.0 by @saucam in #177
Full Changelog: v0.2.0...v0.3.0