What's Changed
- feat: multi-profile per harness (protocol + gui-app) (#258) (9e71f30)
- fix(gui-app): warming retry fires off a cold submodule PR leg (#275) (f2e5fa8)
- fix(gui-app): stop macOS Ctrl chords matching mod keybindings (#266) (3c14365)
- fix(gui-app): dismiss header menus from title bar clicks (#280) (107f6ce)
- feat(resources): host-tree utilization (resources.subscribe@1.2) + resource monitor rework (#282) (7a81193)
- Overhaul provider profile management UX (#283) (52f14a4)
- protocol: worktree.listAllForHost v1.2 — at-pin submodule proof (atPinnedCommit) (#288) (5d7283c)
- Improve provider profile and rate-limit UX (#289) (30e4d75)
- gui-app: self-explanatory Review warnings — unmerged-commit chips + per-reason tooltips (#291) (d11c47a)
- protocol: unit-test guard for released-line host→client growth (#290) (0a9537c)
- Add Devin harness protocol ids and GUI wiring (#285) (4654733)
- Add Pi harness protocol ids and GUI wiring (#286) (2f35d7c)
- feat(desktop): expose Chromium CDP port in dev by default (#292) (b080819)
- fix(gui-app): stop chat find counting a phantom unit per user message (#293) (9bd99c9)
- fix(gui-app): make the workspace picker's primary folder explicit (#294) (b4b0b66)
- fix(gui-app): sort Resources sub-rows by aggregated subtree usage (#295) (9514b0f)
- Align Traycer usage accounts with provider profile cards (#297) (6b5db82)
- fix(gui-app): size git diff tree rows correctly (#298) (c81da76)
- gui-app: background enrichment sweep — worktree tiers converge without scrolling (#296) (bd524e4)
- fix(comments): fall back to user_id when a comment lacks an author handle (#299) (9aed12d)
- fix(gui-app): make slash preview addendum scrollable (#300) (81a303f)
- fix(dev-desktop): wait for host teardown (#301) (4b465be)
- fix(gui-app): keep onboarding escapable while guide loads (#305) (def51a2)
- feat(gui): add report issue actions to error states (#307) (bd0498b)
- fix(gui-app): share rate-limit switch-prompt dismissals across composers (#308) (bceb04d)
- feat(notifications): add durable tab indicators (#306) (701e190)
- Fix crash against released hosts on providers.list; harden the released-peer compat gate (#302) (5485f53)
- fix(gui-app): durable per-chat run settings + task-wide rate-limit switch (#304) (85f8334)
- fix(gui-app): make PR number searchable in worktree settings (#309) (35f84de)
- fix(gui-app): contain workspace selector rows (#311) (2a9841d)
- dev: per-worktree slot identity, warm-open worktree tiers, and device-flow scheme threading (#310) (f75aedf)
- fix(gui-app): reopen closed tasks from resource monitor (#314) (73fd867)
- fix(gui-app): stop React Compiler from memoizing bound-store hook calls (terminal tile crash loop) (#316) (8c43d7c)
- feat(gui-app): non-blocking TUI launch with a self-updating setup card (#313) (363456a)
- feat(gui-app): surface worktree and PR context (#315) (a3f8df8)
- fix(gui-app): make progress toasts closable (#318) (9bb6306)
- fix(gui): keep worktree postfix out of renderer header (#319) (466bd2f)
- fix(chat): carry sender provenance on steered messages; log retention (#317) (f523fea)
- feat(gui-app): improve notification presentation (#320) (449a538)
- feat: export artifacts as Markdown or PDF (#278) (a263142)
- fix(gui): remove composer PR badge (#327) (1199114)
- fix(gui): avoid sign-in prompt for retryable auth failures (#329) (1368938)
- feat: make A2A agents profile-aware (#330) (d70b420)
- fix(notifications): clear host-backed notifications (#332) (48d7465)
- feat(rate-limits): use Codex manual reset credits (#333) (d6ffc37)
- fix: harden provider sign-in and add copy-link fallback (6105519)
- fix(gui): unify chat loading during sidebar switches (#335) (bdd7100)
- fix(gui): resize agent selection guide editor (#336) (3ace680)
- fix(notifications): keep toast content in sync with feed (#337) (3584ca2)
- fix(gui-app): search task history by PR number (#338) (b8dd15d)
- fix(gui): make harness catalog refresh intent-driven (#331) (911b027)
- feat(shell): revamp Shell pane in Settings (#303) (4c219d2)
- feat(terminal): epic-less terminal sessions + landing terminal panel (#339) (ebe4879)
- feat(gui): support Q&A checkpoint forks (#340) (2782807)
- Add targeted Codex reset expiry details (#341) (3b7c9fd)
- fix(gui): improve epic canvas context menus and Git diff labels (#342) (714cf2b)
- Collapse Codex manual resets in the header popover, keep the list in Settings (#343) (d452022)
- feat(gui): add Markdown source editor for agent guide (#345) (cd572ff)
- feat(notifications): typed payload contract with kind-coupled semantic parse (#350) (d62f4ae)
- feat(notifications): add settings gear button to notifications popover (#349) (4d4cb86)
- Improve chat status indicators and tooltip accessibility (#347) (49cdaae)
- fix(gui): apply hover-preview review nits (#352) (1ae69e7)
- feat(gui): pin epic history items (#348) (498efd8)
- fix(gui): make notification toasts clickable (#346) (53b42b4)
- refactor(gui): remove renderer-local artifact/chat create action (#353) (765fe0a)
- chore: update dependencies (#354) (3cbaf88)
- feat(gui-app): add profile-aware usage to the model picker (#351) (33b193c)
- fix(gui-app): make host terminal.list the single source of truth for terminal titles (#356) (0de04f0)
- feat(auth): add Claude OAuth code-paste sign-in flow (#355) (3b261a2)
- chore: switch repository license to MIT (#358) (d1c52e9)
- fix(gui-app): complete in-flight blocks in place across steer splits (#360) (3c93739)
- feat(a2a): add inReplyTo to agent sender for chain-root notification gating (#359) (8f61315)
- fix(desktop): recover host reachability instead of wedging chats offline (#361) (4840e7d)
- fix(gui): restore wireframe preview interactivity (#357) (e8f1f69)
- fix(gui-app): tame host-error notification noise (#364) (8f3cafa)
- feat(gui): PostHog user-journey analytics with a strict privacy boundary (#365) (9fba5be)
- fix(gui-app): preserve model settings on profile switch (#367) (1845774)
- fix(gui-app): refresh provider profiles in parallel (#369) (31eb598)
- fix(gui-app): anchor selection toolbar to tile scroll container (#363) (6f2bf1d)
- fix(gui): unify notification toast rendering (#371) (3c71cb0)
- refactor(gui-app): drop misleading terminal/TUI/GUI agent counts from Resources monitor (#366) (a663288)
- fix(gui): render a Stopped footer at the boundary of user-stopped turns (#372) (c7e38c8)
- feat(gui-app): add artifact link opening and hover editing (#368) (615b8e0)
- fix: product remediations from the analytics-exactness debate (#373) (7fee01d)
- chore: refresh bun dependencies (#377) (9b6d67c)
- feat(notifications): surface actionable provider failures (#378) (2a48041)
- fix(gui-app): don't fail a terminal-account switch while its auth probe is pending (#379) (e37a9c5)
- feat(gui-app): make usage limit popover resizable (#376) (bc82464)
- fix(gui-app): decouple profile and model memory (#380) (f4031fb)
- feat(gui-app): mark the terminal profile with a badge and keep its remove action visible (#381) (cec917f)
- fix(gui-app): distinguish background work from agent processing in chat indicators (#382) (706ab40)
- fix(clients): self-heal a closed app-wide stream client and surface dead subscriptions (#383) (e019e50)
- fix(gui-app): landing terminal panel resize feel, stable toggle, and epic-parity shortcuts (#384) (ef5b252)
- feat(protocol,cli): A2A per-delivery lifecycle v2 — additive @1.1 contracts + monitor/Stop-hook wiring (#375) (d7802f1)
- fix(gui-app): keep plain terminal streams warm across tab switches (#385) (f29a354)
- test(protocol): de-flake the adversarial store fuzz — zombie guard (#386) (9d80460)
- fix(gui-app): make scroll keys work in chat and terminal history (#387) (5de6a38)
- test(gui-app): lock in focus-authority for chat scroll keys (#388) (8aeb986)
- fix(desktop, cli): harden host LaunchAgent registration across install/update cycles (#287) (#389) (ff959db)
- fix(gui-app): contain delete confirmation layout (#390) (9b0defb)
- feat(git): watcher-driven status refresh — protocol v1.1 rich-slot ownership (#391) (9a6497d)
- revert(protocol,cli): remove the A2A per-delivery lifecycle v2 @1.1 surface (#393) (7d4e0c5)
- Fix notification toast navigation (#394) (b117381)
- feat(protocol,gui): add the mcp background-item kind on chat.subscribe@1.4 (#395) (938c77b)
- fix(gui-app): prevent landing terminal loading text overlap (#397) (b46baf2)
- feat(notifications): add notification hooks; drop the single-webhook channel (#396) (b3a923e)
- fix(gui-app): distinguish task background activity (#398) (e3accfa)
- feat(protocol,gui): richer mcp background cards — live elapsed, JSON result rendering, resume-trigger identity (#400) (b5c9298)
- fix(gui): retain rate-limit and harness model caches (#401) (a91add2)
- fix(gui-app): align active tab border joins (#403) (2ffe9b3)
- fix(gui): paste copied file paths into terminals (#404) (6cb3958)
- refactor(gui): share terminal file transfer resolution (#405) (8635fbd)
- fix(gui-app): resolve relative links and anchor wrapped-link popovers (#402) (b5559a1)
- feat(protocol,clients): host-pushed worktree freshness — git-free reads, forceRefresh, worktree.changed stream (#399) (72df6ee)
- feat(notifications): add durable workspace failure notifications (#409) (c32b4af)
- feat(gui-app): streamline rate-limit profile switching (#406) (a76d9d1)
- fix(notifications): prevent app-local alert replays (#408) (905925c)
- Fix worktree setup when resending an edited message (#411) (ab21607)
- fix(gui): restore rejected chat workspace intents (#412) (d13d4eb)
- test(protocol): enforce additive-only host-notification payload evolution (#413) (c9fb7e4)
- fix(gui-app): guard undefined userName at the auth store boundary (#414) (d3541fb)
- refactor(protocol): drop hostNotificationPayloadWithChatTitle; document the post-enrichment payload contract (#410) (726003b)
- feat(desktop): guard renderer bundle against duplicate single-instance deps (#415) (1e4fe89)
- feat(protocol,gui): resolve worktree owner titles by id via epic.getTaskContexts (#416) (1cc5034)
- fix(gui-app): pin spinner font-weight so braille glyphs don't switch faces (#417) (6b6ea87)
- fix(gui-app): prevent tab tooltip hover flicker (#418) (b1bab4d)
- fix(gui-app): guard undefined error.code in report-issue context (#419) (e6c6313)
- fix(gui-app): landing terminal focus fixes + chat descendant status rollup (#420) (4b8eb3e)
- feat(protocol): publish an agent's turn/background tier over epic awareness (#421) (e1e6bb3)
- feat(gui-app): split the descendant rollup's running tier into turn vs background (#422) (e403285)
- fix(gui-app): recover notification indicators after fetch errors (#432) (0bcd188)
- fix(gui-app): coalesce worktree.changed invalidations into per-burst flushes (#431) (dad0b5a)
- feat(protocol,host,gui): scope the composer rate-limit banner to the selected model (#425) (aa94156)
- fix(gui-app): expand sign-in code by default (#434) (32ecd0a)
- fix(gui-app): surface worktree provision failures + add clients/shared compile gate (#433) (013293e)
- chore: refresh bun dependencies (#437) (af454b1)
- feat(gui): show turn profile in agent tooltip (#438) (e8fb3cb)
- fix(gui): harden rate-limit scope matching and dismissal identity (#439) (3fde9fd)
- fix(gui-app): theme and truncate Git module previews (#440) (7b6b55a)
- feat(gui-app): add TanStack Query Devtools (#435) (46fb8b2)
- fix(gui): make HostRpcError query/mutation error generics true by construction (#441) (a489854)
- feat(gui-app): use calendar icon for background activity (#443) (d8dd5f1)
- fix(gui-app): recover workspace folder resolution (#444) (acb84b9)
- fix(gui-app): stabilize rate limit popover interactions (#445) (80fbb6d)
- fix(protocol): bridge legacy-host resolvedAt as resolved, not pending (#450) (e929460)
- fix(protocol,gui-app): resolve empty workspace pickers with a pending row state (#451) (e3f4a3e)
- fix(protocol): tell A2A receivers a responseId names the thread, not one message (#452) (02dff54)
- fix(gui-app): make notification expansion overflow-aware (#453) (d60ed1c)
- fix(gui-app): prevent diff loading error flicker (#455) (fad20da)
- fix(gui-app): target signed-out profiles for reauth (#456) (5b6713c)
- fix(gui-app): keep active tab icons above chrome (#457) (35a0810)
- feat(gui-app): persist interview answer drafts per chat (#454) (95f32c0)
- fix(worktree): classify landed submodule work (#459) (22f3aed)
- fix(gui-app): terminal grid-size fixes — latch prevention, warm-handle adoption, measure-before-subscribe (#460) (2671cc1)
- fix(gui-app): expand mermaid diagrams on click (#461) (ddfe562)
- fix(gui-app): validate pasted image hashes and add unavailable-image state, edit-composer attach support (#458) (a5c9044)
- fix(gui-app): use waiting chat for background activity (#465) (e617ffc)
- fix(gui-app): open bundle diff files in source viewer (#464) (0bddb9f)
- perf(gui): manual-refresh worktree settings and batch enrichment RPCs (#462) (80bb078)
- fix(protocol): freeze full epic persistence schema (#469) (67c5ef4)
- fix(gui-app): default resource monitor to tab order (#472) (adfc7c9)
- fix(agent): reserve Cursor TUI schema without exposing it (#471) (33158f5)
- fix(gui-app): clarify notification creation gate (#473) (375ff9e)
- fix(gui-app): stop providers.list fast-poll storms — disabled-provider gate, pending budget, cosmetic-invalidation narrowing (#474) (96cd77e)
- feat(gui-app): make link clicks navigate and gate editing behind the hover card (#467) (f87b9cb)
- fix(desktop): suppress WSL kernel core dumps and cap crashpad minidump backlog (#476) (424899d)
- fix(gui-app): guard mention menu scroll effect against empty items (#477) (f1f2fed)
- fix(gui-app): quote final paragraphs cleanly (#479) (b56d050)
- fix(desktop): make host restarts resilient and non-blocking (#480) (fdc4873)
- fix(gui-app): hide closed app-wide stream client during rebuild (#482) (27cf3a4)
- fix(desktop,cli): split SMAppService agent label from the CLI's launchd label (#487) (54dda6f)
Traycer Desktop 1.1.7.