happy-stacks 0.6.12 → 0.6.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/docs/commit-audits/happy/_tools/generate-plans.mjs +453 -0
  2. package/docs/commit-audits/happy/_tools/generate-pr-assignment.mjs +430 -0
  3. package/docs/commit-audits/happy/_tools/init-pr-assignment-working.mjs +107 -0
  4. package/docs/commit-audits/happy/leeroy-wip.commit-analysis.md +1849 -0
  5. package/docs/commit-audits/happy/leeroy-wip.commit-export.fuller-stat.md +747 -1
  6. package/docs/commit-audits/happy/leeroy-wip.commit-index.json +11740 -0
  7. package/docs/commit-audits/happy/leeroy-wip.commit-index.tsv +252 -0
  8. package/docs/commit-audits/happy/leeroy-wip.commit-inventory.md +18 -11
  9. package/docs/commit-audits/happy/leeroy-wip.commit-manual-review.md +1236 -92
  10. package/docs/commit-audits/happy/leeroy-wip.maintainers-overview.draft.md +448 -0
  11. package/docs/commit-audits/happy/leeroy-wip.pr-assignment.draft.tsv +252 -0
  12. package/docs/commit-audits/happy/leeroy-wip.pr-assignment.working.tsv +288 -0
  13. package/docs/commit-audits/happy/leeroy-wip.pr-catalog.draft.md +245 -0
  14. package/docs/commit-audits/happy/leeroy-wip.pr-stack-plan.draft.md +350 -0
  15. package/docs/commit-audits/happy/leeroy-wip.rewrite-deferred-fragments.tsv +65 -0
  16. package/docs/commit-audits/happy/leeroy-wip.rewrite-ledger.tsv +56 -0
  17. package/docs/commit-audits/happy/leeroy-wip.rewrite-process.md +240 -0
  18. package/docs/commit-audits/happy/leeroy-wip.rewrite-status.tsv +39 -0
  19. package/docs/commit-audits/happy/leeroy-wip.split-plan.draft.md +93 -0
  20. package/docs/commit-audits/happy/leeroy-wip.topic-buckets.md +76 -0
  21. package/docs/commit-audits/happy/pr-desc.extraction-ledger.tsv +279 -0
  22. package/docs/commit-audits/happy/pr-desc.original.md +0 -0
  23. package/docs/commit-audits/happy/pr-desc.post-audit-extraction-ledger.tsv +54 -0
  24. package/docs/commit-audits/happy/pr-desc.working-document.md +536 -0
  25. package/docs/happy-development.md +18 -1
  26. package/docs/isolated-linux-vm.md +23 -1
  27. package/docs/stacks.md +21 -1
  28. package/package.json +1 -1
  29. package/scripts/auth.mjs +46 -8
  30. package/scripts/daemon.mjs +44 -21
  31. package/scripts/doctor.mjs +2 -2
  32. package/scripts/doctor_cmd.test.mjs +67 -0
  33. package/scripts/happy.mjs +18 -5
  34. package/scripts/provision/linux-ubuntu-review-pr.sh +5 -1
  35. package/scripts/provision/macos-lima-happy-vm.sh +34 -2
  36. package/scripts/review.mjs +347 -124
  37. package/scripts/review_pr.mjs +78 -2
  38. package/scripts/run.mjs +2 -1
  39. package/scripts/stack.mjs +265 -19
  40. package/scripts/stack_daemon_cmd.test.mjs +196 -0
  41. package/scripts/stack_happy_cmd.test.mjs +103 -0
  42. package/scripts/utils/cli/prereqs.mjs +12 -1
  43. package/scripts/utils/dev/daemon.mjs +3 -1
  44. package/scripts/utils/proc/pm.mjs +1 -1
  45. package/scripts/utils/review/detached_worktree.mjs +61 -0
  46. package/scripts/utils/review/detached_worktree.test.mjs +62 -0
  47. package/scripts/utils/review/findings.mjs +133 -20
  48. package/scripts/utils/review/findings.test.mjs +88 -1
  49. package/scripts/utils/review/runners/augment.mjs +71 -0
  50. package/scripts/utils/review/runners/augment.test.mjs +42 -0
  51. package/scripts/utils/review/runners/coderabbit.mjs +54 -10
  52. package/scripts/utils/review/runners/coderabbit.test.mjs +15 -48
  53. package/scripts/utils/review/sliced_runner.mjs +39 -0
  54. package/scripts/utils/review/sliced_runner.test.mjs +47 -0
  55. package/scripts/utils/review/tool_home_seed.mjs +99 -0
  56. package/scripts/utils/review/tool_home_seed.test.mjs +113 -0
  57. package/scripts/utils/stack/cli_identities.mjs +29 -0
  58. package/scripts/utils/stack/startup.mjs +45 -7
  59. package/scripts/worktrees.mjs +8 -5
@@ -0,0 +1,245 @@
1
+ # PR catalog (draft, feature-first)
2
+
3
+ Generated: 2026-01-25
4
+ Source of truth for commit mapping: `docs/commit-audits/happy/leeroy-wip.commit-index.json`
5
+
6
+ ## Principles
7
+
8
+ - PRs are organized by **final feature/final fix** (not by infra layering).
9
+ - Within a PR, we keep **useful commit granularity**, but we **squash “evolution noise”** (fixups/reverts/follow-ups) so the rewritten history represents the final correct state.
10
+ - Translations/a11y/tests should generally be **folded into the feature PR** that uses them, unless we intentionally do a single early i18n sweep to reduce conflict surface.
11
+
12
+ ## Proposed PRs (draft)
13
+
14
+ Notes:
15
+ - PRs are listed in **numeric order** for scanning. The *rewrite execution order* lives in `docs/commit-audits/happy/leeroy-wip.rewrite-status.tsv`.
16
+ - Unless we explicitly decide otherwise, **i18n/a11y/tests are folded into the owning feature PR** (i.e. `translationHandling=in-feature-pr` in the TSV).
17
+
18
+ ### PR01 — Foundations / DevX
19
+
20
+ - Goal: repo/tooling hygiene that would otherwise leak into every PR.
21
+ - Includes: deps/test infra, small typecheck fixes, runtime helpers (e.g. Bun spawn compatibility), minor logging/diagnostic gating.
22
+ - Excludes: user-facing features (should live in their owning PRs).
23
+
24
+ ### PR02 — UI modal/overlay/popover system (native + web) + Expo web modal behavior
25
+
26
+ - Goal: one coherent modal/overlay system, including the Expo web modal behavior restoration.
27
+ - Includes: overlay portals, modal primitives, popovers/dropdowns, WebAlertModal hardening, Expo web modal plumbing + expo-router pin/patch where required.
28
+ - Excludes: non-overlay list/primitives (PR38) and feature screens (they stay in their feature PRs).
29
+
30
+ ### PR03 — i18n foundation sweep (optional)
31
+
32
+ - Goal: reduce conflict surface by landing shared translation keys early (only if we decide it’s worth it).
33
+ - Includes: “shared keys” that are otherwise touched by many PRs.
34
+ - Excludes: feature-specific strings (prefer folding into owning feature PRs).
35
+ - Note: if we run PR03, later PRs must not re-add those keys (they should only consume them).
36
+
37
+ ### PR04 — Auth + storage scoping
38
+
39
+ - Goal: auth persistence + scoped storage roots (baseline for reliable multi-feature storage).
40
+ - Includes: token storage persistence hardening, storage root scoping, and related migrations/compat glue.
41
+ - Excludes: feature-specific persistence semantics (PR05/PR28/etc).
42
+
43
+ ### PR05 — Persistence / drafts
44
+
45
+ - Goal: final-state persistence primitives (draft modes, invariants, write semantics).
46
+ - Includes: draft mode validation/clamping and persistence invariants that aren’t tied to a single feature UI.
47
+ - Excludes: feature-layer persistence (resume, queue, wizard) that should live with its feature.
48
+
49
+ ### PR06 — Settings: API keys + experiments + settings screens
50
+
51
+ - Goal: settings surfaces that don’t belong to a single feature PR.
52
+ - Includes: API key management UI, experiments toggles, settings screen structure, settings parsing robustness.
53
+ - Excludes: secrets/vault UX (PR09) and profiles/env UX (PR07/PR08).
54
+
55
+ ### PR07 — Env var templates + preview/resolution end-to-end
56
+
57
+ - Goal: env var template parsing + preview/resolution UX (final state).
58
+ - Includes: template parsing/formatting, preview modal behaviors, remote resolution correctness/safety.
59
+ - Excludes: profiles selection UX (PR08) and secrets-backed requirements (PR09).
60
+
61
+ ### PR08 — Profiles feature
62
+
63
+ - Goal: profiles end-to-end (final state).
64
+ - Includes: profile CRUD UX, env var selection UX within profiles, profile model helpers.
65
+ - Excludes: core env-template parsing (PR07) and secrets/vault storage primitives (PR09).
66
+
67
+ ### PR09 — Secrets / vault
68
+
69
+ - Goal: secrets end-to-end: SecretString/sealing, tolerant parsing, redaction, and secrets UX.
70
+ - Includes: secret storage model + UI, validation, tolerant parsing + “keep valid entries” behavior, redaction/visibility hardening.
71
+ - Excludes: generic API-key settings UX (PR06) unless a surface is explicitly migrated to secrets.
72
+
73
+ ### PR10 — Permission framework (Claude/cloud baseline)
74
+
75
+ - Goal: baseline permission mode types/mapping + persistence/arbitration + Claude/cloud UX.
76
+ - Includes: permission mode modeling, storage/persistence, default UX flows, correctness tests.
77
+ - Excludes: agent-specific allowlists/approvals for Codex/Gemini (PR11/PR32).
78
+
79
+ ### PR11 — Agent permissions (Codex/Gemini): permission modes + allowlists
80
+
81
+ - Goal: agent-specific permission behavior: Codex/Gemini permission wiring + per-session allowlists + shell approval hardening.
82
+ - Includes: per-session allowlist policy + persistence/wiring for agents beyond Claude, and related UX correctness.
83
+ - Excludes: Codex execpolicy approvals and MCP elicitation UI (PR32).
84
+
85
+ ### PR12 — Tool interaction: AskUserQuestion + ExitPlan native handling
86
+
87
+ - Goal: end-to-end tool UX for AskUserQuestion + ExitPlan with correct `interaction.respond` plumbing.
88
+ - Includes: tool views, respond payload wiring, permission-id guardrails, submit/retry UX.
89
+ - Excludes: generalized tool-call normalization/specialized renderers (PR39).
90
+
91
+ ### PR13 — MessageQueueV1 + Pending messages (end-to-end)
92
+
93
+ - Goal: pending-message queue as a final feature (no separate “fix PRs” for follow-ups).
94
+ - Includes: queue semantics, pending/discard/send-now correctness, pending UI (indicator/modal) and tests.
95
+ - Excludes: generic sync transport reliability not specific to the queue (PR27).
96
+
97
+ ### PR14 — Capabilities end-to-end (protocol + wiring + reliability)
98
+
99
+ - Goal: checklist-based capabilities protocol plus required caching/reliability fixes.
100
+ - Includes: protocol definition + wiring, cache correctness, failure/backoff semantics specific to capabilities.
101
+ - Excludes: preview-env (PR15) and generic transport parsing (PR27).
102
+
103
+ ### PR15 — preview-env end-to-end
104
+
105
+ - Goal: preview-env RPC as a coherent final feature.
106
+ - Includes: key validation (lowercase/prototype-safe), RPC handlers, tests.
107
+ - Excludes: env-template UI/pickers (PR07/PR08).
108
+
109
+ ### PR16 — Daemon reliability (ownership + reattach/restart safety)
110
+
111
+ - Goal: stack-safe daemon management and reattach semantics (no cross-stack killing).
112
+ - Includes: process ownership checks, reattach/restart logic, PID safety, related tests.
113
+ - Excludes: terminal IO behavior (PR31) and tmux feature work (PR18).
114
+
115
+ ### PR17 — CLI reliability (socket/metadata waiters + reconnection + backoff)
116
+
117
+ - Goal: CLI-side reliability (waiter cleanup, reconnection correctness, backoff semantics).
118
+ - Includes: waiter lifecycle, retry/backoff correctness, metadata/socket coordination fixes.
119
+ - Excludes: queue semantics (PR13) and capabilities protocol (PR14) except where explicitly coupled.
120
+
121
+ ### PR18 — TMUX end-to-end (headless sessions + attach + settings)
122
+
123
+ - Goal: tmux as a final feature (headless sessions + attach flows + settings).
124
+ - Includes: tmux parsing/targeting correctness, spawn/socket path handling, attach instructions, tmux settings/persistence.
125
+ - Excludes: generic terminal switching/signal forwarding (PR31) and Claude-specific switching UX (PR20).
126
+
127
+ ### PR19 — Resume end-to-end (inactive resume + session lifecycle)
128
+
129
+ - Goal: resume UX + RPCs + daemon plumbing (Claude + Codex).
130
+ - Includes: inactive-session resume flows, resume wiring, related session lifecycle correctness, i18n/a11y for resume UX.
131
+ - Excludes: Claude transcript/scanner improvements not strictly required for resume (PR20).
132
+
133
+ ### PR20 — Claude session reliability (switching + transcript/scanner + local runner)
134
+
135
+ - Goal: Claude-specific reliability improvements beyond resume and beyond generic terminal IO.
136
+ - Includes: cloud/local switching reliability, transcript/scanner correctness, local runner argument correctness.
137
+ - Excludes: tmux-specific work (PR18) and generic terminal IO/signal forwarding (PR31).
138
+
139
+ ### PR21 — Codex MCP tool-call result correctness
140
+
141
+ - Goal: correctness for Codex MCP tool-call results (e.g. preserve falsy Ok/Err outputs).
142
+ - Includes: strict correctness fixes for tool-call result parsing/serialization.
143
+ - Excludes: Codex approvals + elicitation (PR32) and generalized tool normalization (PR39).
144
+
145
+ ### PR22 — Server-light flavor (variant + schema/prisma sync)
146
+
147
+ - Goal: add a lightweight server flavor/variant as a first-class supported mode.
148
+ - Includes: SQLite flavor/variant implementation, migrations/schema sync strategy, prisma centralization (if kept together).
149
+ - Excludes: UI serving/public file serving (PR23) and S3 validation (PR24).
150
+
151
+ ### PR23 — Server: optionally serve UI + public files safely
152
+
153
+ - Goal: “serve UI from server” correctness + hardening.
154
+ - Includes: missing UI bundle/index handling, public file path normalization/encoding safety, safe 404 vs 500 behavior.
155
+ - Excludes: server-light flavor internals (PR22).
156
+
157
+ ### PR24 — Storage: S3 env + bucket validation
158
+
159
+ - Goal: fail-fast storage configuration validation for S3/Minio.
160
+ - Includes: env validation, bucket existence checks, hardening/tests.
161
+ - Excludes: unrelated storage/persistence features (PR04/PR05).
162
+
163
+ ### PR25 — Misc small UX polish (only if it stays small)
164
+
165
+ - Goal: keep tiny isolated UX fixes from ballooning other PRs.
166
+ - Includes: only changes that are truly isolated and do not meaningfully alter a feature’s core behavior.
167
+ - Rule: if it touches a feature PR’s core surfaces, fold it into that feature PR instead.
168
+
169
+ ### PR26 — New session wizard end-to-end (wizard + pick flows + machine selection)
170
+
171
+ - Goal: new-session as a cohesive final feature.
172
+ - Includes: wizard extraction/flow, pick screens, machine selection UX, correctness fixes and tests for the wizard flow.
173
+ - Excludes: generic UI primitives (PR02/PR38) and profiles/env/secrets foundations (PR07/PR08/PR09).
174
+
175
+ ### PR27 — Sync robustness (transport/error parsing + backoff semantics)
176
+
177
+ - Goal: sync layer reliability not specific to queue/capabilities.
178
+ - Includes: JSON parsing guards, disconnect handling, invalidate-and-await safety, debounce/backoff correctness (sync layer).
179
+ - Excludes: queue semantics (PR13) and capabilities protocol behavior (PR14).
180
+
181
+ ### PR28 — Model modes (per-session selection + persistence)
182
+
183
+ - Goal: per-session model mode correctness: clamping/validation + persistence + UI alignment.
184
+ - Includes: persistence format + migrations, UI defaults, safety checks/tests.
185
+ - Excludes: agent selection/registry (PR37) unless directly tied to model modes.
186
+
187
+ ### PR29 — Sessions & message list UX
188
+
189
+ - Goal: session/message browsing UX and reliability.
190
+ - Includes: inactive grouping/unread indicators, archive/kill robustness, message list conveniences.
191
+ - Excludes: resume semantics (PR19) and pending queue UI (PR13).
192
+
193
+ ### PR30 — Agent error surfaces (Codex/Gemini)
194
+
195
+ - Goal: make agent failures user-visible/actionable and testable.
196
+ - Includes: error surfaces in session UI, shared formatting helpers, targeted tests.
197
+ - Excludes: approvals/elicitation flows (PR32) and tool-view UX (PR12/PR39).
198
+
199
+ ### PR31 — Terminal switching reliability (remote↔local)
200
+
201
+ - Goal: make remote↔local terminal switching deterministic and safe (non-tmux specific).
202
+ - Includes: input handling, buffered stdin draining, child signal forwarding, terminal session lifecycle correctness.
203
+ - Excludes: tmux feature work (PR18) and Claude transcript/scanner work (PR20).
204
+
205
+ ### PR32 — Codex approvals + MCP tool interactions (execpolicy + elicitation)
206
+
207
+ - Goal: end-to-end support for Codex execpolicy approvals and MCP elicitation/tool interaction wiring.
208
+ - Includes: approvals UI decision + payload plumbing, MCP tool-call begin/end surfacing, bridge runner compatibility (`process.execPath`).
209
+ - Excludes: pure tool-call result correctness (PR21) and generalized tool normalization (PR39).
210
+
211
+ ### PR33 — Codex special commands (/clear session reset)
212
+
213
+ - Goal: make Codex special commands deterministic and safe.
214
+ - Includes: treat `/clear` as a session boundary that resets Codex session state (and adjacent correctness).
215
+ - Excludes: broader Codex integrations (PR32/PR19).
216
+
217
+ ### PR35 — Friends: UX + reliability
218
+
219
+ - Goal: keep all “friends” UX/reliability improvements together.
220
+ - Includes: stable search error codes, localization, and follow-up UX fixes for the friends surface.
221
+ - Excludes: other session/message UX (PR29).
222
+
223
+ ### PR36 — ACP agents end-to-end (runtimes + replay + tool normalization)
224
+
225
+ - Goal: treat ACP-backed agents as first-class backends.
226
+ - Includes: CLI runtimes/transport wiring, replay capture/import, normalization needed for ACP events.
227
+ - Excludes: generic tool normalization that applies across all agents (PR39) unless shared.
228
+
229
+ ### PR37 — Agent registry end-to-end (selection + settings + UX helpers)
230
+
231
+ - Goal: typed agent registry in the Expo app and coherent agent selection.
232
+ - Includes: enabled agents, picker options, capability/resume option helpers, CLI warnings surfaced in app UX.
233
+ - Excludes: capabilities protocol itself (PR14).
234
+
235
+ ### PR38 — UI list primitives + pending UI polish
236
+
237
+ - Goal: list/row primitives to make session/settings UIs consistent.
238
+ - Includes: ItemGroup/list row primitives, dividers/titles/actions primitives, non-modal list UX helpers.
239
+ - Excludes: modal/overlay system (PR02) and queue semantics (PR13).
240
+
241
+ ### PR39 — Tool UX: normalization + specialized views + tracing
242
+
243
+ - Goal: normalize agent tool-call shapes and render them consistently in the UI, with tracing/fixtures for debugging/regressions.
244
+ - Includes: normalization helpers, specialized tool renderers, robust fallback views, tool-trace extraction/fixtures.
245
+ - Excludes: AskUserQuestion/ExitPlan end-to-end wiring (PR12), unless a shared renderer is used.
@@ -0,0 +1,350 @@
1
+ # PR stack plan (draft)
2
+
3
+ Generated: 2026-01-25T18:08:26.317Z
4
+
5
+ > ⚠️ Superseded: this file is an older “~15 PRs” draft generated early from topic buckets.
6
+ > It does **not** reflect the current PR catalog or the active rewrite execution.
7
+ >
8
+ > Canonical references:
9
+ > - PR definitions/titles: `docs/commit-audits/happy/leeroy-wip.pr-catalog.draft.md`
10
+ > - Commit → PR mapping (source of truth): `docs/commit-audits/happy/leeroy-wip.pr-assignment.working.tsv`
11
+ > - Current rewrite order/status: `docs/commit-audits/happy/leeroy-wip.rewrite-status.tsv`
12
+
13
+ This is a **draft** proposal to split the `leeroy-wip` changes into ~15 PRs.
14
+ It is derived from the audit metadata (topic buckets + manual verdicts), and must be reviewed/edited by humans before any history rewrite.
15
+
16
+ Principles:
17
+ - Prefer “final feature state” (squash fixups into the feature commits).
18
+ - Keep commit granularity *within* a PR, but avoid “evolution noise” (back-and-forth) in the rewritten history.
19
+ - Avoid mega-commits: when a commit is marked `split`, execute it as multiple commits by file/feature boundary.
20
+
21
+ Coverage:
22
+ - Total commits: 249
23
+ - notesReviewed=yes: 249
24
+ - Split candidates: 4
25
+ - Assigned to PRs: 249
26
+
27
+ ## PR01: Foundations: tooling, deps, test infra
28
+ - Buckets: `crypto`, `deps`, `config`, `format`, `typecheck`, `dev`, `runtime`, `logging`, `test`
29
+ - Commits: 11
30
+ - Commit list:
31
+ - 001 58528a7c37d3 chore(crypto): patch react-native-libsodium
32
+ - 002 552b8da0f621 test(deps): add @types/react-test-renderer
33
+ - 003 017b15c07ad7 chore(config): harden app variant defaults
34
+ - 012 207ef1b2f572 fix(dev): gate CLI detection logging
35
+ - 023 d97924f3ef39 chore(test): define __DEV__ for vitest
36
+ - 046 ea2e4d19d633 chore(deps): align react-test-renderer with react
37
+ - 051 43f23f2f082e chore(format): replace stray tabs with spaces
38
+ - 072 82d74454c3c4 fix(typecheck): restore permission imports and Popover web styles
39
+ - 088 a7d23148c311 fix(logging): gate debug output and redact templates
40
+ - 092 6b0bfe546d9e feat(runtime): support bun for daemon-spawned subprocesses [notesUpdated]
41
+ - 128 d317f6bfa282 fix(typecheck): resolve duplicate terminalRuntime and RPC handler types
42
+
43
+ ## PR02: Expo web modals + expo-router pin/patch
44
+ - Note: Draft: later we will split expo-app commits across PRs based on touched files (router/postinstall vs feature UI).
45
+ - Buckets: `expo-app`, `expo`
46
+ - Commits: 12
47
+ - Commit list:
48
+ - 069 c06b6202b5d4 Add copy-to-clipboard button to message blocks
49
+ - 163 84df0d260513 fix(expo-app): stabilize postinstall and libsodium patches
50
+ - 177 893ce7af5df0 fix(expo-app): avoid hooks order violation on redirect
51
+ - 178 7afbc9a2decd fix(expo-app): persist resumeSessionId and harden clipboard paste
52
+ - 179 9a13879b753a fix(expo-app): avoid false homeDir prefix matches
53
+ - 180 c107a779e07d fix(expo-app): avoid stuck loading in capabilities cache
54
+ - 181 35c0974eff1f refactor(expo-app): remove dead code and dedupe types
55
+ - 185 947b8d1814fb refactor(expo-app): remove unused optimistic flag
56
+ - 191 0dd19e7fb257 fix(expo-app): default codex resume spec to empty
57
+ - 246 384b15252026 fix(expo): harden tool submit and pending send
58
+ - 248 bf3027799623 Set EXPO_UNSTABLE_WEB_MODAL env var in Expo scripts
59
+ - 249 c803115dcbdc Improve postinstall script for symlinked paths and patching
60
+
61
+ ## PR03: i18n structure + localization passes
62
+ - Buckets: `i18n`
63
+ - Commits: 15
64
+ - Commit list:
65
+ - 017 65bae55a0b61 refactor(i18n): separate translation types and content [notesUpdated]
66
+ - 028 0023ba1ea5aa refactor(i18n): update translations and tooling [notesUpdated]
67
+ - 036 97ca69e0a735 refactor(i18n): replace remaining UI literals [notesUpdated]
68
+ - 052 e1d55fdbd9ee fix(i18n): improve untranslated literal scan parsing
69
+ - 168 9dfa09bef8d8 fix(i18n): add Codex execpolicy button text
70
+ - 182 b319d85e72c3 fix(i18n): correct Spanish resumable label
71
+ - 196 21e096e9454e fix(i18n): localize session settings item
72
+ - 197 7ca9e93196d6 fix(i18n): translate ExitPlanMode strings
73
+ - 198 c4a81947f002 fix(i18n): localize search error
74
+ - 199 208f0222a997 fix(i18n): localize Codex resume dialog
75
+ - 200 02ad6b4a8352 fix(i18n): move openMachine to connect scope
76
+ - 204 a4d7faba961f fix(i18n): localize session error fallbacks
77
+ - 223 73ce32d242a0 fix(i18n): translate Spanish experiment subtitles
78
+ - 224 98bc00096e86 fix(i18n): localize Codex resume banner [SPLIT]
79
+ - 236 054250f408e2 fix(i18n): localize codex resume install modals
80
+
81
+ ## PR04: UI primitives + navigation/UX surfaces
82
+ - Buckets: `ui`, `modal`, `popover`, `agent-input`, `a11y`, `web`, `command-palette`, `autocomplete`, `experiments`, `zen`
83
+ - Commits: 28
84
+ - Commit list:
85
+ - 013 58a892d413d1 fix(command-palette): include navigate dependency
86
+ - 020 8d9f56e85e5a refactor(ui): unify list selectors and modal primitives [notesUpdated]
87
+ - 022 2d4675a5d051 fix(agent-input): use compact permission badges
88
+ - 029 12e75a3b36fa fix(autocomplete): remove debug suggestion logs
89
+ - 031 4dc9c7f8759c feat(agent-input): add configurable action bar layout [notesUpdated]
90
+ - 032 e8e42a6087ad fix(modal): prevent stacked modal touch-blocking on iOS [notesUpdated]
91
+ - 035 7ffd0c3428cb fix(ui): localize error alerts
92
+ - 037 5f5b57df5181 refactor(ui): improve item rendering and action menu timing
93
+ - 038 7976b877259c feat(experiments): gate Zen, file viewer, and voice auth flow
94
+ - 039 6ed379f82c34 refactor(ui): add modal + popover overlay primitives
95
+ - 048 395da4ff3167 refactor(zen): avoid todo variable shadowing
96
+ - 050 2da2f9349ec5 fix(popover): allow web fixed positioning types
97
+ - 054 66c678451335 fix(ui): apply small review fixes [SPLIT]
98
+ - 055 2472b376775c test(modal): make backdrop z-index assertion safer
99
+ - 059 f7f81497444d fix(modal): prevent non-dismissible WebAlertModal [SPLIT]
100
+ - 061 765423af52b4 fix(agent-input): cycle permission mode from normalized state
101
+ - 062 e533db1813a5 fix(popover): add screens cjs helper and fix fixed positioning types
102
+ - 064 e5848c480522 fix(ui): harden overlays and permission cycling
103
+ - 102 c988f68ca4d0 feat(ui): surface Codex/Gemini errors in session UI [notesUpdated]
104
+ - 109 af5000ea6318 fix(ui): polish Codex and Gemini error messages
105
+ - 143 c4beebbfa375 feat(ui): add Codex resume experiment toggle
106
+ - 147 231d7ad9bdd9 fix(ui): clarify Codex resume server label
107
+ - 149 bcf10af94626 test(ui): update useCLIDetection hook tests for capabilities
108
+ - 164 544f9711b6cf fix(ui): respond to plan/question tools via session RPC
109
+ - 201 ce42bf56d7b6 fix(web): correct libsodium wrapper typing
110
+ - 202 f0417ca11ac5 fix(web): keep libsodium wrapper namespace typing
111
+ - 215 82968aa8fe6c fix(ui): send pending messages before closing modal
112
+ - 239 e2618e04a26b fix(a11y): add labels to codex resume actions
113
+
114
+ ## PR05: Core storage & persistence primitives
115
+ - Buckets: `storage`, `persistence`, `settings`, `env`, `auth`
116
+ - Commits: 17
117
+ - Commit list:
118
+ - 004 4890a471df31 fix(auth): harden tokenStorage web persistence
119
+ - 006 a5fbc3e8ba00 feat(persistence): scope storage and validate draft modes [notesUpdated]
120
+ - 010 39cc25154cdd feat(storage): persist session model modes
121
+ - 011 c2d3507357dc fix(settings): make parsing tolerant for profiles [notesUpdated]
122
+ - 014 41479b35415f feat(env): add env var template parsing
123
+ - 015 695bcd09eb9e fix(env): improve remote env resolution and previews
124
+ - 016 6cdb90a49aad feat(env): update env var list, cards, and preview modal
125
+ - 024 9c19baa833b9 feat(settings): add api keys and experiment toggles
126
+ - 030 679877c26ea9 feat(settings): expose per-experiment toggles
127
+ - 060 bb09f91de715 fix(settings): keep valid secrets when one entry is invalid
128
+ - 094 809be82b53e7 fix(env): implement default assignment semantics
129
+ - 104 f53cf71d416c refactor(persistence): remove deprecated tmuxConfig
130
+ - 115 a8093e3e4ddb docs(persistence): update profile schema version comment
131
+ - 156 8c16ee8f9cef fix(auth): surface auth failures and gate unauth routes
132
+ - 203 b6d3874bf175 fix(settings): include Codex resume in master experiment toggle
133
+ - 210 b7f63e928e4f fix(persistence): retry daemon state read when file appears
134
+ - 243 0b7db6945325 fix(storage): validate S3_PORT and bucket existence
135
+
136
+ ## PR06: Secrets / vault / SecretString
137
+ - Buckets: `secrets`
138
+ - Commits: 3
139
+ - Commit list:
140
+ - 041 66ee1eaf88a6 feat(secrets): add secrets management + requirement resolver [notesUpdated]
141
+ - 057 ff7bec72358f fix(secrets): tighten callback deps and fix indentation
142
+ - 063 2ed3100311c7 fix(secrets): hide values when using secret vault
143
+
144
+ ## PR07: Profiles + API keys + environment variables UX
145
+ - Buckets: `profiles`, `api-keys`, `env`
146
+ - Commits: 6
147
+ - Commit list:
148
+ - 019 9e08047d2478 fix(profiles): harden routing, grouping, and editing [notesUpdated]
149
+ - 025 21cc6df79f50 feat(api-keys): add saved API keys UI [notesUpdated]
150
+ - 027 7899bbd8433e feat(profiles): add API key requirements flow [notesUpdated]
151
+ - 056 02450d179aaf fix(profiles): align experimentsEnabled for built-in profiles
152
+ - 090 1f90659694be refactor(profiles): remove unwired startup script and local env cache
153
+ - 091 7aed8aaee02f refactor(profiles): drop provider config objects
154
+
155
+ ## PR08: New session wizard + session creation UX
156
+ - Buckets: `new-session`, `new`, `machine`
157
+ - Commits: 7
158
+ - Commit list:
159
+ - 018 2993b5c860ff fix(new-session): restore standard modal flow [notesUpdated]
160
+ - 026 ce9cd74d408a feat(machine): surface detected CLI status
161
+ - 033 daa0b4527d7f feat(new-session): add api key selection and wizard extraction [notesUpdated]
162
+ - 043 bc779e4f7909 refactor(new-session): integrate secrets + terminal spawn options [notesUpdated]
163
+ - 049 2e956f32f220 fix(new): keep pick screens above iOS modal
164
+ - 058 1bb65f5dd494 fix(new-session): avoid stuck secret requirement modal guard
165
+ - 225 4fabec9b69b3 feat(new-session): add WizardSectionHeaderRow
166
+
167
+ ## PR09: Permissions + tool views
168
+ - Buckets: `permission`, `tools`
169
+ - Commits: 8
170
+ - Commit list:
171
+ - 008 f7bb8a28fff7 fix(tools): harden ACP tool parsing and titles
172
+ - 073 4f2b533f99c2 feat(tools): add approve/reject buttons to ExitPlanMode
173
+ - 132 88494b122194 fix(tools): support Windows arm64 tool unpacking
174
+ - 160 7fbe1f1cc727 fix(permission): avoid no-op permissionModeUpdatedAt bumps
175
+ - 208 61a18ac95e17 fix(tools): require permission id for ExitPlanMode actions
176
+ - 209 5b36c9bf91c1 test(tools): avoid null permission in ExitPlanToolView tests
177
+ - 211 55428fb0253c fix(tools): alert when AskUserQuestion permission id is missing
178
+ - 226 c461ed1cb4ef feat(permission): add permission mode option helpers
179
+
180
+ ## PR10: CLI/daemon/RPC plumbing + capabilities
181
+ - Buckets: `capabilities`, `cli-detection`, `detect-cli`, `rpc`, `daemon`, `socket`, `hooks`, `happy`, `cli`, `happy-cli`, `app`, `common`, `utils`, `pr107`, `reducer`
182
+ - Commits: 50
183
+ - Commit list:
184
+ - 021 2ab560bb0535 feat(cli-detection): add daemon detect-cli RPC support
185
+ - 083 7292a29822bb fix(daemon): do not apply CLI active profile to GUI-spawned sessions
186
+ - 085 e58e97fd7ff4 fix(pr107): harden daemon spawn + align profile schema [notesUpdated]
187
+ - 087 a25acab22b64 fix(socket): restore offline buffering for sends [notesUpdated]
188
+ - 089 ef418bc4dda3 fix(pr107): redact profile secrets in doctor + align tmux tmpDir
189
+ - 093 4071466545ab refactor(rpc): accept arbitrary env var maps for spawn
190
+ - 095 4c2a671dc3f4 feat(rpc): add preview-env handler [notesUpdated]
191
+ - 101 1075a768e551 feat(rpc): add detect-cli handler [notesUpdated]
192
+ - 105 8dae65f6c585 feat(rpc): include tmux in detect-cli [notesUpdated]
193
+ - 107 c13d51ee4638 feat(daemon): support tmux spawn + harden runtime [notesUpdated]
194
+ - 108 f7db44dea458 docs: add AGENTS.md symlink
195
+ - 112 45f4eb5d145c test(detect-cli): avoid process.env reassignment
196
+ - 114 0ad76f4877ae chore(cli): fix gemini daemon block indentation
197
+ - 117 d9591372655f fix(common): handle execFileAsync exit codes
198
+ - 121 9c4cb44b7d86 fix(daemon): reattach sessions after daemon restart [notesUpdated]
199
+ - 122 dbde6d871670 test(daemon): add PID classification + session marker tests
200
+ - 123 7cffdd5ce614 fix(daemon): verify PID via command hash for reattach/stop
201
+ - 126 ffad20faa406 fix(cli): publish permission mode for codex/gemini sessions
202
+ - 129 a8682d427794 fix(detect-cli): relax tmux version probe timeout
203
+ - 138 d3aefaa9b598 refactor(daemon): extract reattach and pid safety helpers
204
+ - 139 72397b7e8c94 test(daemon): add opt-in reattach integration tests
205
+ - 140 9c40c54018c2 Revert "fix(tools): support Windows arm64 tool unpacking"
206
+ - 148 8bebf04aca92 refactor(cli): modularize capabilities and env preview [notesUpdated]
207
+ - 150 a5cac698f15b feat(cli): harden session queue, switching, and lifecycle
208
+ - 151 3fc704424e8d feat(app): add pending queue, discard markers, and capabilities [notesUpdated]
209
+ - 154 39c7b8a56b32 refactor(app): rename tmux/message-send settings under session
210
+ - 157 320a89e19ca0 test(happy): run cli and server checks from root scripts
211
+ - 158 3b3609fed434 fix(rpc): add structured code for missing RPC methods
212
+ - 165 8b3f39f22664 feat(cli): add interaction.respond for AskUserQuestion
213
+ - 169 559d39da116d fix(reducer): keep permission messages idempotent
214
+ - 173 332ab2b0cd93 fix(cli): improve abort error handling to reduce spurious error messages
215
+ - 183 46186162ae14 test(happy-cli): fix timer cleanup and MCP schema mocks
216
+ - 184 ac5bf2f3abfa test(happy-cli): reset modules for runtime override
217
+ - 188 04d9c60ef8e7 refactor(happy-cli): remove unreachable gemini error branch
218
+ - 195 8ab11f2788c1 fix(happy-cli): parse CLI versions from full output
219
+ - 207 61bf70183ebf test(cli): set DEBUG before importing logger
220
+ - 214 5bcc7d20cd6b test(utils): stabilize serverConnectionErrors retry count test
221
+ - 218 47f638b73fca test(utils): cover failuresCount with custom backoff
222
+ - 219 2abc70fef03c fix(utils): track failuresCount for custom backoff
223
+ - 222 abf288056636 fix(cli): reject invalid messageQueueV1 inFlight
224
+ - 229 d89a9427e765 fix(cli): clean up metadata waiters on disconnect
225
+ - 230 fedb8a66160a test(cli): accept lowercase preview-env keys
226
+ - 231 fc0ce89b13b7 fix(cli): allow lowercase preview-env keys
227
+ - 232 ad95c5b01c25 test(happy): keep useCLIDetection timestamp stable
228
+ - 233 c251edf3c307 test(happy): fix useCLIDetection timestamp test
229
+ - 234 34fa4091d3cc fix(happy): stabilize useCLIDetection timestamp
230
+ - 235 31340e53294c fix(happy): inline CLI detection request
231
+ - 237 241f0ae24b1d test(cli): prevent legacy sessionId path traversal
232
+ - 238 a1e4a6dd3fbd fix(cli): block legacy sessionId path traversal
233
+ - 245 82bf82cb6715 fix(hooks): prevent stale capabilities cache overwrite
234
+
235
+ ## PR11: Terminal/tmux/headless + Ink UX
236
+ - Buckets: `terminal`, `tmux`, `ink`
237
+ - Commits: 11
238
+ - Commit list:
239
+ - 042 bdaf6913141f feat(terminal): add Terminal settings + tmux metadata [notesUpdated]
240
+ - 082 3fbdc10018fe fix: tmux parsing/targeting + review feedback [SPLIT,notesUpdated]
241
+ - 098 0a1a91a631e7 feat(tmux): support per-instance socket path [notesUpdated]
242
+ - 099 c52227082c2b fix(tmux): correct env, tmpdir, and session selection [notesUpdated]
243
+ - 106 ad66c6aaa3ae feat(terminal): add tmux metadata + attach tooling [notesUpdated]
244
+ - 110 f68552d03ab9 fix(tmux): print attach instructions in correct order
245
+ - 111 4e4bb65ff3f0 test(tmux): avoid brittle assertions
246
+ - 152 49893dd7d16a fix(terminal): harden remote→local switching input [notesUpdated]
247
+ - 212 dc6955f88abd fix(terminal): prevent sessionId path traversal in attachment info
248
+ - 213 bb685fbeff7b fix(terminal): clarify missing --happy-starting-mode value
249
+ - 216 b7219c8bfe2b fix(ink): avoid async useInput handler
250
+
251
+ ## PR12: Message queue V1 + pending/discard flows
252
+ - Buckets: `queue`, `sync`
253
+ - Commits: 17
254
+ - Commit list:
255
+ - 005 4adc41d92af0 feat(sync): add permission mode types and mapping
256
+ - 009 292424245277 refactor(sync): centralize outgoing message metadata
257
+ - 034 94814465bf81 perf(sync): debounce pending settings writes
258
+ - 040 f0787de5308e feat(sync): add secrets + terminal settings primitives [notesUpdated]
259
+ - 045 1bc3b9715776 fix(sync): handle non-JSON 400 responses
260
+ - 047 dd041d21ecfc fix(sync): guard JSON parsing on disconnect errors
261
+ - 053 c210c1115598 test(sync): restore stubbed fetch between tests
262
+ - 065 69fdcff96a4c fix(sync): restore session permission mode from last message
263
+ - 066 9b499c5dccce fix(sync): persist permission mode timestamp for restart-safe arbitration
264
+ - 067 def8852509d0 fix(sync): persist permission mode reliably across devices
265
+ - 074 c86cbd26b040 feat(queue): add pending message queue UI and send modes
266
+ - 081 4ddaef02210e fix(sync): omit model meta for queued messages [notesUpdated]
267
+ - 118 ab95e8cf920c fix(sync): avoid hanging invalidateAndAwait on errors [notesUpdated]
268
+ - 130 e2824dbc858b feat(queue): add server-side pending message pull support
269
+ - 155 fcec6c311b6b feat(sync): add cross-device unread markers
270
+ - 227 23b595edd0fe refactor(sync): simplify path formatting
271
+ - 244 74fc860b07b5 refactor(queue): simplify stale in-flight reclaim
272
+
273
+ ## PR13: Resume + session lifecycle
274
+ - Buckets: `resume`, `session`, `sessions`, `scanner`, `offline`
275
+ - Commits: 19
276
+ - Commit list:
277
+ - 007 18e77c46f38a fix(session): clamp configurable model modes
278
+ - 068 b1c8a6fecd01 fix(session): archive when kill RPC unavailable
279
+ - 070 9fc7d3d412b9 feat(sessions): group inactive sessions by project
280
+ - 071 62a8b1b07c3e feat(sessions): add unread badge
281
+ - 075 42da6dae8fe4 feat(session): add session rename support
282
+ - 076 057102f67904 feat(resume): add resume session option for new sessions [notesUpdated]
283
+ - 077 05532bd65c6b feat(resume): show resume chip under path in new session
284
+ - 078 cd5771e50881 feat: resume inactive Claude sessions from UI [notesUpdated]
285
+ - 079 456e2ad8e2b8 refactor(resume): don't require agentSessionId from UI [notesUpdated]
286
+ - 084 ce94cfa512ac feat(session): persist profileId in session metadata via daemon spawn
287
+ - 097 c863db3d5bbc refactor(offline): make offline session stub safer
288
+ - 131 37a2c55a6c2f fix(session): prime agent state for readiness
289
+ - 133 d71587eda2db feat: resume Claude sessions from UI
290
+ - 134 a80868aff50d feat: resume inactive Claude sessions from UI
291
+ - 135 bcaa530b12d7 feat(resume): add happy resume and persist vendor resume id
292
+ - 136 e085e75c5d36 feat(resume): allow resume-session without agentSessionId
293
+ - 141 ab35b47ff699 fix(resume): make inactive resume reliable; gate Codex resume
294
+ - 159 0e2c7928f24c fix(scanner): tolerate onMessage exceptions
295
+ - 162 ee0bec2a0b90 Delete INACTIVE_SESSION_RESUME.md
296
+
297
+ ## PR14: Codex & Claude integration
298
+ - Buckets: `codex`, `claude`, `gemini`, `fork`
299
+ - Commits: 29
300
+ - Commit list:
301
+ - 044 cb11d4bdb25a docs: add AGENTS.md symlink + update CLAUDE.md
302
+ - 080 9b0069e3d30c feat(fork): enable Codex resume support [notesUpdated]
303
+ - 096 2973f7fe6861 fix(codex): harden MCP command detection
304
+ - 100 7a01a8e42629 test(claude): align sessionScanner path mapping
305
+ - 103 b2269ee11252 fix(claude): use hook transcript path across switching [notesUpdated]
306
+ - 113 51782fdbfbcd test(codex): reset transport instances between tests
307
+ - 116 b16c3658b944 fix(gemini): normalize error details for UI
308
+ - 119 6f98c95fb5d8 fix(claude): support -c/-r and avoid session loss on switch [notesUpdated]
309
+ - 120 9489d70848f3 test(claude): align sessionScanner path mapping
310
+ - 124 8b88dcd73d40 fix(claude): carry permission mode across remote/local switches
311
+ - 125 8f0e10c9428b fix(claude): publish permission mode in session metadata
312
+ - 127 eb72c6e69434 fix(codex): disable model override and remove experimental resume
313
+ - 137 68a6ba4bc244 feat(fork): enable Codex inactive-session resume via codex-reply
314
+ - 142 aa9b11684389 fix(codex): increase installer output buffer
315
+ - 144 0140ae276869 refactor(codex): install mcp resume server via install-dep
316
+ - 145 2ec41b621b54 fix(codex): detect resume binary on Windows
317
+ - 146 e1deb6db8ddb refactor(codex): add dep-status and drop codex-resume RPCs
318
+ - 153 0126667539b6 fix(claude): forward signals to binary child process
319
+ - 161 2026fbab5cb3 fix(claude): accept -c as continue flag
320
+ - 166 ed4bc007308a feat: add execpolicy approval option for Codex
321
+ - 167 78adc9c58811 feat(codex): support execpolicy approvals and MCP tool calls
322
+ - 170 cc3c711ae28e fix: move claudeArgs to end of args array for slash command support
323
+ - 171 d06d5a833f8e Add signal forwarding to claudeLocal.ts
324
+ - 172 1b7cb3bfea86 feat: handle /clear command as session reset in codex
325
+ - 174 e956463db3e2 fix: use runtime execPath for MCP bridge
326
+ - 175 f0a7d8d0b40c fix(codex): use mcp tool call id for approvals
327
+ - 217 d70a6f6669fe fix(claude): trim CLAUDE_CONFIG_DIR overrides
328
+ - 240 d0f9ad5e8310 test(claude): remove stale transcriptPath red-test scaffolding
329
+ - 241 1464402758bf fix(codex): preserve falsy MCP tool results
330
+
331
+ ## PR15: Server & server-light: sqlite flavor, schema sync, storage backends
332
+ - Buckets: `server-light`, `server`, `storage`, `security`
333
+ - Commits: 16
334
+ - Commit list:
335
+ - 086 86330e263595 fix(security): redact spawn secrets from daemon logs
336
+ - 176 da620b6865ad feat(server): add full/light flavors with sqlite migrations [notesUpdated]
337
+ - 186 8cc823d1ba2d fix(server-light): validate PORT and normalize paths
338
+ - 187 8cb995a1abe1 test(server): fix schema generation sort regex
339
+ - 189 2616e5e19253 fix(server): handle missing UI index.html
340
+ - 190 911365366024 fix(server): make build typecheck tests
341
+ - 192 229e5fc36570 fix(server-light): use file URLs for sqlite db
342
+ - 193 e6f597e436c5 fix(server): fix server-light typecheck
343
+ - 194 1564e800e355 fix(server): relax module settings for typecheck
344
+ - 205 1ea2bddb8bbd test(server): validate processImage resize output
345
+ - 206 1e7d7f8a4747 fix(server): keep light server running
346
+ - 220 dc8016f01c56 fix(server): validate HAPPY_SERVER_LIGHT_DATA_DIR for light migrations
347
+ - 221 b0085827322c fix(server): handle missing UI index in error handlers
348
+ - 228 523989b4de8e fix(server-light): avoid master secret race
349
+ - 242 57f84f0691c6 fix(server-light): harden public file path encoding
350
+ - 247 24b607abfa07 Refactor schema sync and centralize Prisma types [notesUpdated]