very-happy-cli 0.2.158 → 0.2.160

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 (258) hide show
  1. package/dist/{AcpBackend-DIDRig5G.cjs → AcpBackend-Bm2rdke8.cjs} +78 -76
  2. package/dist/{AcpBackend-vDVLHuYJ.mjs → AcpBackend-mzv8Dhba.mjs} +4 -2
  3. package/dist/{AcpSessionManager-C44U99CC.cjs → AcpSessionManager-BAY1Pggx.cjs} +9 -9
  4. package/dist/{AcpSessionManager-CmRjfhn3.mjs → AcpSessionManager-CoMWFVw3.mjs} +1 -1
  5. package/dist/BasePermissionHandler-CFHAxumV.cjs +157 -0
  6. package/dist/BasePermissionHandler-m3WVholL.mjs +155 -0
  7. package/dist/BaseReasoningProcessor-BFa9_rZA.cjs +200 -0
  8. package/dist/BaseReasoningProcessor-CYrKBXGm.mjs +198 -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-Dw8Jx_CJ.cjs → agentHome-CboCeKWq.cjs} +14 -28
  16. package/dist/{agentHome-CyLmGH5L.mjs → agentHome-Dj1C43aJ.mjs} +8 -22
  17. package/dist/api-CLMUr-SX.mjs +3339 -0
  18. package/dist/api-CgundNNX.cjs +3346 -0
  19. package/dist/{types-DIBF4U0Y.mjs → apiMachine-B9dLW_p5.mjs} +9116 -16015
  20. package/dist/{types-DnrPeN80.cjs → apiMachine-Bn8482VM.cjs} +9104 -16057
  21. package/dist/assistantTools-BTqPnlFl.cjs +380 -0
  22. package/dist/assistantTools-D6tuc6o4.mjs +376 -0
  23. package/dist/attachmentContent-DpiTJZb4.cjs +88 -0
  24. package/dist/attachmentContent-_kxRznNf.mjs +82 -0
  25. package/dist/attachmentLimits-CzVrqgLR.cjs +354 -0
  26. package/dist/attachmentLimits-yba1uHFO.mjs +348 -0
  27. package/dist/auth-BDOVh5h5.cjs +220 -0
  28. package/dist/auth-Cwutmdsa.mjs +225 -0
  29. package/dist/auth-PYHZQNPp.mjs +218 -0
  30. package/dist/auth-ba4WMYrN.cjs +227 -0
  31. package/dist/authRelay-BdYkC1Po.cjs +156 -0
  32. package/dist/authRelay-DSAvg1uv.mjs +143 -0
  33. package/dist/{auto-DZbNcTXx.cjs → auto-BOX_fgmR.cjs} +70 -79
  34. package/dist/{auto-BlMZPwOk.mjs → auto-BXu14yP_.mjs} +27 -36
  35. package/dist/backgroundTaskActivity-8PdPxrvy.mjs +149 -0
  36. package/dist/backgroundTaskActivity-CBvUdj39.cjs +157 -0
  37. package/dist/bootstrap-B5G1TijC.cjs +116 -0
  38. package/dist/bootstrap-hxXPCFMx.mjs +112 -0
  39. package/dist/browser-Y6Bl8L_O.cjs +22 -0
  40. package/dist/browser-jh2P0UVZ.mjs +20 -0
  41. package/dist/claudeCliPath-BqkaH2oR.mjs +8 -0
  42. package/dist/claudeCliPath-U4HHmV4r.cjs +10 -0
  43. package/dist/claudeLocal-BaY4fZKi.mjs +339 -0
  44. package/dist/claudeLocal-CRGG4Pea.cjs +343 -0
  45. package/dist/claudeLocalLauncher-D4T7MTqd.mjs +152 -0
  46. package/dist/claudeLocalLauncher-DyEbVzUN.cjs +154 -0
  47. package/dist/cliUpdate-DsKXPFYp.cjs +120 -0
  48. package/dist/cliUpdate-Y34VGe9Y.mjs +112 -0
  49. package/dist/client-3Ac-O4pw.cjs +104 -0
  50. package/dist/client-BPNbmtvO.cjs +119 -0
  51. package/dist/client-CeGKqqcJ.mjs +100 -0
  52. package/dist/client-ClR0K8zX.mjs +112 -0
  53. package/dist/codex/happyMcpStdioBridge.cjs +33 -14
  54. package/dist/codex/happyMcpStdioBridge.mjs +26 -7
  55. package/dist/codexAppServerClient-I3teiV-N.mjs +1088 -0
  56. package/dist/codexAppServerClient-q2FjnRcK.cjs +1090 -0
  57. package/dist/codexCommand-4zcccIoq.cjs +2088 -0
  58. package/dist/codexCommand-Cc9gcbdX.mjs +2086 -0
  59. package/dist/codexThreadFork-BH9IZPqD.cjs +350 -0
  60. package/dist/codexThreadFork-slzAseLx.mjs +338 -0
  61. package/dist/{config-BtPArqRH.mjs → config-CTx_jb-C.mjs} +7 -40
  62. package/dist/{config-DG84bjwF.cjs → config-Ci9Kpgwa.cjs} +26 -59
  63. package/dist/configuration-BSYpcPwE.cjs +181 -0
  64. package/dist/configuration-RfeNjFmd.mjs +170 -0
  65. package/dist/connect-BpOdzNbE.mjs +682 -0
  66. package/dist/connect-C2CiOUFs.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-DsDr6E2t.cjs +69 -0
  72. package/dist/context-H0Bcb9S_.mjs +65 -0
  73. package/dist/controlClient-BGbDcgWS.mjs +260 -0
  74. package/dist/controlClient-Bcwv3D21.cjs +279 -0
  75. package/dist/createSessionMetadata-BJxEnM-o.cjs +58 -0
  76. package/dist/createSessionMetadata-CVVkGjxV.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-C5CYTVpm.cjs +507 -0
  82. package/dist/deterministicJson-CzkFJWw1.mjs +502 -0
  83. package/dist/doctor-BPkYWSuq.mjs +75 -0
  84. package/dist/doctor-D2YJ-Yn2.cjs +395 -0
  85. package/dist/doctor-DOvByjbk.mjs +391 -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-BCwNrMyv.cjs +64 -0
  92. package/dist/ensureDaemonRunning-Dqa2pOjY.mjs +61 -0
  93. package/dist/handleResumeCommand-BvXYf5El.mjs +240 -0
  94. package/dist/handleResumeCommand-C2cKchpX.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-DPCsWlWK.cjs → index-B6pAdvJx.cjs} +131 -91
  99. package/dist/index-Bu5Zi_a9.cjs +182 -0
  100. package/dist/index-D3kI0hDR.cjs +107 -0
  101. package/dist/index-DA7yINuk.cjs +994 -0
  102. package/dist/index-DDeHXrIX.cjs +71 -0
  103. package/dist/index-DKLU_fD0.mjs +158 -0
  104. package/dist/{index-ZChGsuB7.mjs → index-DMZqWwsP.mjs} +79 -39
  105. package/dist/index-DVkMGPyS.mjs +68 -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-DarS_Wco.mjs → install-BO_W7VhL.mjs} +37 -37
  110. package/dist/install-BgoC2e_2.cjs +88 -0
  111. package/dist/install-CFY3tYtJ.mjs +86 -0
  112. package/dist/{install-wKQGgXvN.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-DcQfee_O.cjs → installTerminalHooks-BQZbvxsZ.cjs} +5 -40
  116. package/dist/{installTerminalHooks-CpNbRFPz.mjs → installTerminalHooks-By7gBMEF.mjs} +3 -38
  117. package/dist/lib.cjs +28 -19
  118. package/dist/lib.d.cts +126 -2
  119. package/dist/lib.d.mts +126 -2
  120. package/dist/lib.mjs +23 -14
  121. package/dist/lidState-BeDfxxEX.cjs +305 -0
  122. package/dist/lidState-CeEt442o.mjs +297 -0
  123. package/dist/limits-C-a7gr04.cjs +43 -0
  124. package/dist/limits-DIo7rEBR.mjs +36 -0
  125. package/dist/localHappyAgentAuth-C-HQyiv6.mjs +82 -0
  126. package/dist/localHappyAgentAuth-D6rFhaoc.cjs +86 -0
  127. package/dist/logger-6HYUEXNk.mjs +271 -0
  128. package/dist/logger-CS0mw3fa.cjs +275 -0
  129. package/dist/loginShellEnv-BkuYtExZ.cjs +182 -0
  130. package/dist/loginShellEnv-Dw8M7tkI.mjs +167 -0
  131. package/dist/machineMetadata-DyDbODYd.cjs +41 -0
  132. package/dist/machineMetadata-oOzBfDfs.mjs +38 -0
  133. package/dist/main-BkxJP6JQ.cjs +941 -0
  134. package/dist/main-BwNIAI1A.mjs +939 -0
  135. package/dist/manager-BQ4flvQZ.mjs +101 -0
  136. package/dist/manager-Cly8xVIR.cjs +105 -0
  137. package/dist/{mcp-BN6bKIGb.mjs → mcp-B1A4I3TK.mjs} +27 -33
  138. package/dist/{mcp-DGdeUUDJ.cjs → mcp-Hszd7qpS.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-BhaKlnxz.mjs +171 -0
  146. package/dist/package-BwMrPwqH.cjs +173 -0
  147. package/dist/path-B7zW-WwE.cjs +18 -0
  148. package/dist/path-D2wdaNSk.mjs +15 -0
  149. package/dist/peerTools-BTqw97Gb.mjs +272 -0
  150. package/dist/peerTools-BvKtHXj8.cjs +283 -0
  151. package/dist/permissionMode-Cr5JCbB7.mjs +80 -0
  152. package/dist/permissionMode-CrV-XuMs.cjs +87 -0
  153. package/dist/persistence-HGW_ZVs9.mjs +372 -0
  154. package/dist/persistence-yKTH3-5X.cjs +414 -0
  155. package/dist/piExtension.mjs +2 -1
  156. package/dist/piRunnerArgs-BNloJCCg.cjs +66 -0
  157. package/dist/piRunnerArgs-BuX1UFWy.mjs +59 -0
  158. package/dist/{piRuntime-bkw2NAZU.mjs → piRuntime-CSGkwCKQ.mjs} +2 -2
  159. package/dist/{piRuntime-3qtbKujX.cjs → piRuntime-C_H7MJCM.cjs} +4 -4
  160. package/dist/{piTerminal-DilKwM7B.mjs → piTerminal-C8a1OrNQ.mjs} +32 -35
  161. package/dist/{piTerminal-BYxp3LMr.cjs → piTerminal-DNCZ6yTM.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-Ccvsz7Ou.mjs +536 -0
  167. package/dist/registerCommonHandlers-DskirN-_.cjs +538 -0
  168. package/dist/registerKillSessionHandler-DZeLXWcB.cjs +361 -0
  169. package/dist/registerKillSessionHandler-GYvHdipX.mjs +358 -0
  170. package/dist/remoteSessionClient-B0LraSB9.cjs +634 -0
  171. package/dist/remoteSessionClient-CYnXRynE.mjs +612 -0
  172. package/dist/resources-BdFBQi8r.mjs +117 -0
  173. package/dist/resources-JDPugcDq.cjs +120 -0
  174. package/dist/run-CJzxoHVh.cjs +5762 -0
  175. package/dist/run-D3ifupU3.mjs +5739 -0
  176. package/dist/runClaude-Ba01qT-u.mjs +848 -0
  177. package/dist/runClaude-Da3RirzE.cjs +850 -0
  178. package/dist/runClaudeDeps-DOt79DjU.mjs +3624 -0
  179. package/dist/runClaudeDeps-DOzEBMls.cjs +3649 -0
  180. package/dist/{runGemini-Cjii069p.mjs → runGemini-BGeTz57m.mjs} +58 -31
  181. package/dist/{runGemini-28O2sqyI.cjs → runGemini-DSr9LIxL.cjs} +202 -175
  182. package/dist/{runOpenClaw-CiMZad-H.cjs → runOpenClaw-B1mTxN35.cjs} +64 -65
  183. package/dist/{runOpenClaw-jaLr7KF1.mjs → runOpenClaw-CogSedIc.mjs} +31 -32
  184. package/dist/sandbox-CG7IyDTU.cjs +187 -0
  185. package/dist/sandbox-DTe6d54R.mjs +180 -0
  186. package/dist/selfCheck-C9mVrQwf.mjs +84 -0
  187. package/dist/selfCheck-Dc-mNSLb.cjs +87 -0
  188. package/dist/{send-D5ejHPXG.cjs → send-B7J_eaG3.cjs} +16 -9
  189. package/dist/{send-C9mOtChi.mjs → send-CBXJKc6O.mjs} +12 -5
  190. package/dist/server-CZTP_iOn.cjs +407 -0
  191. package/dist/server-DcVBv04l.mjs +404 -0
  192. package/dist/sessionLock-Bys1PNSo.cjs +205 -0
  193. package/dist/sessionLock-D-EG2CfG.mjs +197 -0
  194. package/dist/sessionModeFile-DMl3dw3r.mjs +32 -0
  195. package/dist/sessionModeFile-RSm0NQkH.cjs +36 -0
  196. package/dist/sessionOps-Dn8z85h_.cjs +783 -0
  197. package/dist/sessionOps-SuHW8Dfe.mjs +760 -0
  198. package/dist/sessionScanner-BOrGjMXL.cjs +209 -0
  199. package/dist/sessionScanner-CX3onqXh.mjs +206 -0
  200. package/dist/{sessions-W6771g3X.mjs → sessions-BEG_HTSi.mjs} +17 -8
  201. package/dist/{sessions-BNMPQoLE.cjs → sessions-D74aJbhL.cjs} +37 -28
  202. package/dist/setupOfflineReconnection-ByElY60m.cjs +74 -0
  203. package/dist/setupOfflineReconnection-DpvWTt69.mjs +72 -0
  204. package/dist/smallFastModel-BLNgMrwR.mjs +18 -0
  205. package/dist/smallFastModel-D_uxGMo3.cjs +21 -0
  206. package/dist/{spawn-D0QVhzRb.mjs → spawn-B7yro0b2.mjs} +26 -38
  207. package/dist/{spawn-Ddtom1cb.cjs → spawn-DgR0RKRs.cjs} +52 -64
  208. package/dist/spawnAgents-BGQiEF-w.cjs +52 -0
  209. package/dist/spawnAgents-DZzZ9jMI.mjs +45 -0
  210. package/dist/spawnHappyCLI-B2H5s4B_.mjs +64 -0
  211. package/dist/spawnHappyCLI-DBhwZT7O.cjs +66 -0
  212. package/dist/specialCommands-BSqhYg5X.mjs +52 -0
  213. package/dist/specialCommands-DSsTeRej.cjs +54 -0
  214. package/dist/startFileWatcher-B4VsLgjD.cjs +71 -0
  215. package/dist/startFileWatcher-DErVWZE4.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-C8gyQFMc.mjs +69 -0
  221. package/dist/sync-DccIKZ5_.cjs +71 -0
  222. package/dist/systemPrompt-BwTPWfMu.cjs +97 -0
  223. package/dist/systemPrompt-DX521JJz.mjs +94 -0
  224. package/dist/{teams-CqSwtw2O.mjs → teams-C32F1hqd.mjs} +9 -40
  225. package/dist/{teams-BZ1tayg_.cjs → teams-Dl8g8kTI.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-D0XyHOid.mjs +38 -0
  233. package/dist/time-DCuTyook.cjs +42 -0
  234. package/dist/titleGenerator-CQ8CoGhg.mjs +166 -0
  235. package/dist/titleGenerator-ChzMJsyg.cjs +172 -0
  236. package/dist/tmuxSocket-B8Yx20sT.mjs +19 -0
  237. package/dist/tmuxSocket-D-Xt6Vn-.cjs +24 -0
  238. package/dist/{todo-BYMg0fR0.cjs → todo-BvUOTa8G.cjs} +15 -12
  239. package/dist/{todo-BbusB1zM.mjs → todo-CZ6cFrrn.mjs} +11 -8
  240. package/dist/tools-BZtHF_qQ.mjs +177 -0
  241. package/dist/tools-Be3AoAwu.cjs +63 -0
  242. package/dist/tools-DQj0AeLk.cjs +180 -0
  243. package/dist/tools-DkluDcG4.mjs +60 -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-BkLzaJ6I.mjs +47 -0
  249. package/dist/uninstall-x-TUtf5H.cjs +49 -0
  250. package/package.json +7 -7
  251. package/dist/agentGuidance-CrR9l62U.mjs +0 -2145
  252. package/dist/agentGuidance-DwOWbX55.cjs +0 -2217
  253. package/dist/index-BG932eCh.cjs +0 -19655
  254. package/dist/index-CVCt3kSt.mjs +0 -19591
  255. package/dist/index-D5ScEErM.cjs +0 -58
  256. package/dist/index-DgO0FHOx.mjs +0 -52
  257. package/dist/limits-D2uN090G.mjs +0 -2528
  258. package/dist/limits-kqFqhfsh.cjs +0 -2652
@@ -1,57 +1,87 @@
1
1
  'use strict';
2
2
 
3
- var AcpBackend = require('./AcpBackend-DIDRig5G.cjs');
4
- var persistence = require('./limits-kqFqhfsh.cjs');
5
- var AcpSessionManager = require('./AcpSessionManager-C44U99CC.cjs');
6
- var index$1 = require('./index-BG932eCh.cjs');
7
- var piRuntime = require('./piRuntime-3qtbKujX.cjs');
3
+ var AcpBackend = require('./AcpBackend-Bm2rdke8.cjs');
4
+ var logger = require('./logger-CS0mw3fa.cjs');
5
+ var AcpSessionManager = require('./AcpSessionManager-BAY1Pggx.cjs');
6
+ var index = require('./index-DA7yINuk.cjs');
7
+ var agentAttachments = require('./agentAttachments-Dbw8iMCZ.cjs');
8
+ var configuration = require('./configuration-BSYpcPwE.cjs');
9
+ var attachmentContent = require('./attachmentContent-DpiTJZb4.cjs');
10
+ var piRuntime = require('./piRuntime-C_H7MJCM.cjs');
8
11
  var node_crypto = require('node:crypto');
9
12
  var path = require('node:path');
10
- var index = require('./types-DnrPeN80.cjs');
11
- var terminalTitleSuggest = require('./terminalTitleSuggest-Dji8I0Jy.cjs');
13
+ var api = require('./api-CgundNNX.cjs');
14
+ var registerKillSessionHandler = require('./registerKillSessionHandler-DZeLXWcB.cjs');
15
+ var deterministicJson = require('./deterministicJson-C5CYTVpm.cjs');
16
+ var persistence = require('./persistence-yKTH3-5X.cjs');
17
+ var machineMetadata = require('./machineMetadata-DyDbODYd.cjs');
18
+ var createSessionMetadata = require('./createSessionMetadata-BJxEnM-o.cjs');
19
+ var setupOfflineReconnection = require('./setupOfflineReconnection-ByElY60m.cjs');
20
+ var controlClient = require('./controlClient-Bcwv3D21.cjs');
21
+ var authRelay = require('./authRelay-BdYkC1Po.cjs');
22
+ var streamRelay = require('./streamRelay-BiKw59Cc.cjs');
23
+ var projectPath = require('./projectPath-ChLhdOyt.cjs');
24
+ var BasePermissionHandler = require('./BasePermissionHandler-CFHAxumV.cjs');
25
+ var titleGenerator = require('./titleGenerator-ChzMJsyg.cjs');
26
+ var sessionModeFile = require('./sessionModeFile-RSm0NQkH.cjs');
27
+ var editPaths = require('./editPaths-Bqp4OFPw.cjs');
12
28
  require('node:child_process');
13
29
  require('@agentclientprotocol/sdk');
14
- require('zod');
15
- require('@paralleldrive/cuid2');
16
- require('node:fs/promises');
17
- require('node:fs');
18
- require('tweetnacl');
30
+ require('./time-DCuTyook.cjs');
31
+ require('./contentLogMetadata-ZSFk_NjQ.cjs');
32
+ require('./package-BwMrPwqH.cjs');
19
33
  require('chalk');
20
34
  require('node:util');
35
+ require('node:fs');
36
+ require('@paralleldrive/cuid2');
37
+ require('zod');
21
38
  require('node:os');
22
- require('cross-spawn');
23
- require('node:readline');
24
- require('./agentGuidance-DwOWbX55.cjs');
39
+ require('node:fs/promises');
40
+ require('./attachmentLimits-CzVrqgLR.cjs');
41
+ require('./resources-JDPugcDq.cjs');
25
42
  require('axios');
26
- require('socket.io-client');
27
- require('fs/promises');
28
- require('ink');
29
- require('react');
30
- require('@anthropic-ai/claude-agent-sdk');
31
43
  require('node:events');
44
+ require('socket.io-client');
45
+ require('./limits-C-a7gr04.cjs');
46
+ require('./lidState-BeDfxxEX.cjs');
32
47
  require('os');
33
48
  require('child_process');
34
- require('fs');
35
- require('path');
36
- require('@anthropic-ai/sandbox-runtime');
37
- require('expo-server-sdk');
49
+ require('./registerCommonHandlers-DskirN-_.cjs');
50
+ require('util');
51
+ require('fs/promises');
38
52
  require('crypto');
39
- require('ps-list');
40
- require('tmp');
41
- require('open');
42
- require('fastify');
43
- require('fastify-type-provider-zod');
44
- require('node:module');
53
+ require('path');
54
+ require('cross-spawn');
55
+ require('./sync-DccIKZ5_.cjs');
56
+ require('./backgroundTaskActivity-CBvUdj39.cjs');
57
+ require('tweetnacl');
58
+ require('./types-CRS-srZK.cjs');
59
+ require('./client-3Ac-O4pw.cjs');
60
+ require('./context-DsDr6E2t.cjs');
61
+ require('./sessionOps-Dn8z85h_.cjs');
62
+ require('./tools-Be3AoAwu.cjs');
63
+ require('./tools-DQj0AeLk.cjs');
64
+ require('./client-BPNbmtvO.cjs');
65
+ require('./peerTools-BvKtHXj8.cjs');
66
+ require('./ids-B6ZC0HGt.cjs');
67
+ require('./remoteSessionClient-B0LraSB9.cjs');
45
68
  require('@modelcontextprotocol/sdk/server/mcp.js');
46
69
  require('node:http');
47
70
  require('@modelcontextprotocol/sdk/server/streamableHttp.js');
48
- require('http');
49
- require('util');
50
- require('inquirer');
51
- require('node:url');
52
- require('node:readline/promises');
53
- require('node-pty');
71
+ require('./assistantTools-BTqPnlFl.cjs');
72
+ require('./terminals-B_bfC9c2.cjs');
73
+ require('./terminalTitleSuggest-DhvRFX3H.cjs');
74
+ require('./tmuxSocket-D-Xt6Vn-.cjs');
75
+ require('./bootstrap-B5G1TijC.cjs');
76
+ require('./agentGuidance-B5NATuFa.cjs');
77
+ require('./trimIdent-4gvk9Wk6.cjs');
78
+ require('./previewPath-B0rBdhy1.cjs');
79
+ require('./detectCLI-DR9ZaN6B.cjs');
80
+ require('fs');
81
+ require('./localHappyAgentAuth-D6rFhaoc.cjs');
54
82
  require('url');
83
+ require('node:module');
84
+ require('./oneShotPrompts-CL0dip9C.cjs');
55
85
 
56
86
  function createAcpBackend(options) {
57
87
  const backendOptions = {
@@ -555,7 +585,7 @@ function resolveRequestedLegacyModelCode(models, requested) {
555
585
  }
556
586
  return null;
557
587
  }
558
- class GenericAcpPermissionHandler extends index$1.BasePermissionHandler {
588
+ class GenericAcpPermissionHandler extends BasePermissionHandler.BasePermissionHandler {
559
589
  logPrefix;
560
590
  constructor(session, agentName) {
561
591
  super(session);
@@ -573,7 +603,7 @@ class GenericAcpPermissionHandler extends index$1.BasePermissionHandler {
573
603
  input
574
604
  });
575
605
  this.addPendingRequestToState(toolCallId, toolName, input);
576
- persistence.logger.debug(`${this.logPrefix} Permission request sent for tool: ${toolName} (${toolCallId})`);
606
+ logger.logger.debug(`${this.logPrefix} Permission request sent for tool: ${toolName} (${toolCallId})`);
577
607
  });
578
608
  }
579
609
  }
@@ -589,32 +619,33 @@ function resolveSessionFlavor(agentName) {
589
619
  async function runAcp(opts) {
590
620
  const verbose = opts.verbose === true;
591
621
  const sessionTag = node_crypto.randomUUID();
592
- index.connectionState.setBackend(opts.agentName);
593
- const api = await index.ApiClient.create(opts.credentials);
622
+ api.connectionState.setBackend(opts.agentName);
623
+ const api$1 = await api.ApiClient.create(opts.credentials);
594
624
  const settings = await persistence.readSettings();
595
625
  if (!settings?.machineId) {
596
626
  throw new Error("No machine ID found in settings");
597
627
  }
598
- await api.getOrCreateMachine({
628
+ await api$1.getOrCreateMachine({
599
629
  machineId: settings.machineId,
600
- metadata: index$1.initialMachineMetadata
630
+ metadata: machineMetadata.getInitialMachineMetadata()
601
631
  });
602
- const { state, metadata } = index$1.createSessionMetadata({
632
+ const { state, metadata } = createSessionMetadata.createSessionMetadata({
603
633
  flavor: resolveSessionFlavor(opts.agentName),
604
634
  ...process.env.VH_TEAM_OPERATION_ID ? { teamOperationId: process.env.VH_TEAM_OPERATION_ID } : {},
605
635
  machineId: settings.machineId,
606
636
  startedBy: opts.startedBy,
607
- sandbox: settings.sandboxConfig
637
+ sandbox: settings.sandboxConfig,
638
+ capabilities: [index.PROMPT_QUEUE_CAPABILITY]
608
639
  });
609
640
  metadata.attachmentKinds = [];
610
- const response = await api.getOrCreateSession({ tag: sessionTag, metadata, state });
641
+ const response = await api$1.getOrCreateSession({ tag: sessionTag, metadata, state });
611
642
  if (response) {
612
643
  logAcp("muted", `Happy Session ID: ${response.id}`);
613
644
  }
614
645
  let session;
615
646
  let permissionHandler;
616
- const { session: initialSession, reconnectionHandle } = index$1.setupOfflineReconnection({
617
- api,
647
+ const { session: initialSession, reconnectionHandle } = setupOfflineReconnection.setupOfflineReconnection({
648
+ api: api$1,
618
649
  sessionTag,
619
650
  metadata,
620
651
  state,
@@ -624,30 +655,38 @@ async function runAcp(opts) {
624
655
  if (permissionHandler) {
625
656
  permissionHandler.updateSession(newSession);
626
657
  }
658
+ attachPromptQueueDrain(newSession);
627
659
  }
628
660
  });
629
661
  session = initialSession;
630
662
  if (response) {
631
663
  try {
632
- await persistence.notifyDaemonSessionStarted(response.id, metadata, {
633
- encryptionKey: persistence.encodeBase64(response.encryptionKey),
664
+ await controlClient.notifyDaemonSessionStarted(response.id, metadata, {
665
+ encryptionKey: authRelay.encodeBase64(response.encryptionKey),
634
666
  encryptionVariant: response.encryptionVariant,
635
667
  seq: response.seq,
636
668
  metadataVersion: response.metadataVersion,
637
669
  agentStateVersion: response.agentStateVersion
638
670
  });
639
671
  } catch (error) {
640
- persistence.logger.debug("[acp] Failed to report session to daemon:", error);
672
+ logger.logger.debug("[acp] Failed to report session to daemon:", error);
641
673
  }
642
674
  }
643
675
  permissionHandler = new GenericAcpPermissionHandler(session, opts.agentName);
644
676
  permissionHandler.reset("Previous CLI process exited before responding");
645
677
  const streamingEnabled = process.env.HAPPY_SESSION_STREAM_DISABLED !== "1";
646
- const streamRelay = new index$1.StreamRelay({
678
+ const streamRelay$1 = new streamRelay.StreamRelay({
647
679
  send: (frame) => session.sendStreamFrame(frame)
648
680
  });
649
- const sessionManager = new AcpSessionManager.AcpSessionManager(streamingEnabled ? { stream: streamRelay } : {});
650
- const messageQueue = new index$1.MessageQueue2((mode) => index$1.hashObject(mode));
681
+ const sessionManager = new AcpSessionManager.AcpSessionManager(streamingEnabled ? { stream: streamRelay$1 } : {});
682
+ const messageQueue = new registerKillSessionHandler.MessageQueue2((mode) => deterministicJson.hashObject(mode));
683
+ function attachPromptQueueDrain(client) {
684
+ const drain = client.attachPromptQueueDrain({
685
+ isIdle: () => messageQueue.size() === 0 && messageQueue.isWaiting()
686
+ });
687
+ messageQueue.setOnWait(() => drain.onIdle());
688
+ }
689
+ attachPromptQueueDrain(session);
651
690
  let currentPermissionMode;
652
691
  let currentModel;
653
692
  let modeSelector = null;
@@ -668,18 +707,18 @@ async function runAcp(opts) {
668
707
  return true;
669
708
  }
670
709
  try {
671
- index$1.writeSessionModeFile(session.sessionId, mode);
710
+ sessionModeFile.writeSessionModeFile(session.sessionId, mode);
672
711
  } catch (error) {
673
- persistence.logger.debug(`[${opts.agentName}] Failed to write session mode file:`, error);
712
+ logger.logger.debug(`[${opts.agentName}] Failed to write session mode file:`, error);
674
713
  return false;
675
714
  }
676
715
  fileBackedPermissionMode = mode;
677
716
  session.updateMetadata((currentMetadata) => ({ ...currentMetadata, permissionMode: mode }));
678
- persistence.logger.debug(`[${opts.agentName}] Published file-backed permission mode: ${mode}`);
717
+ logger.logger.debug(`[${opts.agentName}] Published file-backed permission mode: ${mode}`);
679
718
  return true;
680
719
  };
681
720
  const isAssistantVariant = process.env.HAPPY_SESSION_VARIANT === "assistant";
682
- const happyServer = await index$1.startHappyServer(session, {
721
+ const happyServer = await deterministicJson.startHappyServer(session, {
683
722
  assistant: isAssistantVariant,
684
723
  ...opts.agentName === "pi" ? { onContextUsage: (contextUsage) => {
685
724
  session.updateAgentState((state2) => ({ ...state2, contextUsage }));
@@ -688,7 +727,7 @@ async function runAcp(opts) {
688
727
  if (opts.agentName === "pi") session.updateAgentState((state2) => ({ ...state2, contextUsage: null }));
689
728
  const mcpServers = {
690
729
  happy: {
691
- command: path.join(terminalTitleSuggest.projectPath(), "bin", "very-happy-mcp.mjs"),
730
+ command: path.join(projectPath.projectPath(), "bin", "very-happy-mcp.mjs"),
692
731
  args: ["--url", happyServer.url]
693
732
  }
694
733
  };
@@ -747,7 +786,7 @@ async function runAcp(opts) {
747
786
  });
748
787
  const stopRunnerFromBackendStatus = (status, detail) => {
749
788
  const reason = detail ? `${opts.agentName} backend ${status}: ${detail}` : `${opts.agentName} backend ${status}`;
750
- persistence.logger.debug(`[${opts.agentName}] ${reason}; stopping ACP runner`);
789
+ logger.logger.debug(`[${opts.agentName}] ${reason}; stopping ACP runner`);
751
790
  shouldExit = true;
752
791
  messageQueue.close();
753
792
  clearPendingTurn(new Error(reason));
@@ -769,9 +808,9 @@ async function runAcp(opts) {
769
808
  return;
770
809
  }
771
810
  if (permissionModeIsFileBacked()) {
772
- const mode = index$1.normalizeAcpPermissionMode(requestedMode);
811
+ const mode = sessionModeFile.normalizeAcpPermissionMode(requestedMode);
773
812
  if (!mode) {
774
- persistence.logger.debug(`[${opts.agentName}] Ignoring unknown file-backed permission mode request: ${requestedMode}`);
813
+ logger.logger.debug(`[${opts.agentName}] Ignoring unknown file-backed permission mode request: ${requestedMode}`);
775
814
  return;
776
815
  }
777
816
  publishFileBackedPermissionMode(mode);
@@ -780,7 +819,7 @@ async function runAcp(opts) {
780
819
  if (modeSelector) {
781
820
  const resolved = resolveRequestedCode(modeSelector.options, requestedMode);
782
821
  if (!resolved) {
783
- persistence.logger.debug(`[${opts.agentName}] Ignoring unknown ACP permission mode request: ${requestedMode}`);
822
+ logger.logger.debug(`[${opts.agentName}] Ignoring unknown ACP permission mode request: ${requestedMode}`);
784
823
  return;
785
824
  }
786
825
  if (resolved === modeSelector.currentCode) {
@@ -797,7 +836,7 @@ async function runAcp(opts) {
797
836
  }
798
837
  const resolvedLegacyMode = resolveRequestedLegacyModeCode(legacyModes, requestedMode);
799
838
  if (!resolvedLegacyMode) {
800
- persistence.logger.debug(`[${opts.agentName}] Ignoring unknown ACP legacy mode request: ${requestedMode}`);
839
+ logger.logger.debug(`[${opts.agentName}] Ignoring unknown ACP legacy mode request: ${requestedMode}`);
801
840
  return;
802
841
  }
803
842
  if (resolvedLegacyMode === legacyModes.currentModeId) {
@@ -861,7 +900,7 @@ async function runAcp(opts) {
861
900
  if (modelSelector) {
862
901
  const resolved = resolveRequestedCode(modelSelector.options, requestedModel);
863
902
  if (!resolved) {
864
- persistence.logger.debug(`[${opts.agentName}] Ignoring unknown ACP model request: ${requestedModel}`);
903
+ logger.logger.debug(`[${opts.agentName}] Ignoring unknown ACP model request: ${requestedModel}`);
865
904
  return false;
866
905
  }
867
906
  if (resolved === modelSelector.currentCode) {
@@ -878,7 +917,7 @@ async function runAcp(opts) {
878
917
  }
879
918
  const resolvedLegacyModel = resolveRequestedLegacyModelCode(legacyModels, requestedModel);
880
919
  if (!resolvedLegacyModel) {
881
- persistence.logger.debug(`[${opts.agentName}] Ignoring unknown ACP legacy model request: ${requestedModel}`);
920
+ logger.logger.debug(`[${opts.agentName}] Ignoring unknown ACP legacy model request: ${requestedModel}`);
882
921
  return false;
883
922
  }
884
923
  if (resolvedLegacyModel === legacyModels.currentModelId) {
@@ -898,7 +937,7 @@ async function runAcp(opts) {
898
937
  if (modelSelector) return resolveRequestedCode(modelSelector.options, requested) === modelSelector.currentCode;
899
938
  return !!legacyModels && resolveRequestedLegacyModelCode(legacyModels, requested) === legacyModels.currentModelId;
900
939
  };
901
- const editThrottle = new index$1.EditReportThrottle();
940
+ const editThrottle = new editPaths.EditReportThrottle();
902
941
  const onBackendMessage = (msg) => {
903
942
  if (verbose) {
904
943
  logAcp("muted", `Outgoing raw backend message from ${opts.agentName}: ${formatUnknownForConsole(msg, ACP_RAW_PREVIEW_CHARS)}`);
@@ -1032,15 +1071,15 @@ async function runAcp(opts) {
1032
1071
  session.sendAgentUsageSnapshot(resolveSessionFlavor(opts.agentName), msg);
1033
1072
  }
1034
1073
  if (msg.type === "tool-call") {
1035
- for (const edit of editThrottle.take(index$1.extractAcpEditPaths(msg.toolName, msg.args))) {
1036
- persistence.reportSessionEditToDaemon({ sessionId: session.sessionId, path: edit.path, tool: edit.tool, cwd: process.cwd() });
1074
+ for (const edit of editThrottle.take(editPaths.extractAcpEditPaths(msg.toolName, msg.args))) {
1075
+ controlClient.reportSessionEditToDaemon({ sessionId: session.sessionId, path: edit.path, tool: edit.tool, cwd: process.cwd() });
1037
1076
  }
1038
1077
  }
1039
1078
  sendEnvelopes(sessionManager.mapMessage(msg));
1040
1079
  };
1041
1080
  backend.onMessage(onBackendMessage);
1042
- const titleGenerator = new index$1.TitleGenerator(session);
1043
- index$1.registerAgentAttachmentDownloads(session);
1081
+ const titleGenerator$1 = new titleGenerator.TitleGenerator(session);
1082
+ agentAttachments.registerAgentAttachmentDownloads(session);
1044
1083
  let userMessageDelivery = Promise.resolve();
1045
1084
  session.onUserMessage((message) => {
1046
1085
  const downloads = session.drainAttachmentsForUserMessage();
@@ -1049,14 +1088,14 @@ async function runAcp(opts) {
1049
1088
  if (!message.content.text && !attachments?.length) {
1050
1089
  return;
1051
1090
  }
1052
- titleGenerator.maybeGenerate(message.content.text);
1091
+ titleGenerator$1.maybeGenerate(message.content.text);
1053
1092
  if (typeof message.meta?.permissionMode === "string") {
1054
1093
  currentPermissionMode = message.meta.permissionMode;
1055
- persistence.logger.debug(`[${opts.agentName}] Requested ACP permission mode: ${currentPermissionMode}`);
1094
+ logger.logger.debug(`[${opts.agentName}] Requested ACP permission mode: ${currentPermissionMode}`);
1056
1095
  }
1057
1096
  if (message.meta && Object.prototype.hasOwnProperty.call(message.meta, "model")) {
1058
1097
  currentModel = message.meta.model ?? null;
1059
- persistence.logger.debug(`[${opts.agentName}] Requested ACP model: ${currentModel ?? "null"}`);
1098
+ logger.logger.debug(`[${opts.agentName}] Requested ACP model: ${currentModel ?? "null"}`);
1060
1099
  }
1061
1100
  if (message.meta && Object.prototype.hasOwnProperty.call(message.meta, "effort")) {
1062
1101
  currentEffort = message.meta.effort ?? null;
@@ -1067,7 +1106,7 @@ async function runAcp(opts) {
1067
1106
  effort: currentEffort
1068
1107
  }, attachments, message.localKey);
1069
1108
  }).catch(() => {
1070
- persistence.logger.warn("[ACP] Failed to prepare user attachments");
1109
+ logger.logger.warn("[ACP] Failed to prepare user attachments");
1071
1110
  session.sendSessionEvent({ type: "message", message: "Could not prepare this message. Please send it again." });
1072
1111
  });
1073
1112
  });
@@ -1084,7 +1123,7 @@ async function runAcp(opts) {
1084
1123
  permissionHandler.reset();
1085
1124
  abortController.abort();
1086
1125
  } catch (error) {
1087
- persistence.logger.debug(`[${opts.agentName}] Abort failed:`, error);
1126
+ logger.logger.debug(`[${opts.agentName}] Abort failed:`, error);
1088
1127
  } finally {
1089
1128
  abortController = new AbortController();
1090
1129
  }
@@ -1096,7 +1135,7 @@ async function runAcp(opts) {
1096
1135
  if (!fileBackedModeActive) {
1097
1136
  throw new Error(`${opts.agentName} does not support live permission mode changes`);
1098
1137
  }
1099
- const mode = typeof request?.mode === "string" ? index$1.normalizeAcpPermissionMode(request.mode) : null;
1138
+ const mode = typeof request?.mode === "string" ? sessionModeFile.normalizeAcpPermissionMode(request.mode) : null;
1100
1139
  if (!mode) {
1101
1140
  throw new Error("Invalid permission mode");
1102
1141
  }
@@ -1106,7 +1145,7 @@ async function runAcp(opts) {
1106
1145
  return { mode };
1107
1146
  }
1108
1147
  );
1109
- const disposeTermination = index$1.registerKillSessionHandler(session.rpcHandlerManager, async () => {
1148
+ const disposeTermination = registerKillSessionHandler.registerKillSessionHandler(session.rpcHandlerManager, async () => {
1110
1149
  shouldExit = true;
1111
1150
  messageQueue.close();
1112
1151
  clearPendingTurn(new Error("Session terminated"));
@@ -1122,7 +1161,7 @@ async function runAcp(opts) {
1122
1161
  }
1123
1162
  session.updateMetadata((current) => ({
1124
1163
  ...current,
1125
- attachmentKinds: opts.agentName === "pi" && backend.supportsImageAttachments ? [...index$1.CLAUDE_ATTACHMENT_KINDS] : []
1164
+ attachmentKinds: opts.agentName === "pi" && backend.supportsImageAttachments ? [...attachmentContent.CLAUDE_ATTACHMENT_KINDS] : []
1126
1165
  }));
1127
1166
  if (permissionModeIsFileBacked()) {
1128
1167
  fileBackedModeActive = true;
@@ -1172,17 +1211,17 @@ async function runAcp(opts) {
1172
1211
  }
1173
1212
  const prompt = todoDiscoverySent ? batch.message : `${batch.message}
1174
1213
 
1175
- ${persistence.BUILTIN_TODO_DISCOVERY}`;
1214
+ ${index.BUILTIN_TODO_DISCOVERY}`;
1176
1215
  const attachments = batch.attachments ?? [];
1177
- const staged = attachments.length ? await index$1.stageClaudeAttachments(attachments, {
1178
- happyHomeDir: persistence.configuration.happyHomeDir,
1216
+ const staged = attachments.length ? await attachmentContent.stageClaudeAttachments(attachments, {
1217
+ happyHomeDir: configuration.configuration.happyHomeDir,
1179
1218
  sessionId: session.sessionId
1180
1219
  }) : [];
1181
- await backend.sendPrompt(acpSessionId, index$1.appendStagedAttachmentsToPrompt(prompt, staged), attachments);
1220
+ await backend.sendPrompt(acpSessionId, attachmentContent.appendStagedAttachmentsToPrompt(prompt, staged), attachments);
1182
1221
  todoDiscoverySent = true;
1183
1222
  await turnEnded;
1184
1223
  sendEnvelopes(sessionManager.endTurn(turnCancelled ? "cancelled" : "completed"));
1185
- streamRelay.endTurn();
1224
+ streamRelay$1.endTurn();
1186
1225
  setThinking(false);
1187
1226
  session.sendSessionEvent({ type: "ready" });
1188
1227
  if (verbose) {
@@ -1191,7 +1230,7 @@ ${persistence.BUILTIN_TODO_DISCOVERY}`;
1191
1230
  } catch (error) {
1192
1231
  session.sendSessionEvent({ type: "message", message: "The agent could not process this message or its attachments. Please check the agent and try again." });
1193
1232
  sendEnvelopes(sessionManager.endTurn("failed"));
1194
- streamRelay.endTurn();
1233
+ streamRelay$1.endTurn();
1195
1234
  setThinking(false);
1196
1235
  session.sendSessionEvent({ type: "ready" });
1197
1236
  logAcp("error", `Prompt error from ${opts.agentName}: ${error instanceof Error ? error.message : String(error)}`);
@@ -1203,30 +1242,31 @@ ${persistence.BUILTIN_TODO_DISCOVERY}`;
1203
1242
  disposeTermination?.();
1204
1243
  setThinking(false);
1205
1244
  clearInterval(keepAliveInterval);
1206
- streamRelay.endTurn();
1207
- streamRelay.dispose();
1245
+ streamRelay$1.endTurn();
1246
+ streamRelay$1.dispose();
1208
1247
  reconnectionHandle?.cancel();
1209
1248
  clearPendingTurn(new Error("ACP runner shutting down"));
1210
1249
  try {
1211
1250
  permissionHandler.reset();
1212
1251
  } catch (error) {
1213
- persistence.logger.debug(`[${opts.agentName}] Failed to reset permission handler:`, error);
1252
+ logger.logger.debug(`[${opts.agentName}] Failed to reset permission handler:`, error);
1214
1253
  }
1215
1254
  backend.offMessage?.(onBackendMessage);
1216
1255
  await backend.dispose();
1217
1256
  if (fileBackedPermissionMode) {
1218
1257
  try {
1219
- index$1.removeSessionModeFile(session.sessionId);
1258
+ sessionModeFile.removeSessionModeFile(session.sessionId);
1220
1259
  } catch (error) {
1221
- persistence.logger.debug(`[${opts.agentName}] Failed to remove session mode file:`, error);
1260
+ logger.logger.debug(`[${opts.agentName}] Failed to remove session mode file:`, error);
1222
1261
  }
1223
1262
  }
1224
1263
  try {
1225
1264
  happyServer.stop();
1226
1265
  } catch (error) {
1227
- persistence.logger.debug(`[${opts.agentName}] Failed to stop Happy MCP server:`, error);
1266
+ logger.logger.debug(`[${opts.agentName}] Failed to stop Happy MCP server:`, error);
1228
1267
  }
1229
1268
  try {
1269
+ session.closePromptQueueDrain();
1230
1270
  session.updateMetadata((currentMetadata) => ({
1231
1271
  ...currentMetadata,
1232
1272
  lifecycleState: "archived",
@@ -1238,7 +1278,7 @@ ${persistence.BUILTIN_TODO_DISCOVERY}`;
1238
1278
  await session.flush();
1239
1279
  await session.close();
1240
1280
  } catch (error) {
1241
- persistence.logger.debug(`[${opts.agentName}] Session close failed:`, error);
1281
+ logger.logger.debug(`[${opts.agentName}] Session close failed:`, error);
1242
1282
  }
1243
1283
  }
1244
1284
  }
@@ -0,0 +1,182 @@
1
+ 'use strict';
2
+
3
+ var node_fs = require('node:fs');
4
+ var os = require('node:os');
5
+ var logger = require('./logger-CS0mw3fa.cjs');
6
+ var persistence = require('./persistence-yKTH3-5X.cjs');
7
+ var loginShellEnv = require('./loginShellEnv-BkuYtExZ.cjs');
8
+ require('chalk');
9
+ require('node:util');
10
+ require('./configuration-BSYpcPwE.cjs');
11
+ require('node:path');
12
+ require('./package-BwMrPwqH.cjs');
13
+ require('node:fs/promises');
14
+ require('zod');
15
+ require('./authRelay-BdYkC1Po.cjs');
16
+ require('node:crypto');
17
+ require('tweetnacl');
18
+ require('node:child_process');
19
+
20
+ const AGENT_HOME_CACHE_MS = 6e4;
21
+ const AGENT_HOME_FAILURE_CACHE_MS = 5 * 6e4;
22
+ const AGENT_HOME_MAX_STALE_MS = 10 * 6e4;
23
+ function decideShellProbe(entry, now, allowStale) {
24
+ if (!entry) return "await-probe";
25
+ const age = now - entry.probedAt;
26
+ if (age < entry.ttlMs) return "use-cached";
27
+ if (allowStale && age < AGENT_HOME_MAX_STALE_MS) return "use-stale-and-revalidate";
28
+ return "await-probe";
29
+ }
30
+ let shellProbe = null;
31
+ let shellProbeInFlight = null;
32
+ let last = null;
33
+ let originalDaemonEnv = null;
34
+ function snapshotDaemonEnv() {
35
+ if (!originalDaemonEnv) {
36
+ originalDaemonEnv = {};
37
+ for (const name of loginShellEnv.AGENT_HOME_ENV_NAMES) originalDaemonEnv[name] = process.env[name];
38
+ }
39
+ return originalDaemonEnv;
40
+ }
41
+ function probeShell(now) {
42
+ if (!shellProbeInFlight) {
43
+ const run = loginShellEnv.probeLoginShellEnv(loginShellEnv.AGENT_HOME_ENV_NAMES).then((env) => {
44
+ const entry = { env, probedAt: now, ttlMs: env ? AGENT_HOME_CACHE_MS : AGENT_HOME_FAILURE_CACHE_MS };
45
+ shellProbe = entry;
46
+ return entry;
47
+ });
48
+ shellProbeInFlight = run;
49
+ void run.finally(() => {
50
+ if (shellProbeInFlight === run) shellProbeInFlight = null;
51
+ }).catch(() => {
52
+ });
53
+ }
54
+ return shellProbeInFlight;
55
+ }
56
+ async function loginShellEnvFor(now, allowStale) {
57
+ const decision = decideShellProbe(shellProbe, now, allowStale);
58
+ if (decision === "await-probe") return (await probeShell(now)).env;
59
+ if (decision === "use-stale-and-revalidate") {
60
+ probeShell(now).catch((error) => logger.logger.debug("[AGENT HOME] background login-shell probe failed", error));
61
+ }
62
+ return shellProbe.env;
63
+ }
64
+ async function refreshAgentHomes(now = Date.now(), opts = {}) {
65
+ let input;
66
+ let homes;
67
+ try {
68
+ const loginShellEnv$1 = await loginShellEnvFor(now, opts.allowStale === true);
69
+ const settings = await persistence.readSettings();
70
+ input = {
71
+ settings: { claudeConfigDir: settings.claudeConfigDir, codexHome: settings.codexHome },
72
+ daemonEnv: snapshotDaemonEnv(),
73
+ loginShellEnv: loginShellEnv$1,
74
+ homeDir: os.homedir()
75
+ };
76
+ homes = loginShellEnv.resolveAgentHomes(input);
77
+ } catch (error) {
78
+ logger.logger.debug("[AGENT HOME] resolve failed, falling back", error);
79
+ if (last) return last.homes;
80
+ return loginShellEnv.resolveAgentHomes({ settings: {}, daemonEnv: snapshotDaemonEnv(), loginShellEnv: null, homeDir: os.homedir() });
81
+ }
82
+ const previous = last?.homes;
83
+ last = { input, homes };
84
+ applyAgentHomesToProcessEnv(homes);
85
+ if (!previous || previous.claudeConfigDir.path !== homes.claudeConfigDir.path || previous.codexHome.path !== homes.codexHome.path) {
86
+ logger.logger.debug(`[AGENT HOME] Claude config dir: ${loginShellEnv.describeAgentHome(homes.claudeConfigDir)}; Codex home: ${loginShellEnv.describeAgentHome(homes.codexHome)}`);
87
+ }
88
+ return homes;
89
+ }
90
+ function currentAgentHomes() {
91
+ return last?.homes ?? null;
92
+ }
93
+ function resetAgentHomesCache() {
94
+ shellProbe = null;
95
+ shellProbeInFlight = null;
96
+ last = null;
97
+ originalDaemonEnv = null;
98
+ }
99
+ function applyAgentHomesToProcessEnv(homes) {
100
+ const overlay = loginShellEnv.agentHomeEnv(homes);
101
+ for (const name of loginShellEnv.AGENT_HOME_ENV_NAMES) {
102
+ const next = overlay[name];
103
+ if (next === void 0) {
104
+ const original = snapshotDaemonEnv()[name];
105
+ if (original === void 0) delete process.env[name];
106
+ else process.env[name] = original;
107
+ } else if (process.env[name] !== next) {
108
+ process.env[name] = next;
109
+ }
110
+ }
111
+ }
112
+ function listDirSafe(path) {
113
+ try {
114
+ return node_fs.readdirSync(path);
115
+ } catch {
116
+ return [];
117
+ }
118
+ }
119
+ function fileSizeSafe(path) {
120
+ try {
121
+ const st = node_fs.statSync(path);
122
+ return st.isFile() ? st.size : null;
123
+ } catch {
124
+ return null;
125
+ }
126
+ }
127
+ function locateClaudeConversation(workingDirectory, claudeSessionId) {
128
+ const entry = last;
129
+ if (!entry) {
130
+ const input = { settings: {}, daemonEnv: process.env, loginShellEnv: null, homeDir: os.homedir() };
131
+ return loginShellEnv.findClaudeConversation(claudeSessionId, workingDirectory, loginShellEnv.agentHomeCandidates("claude", input), fileSizeSafe);
132
+ }
133
+ return loginShellEnv.findClaudeConversation(claudeSessionId, workingDirectory, loginShellEnv.agentHomeCandidates("claude", entry.input, entry.homes), fileSizeSafe);
134
+ }
135
+ function locateCodexThread(codexThreadId) {
136
+ const entry = last;
137
+ const input = entry?.input ?? { settings: {}, daemonEnv: process.env, loginShellEnv: null, homeDir: os.homedir() };
138
+ return loginShellEnv.findCodexThread(codexThreadId, loginShellEnv.agentHomeCandidates("codex", input, entry?.homes), listDirSafe);
139
+ }
140
+ function agentHomeSpawnEnv(input) {
141
+ const env = {};
142
+ if (input.claudeSessionId) {
143
+ const hit = locateClaudeConversation(input.workingDirectory, input.claudeSessionId);
144
+ if (hit && !hit.resolved) {
145
+ env[loginShellEnv.CLAUDE_CONFIG_DIR_ENV] = hit.home;
146
+ logger.logger.debug(`[AGENT HOME] Claude conversation ${input.claudeSessionId} found under ${hit.home}; overriding ${loginShellEnv.CLAUDE_CONFIG_DIR_ENV} for this spawn`);
147
+ }
148
+ }
149
+ if (input.codexThreadId) {
150
+ const hit = locateCodexThread(input.codexThreadId);
151
+ if (hit && !hit.resolved) {
152
+ env[loginShellEnv.CODEX_HOME_ENV] = hit.home;
153
+ logger.logger.debug(`[AGENT HOME] Codex thread ${input.codexThreadId} found under ${hit.home}; overriding ${loginShellEnv.CODEX_HOME_ENV} for this spawn`);
154
+ }
155
+ }
156
+ return env;
157
+ }
158
+
159
+ exports.AGENT_HOME_ENV_NAMES = loginShellEnv.AGENT_HOME_ENV_NAMES;
160
+ exports.CLAUDE_CONFIG_DIR_ENV = loginShellEnv.CLAUDE_CONFIG_DIR_ENV;
161
+ exports.CODEX_HOME_ENV = loginShellEnv.CODEX_HOME_ENV;
162
+ exports.agentHomeCandidates = loginShellEnv.agentHomeCandidates;
163
+ exports.agentHomeEnv = loginShellEnv.agentHomeEnv;
164
+ exports.claudeConversationPath = loginShellEnv.claudeConversationPath;
165
+ exports.claudeProjectDirName = loginShellEnv.claudeProjectDirName;
166
+ exports.codexRolloutFileMatches = loginShellEnv.codexRolloutFileMatches;
167
+ exports.describeAgentHome = loginShellEnv.describeAgentHome;
168
+ exports.expandHomePath = loginShellEnv.expandHomePath;
169
+ exports.findClaudeConversation = loginShellEnv.findClaudeConversation;
170
+ exports.findCodexThread = loginShellEnv.findCodexThread;
171
+ exports.probeLoginShellEnv = loginShellEnv.probeLoginShellEnv;
172
+ exports.resolveAgentHomes = loginShellEnv.resolveAgentHomes;
173
+ exports.AGENT_HOME_CACHE_MS = AGENT_HOME_CACHE_MS;
174
+ exports.AGENT_HOME_FAILURE_CACHE_MS = AGENT_HOME_FAILURE_CACHE_MS;
175
+ exports.AGENT_HOME_MAX_STALE_MS = AGENT_HOME_MAX_STALE_MS;
176
+ exports.agentHomeSpawnEnv = agentHomeSpawnEnv;
177
+ exports.currentAgentHomes = currentAgentHomes;
178
+ exports.decideShellProbe = decideShellProbe;
179
+ exports.locateClaudeConversation = locateClaudeConversation;
180
+ exports.locateCodexThread = locateCodexThread;
181
+ exports.refreshAgentHomes = refreshAgentHomes;
182
+ exports.resetAgentHomesCache = resetAgentHomesCache;