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.
- package/docs/commit-audits/happy/_tools/generate-plans.mjs +453 -0
- package/docs/commit-audits/happy/_tools/generate-pr-assignment.mjs +430 -0
- package/docs/commit-audits/happy/_tools/init-pr-assignment-working.mjs +107 -0
- package/docs/commit-audits/happy/leeroy-wip.commit-analysis.md +1849 -0
- package/docs/commit-audits/happy/leeroy-wip.commit-export.fuller-stat.md +747 -1
- package/docs/commit-audits/happy/leeroy-wip.commit-index.json +11740 -0
- package/docs/commit-audits/happy/leeroy-wip.commit-index.tsv +252 -0
- package/docs/commit-audits/happy/leeroy-wip.commit-inventory.md +18 -11
- package/docs/commit-audits/happy/leeroy-wip.commit-manual-review.md +1236 -92
- package/docs/commit-audits/happy/leeroy-wip.maintainers-overview.draft.md +448 -0
- package/docs/commit-audits/happy/leeroy-wip.pr-assignment.draft.tsv +252 -0
- package/docs/commit-audits/happy/leeroy-wip.pr-assignment.working.tsv +288 -0
- package/docs/commit-audits/happy/leeroy-wip.pr-catalog.draft.md +245 -0
- package/docs/commit-audits/happy/leeroy-wip.pr-stack-plan.draft.md +350 -0
- package/docs/commit-audits/happy/leeroy-wip.rewrite-deferred-fragments.tsv +65 -0
- package/docs/commit-audits/happy/leeroy-wip.rewrite-ledger.tsv +56 -0
- package/docs/commit-audits/happy/leeroy-wip.rewrite-process.md +240 -0
- package/docs/commit-audits/happy/leeroy-wip.rewrite-status.tsv +39 -0
- package/docs/commit-audits/happy/leeroy-wip.split-plan.draft.md +93 -0
- package/docs/commit-audits/happy/leeroy-wip.topic-buckets.md +76 -0
- package/docs/commit-audits/happy/pr-desc.extraction-ledger.tsv +279 -0
- package/docs/commit-audits/happy/pr-desc.original.md +0 -0
- package/docs/commit-audits/happy/pr-desc.post-audit-extraction-ledger.tsv +54 -0
- package/docs/commit-audits/happy/pr-desc.working-document.md +536 -0
- package/docs/happy-development.md +18 -1
- package/docs/isolated-linux-vm.md +23 -1
- package/docs/stacks.md +21 -1
- package/package.json +1 -1
- package/scripts/auth.mjs +46 -8
- package/scripts/daemon.mjs +44 -21
- package/scripts/doctor.mjs +2 -2
- package/scripts/doctor_cmd.test.mjs +67 -0
- package/scripts/happy.mjs +18 -5
- package/scripts/provision/linux-ubuntu-review-pr.sh +5 -1
- package/scripts/provision/macos-lima-happy-vm.sh +34 -2
- package/scripts/review.mjs +347 -124
- package/scripts/review_pr.mjs +78 -2
- package/scripts/run.mjs +2 -1
- package/scripts/stack.mjs +265 -19
- package/scripts/stack_daemon_cmd.test.mjs +196 -0
- package/scripts/stack_happy_cmd.test.mjs +103 -0
- package/scripts/utils/cli/prereqs.mjs +12 -1
- package/scripts/utils/dev/daemon.mjs +3 -1
- package/scripts/utils/proc/pm.mjs +1 -1
- package/scripts/utils/review/detached_worktree.mjs +61 -0
- package/scripts/utils/review/detached_worktree.test.mjs +62 -0
- package/scripts/utils/review/findings.mjs +133 -20
- package/scripts/utils/review/findings.test.mjs +88 -1
- package/scripts/utils/review/runners/augment.mjs +71 -0
- package/scripts/utils/review/runners/augment.test.mjs +42 -0
- package/scripts/utils/review/runners/coderabbit.mjs +54 -10
- package/scripts/utils/review/runners/coderabbit.test.mjs +15 -48
- package/scripts/utils/review/sliced_runner.mjs +39 -0
- package/scripts/utils/review/sliced_runner.test.mjs +47 -0
- package/scripts/utils/review/tool_home_seed.mjs +99 -0
- package/scripts/utils/review/tool_home_seed.test.mjs +113 -0
- package/scripts/utils/stack/cli_identities.mjs +29 -0
- package/scripts/utils/stack/startup.mjs +45 -7
- package/scripts/worktrees.mjs +8 -5
|
@@ -0,0 +1,448 @@
|
|
|
1
|
+
# Maintainers overview (draft) — leeroy-wip rewrite
|
|
2
|
+
|
|
3
|
+
Generated: 2026-01-25T18:17:34.943Z
|
|
4
|
+
|
|
5
|
+
This document is a *maintainer-friendly* summary of the PR buckets being carved out of the `leeroy-wip` work.
|
|
6
|
+
It lists each PR bucket and a concrete sample of the changes/features/fixes mapped into it.
|
|
7
|
+
|
|
8
|
+
Sources:
|
|
9
|
+
- PR definitions: `docs/commit-audits/happy/leeroy-wip.pr-catalog.draft.md`
|
|
10
|
+
- Commit → PR mapping: `docs/commit-audits/happy/leeroy-wip.pr-assignment.working.tsv`
|
|
11
|
+
- Rewrite execution status/order: `docs/commit-audits/happy/leeroy-wip.rewrite-status.tsv`
|
|
12
|
+
|
|
13
|
+
Current rewrite status (bucket count):
|
|
14
|
+
- completed: 3
|
|
15
|
+
- deferred: 1
|
|
16
|
+
- in_progress: 1
|
|
17
|
+
- pending: 32
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## PR01 — Foundations / DevX
|
|
22
|
+
Status: completed (stack #01)
|
|
23
|
+
|
|
24
|
+
Changes/features/fixes (examples; 19 commits mapped):
|
|
25
|
+
- chore(crypto): patch react-native-libsodium
|
|
26
|
+
- test(deps): add @types/react-test-renderer
|
|
27
|
+
- chore(config): harden app variant defaults
|
|
28
|
+
- fix(dev): gate CLI detection logging
|
|
29
|
+
- chore(test): define __DEV__ for vitest
|
|
30
|
+
- docs: add AGENTS.md symlink + update CLAUDE.md
|
|
31
|
+
- chore(deps): align react-test-renderer with react
|
|
32
|
+
- chore(format): replace stray tabs with spaces
|
|
33
|
+
- fix(i18n): improve untranslated literal scan parsing
|
|
34
|
+
- docs: add AGENTS.md symlink
|
|
35
|
+
- test(happy): run cli and server checks from root scripts
|
|
36
|
+
- test(happy-cli): reset modules for runtime override
|
|
37
|
+
- …and 7 more small commits/fixups in this bucket
|
|
38
|
+
|
|
39
|
+
## PR02 — UI modal/overlay/popover system (native + web) + Expo web modal behavior
|
|
40
|
+
Status: completed (stack #02)
|
|
41
|
+
|
|
42
|
+
Changes/features/fixes (examples; 19 commits mapped):
|
|
43
|
+
- fix(command-palette): include navigate dependency
|
|
44
|
+
- refactor(ui): unify list selectors and modal primitives
|
|
45
|
+
- fix(agent-input): use compact permission badges
|
|
46
|
+
- fix(autocomplete): remove debug suggestion logs
|
|
47
|
+
- feat(agent-input): add configurable action bar layout
|
|
48
|
+
- fix(modal): prevent stacked modal touch-blocking on iOS
|
|
49
|
+
- fix(ui): localize error alerts
|
|
50
|
+
- refactor(ui): improve item rendering and action menu timing
|
|
51
|
+
- refactor(ui): add modal + popover overlay primitives
|
|
52
|
+
- fix(popover): allow web fixed positioning types
|
|
53
|
+
- fix(ui): apply small review fixes
|
|
54
|
+
- test(modal): make backdrop z-index assertion safer
|
|
55
|
+
- …and 7 more small commits/fixups in this bucket
|
|
56
|
+
|
|
57
|
+
## PR38 — UI list primitives + pending UI polish
|
|
58
|
+
Status: completed (stack #03)
|
|
59
|
+
|
|
60
|
+
Changes/features/fixes (examples; 1 commits mapped):
|
|
61
|
+
- expo-app(ui): add list/pending primitives and polish
|
|
62
|
+
|
|
63
|
+
## PR03 — i18n foundation sweep (optional)
|
|
64
|
+
Status: deferred (stack #04)
|
|
65
|
+
|
|
66
|
+
Changes/features/fixes (examples; 4 commits mapped):
|
|
67
|
+
- refactor(i18n): separate translation types and content
|
|
68
|
+
- refactor(i18n): update translations and tooling
|
|
69
|
+
- refactor(i18n): replace remaining UI literals
|
|
70
|
+
- expo-app(i18n): add device locale helpers + update translations
|
|
71
|
+
|
|
72
|
+
## PR04 — Auth + storage scoping
|
|
73
|
+
Status: in_progress (stack #05)
|
|
74
|
+
|
|
75
|
+
Changes/features/fixes (examples; 5 commits mapped):
|
|
76
|
+
- fix(auth): harden tokenStorage web persistence
|
|
77
|
+
- feat(persistence): scope storage and validate draft modes
|
|
78
|
+
- fix(auth): surface auth failures and gate unauth routes
|
|
79
|
+
- fix(expo-app): avoid hooks order violation on redirect
|
|
80
|
+
- cli(auth): add --no-open to skip browser open
|
|
81
|
+
|
|
82
|
+
## PR05 — Persistence / drafts
|
|
83
|
+
Status: pending (stack #06)
|
|
84
|
+
|
|
85
|
+
Changes/features/fixes (examples; 1 commits mapped):
|
|
86
|
+
- docs(persistence): update profile schema version comment
|
|
87
|
+
|
|
88
|
+
## PR06 — Settings: API keys + experiments + settings screens
|
|
89
|
+
Status: pending (stack #07)
|
|
90
|
+
|
|
91
|
+
Changes/features/fixes (examples; 9 commits mapped):
|
|
92
|
+
- fix(settings): make parsing tolerant for profiles
|
|
93
|
+
- feat(settings): add api keys and experiment toggles
|
|
94
|
+
- feat(api-keys): add saved API keys UI
|
|
95
|
+
- feat(settings): expose per-experiment toggles
|
|
96
|
+
- feat(experiments): gate Zen, file viewer, and voice auth flow
|
|
97
|
+
- refactor(zen): avoid todo variable shadowing
|
|
98
|
+
- fix(i18n): localize session settings item
|
|
99
|
+
- fix(settings): include Codex resume in master experiment toggle
|
|
100
|
+
- fix(i18n): translate Spanish experiment subtitles
|
|
101
|
+
|
|
102
|
+
## PR07 — Env var templates + preview/resolution end-to-end
|
|
103
|
+
Status: pending (stack #08)
|
|
104
|
+
|
|
105
|
+
Changes/features/fixes (examples; 3 commits mapped):
|
|
106
|
+
- feat(env): add env var template parsing
|
|
107
|
+
- fix(env): improve remote env resolution and previews
|
|
108
|
+
- feat(env): update env var list, cards, and preview modal
|
|
109
|
+
|
|
110
|
+
## PR15 — preview-env end-to-end
|
|
111
|
+
Status: pending (stack #09)
|
|
112
|
+
|
|
113
|
+
Changes/features/fixes (examples; 3 commits mapped):
|
|
114
|
+
- feat(rpc): add preview-env handler
|
|
115
|
+
- test(cli): accept lowercase preview-env keys
|
|
116
|
+
- fix(cli): allow lowercase preview-env keys
|
|
117
|
+
|
|
118
|
+
## PR08 — Profiles feature
|
|
119
|
+
Status: pending (stack #10)
|
|
120
|
+
|
|
121
|
+
Changes/features/fixes (examples; 3 commits mapped):
|
|
122
|
+
- fix(profiles): harden routing, grouping, and editing
|
|
123
|
+
- feat(profiles): add API key requirements flow
|
|
124
|
+
- fix(profiles): align experimentsEnabled for built-in profiles
|
|
125
|
+
|
|
126
|
+
## PR09 — Secrets / vault
|
|
127
|
+
Status: pending (stack #11)
|
|
128
|
+
|
|
129
|
+
Changes/features/fixes (examples; 6 commits mapped):
|
|
130
|
+
- feat(sync): add secrets + terminal settings primitives
|
|
131
|
+
- feat(secrets): add secrets management + requirement resolver
|
|
132
|
+
- fix(secrets): tighten callback deps and fix indentation
|
|
133
|
+
- fix(settings): keep valid secrets when one entry is invalid
|
|
134
|
+
- fix(secrets): hide values when using secret vault
|
|
135
|
+
- expo-app(ui): add InlineAddExpander; inline add for secrets/env vars
|
|
136
|
+
|
|
137
|
+
## PR10 — Permission framework (Claude/cloud baseline)
|
|
138
|
+
Status: pending (stack #12)
|
|
139
|
+
|
|
140
|
+
Changes/features/fixes (examples; 10 commits mapped):
|
|
141
|
+
- feat(sync): add permission mode types and mapping
|
|
142
|
+
- fix(agent-input): cycle permission mode from normalized state
|
|
143
|
+
- fix(sync): restore session permission mode from last message
|
|
144
|
+
- fix(sync): persist permission mode timestamp for restart-safe arbitration
|
|
145
|
+
- fix(sync): persist permission mode reliably across devices
|
|
146
|
+
- fix(typecheck): restore permission imports and Popover web styles
|
|
147
|
+
- fix(claude): carry permission mode across remote/local switches
|
|
148
|
+
- fix(claude): publish permission mode in session metadata
|
|
149
|
+
- fix(permission): avoid no-op permissionModeUpdatedAt bumps
|
|
150
|
+
- feat(permission): add permission mode option helpers
|
|
151
|
+
|
|
152
|
+
## PR11 — Agent permissions (Codex/Gemini): permission modes + allowlists
|
|
153
|
+
Status: pending (stack #13)
|
|
154
|
+
|
|
155
|
+
Changes/features/fixes (examples; 3 commits mapped):
|
|
156
|
+
- fix(cli): publish permission mode for codex/gemini sessions
|
|
157
|
+
- fix(typecheck): resolve duplicate terminalRuntime and RPC handler types
|
|
158
|
+
- cli(permissions): persist per-session allowlists; harden shell approvals
|
|
159
|
+
|
|
160
|
+
## PR16 — Daemon reliability (ownership + reattach/restart safety)
|
|
161
|
+
Status: pending (stack #14)
|
|
162
|
+
|
|
163
|
+
Changes/features/fixes (examples; 17 commits mapped):
|
|
164
|
+
- fix(daemon): do not apply CLI active profile to GUI-spawned sessions
|
|
165
|
+
- feat(session): persist profileId in session metadata via daemon spawn
|
|
166
|
+
- fix(pr107): harden daemon spawn + align profile schema
|
|
167
|
+
- fix(security): redact spawn secrets from daemon logs
|
|
168
|
+
- refactor(profiles): remove unwired startup script and local env cache
|
|
169
|
+
- refactor(profiles): drop provider config objects
|
|
170
|
+
- feat(runtime): support bun for daemon-spawned subprocesses
|
|
171
|
+
- refactor(rpc): accept arbitrary env var maps for spawn
|
|
172
|
+
- refactor(persistence): remove deprecated tmuxConfig
|
|
173
|
+
- feat(daemon): support tmux spawn + harden runtime
|
|
174
|
+
- fix(daemon): reattach sessions after daemon restart
|
|
175
|
+
- test(daemon): add PID classification + session marker tests
|
|
176
|
+
- …and 5 more small commits/fixups in this bucket
|
|
177
|
+
|
|
178
|
+
## PR17 — CLI reliability (socket/metadata waiters + reconnection + backoff)
|
|
179
|
+
Status: pending (stack #15)
|
|
180
|
+
|
|
181
|
+
Changes/features/fixes (examples; 10 commits mapped):
|
|
182
|
+
- fix(socket): restore offline buffering for sends
|
|
183
|
+
- fix(logging): gate debug output and redact templates
|
|
184
|
+
- fix(pr107): redact profile secrets in doctor + align tmux tmpDir
|
|
185
|
+
- fix(env): implement default assignment semantics
|
|
186
|
+
- chore(cli): fix gemini daemon block indentation
|
|
187
|
+
- fix(rpc): add structured code for missing RPC methods
|
|
188
|
+
- test(utils): stabilize serverConnectionErrors retry count test
|
|
189
|
+
- test(utils): cover failuresCount with custom backoff
|
|
190
|
+
- fix(utils): track failuresCount for custom backoff
|
|
191
|
+
- fix(cli): clean up metadata waiters on disconnect
|
|
192
|
+
|
|
193
|
+
## PR27 — Sync robustness (transport/error parsing + backoff semantics)
|
|
194
|
+
Status: pending (stack #16)
|
|
195
|
+
|
|
196
|
+
Changes/features/fixes (examples; 6 commits mapped):
|
|
197
|
+
- refactor(sync): centralize outgoing message metadata
|
|
198
|
+
- perf(sync): debounce pending settings writes
|
|
199
|
+
- fix(sync): handle non-JSON 400 responses
|
|
200
|
+
- fix(sync): guard JSON parsing on disconnect errors
|
|
201
|
+
- test(sync): restore stubbed fetch between tests
|
|
202
|
+
- fix(sync): avoid hanging invalidateAndAwait on errors
|
|
203
|
+
|
|
204
|
+
## PR28 — Model modes (per-session selection + persistence)
|
|
205
|
+
Status: pending (stack #17)
|
|
206
|
+
|
|
207
|
+
Changes/features/fixes (examples; 2 commits mapped):
|
|
208
|
+
- fix(session): clamp configurable model modes
|
|
209
|
+
- feat(storage): persist session model modes
|
|
210
|
+
|
|
211
|
+
## PR14 — Capabilities end-to-end (protocol + wiring + reliability)
|
|
212
|
+
Status: pending (stack #18)
|
|
213
|
+
|
|
214
|
+
Changes/features/fixes (examples; 17 commits mapped):
|
|
215
|
+
- feat(cli-detection): add daemon detect-cli RPC support
|
|
216
|
+
- feat(machine): surface detected CLI status
|
|
217
|
+
- feat(rpc): add detect-cli handler
|
|
218
|
+
- feat(rpc): include tmux in detect-cli
|
|
219
|
+
- test(detect-cli): avoid process.env reassignment
|
|
220
|
+
- fix(common): handle execFileAsync exit codes
|
|
221
|
+
- fix(detect-cli): relax tmux version probe timeout
|
|
222
|
+
- refactor(cli): modularize capabilities and env preview
|
|
223
|
+
- test(ui): update useCLIDetection hook tests for capabilities
|
|
224
|
+
- fix(expo-app): avoid stuck loading in capabilities cache
|
|
225
|
+
- fix(happy-cli): parse CLI versions from full output
|
|
226
|
+
- test(happy): keep useCLIDetection timestamp stable
|
|
227
|
+
- …and 5 more small commits/fixups in this bucket
|
|
228
|
+
|
|
229
|
+
## PR37 — Agent registry end-to-end (selection + settings + UX helpers)
|
|
230
|
+
Status: pending (stack #19)
|
|
231
|
+
|
|
232
|
+
Changes/features/fixes (examples; 3 commits mapped):
|
|
233
|
+
- expo-app(agents): introduce agent registry + UI behavior helpers
|
|
234
|
+
- expo-app(settings): wire agent registry into settings
|
|
235
|
+
- expo-app(settings): update features toggles for agents/inbox/codex
|
|
236
|
+
|
|
237
|
+
## PR36 — ACP agents end-to-end (runtimes + replay + tool normalization)
|
|
238
|
+
Status: pending (stack #20)
|
|
239
|
+
|
|
240
|
+
Changes/features/fixes (examples; 5 commits mapped):
|
|
241
|
+
- cli(acp): support loadSession + replay capture; normalize tool events
|
|
242
|
+
- cli(agents): wire ACP agents into factory/transport registry
|
|
243
|
+
- cli(opencode): add OpenCode ACP agent runtime
|
|
244
|
+
- cli(codex-acp): add runtime + capability gating
|
|
245
|
+
- cli(entry): refactor agent subcommands and startup flags
|
|
246
|
+
|
|
247
|
+
## PR12 — Tool interaction: AskUserQuestion + ExitPlan native handling
|
|
248
|
+
Status: pending (stack #21)
|
|
249
|
+
|
|
250
|
+
Changes/features/fixes (examples; 10 commits mapped):
|
|
251
|
+
- feat(tools): add approve/reject buttons to ExitPlanMode
|
|
252
|
+
- fix(tools): support Windows arm64 tool unpacking
|
|
253
|
+
- Revert \"fix(tools): support Windows arm64 tool unpacking\"
|
|
254
|
+
- fix(ui): respond to plan/question tools via session RPC
|
|
255
|
+
- feat(cli): add interaction.respond for AskUserQuestion
|
|
256
|
+
- fix(i18n): translate ExitPlanMode strings
|
|
257
|
+
- fix(tools): require permission id for ExitPlanMode actions
|
|
258
|
+
- test(tools): avoid null permission in ExitPlanToolView tests
|
|
259
|
+
- fix(tools): alert when AskUserQuestion permission id is missing
|
|
260
|
+
- cli(claude): support AskUserQuestion answers + ExitPlanMode negotiation
|
|
261
|
+
|
|
262
|
+
## PR39 — Tool UX: normalization + specialized views + tracing
|
|
263
|
+
Status: pending (stack #22)
|
|
264
|
+
|
|
265
|
+
Changes/features/fixes (examples; 4 commits mapped):
|
|
266
|
+
- fix(tools): harden ACP tool parsing and titles
|
|
267
|
+
- cli(tool-trace): add fixture extraction + CLI script
|
|
268
|
+
- expo-app(tools): normalize tool inference + rendering inputs
|
|
269
|
+
- expo-app(tools): add specialized tool views + tests
|
|
270
|
+
|
|
271
|
+
## PR13 — MessageQueueV1 + Pending messages (end-to-end)
|
|
272
|
+
Status: pending (stack #23)
|
|
273
|
+
|
|
274
|
+
Changes/features/fixes (examples; 11 commits mapped):
|
|
275
|
+
- feat(queue): add pending message queue UI and send modes
|
|
276
|
+
- fix(sync): omit model meta for queued messages
|
|
277
|
+
- feat(queue): add server-side pending message pull support
|
|
278
|
+
- feat(cli): harden session queue, switching, and lifecycle
|
|
279
|
+
- feat(app): add pending queue, discard markers, and capabilities
|
|
280
|
+
- refactor(expo-app): remove dead code and dedupe types
|
|
281
|
+
- fix(ui): send pending messages before closing modal
|
|
282
|
+
- fix(cli): reject invalid messageQueueV1 inFlight
|
|
283
|
+
- refactor(queue): simplify stale in-flight reclaim
|
|
284
|
+
- fix(expo): harden tool submit and pending send
|
|
285
|
+
- cli(api): observe self-broadcasts for pending-queue; add tool tracing
|
|
286
|
+
|
|
287
|
+
## PR26 — New session wizard end-to-end (wizard + pick flows + machine selection)
|
|
288
|
+
Status: pending (stack #24)
|
|
289
|
+
|
|
290
|
+
Changes/features/fixes (examples; 10 commits mapped):
|
|
291
|
+
- fix(new-session): restore standard modal flow
|
|
292
|
+
- feat(new-session): add api key selection and wizard extraction
|
|
293
|
+
- refactor(new-session): integrate secrets + terminal spawn options
|
|
294
|
+
- fix(new): keep pick screens above iOS modal
|
|
295
|
+
- fix(new-session): avoid stuck secret requirement modal guard
|
|
296
|
+
- fix(expo-app): persist resumeSessionId and harden clipboard paste
|
|
297
|
+
- fix(i18n): localize Codex resume dialog
|
|
298
|
+
- fix(i18n): move openMachine to connect scope
|
|
299
|
+
- feat(new-session): add WizardSectionHeaderRow
|
|
300
|
+
- expo-app(secret-requirement): add picker route + modularized modal
|
|
301
|
+
|
|
302
|
+
## PR19 — Resume end-to-end (inactive resume + session lifecycle)
|
|
303
|
+
Status: pending (stack #25)
|
|
304
|
+
|
|
305
|
+
Changes/features/fixes (examples; 28 commits mapped):
|
|
306
|
+
- feat(resume): add resume session option for new sessions
|
|
307
|
+
- feat(resume): show resume chip under path in new session
|
|
308
|
+
- feat: resume inactive Claude sessions from UI
|
|
309
|
+
- refactor(resume): don't require agentSessionId from UI
|
|
310
|
+
- feat(fork): enable Codex resume support
|
|
311
|
+
- refactor(offline): make offline session stub safer
|
|
312
|
+
- fix(codex): disable model override and remove experimental resume
|
|
313
|
+
- fix(session): prime agent state for readiness
|
|
314
|
+
- feat: resume Claude sessions from UI
|
|
315
|
+
- feat(resume): add happy resume and persist vendor resume id
|
|
316
|
+
- feat(resume): allow resume-session without agentSessionId
|
|
317
|
+
- feat(fork): enable Codex inactive-session resume via codex-reply
|
|
318
|
+
- …and 16 more small commits/fixups in this bucket
|
|
319
|
+
|
|
320
|
+
## PR20 — Claude session reliability (switching + transcript/scanner + local runner)
|
|
321
|
+
Status: pending (stack #26)
|
|
322
|
+
|
|
323
|
+
Changes/features/fixes (examples; 10 commits mapped):
|
|
324
|
+
- test(claude): align sessionScanner path mapping
|
|
325
|
+
- fix(claude): use hook transcript path across switching
|
|
326
|
+
- fix(claude): support -c/-r and avoid session loss on switch
|
|
327
|
+
- fix(scanner): tolerate onMessage exceptions
|
|
328
|
+
- fix(claude): accept -c as continue flag
|
|
329
|
+
- fix: move claudeArgs to end of args array for slash command support
|
|
330
|
+
- fix(cli): improve abort error handling to reduce spurious error messages
|
|
331
|
+
- fix(claude): trim CLAUDE_CONFIG_DIR overrides
|
|
332
|
+
- test(claude): remove stale transcriptPath red-test scaffolding
|
|
333
|
+
- …and 1 more small commits/fixups in this bucket
|
|
334
|
+
|
|
335
|
+
## PR31 — Terminal switching reliability (remote↔local)
|
|
336
|
+
Status: pending (stack #27)
|
|
337
|
+
|
|
338
|
+
Changes/features/fixes (examples; 4 commits mapped):
|
|
339
|
+
- fix(terminal): harden remote→local switching input
|
|
340
|
+
- fix(claude): forward signals to binary child process
|
|
341
|
+
- Add signal forwarding to claudeLocal.ts
|
|
342
|
+
- fix(ink): avoid async useInput handler
|
|
343
|
+
|
|
344
|
+
## PR18 — TMUX end-to-end (headless sessions + attach + settings)
|
|
345
|
+
Status: pending (stack #28)
|
|
346
|
+
|
|
347
|
+
Changes/features/fixes (examples; 12 commits mapped):
|
|
348
|
+
- feat(terminal): add Terminal settings + tmux metadata
|
|
349
|
+
- fix: tmux parsing/targeting + review feedback
|
|
350
|
+
- feat(tmux): support per-instance socket path
|
|
351
|
+
- fix(tmux): correct env, tmpdir, and session selection
|
|
352
|
+
- feat(terminal): add tmux metadata + attach tooling
|
|
353
|
+
- fix(tmux): print attach instructions in correct order
|
|
354
|
+
- test(tmux): avoid brittle assertions
|
|
355
|
+
- refactor(app): rename tmux/message-send settings under session
|
|
356
|
+
- fix(terminal): prevent sessionId path traversal in attachment info
|
|
357
|
+
- fix(terminal): clarify missing --happy-starting-mode value
|
|
358
|
+
- test(cli): prevent legacy sessionId path traversal
|
|
359
|
+
- fix(cli): block legacy sessionId path traversal
|
|
360
|
+
|
|
361
|
+
## PR32 — Codex approvals + MCP tool interactions (execpolicy + elicitation)
|
|
362
|
+
Status: pending (stack #29)
|
|
363
|
+
|
|
364
|
+
Changes/features/fixes (examples; 7 commits mapped):
|
|
365
|
+
- feat: add execpolicy approval option for Codex
|
|
366
|
+
- feat(codex): support execpolicy approvals and MCP tool calls
|
|
367
|
+
- fix(i18n): add Codex execpolicy button text
|
|
368
|
+
- fix(reducer): keep permission messages idempotent
|
|
369
|
+
- fix: use runtime execPath for MCP bridge
|
|
370
|
+
- fix(codex): use mcp tool call id for approvals
|
|
371
|
+
- test(happy-cli): fix timer cleanup and MCP schema mocks
|
|
372
|
+
|
|
373
|
+
## PR21 — Codex MCP tool-call result correctness
|
|
374
|
+
Status: pending (stack #30)
|
|
375
|
+
|
|
376
|
+
Changes/features/fixes (examples; 3 commits mapped):
|
|
377
|
+
- fix(codex): harden MCP command detection
|
|
378
|
+
- test(codex): reset transport instances between tests
|
|
379
|
+
- fix(codex): preserve falsy MCP tool results
|
|
380
|
+
|
|
381
|
+
## PR33 — Codex special commands (/clear session reset)
|
|
382
|
+
Status: pending (stack #31)
|
|
383
|
+
|
|
384
|
+
Changes/features/fixes (examples; 1 commits mapped):
|
|
385
|
+
- feat: handle /clear command as session reset in codex
|
|
386
|
+
|
|
387
|
+
## PR30 — Agent error surfaces (Codex/Gemini)
|
|
388
|
+
Status: pending (stack #32)
|
|
389
|
+
|
|
390
|
+
Changes/features/fixes (examples; 4 commits mapped):
|
|
391
|
+
- feat(ui): surface Codex/Gemini errors in session UI
|
|
392
|
+
- fix(ui): polish Codex and Gemini error messages
|
|
393
|
+
- fix(gemini): normalize error details for UI
|
|
394
|
+
- refactor(happy-cli): remove unreachable gemini error branch
|
|
395
|
+
|
|
396
|
+
## PR29 — Sessions & message list UX
|
|
397
|
+
Status: pending (stack #33)
|
|
398
|
+
|
|
399
|
+
Changes/features/fixes (examples; 10 commits mapped):
|
|
400
|
+
- fix(session): archive when kill RPC unavailable
|
|
401
|
+
- Add copy-to-clipboard button to message blocks
|
|
402
|
+
- feat(sessions): group inactive sessions by project
|
|
403
|
+
- feat(sessions): add unread badge
|
|
404
|
+
- feat(session): add session rename support
|
|
405
|
+
- feat(sync): add cross-device unread markers
|
|
406
|
+
- fix(expo-app): avoid false homeDir prefix matches
|
|
407
|
+
- refactor(expo-app): remove unused optimistic flag
|
|
408
|
+
- fix(i18n): localize session error fallbacks
|
|
409
|
+
- refactor(sync): simplify path formatting
|
|
410
|
+
|
|
411
|
+
## PR35 — Friends: UX + reliability
|
|
412
|
+
Status: pending (stack #34)
|
|
413
|
+
|
|
414
|
+
Changes/features/fixes (examples; 2 commits mapped):
|
|
415
|
+
- fix(i18n): localize search error
|
|
416
|
+
- expo-app(experiments): add inbox friends experiment gate
|
|
417
|
+
|
|
418
|
+
## PR22 — Server-light flavor (variant + schema/prisma sync)
|
|
419
|
+
Status: pending (stack #35)
|
|
420
|
+
|
|
421
|
+
Changes/features/fixes (examples; 12 commits mapped):
|
|
422
|
+
- feat(server): add full/light flavors with sqlite migrations
|
|
423
|
+
- fix(server-light): validate PORT and normalize paths
|
|
424
|
+
- test(server): fix schema generation sort regex
|
|
425
|
+
- fix(server): make build typecheck tests
|
|
426
|
+
- fix(server-light): use file URLs for sqlite db
|
|
427
|
+
- fix(server): fix server-light typecheck
|
|
428
|
+
- fix(server): relax module settings for typecheck
|
|
429
|
+
- fix(server): keep light server running
|
|
430
|
+
- fix(server): validate HAPPY_SERVER_LIGHT_DATA_DIR for light migrations
|
|
431
|
+
- fix(server-light): avoid master secret race
|
|
432
|
+
- fix(server-light): harden public file path encoding
|
|
433
|
+
- Refactor schema sync and centralize Prisma types
|
|
434
|
+
|
|
435
|
+
## PR23 — Server: optionally serve UI + public files safely
|
|
436
|
+
Status: pending (stack #36)
|
|
437
|
+
|
|
438
|
+
Changes/features/fixes (examples; 3 commits mapped):
|
|
439
|
+
- fix(server): handle missing UI index.html
|
|
440
|
+
- test(server): validate processImage resize output
|
|
441
|
+
- fix(server): handle missing UI index in error handlers
|
|
442
|
+
|
|
443
|
+
## PR24 — Storage: S3 env + bucket validation
|
|
444
|
+
Status: pending (stack #37)
|
|
445
|
+
|
|
446
|
+
Changes/features/fixes (examples; 1 commits mapped):
|
|
447
|
+
- fix(storage): validate S3_PORT and bucket existence
|
|
448
|
+
|