very-happy-cli 0.2.159 → 0.2.161

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 (259) hide show
  1. package/dist/{AcpBackend-VsfkZiVF.mjs → AcpBackend-6U6pQgx1.mjs} +4 -2
  2. package/dist/{AcpBackend-DUYFlyfN.cjs → AcpBackend-Ba98QDif.cjs} +78 -76
  3. package/dist/{AcpSessionManager-Bdv8LWXh.cjs → AcpSessionManager-BAY1Pggx.cjs} +9 -9
  4. package/dist/{AcpSessionManager-rYtVb0kN.mjs → AcpSessionManager-CoMWFVw3.mjs} +1 -1
  5. package/dist/BasePermissionHandler-2R0uH2CI.cjs +157 -0
  6. package/dist/BasePermissionHandler-BvvhBTja.mjs +155 -0
  7. package/dist/BaseReasoningProcessor-DyhO1uoU.mjs +198 -0
  8. package/dist/BaseReasoningProcessor-fsVNmCEF.cjs +200 -0
  9. package/dist/RemoteModeDisplay-D-HewyXg.mjs +150 -0
  10. package/dist/RemoteModeDisplay-NC1gPHtj.cjs +153 -0
  11. package/dist/agentAttachments-Dbw8iMCZ.cjs +20 -0
  12. package/dist/agentAttachments-M_B5qEF2.mjs +18 -0
  13. package/dist/agentGuidance-B5NATuFa.cjs +28 -0
  14. package/dist/agentGuidance-CQuNlNx8.mjs +20 -0
  15. package/dist/{agentHome-CvsJyeQB.mjs → agentHome-Ck1i1TQB.mjs} +8 -22
  16. package/dist/{agentHome-CHh4lmjM.cjs → agentHome-DvNnGphb.cjs} +14 -28
  17. package/dist/api-B2vLMS-z.cjs +3346 -0
  18. package/dist/api-SffjRQ1b.mjs +3339 -0
  19. package/dist/{types-Dh-s4Lqs.mjs → apiMachine-BpW9t8MO.mjs} +9116 -16205
  20. package/dist/{types-BbvK1Tr_.cjs → apiMachine-gFA54X7y.cjs} +9104 -16247
  21. package/dist/assistantTools-BfA0R3_m.cjs +380 -0
  22. package/dist/assistantTools-CgiTbnWb.mjs +376 -0
  23. package/dist/attachmentContent-CSGxr71v.mjs +82 -0
  24. package/dist/attachmentContent-DMMZzevR.cjs +88 -0
  25. package/dist/attachmentLimits-CzVrqgLR.cjs +354 -0
  26. package/dist/attachmentLimits-yba1uHFO.mjs +348 -0
  27. package/dist/auth-Bt4ceBBy.cjs +227 -0
  28. package/dist/auth-CYHjQ8oQ.mjs +225 -0
  29. package/dist/auth-DdyVZSo6.mjs +218 -0
  30. package/dist/auth-x4CEoysH.cjs +220 -0
  31. package/dist/authRelay-BdYkC1Po.cjs +156 -0
  32. package/dist/authRelay-DSAvg1uv.mjs +143 -0
  33. package/dist/{auto-DKmEls8Z.cjs → auto-BDXDUnjB.cjs} +70 -79
  34. package/dist/{auto-nb8GhRRy.mjs → auto-CXLlRi3a.mjs} +27 -36
  35. package/dist/backgroundTaskActivity-8PdPxrvy.mjs +149 -0
  36. package/dist/backgroundTaskActivity-CBvUdj39.cjs +157 -0
  37. package/dist/bootstrap-BNQq05jR.mjs +112 -0
  38. package/dist/bootstrap-CkgIq8N3.cjs +116 -0
  39. package/dist/browser-9pyhQr1R.mjs +20 -0
  40. package/dist/browser-BDOlKWYe.cjs +22 -0
  41. package/dist/claudeCliPath-BqkaH2oR.mjs +8 -0
  42. package/dist/claudeCliPath-U4HHmV4r.cjs +10 -0
  43. package/dist/claudeLocal-BDuGFnjJ.cjs +343 -0
  44. package/dist/claudeLocal-CQa8qnwq.mjs +339 -0
  45. package/dist/claudeLocalLauncher-Bd5I2-j6.cjs +154 -0
  46. package/dist/claudeLocalLauncher-CDqQI9ak.mjs +152 -0
  47. package/dist/cliUpdate-DsKXPFYp.cjs +120 -0
  48. package/dist/cliUpdate-Y34VGe9Y.mjs +112 -0
  49. package/dist/client-Brn-UwVk.mjs +100 -0
  50. package/dist/client-CXb1VJui.mjs +112 -0
  51. package/dist/client-C_axwRry.cjs +104 -0
  52. package/dist/client-DOBWJL3u.cjs +119 -0
  53. package/dist/codex/happyMcpStdioBridge.cjs +33 -14
  54. package/dist/codex/happyMcpStdioBridge.mjs +26 -7
  55. package/dist/codexAppServerClient-ZzhUTWPo.cjs +1090 -0
  56. package/dist/codexAppServerClient-oeQKD6Qf.mjs +1088 -0
  57. package/dist/codexCommand-C7H0NpBe.cjs +2088 -0
  58. package/dist/codexCommand-CJ82bl3l.mjs +2086 -0
  59. package/dist/codexThreadFork-BCaEMBiM.mjs +338 -0
  60. package/dist/codexThreadFork-BZqF-9bX.cjs +350 -0
  61. package/dist/{config-ClLtM6F3.mjs → config-BglnktIo.mjs} +7 -40
  62. package/dist/{config-DLx-vW3I.cjs → config-CYpL1Ahd.cjs} +26 -59
  63. package/dist/configuration-DoWFJUPm.mjs +170 -0
  64. package/dist/configuration-v9f8LM9T.cjs +181 -0
  65. package/dist/connect-hgcNjyAB.mjs +682 -0
  66. package/dist/connect-yEvjdRvx.cjs +684 -0
  67. package/dist/constants-BC4St0xd.mjs +11 -0
  68. package/dist/constants-VJ0N6WuG.cjs +17 -0
  69. package/dist/contentLogMetadata-BlWI0egu.mjs +51 -0
  70. package/dist/contentLogMetadata-ZSFk_NjQ.cjs +54 -0
  71. package/dist/context-B45vMtSZ.cjs +69 -0
  72. package/dist/context-C9GHPLEm.mjs +65 -0
  73. package/dist/controlClient-DjoKTtgK.mjs +260 -0
  74. package/dist/controlClient-fEHE85bH.cjs +279 -0
  75. package/dist/createSessionMetadata-BRLB9CNO.cjs +58 -0
  76. package/dist/createSessionMetadata-mIeehclp.mjs +54 -0
  77. package/dist/defaultPermissionMode-BnxJPVHT.mjs +4 -0
  78. package/dist/defaultPermissionMode-CxmTXUQR.cjs +7 -0
  79. package/dist/detectCLI-CSGMlV51.mjs +58 -0
  80. package/dist/detectCLI-DR9ZaN6B.cjs +61 -0
  81. package/dist/deterministicJson-DKDP_mM-.cjs +507 -0
  82. package/dist/deterministicJson-p835AdAU.mjs +502 -0
  83. package/dist/doctor-BPkYWSuq.mjs +75 -0
  84. package/dist/doctor-BeUuQXFs.mjs +391 -0
  85. package/dist/doctor-hVNnSZJn.cjs +395 -0
  86. package/dist/doctor-u46qYYKX.cjs +79 -0
  87. package/dist/doctorReadiness-BCZGcN0a.cjs +151 -0
  88. package/dist/doctorReadiness-C208SMN9.mjs +142 -0
  89. package/dist/editPaths-BVfS_FFL.mjs +68 -0
  90. package/dist/editPaths-Bqp4OFPw.cjs +73 -0
  91. package/dist/ensureDaemonRunning-CO7d1gOC.mjs +61 -0
  92. package/dist/ensureDaemonRunning-Dg9aZfjs.cjs +64 -0
  93. package/dist/handleResumeCommand-BiTPK0qd.mjs +240 -0
  94. package/dist/handleResumeCommand-DnVmy7a3.cjs +245 -0
  95. package/dist/ids-B6ZC0HGt.cjs +13 -0
  96. package/dist/ids-DU6sLx4C.mjs +10 -0
  97. package/dist/index-B6UGRQ7h.mjs +102 -0
  98. package/dist/{index-2mCaeKyf.mjs → index-CAFwetLk.mjs} +68 -38
  99. package/dist/index-Cqx-Raq6.mjs +68 -0
  100. package/dist/index-D3kI0hDR.cjs +107 -0
  101. package/dist/index-DA7yINuk.cjs +994 -0
  102. package/dist/{index-BEOMECtE.cjs → index-LIn6nCcq.cjs} +121 -91
  103. package/dist/index-Pf2cV9cn.cjs +182 -0
  104. package/dist/index-SPGPenK5.mjs +158 -0
  105. package/dist/index-gNTWtSKN.cjs +71 -0
  106. package/dist/index-qdS1friN.mjs +949 -0
  107. package/dist/index.cjs +5 -46
  108. package/dist/index.mjs +5 -46
  109. package/dist/{install-BPhJppvd.mjs → install-BO_W7VhL.mjs} +37 -37
  110. package/dist/install-Bu85vlHD.cjs +88 -0
  111. package/dist/install-ClUUl3yp.mjs +86 -0
  112. package/dist/{install-BOHrUaFM.cjs → install-Cs5qAPrB.cjs} +38 -38
  113. package/dist/{installPiTools-DuZ6jZvX.cjs → installPiTools-BKnXjrVu.cjs} +2 -3
  114. package/dist/{installPiTools-Cj7yU9Fc.mjs → installPiTools-B_CdM5_2.mjs} +1 -2
  115. package/dist/{installTerminalHooks-Cou3WUf3.cjs → installTerminalHooks-BQZbvxsZ.cjs} +5 -40
  116. package/dist/{installTerminalHooks-WeznjkuC.mjs → installTerminalHooks-By7gBMEF.mjs} +3 -38
  117. package/dist/lib.cjs +28 -19
  118. package/dist/lib.d.cts +12 -2
  119. package/dist/lib.d.mts +12 -2
  120. package/dist/lib.mjs +23 -14
  121. package/dist/lidState-C2dI0FAN.mjs +297 -0
  122. package/dist/lidState-KHHu1015.cjs +305 -0
  123. package/dist/limits-C-a7gr04.cjs +43 -0
  124. package/dist/limits-DIo7rEBR.mjs +36 -0
  125. package/dist/localHappyAgentAuth-BXiHPXdC.cjs +86 -0
  126. package/dist/localHappyAgentAuth-DCsetiyG.mjs +82 -0
  127. package/dist/logger-Bc8-u1w0.cjs +275 -0
  128. package/dist/logger-fXoNzNuB.mjs +271 -0
  129. package/dist/loginShellEnv-BkuYtExZ.cjs +182 -0
  130. package/dist/loginShellEnv-Dw8M7tkI.mjs +167 -0
  131. package/dist/machineMetadata-BHjehxJY.mjs +38 -0
  132. package/dist/machineMetadata-BibDMFVx.cjs +41 -0
  133. package/dist/main-BktM4A1K.mjs +939 -0
  134. package/dist/main-CLaX-t-b.cjs +941 -0
  135. package/dist/manager-BQ4flvQZ.mjs +101 -0
  136. package/dist/manager-Cly8xVIR.cjs +105 -0
  137. package/dist/{mcp-Dy3f_K0h.mjs → mcp-CeUd9KDr.mjs} +27 -33
  138. package/dist/{mcp-CPYbtsYG.cjs → mcp-GBfE70nk.cjs} +42 -48
  139. package/dist/messageBuffer-BWlGgR3A.mjs +71 -0
  140. package/dist/messageBuffer-fJMH6uY8.cjs +73 -0
  141. package/dist/mirrorProtocol-BNLtoWjO.mjs +170 -0
  142. package/dist/mirrorProtocol-BUtmg1ws.cjs +186 -0
  143. package/dist/oneShotPrompts-CL0dip9C.cjs +16 -0
  144. package/dist/oneShotPrompts-DT4p6RNd.mjs +12 -0
  145. package/dist/package-Cl5BEP5x.cjs +173 -0
  146. package/dist/package-uOg9SCKi.mjs +171 -0
  147. package/dist/path-B7zW-WwE.cjs +18 -0
  148. package/dist/path-D2wdaNSk.mjs +15 -0
  149. package/dist/peerTools-CIeiy9wn.cjs +283 -0
  150. package/dist/peerTools-Dz3_7Bkk.mjs +272 -0
  151. package/dist/permissionMode-CH4FoZfU.mjs +80 -0
  152. package/dist/permissionMode-CrV-XuMs.cjs +87 -0
  153. package/dist/persistence-CBNMzSa8.cjs +414 -0
  154. package/dist/persistence-oET5n61f.mjs +372 -0
  155. package/dist/piExtension.mjs +2 -1
  156. package/dist/piRunnerArgs-Bf7RUF__.cjs +66 -0
  157. package/dist/piRunnerArgs-Dk1ncwHF.mjs +59 -0
  158. package/dist/{piRuntime-NtF0YqjH.cjs → piRuntime-B_6TE9Eb.cjs} +4 -4
  159. package/dist/{piRuntime-kLZNpAAl.mjs → piRuntime-BwRdhK_N.mjs} +2 -2
  160. package/dist/{piTerminal-B0fEOV_2.mjs → piTerminal-Bap3R8Re.mjs} +32 -35
  161. package/dist/{piTerminal-9J0GAKzb.cjs → piTerminal-CagmEoez.cjs} +32 -35
  162. package/dist/previewPath-B0rBdhy1.cjs +83 -0
  163. package/dist/previewPath-CXN4Vag0.mjs +81 -0
  164. package/dist/projectPath-BTBIMB57.mjs +10 -0
  165. package/dist/projectPath-ChLhdOyt.cjs +13 -0
  166. package/dist/registerCommonHandlers-BjSV2Skz.cjs +538 -0
  167. package/dist/registerCommonHandlers-CrgvJsOy.mjs +536 -0
  168. package/dist/registerKillSessionHandler-6TC2S3lf.cjs +366 -0
  169. package/dist/registerKillSessionHandler-Cbc8Rgtd.mjs +363 -0
  170. package/dist/remoteSessionClient-BNx78NLb.cjs +634 -0
  171. package/dist/remoteSessionClient-CO7qOjR0.mjs +612 -0
  172. package/dist/resources-BdFBQi8r.mjs +117 -0
  173. package/dist/resources-JDPugcDq.cjs +120 -0
  174. package/dist/run-2l5vSt2h.mjs +5743 -0
  175. package/dist/run-D5xAEWSB.cjs +5766 -0
  176. package/dist/runClaude-BX6ixjtW.cjs +894 -0
  177. package/dist/runClaude-BgN6xo05.mjs +892 -0
  178. package/dist/runClaudeDeps-Bp20MScE.cjs +4168 -0
  179. package/dist/runClaudeDeps-COBBhD9o.mjs +4129 -0
  180. package/dist/{runGemini-F-mqx3_K.cjs → runGemini-CSMPkt0p.cjs} +202 -175
  181. package/dist/{runGemini-DV6Ouadt.mjs → runGemini-Cc2jq-uh.mjs} +58 -31
  182. package/dist/{runOpenClaw-D7MlPS5n.mjs → runOpenClaw-CIlCwdW2.mjs} +31 -32
  183. package/dist/{runOpenClaw-Qqo9j63M.cjs → runOpenClaw-YBwua4Rf.cjs} +64 -65
  184. package/dist/sandbox-C4gXLP1p.cjs +187 -0
  185. package/dist/sandbox-CNkwOtHI.mjs +180 -0
  186. package/dist/selfCheck-CU8xSDsl.cjs +87 -0
  187. package/dist/selfCheck-hJ6PCh7v.mjs +84 -0
  188. package/dist/{send-CLhYXNgy.mjs → send-CGHcKZ-w.mjs} +12 -5
  189. package/dist/{send-4qJTCAYW.cjs → send-DY9Nr-x4.cjs} +16 -9
  190. package/dist/server-II51Mimf.cjs +407 -0
  191. package/dist/server-m2b5pamZ.mjs +404 -0
  192. package/dist/sessionLock-7ePAYDOg.cjs +205 -0
  193. package/dist/sessionLock-Cw6FmbMv.mjs +197 -0
  194. package/dist/sessionModeFile-BVCV5f7E.cjs +36 -0
  195. package/dist/sessionModeFile-CDmDyRkD.mjs +32 -0
  196. package/dist/sessionOps-C_f1wKOr.mjs +760 -0
  197. package/dist/sessionOps-DJdExmBy.cjs +783 -0
  198. package/dist/sessionScanner-CaAHLyNV.mjs +206 -0
  199. package/dist/sessionScanner-D1goKdd3.cjs +209 -0
  200. package/dist/{sessions-Bh1pyddi.cjs → sessions-DGs6ALNo.cjs} +37 -28
  201. package/dist/{sessions-CzIH2rGp.mjs → sessions-DnvmWUel.mjs} +17 -8
  202. package/dist/setupOfflineReconnection-CVViqZft.mjs +72 -0
  203. package/dist/setupOfflineReconnection-R7XuR_sj.cjs +74 -0
  204. package/dist/smallFastModel-BLNgMrwR.mjs +18 -0
  205. package/dist/smallFastModel-D_uxGMo3.cjs +21 -0
  206. package/dist/{spawn-CmFOSVdW.cjs → spawn-CXTH7qg1.cjs} +61 -65
  207. package/dist/{spawn-CPIWlPOM.mjs → spawn-DNYSvFtC.mjs} +35 -40
  208. package/dist/spawnAgents-BGQiEF-w.cjs +52 -0
  209. package/dist/spawnAgents-DZzZ9jMI.mjs +45 -0
  210. package/dist/spawnHappyCLI-BhYj84rv.cjs +66 -0
  211. package/dist/spawnHappyCLI-cqWQbwsb.mjs +64 -0
  212. package/dist/specialCommands-BSqhYg5X.mjs +52 -0
  213. package/dist/specialCommands-DSsTeRej.cjs +54 -0
  214. package/dist/startFileWatcher-CKKx-8ZO.cjs +71 -0
  215. package/dist/startFileWatcher-CdegMbJj.mjs +69 -0
  216. package/dist/startupPlan-BLMbfQIH.cjs +12 -0
  217. package/dist/startupPlan-DFMyNgAs.mjs +10 -0
  218. package/dist/streamRelay-BiKw59Cc.cjs +233 -0
  219. package/dist/streamRelay-FPVbHpbM.mjs +231 -0
  220. package/dist/sync-CVk4QERO.cjs +71 -0
  221. package/dist/sync-CxD-w_40.mjs +69 -0
  222. package/dist/systemPrompt-BygJcmbi.cjs +97 -0
  223. package/dist/systemPrompt-DmtypUc7.mjs +94 -0
  224. package/dist/{teams-CEahj4cm.mjs → teams-BOC6nIPL.mjs} +9 -40
  225. package/dist/{teams-CB1R9-Z9.cjs → teams-BsvpOBfn.cjs} +14 -45
  226. package/dist/template-BaHAmH2K.cjs +129 -0
  227. package/dist/template-CiOPa2rd.mjs +121 -0
  228. package/dist/{terminalTitleSuggest-DKgX3osW.mjs → terminalTitleSuggest-CeKsX_V6.mjs} +1 -9
  229. package/dist/{terminalTitleSuggest-Dji8I0Jy.cjs → terminalTitleSuggest-DhvRFX3H.cjs} +0 -10
  230. package/dist/terminals-B_bfC9c2.cjs +250 -0
  231. package/dist/terminals-Dlg0x3nY.mjs +235 -0
  232. package/dist/time-BZNdNiIV.mjs +38 -0
  233. package/dist/time-CNRE4ChD.cjs +42 -0
  234. package/dist/titleGenerator-CFRhU-xq.cjs +172 -0
  235. package/dist/titleGenerator-ox6ptCsp.mjs +166 -0
  236. package/dist/tmuxSocket-B8Yx20sT.mjs +19 -0
  237. package/dist/tmuxSocket-D-Xt6Vn-.cjs +24 -0
  238. package/dist/{todo-DqyRI4wP.cjs → todo-B-KB7oAB.cjs} +15 -12
  239. package/dist/{todo-Cknp5D4U.mjs → todo-C5KBVbUw.mjs} +11 -8
  240. package/dist/tools-BZabNIid.mjs +177 -0
  241. package/dist/tools-BmQQUATY.mjs +60 -0
  242. package/dist/tools-CsSovyNp.cjs +180 -0
  243. package/dist/tools-lMDra4Pv.cjs +63 -0
  244. package/dist/trimIdent-4gvk9Wk6.cjs +22 -0
  245. package/dist/trimIdent-BAjmv_TG.mjs +20 -0
  246. package/dist/types-CRS-srZK.cjs +66 -0
  247. package/dist/types-CkqAACXx.mjs +64 -0
  248. package/dist/uninstall-B1WLtC1d.mjs +47 -0
  249. package/dist/uninstall-fvA5aWpU.cjs +49 -0
  250. package/package.json +7 -7
  251. package/scripts/session_hook_forwarder.cjs +9 -2
  252. package/dist/agentGuidance-BRDN1NoZ.cjs +0 -2217
  253. package/dist/agentGuidance-KgvYuF3R.mjs +0 -2145
  254. package/dist/index-BF6WfgV5.mjs +0 -19624
  255. package/dist/index-C-JazrMB.mjs +0 -52
  256. package/dist/index-blDSadUR.cjs +0 -58
  257. package/dist/index-rH3DrQ5B.cjs +0 -19688
  258. package/dist/limits-BH5CV5vR.cjs +0 -2683
  259. package/dist/limits-CjRj8IX5.mjs +0 -2558
@@ -0,0 +1,182 @@
1
+ 'use strict';
2
+
3
+ var path = require('node:path');
4
+ var node_child_process = require('node:child_process');
5
+
6
+ const CLAUDE_CONFIG_DIR_ENV = "CLAUDE_CONFIG_DIR";
7
+ const CODEX_HOME_ENV = "CODEX_HOME";
8
+ const AGENT_HOME_ENV_NAMES = [CLAUDE_CONFIG_DIR_ENV, CODEX_HOME_ENV];
9
+ function expandHomePath(value, homeDir) {
10
+ const trimmed = value.trim();
11
+ if (trimmed === "~") return homeDir;
12
+ if (trimmed.startsWith("~/")) return path.join(homeDir, trimmed.slice(2));
13
+ return path.isAbsolute(trimmed) ? trimmed : path.resolve(homeDir, trimmed);
14
+ }
15
+ function nonEmpty(value) {
16
+ const trimmed = value?.trim();
17
+ return trimmed ? trimmed : null;
18
+ }
19
+ function pick(envName, settingValue, input, defaultRelative) {
20
+ const fromSettings = nonEmpty(settingValue);
21
+ if (fromSettings) return { path: expandHomePath(fromSettings, input.homeDir), source: "settings" };
22
+ const fromShell = nonEmpty(input.loginShellEnv?.[envName]);
23
+ if (fromShell) return { path: expandHomePath(fromShell, input.homeDir), source: "login-shell" };
24
+ const fromDaemon = nonEmpty(input.daemonEnv[envName]);
25
+ if (fromDaemon) return { path: expandHomePath(fromDaemon, input.homeDir), source: "daemon-env" };
26
+ return { path: path.join(input.homeDir, defaultRelative), source: "default" };
27
+ }
28
+ function resolveAgentHomes(input) {
29
+ return {
30
+ claudeConfigDir: pick(CLAUDE_CONFIG_DIR_ENV, input.settings.claudeConfigDir, input, ".claude"),
31
+ codexHome: pick(CODEX_HOME_ENV, input.settings.codexHome, input, ".codex")
32
+ };
33
+ }
34
+ function agentHomeEnv(homes) {
35
+ const env = {};
36
+ if (homes.claudeConfigDir.source !== "default") env[CLAUDE_CONFIG_DIR_ENV] = homes.claudeConfigDir.path;
37
+ if (homes.codexHome.source !== "default") env[CODEX_HOME_ENV] = homes.codexHome.path;
38
+ return env;
39
+ }
40
+ function claudeProjectDirName(workingDirectory) {
41
+ return path.resolve(workingDirectory).replace(/[^a-zA-Z0-9-]/g, "-");
42
+ }
43
+ function claudeConversationPath(configDir, workingDirectory, claudeSessionId) {
44
+ return path.join(configDir, "projects", claudeProjectDirName(workingDirectory), `${claudeSessionId}.jsonl`);
45
+ }
46
+ function agentHomeCandidates(kind, input, homes = resolveAgentHomes(input)) {
47
+ const envName = kind === "claude" ? CLAUDE_CONFIG_DIR_ENV : CODEX_HOME_ENV;
48
+ const resolved = kind === "claude" ? homes.claudeConfigDir : homes.codexHome;
49
+ const raw = [
50
+ resolved.path,
51
+ nonEmpty(kind === "claude" ? input.settings.claudeConfigDir : input.settings.codexHome),
52
+ nonEmpty(input.loginShellEnv?.[envName]),
53
+ nonEmpty(input.daemonEnv[envName]),
54
+ path.join(input.homeDir, kind === "claude" ? ".claude" : ".codex")
55
+ ];
56
+ const out = [];
57
+ for (const value of raw) {
58
+ if (!value) continue;
59
+ const expanded = expandHomePath(value, input.homeDir);
60
+ if (!out.includes(expanded)) out.push(expanded);
61
+ }
62
+ return out;
63
+ }
64
+ function findClaudeConversation(claudeSessionId, workingDirectory, candidates, fileSize) {
65
+ let best = null;
66
+ let bestSize = -1;
67
+ for (let i = 0; i < candidates.length; i++) {
68
+ const file = claudeConversationPath(candidates[i], workingDirectory, claudeSessionId);
69
+ const size = fileSize(file);
70
+ if (size === null || size <= bestSize) continue;
71
+ best = { home: candidates[i], file, resolved: i === 0 };
72
+ bestSize = size;
73
+ }
74
+ return best;
75
+ }
76
+ function codexRolloutFileMatches(fileName, threadId) {
77
+ return fileName.startsWith("rollout-") && fileName.endsWith(`-${threadId}.jsonl`);
78
+ }
79
+ function findCodexThread(threadId, candidates, listDir) {
80
+ const digits = /^\d+$/;
81
+ for (let i = 0; i < candidates.length; i++) {
82
+ const sessions = path.join(candidates[i], "sessions");
83
+ for (const year of listDir(sessions).filter((name) => digits.test(name)).sort().reverse()) {
84
+ for (const month of listDir(path.join(sessions, year)).filter((name) => digits.test(name)).sort().reverse()) {
85
+ for (const day of listDir(path.join(sessions, year, month)).filter((name) => digits.test(name)).sort().reverse()) {
86
+ const dayDir = path.join(sessions, year, month, day);
87
+ const hit = listDir(dayDir).find((name) => codexRolloutFileMatches(name, threadId));
88
+ if (hit) return { home: candidates[i], file: path.join(dayDir, hit), resolved: i === 0 };
89
+ }
90
+ }
91
+ }
92
+ }
93
+ return null;
94
+ }
95
+ function describeAgentHome(choice) {
96
+ const source = {
97
+ settings: "settings.json",
98
+ "login-shell": "login shell",
99
+ "daemon-env": "daemon environment",
100
+ default: "default"
101
+ };
102
+ return `${choice.path} (${source[choice.source]})`;
103
+ }
104
+
105
+ const LOGIN_SHELL_ENV_MARKER = "__VH_ENV__";
106
+ const LOGIN_SHELL_PROBE_TIMEOUT_MS = 3e3;
107
+ function loginShellProbeScript(names) {
108
+ const pairs = names.map((name) => `${name} "$${name}"`).join(" ");
109
+ return `printf '${LOGIN_SHELL_ENV_MARKER}%s=%s\\n' ${pairs}`;
110
+ }
111
+ function parseLoginShellEnv(output, names) {
112
+ const wanted = new Set(names);
113
+ const env = {};
114
+ for (const rawLine of output.split(/\r?\n/)) {
115
+ const at = rawLine.indexOf(LOGIN_SHELL_ENV_MARKER);
116
+ if (at < 0) continue;
117
+ const line = rawLine.slice(at + LOGIN_SHELL_ENV_MARKER.length);
118
+ const eq = line.indexOf("=");
119
+ if (eq <= 0) continue;
120
+ const name = line.slice(0, eq);
121
+ if (!wanted.has(name)) continue;
122
+ const value = line.slice(eq + 1).trim();
123
+ env[name] = value ? value : void 0;
124
+ }
125
+ return env;
126
+ }
127
+ function probeLoginShellEnv(names, options = {}) {
128
+ const platform = options.platform ?? process.platform;
129
+ if (platform === "win32") return Promise.resolve(null);
130
+ const shell = (options.shell ?? process.env.SHELL ?? "").trim() || "/bin/sh";
131
+ const timeoutMs = options.timeoutMs ?? LOGIN_SHELL_PROBE_TIMEOUT_MS;
132
+ return new Promise((resolve) => {
133
+ let stdout = "";
134
+ let settled = false;
135
+ const finish = (value) => {
136
+ if (settled) return;
137
+ settled = true;
138
+ clearTimeout(timer);
139
+ resolve(value);
140
+ };
141
+ let child;
142
+ try {
143
+ child = node_child_process.spawn(shell, ["-l", "-i", "-c", loginShellProbeScript(names)], {
144
+ stdio: ["ignore", "pipe", "ignore"],
145
+ env: options.env ?? process.env,
146
+ windowsHide: true
147
+ });
148
+ } catch {
149
+ resolve(null);
150
+ return;
151
+ }
152
+ const timer = setTimeout(() => {
153
+ try {
154
+ child.kill("SIGKILL");
155
+ } catch {
156
+ }
157
+ finish(null);
158
+ }, timeoutMs);
159
+ child.stdout?.on("data", (chunk) => {
160
+ stdout += chunk.toString("utf8");
161
+ });
162
+ child.on("error", () => finish(null));
163
+ child.on("close", () => {
164
+ finish(stdout.includes(LOGIN_SHELL_ENV_MARKER) ? parseLoginShellEnv(stdout, names) : null);
165
+ });
166
+ });
167
+ }
168
+
169
+ exports.AGENT_HOME_ENV_NAMES = AGENT_HOME_ENV_NAMES;
170
+ exports.CLAUDE_CONFIG_DIR_ENV = CLAUDE_CONFIG_DIR_ENV;
171
+ exports.CODEX_HOME_ENV = CODEX_HOME_ENV;
172
+ exports.agentHomeCandidates = agentHomeCandidates;
173
+ exports.agentHomeEnv = agentHomeEnv;
174
+ exports.claudeConversationPath = claudeConversationPath;
175
+ exports.claudeProjectDirName = claudeProjectDirName;
176
+ exports.codexRolloutFileMatches = codexRolloutFileMatches;
177
+ exports.describeAgentHome = describeAgentHome;
178
+ exports.expandHomePath = expandHomePath;
179
+ exports.findClaudeConversation = findClaudeConversation;
180
+ exports.findCodexThread = findCodexThread;
181
+ exports.probeLoginShellEnv = probeLoginShellEnv;
182
+ exports.resolveAgentHomes = resolveAgentHomes;
@@ -0,0 +1,167 @@
1
+ import { join, resolve, isAbsolute } from 'node:path';
2
+ import { spawn } from 'node:child_process';
3
+
4
+ const CLAUDE_CONFIG_DIR_ENV = "CLAUDE_CONFIG_DIR";
5
+ const CODEX_HOME_ENV = "CODEX_HOME";
6
+ const AGENT_HOME_ENV_NAMES = [CLAUDE_CONFIG_DIR_ENV, CODEX_HOME_ENV];
7
+ function expandHomePath(value, homeDir) {
8
+ const trimmed = value.trim();
9
+ if (trimmed === "~") return homeDir;
10
+ if (trimmed.startsWith("~/")) return join(homeDir, trimmed.slice(2));
11
+ return isAbsolute(trimmed) ? trimmed : resolve(homeDir, trimmed);
12
+ }
13
+ function nonEmpty(value) {
14
+ const trimmed = value?.trim();
15
+ return trimmed ? trimmed : null;
16
+ }
17
+ function pick(envName, settingValue, input, defaultRelative) {
18
+ const fromSettings = nonEmpty(settingValue);
19
+ if (fromSettings) return { path: expandHomePath(fromSettings, input.homeDir), source: "settings" };
20
+ const fromShell = nonEmpty(input.loginShellEnv?.[envName]);
21
+ if (fromShell) return { path: expandHomePath(fromShell, input.homeDir), source: "login-shell" };
22
+ const fromDaemon = nonEmpty(input.daemonEnv[envName]);
23
+ if (fromDaemon) return { path: expandHomePath(fromDaemon, input.homeDir), source: "daemon-env" };
24
+ return { path: join(input.homeDir, defaultRelative), source: "default" };
25
+ }
26
+ function resolveAgentHomes(input) {
27
+ return {
28
+ claudeConfigDir: pick(CLAUDE_CONFIG_DIR_ENV, input.settings.claudeConfigDir, input, ".claude"),
29
+ codexHome: pick(CODEX_HOME_ENV, input.settings.codexHome, input, ".codex")
30
+ };
31
+ }
32
+ function agentHomeEnv(homes) {
33
+ const env = {};
34
+ if (homes.claudeConfigDir.source !== "default") env[CLAUDE_CONFIG_DIR_ENV] = homes.claudeConfigDir.path;
35
+ if (homes.codexHome.source !== "default") env[CODEX_HOME_ENV] = homes.codexHome.path;
36
+ return env;
37
+ }
38
+ function claudeProjectDirName(workingDirectory) {
39
+ return resolve(workingDirectory).replace(/[^a-zA-Z0-9-]/g, "-");
40
+ }
41
+ function claudeConversationPath(configDir, workingDirectory, claudeSessionId) {
42
+ return join(configDir, "projects", claudeProjectDirName(workingDirectory), `${claudeSessionId}.jsonl`);
43
+ }
44
+ function agentHomeCandidates(kind, input, homes = resolveAgentHomes(input)) {
45
+ const envName = kind === "claude" ? CLAUDE_CONFIG_DIR_ENV : CODEX_HOME_ENV;
46
+ const resolved = kind === "claude" ? homes.claudeConfigDir : homes.codexHome;
47
+ const raw = [
48
+ resolved.path,
49
+ nonEmpty(kind === "claude" ? input.settings.claudeConfigDir : input.settings.codexHome),
50
+ nonEmpty(input.loginShellEnv?.[envName]),
51
+ nonEmpty(input.daemonEnv[envName]),
52
+ join(input.homeDir, kind === "claude" ? ".claude" : ".codex")
53
+ ];
54
+ const out = [];
55
+ for (const value of raw) {
56
+ if (!value) continue;
57
+ const expanded = expandHomePath(value, input.homeDir);
58
+ if (!out.includes(expanded)) out.push(expanded);
59
+ }
60
+ return out;
61
+ }
62
+ function findClaudeConversation(claudeSessionId, workingDirectory, candidates, fileSize) {
63
+ let best = null;
64
+ let bestSize = -1;
65
+ for (let i = 0; i < candidates.length; i++) {
66
+ const file = claudeConversationPath(candidates[i], workingDirectory, claudeSessionId);
67
+ const size = fileSize(file);
68
+ if (size === null || size <= bestSize) continue;
69
+ best = { home: candidates[i], file, resolved: i === 0 };
70
+ bestSize = size;
71
+ }
72
+ return best;
73
+ }
74
+ function codexRolloutFileMatches(fileName, threadId) {
75
+ return fileName.startsWith("rollout-") && fileName.endsWith(`-${threadId}.jsonl`);
76
+ }
77
+ function findCodexThread(threadId, candidates, listDir) {
78
+ const digits = /^\d+$/;
79
+ for (let i = 0; i < candidates.length; i++) {
80
+ const sessions = join(candidates[i], "sessions");
81
+ for (const year of listDir(sessions).filter((name) => digits.test(name)).sort().reverse()) {
82
+ for (const month of listDir(join(sessions, year)).filter((name) => digits.test(name)).sort().reverse()) {
83
+ for (const day of listDir(join(sessions, year, month)).filter((name) => digits.test(name)).sort().reverse()) {
84
+ const dayDir = join(sessions, year, month, day);
85
+ const hit = listDir(dayDir).find((name) => codexRolloutFileMatches(name, threadId));
86
+ if (hit) return { home: candidates[i], file: join(dayDir, hit), resolved: i === 0 };
87
+ }
88
+ }
89
+ }
90
+ }
91
+ return null;
92
+ }
93
+ function describeAgentHome(choice) {
94
+ const source = {
95
+ settings: "settings.json",
96
+ "login-shell": "login shell",
97
+ "daemon-env": "daemon environment",
98
+ default: "default"
99
+ };
100
+ return `${choice.path} (${source[choice.source]})`;
101
+ }
102
+
103
+ const LOGIN_SHELL_ENV_MARKER = "__VH_ENV__";
104
+ const LOGIN_SHELL_PROBE_TIMEOUT_MS = 3e3;
105
+ function loginShellProbeScript(names) {
106
+ const pairs = names.map((name) => `${name} "$${name}"`).join(" ");
107
+ return `printf '${LOGIN_SHELL_ENV_MARKER}%s=%s\\n' ${pairs}`;
108
+ }
109
+ function parseLoginShellEnv(output, names) {
110
+ const wanted = new Set(names);
111
+ const env = {};
112
+ for (const rawLine of output.split(/\r?\n/)) {
113
+ const at = rawLine.indexOf(LOGIN_SHELL_ENV_MARKER);
114
+ if (at < 0) continue;
115
+ const line = rawLine.slice(at + LOGIN_SHELL_ENV_MARKER.length);
116
+ const eq = line.indexOf("=");
117
+ if (eq <= 0) continue;
118
+ const name = line.slice(0, eq);
119
+ if (!wanted.has(name)) continue;
120
+ const value = line.slice(eq + 1).trim();
121
+ env[name] = value ? value : void 0;
122
+ }
123
+ return env;
124
+ }
125
+ function probeLoginShellEnv(names, options = {}) {
126
+ const platform = options.platform ?? process.platform;
127
+ if (platform === "win32") return Promise.resolve(null);
128
+ const shell = (options.shell ?? process.env.SHELL ?? "").trim() || "/bin/sh";
129
+ const timeoutMs = options.timeoutMs ?? LOGIN_SHELL_PROBE_TIMEOUT_MS;
130
+ return new Promise((resolve) => {
131
+ let stdout = "";
132
+ let settled = false;
133
+ const finish = (value) => {
134
+ if (settled) return;
135
+ settled = true;
136
+ clearTimeout(timer);
137
+ resolve(value);
138
+ };
139
+ let child;
140
+ try {
141
+ child = spawn(shell, ["-l", "-i", "-c", loginShellProbeScript(names)], {
142
+ stdio: ["ignore", "pipe", "ignore"],
143
+ env: options.env ?? process.env,
144
+ windowsHide: true
145
+ });
146
+ } catch {
147
+ resolve(null);
148
+ return;
149
+ }
150
+ const timer = setTimeout(() => {
151
+ try {
152
+ child.kill("SIGKILL");
153
+ } catch {
154
+ }
155
+ finish(null);
156
+ }, timeoutMs);
157
+ child.stdout?.on("data", (chunk) => {
158
+ stdout += chunk.toString("utf8");
159
+ });
160
+ child.on("error", () => finish(null));
161
+ child.on("close", () => {
162
+ finish(stdout.includes(LOGIN_SHELL_ENV_MARKER) ? parseLoginShellEnv(stdout, names) : null);
163
+ });
164
+ });
165
+ }
166
+
167
+ export { AGENT_HOME_ENV_NAMES as A, CLAUDE_CONFIG_DIR_ENV as C, CODEX_HOME_ENV as a, agentHomeCandidates as b, findCodexThread as c, describeAgentHome as d, expandHomePath as e, findClaudeConversation as f, agentHomeEnv as g, claudeConversationPath as h, claudeProjectDirName as i, codexRolloutFileMatches as j, probeLoginShellEnv as p, resolveAgentHomes as r };
@@ -0,0 +1,38 @@
1
+ import os from 'node:os';
2
+ import { p as packageJson } from './package-uOg9SCKi.mjs';
3
+ import { c as configuration } from './configuration-DoWFJUPm.mjs';
4
+ import { p as projectPath } from './projectPath-BTBIMB57.mjs';
5
+ import { d as detectCLIAvailability } from './detectCLI-CSGMlV51.mjs';
6
+ import { d as detectResumeSupport } from './localHappyAgentAuth-DCsetiyG.mjs';
7
+
8
+ function buildInitialMachineMetadata(cliAvailability) {
9
+ const hostSuffix = process.env.HAPPY_VARIANT === "dev" ? "-dev" : "";
10
+ return {
11
+ teamsVersion: 1,
12
+ teamLaunchVersion: 1,
13
+ host: os.hostname() + hostSuffix,
14
+ platform: os.platform(),
15
+ happyCliVersion: packageJson.version,
16
+ homeDir: os.homedir(),
17
+ happyHomeDir: configuration.happyHomeDir,
18
+ happyLibDir: projectPath(),
19
+ cliAvailability,
20
+ resumeSupport: { ...detectResumeSupport(), rpcAvailable: true }
21
+ };
22
+ }
23
+ let memo = null;
24
+ function compute() {
25
+ if (!memo) {
26
+ const cliAvailability = detectCLIAvailability();
27
+ memo = { metadata: buildInitialMachineMetadata(cliAvailability), cliAvailability };
28
+ }
29
+ return memo;
30
+ }
31
+ function getInitialMachineMetadata() {
32
+ return compute().metadata;
33
+ }
34
+ function getStartupCliAvailability() {
35
+ return compute().cliAvailability;
36
+ }
37
+
38
+ export { getStartupCliAvailability as a, getInitialMachineMetadata as g };
@@ -0,0 +1,41 @@
1
+ 'use strict';
2
+
3
+ var os = require('node:os');
4
+ var _package = require('./package-Cl5BEP5x.cjs');
5
+ var configuration = require('./configuration-v9f8LM9T.cjs');
6
+ var projectPath = require('./projectPath-ChLhdOyt.cjs');
7
+ var detectCLI = require('./detectCLI-DR9ZaN6B.cjs');
8
+ var localHappyAgentAuth = require('./localHappyAgentAuth-BXiHPXdC.cjs');
9
+
10
+ function buildInitialMachineMetadata(cliAvailability) {
11
+ const hostSuffix = process.env.HAPPY_VARIANT === "dev" ? "-dev" : "";
12
+ return {
13
+ teamsVersion: 1,
14
+ teamLaunchVersion: 1,
15
+ host: os.hostname() + hostSuffix,
16
+ platform: os.platform(),
17
+ happyCliVersion: _package.packageJson.version,
18
+ homeDir: os.homedir(),
19
+ happyHomeDir: configuration.configuration.happyHomeDir,
20
+ happyLibDir: projectPath.projectPath(),
21
+ cliAvailability,
22
+ resumeSupport: { ...localHappyAgentAuth.detectResumeSupport(), rpcAvailable: true }
23
+ };
24
+ }
25
+ let memo = null;
26
+ function compute() {
27
+ if (!memo) {
28
+ const cliAvailability = detectCLI.detectCLIAvailability();
29
+ memo = { metadata: buildInitialMachineMetadata(cliAvailability), cliAvailability };
30
+ }
31
+ return memo;
32
+ }
33
+ function getInitialMachineMetadata() {
34
+ return compute().metadata;
35
+ }
36
+ function getStartupCliAvailability() {
37
+ return compute().cliAvailability;
38
+ }
39
+
40
+ exports.getInitialMachineMetadata = getInitialMachineMetadata;
41
+ exports.getStartupCliAvailability = getStartupCliAvailability;