happy-stacks 0.3.0 → 0.5.0

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 (165) hide show
  1. package/README.md +93 -40
  2. package/bin/happys.mjs +158 -16
  3. package/docs/codex-mcp-resume.md +130 -0
  4. package/docs/commit-audits/happy/leeroy-wip.commit-analysis.md +17640 -0
  5. package/docs/commit-audits/happy/leeroy-wip.commit-export.fuller-stat.md +3845 -0
  6. package/docs/commit-audits/happy/leeroy-wip.commit-inventory.md +102 -0
  7. package/docs/commit-audits/happy/leeroy-wip.commit-manual-review.md +1452 -0
  8. package/docs/commit-audits/happy/leeroy-wip.manual-review-queue.md +116 -0
  9. package/docs/happy-development.md +3 -4
  10. package/docs/isolated-linux-vm.md +82 -0
  11. package/docs/mobile-ios.md +112 -54
  12. package/docs/monorepo-migration.md +286 -0
  13. package/docs/server-flavors.md +19 -3
  14. package/docs/stacks.md +35 -0
  15. package/package.json +5 -1
  16. package/scripts/auth.mjs +32 -10
  17. package/scripts/build.mjs +55 -8
  18. package/scripts/daemon.mjs +166 -10
  19. package/scripts/dev.mjs +198 -50
  20. package/scripts/doctor.mjs +0 -4
  21. package/scripts/edison.mjs +6 -4
  22. package/scripts/env.mjs +150 -0
  23. package/scripts/env_cmd.test.mjs +128 -0
  24. package/scripts/init.mjs +8 -3
  25. package/scripts/install.mjs +207 -69
  26. package/scripts/lint.mjs +24 -4
  27. package/scripts/migrate.mjs +3 -12
  28. package/scripts/mobile.mjs +88 -104
  29. package/scripts/mobile_dev_client.mjs +83 -0
  30. package/scripts/monorepo.mjs +1096 -0
  31. package/scripts/monorepo_port.test.mjs +1470 -0
  32. package/scripts/provision/linux-ubuntu-review-pr.sh +51 -0
  33. package/scripts/review.mjs +908 -0
  34. package/scripts/review_pr.mjs +353 -0
  35. package/scripts/run.mjs +101 -21
  36. package/scripts/service.mjs +2 -2
  37. package/scripts/setup.mjs +189 -68
  38. package/scripts/setup_pr.mjs +586 -38
  39. package/scripts/stack.mjs +990 -196
  40. package/scripts/stack_archive_cmd.test.mjs +91 -0
  41. package/scripts/stack_editor_workspace_monorepo_root.test.mjs +65 -0
  42. package/scripts/stack_env_cmd.test.mjs +87 -0
  43. package/scripts/stack_happy_cmd.test.mjs +126 -0
  44. package/scripts/stack_interactive_monorepo_group.test.mjs +71 -0
  45. package/scripts/stack_monorepo_defaults.test.mjs +62 -0
  46. package/scripts/stack_monorepo_server_light_from_happy_spec.test.mjs +66 -0
  47. package/scripts/stack_server_flavors_defaults.test.mjs +55 -0
  48. package/scripts/stack_shorthand_cmd.test.mjs +55 -0
  49. package/scripts/stack_wt_list.test.mjs +128 -0
  50. package/scripts/tailscale.mjs +37 -1
  51. package/scripts/test.mjs +45 -8
  52. package/scripts/tui.mjs +395 -39
  53. package/scripts/typecheck.mjs +24 -4
  54. package/scripts/utils/auth/daemon_gate.mjs +55 -0
  55. package/scripts/utils/auth/daemon_gate.test.mjs +37 -0
  56. package/scripts/utils/auth/guided_pr_auth.mjs +79 -0
  57. package/scripts/utils/auth/guided_stack_web_login.mjs +75 -0
  58. package/scripts/utils/auth/interactive_stack_auth.mjs +72 -0
  59. package/scripts/utils/auth/login_ux.mjs +32 -13
  60. package/scripts/utils/auth/sources.mjs +26 -0
  61. package/scripts/utils/auth/stack_guided_login.mjs +353 -0
  62. package/scripts/utils/cli/cli_registry.mjs +43 -4
  63. package/scripts/utils/cli/cwd_scope.mjs +136 -0
  64. package/scripts/utils/cli/cwd_scope.test.mjs +110 -0
  65. package/scripts/utils/cli/log_forwarder.mjs +157 -0
  66. package/scripts/utils/cli/prereqs.mjs +75 -0
  67. package/scripts/utils/cli/prereqs.test.mjs +34 -0
  68. package/scripts/utils/cli/progress.mjs +126 -0
  69. package/scripts/utils/cli/verbosity.mjs +12 -0
  70. package/scripts/utils/cli/wizard.mjs +17 -9
  71. package/scripts/utils/cli/wizard_prompt_worktree_source_lazy.test.mjs +60 -0
  72. package/scripts/utils/dev/daemon.mjs +61 -4
  73. package/scripts/utils/dev/expo_dev.mjs +430 -0
  74. package/scripts/utils/dev/expo_dev.test.mjs +76 -0
  75. package/scripts/utils/dev/server.mjs +36 -42
  76. package/scripts/utils/dev_auth_key.mjs +169 -0
  77. package/scripts/utils/edison/git_roots.mjs +29 -0
  78. package/scripts/utils/edison/git_roots.test.mjs +36 -0
  79. package/scripts/utils/env/env.mjs +7 -3
  80. package/scripts/utils/env/env_file.mjs +4 -2
  81. package/scripts/utils/env/env_file.test.mjs +44 -0
  82. package/scripts/utils/expo/command.mjs +52 -0
  83. package/scripts/utils/expo/expo.mjs +20 -1
  84. package/scripts/utils/expo/metro_ports.mjs +114 -0
  85. package/scripts/utils/git/git.mjs +67 -0
  86. package/scripts/utils/git/worktrees.mjs +80 -25
  87. package/scripts/utils/git/worktrees_monorepo.test.mjs +54 -0
  88. package/scripts/utils/handy_master_secret.mjs +94 -0
  89. package/scripts/utils/mobile/config.mjs +31 -0
  90. package/scripts/utils/mobile/dev_client_links.mjs +60 -0
  91. package/scripts/utils/mobile/identifiers.mjs +47 -0
  92. package/scripts/utils/mobile/identifiers.test.mjs +42 -0
  93. package/scripts/utils/mobile/ios_xcodeproj_patch.mjs +128 -0
  94. package/scripts/utils/mobile/ios_xcodeproj_patch.test.mjs +98 -0
  95. package/scripts/utils/net/lan_ip.mjs +24 -0
  96. package/scripts/utils/net/ports.mjs +9 -1
  97. package/scripts/utils/net/tcp_forward.mjs +162 -0
  98. package/scripts/utils/net/url.mjs +30 -0
  99. package/scripts/utils/net/url.test.mjs +20 -0
  100. package/scripts/utils/paths/localhost_host.mjs +50 -3
  101. package/scripts/utils/paths/paths.mjs +159 -40
  102. package/scripts/utils/paths/paths_monorepo.test.mjs +58 -0
  103. package/scripts/utils/paths/paths_server_flavors.test.mjs +45 -0
  104. package/scripts/utils/proc/commands.mjs +2 -3
  105. package/scripts/utils/proc/parallel.mjs +25 -0
  106. package/scripts/utils/proc/pm.mjs +176 -22
  107. package/scripts/utils/proc/pm_spawn.test.mjs +76 -0
  108. package/scripts/utils/proc/pm_stack_cache_env.test.mjs +142 -0
  109. package/scripts/utils/proc/proc.mjs +136 -4
  110. package/scripts/utils/proc/proc.test.mjs +77 -0
  111. package/scripts/utils/review/base_ref.mjs +74 -0
  112. package/scripts/utils/review/base_ref.test.mjs +54 -0
  113. package/scripts/utils/review/chunks.mjs +55 -0
  114. package/scripts/utils/review/chunks.test.mjs +51 -0
  115. package/scripts/utils/review/findings.mjs +165 -0
  116. package/scripts/utils/review/findings.test.mjs +85 -0
  117. package/scripts/utils/review/head_slice.mjs +153 -0
  118. package/scripts/utils/review/head_slice.test.mjs +91 -0
  119. package/scripts/utils/review/instructions/deep.md +20 -0
  120. package/scripts/utils/review/runners/coderabbit.mjs +61 -0
  121. package/scripts/utils/review/runners/coderabbit.test.mjs +59 -0
  122. package/scripts/utils/review/runners/codex.mjs +61 -0
  123. package/scripts/utils/review/runners/codex.test.mjs +35 -0
  124. package/scripts/utils/review/slices.mjs +140 -0
  125. package/scripts/utils/review/slices.test.mjs +32 -0
  126. package/scripts/utils/review/targets.mjs +24 -0
  127. package/scripts/utils/review/targets.test.mjs +36 -0
  128. package/scripts/utils/sandbox/review_pr_sandbox.mjs +106 -0
  129. package/scripts/utils/server/flavor_scripts.mjs +98 -0
  130. package/scripts/utils/server/flavor_scripts.test.mjs +146 -0
  131. package/scripts/utils/server/mobile_api_url.mjs +61 -0
  132. package/scripts/utils/server/mobile_api_url.test.mjs +41 -0
  133. package/scripts/utils/server/prisma_import.mjs +37 -0
  134. package/scripts/utils/server/prisma_import.test.mjs +70 -0
  135. package/scripts/utils/server/ui_env.mjs +14 -0
  136. package/scripts/utils/server/ui_env.test.mjs +46 -0
  137. package/scripts/utils/server/urls.mjs +14 -4
  138. package/scripts/utils/server/validate.mjs +53 -16
  139. package/scripts/utils/server/validate.test.mjs +89 -0
  140. package/scripts/utils/service/autostart_darwin.mjs +42 -2
  141. package/scripts/utils/service/autostart_darwin.test.mjs +50 -0
  142. package/scripts/utils/stack/context.mjs +2 -2
  143. package/scripts/utils/stack/editor_workspace.mjs +6 -6
  144. package/scripts/utils/stack/interactive_stack_config.mjs +185 -0
  145. package/scripts/utils/stack/pr_stack_name.mjs +16 -0
  146. package/scripts/utils/stack/runtime_state.mjs +2 -1
  147. package/scripts/utils/stack/startup.mjs +120 -13
  148. package/scripts/utils/stack/startup_server_light_dirs.test.mjs +64 -0
  149. package/scripts/utils/stack/startup_server_light_generate.test.mjs +70 -0
  150. package/scripts/utils/stack/startup_server_light_legacy.test.mjs +88 -0
  151. package/scripts/utils/stack/stop.mjs +15 -4
  152. package/scripts/utils/stack_context.mjs +23 -0
  153. package/scripts/utils/stack_runtime_state.mjs +104 -0
  154. package/scripts/utils/stacks.mjs +38 -0
  155. package/scripts/utils/tailscale/ip.mjs +116 -0
  156. package/scripts/utils/ui/ansi.mjs +39 -0
  157. package/scripts/utils/ui/qr.mjs +17 -0
  158. package/scripts/utils/validate.mjs +88 -0
  159. package/scripts/where.mjs +2 -2
  160. package/scripts/worktrees.mjs +755 -179
  161. package/scripts/worktrees_archive_cmd.test.mjs +245 -0
  162. package/scripts/worktrees_cursor_monorepo_root.test.mjs +63 -0
  163. package/scripts/worktrees_list_specs_no_recurse.test.mjs +33 -0
  164. package/scripts/worktrees_monorepo_use_group.test.mjs +67 -0
  165. package/scripts/utils/dev/expo_web.mjs +0 -112
@@ -0,0 +1,3845 @@
1
+ # leeroy-wip commit export (full message + stats)
2
+
3
+ Generated: 2026-01-24
4
+ Worktree: /Users/leeroy/Documents/Development/happy-local/components/.worktrees/happy/slopus/tmp/leeroy-wip
5
+ Range: upstream/main..leeroy-wip
6
+
7
+ Command:
8
+ ```bash
9
+ happys wt git happy slopus/tmp/leeroy-wip -- log --reverse --date=short --pretty=fuller --name-status --stat upstream/main..HEAD
10
+ ```
11
+
12
+ Output:
13
+ ```text
14
+ commit 58528a7c37d3a4eea2874dbe1258c2626b88cd5e
15
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
16
+ AuthorDate: 2026-01-17
17
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
18
+ CommitDate: 2026-01-22
19
+
20
+ chore(crypto): patch react-native-libsodium
21
+
22
+ A expo-app/patches/@more-tech+react-native-libsodium+1.5.5.patch
23
+
24
+ commit 552b8da0f62129749a8dd96bc7cfba125e51c1f6
25
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
26
+ AuthorDate: 2026-01-17
27
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
28
+ CommitDate: 2026-01-22
29
+
30
+ test(deps): add @types/react-test-renderer
31
+
32
+ M expo-app/package.json
33
+ M expo-app/yarn.lock
34
+
35
+ commit 017b15c07ad75413718d9e734b8f40f2ce738ce7
36
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
37
+ AuthorDate: 2026-01-17
38
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
39
+ CommitDate: 2026-01-22
40
+
41
+ chore(config): harden app variant defaults
42
+
43
+ M expo-app/app.config.js
44
+
45
+ commit 4890a471df312191ae325d5691b61231097df078
46
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
47
+ AuthorDate: 2026-01-17
48
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
49
+ CommitDate: 2026-01-22
50
+
51
+ fix(auth): harden tokenStorage web persistence
52
+
53
+ A expo-app/sources/auth/tokenStorage.test.ts
54
+ M expo-app/sources/auth/tokenStorage.ts
55
+
56
+ commit 4adc41d92af05c1028bb6b7b81239a6279d13c29
57
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
58
+ AuthorDate: 2026-01-17
59
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
60
+ CommitDate: 2026-01-22
61
+
62
+ feat(sync): add permission mode types and mapping
63
+
64
+ A expo-app/sources/sync/permissionMapping.test.ts
65
+ A expo-app/sources/sync/permissionMapping.ts
66
+ A expo-app/sources/sync/permissionTypes.test.ts
67
+ A expo-app/sources/sync/permissionTypes.ts
68
+
69
+ commit a5fbc3e8ba00ba0f41b9af18ca0c6296414f5533
70
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
71
+ AuthorDate: 2026-01-17
72
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
73
+ CommitDate: 2026-01-22
74
+
75
+ feat(persistence): scope storage and validate draft modes
76
+
77
+ A expo-app/sources/sync/persistence.test.ts
78
+ M expo-app/sources/sync/persistence.ts
79
+ A expo-app/sources/utils/storageScope.test.ts
80
+ A expo-app/sources/utils/storageScope.ts
81
+
82
+ commit 18e77c46f38a2d336fb4e05d50aec3f4dcad5edd
83
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
84
+ AuthorDate: 2026-01-17
85
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
86
+ CommitDate: 2026-01-22
87
+
88
+ fix(session): clamp configurable model modes
89
+
90
+ M expo-app/sources/-session/SessionView.tsx
91
+
92
+ commit f7bb8a28fff741703bf1238ec039197272703dce
93
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
94
+ AuthorDate: 2026-01-17
95
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
96
+ CommitDate: 2026-01-22
97
+
98
+ fix(tools): harden ACP tool parsing and titles
99
+
100
+ M expo-app/sources/components/tools/knownTools.tsx
101
+ M expo-app/sources/components/tools/views/GeminiExecuteView.tsx
102
+ M expo-app/sources/sync/typesRaw.spec.ts
103
+ M expo-app/sources/sync/typesRaw.ts
104
+
105
+ commit 292424245277951fc1aa80149407b720b72db9ad
106
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
107
+ AuthorDate: 2026-01-17
108
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
109
+ CommitDate: 2026-01-22
110
+
111
+ refactor(sync): centralize outgoing message metadata
112
+
113
+ A expo-app/sources/sync/messageMeta.test.ts
114
+ A expo-app/sources/sync/messageMeta.ts
115
+ M expo-app/sources/sync/sync.ts
116
+
117
+ commit 39cc25154cddcfc43ed1c25dc4d126bd9d0137cd
118
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
119
+ AuthorDate: 2026-01-17
120
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
121
+ CommitDate: 2026-01-22
122
+
123
+ feat(storage): persist session model modes
124
+
125
+ M expo-app/sources/sync/serverConfig.ts
126
+ M expo-app/sources/sync/storage.ts
127
+
128
+ commit c2d3507357dc7ef150105ff56468ec2f580943f6
129
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
130
+ AuthorDate: 2026-01-17
131
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
132
+ CommitDate: 2026-01-22
133
+
134
+ fix(settings): make parsing tolerant for profiles
135
+
136
+ M expo-app/sources/sync/settings.spec.ts
137
+ M expo-app/sources/sync/settings.ts
138
+ M expo-app/sources/sync/sync.ts
139
+
140
+ commit 207ef1b2f57207ad67a08256a11b40863e9fba76
141
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
142
+ AuthorDate: 2026-01-17
143
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
144
+ CommitDate: 2026-01-22
145
+
146
+ fix(dev): gate CLI detection logging
147
+
148
+ M expo-app/sources/hooks/useCLIDetection.ts
149
+ M expo-app/sources/realtime/RealtimeVoiceSession.tsx
150
+ M expo-app/sources/realtime/RealtimeVoiceSession.web.tsx
151
+
152
+ commit 58a892d413d17670aa459491ca3e4c60024d894f
153
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
154
+ AuthorDate: 2026-01-17
155
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
156
+ CommitDate: 2026-01-22
157
+
158
+ fix(command-palette): include navigate dependency
159
+
160
+ M expo-app/sources/components/CommandPalette/CommandPaletteProvider.tsx
161
+
162
+ commit 41479b35415f4c4a725e7dc8887dccd78c1d38cd
163
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
164
+ AuthorDate: 2026-01-17
165
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
166
+ CommitDate: 2026-01-22
167
+
168
+ feat(env): add env var template parsing
169
+
170
+ M expo-app/sources/hooks/envVarUtils.ts
171
+ A expo-app/sources/utils/envVarTemplate.test.ts
172
+ A expo-app/sources/utils/envVarTemplate.ts
173
+
174
+ commit 695bcd09eb9e67184daa24e0815c895c4af6612d
175
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
176
+ AuthorDate: 2026-01-17
177
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
178
+ CommitDate: 2026-01-22
179
+
180
+ fix(env): improve remote env resolution and previews
181
+
182
+ M expo-app/sources/hooks/useEnvironmentVariables.test.ts
183
+ M expo-app/sources/hooks/useEnvironmentVariables.ts
184
+ M expo-app/sources/sync/ops.ts
185
+ M expo-app/sources/sync/settings.ts
186
+
187
+ commit 6cdb90a49aad04fbae4958cbcdf1fa57b2eda0b1
188
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
189
+ AuthorDate: 2026-01-17
190
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
191
+ CommitDate: 2026-01-22
192
+
193
+ feat(env): update env var list, cards, and preview modal
194
+
195
+ A expo-app/sources/components/EnvironmentVariableCard.test.ts
196
+ M expo-app/sources/components/EnvironmentVariableCard.tsx
197
+ A expo-app/sources/components/EnvironmentVariablesList.test.ts
198
+ M expo-app/sources/components/EnvironmentVariablesList.tsx
199
+ A expo-app/sources/components/newSession/EnvironmentVariablesPreviewModal.tsx
200
+ A expo-app/sources/components/newSession/ProfileCompatibilityIcon.tsx
201
+
202
+ commit 65bae55a0b61c4af5cd084945577a271a0c6cd9a
203
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
204
+ AuthorDate: 2026-01-17
205
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
206
+ CommitDate: 2026-01-22
207
+
208
+ refactor(i18n): separate translation types and content
209
+
210
+ M expo-app/sources/text/README.md
211
+ D expo-app/sources/text/_default.ts
212
+ A expo-app/sources/text/_types.ts
213
+ M expo-app/sources/text/index.ts
214
+ M expo-app/sources/text/translations/ca.ts
215
+ M expo-app/sources/text/translations/en.ts
216
+ M expo-app/sources/text/translations/es.ts
217
+ M expo-app/sources/text/translations/it.ts
218
+ M expo-app/sources/text/translations/ja.ts
219
+ M expo-app/sources/text/translations/pl.ts
220
+ M expo-app/sources/text/translations/pt.ts
221
+ M expo-app/sources/text/translations/ru.ts
222
+ M expo-app/sources/text/translations/zh-Hans.ts
223
+ M expo-app/sources/theme.css
224
+
225
+ commit 2993b5c860ffe5165867095b7ae5f5440f0a935c
226
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
227
+ AuthorDate: 2026-01-17
228
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
229
+ CommitDate: 2026-01-22
230
+
231
+ fix(new-session): restore standard modal flow
232
+
233
+ A expo-app/sources/__tests__/app/new/pick/path.test.ts
234
+ M expo-app/sources/app/(app)/_layout.tsx
235
+ M expo-app/sources/app/(app)/machine/[id].tsx
236
+ M expo-app/sources/app/(app)/new/index.tsx
237
+ M expo-app/sources/app/(app)/new/pick/machine.tsx
238
+ M expo-app/sources/app/(app)/new/pick/path.tsx
239
+ M expo-app/sources/app/(app)/new/pick/profile-edit.tsx
240
+ A expo-app/sources/app/(app)/new/pick/profile.tsx
241
+ M expo-app/sources/app/(app)/settings/features.tsx
242
+ M expo-app/sources/components/AgentInput.tsx
243
+ M expo-app/sources/components/SessionTypeSelector.tsx
244
+ A expo-app/sources/components/newSession/MachineSelector.tsx
245
+ A expo-app/sources/components/newSession/PathSelector.tsx
246
+ M expo-app/sources/components/newSession/ProfileCompatibilityIcon.tsx
247
+ A expo-app/sources/sync/modelOptions.ts
248
+ A expo-app/sources/utils/recentMachines.ts
249
+ A expo-app/sources/utils/recentPaths.ts
250
+
251
+ commit 9e08047d24789583f061743482c55ac30e591b28
252
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
253
+ AuthorDate: 2026-01-17
254
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
255
+ CommitDate: 2026-01-22
256
+
257
+ fix(profiles): harden routing, grouping, and editing
258
+
259
+ M expo-app/sources/app/(app)/session/[id]/info.tsx
260
+ M expo-app/sources/app/(app)/settings/profiles.tsx
261
+ M expo-app/sources/components/ProfileEditForm.tsx
262
+ M expo-app/sources/components/SettingsView.tsx
263
+ A expo-app/sources/components/profileActions.ts
264
+ A expo-app/sources/profileRouteParams.test.ts
265
+ A expo-app/sources/profileRouteParams.ts
266
+ A expo-app/sources/sync/profileGrouping.test.ts
267
+ A expo-app/sources/sync/profileGrouping.ts
268
+ A expo-app/sources/sync/profileMutations.ts
269
+ A expo-app/sources/sync/profileUtils.test.ts
270
+ M expo-app/sources/sync/profileUtils.ts
271
+ M expo-app/sources/sync/storageTypes.ts
272
+
273
+ commit 8d9f56e85e5a0abf2a7bdd9eec48c172dad5c110
274
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
275
+ AuthorDate: 2026-01-17
276
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
277
+ CommitDate: 2026-01-22
278
+
279
+ refactor(ui): unify list selectors and modal primitives
280
+
281
+ M expo-app/CONTRIBUTING.md
282
+ M expo-app/sources/app/(app)/settings/voice/language.tsx
283
+ M expo-app/sources/components/AgentInput.tsx
284
+ M expo-app/sources/components/Item.tsx
285
+ A expo-app/sources/components/ItemActionsMenuModal.tsx
286
+ A expo-app/sources/components/ItemGroup.dividers.test.ts
287
+ A expo-app/sources/components/ItemGroup.dividers.ts
288
+ A expo-app/sources/components/ItemGroup.selectableCount.test.ts
289
+ A expo-app/sources/components/ItemGroup.selectableCount.ts
290
+ M expo-app/sources/components/ItemGroup.tsx
291
+ A expo-app/sources/components/ItemRowActions.tsx
292
+ D expo-app/sources/components/NewSessionWizard.tsx
293
+ D expo-app/sources/components/PermissionModeSelector.tsx
294
+ A expo-app/sources/components/SearchHeader.tsx
295
+ M expo-app/sources/components/SearchableListSelector.tsx
296
+ A expo-app/sources/components/Switch.web.tsx
297
+ M expo-app/sources/modal/ModalManager.ts
298
+ M expo-app/sources/modal/components/BaseModal.tsx
299
+ M expo-app/sources/modal/components/CustomModal.tsx
300
+ M expo-app/sources/modal/components/WebAlertModal.tsx
301
+ M expo-app/sources/modal/types.ts
302
+ D expo-app/sources/sync/profileSync.ts
303
+ M expo-app/sources/sync/reducer/phase0-skipping.spec.ts
304
+ M expo-app/sources/theme.ts
305
+ A expo-app/sources/utils/ignoreNextRowPress.test.ts
306
+ A expo-app/sources/utils/ignoreNextRowPress.ts
307
+ A expo-app/sources/utils/promptUnsavedChangesAlert.test.ts
308
+ A expo-app/sources/utils/promptUnsavedChangesAlert.ts
309
+
310
+ commit 2ab560bb0535df6c77cd14b314748566e46732b4
311
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
312
+ AuthorDate: 2026-01-17
313
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
314
+ CommitDate: 2026-01-22
315
+
316
+ feat(cli-detection): add daemon detect-cli RPC support
317
+
318
+ M expo-app/sources/hooks/useCLIDetection.ts
319
+ M expo-app/sources/sync/ops.ts
320
+
321
+ commit 2d4675a5d051d623b18ca85f284e74c21197237d
322
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
323
+ AuthorDate: 2026-01-17
324
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
325
+ CommitDate: 2026-01-22
326
+
327
+ fix(agent-input): use compact permission badges
328
+
329
+ M expo-app/sources/components/AgentInput.tsx
330
+
331
+ commit d97924f3ef398638746919a3fee3675b0a12cee6
332
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
333
+ AuthorDate: 2026-01-18
334
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
335
+ CommitDate: 2026-01-22
336
+
337
+ chore(test): define __DEV__ for vitest
338
+
339
+ M expo-app/vitest.config.ts
340
+
341
+ commit 9c19baa833b91a7ac16bef710c18a19134e02ac2
342
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
343
+ AuthorDate: 2026-01-18
344
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
345
+ CommitDate: 2026-01-22
346
+
347
+ feat(settings): add api keys and experiment toggles
348
+
349
+ M expo-app/sources/profileRouteParams.ts
350
+ M expo-app/sources/sync/persistence.ts
351
+ M expo-app/sources/sync/settings.spec.ts
352
+ M expo-app/sources/sync/settings.ts
353
+
354
+ commit 21cc6df79f5099a3c72d264531999a5f46ee3956
355
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
356
+ AuthorDate: 2026-01-18
357
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
358
+ CommitDate: 2026-01-22
359
+
360
+ feat(api-keys): add saved API keys UI
361
+
362
+ A expo-app/sources/app/(app)/new/pick/api-key.tsx
363
+ A expo-app/sources/app/(app)/settings/api-keys.tsx
364
+ A expo-app/sources/components/ApiKeyAddModal.tsx
365
+ M expo-app/sources/components/SettingsView.tsx
366
+ A expo-app/sources/components/apiKeys/ApiKeysList.tsx
367
+
368
+ commit ce9cd74d408afdfaa0453123e4ad69bf03239cbb
369
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
370
+ AuthorDate: 2026-01-18
371
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
372
+ CommitDate: 2026-01-22
373
+
374
+ feat(machine): surface detected CLI status
375
+
376
+ M expo-app/sources/app/(app)/machine/[id].tsx
377
+ M expo-app/sources/components/SearchableListSelector.tsx
378
+ A expo-app/sources/components/machine/DetectedClisList.tsx
379
+ A expo-app/sources/components/machine/DetectedClisModal.tsx
380
+ A expo-app/sources/components/newSession/MachineCliGlyphs.tsx
381
+ M expo-app/sources/components/newSession/MachineSelector.tsx
382
+ M expo-app/sources/hooks/useCLIDetection.ts
383
+ A expo-app/sources/hooks/useMachineDetectCliCache.ts
384
+ M expo-app/sources/sync/ops.ts
385
+
386
+ commit 7899bbd8433ebc5a0ba9d97e00ef6cc11c88614c
387
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
388
+ AuthorDate: 2026-01-18
389
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
390
+ CommitDate: 2026-01-22
391
+
392
+ feat(profiles): add API key requirements flow
393
+
394
+ M expo-app/sources/app/(app)/settings/profiles.tsx
395
+ A expo-app/sources/components/ApiKeyRequirementModal.tsx
396
+ A expo-app/sources/components/OptionTiles.tsx
397
+ M expo-app/sources/components/ProfileEditForm.tsx
398
+ A expo-app/sources/components/ProfileRequirementsBadge.tsx
399
+ A expo-app/sources/components/profiles/ProfilesList.tsx
400
+ A expo-app/sources/components/profiles/profileListModel.test.ts
401
+ A expo-app/sources/components/profiles/profileListModel.ts
402
+ A expo-app/sources/hooks/useProfileEnvRequirements.ts
403
+ A expo-app/sources/sync/profileSecrets.ts
404
+ M expo-app/sources/sync/profileUtils.ts
405
+
406
+ commit 0023ba1ea5aa2a824b450e8b95812e30f5e6907e
407
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
408
+ AuthorDate: 2026-01-18
409
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
410
+ CommitDate: 2026-01-22
411
+
412
+ refactor(i18n): update translations and tooling
413
+
414
+ M expo-app/sources/scripts/compareTranslations.ts
415
+ A expo-app/sources/scripts/findUntranslatedLiterals.ts
416
+ M expo-app/sources/text/translations/ca.ts
417
+ M expo-app/sources/text/translations/en.ts
418
+ M expo-app/sources/text/translations/es.ts
419
+ M expo-app/sources/text/translations/it.ts
420
+ M expo-app/sources/text/translations/ja.ts
421
+ M expo-app/sources/text/translations/pl.ts
422
+ M expo-app/sources/text/translations/pt.ts
423
+ M expo-app/sources/text/translations/ru.ts
424
+ M expo-app/sources/text/translations/zh-Hans.ts
425
+
426
+ commit 12e75a3b36fa49aa4d91cedd8464e8afcb65e2a8
427
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
428
+ AuthorDate: 2026-01-18
429
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
430
+ CommitDate: 2026-01-22
431
+
432
+ fix(autocomplete): remove debug suggestion logs
433
+
434
+ M expo-app/sources/components/autocomplete/useActiveSuggestions.ts
435
+
436
+ commit 679877c26ea9b3a3eb250a60c8c425ce2aee7f84
437
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
438
+ AuthorDate: 2026-01-18
439
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
440
+ CommitDate: 2026-01-22
441
+
442
+ feat(settings): expose per-experiment toggles
443
+
444
+ M expo-app/sources/app/(app)/settings/features.tsx
445
+
446
+ commit 4dc9c7f8759c1f5f1713167ca0888b87463084b3
447
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
448
+ AuthorDate: 2026-01-18
449
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
450
+ CommitDate: 2026-01-22
451
+
452
+ feat(agent-input): add configurable action bar layout
453
+
454
+ M expo-app/sources/app/(app)/settings/appearance.tsx
455
+ M expo-app/sources/components/AgentInput.tsx
456
+
457
+ commit e8e42a6087add8e0c3713980c9497c59e34a3fa9
458
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
459
+ AuthorDate: 2026-01-18
460
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
461
+ CommitDate: 2026-01-22
462
+
463
+ fix(modal): prevent stacked modal touch-blocking on iOS
464
+
465
+ M expo-app/sources/app/(app)/_layout.tsx
466
+ M expo-app/sources/modal/ModalManager.ts
467
+ M expo-app/sources/modal/components/BaseModal.tsx
468
+ M expo-app/sources/modal/components/CustomModal.tsx
469
+ M expo-app/sources/modal/types.ts
470
+
471
+ commit daa0b4527d7fb9b2108c9fef395e835fea32caa2
472
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
473
+ AuthorDate: 2026-01-18
474
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
475
+ CommitDate: 2026-01-22
476
+
477
+ feat(new-session): add api key selection and wizard extraction
478
+
479
+ A expo-app/sources/app/(app)/new/NewSessionWizard.tsx
480
+ M expo-app/sources/app/(app)/new/index.tsx
481
+ M expo-app/sources/app/(app)/new/pick/profile.tsx
482
+ M expo-app/sources/components/newSession/ProfileCompatibilityIcon.tsx
483
+
484
+ commit 94814465bf81386c381971cd23b58b83874e5a15
485
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
486
+ AuthorDate: 2026-01-18
487
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
488
+ CommitDate: 2026-01-22
489
+
490
+ perf(sync): debounce pending settings writes
491
+
492
+ M expo-app/sources/sync/sync.ts
493
+
494
+ commit 7ffd0c3428cbbceb7df39396142100da8fd4841d
495
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
496
+ AuthorDate: 2026-01-18
497
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
498
+ CommitDate: 2026-01-22
499
+
500
+ fix(ui): localize error alerts
501
+
502
+ M expo-app/sources/hooks/useHappyAction.ts
503
+
504
+ commit 97ca69e0a735156301f1943a870e4220ed82296e
505
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
506
+ AuthorDate: 2026-01-18
507
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
508
+ CommitDate: 2026-01-22
509
+
510
+ refactor(i18n): replace remaining UI literals
511
+
512
+ M expo-app/sources/app/(app)/artifacts/[id].tsx
513
+ M expo-app/sources/app/(app)/restore/index.tsx
514
+ M expo-app/sources/app/(app)/restore/manual.tsx
515
+ M expo-app/sources/app/(app)/session/[id]/info.tsx
516
+ M expo-app/sources/app/(app)/settings/connect/claude.tsx
517
+ M expo-app/sources/components/ChatFooter.tsx
518
+ M expo-app/sources/components/CommandPalette/CommandPaletteResults.tsx
519
+ M expo-app/sources/components/CommandView.tsx
520
+ M expo-app/sources/components/ConnectButton.tsx
521
+ M expo-app/sources/components/EmptyMainScreen.tsx
522
+ M expo-app/sources/components/EmptyMessages.tsx
523
+ M expo-app/sources/components/EmptySessionsTablet.tsx
524
+ M expo-app/sources/components/MessageView.tsx
525
+ M expo-app/sources/components/OAuthView.tsx
526
+ M expo-app/sources/components/VoiceAssistantStatusBar.tsx
527
+ M expo-app/sources/components/markdown/MarkdownView.tsx
528
+ M expo-app/sources/components/markdown/MermaidRenderer.tsx
529
+ M expo-app/sources/components/usage/UsageChart.tsx
530
+ M expo-app/sources/utils/microphonePermissions.ts
531
+
532
+ commit 5f5b57df5181fdb2879d44c72e1d41b871c0e5ff
533
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
534
+ AuthorDate: 2026-01-18
535
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
536
+ CommitDate: 2026-01-22
537
+
538
+ refactor(ui): improve item rendering and action menu timing
539
+
540
+ M expo-app/sources/components/Item.tsx
541
+ M expo-app/sources/components/ItemActionsMenuModal.tsx
542
+ M expo-app/sources/components/ItemGroup.tsx
543
+ M expo-app/sources/components/ItemRowActions.tsx
544
+ M expo-app/sources/components/SessionsList.tsx
545
+
546
+ commit 7976b877259cac770f41537f44fa70e54df721a2
547
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
548
+ AuthorDate: 2026-01-18
549
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
550
+ CommitDate: 2026-01-22
551
+
552
+ feat(experiments): gate Zen, file viewer, and voice auth flow
553
+
554
+ M expo-app/sources/-session/SessionView.tsx
555
+ M expo-app/sources/-zen/ZenAdd.tsx
556
+ M expo-app/sources/-zen/ZenHome.tsx
557
+ M expo-app/sources/-zen/ZenView.tsx
558
+ M expo-app/sources/-zen/components/ZenHeader.tsx
559
+ M expo-app/sources/components/SidebarView.tsx
560
+ M expo-app/sources/realtime/RealtimeSession.ts
561
+
562
+ commit 6ed379f82c3497512316f23d15b2c2a0556a160e
563
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
564
+ AuthorDate: 2026-01-21
565
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
566
+ CommitDate: 2026-01-22
567
+
568
+ refactor(ui): add modal + popover overlay primitives
569
+
570
+ - Introduce shared web/native modal stacking primitives (Radix Dialog on web; app modal host on native).
571
+
572
+ - Add Popover + portal/spotlight infrastructure (OverlayPortal, ModalPortalTarget, ScrollEdgeFades) to prevent clipped menus and focus/scroll issues.
573
+
574
+ - Refactor Command Palette/item actions to use new overlay plumbing and remove legacy modal wrappers.
575
+
576
+ - Add targeted tests for modal provider/manager, BaseModal, Popover portal behavior, and overlay positioning.
577
+
578
+ A expo-app/sources/components/ActionListSection.tsx
579
+ A expo-app/sources/components/AgentInput.autocomplete.test.ts
580
+ M expo-app/sources/components/AgentInput.tsx
581
+ M expo-app/sources/components/AgentInputAutocomplete.tsx
582
+ M expo-app/sources/components/CommandPalette/CommandPalette.tsx
583
+ M expo-app/sources/components/CommandPalette/CommandPaletteInput.tsx
584
+ M expo-app/sources/components/CommandPalette/CommandPaletteItem.tsx
585
+ D expo-app/sources/components/CommandPalette/CommandPaletteModal.tsx
586
+ A expo-app/sources/components/ConnectionStatusControl.tsx
587
+ A expo-app/sources/components/FloatingOverlay.arrow.test.ts
588
+ M expo-app/sources/components/FloatingOverlay.tsx
589
+ M expo-app/sources/components/Item.tsx
590
+ D expo-app/sources/components/ItemActionsMenuModal.tsx
591
+ M expo-app/sources/components/ItemGroup.tsx
592
+ M expo-app/sources/components/ItemRowActions.tsx
593
+ A expo-app/sources/components/ModalPortalTarget.tsx
594
+ A expo-app/sources/components/OverlayPortal.tsx
595
+ A expo-app/sources/components/Popover.nativePortal.test.ts
596
+ A expo-app/sources/components/Popover.test.ts
597
+ A expo-app/sources/components/Popover.tsx
598
+ A expo-app/sources/components/PopoverBoundary.tsx
599
+ A expo-app/sources/components/ScrollEdgeFades.tsx
600
+ A expo-app/sources/components/ScrollEdgeIndicators.tsx
601
+ A expo-app/sources/components/SelectableRow.tsx
602
+ A expo-app/sources/components/dropdown/DropdownMenu.tsx
603
+ A expo-app/sources/components/dropdown/SelectableMenuResults.tsx
604
+ A expo-app/sources/components/dropdown/selectableMenuTypes.ts
605
+ A expo-app/sources/components/dropdown/useSelectableMenu.ts
606
+ A expo-app/sources/components/itemActions/types.ts
607
+ A expo-app/sources/components/useScrollEdgeFades.ts
608
+ A expo-app/sources/dev/reactNativeStub.ts
609
+ A expo-app/sources/modal/ModalManager.test.ts
610
+ M expo-app/sources/modal/ModalManager.ts
611
+ A expo-app/sources/modal/ModalProvider.test.ts
612
+ M expo-app/sources/modal/ModalProvider.tsx
613
+ A expo-app/sources/modal/components/BaseModal.test.ts
614
+ M expo-app/sources/modal/components/BaseModal.tsx
615
+ M expo-app/sources/modal/components/CustomModal.tsx
616
+ M expo-app/sources/modal/components/WebAlertModal.tsx
617
+ M expo-app/sources/modal/components/WebPromptModal.tsx
618
+ A expo-app/sources/utils/radixCjs.ts
619
+ A expo-app/sources/utils/reactDomCjs.ts
620
+ M expo-app/vitest.config.ts
621
+
622
+ commit f0787de5308e51a4898087bad56b83d387196116
623
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
624
+ AuthorDate: 2026-01-21
625
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
626
+ CommitDate: 2026-01-22
627
+
628
+ feat(sync): add secrets + terminal settings primitives
629
+
630
+ - Add encrypted-at-rest SecretString plumbing and saved secrets/settings schemas (no plaintext persisted).
631
+
632
+ - Introduce terminal/tmux settings types and helpers (global + per-machine overrides) plus spawn payload utilities.
633
+
634
+ - Add platform crypto shims for vitest/node and extend sync + encryption utilities to support these flows.
635
+
636
+ - Add focused tests for secret sealing/decryption, secret satisfaction, spawn payload construction, terminal settings resolution, and detect-cli response parsing.
637
+
638
+ M expo-app/sources/encryption/aes.appspec.ts
639
+ M expo-app/sources/encryption/base64.appspec.ts
640
+ M expo-app/sources/encryption/hmac_sha512.ts
641
+ M expo-app/sources/encryption/libsodium.ts
642
+ A expo-app/sources/platform/cryptoRandom.node.ts
643
+ A expo-app/sources/platform/cryptoRandom.ts
644
+ A expo-app/sources/platform/digest.node.ts
645
+ A expo-app/sources/platform/digest.ts
646
+ A expo-app/sources/platform/hmacSha512.node.ts
647
+ A expo-app/sources/platform/hmacSha512.ts
648
+ A expo-app/sources/platform/randomUUID.node.ts
649
+ A expo-app/sources/platform/randomUUID.ts
650
+ M expo-app/sources/profileRouteParams.ts
651
+ M expo-app/sources/sync/apiArtifacts.ts
652
+ M expo-app/sources/sync/apiFeed.ts
653
+ M expo-app/sources/sync/apiFriends.ts
654
+ M expo-app/sources/sync/apiGithub.ts
655
+ M expo-app/sources/sync/apiKv.ts
656
+ M expo-app/sources/sync/apiPush.ts
657
+ M expo-app/sources/sync/apiServices.ts
658
+ M expo-app/sources/sync/apiSocket.ts
659
+ M expo-app/sources/sync/apiUsage.ts
660
+ A expo-app/sources/sync/debugSettings.ts
661
+ A expo-app/sources/sync/detectCliResponse.test.ts
662
+ A expo-app/sources/sync/detectCliResponse.ts
663
+ M expo-app/sources/sync/encryption/artifactEncryption.ts
664
+ M expo-app/sources/sync/encryption/encryption.ts
665
+ M expo-app/sources/sync/encryption/encryptor.appspec.ts
666
+ A expo-app/sources/sync/ops.spawnSessionPayload.test.ts
667
+ M expo-app/sources/sync/ops.ts
668
+ M expo-app/sources/sync/persistence.test.ts
669
+ M expo-app/sources/sync/persistence.ts
670
+ M expo-app/sources/sync/profileGrouping.test.ts
671
+ M expo-app/sources/sync/profileMutations.ts
672
+ M expo-app/sources/sync/profileSecrets.ts
673
+ M expo-app/sources/sync/profileUtils.ts
674
+ M expo-app/sources/sync/reducer/reducer.spec.ts
675
+ M expo-app/sources/sync/reducer/reducer.ts
676
+ A expo-app/sources/sync/secretBindings.test.ts
677
+ A expo-app/sources/sync/secretBindings.ts
678
+ A expo-app/sources/sync/secretSettings.test.ts
679
+ A expo-app/sources/sync/secretSettings.ts
680
+ M expo-app/sources/sync/settings.spec.ts
681
+ M expo-app/sources/sync/settings.ts
682
+ A expo-app/sources/sync/spawnSessionPayload.ts
683
+ M expo-app/sources/sync/storage.ts
684
+ A expo-app/sources/sync/storageTypes.terminal.test.ts
685
+ M expo-app/sources/sync/storageTypes.ts
686
+ M expo-app/sources/sync/sync.ts
687
+ A expo-app/sources/sync/terminalSettings.spec.ts
688
+ A expo-app/sources/sync/terminalSettings.ts
689
+ M expo-app/sources/utils/errors.ts
690
+ M expo-app/sources/utils/oauth.ts
691
+ A expo-app/sources/utils/secretSatisfaction.test.ts
692
+ A expo-app/sources/utils/secretSatisfaction.ts
693
+ M expo-app/sources/utils/sync.ts
694
+ M expo-app/sources/utils/tempDataStore.ts
695
+ A expo-app/sources/utils/terminalSessionDetails.test.ts
696
+ A expo-app/sources/utils/terminalSessionDetails.ts
697
+ M expo-app/sources/utils/time.ts
698
+
699
+ commit 66ee1eaf88a68f1cfb742958ff06521f9a83cf97
700
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
701
+ AuthorDate: 2026-01-21
702
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
703
+ CommitDate: 2026-01-22
704
+
705
+ feat(secrets): add secrets management + requirement resolver
706
+
707
+ - Replace legacy API key settings with encrypted-at-rest Secrets (saved secrets + session-only entry).
708
+
709
+ - Add SecretRequirementModal flow (use machine env / select saved / enter once) and improve profile requirements UX.
710
+
711
+ - Update env-var UI to handle sensitive/forced-sensitive values and improve disclosure controls.
712
+
713
+ - Extend i18n + theme tokens for the new secrets and requirements UI.
714
+
715
+ M expo-app/sources/app/(app)/settings/features.tsx
716
+ M expo-app/sources/app/(app)/settings/profiles.tsx
717
+ R055 expo-app/sources/app/(app)/settings/api-keys.tsx expo-app/sources/app/(app)/settings/secrets.tsx
718
+ D expo-app/sources/components/ApiKeyRequirementModal.tsx
719
+ M expo-app/sources/components/EnvironmentVariableCard.tsx
720
+ M expo-app/sources/components/EnvironmentVariablesList.test.ts
721
+ M expo-app/sources/components/EnvironmentVariablesList.tsx
722
+ M expo-app/sources/components/ProfileEditForm.tsx
723
+ M expo-app/sources/components/ProfileRequirementsBadge.tsx
724
+ A expo-app/sources/components/SecretRequirementModal.tsx
725
+ M expo-app/sources/components/profileActions.ts
726
+ M expo-app/sources/components/profiles/ProfilesList.tsx
727
+ A expo-app/sources/components/profiles/profileDisplay.ts
728
+ R092 expo-app/sources/components/ApiKeyAddModal.tsx expo-app/sources/components/secrets/SecretAddModal.tsx
729
+ R060 expo-app/sources/components/apiKeys/ApiKeysList.tsx expo-app/sources/components/secrets/SecretsList.tsx
730
+ A expo-app/sources/hooks/useEnvironmentVariables.hook.test.ts
731
+ M expo-app/sources/hooks/useEnvironmentVariables.ts
732
+ A expo-app/sources/hooks/useMachineEnvPresence.ts
733
+ M expo-app/sources/hooks/useProfileEnvRequirements.ts
734
+ M expo-app/sources/text/translations/ca.ts
735
+ M expo-app/sources/text/translations/en.ts
736
+ M expo-app/sources/text/translations/es.ts
737
+ M expo-app/sources/text/translations/it.ts
738
+ M expo-app/sources/text/translations/ja.ts
739
+ M expo-app/sources/text/translations/pl.ts
740
+ M expo-app/sources/text/translations/pt.ts
741
+ M expo-app/sources/text/translations/ru.ts
742
+ M expo-app/sources/text/translations/zh-Hans.ts
743
+ M expo-app/sources/theme.ts
744
+
745
+ commit bdaf6913141f58774c1b2b2aeca4ace3e8633531
746
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
747
+ AuthorDate: 2026-01-21
748
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
749
+ CommitDate: 2026-01-22
750
+
751
+ feat(terminal): add Terminal settings + tmux metadata
752
+
753
+ - Add Terminal settings screen with tmux options (session name, isolated server, tmp dir) and keep /settings/tmux as a backward-compatible alias.
754
+
755
+ - Update Settings entry to Terminal and show enabled/disabled subtitle based on terminalUseTmux.
756
+
757
+ - Extend CLI detection hook to include tmux availability and display it on machine details.
758
+
759
+ - Surface tmux attach target + fallback reason in session details for debugging/resume workflows.
760
+
761
+ M expo-app/sources/app/(app)/machine/[id].tsx
762
+ M expo-app/sources/app/(app)/session/[id]/info.tsx
763
+ A expo-app/sources/app/(app)/settings/terminal.tsx
764
+ A expo-app/sources/app/(app)/settings/tmux.tsx
765
+ M expo-app/sources/components/SettingsView.tsx
766
+ M expo-app/sources/components/machine/DetectedClisList.tsx
767
+ A expo-app/sources/hooks/useCLIDetection.hook.test.ts
768
+ M expo-app/sources/hooks/useCLIDetection.ts
769
+
770
+ commit bc779e4f7909eeeb1725b5352860d024961a0dba
771
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
772
+ AuthorDate: 2026-01-21
773
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
774
+ CommitDate: 2026-01-22
775
+
776
+ refactor(new-session): integrate secrets + terminal spawn options
777
+
778
+ - Wire secret requirement resolution into the new session wizard (saved secrets, machine env, and session-only values).
779
+
780
+ - Use centralized terminal spawn option resolution for tmux requests and surface tmux-not-detected banners during machine selection.
781
+
782
+ - Update supporting screens/components (new session pickers, sidebar/main view, auth prompts) to match the new flows.
783
+
784
+ M expo-app/sources/-zen/model/ops.ts
785
+ M expo-app/sources/app/(app)/dev/messages-demo-data.ts
786
+ M expo-app/sources/app/(app)/dev/todo-demo.tsx
787
+ M expo-app/sources/app/(app)/friends/search.tsx
788
+ M expo-app/sources/app/(app)/index.tsx
789
+ M expo-app/sources/app/(app)/new/NewSessionWizard.tsx
790
+ M expo-app/sources/app/(app)/new/index.tsx
791
+ M expo-app/sources/app/(app)/new/pick/machine.tsx
792
+ M expo-app/sources/app/(app)/new/pick/profile-edit.tsx
793
+ M expo-app/sources/app/(app)/new/pick/profile.tsx
794
+ R058 expo-app/sources/app/(app)/new/pick/api-key.tsx expo-app/sources/app/(app)/new/pick/secret.tsx
795
+ M expo-app/sources/auth/authChallenge.ts
796
+ M expo-app/sources/auth/authQRStart.ts
797
+ M expo-app/sources/components/MainView.tsx
798
+ M expo-app/sources/components/OptionTiles.tsx
799
+ M expo-app/sources/components/SidebarView.tsx
800
+ M expo-app/sources/hooks/useSearch.ts
801
+
802
+ commit cb11d4bdb25a6423f156dd0f9b859b5fbf603857
803
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
804
+ AuthorDate: 2026-01-21
805
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
806
+ CommitDate: 2026-01-22
807
+
808
+ docs: add AGENTS.md symlink + update CLAUDE.md
809
+
810
+ - Keep agent guidance single-sourced by symlinking AGENTS.md -> CLAUDE.md.
811
+
812
+ - Update CLAUDE.md to reflect current test runner and document modal/popover + settings/secret invariants.
813
+
814
+ A expo-app/AGENTS.md
815
+ M expo-app/CLAUDE.md
816
+
817
+ commit 1bc3b971577664fc1f3d1f84a490c8054358c230
818
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
819
+ AuthorDate: 2026-01-21
820
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
821
+ CommitDate: 2026-01-22
822
+
823
+ fix(sync): handle non-JSON 400 responses
824
+
825
+ A expo-app/sources/sync/apiGithub.test.ts
826
+ M expo-app/sources/sync/apiGithub.ts
827
+
828
+ commit ea2e4d19d63370180f5558093ab3df1b9fb2f75b
829
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
830
+ AuthorDate: 2026-01-21
831
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
832
+ CommitDate: 2026-01-22
833
+
834
+ chore(deps): align react-test-renderer with react
835
+
836
+ M expo-app/package.json
837
+ M expo-app/yarn.lock
838
+
839
+ commit dd041d21ecfc38b571011972a08b8532e5fe499f
840
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
841
+ AuthorDate: 2026-01-21
842
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
843
+ CommitDate: 2026-01-22
844
+
845
+ fix(sync): guard JSON parsing on disconnect errors
846
+
847
+ M expo-app/sources/sync/apiGithub.test.ts
848
+ M expo-app/sources/sync/apiGithub.ts
849
+ A expo-app/sources/sync/apiServices.test.ts
850
+ M expo-app/sources/sync/apiServices.ts
851
+
852
+ commit 395da4ff31674675c93d443626d50d3baa3f99ed
853
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
854
+ AuthorDate: 2026-01-21
855
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
856
+ CommitDate: 2026-01-22
857
+
858
+ refactor(zen): avoid todo variable shadowing
859
+
860
+ M expo-app/sources/-zen/ZenHome.tsx
861
+
862
+ commit 2e956f32f2200c1eb8199efc51ce1b443bf20e81
863
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
864
+ AuthorDate: 2026-01-21
865
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
866
+ CommitDate: 2026-01-22
867
+
868
+ fix(new): keep pick screens above iOS modal
869
+
870
+ A expo-app/sources/__tests__/app/new/pick/machine.presentation.test.ts
871
+ A expo-app/sources/__tests__/app/new/pick/path.presentation.test.ts
872
+ A expo-app/sources/__tests__/app/new/pick/profile-edit.headerButtons.test.ts
873
+ A expo-app/sources/__tests__/app/new/pick/profile.presentation.test.ts
874
+ A expo-app/sources/__tests__/app/new/pick/secret.presentation.test.ts
875
+ A expo-app/sources/__tests__/app/settings/profiles.nativeNavigation.test.ts
876
+ M expo-app/sources/app/(app)/_layout.tsx
877
+ M expo-app/sources/app/(app)/new/pick/machine.tsx
878
+ M expo-app/sources/app/(app)/new/pick/path.tsx
879
+ M expo-app/sources/app/(app)/new/pick/profile-edit.tsx
880
+ M expo-app/sources/app/(app)/new/pick/profile.tsx
881
+ M expo-app/sources/app/(app)/new/pick/secret.tsx
882
+ M expo-app/sources/app/(app)/settings/profiles.tsx
883
+
884
+ commit 2da2f9349ec5f50932cd3c2834c7b6c2fd0db16f
885
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
886
+ AuthorDate: 2026-01-21
887
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
888
+ CommitDate: 2026-01-22
889
+
890
+ fix(popover): allow web fixed positioning types
891
+
892
+ M expo-app/sources/components/Popover.tsx
893
+
894
+ commit 43f23f2f082e149eb2d5d29b43b5c7461eaa5e40
895
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
896
+ AuthorDate: 2026-01-21
897
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
898
+ CommitDate: 2026-01-22
899
+
900
+ chore(format): replace stray tabs with spaces
901
+
902
+ M expo-app/sources/components/SearchHeader.tsx
903
+ M expo-app/sources/sync/settings.spec.ts
904
+
905
+ commit e1d55fdbd9ee31fb9bb80ce1a65643bef5890d44
906
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
907
+ AuthorDate: 2026-01-21
908
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
909
+ CommitDate: 2026-01-22
910
+
911
+ fix(i18n): improve untranslated literal scan parsing
912
+
913
+ M expo-app/sources/scripts/findUntranslatedLiterals.ts
914
+
915
+ commit c210c111559885f1206dc836e7c13c9e1cf2bd45
916
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
917
+ AuthorDate: 2026-01-21
918
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
919
+ CommitDate: 2026-01-22
920
+
921
+ test(sync): restore stubbed fetch between tests
922
+
923
+ M expo-app/sources/sync/apiGithub.test.ts
924
+
925
+ commit 66c6784513355e763d09dcfc530c09348c1c3a70
926
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
927
+ AuthorDate: 2026-01-21
928
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
929
+ CommitDate: 2026-01-22
930
+
931
+ fix(ui): apply small review fixes
932
+
933
+ M expo-app/sources/-session/SessionView.tsx
934
+ M expo-app/sources/app/(app)/new/pick/machine.tsx
935
+ M expo-app/sources/app/(app)/settings/terminal.tsx
936
+ M expo-app/sources/components/ConnectionStatusControl.tsx
937
+ M expo-app/sources/components/OptionTiles.tsx
938
+ M expo-app/sources/components/SettingsView.tsx
939
+ M expo-app/sources/components/dropdown/DropdownMenu.tsx
940
+ M expo-app/sources/utils/sync.ts
941
+
942
+ commit 2472b376775cf1ba60b0af98e7abcda7299defba
943
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
944
+ AuthorDate: 2026-01-21
945
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
946
+ CommitDate: 2026-01-22
947
+
948
+ test(modal): make backdrop z-index assertion safer
949
+
950
+ M expo-app/sources/modal/ModalProvider.test.ts
951
+
952
+ commit 02450d179aaf75c109ab7b7a387bf1bfc93c2805
953
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
954
+ AuthorDate: 2026-01-21
955
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
956
+ CommitDate: 2026-01-22
957
+
958
+ fix(profiles): align experimentsEnabled for built-in profiles
959
+
960
+ M expo-app/sources/components/profiles/ProfilesList.tsx
961
+
962
+ commit ff7bec72358f73e2cc5e0e816317e688d31aaabf
963
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
964
+ AuthorDate: 2026-01-21
965
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
966
+ CommitDate: 2026-01-22
967
+
968
+ fix(secrets): tighten callback deps and fix indentation
969
+
970
+ M expo-app/sources/components/secrets/SecretsList.tsx
971
+
972
+ commit 1bb65f5dd494e7d8d14533d6623dd2cdbabd0283
973
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
974
+ AuthorDate: 2026-01-21
975
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
976
+ CommitDate: 2026-01-22
977
+
978
+ fix(new-session): avoid stuck secret requirement modal guard
979
+
980
+ M expo-app/sources/app/(app)/new/index.tsx
981
+
982
+ commit f7f81497444d9547c9e077e3ad45c41a3293c2a2
983
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
984
+ AuthorDate: 2026-01-21
985
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
986
+ CommitDate: 2026-01-22
987
+
988
+ fix(modal): prevent non-dismissible WebAlertModal
989
+
990
+ M expo-app/sources/__tests__/app/new/pick/machine.presentation.test.ts
991
+ A expo-app/sources/components/ConnectionStatusControl.popover.test.ts
992
+ M expo-app/sources/components/ConnectionStatusControl.tsx
993
+ M expo-app/sources/components/Popover.test.ts
994
+ M expo-app/sources/components/Popover.tsx
995
+ M expo-app/sources/modal/components/WebAlertModal.tsx
996
+
997
+ commit bb09f91de71568e402517d526a2f068f01cc555d
998
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
999
+ AuthorDate: 2026-01-22
1000
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
1001
+ CommitDate: 2026-01-22
1002
+
1003
+ fix(settings): keep valid secrets when one entry is invalid
1004
+
1005
+ M expo-app/sources/sync/settings.spec.ts
1006
+ M expo-app/sources/sync/settings.ts
1007
+
1008
+ commit 765423af52b457cf6ca83ae52cf10301568f4a9c
1009
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
1010
+ AuthorDate: 2026-01-22
1011
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
1012
+ CommitDate: 2026-01-22
1013
+
1014
+ fix(agent-input): cycle permission mode from normalized state
1015
+
1016
+ M expo-app/sources/components/AgentInput.tsx
1017
+ M expo-app/sources/sync/permissionTypes.test.ts
1018
+ M expo-app/sources/sync/permissionTypes.ts
1019
+
1020
+ commit e533db1813a54a9f6901b133b10e6d848e091ac3
1021
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
1022
+ AuthorDate: 2026-01-22
1023
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
1024
+ CommitDate: 2026-01-22
1025
+
1026
+ fix(popover): add screens cjs helper and fix fixed positioning types
1027
+
1028
+ M expo-app/sources/components/Popover.tsx
1029
+ A expo-app/sources/utils/reactNativeScreensCjs.ts
1030
+
1031
+ commit 2ed3100311c722a476844f6c6cbcc6a3cb0d920f
1032
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
1033
+ AuthorDate: 2026-01-22
1034
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
1035
+ CommitDate: 2026-01-22
1036
+
1037
+ fix(secrets): hide values when using secret vault
1038
+
1039
+ M expo-app/sources/components/EnvironmentVariableCard.tsx
1040
+ M expo-app/sources/text/translations/ca.ts
1041
+ M expo-app/sources/text/translations/en.ts
1042
+ M expo-app/sources/text/translations/es.ts
1043
+ M expo-app/sources/text/translations/it.ts
1044
+ M expo-app/sources/text/translations/ja.ts
1045
+ M expo-app/sources/text/translations/pl.ts
1046
+ M expo-app/sources/text/translations/pt.ts
1047
+ M expo-app/sources/text/translations/ru.ts
1048
+ M expo-app/sources/text/translations/zh-Hans.ts
1049
+
1050
+ commit e5848c4805226e1c460df58717b182d25f06d504
1051
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
1052
+ AuthorDate: 2026-01-22
1053
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
1054
+ CommitDate: 2026-01-22
1055
+
1056
+ fix(ui): harden overlays and permission cycling
1057
+
1058
+ M expo-app/sources/app/(app)/new/NewSessionWizard.tsx
1059
+ M expo-app/sources/components/AgentInput.tsx
1060
+ A expo-app/sources/components/ItemRowActions.test.ts
1061
+ M expo-app/sources/components/ItemRowActions.tsx
1062
+ A expo-app/sources/components/OverlayPortal.test.ts
1063
+ M expo-app/sources/components/Popover.nativePortal.test.ts
1064
+
1065
+ commit 69fdcff96a4c7f21982cbc64ebe6a47222b9d685
1066
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
1067
+ AuthorDate: 2026-01-13
1068
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
1069
+ CommitDate: 2026-01-22
1070
+
1071
+ fix(sync): restore session permission mode from last message
1072
+
1073
+ M expo-app/sources/sync/storage.ts
1074
+ M expo-app/sources/sync/storageTypes.ts
1075
+
1076
+ commit 9b499c5dccce7aa7762f13dece9b259183949b9d
1077
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
1078
+ AuthorDate: 2026-01-13
1079
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
1080
+ CommitDate: 2026-01-22
1081
+
1082
+ fix(sync): persist permission mode timestamp for restart-safe arbitration
1083
+
1084
+ M expo-app/sources/sync/persistence.ts
1085
+ M expo-app/sources/sync/storage.ts
1086
+
1087
+ commit def8852509d0163a36ed4363770ebd52877338bd
1088
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
1089
+ AuthorDate: 2026-01-13
1090
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
1091
+ CommitDate: 2026-01-22
1092
+
1093
+ fix(sync): persist permission mode reliably across devices
1094
+
1095
+ M expo-app/sources/-session/SessionView.tsx
1096
+ A expo-app/sources/constants/PermissionModes.ts
1097
+ M expo-app/sources/sync/apiSocket.ts
1098
+ M expo-app/sources/sync/persistence.ts
1099
+ M expo-app/sources/sync/settings.ts
1100
+ M expo-app/sources/sync/storage.ts
1101
+ M expo-app/sources/sync/storageTypes.ts
1102
+ M expo-app/sources/sync/sync.ts
1103
+ A expo-app/sources/sync/time.ts
1104
+ M expo-app/sources/sync/typesMessageMeta.ts
1105
+ M expo-app/sources/sync/typesRaw.ts
1106
+
1107
+ commit b1c8a6fecd0142b90bb4056797735eb9201cd53a
1108
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
1109
+ AuthorDate: 2026-01-12
1110
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
1111
+ CommitDate: 2026-01-22
1112
+
1113
+ fix(session): archive when kill RPC unavailable
1114
+
1115
+ M expo-app/sources/app/(app)/session/[id]/info.tsx
1116
+ M expo-app/sources/components/ActiveSessionsGroup.tsx
1117
+ M expo-app/sources/components/ActiveSessionsGroupCompact.tsx
1118
+ M expo-app/sources/sync/ops.ts
1119
+
1120
+ commit c06b6202b5d490d71adc5bda9c9f739eceaa1e8c
1121
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
1122
+ AuthorDate: 2026-01-06
1123
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
1124
+ CommitDate: 2026-01-22
1125
+
1126
+ Add copy-to-clipboard button to message blocks
1127
+
1128
+ Introduces a CopyMessageButton component to allow users to copy message text from user and agent message blocks. Includes visual feedback on copy and error handling, with related styles added for the new button.
1129
+
1130
+ M expo-app/sources/components/MessageView.tsx
1131
+
1132
+ commit 9fc7d3d412b9ffcfb7fc9db08c05199ece6f5d75
1133
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
1134
+ AuthorDate: 2026-01-21
1135
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
1136
+ CommitDate: 2026-01-22
1137
+
1138
+ feat(sessions): group inactive sessions by project
1139
+
1140
+ M expo-app/sources/app/(app)/settings/features.tsx
1141
+ M expo-app/sources/components/SessionsList.tsx
1142
+ A expo-app/sources/sync/sessionListViewData.test.ts
1143
+ A expo-app/sources/sync/sessionListViewData.ts
1144
+ M expo-app/sources/sync/settings.spec.ts
1145
+ M expo-app/sources/sync/settings.ts
1146
+ M expo-app/sources/sync/storage.ts
1147
+ M expo-app/sources/text/translations/ca.ts
1148
+ M expo-app/sources/text/translations/en.ts
1149
+ M expo-app/sources/text/translations/es.ts
1150
+ M expo-app/sources/text/translations/it.ts
1151
+ M expo-app/sources/text/translations/ja.ts
1152
+ M expo-app/sources/text/translations/pl.ts
1153
+ M expo-app/sources/text/translations/pt.ts
1154
+ M expo-app/sources/text/translations/ru.ts
1155
+ M expo-app/sources/text/translations/zh-Hans.ts
1156
+
1157
+ commit 62a8b1b07c3e66627718735d2737d2435e1fd22f
1158
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
1159
+ AuthorDate: 2026-01-21
1160
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
1161
+ CommitDate: 2026-01-22
1162
+
1163
+ feat(sessions): add unread badge
1164
+
1165
+ M expo-app/sources/-session/SessionView.tsx
1166
+ M expo-app/sources/components/ActiveSessionsGroup.tsx
1167
+ M expo-app/sources/components/ActiveSessionsGroupCompact.tsx
1168
+ M expo-app/sources/components/Avatar.tsx
1169
+ M expo-app/sources/components/SessionsList.tsx
1170
+ M expo-app/sources/sync/persistence.ts
1171
+ M expo-app/sources/sync/storage.ts
1172
+ A expo-app/sources/sync/unread.test.ts
1173
+ A expo-app/sources/sync/unread.ts
1174
+
1175
+ commit 82d74454c3c4407c2ec5b531adaa3910d159aa73
1176
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
1177
+ AuthorDate: 2026-01-21
1178
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
1179
+ CommitDate: 2026-01-22
1180
+
1181
+ fix(typecheck): restore permission imports and Popover web styles
1182
+
1183
+ M expo-app/sources/-session/SessionView.tsx
1184
+ M expo-app/sources/sync/ops.ts
1185
+ M expo-app/sources/sync/storage.ts
1186
+
1187
+ commit 4f2b533f99c2505bd9960ade61760f7bab833652
1188
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
1189
+ AuthorDate: 2026-01-11
1190
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
1191
+ CommitDate: 2026-01-22
1192
+
1193
+ feat(tools): add approve/reject buttons to ExitPlanMode
1194
+
1195
+ Add interactive UI for plan approval in ExitPlanToolView:
1196
+ - Approve button sends approval message and proceeds with implementation
1197
+ - Reject button sends rejection message and asks for plan revision
1198
+ - Shows 'Response sent' state after user responds
1199
+ - Buttons disabled while processing to prevent double-submission
1200
+
1201
+ Changes:
1202
+ - Rewrite ExitPlanToolView with interactive approve/reject buttons
1203
+ - Add loading states and disabled styles for buttons
1204
+ - Add translation strings for button labels and messages
1205
+ - Use sessionDeny + sendMessage pattern (same as AskUserQuestion)
1206
+
1207
+ M expo-app/sources/components/tools/views/ExitPlanToolView.tsx
1208
+ M expo-app/sources/text/translations/ca.ts
1209
+ M expo-app/sources/text/translations/en.ts
1210
+ M expo-app/sources/text/translations/es.ts
1211
+ M expo-app/sources/text/translations/it.ts
1212
+ M expo-app/sources/text/translations/ja.ts
1213
+ M expo-app/sources/text/translations/pl.ts
1214
+ M expo-app/sources/text/translations/pt.ts
1215
+ M expo-app/sources/text/translations/ru.ts
1216
+ M expo-app/sources/text/translations/zh-Hans.ts
1217
+
1218
+ commit c86cbd26b04087d45570bbb9109735c0d58e7db2
1219
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
1220
+ AuthorDate: 2026-01-07
1221
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
1222
+ CommitDate: 2026-01-22
1223
+
1224
+ feat(queue): add pending message queue UI and send modes
1225
+
1226
+ M expo-app/sources/-session/SessionView.tsx
1227
+ A expo-app/sources/app/(app)/settings/message-sending.tsx
1228
+ M expo-app/sources/components/MessageView.tsx
1229
+ A expo-app/sources/components/PendingMessagesModal.tsx
1230
+ A expo-app/sources/components/PendingQueueIndicator.tsx
1231
+ M expo-app/sources/components/SettingsView.tsx
1232
+ M expo-app/sources/sync/apiTypes.ts
1233
+ M expo-app/sources/sync/settings.spec.ts
1234
+ M expo-app/sources/sync/settings.ts
1235
+ M expo-app/sources/sync/storage.ts
1236
+ M expo-app/sources/sync/storageTypes.ts
1237
+ M expo-app/sources/sync/sync.ts
1238
+
1239
+ commit 42da6dae8fe47c5ecfa6678df38c7c6146e15248
1240
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
1241
+ AuthorDate: 2026-01-07
1242
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
1243
+ CommitDate: 2026-01-22
1244
+
1245
+ feat(session): add session rename support
1246
+
1247
+ M expo-app/sources/app/(app)/session/[id]/info.tsx
1248
+ M expo-app/sources/sync/ops.ts
1249
+ M expo-app/sources/text/translations/ca.ts
1250
+ M expo-app/sources/text/translations/en.ts
1251
+ M expo-app/sources/text/translations/es.ts
1252
+ M expo-app/sources/text/translations/it.ts
1253
+ M expo-app/sources/text/translations/ja.ts
1254
+ M expo-app/sources/text/translations/pl.ts
1255
+ M expo-app/sources/text/translations/pt.ts
1256
+ M expo-app/sources/text/translations/ru.ts
1257
+ M expo-app/sources/text/translations/zh-Hans.ts
1258
+
1259
+ commit 057102f679041663a6194c89d20fb37ce8c69826
1260
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
1261
+ AuthorDate: 2026-01-12
1262
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
1263
+ CommitDate: 2026-01-22
1264
+
1265
+ feat(resume): add resume session option for new sessions
1266
+
1267
+ - Add resume picker and pass vendor resume id when the selected agent supports resume
1268
+
1269
+ - Gate resume UI via agent capabilities for upstream friendliness (Claude only by default)
1270
+
1271
+ - Expose Codex session id in Session Info + translations
1272
+
1273
+ M expo-app/sources/app/(app)/new/NewSessionWizard.tsx
1274
+ M expo-app/sources/app/(app)/new/index.tsx
1275
+ A expo-app/sources/app/(app)/new/pick/resume.tsx
1276
+ M expo-app/sources/sync/ops.ts
1277
+ M expo-app/sources/sync/persistence.ts
1278
+ M expo-app/sources/sync/spawnSessionPayload.ts
1279
+ M expo-app/sources/text/translations/ca.ts
1280
+ M expo-app/sources/text/translations/en.ts
1281
+ M expo-app/sources/text/translations/es.ts
1282
+ M expo-app/sources/text/translations/it.ts
1283
+ M expo-app/sources/text/translations/ja.ts
1284
+ M expo-app/sources/text/translations/pl.ts
1285
+ M expo-app/sources/text/translations/pt.ts
1286
+ M expo-app/sources/text/translations/ru.ts
1287
+ M expo-app/sources/text/translations/zh-Hans.ts
1288
+ A expo-app/sources/utils/agentCapabilities.ts
1289
+ M expo-app/sources/utils/tempDataStore.ts
1290
+
1291
+ commit 05532bd65c6b8de70bc6ca514f1d7aacc152ae78
1292
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
1293
+ AuthorDate: 2026-01-14
1294
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
1295
+ CommitDate: 2026-01-22
1296
+
1297
+ feat(resume): show resume chip under path in new session
1298
+
1299
+ M expo-app/sources/app/(app)/new/NewSessionWizard.tsx
1300
+ M expo-app/sources/app/(app)/new/index.tsx
1301
+ M expo-app/sources/components/AgentInput.tsx
1302
+
1303
+ commit cd5771e5088145cee2ff4b72989182290384c348
1304
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
1305
+ AuthorDate: 2026-01-11
1306
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
1307
+ CommitDate: 2026-01-22
1308
+
1309
+ feat: resume inactive Claude sessions from UI
1310
+
1311
+ Add the ability to resume inactive Claude sessions directly from the UI.
1312
+ When a session becomes inactive (agent disconnected), users can now type
1313
+ a message and send it to resume the session instead of starting a new one.
1314
+
1315
+ Changes:
1316
+ - Add RESUMABLE_AGENTS config for dynamic agent resume capability
1317
+ - Add canResumeSession() helper to check if session supports resume
1318
+ - Enable input field for inactive resumable sessions with status indicator
1319
+ - Add resumeSession RPC operation to trigger resume via daemon
1320
+ - Add translations for session resume states
1321
+
1322
+ The resume feature uses the existing Claude session ID stored in metadata
1323
+ to reconnect to the same conversation, preserving message history.
1324
+
1325
+ A expo-app/INACTIVE_SESSION_RESUME.md
1326
+ M expo-app/sources/-session/SessionView.tsx
1327
+ M expo-app/sources/sync/ops.ts
1328
+
1329
+ commit 456e2ad8e2b80efcc7eb05ca71dedf313e4230b8
1330
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
1331
+ AuthorDate: 2026-01-12
1332
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
1333
+ CommitDate: 2026-01-22
1334
+
1335
+ refactor(resume): don't require agentSessionId from UI
1336
+
1337
+ - UI now resumes inactive sessions by Happy session id; machine/daemon derives vendor resume id from local persisted session state
1338
+
1339
+ - Keeps send disabled for inactive sessions that aren't resumable
1340
+
1341
+ M expo-app/sources/-session/SessionView.tsx
1342
+ M expo-app/sources/sync/ops.ts
1343
+ M expo-app/sources/text/translations/ca.ts
1344
+ M expo-app/sources/text/translations/en.ts
1345
+ M expo-app/sources/text/translations/es.ts
1346
+ M expo-app/sources/text/translations/it.ts
1347
+ M expo-app/sources/text/translations/ja.ts
1348
+ M expo-app/sources/text/translations/pl.ts
1349
+ M expo-app/sources/text/translations/pt.ts
1350
+ M expo-app/sources/text/translations/ru.ts
1351
+ M expo-app/sources/text/translations/zh-Hans.ts
1352
+ M expo-app/sources/utils/agentCapabilities.ts
1353
+
1354
+ commit 9b0069e3d30ca504df810d81cf2779398168cc0d
1355
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
1356
+ AuthorDate: 2026-01-11
1357
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
1358
+ CommitDate: 2026-01-22
1359
+
1360
+ feat(fork): enable Codex resume support
1361
+
1362
+ Enable 'codex' in RESUMABLE_AGENTS for fork builds.
1363
+ This allows resuming Codex sessions from the UI.
1364
+
1365
+ M expo-app/sources/app/(app)/session/[id]/info.tsx
1366
+ M expo-app/sources/sync/storageTypes.ts
1367
+ M expo-app/sources/text/translations/ca.ts
1368
+ M expo-app/sources/text/translations/en.ts
1369
+ M expo-app/sources/text/translations/es.ts
1370
+ M expo-app/sources/text/translations/it.ts
1371
+ M expo-app/sources/text/translations/ja.ts
1372
+ M expo-app/sources/text/translations/pl.ts
1373
+ M expo-app/sources/text/translations/pt.ts
1374
+ M expo-app/sources/text/translations/ru.ts
1375
+ M expo-app/sources/text/translations/zh-Hans.ts
1376
+ M expo-app/sources/utils/agentCapabilities.ts
1377
+
1378
+ commit 4ddaef02210e47ed7fd8ea4cf287611d2ea6f450
1379
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
1380
+ AuthorDate: 2026-01-22
1381
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
1382
+ CommitDate: 2026-01-22
1383
+
1384
+ fix(sync): omit model meta for queued messages
1385
+
1386
+ M expo-app/sources/sync/sync.ts
1387
+
1388
+ commit 3fbdc10018fe62b67ddc05dc62ebf9ba7466f90f
1389
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
1390
+ AuthorDate: 2026-01-12
1391
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
1392
+ CommitDate: 2026-01-22
1393
+
1394
+ fix: tmux parsing/targeting + review feedback
1395
+
1396
+ Validation:
1397
+
1398
+ - Verified TMUX/TMUX_PANE values inside an isolated tmux server (custom socket)
1399
+
1400
+ - Verified kill-window syntax and new-session -t semantics via tmux manpage
1401
+
1402
+ Changes:
1403
+
1404
+ - Correct TMUX env parsing (socket_path + server_pid) and prefer TMUX_PANE for pane id
1405
+
1406
+ - Avoid invalid -t injection for commands that already specify a target; do not treat new-session as targetable
1407
+
1408
+ - Fix kill-window invocation to use -t session:window
1409
+
1410
+ - Align Machine.metadata typing with runtime (nullable)
1411
+
1412
+ - Make socket send behavior consistent when disconnected; tighten misc scripts/tests
1413
+
1414
+ M cli/bin/happy-dev.mjs
1415
+ M cli/docs/bug-fix-plan-2025-01-15-athundt.md
1416
+ M cli/scripts/__tests__/ripgrep_launcher.test.ts
1417
+ M cli/scripts/claude_version_utils.cjs
1418
+ M cli/scripts/claude_version_utils.test.ts
1419
+ M cli/scripts/env-wrapper.cjs
1420
+ M cli/scripts/ripgrep_launcher.cjs
1421
+ M cli/scripts/test-continue-fix.sh
1422
+ M cli/src/api/api.test.ts
1423
+ M cli/src/api/apiSession.ts
1424
+ M cli/src/api/types.ts
1425
+ M cli/src/claude/claudeLocal.ts
1426
+ M cli/src/claude/runClaude.ts
1427
+ M cli/src/utils/tmux.test.ts
1428
+ M cli/src/utils/tmux.ts
1429
+
1430
+ commit 7292a29822bbd81cb10c292559a8f63bbc8ea73c
1431
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
1432
+ AuthorDate: 2026-01-13
1433
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
1434
+ CommitDate: 2026-01-22
1435
+
1436
+ fix(daemon): do not apply CLI active profile to GUI-spawned sessions
1437
+
1438
+ M cli/src/daemon/run.ts
1439
+
1440
+ commit ce94cfa512ac7be97c3e8802ffebcc804e7489b3
1441
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
1442
+ AuthorDate: 2026-01-13
1443
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
1444
+ CommitDate: 2026-01-22
1445
+
1446
+ feat(session): persist profileId in session metadata via daemon spawn
1447
+
1448
+ M cli/src/api/apiMachine.ts
1449
+ M cli/src/api/types.ts
1450
+ M cli/src/claude/runClaude.ts
1451
+ M cli/src/daemon/run.ts
1452
+ M cli/src/modules/common/registerCommonHandlers.ts
1453
+ M cli/src/utils/createSessionMetadata.ts
1454
+
1455
+ commit e58e97fd7ff4eac9f60ec55224c90fde52ceb2d1
1456
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
1457
+ AuthorDate: 2026-01-13
1458
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
1459
+ CommitDate: 2026-01-22
1460
+
1461
+ fix(pr107): harden daemon spawn + align profile schema
1462
+
1463
+ M cli/src/daemon/run.ts
1464
+ M cli/src/persistence.ts
1465
+ M cli/src/utils/expandEnvVars.ts
1466
+
1467
+ commit 86330e2635957cd9863f3142399b1adba9522949
1468
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
1469
+ AuthorDate: 2026-01-13
1470
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
1471
+ CommitDate: 2026-01-22
1472
+
1473
+ fix(security): redact spawn secrets from daemon logs
1474
+
1475
+ M cli/src/api/apiMachine.ts
1476
+ M cli/src/daemon/run.ts
1477
+
1478
+ commit a25acab22b64372e47a7d2a22276d8fd4dad9c96
1479
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
1480
+ AuthorDate: 2026-01-15
1481
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
1482
+ CommitDate: 2026-01-22
1483
+
1484
+ fix(socket): restore offline buffering for sends
1485
+
1486
+ Remove the hard send guard that dropped messages while disconnected and rely on socket.io client buffering (tests updated).
1487
+
1488
+ M cli/src/api/apiSession.test.ts
1489
+ M cli/src/api/apiSession.ts
1490
+ M cli/src/claude/runClaude.ts
1491
+
1492
+ commit a7d23148c3117d21f5b15a045f71d5da8757f49d
1493
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
1494
+ AuthorDate: 2026-01-15
1495
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
1496
+ CommitDate: 2026-01-22
1497
+
1498
+ fix(logging): gate debug output and redact templates
1499
+
1500
+ Make debugLargeJson a true DEBUG-only path and avoid logging expanded env values/defaults; tighten doctor masking for default templates.
1501
+
1502
+ A cli/src/ui/doctor.test.ts
1503
+ M cli/src/ui/doctor.ts
1504
+ A cli/src/ui/logger.test.ts
1505
+ M cli/src/ui/logger.ts
1506
+ M cli/src/utils/expandEnvVars.test.ts
1507
+ M cli/src/utils/expandEnvVars.ts
1508
+
1509
+ commit ef418bc4dda3b67874a498a56ad0576fd8ca0ac9
1510
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
1511
+ AuthorDate: 2026-01-13
1512
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
1513
+ CommitDate: 2026-01-22
1514
+
1515
+ fix(pr107): redact profile secrets in doctor + align tmux tmpDir
1516
+
1517
+ M cli/src/persistence.ts
1518
+ M cli/src/ui/doctor.test.ts
1519
+
1520
+ commit 1f90659694beaec4a990e7a02c6d628fb3721d08
1521
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
1522
+ AuthorDate: 2026-01-13
1523
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
1524
+ CommitDate: 2026-01-22
1525
+
1526
+ refactor(profiles): remove unwired startup script and local env cache
1527
+
1528
+ M cli/src/persistence.ts
1529
+
1530
+ commit 7aed8aaee02f5f444d099a243389c35685a1b3bd
1531
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
1532
+ AuthorDate: 2026-01-15
1533
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
1534
+ CommitDate: 2026-01-22
1535
+
1536
+ refactor(profiles): drop provider config objects
1537
+
1538
+ Align happy-cli profile schema with the app: profiles are env-var based only. Migrate any legacy provider config fields into environmentVariables during parsing to avoid data loss.
1539
+
1540
+ A cli/src/persistence.profileSchema.test.ts
1541
+ M cli/src/persistence.ts
1542
+
1543
+ commit 6b0bfe546d9e8475696d7694f52d4d64cf65fbfc
1544
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
1545
+ AuthorDate: 2026-01-15
1546
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
1547
+ CommitDate: 2026-01-22
1548
+
1549
+ feat(runtime): support bun for daemon-spawned subprocesses
1550
+
1551
+ Add a single runtime invocation builder for node vs bun and allow overriding via HAPPY_CLI_SUBPROCESS_RUNTIME.
1552
+
1553
+ A cli/src/utils/spawnHappyCLI.invocation.test.ts
1554
+ A cli/src/utils/spawnHappyCLI.test.ts
1555
+ M cli/src/utils/spawnHappyCLI.ts
1556
+
1557
+ commit 4071466545ab1eaffba8cb6ebd55a85ef2732370
1558
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
1559
+ AuthorDate: 2026-01-15
1560
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
1561
+ CommitDate: 2026-01-22
1562
+
1563
+ refactor(rpc): accept arbitrary env var maps for spawn
1564
+
1565
+ The GUI sends a profile-derived env var map that may include provider-specific keys and tmux knobs; type it as Record<string,string>.
1566
+
1567
+ M cli/src/modules/common/registerCommonHandlers.ts
1568
+
1569
+ commit 809be82b53e786a3146fa818c03f0a88c1e24a76
1570
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
1571
+ AuthorDate: 2026-01-17
1572
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
1573
+ CommitDate: 2026-01-22
1574
+
1575
+ fix(env): implement default assignment semantics
1576
+
1577
+ M cli/src/utils/expandEnvVars.test.ts
1578
+ M cli/src/utils/expandEnvVars.ts
1579
+
1580
+ commit 4c2a671dc3f4409d572e9aef2c0c4340ddd5d097
1581
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
1582
+ AuthorDate: 2026-01-17
1583
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
1584
+ CommitDate: 2026-01-22
1585
+
1586
+ feat(rpc): add preview-env handler
1587
+
1588
+ A cli/src/modules/common/registerCommonHandlers.previewEnv.test.ts
1589
+ M cli/src/modules/common/registerCommonHandlers.ts
1590
+
1591
+ commit 2973f7fe6861bf8623f0163aa99a2d73cfab81ad
1592
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
1593
+ AuthorDate: 2026-01-15
1594
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
1595
+ CommitDate: 2026-01-22
1596
+
1597
+ fix(codex): harden MCP command detection
1598
+
1599
+ Handle codex --version output variations without misreporting 'not installed' and remove stdout logging of elicitation payloads.
1600
+
1601
+ A cli/src/codex/codexMcpClient.test.ts
1602
+ M cli/src/codex/codexMcpClient.ts
1603
+
1604
+ commit c863db3d5bbcb5edc6353657f09049e30e457900
1605
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
1606
+ AuthorDate: 2026-01-15
1607
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
1608
+ CommitDate: 2026-01-22
1609
+
1610
+ refactor(offline): make offline session stub safer
1611
+
1612
+ Provide an EventEmitter-compatible stub and a focused unit test so offline mode can't crash on basic session events.
1613
+
1614
+ A cli/src/utils/offlineSessionStub.test.ts
1615
+ M cli/src/utils/offlineSessionStub.ts
1616
+
1617
+ commit 0a1a91a631e77883e9c0b874674021c288bd0e57
1618
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
1619
+ AuthorDate: 2026-01-15
1620
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
1621
+ CommitDate: 2026-01-22
1622
+
1623
+ feat(tmux): support per-instance socket path
1624
+
1625
+ A cli/src/utils/tmux.socketPath.test.ts
1626
+ M cli/src/utils/tmux.ts
1627
+
1628
+ commit c52227082c2b1366dbc878db1000395a0f3159d3
1629
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
1630
+ AuthorDate: 2026-01-15
1631
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
1632
+ CommitDate: 2026-01-22
1633
+
1634
+ fix(tmux): correct env, tmpdir, and session selection
1635
+
1636
+ - Treat TMUX_TMPDIR as a directory via tmux client env (not -S socket path)
1637
+
1638
+ - Pass per-window env via new-window -e KEY=value without shell-style quoting
1639
+
1640
+ - Make empty sessionName resolve deterministically (attached/most-recent)
1641
+
1642
+ - Preserve failure semantics for signal-terminated tmux commands
1643
+
1644
+ M cli/src/api/api.test.ts
1645
+ M cli/src/api/apiMachine.ts
1646
+ M cli/src/api/apiSession.test.ts
1647
+ M cli/src/api/apiSession.ts
1648
+ M cli/src/claude/runClaude.ts
1649
+ M cli/src/claude/utils/sessionScanner.test.ts
1650
+ M cli/src/codex/codexMcpClient.ts
1651
+ A cli/src/daemon/run.tmuxEnv.test.ts
1652
+ A cli/src/daemon/run.tmuxSpawn.test.ts
1653
+ M cli/src/daemon/run.ts
1654
+ M cli/src/modules/common/registerCommonHandlers.ts
1655
+ M cli/src/persistence.profileSchema.test.ts
1656
+ M cli/src/persistence.ts
1657
+ M cli/src/ui/logger.test.ts
1658
+ M cli/src/utils/createSessionMetadata.ts
1659
+ M cli/src/utils/offlineSessionStub.test.ts
1660
+ D cli/src/utils/spawnHappyCLI.test.ts
1661
+ A cli/src/utils/tmux.commandEnv.test.ts
1662
+ A cli/src/utils/tmux.real.integration.test.ts
1663
+ M cli/src/utils/tmux.socketPath.test.ts
1664
+ M cli/src/utils/tmux.test.ts
1665
+
1666
+ commit 7a01a8e426291e8a32de4805ff12621db26fb990
1667
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
1668
+ AuthorDate: 2026-01-16
1669
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
1670
+ CommitDate: 2026-01-22
1671
+
1672
+ test(claude): align sessionScanner path mapping
1673
+
1674
+ M cli/src/claude/utils/sessionScanner.test.ts
1675
+
1676
+ commit 1075a768e551d5b7fc135d88636b03baf6938969
1677
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
1678
+ AuthorDate: 2026-01-17
1679
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
1680
+ CommitDate: 2026-01-22
1681
+
1682
+ feat(rpc): add detect-cli handler
1683
+
1684
+ A cli/src/modules/common/registerCommonHandlers.detectCli.test.ts
1685
+ M cli/src/modules/common/registerCommonHandlers.ts
1686
+
1687
+ commit c988f68ca4d03f202a5bc6ff3e5fe18da2c3eb37
1688
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
1689
+ AuthorDate: 2026-01-21
1690
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
1691
+ CommitDate: 2026-01-22
1692
+
1693
+ feat(ui): surface Codex/Gemini errors in session UI
1694
+
1695
+ - Add `formatErrorForUi` to turn unknown throws into user-visible text (with truncation).
1696
+
1697
+ - Codex: forward MCP error/stream/startup failures to `sendSessionEvent`, and show tool-response errors.
1698
+
1699
+ - Gemini: extract error formatting into `formatGeminiErrorForUi` so the UI gets actionable messages instead of silent hangs.
1700
+
1701
+ A cli/src/codex/__tests__/extractCodexToolErrorText.test.ts
1702
+ M cli/src/codex/runCodex.ts
1703
+ A cli/src/codex/utils/formatCodexEventForUi.test.ts
1704
+ A cli/src/codex/utils/formatCodexEventForUi.ts
1705
+ M cli/src/gemini/runGemini.ts
1706
+ A cli/src/gemini/utils/formatGeminiErrorForUi.test.ts
1707
+ A cli/src/gemini/utils/formatGeminiErrorForUi.ts
1708
+ A cli/src/utils/formatErrorForUi.test.ts
1709
+ A cli/src/utils/formatErrorForUi.ts
1710
+
1711
+ commit b2269ee112523d99318612c2c23f81f3b0b58183
1712
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
1713
+ AuthorDate: 2026-01-21
1714
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
1715
+ CommitDate: 2026-01-22
1716
+
1717
+ fix(claude): use hook transcript path across switching
1718
+
1719
+ - Prefer SessionStart hook transcript_path for session scanning + `claudeCheckSession` (keep `getProjectPath` heuristic as fallback).
1720
+
1721
+ - Emit a UI message when the transcript file can’t be found yet (prevents a silent/blank UI).
1722
+
1723
+ - Wait briefly for hook session info before switching to avoid null sessionId/transcript races.
1724
+
1725
+ - Make the `switch` RPC idempotent (accepts {to:'local'|'remote'}; returns boolean; keeps legacy toggle when params are missing).
1726
+
1727
+ - Keep hook-mode flags intact (don’t rewrite `--continue/--resume/--session-id` when hooks are enabled).
1728
+
1729
+ - KeepAlive now reports the correct mode; remote init no longer blocks on a 10s file wait.
1730
+
1731
+ M cli/src/claude/claudeLocal.test.ts
1732
+ M cli/src/claude/claudeLocal.ts
1733
+ A cli/src/claude/claudeLocalLauncher.test.ts
1734
+ M cli/src/claude/claudeLocalLauncher.ts
1735
+ A cli/src/claude/claudeRemote.test.ts
1736
+ M cli/src/claude/claudeRemote.ts
1737
+ A cli/src/claude/claudeRemoteLauncher.test.ts
1738
+ M cli/src/claude/claudeRemoteLauncher.ts
1739
+ A cli/src/claude/loop.test.ts
1740
+ M cli/src/claude/loop.ts
1741
+ M cli/src/claude/runClaude.ts
1742
+ A cli/src/claude/session.test.ts
1743
+ M cli/src/claude/session.ts
1744
+ M cli/src/claude/utils/claudeCheckSession.test.ts
1745
+ M cli/src/claude/utils/claudeCheckSession.ts
1746
+ M cli/src/claude/utils/sessionScanner.test.ts
1747
+ M cli/src/claude/utils/sessionScanner.ts
1748
+ M cli/src/claude/utils/startHookServer.ts
1749
+
1750
+ commit f53cf71d416ca52e94b2eac1171cfc9f6c298045
1751
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
1752
+ AuthorDate: 2026-01-21
1753
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
1754
+ CommitDate: 2026-01-22
1755
+
1756
+ refactor(persistence): remove deprecated tmuxConfig
1757
+
1758
+ - Drop the legacy profile tmuxConfig field and its env-var injection path.
1759
+
1760
+ - Keep terminal/tmux behavior driven by explicit terminal settings/flags to avoid schema drift.
1761
+
1762
+ M cli/src/persistence.ts
1763
+
1764
+ commit 8dae65f6c5851277eb5fb3235190f2f02f947a25
1765
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
1766
+ AuthorDate: 2026-01-21
1767
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
1768
+ CommitDate: 2026-01-22
1769
+
1770
+ feat(rpc): include tmux in detect-cli
1771
+
1772
+ - Extend the detect-cli RPC to report tmux availability for UI gating and better diagnostics.
1773
+
1774
+ - Add/adjust unit tests to cover tmux detection alongside existing CLI checks.
1775
+
1776
+ M cli/src/modules/common/registerCommonHandlers.detectCli.test.ts
1777
+ M cli/src/modules/common/registerCommonHandlers.ts
1778
+
1779
+ commit ad66c6aaa3ae604456f02dc793b381a5064e43ec
1780
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
1781
+ AuthorDate: 2026-01-21
1782
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
1783
+ CommitDate: 2026-01-22
1784
+
1785
+ feat(terminal): add tmux metadata + attach tooling
1786
+
1787
+ - Add terminal/tmux metadata to session creation (used by UI Session Details + attach workflows).
1788
+
1789
+ - Persist local attachment info (best-effort) once a session ID exists and optionally surface tmux fallback reasons as UI-facing messages.
1790
+
1791
+ - Add attach planning utilities and a new `happy attach` command.
1792
+
1793
+ - Add headless tmux launcher support (`--tmux`) and internal terminal runtime flags for spawners.
1794
+
1795
+ M cli/src/api/types.ts
1796
+ M cli/src/claude/runClaude.ts
1797
+ M cli/src/codex/runCodex.ts
1798
+ A cli/src/commands/attach.ts
1799
+ M cli/src/gemini/runGemini.ts
1800
+ M cli/src/index.ts
1801
+ A cli/src/terminal/headlessTmuxArgs.test.ts
1802
+ A cli/src/terminal/headlessTmuxArgs.ts
1803
+ A cli/src/terminal/startHappyHeadlessInTmux.ts
1804
+ A cli/src/terminal/terminalAttachPlan.test.ts
1805
+ A cli/src/terminal/terminalAttachPlan.ts
1806
+ A cli/src/terminal/terminalAttachmentInfo.test.ts
1807
+ A cli/src/terminal/terminalAttachmentInfo.ts
1808
+ A cli/src/terminal/terminalConfig.test.ts
1809
+ A cli/src/terminal/terminalConfig.ts
1810
+ A cli/src/terminal/terminalFallbackMessage.test.ts
1811
+ A cli/src/terminal/terminalFallbackMessage.ts
1812
+ A cli/src/terminal/terminalMetadata.ts
1813
+ A cli/src/terminal/terminalRuntimeFlags.test.ts
1814
+ A cli/src/terminal/terminalRuntimeFlags.ts
1815
+ A cli/src/terminal/tmuxSessionSelector.test.ts
1816
+ A cli/src/terminal/tmuxSessionSelector.ts
1817
+ M cli/src/utils/createSessionMetadata.ts
1818
+
1819
+ commit c13d51ee4638ab55a89ae789053f68bbdb04dc6a
1820
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
1821
+ AuthorDate: 2026-01-21
1822
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
1823
+ CommitDate: 2026-01-22
1824
+
1825
+ feat(daemon): support tmux spawn + harden runtime
1826
+
1827
+ - Spawn sessions in tmux when requested (including isolated server option) and record tmux target/fallback metadata.
1828
+
1829
+ - Extend spawn-session request plumbing and add a focused apiMachine spawn-session test.
1830
+
1831
+ - Harden backoff behavior (clamping + retry gates) and avoid throwing on best-effort log file write failures.
1832
+
1833
+ A cli/src/api/apiMachine.spawnSession.test.ts
1834
+ M cli/src/api/apiMachine.ts
1835
+ M cli/src/daemon/run.tmuxSpawn.test.ts
1836
+ M cli/src/daemon/run.ts
1837
+ M cli/src/ui/logger.test.ts
1838
+ M cli/src/ui/logger.ts
1839
+ M cli/src/utils/sync.ts
1840
+ M cli/src/utils/time.ts
1841
+
1842
+ commit f7db44dea4586a2a399e6765e31f8ad9d3f61475
1843
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
1844
+ AuthorDate: 2026-01-21
1845
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
1846
+ CommitDate: 2026-01-22
1847
+
1848
+ docs: add AGENTS.md symlink
1849
+
1850
+ - Keep agent guidance single-sourced by symlinking AGENTS.md -> CLAUDE.md.
1851
+
1852
+ A cli/AGENTS.md
1853
+
1854
+ commit af5000ea6318bf1e02fba19069660179d9318d84
1855
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
1856
+ AuthorDate: 2026-01-21
1857
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
1858
+ CommitDate: 2026-01-22
1859
+
1860
+ fix(ui): polish Codex and Gemini error messages
1861
+
1862
+ M cli/src/codex/utils/formatCodexEventForUi.test.ts
1863
+ M cli/src/codex/utils/formatCodexEventForUi.ts
1864
+ M cli/src/gemini/utils/formatGeminiErrorForUi.test.ts
1865
+ M cli/src/gemini/utils/formatGeminiErrorForUi.ts
1866
+
1867
+ commit f68552d03ab97641f8da5cd8ccb65113a8e13a34
1868
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
1869
+ AuthorDate: 2026-01-21
1870
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
1871
+ CommitDate: 2026-01-22
1872
+
1873
+ fix(tmux): print attach instructions in correct order
1874
+
1875
+ A cli/src/terminal/startHappyHeadlessInTmux.test.ts
1876
+ M cli/src/terminal/startHappyHeadlessInTmux.ts
1877
+
1878
+ commit 4e4bb65ff3f0c7df410abd6fe2a6d69bd6d96f5e
1879
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
1880
+ AuthorDate: 2026-01-21
1881
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
1882
+ CommitDate: 2026-01-22
1883
+
1884
+ test(tmux): avoid brittle assertions
1885
+
1886
+ M cli/src/terminal/startHappyHeadlessInTmux.test.ts
1887
+
1888
+ commit 45f4eb5d145caff292136122c70fbfccd26207b0
1889
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
1890
+ AuthorDate: 2026-01-21
1891
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
1892
+ CommitDate: 2026-01-22
1893
+
1894
+ test(detect-cli): avoid process.env reassignment
1895
+
1896
+ M cli/src/modules/common/registerCommonHandlers.detectCli.test.ts
1897
+
1898
+ commit 51782fdbfbcd98757345f7f93a02bd825baa8cdf
1899
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
1900
+ AuthorDate: 2026-01-21
1901
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
1902
+ CommitDate: 2026-01-22
1903
+
1904
+ test(codex): reset transport instances between tests
1905
+
1906
+ M cli/src/codex/codexMcpClient.test.ts
1907
+
1908
+ commit 0ad76f4877ae26d382f5b33ae654e345ea17136d
1909
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
1910
+ AuthorDate: 2026-01-21
1911
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
1912
+ CommitDate: 2026-01-22
1913
+
1914
+ chore(cli): fix gemini daemon block indentation
1915
+
1916
+ M cli/src/index.ts
1917
+
1918
+ commit a8093e3e4ddb6ff974e69d8aa29fe43fce34dbad
1919
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
1920
+ AuthorDate: 2026-01-21
1921
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
1922
+ CommitDate: 2026-01-22
1923
+
1924
+ docs(persistence): update profile schema version comment
1925
+
1926
+ M cli/src/persistence.ts
1927
+
1928
+ commit b16c3658b944b1a73ae86faa700e97b1887d1fad
1929
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
1930
+ AuthorDate: 2026-01-21
1931
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
1932
+ CommitDate: 2026-01-22
1933
+
1934
+ fix(gemini): normalize error details for UI
1935
+
1936
+ M cli/src/gemini/utils/formatGeminiErrorForUi.ts
1937
+
1938
+ commit d9591372655f2765fbf5f993d330e4511607c445
1939
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
1940
+ AuthorDate: 2026-01-21
1941
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
1942
+ CommitDate: 2026-01-22
1943
+
1944
+ fix(common): handle execFileAsync exit codes
1945
+
1946
+ M cli/src/modules/common/registerCommonHandlers.ts
1947
+
1948
+ commit ab95e8cf920c6b75514b54570222be18c6606542
1949
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
1950
+ AuthorDate: 2026-01-22
1951
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
1952
+ CommitDate: 2026-01-22
1953
+
1954
+ fix(sync): avoid hanging invalidateAndAwait on errors
1955
+
1956
+ M cli/src/claude/utils/sessionScanner.ts
1957
+ A cli/src/utils/sync.test.ts
1958
+ M cli/src/utils/sync.ts
1959
+
1960
+ commit 6f98c95fb5d8a79a4e76a1917200e378b7e8355e
1961
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
1962
+ AuthorDate: 2026-01-22
1963
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
1964
+ CommitDate: 2026-01-22
1965
+
1966
+ fix(claude): support -c/-r and avoid session loss on switch
1967
+
1968
+ M cli/src/claude/claudeLocal.ts
1969
+ M cli/src/claude/claudeLocalLauncher.test.ts
1970
+ M cli/src/claude/claudeLocalLauncher.ts
1971
+ M cli/src/claude/claudeRemote.test.ts
1972
+ M cli/src/claude/claudeRemote.ts
1973
+ M cli/src/claude/claudeRemoteLauncher.test.ts
1974
+ M cli/src/claude/claudeRemoteLauncher.ts
1975
+ M cli/src/claude/session.test.ts
1976
+ M cli/src/claude/session.ts
1977
+ M cli/src/claude/utils/claudeFindLastSession.ts
1978
+ M cli/src/claude/utils/path.test.ts
1979
+ M cli/src/claude/utils/path.ts
1980
+ M cli/src/claude/utils/sessionScanner.ts
1981
+
1982
+ commit 9489d70848f3664c02cb2b248f60b396626b8cdf
1983
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
1984
+ AuthorDate: 2026-01-16
1985
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
1986
+ CommitDate: 2026-01-22
1987
+
1988
+ test(claude): align sessionScanner path mapping
1989
+
1990
+ M cli/src/claude/utils/sessionScanner.test.ts
1991
+
1992
+ commit 9c4cb44b7d869acd56a66f18a88b40525f830d65
1993
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
1994
+ AuthorDate: 2026-01-12
1995
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
1996
+ CommitDate: 2026-01-22
1997
+
1998
+ fix(daemon): reattach sessions after daemon restart
1999
+
2000
+ M cli/src/api/apiMachine.ts
2001
+ M cli/src/daemon/controlServer.ts
2002
+ M cli/src/daemon/doctor.ts
2003
+ M cli/src/daemon/run.ts
2004
+ A cli/src/daemon/sessionRegistry.ts
2005
+ M cli/src/daemon/types.ts
2006
+ M cli/src/persistence.ts
2007
+
2008
+ commit dbde6d8716701939d4ce45bfb82541453b16b070
2009
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
2010
+ AuthorDate: 2026-01-14
2011
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
2012
+ CommitDate: 2026-01-22
2013
+
2014
+ test(daemon): add PID classification + session marker tests
2015
+
2016
+ A cli/src/daemon/doctor.test.ts
2017
+ M cli/src/daemon/doctor.ts
2018
+ A cli/src/daemon/sessionRegistry.test.ts
2019
+
2020
+ commit 7cffdd5ce614ef22d6d06b882f3237e837a572cd
2021
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
2022
+ AuthorDate: 2026-01-14
2023
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
2024
+ CommitDate: 2026-01-22
2025
+
2026
+ fix(daemon): verify PID via command hash for reattach/stop
2027
+
2028
+ M cli/src/daemon/run.ts
2029
+ M cli/src/daemon/sessionRegistry.test.ts
2030
+ M cli/src/daemon/sessionRegistry.ts
2031
+ M cli/src/daemon/types.ts
2032
+
2033
+ commit 8b88dcd73d406939feb019a431eeb49293e63225
2034
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
2035
+ AuthorDate: 2026-01-13
2036
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
2037
+ CommitDate: 2026-01-22
2038
+
2039
+ fix(claude): carry permission mode across remote/local switches
2040
+
2041
+ M cli/src/claude/claudeLocalLauncher.ts
2042
+ M cli/src/claude/claudeRemoteLauncher.ts
2043
+ M cli/src/claude/loop.ts
2044
+ M cli/src/claude/session.ts
2045
+ M cli/src/claude/utils/permissionHandler.ts
2046
+
2047
+ commit 8f0e10c9428b34891b34fd310850705cc84a3ecd
2048
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
2049
+ AuthorDate: 2026-01-13
2050
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
2051
+ CommitDate: 2026-01-22
2052
+
2053
+ fix(claude): publish permission mode in session metadata
2054
+
2055
+ M cli/src/api/types.ts
2056
+ M cli/src/claude/claudeLocalLauncher.ts
2057
+ M cli/src/claude/claudeRemoteLauncher.ts
2058
+ M cli/src/claude/loop.ts
2059
+ M cli/src/claude/runClaude.ts
2060
+ M cli/src/claude/session.ts
2061
+ M cli/src/claude/utils/permissionHandler.ts
2062
+
2063
+ commit ffad20faa406d5aebcd284649a0cc925d09fc7a2
2064
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
2065
+ AuthorDate: 2026-01-13
2066
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
2067
+ CommitDate: 2026-01-22
2068
+
2069
+ fix(cli): publish permission mode for codex/gemini sessions
2070
+
2071
+ M cli/src/api/types.ts
2072
+ M cli/src/codex/runCodex.ts
2073
+ M cli/src/gemini/runGemini.ts
2074
+ M cli/src/index.ts
2075
+ M cli/src/utils/createSessionMetadata.ts
2076
+
2077
+ commit eb72c6e694344ce79523ac36e715348753303bd8
2078
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
2079
+ AuthorDate: 2026-01-13
2080
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
2081
+ CommitDate: 2026-01-22
2082
+
2083
+ fix(codex): disable model override and remove experimental resume
2084
+
2085
+ M cli/src/codex/runCodex.ts
2086
+
2087
+ commit d317f6bfa28274763cce5fcfe346ed4c066cfdc6
2088
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
2089
+ AuthorDate: 2026-01-21
2090
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
2091
+ CommitDate: 2026-01-22
2092
+
2093
+ fix(typecheck): resolve duplicate terminalRuntime and RPC handler types
2094
+
2095
+ M cli/src/api/apiMachine.spawnSession.test.ts
2096
+ M cli/src/codex/runCodex.ts
2097
+ M cli/src/gemini/runGemini.ts
2098
+
2099
+ commit a8682d427794ddcd9b0ea151b59d9529e3a3b25d
2100
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
2101
+ AuthorDate: 2026-01-21
2102
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
2103
+ CommitDate: 2026-01-22
2104
+
2105
+ fix(detect-cli): relax tmux version probe timeout
2106
+
2107
+ M cli/src/modules/common/registerCommonHandlers.ts
2108
+
2109
+ commit e2824dbc858baa37f0f375efc8af460eba9d3ea7
2110
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
2111
+ AuthorDate: 2026-01-07
2112
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
2113
+ CommitDate: 2026-01-22
2114
+
2115
+ feat(queue): add server-side pending message pull support
2116
+
2117
+ M cli/src/api/apiSession.ts
2118
+ M cli/src/api/types.ts
2119
+ M cli/src/claude/claudeRemoteLauncher.ts
2120
+ M cli/src/codex/runCodex.ts
2121
+ M cli/src/gemini/runGemini.ts
2122
+
2123
+ commit 37a2c55a6c2f10186a3f208b857931d3a9073370
2124
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
2125
+ AuthorDate: 2026-01-12
2126
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
2127
+ CommitDate: 2026-01-22
2128
+
2129
+ fix(session): prime agent state for readiness
2130
+
2131
+ M cli/src/codex/runCodex.ts
2132
+ M cli/src/gemini/runGemini.ts
2133
+
2134
+ commit 88494b122194e4482ea817fad9c655c83b61a9e7
2135
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
2136
+ AuthorDate: 2026-01-21
2137
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
2138
+ CommitDate: 2026-01-22
2139
+
2140
+ fix(tools): support Windows arm64 tool unpacking
2141
+
2142
+ M cli/scripts/__tests__/ripgrep_launcher.test.ts
2143
+ A cli/scripts/__tests__/unpack-tools.test.ts
2144
+ M cli/scripts/ripgrep_launcher.cjs
2145
+ M cli/scripts/unpack-tools.cjs
2146
+ M cli/src/test-setup.ts
2147
+ M cli/vitest.config.ts
2148
+
2149
+ commit d71587eda2dbe089330ecd07f40a27d669fd831e
2150
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
2151
+ AuthorDate: 2026-01-09
2152
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
2153
+ CommitDate: 2026-01-22
2154
+
2155
+ feat: resume Claude sessions from UI
2156
+
2157
+ Plumbs an optional resume session id through spawn RPC and passes --resume to Claude when starting a daemon session.
2158
+
2159
+ M cli/src/api/apiMachine.ts
2160
+ M cli/src/daemon/run.ts
2161
+ M cli/src/modules/common/registerCommonHandlers.ts
2162
+ A cli/src/utils/agentCapabilities.ts
2163
+
2164
+ commit a80868aff50d9c685cf35a03de73d7abef1537c2
2165
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
2166
+ AuthorDate: 2026-01-11
2167
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
2168
+ CommitDate: 2026-01-22
2169
+
2170
+ feat: resume inactive Claude sessions from UI
2171
+
2172
+ Add CLI support for resuming inactive Claude sessions from the UI.
2173
+ When the UI sends a resume-session RPC, the daemon spawns a new CLI
2174
+ process that reconnects to the existing Happy session instead of
2175
+ creating a new one.
2176
+
2177
+ Changes:
2178
+ - Add RESUMABLE_AGENTS config for dynamic agent resume capability
2179
+ - Add --existing-session flag to reconnect to existing Happy session
2180
+ - Handle resume-session RPC type in apiMachine
2181
+ - Pass HAPPY_INITIAL_MESSAGE env var for the resume message
2182
+ - Update runClaude to reconnect to existing session when specified
2183
+
2184
+ The CLI uses the existing Claude session ID to resume the conversation
2185
+ via claude --resume, and updates the session metadata to reflect the
2186
+ resumed state.
2187
+
2188
+ M cli/src/api/apiMachine.ts
2189
+ M cli/src/claude/runClaude.ts
2190
+ A cli/src/daemon/persistedHappySession.ts
2191
+ M cli/src/daemon/run.ts
2192
+ M cli/src/index.ts
2193
+ M cli/src/modules/common/registerCommonHandlers.ts
2194
+ M cli/src/utils/agentCapabilities.ts
2195
+
2196
+ commit bcaa530b12d7f351db4e5865c85e54b4f08d693b
2197
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
2198
+ AuthorDate: 2026-01-12
2199
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
2200
+ CommitDate: 2026-01-22
2201
+
2202
+ feat(resume): add happy resume and persist vendor resume id
2203
+
2204
+ - Persist Claude vendor resume id to $HAPPY_HOME_DIR/sessions/<sessionId>.json when discovered via SessionStart hook
2205
+
2206
+ - Add `happy resume <happySessionId>` to respawn a worker attached to the same Happy session (uses --existing-session + --resume)
2207
+
2208
+ - Keep behavior safe: fail fast when resume is requested for unsupported agents
2209
+
2210
+ M cli/src/claude/session.ts
2211
+ M cli/src/daemon/persistedHappySession.ts
2212
+ M cli/src/index.ts
2213
+
2214
+ commit e085e75c5d3695ec93c986c5e30a547e74e4489d
2215
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
2216
+ AuthorDate: 2026-01-12
2217
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
2218
+ CommitDate: 2026-01-22
2219
+
2220
+ feat(resume): allow resume-session without agentSessionId
2221
+
2222
+ - UI/daemon can resume with only Happy session id; daemon derives latest vendor resume id from local persisted session state
2223
+
2224
+ - `happy resume <id...>` now supports resuming multiple sessions for bulk recovery
2225
+
2226
+ M cli/src/api/apiMachine.ts
2227
+ M cli/src/daemon/run.ts
2228
+ M cli/src/index.ts
2229
+
2230
+ commit 68a6ba4bc244452b1d297af0fcc38f1abe33f3bf
2231
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
2232
+ AuthorDate: 2026-01-12
2233
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
2234
+ CommitDate: 2026-01-22
2235
+
2236
+ feat(fork): enable Codex inactive-session resume via codex-reply
2237
+
2238
+ - Enable Codex in vendor resume capability gating
2239
+
2240
+ - Parse --existing-session/--resume for codex and attach to persisted Happy session
2241
+
2242
+ - Resume Codex via MCP tool codex-reply (no transcript scanning)
2243
+
2244
+ - Persist codexSessionId for future resumes
2245
+
2246
+ M cli/src/codex/codexMcpClient.ts
2247
+ M cli/src/codex/runCodex.ts
2248
+ M cli/src/daemon/persistedHappySession.ts
2249
+ M cli/src/daemon/run.ts
2250
+ M cli/src/index.ts
2251
+ M cli/src/utils/agentCapabilities.ts
2252
+
2253
+ commit d3aefaa9b598a0cbe3a28eaddc86041b35cb3014
2254
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
2255
+ AuthorDate: 2026-01-22
2256
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
2257
+ CommitDate: 2026-01-22
2258
+
2259
+ refactor(daemon): extract reattach and pid safety helpers
2260
+
2261
+ A cli/src/daemon/pidSafety.ts
2262
+ A cli/src/daemon/reattach.ts
2263
+ M cli/src/daemon/run.ts
2264
+
2265
+ commit 72397b7e8c94b466d4883f5a5f106d8a943e01a1
2266
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
2267
+ AuthorDate: 2026-01-22
2268
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
2269
+ CommitDate: 2026-01-22
2270
+
2271
+ test(daemon): add opt-in reattach integration tests
2272
+
2273
+ A cli/src/daemon/pidSafety.real.integration.test.ts
2274
+ A cli/src/daemon/reattach.real.integration.test.ts
2275
+
2276
+ commit 9c40c54018c2e9d7ceb4741da8f15bddded1caf2
2277
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
2278
+ AuthorDate: 2026-01-22
2279
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
2280
+ CommitDate: 2026-01-22
2281
+
2282
+ Revert "fix(tools): support Windows arm64 tool unpacking"
2283
+
2284
+ This reverts commit 88494b122194e4482ea817fad9c655c83b61a9e7.
2285
+
2286
+ M cli/scripts/__tests__/ripgrep_launcher.test.ts
2287
+ D cli/scripts/__tests__/unpack-tools.test.ts
2288
+ M cli/scripts/ripgrep_launcher.cjs
2289
+ M cli/scripts/unpack-tools.cjs
2290
+ M cli/src/test-setup.ts
2291
+ M cli/vitest.config.ts
2292
+
2293
+ commit ab35b47ff69959457418cb23836e670961f8bf34
2294
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
2295
+ AuthorDate: 2026-01-22
2296
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
2297
+ CommitDate: 2026-01-22
2298
+
2299
+ fix(resume): make inactive resume reliable; gate Codex resume
2300
+
2301
+ M cli/src/api/apiMachine.ts
2302
+ M cli/src/claude/runClaude.ts
2303
+ M cli/src/codex/codexMcpClient.ts
2304
+ M cli/src/codex/runCodex.ts
2305
+ M cli/src/daemon/run.ts
2306
+ M cli/src/modules/common/registerCommonHandlers.ts
2307
+ A cli/src/utils/agentCapabilities.test.ts
2308
+ M cli/src/utils/agentCapabilities.ts
2309
+ M expo-app/INACTIVE_SESSION_RESUME.md
2310
+ M expo-app/sources/-session/SessionView.tsx
2311
+ M expo-app/sources/app/(app)/machine/[id].tsx
2312
+ M expo-app/sources/app/(app)/new/index.tsx
2313
+ M expo-app/sources/app/(app)/session/[id]/info.tsx
2314
+ M expo-app/sources/sync/ops.ts
2315
+ M expo-app/sources/sync/settings.ts
2316
+ M expo-app/sources/sync/spawnSessionPayload.ts
2317
+ M expo-app/sources/utils/agentCapabilities.ts
2318
+
2319
+ commit aa9b1168438959ccab8afe2c4f7d7ee1409698eb
2320
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
2321
+ AuthorDate: 2026-01-22
2322
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
2323
+ CommitDate: 2026-01-22
2324
+
2325
+ fix(codex): increase installer output buffer
2326
+
2327
+ M cli/src/modules/common/registerCommonHandlers.ts
2328
+
2329
+ commit c4beebbfa37580bf07b591774ccb7fa32c457caa
2330
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
2331
+ AuthorDate: 2026-01-22
2332
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
2333
+ CommitDate: 2026-01-22
2334
+
2335
+ feat(ui): add Codex resume experiment toggle
2336
+
2337
+ M expo-app/sources/app/(app)/settings/features.tsx
2338
+ M expo-app/sources/text/translations/ca.ts
2339
+ M expo-app/sources/text/translations/en.ts
2340
+ M expo-app/sources/text/translations/es.ts
2341
+ M expo-app/sources/text/translations/it.ts
2342
+ M expo-app/sources/text/translations/ja.ts
2343
+ M expo-app/sources/text/translations/pl.ts
2344
+ M expo-app/sources/text/translations/pt.ts
2345
+ M expo-app/sources/text/translations/ru.ts
2346
+ M expo-app/sources/text/translations/zh-Hans.ts
2347
+
2348
+ commit 0140ae2768696b961488e227c9f7586ef3a32b42
2349
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
2350
+ AuthorDate: 2026-01-22
2351
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
2352
+ CommitDate: 2026-01-22
2353
+
2354
+ refactor(codex): install mcp resume server via install-dep
2355
+
2356
+ M cli/src/codex/codexMcpClient.ts
2357
+ M cli/src/codex/runCodex.ts
2358
+ M cli/src/modules/common/registerCommonHandlers.ts
2359
+ M expo-app/sources/sync/ops.ts
2360
+ M expo-app/sources/sync/settings.ts
2361
+
2362
+ commit 2ec41b621b54b67ca8ef42e8e9219ac4e0e37b22
2363
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
2364
+ AuthorDate: 2026-01-22
2365
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
2366
+ CommitDate: 2026-01-22
2367
+
2368
+ fix(codex): detect resume binary on Windows
2369
+
2370
+ M cli/src/modules/common/registerCommonHandlers.ts
2371
+
2372
+ commit e1deb6db8ddb001b3099dd68726871811142fb6b
2373
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
2374
+ AuthorDate: 2026-01-22
2375
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
2376
+ CommitDate: 2026-01-22
2377
+
2378
+ refactor(codex): add dep-status and drop codex-resume RPCs
2379
+
2380
+ M cli/src/modules/common/registerCommonHandlers.ts
2381
+ M expo-app/sources/app/(app)/machine/[id].tsx
2382
+ M expo-app/sources/sync/ops.ts
2383
+
2384
+ commit 231d7ad9bdd9403add470515830adaf8e8dab890
2385
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
2386
+ AuthorDate: 2026-01-22
2387
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
2388
+ CommitDate: 2026-01-22
2389
+
2390
+ fix(ui): clarify Codex resume server label
2391
+
2392
+ M expo-app/sources/app/(app)/machine/[id].tsx
2393
+
2394
+ commit 8bebf04aca9228e434a03760d2bdaea65d4a6740
2395
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
2396
+ AuthorDate: 2026-01-22
2397
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
2398
+ CommitDate: 2026-01-22
2399
+
2400
+ refactor(cli): modularize capabilities and env preview
2401
+
2402
+ A cli/src/modules/common/capabilities/caps/cliBase.ts
2403
+ A cli/src/modules/common/capabilities/caps/cliClaude.ts
2404
+ A cli/src/modules/common/capabilities/caps/cliCodex.ts
2405
+ A cli/src/modules/common/capabilities/caps/cliGemini.ts
2406
+ A cli/src/modules/common/capabilities/caps/depCodexMcpResume.ts
2407
+ A cli/src/modules/common/capabilities/caps/toolTmux.ts
2408
+ A cli/src/modules/common/capabilities/checklists.ts
2409
+ A cli/src/modules/common/capabilities/context/buildDetectContext.ts
2410
+ A cli/src/modules/common/capabilities/deps/codexMcpResume.ts
2411
+ A cli/src/modules/common/capabilities/errors.ts
2412
+ A cli/src/modules/common/capabilities/registerCapabilitiesHandlers.ts
2413
+ A cli/src/modules/common/capabilities/service.ts
2414
+ A cli/src/modules/common/capabilities/snapshots/cliSnapshot.ts
2415
+ A cli/src/modules/common/capabilities/types.ts
2416
+ A cli/src/modules/common/previewEnv/registerPreviewEnvHandler.ts
2417
+ A cli/src/modules/common/registerCommonHandlers.capabilities.test.ts
2418
+ D cli/src/modules/common/registerCommonHandlers.detectCli.test.ts
2419
+ M cli/src/modules/common/registerCommonHandlers.ts
2420
+
2421
+ commit bcf10af946264798f626e32723b64a6a4073d585
2422
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
2423
+ AuthorDate: 2026-01-22
2424
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
2425
+ CommitDate: 2026-01-22
2426
+
2427
+ test(ui): update useCLIDetection hook tests for capabilities
2428
+
2429
+ M expo-app/sources/hooks/useCLIDetection.hook.test.ts
2430
+
2431
+ commit a5cac698f15bf874f4c51996be1ce321431639b7
2432
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
2433
+ AuthorDate: 2026-01-22
2434
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
2435
+ CommitDate: 2026-01-22
2436
+
2437
+ feat(cli): harden session queue, switching, and lifecycle
2438
+
2439
+ - Add metadata-backed messageQueueV1 pop/materialize path for pending messages\n- Preserve per-message localId so we can mark committed messages discarded\n- Prompt + discard policy for remote→local switching when remote backlog exists\n- Emit durable ACP task_started/task_complete edges for Claude and Codex\n- Add unit tests for queue pop, discard markers, and lifecycle events
2440
+
2441
+ M cli/src/api/apiSession.test.ts
2442
+ M cli/src/api/apiSession.ts
2443
+ A cli/src/api/discardedCommittedMessageLocalIds.test.ts
2444
+ A cli/src/api/discardedCommittedMessageLocalIds.ts
2445
+ A cli/src/api/messageQueueV1.test.ts
2446
+ A cli/src/api/messageQueueV1.ts
2447
+ M cli/src/api/types.ts
2448
+ M cli/src/claude/claudeLocalLauncher.test.ts
2449
+ M cli/src/claude/claudeLocalLauncher.ts
2450
+ M cli/src/claude/claudeRemoteLauncher.ts
2451
+ M cli/src/claude/loop.ts
2452
+ M cli/src/claude/runClaude.ts
2453
+ M cli/src/claude/session.test.ts
2454
+ M cli/src/claude/session.ts
2455
+ M cli/src/codex/codexMcpClient.test.ts
2456
+ M cli/src/codex/runCodex.ts
2457
+ A cli/src/codex/utils/codexAcpLifecycle.test.ts
2458
+ A cli/src/codex/utils/codexAcpLifecycle.ts
2459
+ M cli/src/gemini/runGemini.ts
2460
+ M cli/src/test-setup.ts
2461
+ A cli/src/utils/createSessionMetadata.test.ts
2462
+ M cli/src/utils/createSessionMetadata.ts
2463
+ A cli/src/utils/waitForMessagesOrPending.test.ts
2464
+ A cli/src/utils/waitForMessagesOrPending.ts
2465
+
2466
+ commit 3fc704424e8da38264e7fc10227519121b572db3
2467
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
2468
+ AuthorDate: 2026-01-22
2469
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
2470
+ CommitDate: 2026-01-22
2471
+
2472
+ feat(app): add pending queue, discard markers, and capabilities
2473
+
2474
+ - Replace broken pending-* socket events with encrypted messageQueueV1 in session metadata\n- Prefer queueing when agent not ready/offline/controlledByUser to avoid switch bounce\n- Render committed-but-discarded messages via metadata localId markers\n- Use durable lifecycle edges to drive thinking transitions (less reliance on volatile keepalive)\n- Refactor detect-cli plumbing into detect-capabilities cache/hook
2475
+
2476
+ M expo-app/INACTIVE_SESSION_RESUME.md
2477
+ M expo-app/sources/-session/SessionView.tsx
2478
+ M expo-app/sources/__tests__/app/new/pick/machine.presentation.test.ts
2479
+ M expo-app/sources/app/(app)/machine/[id].tsx
2480
+ M expo-app/sources/app/(app)/new/NewSessionWizard.tsx
2481
+ M expo-app/sources/app/(app)/new/index.tsx
2482
+ M expo-app/sources/app/(app)/new/pick/machine.tsx
2483
+ M expo-app/sources/components/MessageView.tsx
2484
+ M expo-app/sources/components/PendingMessagesModal.tsx
2485
+ M expo-app/sources/components/machine/DetectedClisList.tsx
2486
+ M expo-app/sources/components/machine/DetectedClisModal.tsx
2487
+ M expo-app/sources/components/newSession/MachineCliGlyphs.tsx
2488
+ M expo-app/sources/hooks/useCLIDetection.ts
2489
+ A expo-app/sources/hooks/useMachineCapabilitiesCache.ts
2490
+ D expo-app/sources/hooks/useMachineDetectCliCache.ts
2491
+ M expo-app/sources/sync/apiTypes.ts
2492
+ A expo-app/sources/sync/capabilitiesProtocol.ts
2493
+ A expo-app/sources/sync/controlledByUserTransitions.test.ts
2494
+ A expo-app/sources/sync/controlledByUserTransitions.ts
2495
+ D expo-app/sources/sync/detectCliResponse.test.ts
2496
+ D expo-app/sources/sync/detectCliResponse.ts
2497
+ A expo-app/sources/sync/messageQueueV1.test.ts
2498
+ A expo-app/sources/sync/messageQueueV1.ts
2499
+ M expo-app/sources/sync/ops.ts
2500
+ M expo-app/sources/sync/settings.spec.ts
2501
+ M expo-app/sources/sync/storage.ts
2502
+ A expo-app/sources/sync/storageTypes.discardedCommitted.test.ts
2503
+ M expo-app/sources/sync/storageTypes.ts
2504
+ A expo-app/sources/sync/submitMode.test.ts
2505
+ A expo-app/sources/sync/submitMode.ts
2506
+ M expo-app/sources/sync/sync.ts
2507
+ M expo-app/sources/text/translations/ca.ts
2508
+ M expo-app/sources/text/translations/en.ts
2509
+ M expo-app/sources/text/translations/es.ts
2510
+ M expo-app/sources/text/translations/it.ts
2511
+ M expo-app/sources/text/translations/ja.ts
2512
+ M expo-app/sources/text/translations/pl.ts
2513
+ M expo-app/sources/text/translations/pt.ts
2514
+ M expo-app/sources/text/translations/ru.ts
2515
+ M expo-app/sources/text/translations/zh-Hans.ts
2516
+ A expo-app/sources/utils/discardedCommittedMessages.test.ts
2517
+ A expo-app/sources/utils/discardedCommittedMessages.ts
2518
+ A expo-app/sources/utils/sessionUtils.test.ts
2519
+ M expo-app/sources/utils/sessionUtils.ts
2520
+
2521
+ commit 49893dd7d16a82a90d41f8d43450d6e9099e9002
2522
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
2523
+ AuthorDate: 2026-01-22
2524
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
2525
+ CommitDate: 2026-01-22
2526
+
2527
+ fix(terminal): harden remote→local switching input
2528
+
2529
+ Problem: users report terminal corruption / sluggish input after switching from remote→local, often after spamming space to trigger the switch.
2530
+
2531
+ Change:
2532
+ - Add a pure keypress interpreter and support Ctrl+T as an immediate ‘switch to terminal’ shortcut (keeps double-space behavior).
2533
+ - Add a small stdin cleanup helper to briefly drain buffered input after the Ink UI unmounts, then pause stdin.
2534
+ - Add focused unit tests for key interpretation and stdin cleanup.
2535
+
2536
+ Why:
2537
+ - Avoid leaving stdin in an unexpected state and prevent buffered ‘space spam’ from leaking into the next interactive process.
2538
+
2539
+ Refs: slopus/happy#301, slopus/happy-cli#124
2540
+
2541
+ A cli/src/ui/ink/RemoteModeDisplay.test.ts
2542
+ M cli/src/ui/ink/RemoteModeDisplay.tsx
2543
+ A cli/src/utils/terminalStdinCleanup.test.ts
2544
+ A cli/src/utils/terminalStdinCleanup.ts
2545
+
2546
+ commit 0126667539b67a34fc4aa8106d9647df8d135ff2
2547
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
2548
+ AuthorDate: 2026-01-22
2549
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
2550
+ CommitDate: 2026-01-22
2551
+
2552
+ fix(claude): forward signals to binary child process
2553
+
2554
+ Problem: when Claude is installed as a binary (e.g. Homebrew), the launcher can exit during mode switches but the Claude child may survive as an orphan and keep reading from inherited stdin, causing ‘competing processes’/terminal corruption symptoms.
2555
+
2556
+ Change:
2557
+ - Add attachChildSignalForwarding() and use it in the binary-spawn path so SIGTERM/SIGINT (and SIGHUP on non-Windows) are forwarded to the child.
2558
+ - Add a lightweight unit test that asserts which signals are registered and that the child receives forwarded kills.
2559
+
2560
+ Why:
2561
+ - Ensures mode-switch termination actually terminates the process that owns stdin, preventing multiple readers.
2562
+
2563
+ Refs: slopus/happy#301, slopus/happy-cli#124
2564
+
2565
+ M cli/scripts/claude_version_utils.cjs
2566
+ A cli/src/scripts/claude_version_utils.signalForwarding.test.ts
2567
+
2568
+ commit 39c7b8a56b3221f64922ccb9116cdaa9f5826ade
2569
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
2570
+ AuthorDate: 2026-01-22
2571
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
2572
+ CommitDate: 2026-01-22
2573
+
2574
+ refactor(app): rename tmux/message-send settings under session
2575
+
2576
+ - Rename terminal tmux settings keys to session* (and migrate old keys in settingsParse)\n- Rename messageSendMode to sessionMessageSendMode\n- Add unified Session settings screen combining message sending + tmux\n- Keep /settings/terminal and /settings/message-sending as aliases
2577
+
2578
+ M expo-app/sources/app/(app)/machine/[id].tsx
2579
+ M expo-app/sources/app/(app)/new/index.tsx
2580
+ M expo-app/sources/app/(app)/settings/message-sending.tsx
2581
+ A expo-app/sources/app/(app)/settings/session.tsx
2582
+ M expo-app/sources/app/(app)/settings/terminal.tsx
2583
+ M expo-app/sources/components/SettingsView.tsx
2584
+ M expo-app/sources/sync/settings.spec.ts
2585
+ M expo-app/sources/sync/settings.ts
2586
+ M expo-app/sources/sync/sync.ts
2587
+ M expo-app/sources/sync/terminalSettings.spec.ts
2588
+ M expo-app/sources/sync/terminalSettings.ts
2589
+
2590
+ commit fcec6c311b6bc9e71b38fcf7713fb07af4a8b820
2591
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
2592
+ AuthorDate: 2026-01-22
2593
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
2594
+ CommitDate: 2026-01-22
2595
+
2596
+ feat(sync): add cross-device unread markers
2597
+
2598
+ Store read markers in encrypted session metadata (readStateV1) so unread state syncs across devices without relying on local MMKV.\n\nUnread is computed from session.seq + pending queue activity timestamps, and SessionView marks the session as viewed on focus and when new activity arrives while focused (debounced).\n\nAdds computeHasUnreadActivity tests and updates useHasUnreadMessages to use metadata instead of message lists.
2599
+
2600
+ M expo-app/sources/-session/SessionView.tsx
2601
+ M expo-app/sources/sync/storage.ts
2602
+ M expo-app/sources/sync/storageTypes.ts
2603
+ M expo-app/sources/sync/sync.ts
2604
+ M expo-app/sources/sync/unread.test.ts
2605
+ M expo-app/sources/sync/unread.ts
2606
+
2607
+ commit 8c16ee8f9cef04c3ae515ab2ebcb12b5ef317759
2608
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
2609
+ AuthorDate: 2026-01-22
2610
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
2611
+ CommitDate: 2026-01-22
2612
+
2613
+ fix(auth): surface auth failures and gate unauth routes
2614
+
2615
+ Why
2616
+ - Some upstream error payloads include usage.service_tier=null. Our Zod schema required a string, so we dropped the whole message during normalization, which could hide critical auth errors (e.g. 401 OAuth expired) in the app.
2617
+ - Users could deep-link into protected routes (e.g. /new) while unauthenticated, leading to confusing screens that then fail later.
2618
+
2619
+ What
2620
+ - Accept service_tier as nullish so messages are not dropped.
2621
+ - Add an auth guard in the (app) layout that redirects unauthenticated users to / unless they are on public routes (index, restore).
2622
+ - Add a small routing helper with unit tests.
2623
+ - Add root package.json test/typecheck scripts so happys stack test/typecheck can run in the monorepo context (delegates to expo-app).
2624
+
2625
+ M expo-app/sources/app/(app)/_layout.tsx
2626
+ A expo-app/sources/auth/authRouting.test.ts
2627
+ A expo-app/sources/auth/authRouting.ts
2628
+ M expo-app/sources/sync/typesRaw.spec.ts
2629
+ M expo-app/sources/sync/typesRaw.ts
2630
+ M package.json
2631
+
2632
+ commit 320a89e19ca060f23f67c0283cb075b1fd68635c
2633
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
2634
+ AuthorDate: 2026-01-22
2635
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
2636
+ CommitDate: 2026-01-22
2637
+
2638
+ test(happy): run cli and server checks from root scripts
2639
+
2640
+ The Happy monorepo includes expo-app, cli, and server subprojects, but the root scripts only ran expo-app checks.\n\n- Expand "test" to run expo-app + cli + server suites\n- Expand "typecheck" to include cli typecheck and server TS build\n\nThis keeps existing behavior for expo-app and ensures new cli/server tests are exercised when running `happys test/typecheck happy`.
2641
+
2642
+ M package.json
2643
+
2644
+ commit 3b3609fed43448255148dbbfcaa9c656f35703a3
2645
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
2646
+ AuthorDate: 2026-01-22
2647
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
2648
+ CommitDate: 2026-01-22
2649
+
2650
+ fix(rpc): add structured code for missing RPC methods
2651
+
2652
+ Server now returns an explicit "RPC_METHOD_NOT_AVAILABLE" errorCode alongside the legacy error string so newer clients can detect this case without brittle string matching.\n\nClient-side changes:\n- Propagate server error + errorCode via thrown Error (rpcErrorCode)\n- sessionArchive fallback prefers rpcErrorCode and falls back to an exact legacy message match for older servers\n\nTests:\n- server rpcHandler includes errorCode\n- app rpcErrors + sessionArchive behavior
2653
+
2654
+ M expo-app/sources/sync/apiSocket.ts
2655
+ A expo-app/sources/sync/ops.sessionArchive.test.ts
2656
+ M expo-app/sources/sync/ops.ts
2657
+ A expo-app/sources/sync/rpcErrors.test.ts
2658
+ A expo-app/sources/sync/rpcErrors.ts
2659
+ A server/sources/app/api/socket/rpcHandler.spec.ts
2660
+ M server/sources/app/api/socket/rpcHandler.ts
2661
+
2662
+ commit 0e2c7928f24cd0791c77060e170b0e7a84b847d3
2663
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
2664
+ AuthorDate: 2026-01-22
2665
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
2666
+ CommitDate: 2026-01-22
2667
+
2668
+ fix(scanner): tolerate onMessage exceptions
2669
+
2670
+ createSessionScanner now catches exceptions thrown by the consumer `onMessage` callback and logs them instead of letting the scanner crash or trigger InvalidateSync retry/backoff loops.\n\nAlso documents InvalidateSync coalescing + failure semantics explicitly (invalidateAndAwait always resolves).\n\nTest: sessionScanner logs and continues when onMessage throws.
2671
+
2672
+ A cli/src/claude/utils/sessionScanner.onMessageErrors.test.ts
2673
+ M cli/src/claude/utils/sessionScanner.ts
2674
+ M cli/src/utils/sync.ts
2675
+
2676
+ commit 7fbe1f1cc7273821a45986cfc6ef4f2d7eb32eec
2677
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
2678
+ AuthorDate: 2026-01-22
2679
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
2680
+ CommitDate: 2026-01-22
2681
+
2682
+ fix(permission): avoid no-op permissionModeUpdatedAt bumps
2683
+
2684
+ Prevent unnecessary permission metadata churn by only bumping permissionModeUpdatedAt when the effective permission mode actually changes.\n\n- Claude: Session.setLastPermissionMode is a no-op when mode is unchanged\n- Codex/Gemini: reuse shared helper to conditionally update session metadata\n\nWhy: the UI merges permission mode based on permissionModeUpdatedAt, so repeated no-op bumps can incorrectly override the user's latest selection.\n\nTests: add coverage for the no-op behavior.
2685
+
2686
+ M cli/src/claude/session.test.ts
2687
+ M cli/src/claude/session.ts
2688
+ M cli/src/codex/runCodex.ts
2689
+ M cli/src/gemini/runGemini.ts
2690
+ A cli/src/utils/permissionModeMetadata.test.ts
2691
+ A cli/src/utils/permissionModeMetadata.ts
2692
+
2693
+ commit 2026fbab5cb33d17d466ac7b81e811169d7fe7ef
2694
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
2695
+ AuthorDate: 2026-01-22
2696
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
2697
+ CommitDate: 2026-01-22
2698
+
2699
+ fix(claude): accept -c as continue flag
2700
+
2701
+ Claude local runner now treats `-c` as equivalent to `--continue` when detecting user-provided session control flags.
2702
+
2703
+ M cli/src/claude/claudeLocal.ts
2704
+
2705
+ commit ee0bec2a0b90bb277db7c3f04607de867b57bf33
2706
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
2707
+ AuthorDate: 2026-01-22
2708
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
2709
+ CommitDate: 2026-01-22
2710
+
2711
+ Delete INACTIVE_SESSION_RESUME.md
2712
+
2713
+ D expo-app/INACTIVE_SESSION_RESUME.md
2714
+
2715
+ commit 84df0d2605133a165a381dd6ae65507cfda23795
2716
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
2717
+ AuthorDate: 2026-01-22
2718
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
2719
+ CommitDate: 2026-01-22
2720
+
2721
+ fix(expo-app): stabilize postinstall and libsodium patches
2722
+
2723
+ - Replace inline postinstall command with a dedicated script (expo-app/tools/postinstall.mjs)\n- Run patch-package from the repo root to support Yarn workspace hoisting\n- Add a patch for libsodium-wrappers@0.7.16 to restore missing dist/modules-esm/libsodium.mjs\n- Remove the obsolete @more-tech/react-native-libsodium 1.5.5 patch (package is now 1.5.6 and already avoids folly_version)\n- Tighten TypeScript typing for the web libsodium adapter\n\nThis makes installs more reliable across hoisting layouts and RN/Expo versions.
2724
+
2725
+ M expo-app/package.json
2726
+ D expo-app/patches/@more-tech+react-native-libsodium+1.5.5.patch
2727
+ A expo-app/patches/libsodium-wrappers+0.7.16.patch
2728
+ M expo-app/sources/encryption/libsodium.lib.web.ts
2729
+ A expo-app/tools/postinstall.mjs
2730
+ M yarn.lock
2731
+
2732
+ commit 544f9711b6cfe195ed56d7426e326b54189dc2be
2733
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
2734
+ AuthorDate: 2026-01-23
2735
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
2736
+ CommitDate: 2026-01-23
2737
+
2738
+ fix(ui): respond to plan/question tools via session RPC
2739
+
2740
+ - ExitPlanMode: approve/reject via permission RPC (no extra chat message)
2741
+
2742
+ - AskUserQuestion: send answers via new session RPC interaction.respond; fallback to deny+sendMessage when RPC unsupported
2743
+
2744
+ - Add unit tests covering both tool views
2745
+
2746
+ A expo-app/sources/components/tools/views/AskUserQuestionView.test.ts
2747
+ M expo-app/sources/components/tools/views/AskUserQuestionView.tsx
2748
+ A expo-app/sources/components/tools/views/ExitPlanToolView.test.ts
2749
+ M expo-app/sources/components/tools/views/ExitPlanToolView.tsx
2750
+ M expo-app/sources/sync/ops.ts
2751
+
2752
+ commit 8b3f39f226644bd72269d484a13bb8faa9730d13
2753
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
2754
+ AuthorDate: 2026-01-23
2755
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
2756
+ CommitDate: 2026-01-23
2757
+
2758
+ feat(cli): add interaction.respond for AskUserQuestion
2759
+
2760
+ - Register session RPC interaction.respond in Claude remote launcher
2761
+
2762
+ - Approve tool call and inject tool_result into Claude prompt stream
2763
+
2764
+ - Expose sender hook from claudeRemote for mid-turn tool_result injection
2765
+
2766
+ - Add unit test for interaction respond helper
2767
+
2768
+ M cli/src/claude/claudeRemote.ts
2769
+ M cli/src/claude/claudeRemoteLauncher.ts
2770
+ A cli/src/claude/utils/interactionRespond.test.ts
2771
+ A cli/src/claude/utils/interactionRespond.ts
2772
+ M cli/src/claude/utils/permissionHandler.ts
2773
+
2774
+ commit ed4bc007308af4c1c4e0ac6f67d58adcc54fe37b
2775
+ Author: Ordinary <Ordinary@zjgsdx.edu.cn>
2776
+ AuthorDate: 2025-12-24
2777
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
2778
+ CommitDate: 2026-01-23
2779
+
2780
+ feat: add execpolicy approval option for Codex
2781
+
2782
+ M expo-app/sources/components/tools/PermissionFooter.tsx
2783
+ M expo-app/sources/sync/ops.ts
2784
+ M expo-app/sources/sync/reducer/reducer.ts
2785
+ M expo-app/sources/sync/storageTypes.ts
2786
+ M expo-app/sources/sync/typesMessage.ts
2787
+ M expo-app/sources/sync/typesRaw.ts
2788
+ M expo-app/sources/text/translations/ca.ts
2789
+ M expo-app/sources/text/translations/en.ts
2790
+ M expo-app/sources/text/translations/es.ts
2791
+ M expo-app/sources/text/translations/pl.ts
2792
+ M expo-app/sources/text/translations/pt.ts
2793
+ M expo-app/sources/text/translations/ru.ts
2794
+ M expo-app/sources/text/translations/zh-Hans.ts
2795
+
2796
+ commit 78adc9c58811ae4178823ddb6418121a0ecb34a7
2797
+ Author: Ordinary <Ordinary@zjgsdx.edu.cn>
2798
+ AuthorDate: 2025-12-24
2799
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
2800
+ CommitDate: 2026-01-23
2801
+
2802
+ feat(codex): support execpolicy approvals and MCP tool calls
2803
+
2804
+ M cli/src/agent/acp/AcpBackend.ts
2805
+ M cli/src/api/types.ts
2806
+ M cli/src/codex/codexMcpClient.ts
2807
+ M cli/src/codex/runCodex.ts
2808
+ M cli/src/utils/BasePermissionHandler.ts
2809
+
2810
+ commit 9dfa09bef8d8d6a9b791c91e2cb1fe49c4204806
2811
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
2812
+ AuthorDate: 2026-01-22
2813
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
2814
+ CommitDate: 2026-01-23
2815
+
2816
+ fix(i18n): add Codex execpolicy button text
2817
+
2818
+ Add missing codex.permissions.yesAlwaysAllowCommand translations for Italian and Japanese to keep the translation schema complete.
2819
+
2820
+ M expo-app/sources/text/translations/it.ts
2821
+ M expo-app/sources/text/translations/ja.ts
2822
+
2823
+ commit 559d39da116dcbae4d9be05e55a23d9e79d44160
2824
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
2825
+ AuthorDate: 2026-01-22
2826
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
2827
+ CommitDate: 2026-01-23
2828
+
2829
+ fix(reducer): keep permission messages idempotent
2830
+
2831
+ Avoid marking permission tool messages as changed when AgentState.request arguments are unchanged. This prevents permission messages from being re-emitted on unrelated message updates while still allowing late-arriving fields (e.g. proposedExecpolicyAmendment) to update the existing message.
2832
+
2833
+ M expo-app/sources/sync/reducer/reducer.ts
2834
+
2835
+ commit cc3c711ae28e700c1d0b96485e0df06c5ac9978c
2836
+ Author: jio <g2gallardy@gmail.com>
2837
+ AuthorDate: 2026-01-18
2838
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
2839
+ CommitDate: 2026-01-23
2840
+
2841
+ fix: move claudeArgs to end of args array for slash command support
2842
+
2843
+ Slash commands like /help weren't working because the prompt wasn't at the end of the
2844
+ CLI args where Claude expects it.
2845
+
2846
+ M cli/src/claude/claudeLocal.ts
2847
+
2848
+ commit d06d5a833f8ed6fdcfe82ae6a829e20307a97532
2849
+ Author: Felix Berlakovich <felix@berlakovich.at>
2850
+ AuthorDate: 2026-01-19
2851
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
2852
+ CommitDate: 2026-01-23
2853
+
2854
+ Add signal forwarding to claudeLocal.ts
2855
+
2856
+ M cli/src/claude/claudeLocal.ts
2857
+
2858
+ commit 1b7cb3bfea86cb429d3e04b329595013a8590f3e
2859
+ Author: zhangkunyuan <zhangkunyuan@cmhi.chinamobile.com>
2860
+ AuthorDate: 2025-11-20
2861
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
2862
+ CommitDate: 2026-01-23
2863
+
2864
+ feat: handle /clear command as session reset in codex
2865
+
2866
+ M cli/src/claude/runClaude.ts
2867
+ M cli/src/codex/runCodex.ts
2868
+ M cli/src/parsers/specialCommands.ts
2869
+
2870
+ commit 332ab2b0cd93e30c1f8dae994bfa2c5d7e0dfbc9
2871
+ Author: Gershom Rogers <gershomrogers@gmail.com>
2872
+ AuthorDate: 2026-01-11
2873
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
2874
+ CommitDate: 2026-01-23
2875
+
2876
+ fix(cli): improve abort error handling to reduce spurious error messages
2877
+
2878
+ - Detect DOMException/AbortError from Node.js spawn\n- Only show "Process exited unexpectedly" for genuine failures\n- Better error logging for debugging
2879
+
2880
+ M cli/src/claude/claudeRemoteLauncher.ts
2881
+
2882
+ commit e956463db3e216e89d832c4a5082a3583e81968d
2883
+ Author: Ordinary <Ordinary@zjgsdx.edu.cn>
2884
+ AuthorDate: 2025-12-24
2885
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
2886
+ CommitDate: 2026-01-23
2887
+
2888
+ fix: use runtime execPath for MCP bridge
2889
+
2890
+ M cli/src/codex/runCodex.ts
2891
+ M cli/src/gemini/runGemini.ts
2892
+ M cli/src/utils/spawnHappyCLI.ts
2893
+
2894
+ commit f0a7d8d0b40ccf97cce099e021810be8eedfc904
2895
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
2896
+ AuthorDate: 2026-01-23
2897
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
2898
+ CommitDate: 2026-01-23
2899
+
2900
+ fix(codex): use mcp tool call id for approvals
2901
+
2902
+ Prefer codex_mcp_tool_call_id over codex_call_id when deriving toolCallId for permission requests, and align execpolicy amendment caching with the same id when available.
2903
+
2904
+ Adds a small unit test for tool call id selection.
2905
+
2906
+ M cli/src/codex/codexMcpClient.test.ts
2907
+ M cli/src/codex/codexMcpClient.ts
2908
+
2909
+ commit da620b6865adfba9e3b4d0a0330404c603fdab8d
2910
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
2911
+ AuthorDate: 2026-01-22
2912
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
2913
+ CommitDate: 2026-01-23
2914
+
2915
+ feat(server): add full/light flavors with sqlite migrations
2916
+
2917
+ (cherry picked from commit b21928c5e779f7691cb06a240cfab5f83f167809)
2918
+
2919
+ M server/.gitignore
2920
+ M server/README.md
2921
+ M server/package.json
2922
+ A server/prisma/sqlite/migrations/20260122190000_baseline/migration.sql
2923
+ A server/prisma/sqlite/migrations/migration_lock.toml
2924
+ A server/prisma/sqlite/schema.prisma
2925
+ A server/scripts/dev.full.ts
2926
+ A server/scripts/dev.fullArgs.spec.ts
2927
+ A server/scripts/dev.fullArgs.ts
2928
+ A server/scripts/dev.light.ts
2929
+ A server/scripts/dev.lightPlan.spec.ts
2930
+ A server/scripts/dev.lightPlan.ts
2931
+ A server/scripts/generateSqliteSchema.spec.ts
2932
+ A server/scripts/generateSqliteSchema.ts
2933
+ A server/scripts/migrate.light.deploy.ts
2934
+ A server/scripts/migrate.light.new.ts
2935
+ A server/scripts/migrate.light.resolveBaseline.ts
2936
+ M server/sources/app/api/api.ts
2937
+ M server/sources/app/api/routes/userRoutes.ts
2938
+ A server/sources/app/api/uiConfig.spec.ts
2939
+ A server/sources/app/api/uiConfig.ts
2940
+ M server/sources/app/api/utils/enableErrorHandlers.ts
2941
+ A server/sources/app/api/utils/enableOptionalStatics.ts
2942
+ A server/sources/app/api/utils/enablePublicFiles.ts
2943
+ A server/sources/app/api/utils/enableServeUi.ts
2944
+ M server/sources/app/presence/timeout.ts
2945
+ A server/sources/flavors/light/env.spec.ts
2946
+ A server/sources/flavors/light/env.ts
2947
+ A server/sources/flavors/light/files.spec.ts
2948
+ A server/sources/flavors/light/files.ts
2949
+ A server/sources/main.light.ts
2950
+ M server/sources/main.ts
2951
+ A server/sources/startServer.ts
2952
+ M server/sources/storage/db.ts
2953
+ M server/sources/storage/files.ts
2954
+ M server/sources/storage/processImage.spec.ts
2955
+ M server/sources/storage/uploadImage.ts
2956
+ A server/sources/utils/processHandlers.ts
2957
+
2958
+ commit 893ce7af5df079be26925ff7a7c5baf6e9d35088
2959
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
2960
+ AuthorDate: 2026-01-23
2961
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
2962
+ CommitDate: 2026-01-23
2963
+
2964
+ fix(expo-app): avoid hooks order violation on redirect
2965
+
2966
+ A expo-app/sources/app/(app)/_layout.test.ts
2967
+ M expo-app/sources/app/(app)/_layout.tsx
2968
+
2969
+ commit 7afbc9a2decd82d9283025eaab20b502b7ff9d3f
2970
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
2971
+ AuthorDate: 2026-01-23
2972
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
2973
+ CommitDate: 2026-01-23
2974
+
2975
+ fix(expo-app): persist resumeSessionId and harden clipboard paste
2976
+
2977
+ M expo-app/sources/app/(app)/new/pick/resume.tsx
2978
+ M expo-app/sources/sync/persistence.test.ts
2979
+ M expo-app/sources/sync/persistence.ts
2980
+ A expo-app/sources/utils/clipboard.test.ts
2981
+ A expo-app/sources/utils/clipboard.ts
2982
+
2983
+ commit 9a13879b753a5cb0c3c31aaae99e56b136a51e7a
2984
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
2985
+ AuthorDate: 2026-01-23
2986
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
2987
+ CommitDate: 2026-01-23
2988
+
2989
+ fix(expo-app): avoid false homeDir prefix matches
2990
+
2991
+ M expo-app/sources/sync/sessionListViewData.test.ts
2992
+ M expo-app/sources/sync/sessionListViewData.ts
2993
+
2994
+ commit c107a779e07d3f934178b6b6c21d5a650952fb99
2995
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
2996
+ AuthorDate: 2026-01-23
2997
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
2998
+ CommitDate: 2026-01-23
2999
+
3000
+ fix(expo-app): avoid stuck loading in capabilities cache
3001
+
3002
+ A expo-app/sources/hooks/useMachineCapabilitiesCache.hook.test.ts
3003
+ M expo-app/sources/hooks/useMachineCapabilitiesCache.ts
3004
+
3005
+ commit 35c0974eff1fdd934ddc71f1e07a57a6dc0c3206
3006
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
3007
+ AuthorDate: 2026-01-23
3008
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
3009
+ CommitDate: 2026-01-23
3010
+
3011
+ refactor(expo-app): remove dead code and dedupe types
3012
+
3013
+ M expo-app/sources/app/(app)/settings/session.tsx
3014
+ M expo-app/sources/components/PendingMessagesModal.tsx
3015
+ M expo-app/sources/hooks/useCLIDetection.ts
3016
+
3017
+ commit b319d85e72c3495255b1407450886d9aaa462c2e
3018
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
3019
+ AuthorDate: 2026-01-23
3020
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
3021
+ CommitDate: 2026-01-23
3022
+
3023
+ fix(i18n): correct Spanish resumable label
3024
+
3025
+ M expo-app/sources/text/translations/es.ts
3026
+
3027
+ commit 46186162ae142634423c7530c485e09cba719cba
3028
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
3029
+ AuthorDate: 2026-01-23
3030
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
3031
+ CommitDate: 2026-01-23
3032
+
3033
+ test(happy-cli): fix timer cleanup and MCP schema mocks
3034
+
3035
+ M cli/src/codex/codexMcpClient.test.ts
3036
+ M cli/src/ui/logger.test.ts
3037
+ M cli/src/utils/terminalStdinCleanup.test.ts
3038
+
3039
+ commit ac5bf2f3abfa54b992c42f7249084dab4424a4c7
3040
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
3041
+ AuthorDate: 2026-01-23
3042
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
3043
+ CommitDate: 2026-01-23
3044
+
3045
+ test(happy-cli): reset modules for runtime override
3046
+
3047
+ M cli/src/utils/spawnHappyCLI.invocation.test.ts
3048
+
3049
+ commit 947b8d1814fbbaa486c0e8a978418ca3a7759a8b
3050
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
3051
+ AuthorDate: 2026-01-23
3052
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
3053
+ CommitDate: 2026-01-23
3054
+
3055
+ refactor(expo-app): remove unused optimistic flag
3056
+
3057
+ M expo-app/sources/utils/sessionUtils.ts
3058
+
3059
+ commit 8cc823d1ba2d95896633fe34ab39654e04a52cb6
3060
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
3061
+ AuthorDate: 2026-01-23
3062
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
3063
+ CommitDate: 2026-01-23
3064
+
3065
+ fix(server-light): validate PORT and normalize paths
3066
+
3067
+ M server/sources/flavors/light/env.spec.ts
3068
+ M server/sources/flavors/light/env.ts
3069
+ M server/sources/flavors/light/files.spec.ts
3070
+ M server/sources/flavors/light/files.ts
3071
+
3072
+ commit 8cb995a1abe159525864088b6b4736a5e91fc0e6
3073
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
3074
+ AuthorDate: 2026-01-23
3075
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
3076
+ CommitDate: 2026-01-23
3077
+
3078
+ test(server): fix schema generation sort regex
3079
+
3080
+ M server/scripts/generateSqliteSchema.spec.ts
3081
+
3082
+ commit 04d9c60ef8e776c7510f6dd46570774bb3bf2b7f
3083
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
3084
+ AuthorDate: 2026-01-23
3085
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
3086
+ CommitDate: 2026-01-23
3087
+
3088
+ refactor(happy-cli): remove unreachable gemini error branch
3089
+
3090
+ M cli/src/gemini/utils/formatGeminiErrorForUi.ts
3091
+
3092
+ commit 2616e5e192538bd273b7fb05d265067caf755167
3093
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
3094
+ AuthorDate: 2026-01-23
3095
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
3096
+ CommitDate: 2026-01-23
3097
+
3098
+ fix(server): handle missing UI index.html
3099
+
3100
+ A server/sources/app/api/utils/enableServeUi.spec.ts
3101
+ M server/sources/app/api/utils/enableServeUi.ts
3102
+
3103
+ commit 91136536602426430f50ad31bc5dc91a268f5a87
3104
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
3105
+ AuthorDate: 2026-01-23
3106
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
3107
+ CommitDate: 2026-01-23
3108
+
3109
+ fix(server): make build typecheck tests
3110
+
3111
+ M server/package.json
3112
+ M server/sources/flavors/light/env.spec.ts
3113
+ M server/sources/flavors/light/files.spec.ts
3114
+
3115
+ commit 0dd19e7fb2578a3f46f4a6cd9b5dc58f7e13e0e6
3116
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
3117
+ AuthorDate: 2026-01-23
3118
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
3119
+ CommitDate: 2026-01-23
3120
+
3121
+ fix(expo-app): default codex resume spec to empty
3122
+
3123
+ M expo-app/sources/sync/ops.ts
3124
+ M expo-app/sources/sync/settings.spec.ts
3125
+ M expo-app/sources/sync/settings.ts
3126
+
3127
+ commit 229e5fc3657000e08516acc4e5382a773598bb00
3128
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
3129
+ AuthorDate: 2026-01-23
3130
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
3131
+ CommitDate: 2026-01-23
3132
+
3133
+ fix(server-light): use file URLs for sqlite db
3134
+
3135
+ M server/sources/flavors/light/env.spec.ts
3136
+ M server/sources/flavors/light/env.ts
3137
+
3138
+ commit e6f597e436c583b5deb111e365827ad165f51852
3139
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
3140
+ AuthorDate: 2026-01-23
3141
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
3142
+ CommitDate: 2026-01-23
3143
+
3144
+ fix(server): fix server-light typecheck
3145
+
3146
+ M server/sources/storage/files.ts
3147
+ M server/tsconfig.json
3148
+
3149
+ commit 1564e800e355e94beb66d0493a5f704011f2548e
3150
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
3151
+ AuthorDate: 2026-01-23
3152
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
3153
+ CommitDate: 2026-01-23
3154
+
3155
+ fix(server): relax module settings for typecheck
3156
+
3157
+ M server/tsconfig.json
3158
+
3159
+ commit 8ab11f2788c1c3a2422d62f306b65eaf951f361a
3160
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
3161
+ AuthorDate: 2026-01-23
3162
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
3163
+ CommitDate: 2026-01-23
3164
+
3165
+ fix(happy-cli): parse CLI versions from full output
3166
+
3167
+ M cli/src/modules/common/capabilities/snapshots/cliSnapshot.ts
3168
+
3169
+ commit 21e096e9454e4ab8ed684aa90eb544e8dbacb14f
3170
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
3171
+ AuthorDate: 2026-01-23
3172
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
3173
+ CommitDate: 2026-01-23
3174
+
3175
+ fix(i18n): localize session settings item
3176
+
3177
+ M expo-app/sources/components/SettingsView.tsx
3178
+ M expo-app/sources/text/translations/ca.ts
3179
+ M expo-app/sources/text/translations/en.ts
3180
+ M expo-app/sources/text/translations/es.ts
3181
+ M expo-app/sources/text/translations/it.ts
3182
+ M expo-app/sources/text/translations/ja.ts
3183
+ M expo-app/sources/text/translations/pl.ts
3184
+ M expo-app/sources/text/translations/pt.ts
3185
+ M expo-app/sources/text/translations/ru.ts
3186
+ M expo-app/sources/text/translations/zh-Hans.ts
3187
+
3188
+ commit 7ca9e93196d6e6cf3eb30415ab0c692d2a05cff2
3189
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
3190
+ AuthorDate: 2026-01-23
3191
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
3192
+ CommitDate: 2026-01-23
3193
+
3194
+ fix(i18n): translate ExitPlanMode strings
3195
+
3196
+ M expo-app/sources/text/translations/ca.ts
3197
+ M expo-app/sources/text/translations/es.ts
3198
+ M expo-app/sources/text/translations/it.ts
3199
+ M expo-app/sources/text/translations/ja.ts
3200
+ M expo-app/sources/text/translations/pl.ts
3201
+ M expo-app/sources/text/translations/pt.ts
3202
+ M expo-app/sources/text/translations/ru.ts
3203
+ M expo-app/sources/text/translations/zh-Hans.ts
3204
+
3205
+ commit c4a81947f00288a00d1653835343015761503346
3206
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
3207
+ AuthorDate: 2026-01-23
3208
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
3209
+ CommitDate: 2026-01-23
3210
+
3211
+ fix(i18n): localize search error
3212
+
3213
+ M expo-app/sources/app/(app)/friends/search.tsx
3214
+ A expo-app/sources/hooks/useSearch.hook.test.ts
3215
+ M expo-app/sources/hooks/useSearch.ts
3216
+
3217
+ commit 208f0222a997dd9f9dd2ec8ed7eef9dcb91b842a
3218
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
3219
+ AuthorDate: 2026-01-23
3220
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
3221
+ CommitDate: 2026-01-23
3222
+
3223
+ fix(i18n): localize Codex resume dialog
3224
+
3225
+ M expo-app/sources/app/(app)/new/index.tsx
3226
+ M expo-app/sources/text/translations/ca.ts
3227
+ M expo-app/sources/text/translations/en.ts
3228
+ M expo-app/sources/text/translations/es.ts
3229
+ M expo-app/sources/text/translations/it.ts
3230
+ M expo-app/sources/text/translations/ja.ts
3231
+ M expo-app/sources/text/translations/pl.ts
3232
+ M expo-app/sources/text/translations/pt.ts
3233
+ M expo-app/sources/text/translations/ru.ts
3234
+ M expo-app/sources/text/translations/zh-Hans.ts
3235
+
3236
+ commit 02ad6b4a8352635f173dfdb1bf96109135255d58
3237
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
3238
+ AuthorDate: 2026-01-23
3239
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
3240
+ CommitDate: 2026-01-23
3241
+
3242
+ fix(i18n): move openMachine to connect scope
3243
+
3244
+ M expo-app/sources/app/(app)/new/index.tsx
3245
+ M expo-app/sources/text/translations/ca.ts
3246
+ M expo-app/sources/text/translations/es.ts
3247
+ M expo-app/sources/text/translations/it.ts
3248
+ M expo-app/sources/text/translations/ja.ts
3249
+ M expo-app/sources/text/translations/pl.ts
3250
+ M expo-app/sources/text/translations/pt.ts
3251
+ M expo-app/sources/text/translations/ru.ts
3252
+ M expo-app/sources/text/translations/zh-Hans.ts
3253
+
3254
+ commit ce42bf56d7b682929ce1022293c8cbaa78918711
3255
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
3256
+ AuthorDate: 2026-01-23
3257
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
3258
+ CommitDate: 2026-01-23
3259
+
3260
+ fix(web): correct libsodium wrapper typing
3261
+
3262
+ M expo-app/sources/encryption/libsodium.lib.web.ts
3263
+
3264
+ commit f0417ca11ac5112ee9f9a38b6d0b3bdbf644749b
3265
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
3266
+ AuthorDate: 2026-01-23
3267
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
3268
+ CommitDate: 2026-01-23
3269
+
3270
+ fix(web): keep libsodium wrapper namespace typing
3271
+
3272
+ M expo-app/sources/encryption/libsodium.lib.web.ts
3273
+
3274
+ commit b6d3874bf175911f2dea935203994ce6027d6ad1
3275
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
3276
+ AuthorDate: 2026-01-23
3277
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
3278
+ CommitDate: 2026-01-23
3279
+
3280
+ fix(settings): include Codex resume in master experiment toggle
3281
+
3282
+ M expo-app/sources/app/(app)/settings/features.tsx
3283
+
3284
+ commit a4d7faba961f201272071834324f270be4ad93e7
3285
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
3286
+ AuthorDate: 2026-01-23
3287
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
3288
+ CommitDate: 2026-01-23
3289
+
3290
+ fix(i18n): localize session error fallbacks
3291
+
3292
+ M expo-app/sources/-session/SessionView.tsx
3293
+ M expo-app/sources/text/translations/ca.ts
3294
+ M expo-app/sources/text/translations/en.ts
3295
+ M expo-app/sources/text/translations/es.ts
3296
+ M expo-app/sources/text/translations/it.ts
3297
+ M expo-app/sources/text/translations/ja.ts
3298
+ M expo-app/sources/text/translations/pl.ts
3299
+ M expo-app/sources/text/translations/pt.ts
3300
+ M expo-app/sources/text/translations/ru.ts
3301
+ M expo-app/sources/text/translations/zh-Hans.ts
3302
+
3303
+ commit 1ea2bddb8bbd522d3c3353ceb17f4f6eab40ade3
3304
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
3305
+ AuthorDate: 2026-01-23
3306
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
3307
+ CommitDate: 2026-01-23
3308
+
3309
+ test(server): validate processImage resize output
3310
+
3311
+ M server/sources/storage/processImage.spec.ts
3312
+
3313
+ commit 1e7d7f8a4747a5ac249d1b8b0738bb6d841e397a
3314
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
3315
+ AuthorDate: 2026-01-23
3316
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
3317
+ CommitDate: 2026-01-23
3318
+
3319
+ fix(server): keep light server running
3320
+
3321
+ M server/sources/main.light.ts
3322
+
3323
+ commit 61bf70183ebff64ec14716cee0ccf8c1b2a59ea4
3324
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
3325
+ AuthorDate: 2026-01-23
3326
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
3327
+ CommitDate: 2026-01-23
3328
+
3329
+ test(cli): set DEBUG before importing logger
3330
+
3331
+ M cli/src/ui/logger.test.ts
3332
+
3333
+ commit 61a18ac95e1701c5b5ec245053b39cba1a906d6e
3334
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
3335
+ AuthorDate: 2026-01-23
3336
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
3337
+ CommitDate: 2026-01-23
3338
+
3339
+ fix(tools): require permission id for ExitPlanMode actions
3340
+
3341
+ M expo-app/sources/components/tools/views/ExitPlanToolView.test.ts
3342
+ M expo-app/sources/components/tools/views/ExitPlanToolView.tsx
3343
+ M expo-app/sources/text/translations/ca.ts
3344
+ M expo-app/sources/text/translations/en.ts
3345
+ M expo-app/sources/text/translations/es.ts
3346
+ M expo-app/sources/text/translations/it.ts
3347
+ M expo-app/sources/text/translations/ja.ts
3348
+ M expo-app/sources/text/translations/pl.ts
3349
+ M expo-app/sources/text/translations/pt.ts
3350
+ M expo-app/sources/text/translations/ru.ts
3351
+ M expo-app/sources/text/translations/zh-Hans.ts
3352
+
3353
+ commit 5b36c9bf91c115079c627b8428065f2275ae71c9
3354
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
3355
+ AuthorDate: 2026-01-23
3356
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
3357
+ CommitDate: 2026-01-23
3358
+
3359
+ test(tools): avoid null permission in ExitPlanToolView tests
3360
+
3361
+ M expo-app/sources/components/tools/views/ExitPlanToolView.test.ts
3362
+
3363
+ commit b7f63e928e4f999ddb69a3b09071fb8b75306978
3364
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
3365
+ AuthorDate: 2026-01-23
3366
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
3367
+ CommitDate: 2026-01-23
3368
+
3369
+ fix(persistence): retry daemon state read when file appears
3370
+
3371
+ A cli/src/persistence.daemonState.test.ts
3372
+ M cli/src/persistence.ts
3373
+
3374
+ commit 55428fb0253c6cf2df46095083f6016734506f27
3375
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
3376
+ AuthorDate: 2026-01-23
3377
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
3378
+ CommitDate: 2026-01-23
3379
+
3380
+ fix(tools): alert when AskUserQuestion permission id is missing
3381
+
3382
+ M expo-app/sources/components/tools/views/AskUserQuestionView.test.ts
3383
+ M expo-app/sources/components/tools/views/AskUserQuestionView.tsx
3384
+
3385
+ commit dc6955f88abd46b63e56102ccd936b0f59ea41e4
3386
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
3387
+ AuthorDate: 2026-01-23
3388
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
3389
+ CommitDate: 2026-01-23
3390
+
3391
+ fix(terminal): prevent sessionId path traversal in attachment info
3392
+
3393
+ M cli/src/terminal/terminalAttachmentInfo.test.ts
3394
+ M cli/src/terminal/terminalAttachmentInfo.ts
3395
+
3396
+ commit bb685fbeff7bda2707f656c5d8c0831b95f874f9
3397
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
3398
+ AuthorDate: 2026-01-23
3399
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
3400
+ CommitDate: 2026-01-23
3401
+
3402
+ fix(terminal): clarify missing --happy-starting-mode value
3403
+
3404
+ M cli/src/terminal/headlessTmuxArgs.test.ts
3405
+ M cli/src/terminal/headlessTmuxArgs.ts
3406
+
3407
+ commit 5bcc7d20cd6b14c30f3c36cbbe73f7c4317d5d37
3408
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
3409
+ AuthorDate: 2026-01-23
3410
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
3411
+ CommitDate: 2026-01-23
3412
+
3413
+ test(utils): stabilize serverConnectionErrors retry count test
3414
+
3415
+ M cli/src/utils/serverConnectionErrors.test.ts
3416
+
3417
+ commit 82968aa8fe6c0b18c4aa8aac76d398dca3decea2
3418
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
3419
+ AuthorDate: 2026-01-23
3420
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
3421
+ CommitDate: 2026-01-23
3422
+
3423
+ fix(ui): send pending messages before closing modal
3424
+
3425
+ A expo-app/sources/components/PendingMessagesModal.test.ts
3426
+ M expo-app/sources/components/PendingMessagesModal.tsx
3427
+
3428
+ commit b7219c8bfe2b32b86e8fb35fb17bc8b977d7394f
3429
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
3430
+ AuthorDate: 2026-01-23
3431
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
3432
+ CommitDate: 2026-01-23
3433
+
3434
+ fix(ink): avoid async useInput handler
3435
+
3436
+ M cli/src/ui/ink/RemoteModeDisplay.tsx
3437
+
3438
+ commit d70a6f6669feef788c724d53f66c58041c68d561
3439
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
3440
+ AuthorDate: 2026-01-23
3441
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
3442
+ CommitDate: 2026-01-23
3443
+
3444
+ fix(claude): trim CLAUDE_CONFIG_DIR overrides
3445
+
3446
+ M cli/src/claude/utils/path.test.ts
3447
+ M cli/src/claude/utils/path.ts
3448
+
3449
+ commit 47f638b73fca8b4ca64edd08ddbe3e0f74344b43
3450
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
3451
+ AuthorDate: 2026-01-23
3452
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
3453
+ CommitDate: 2026-01-23
3454
+
3455
+ test(utils): cover failuresCount with custom backoff
3456
+
3457
+ M cli/src/utils/sync.test.ts
3458
+
3459
+ commit 2abc70fef03c2cb70867ac4e853177d8e4c63b1a
3460
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
3461
+ AuthorDate: 2026-01-23
3462
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
3463
+ CommitDate: 2026-01-23
3464
+
3465
+ fix(utils): track failuresCount for custom backoff
3466
+
3467
+ M cli/src/utils/sync.ts
3468
+
3469
+ commit dc8016f01c561d77cedb6650d7c2564f92bea88d
3470
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
3471
+ AuthorDate: 2026-01-23
3472
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
3473
+ CommitDate: 2026-01-23
3474
+
3475
+ fix(server): validate HAPPY_SERVER_LIGHT_DATA_DIR for light migrations
3476
+
3477
+ M server/scripts/migrate.light.deploy.ts
3478
+ A server/scripts/migrate.light.deployPlan.spec.ts
3479
+ A server/scripts/migrate.light.deployPlan.ts
3480
+
3481
+ commit b0085827322c0affa0a0d014b130f6fa26f32e00
3482
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
3483
+ AuthorDate: 2026-01-23
3484
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
3485
+ CommitDate: 2026-01-23
3486
+
3487
+ fix(server): handle missing UI index in error handlers
3488
+
3489
+ A server/sources/app/api/utils/enableErrorHandlers.spec.ts
3490
+ M server/sources/app/api/utils/enableErrorHandlers.ts
3491
+
3492
+ commit abf28805663692bd6fce36b5d91b5041a5e9b75b
3493
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
3494
+ AuthorDate: 2026-01-23
3495
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
3496
+ CommitDate: 2026-01-23
3497
+
3498
+ fix(cli): reject invalid messageQueueV1 inFlight
3499
+
3500
+ M cli/src/api/messageQueueV1.test.ts
3501
+ M cli/src/api/messageQueueV1.ts
3502
+
3503
+ commit 73ce32d242a050a44cdf4cb70439abcd594fcde1
3504
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
3505
+ AuthorDate: 2026-01-23
3506
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
3507
+ CommitDate: 2026-01-23
3508
+
3509
+ fix(i18n): translate Spanish experiment subtitles
3510
+
3511
+ M expo-app/sources/text/translations/es.ts
3512
+
3513
+ commit 98bc00096e866770f8dac6f82b5a7028012c2dd2
3514
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
3515
+ AuthorDate: 2026-01-23
3516
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
3517
+ CommitDate: 2026-01-23
3518
+
3519
+ fix(i18n): localize Codex resume banner
3520
+
3521
+ M expo-app/sources/app/(app)/new/NewSessionWizard.tsx
3522
+ M expo-app/sources/text/translations/ca.ts
3523
+ M expo-app/sources/text/translations/en.ts
3524
+ M expo-app/sources/text/translations/es.ts
3525
+ M expo-app/sources/text/translations/it.ts
3526
+ M expo-app/sources/text/translations/ja.ts
3527
+ M expo-app/sources/text/translations/pl.ts
3528
+ M expo-app/sources/text/translations/pt.ts
3529
+ M expo-app/sources/text/translations/ru.ts
3530
+ M expo-app/sources/text/translations/zh-Hans.ts
3531
+
3532
+ commit 4fabec9b69b30538cc4360762bc8d7af77cc65bb
3533
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
3534
+ AuthorDate: 2026-01-23
3535
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
3536
+ CommitDate: 2026-01-23
3537
+
3538
+ feat(new-session): add WizardSectionHeaderRow
3539
+
3540
+ A expo-app/sources/components/newSession/WizardSectionHeaderRow.tsx
3541
+
3542
+ commit c461ed1cb4efd785a2d60be60c63aca8349dc1a1
3543
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
3544
+ AuthorDate: 2026-01-23
3545
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
3546
+ CommitDate: 2026-01-23
3547
+
3548
+ feat(permission): add permission mode option helpers
3549
+
3550
+ A expo-app/sources/sync/permissionModeOptions.ts
3551
+
3552
+ commit 23b595edd0fe59e36481574f0ca958343a233dc2
3553
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
3554
+ AuthorDate: 2026-01-23
3555
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
3556
+ CommitDate: 2026-01-23
3557
+
3558
+ refactor(sync): simplify path formatting
3559
+
3560
+ M expo-app/sources/sync/sessionListViewData.ts
3561
+
3562
+ commit 523989b4de8ea8a339a1605a756250feaadb14ec
3563
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
3564
+ AuthorDate: 2026-01-23
3565
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
3566
+ CommitDate: 2026-01-23
3567
+
3568
+ fix(server-light): avoid master secret race
3569
+
3570
+ M server/sources/flavors/light/env.ts
3571
+
3572
+ commit d89a9427e765ed8c176ff2049fd2fc965132139a
3573
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
3574
+ AuthorDate: 2026-01-23
3575
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
3576
+ CommitDate: 2026-01-23
3577
+
3578
+ fix(cli): clean up metadata waiters on disconnect
3579
+
3580
+ M cli/src/api/apiSession.test.ts
3581
+ M cli/src/api/apiSession.ts
3582
+
3583
+ commit fedb8a66160ae16ec6c713cf84348a84d3632cc6
3584
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
3585
+ AuthorDate: 2026-01-23
3586
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
3587
+ CommitDate: 2026-01-23
3588
+
3589
+ test(cli): accept lowercase preview-env keys
3590
+
3591
+ M cli/src/modules/common/registerCommonHandlers.previewEnv.test.ts
3592
+
3593
+ commit fc0ce89b13b7fe1119ed6c966dc3709b0a83e78c
3594
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
3595
+ AuthorDate: 2026-01-23
3596
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
3597
+ CommitDate: 2026-01-23
3598
+
3599
+ fix(cli): allow lowercase preview-env keys
3600
+
3601
+ M cli/src/modules/common/previewEnv/registerPreviewEnvHandler.ts
3602
+ M cli/src/modules/common/registerCommonHandlers.previewEnv.test.ts
3603
+
3604
+ commit ad95c5b01c2590f24582f6336621088e3788634c
3605
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
3606
+ AuthorDate: 2026-01-23
3607
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
3608
+ CommitDate: 2026-01-23
3609
+
3610
+ test(happy): keep useCLIDetection timestamp stable
3611
+
3612
+ M expo-app/sources/hooks/useCLIDetection.hook.test.ts
3613
+
3614
+ commit c251edf3c307d33fba9dad71739a9a7f0396cb15
3615
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
3616
+ AuthorDate: 2026-01-23
3617
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
3618
+ CommitDate: 2026-01-23
3619
+
3620
+ test(happy): fix useCLIDetection timestamp test
3621
+
3622
+ M expo-app/sources/hooks/useCLIDetection.hook.test.ts
3623
+
3624
+ commit 34fa4091d3cc376ae79bfbcc59688dae762c0b61
3625
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
3626
+ AuthorDate: 2026-01-23
3627
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
3628
+ CommitDate: 2026-01-23
3629
+
3630
+ fix(happy): stabilize useCLIDetection timestamp
3631
+
3632
+ M expo-app/sources/hooks/useCLIDetection.ts
3633
+
3634
+ commit 31340e53294c92e12b95cac429fdcc3e0c100af4
3635
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
3636
+ AuthorDate: 2026-01-23
3637
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
3638
+ CommitDate: 2026-01-23
3639
+
3640
+ fix(happy): inline CLI detection request
3641
+
3642
+ M expo-app/sources/hooks/useCLIDetection.ts
3643
+
3644
+ commit 054250f408e21f9c2208ef306d574674796356b8
3645
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
3646
+ AuthorDate: 2026-01-23
3647
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
3648
+ CommitDate: 2026-01-23
3649
+
3650
+ fix(i18n): localize codex resume install modals
3651
+
3652
+ M expo-app/sources/app/(app)/machine/[id].tsx
3653
+ M expo-app/sources/app/(app)/new/index.tsx
3654
+ M expo-app/sources/text/translations/ca.ts
3655
+ M expo-app/sources/text/translations/en.ts
3656
+ M expo-app/sources/text/translations/es.ts
3657
+ M expo-app/sources/text/translations/it.ts
3658
+ M expo-app/sources/text/translations/ja.ts
3659
+ M expo-app/sources/text/translations/pl.ts
3660
+ M expo-app/sources/text/translations/pt.ts
3661
+ M expo-app/sources/text/translations/ru.ts
3662
+ M expo-app/sources/text/translations/zh-Hans.ts
3663
+
3664
+ commit 241f0ae24b1dd65641ab832dac9a0b5efd8b7e6a
3665
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
3666
+ AuthorDate: 2026-01-23
3667
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
3668
+ CommitDate: 2026-01-23
3669
+
3670
+ test(cli): prevent legacy sessionId path traversal
3671
+
3672
+ M cli/src/terminal/terminalAttachmentInfo.test.ts
3673
+
3674
+ commit a1e4a6dd3fbd6b432a09e3f57d1ca952134b68ea
3675
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
3676
+ AuthorDate: 2026-01-23
3677
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
3678
+ CommitDate: 2026-01-23
3679
+
3680
+ fix(cli): block legacy sessionId path traversal
3681
+
3682
+ M cli/src/terminal/terminalAttachmentInfo.ts
3683
+
3684
+ commit e2618e04a26b54ff9ccab8bd44273c60601884f1
3685
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
3686
+ AuthorDate: 2026-01-23
3687
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
3688
+ CommitDate: 2026-01-23
3689
+
3690
+ fix(a11y): add labels to codex resume actions
3691
+
3692
+ M expo-app/sources/app/(app)/new/NewSessionWizard.tsx
3693
+
3694
+ commit d0f9ad5e8310338e2771a7c77e32f80bf2763dfc
3695
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
3696
+ AuthorDate: 2026-01-23
3697
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
3698
+ CommitDate: 2026-01-23
3699
+
3700
+ test(claude): remove stale transcriptPath red-test scaffolding
3701
+
3702
+ M cli/src/claude/utils/sessionScanner.test.ts
3703
+
3704
+ commit 1464402758bf699fa05cc50dacb8f26791775273
3705
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
3706
+ AuthorDate: 2026-01-23
3707
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
3708
+ CommitDate: 2026-01-23
3709
+
3710
+ fix(codex): preserve falsy MCP tool results
3711
+
3712
+ A cli/src/codex/__tests__/extractMcpToolCallResultOutput.test.ts
3713
+ M cli/src/codex/runCodex.ts
3714
+
3715
+ commit 57f84f0691c6c098a0522071326a7ac008b3ae97
3716
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
3717
+ AuthorDate: 2026-01-23
3718
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
3719
+ CommitDate: 2026-01-23
3720
+
3721
+ fix(server-light): harden public file path encoding
3722
+
3723
+ M server/sources/flavors/light/files.spec.ts
3724
+ M server/sources/flavors/light/files.ts
3725
+
3726
+ commit 0b7db6945325444e01dbf4e19be029718847dac8
3727
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
3728
+ AuthorDate: 2026-01-23
3729
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
3730
+ CommitDate: 2026-01-23
3731
+
3732
+ fix(storage): validate S3_PORT and bucket existence
3733
+
3734
+ A server/sources/storage/files.spec.ts
3735
+ M server/sources/storage/files.ts
3736
+
3737
+ commit 74fc860b07b59fa724400bcedf09aab0c56b1b80
3738
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
3739
+ AuthorDate: 2026-01-23
3740
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
3741
+ CommitDate: 2026-01-23
3742
+
3743
+ refactor(queue): simplify stale in-flight reclaim
3744
+
3745
+ M cli/src/api/messageQueueV1.ts
3746
+
3747
+ commit 82bf82cb6715a87d3377b5ad7ea5e9c58a4b7878
3748
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
3749
+ AuthorDate: 2026-01-23
3750
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
3751
+ CommitDate: 2026-01-23
3752
+
3753
+ fix(hooks): prevent stale capabilities cache overwrite
3754
+
3755
+ A expo-app/sources/hooks/useMachineCapabilitiesCache.race.test.ts
3756
+ M expo-app/sources/hooks/useMachineCapabilitiesCache.ts
3757
+
3758
+ commit 384b1525202636c212f3ca41fa37148ae08805eb
3759
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
3760
+ AuthorDate: 2026-01-23
3761
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
3762
+ CommitDate: 2026-01-23
3763
+
3764
+ fix(expo): harden tool submit and pending send
3765
+
3766
+ A expo-app/sources/components/PendingMessagesModal.discardFallback.test.ts
3767
+ M expo-app/sources/components/PendingMessagesModal.test.ts
3768
+ M expo-app/sources/components/PendingMessagesModal.tsx
3769
+ M expo-app/sources/components/tools/views/AskUserQuestionView.test.ts
3770
+ M expo-app/sources/components/tools/views/AskUserQuestionView.tsx
3771
+ M expo-app/sources/sync/messageQueueV1.test.ts
3772
+ M expo-app/sources/sync/messageQueueV1.ts
3773
+ M expo-app/sources/sync/sync.ts
3774
+
3775
+ commit 24b607abfa073171038e72ba2cc77b20a1991aa1
3776
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
3777
+ AuthorDate: 2026-01-23
3778
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
3779
+ CommitDate: 2026-01-23
3780
+
3781
+ Refactor schema sync and centralize Prisma types
3782
+
3783
+ Replaces generateSqliteSchema.ts with schemaSync.ts to generate both the SQLite schema and TypeScript enums from the main Prisma schema. Centralizes all Prisma types and the db client in sources/storage/prisma.ts, updating imports throughout the codebase to use this module. Updates scripts and documentation to use the new schema:sync command, and ensures enum consistency between schema and TypeScript. Adds tests for the new storage/prisma module and generated enums.
3784
+
3785
+ M server/README.md
3786
+ M server/package.json
3787
+ M server/prisma/sqlite/schema.prisma
3788
+ M server/scripts/dev.light.ts
3789
+ D server/scripts/generateSqliteSchema.ts
3790
+ M server/scripts/migrate.light.deploy.ts
3791
+ M server/scripts/migrate.light.new.ts
3792
+ M server/scripts/migrate.light.resolveBaseline.ts
3793
+ R063 server/scripts/generateSqliteSchema.spec.ts server/scripts/schemaSync.spec.ts
3794
+ A server/scripts/schemaSync.ts
3795
+ M server/sources/app/api/routes/sessionRoutes.ts
3796
+ M server/sources/app/api/routes/userRoutes.ts
3797
+ M server/sources/app/api/socket/sessionUpdateHandler.ts
3798
+ M server/sources/app/feed/feedGet.ts
3799
+ M server/sources/app/social/friendAdd.ts
3800
+ M server/sources/app/social/friendList.ts
3801
+ M server/sources/app/social/friendNotification.spec.ts
3802
+ M server/sources/app/social/friendNotification.ts
3803
+ M server/sources/app/social/friendRemove.ts
3804
+ M server/sources/app/social/relationshipGet.ts
3805
+ M server/sources/app/social/relationshipSet.ts
3806
+ M server/sources/app/social/type.ts
3807
+ M server/sources/context.ts
3808
+ M server/sources/storage/db.ts
3809
+ A server/sources/storage/enums.generated.ts
3810
+ M server/sources/storage/inTx.ts
3811
+ A server/sources/storage/prisma.spec.ts
3812
+ A server/sources/storage/prisma.ts
3813
+ M yarn.lock
3814
+
3815
+ commit bf3027799623c286fe138c7b69e140ea90fdfa48
3816
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
3817
+ AuthorDate: 2026-01-23
3818
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
3819
+ CommitDate: 2026-01-23
3820
+
3821
+ Set EXPO_UNSTABLE_WEB_MODAL env var in Expo scripts
3822
+
3823
+ Updated all relevant Expo-related scripts in expo-app/package.json to include the EXPO_UNSTABLE_WEB_MODAL=1 environment variable using cross-env.
3824
+
3825
+ EXPO_UNSTABLE_WEB_MODAL is necessary to restore the expo-router modal behavior on web to what we had before, which Expo moved to "experimental".
3826
+
3827
+ Also upgraded expo-router to version 6.0.22 and added a resolutions field in the root package.json to enforce this version.
3828
+
3829
+ M expo-app/package.json
3830
+ A expo-app/patches-expo-app/expo-router+6.0.22.patch
3831
+ M expo-app/sources/app/(app)/session/[id]/info.tsx
3832
+ M package.json
3833
+
3834
+ commit c803115dcbdcd55c036e47c0f0cfd6e1bceb9f74
3835
+ Author: Leeroy Brun <leeroy.brun@gmail.com>
3836
+ AuthorDate: 2026-01-23
3837
+ Commit: Leeroy Brun <leeroy.brun@gmail.com>
3838
+ CommitDate: 2026-01-23
3839
+
3840
+ Improve postinstall script for symlinked paths and patching
3841
+
3842
+ Resolves symlinks when determining toolsDir to support Yarn workspaces executing the script via symlinked paths. Adds a second patch-package run scoped to expo-app to apply patches for dependencies not hoisted to the repo root, such as expo-router.
3843
+
3844
+ M expo-app/tools/postinstall.mjs
3845
+ ```