very-happy-cli 0.2.184 → 0.2.186

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 (196) hide show
  1. package/dist/{AcpBackend-Csg7Sy2P.mjs → AcpBackend-ConXUH67.mjs} +3 -3
  2. package/dist/{AcpBackend-DOzn74zn.cjs → AcpBackend-aVv-_nH_.cjs} +3 -3
  3. package/dist/{AcpSessionManager-BRK2F2yN.mjs → AcpSessionManager-BxD1AQ8L.mjs} +2 -2
  4. package/dist/{AcpSessionManager-CJXDNNtq.cjs → AcpSessionManager-aRdzf_6R.cjs} +2 -2
  5. package/dist/{BasePermissionHandler-CfrnkG3v.cjs → BasePermissionHandler-BsOLZCNB.cjs} +1 -1
  6. package/dist/{BasePermissionHandler-BqYwrCra.mjs → BasePermissionHandler-Hj7Qregq.mjs} +1 -1
  7. package/dist/{acpSessionResume-Dz1myMbR.mjs → acpSessionResume-CKacrrHV.mjs} +1 -1
  8. package/dist/{acpSessionResume-DZ65DBeE.cjs → acpSessionResume-CpPNoxaW.cjs} +1 -1
  9. package/dist/{agentHome-B_tu3tFJ.mjs → agentHome-CawmLuWV.mjs} +4 -4
  10. package/dist/{agentHome-CKAXhc8P.cjs → agentHome-VS7FrFQZ.cjs} +4 -4
  11. package/dist/{api-BpTDU2BO.mjs → api-DUFy21Nf.mjs} +67 -17
  12. package/dist/{api-rw5xkzxo.cjs → api-DjqQTT16.cjs} +67 -17
  13. package/dist/{apiMachine-wp0hWG3F.mjs → apiMachine-B0sBCHNZ.mjs} +14 -14
  14. package/dist/{apiMachine-Bs1XXHKs.cjs → apiMachine-D2BrVBYu.cjs} +14 -14
  15. package/dist/{attachmentContent-K_Up4InS.cjs → attachmentContent-2kInPZrP.cjs} +2 -2
  16. package/dist/{attachmentContent-CWSSGMMo.mjs → attachmentContent-D01-pLOB.mjs} +2 -2
  17. package/dist/{auth-CBESCCCn.mjs → auth-B-CqTcVh.mjs} +8 -8
  18. package/dist/{auth-gGryJImw.cjs → auth-CImUXAjH.cjs} +5 -5
  19. package/dist/{auth-C4_mXYgj.cjs → auth-CujfCIv-.cjs} +8 -8
  20. package/dist/{auth-D6kSt2sR.mjs → auth-DP3eN2Fv.mjs} +5 -5
  21. package/dist/{auto-CEucVmFR.mjs → auto-D4KRQIBu.mjs} +17 -17
  22. package/dist/{auto-Do43AOza.cjs → auto-oWgZl7mM.cjs} +17 -17
  23. package/dist/{bootstrap-BPz1iX77.cjs → bootstrap-B7YvJcVK.cjs} +2 -2
  24. package/dist/{bootstrap-CodyCmGt.mjs → bootstrap-MFmMruyB.mjs} +2 -2
  25. package/dist/{browser-D9D-1eqa.cjs → browser-C19iD31j.cjs} +1 -1
  26. package/dist/{browser-CqMhj8Gm.mjs → browser-CfFbN1Us.mjs} +1 -1
  27. package/dist/{claudeLocal-Dywp8NKr.cjs → claudeLocal-C4A7-BmS.cjs} +5 -5
  28. package/dist/{claudeLocal-BgIRtT3Q.mjs → claudeLocal-C6wNx9qH.mjs} +5 -5
  29. package/dist/{claudeLocalLauncher-_TOL73g5.cjs → claudeLocalLauncher-BfCKs7Le.cjs} +10 -10
  30. package/dist/{claudeLocalLauncher-CaHjZ8HW.mjs → claudeLocalLauncher-DdPfufcS.mjs} +10 -10
  31. package/dist/{claudeSessionFork-jq-_WiAu.cjs → claudeSessionFork-B8NjdHYD.cjs} +1 -1
  32. package/dist/{claudeSessionFork-C9nB7fs5.mjs → claudeSessionFork-D8XT48Lf.mjs} +1 -1
  33. package/dist/{client-BdbVizjk.mjs → client-BfGuTBMO.mjs} +2 -2
  34. package/dist/{client-DwlYk8uJ.mjs → client-CKM07bJH.mjs} +4 -4
  35. package/dist/{client-BFDji81N.cjs → client-CMIhQ32m.cjs} +2 -2
  36. package/dist/{client-C49zFRkX.cjs → client-CTNxuHVc.cjs} +2 -2
  37. package/dist/{client-CX-_2myt.mjs → client-DAnQqPmc.mjs} +2 -2
  38. package/dist/{client-ByZFACEw.cjs → client-jAdkYZRf.cjs} +4 -4
  39. package/dist/codex/happyMcpStdioBridge.cjs +16 -16
  40. package/dist/codex/happyMcpStdioBridge.mjs +16 -16
  41. package/dist/{codexAppServerClient-CmOIqiNQ.mjs → codexAppServerClient-DhOC61k9.mjs} +3 -3
  42. package/dist/{codexAppServerClient-DF12ZSw1.cjs → codexAppServerClient-Dv1Mh3MS.cjs} +3 -3
  43. package/dist/{codexCommand-H-ObWTtx.cjs → codexCommand-CWrFt3Ne.cjs} +42 -42
  44. package/dist/{codexCommand-BN05uEyv.mjs → codexCommand-D3_i93Rm.mjs} +42 -42
  45. package/dist/{codexTermination-Byohgj8h.mjs → codexTermination-B08GgahL.mjs} +1 -1
  46. package/dist/{codexTermination-RwKa8pKk.cjs → codexTermination-DErS0cGt.cjs} +1 -1
  47. package/dist/{config-ChHLh-hf.mjs → config-D3OBduhj.mjs} +3 -3
  48. package/dist/{config-D_wNqwxX.cjs → config-D_aj3xgw.cjs} +3 -3
  49. package/dist/{configuration-C9Sx-Foo.cjs → configuration-CI0GWwaT.cjs} +1 -1
  50. package/dist/{configuration-CVgUe2qN.mjs → configuration-DbCHeEeP.mjs} +1 -1
  51. package/dist/{connect-B61xJDRq.cjs → connect-839tEkPN.cjs} +13 -13
  52. package/dist/{connect-DJEQjS7C.mjs → connect-BuwVpjkZ.mjs} +13 -13
  53. package/dist/{context-CDPfhHTo.mjs → context-D2Y_qLs0.mjs} +1 -1
  54. package/dist/{context-Bf3BG7w8.cjs → context-zhirgqSw.cjs} +1 -1
  55. package/dist/{controlClient-BLO1_pPx.cjs → controlClient-BIi1tzEo.cjs} +3 -3
  56. package/dist/{controlClient-DMCxtwq2.mjs → controlClient-Dv80mB_j.mjs} +3 -3
  57. package/dist/{createSessionMetadata-5Mde6Dfh.cjs → createSessionMetadata-DT24NjY2.cjs} +2 -2
  58. package/dist/{createSessionMetadata-BYroCdrU.mjs → createSessionMetadata-Dqy_DfoF.mjs} +2 -2
  59. package/dist/{daemonSupervisor-DfzrtNhM.mjs → daemonSupervisor-BxohggqN.mjs} +40 -1
  60. package/dist/{daemonSupervisor-57JYYzMf.cjs → daemonSupervisor-alqGPANc.cjs} +43 -1
  61. package/dist/{defaultPermissionMode-B7mjHQKp.cjs → defaultPermissionMode-BYqJbPhc.cjs} +2 -2
  62. package/dist/{defaultPermissionMode-CTdxUV_3.mjs → defaultPermissionMode-yR27mevc.mjs} +2 -2
  63. package/dist/{deterministicJson-C3QXOc1N.mjs → deterministicJson-COiJcmUR.mjs} +13 -13
  64. package/dist/{deterministicJson-C1Z9MlDX.cjs → deterministicJson-CoWlyn_X.cjs} +13 -13
  65. package/dist/{doctor-DRdV3thy.cjs → doctor-DI6aIOne.cjs} +7 -7
  66. package/dist/{doctor-OwNmTpYh.mjs → doctor-Ymj096qP.mjs} +7 -7
  67. package/dist/{downloadTarget-Di5bf7r0.cjs → downloadTarget-BOXHrxbm.cjs} +6 -6
  68. package/dist/{downloadTarget-CNtQ8rhV.mjs → downloadTarget-DRXCRDub.mjs} +6 -6
  69. package/dist/{ensureDaemonRunning-CMY--T9Q.cjs → ensureDaemonRunning-BqNjYnar.cjs} +5 -5
  70. package/dist/{ensureDaemonRunning-IRV-w0wH.mjs → ensureDaemonRunning-DTrrXAdz.mjs} +5 -5
  71. package/dist/{handleResumeCommand-z7wY7QVM.cjs → handleResumeCommand-BBKUGhCv.cjs} +5 -5
  72. package/dist/{handleResumeCommand-BO00SYjG.mjs → handleResumeCommand-DW_MRgtz.mjs} +5 -5
  73. package/dist/{index-C7zgeuLP.mjs → index-04pYyzsJ.mjs} +4 -4
  74. package/dist/{index-DisBaRvM.mjs → index-B9f1vKcC.mjs} +96 -0
  75. package/dist/{index-BsoUsrKS.cjs → index-Bq6VHNdk.cjs} +4 -4
  76. package/dist/{index-Ub-5xbcU.cjs → index-BumVulwx.cjs} +96 -0
  77. package/dist/{index-wYJu2yGc.cjs → index-CY573fnz.cjs} +4 -4
  78. package/dist/{index-DZvi6_tB.mjs → index-CmlAXizv.mjs} +4 -4
  79. package/dist/{index-CVUiytNq.mjs → index-Cyu_8WAd.mjs} +3 -3
  80. package/dist/{index-B4cyX2by.cjs → index-D9lJhXUk.cjs} +39 -39
  81. package/dist/{index-NhmqjrGv.cjs → index-W8wlfp57.cjs} +3 -3
  82. package/dist/{index-_LfuIz-O.mjs → index-WW17yjQO.mjs} +40 -40
  83. package/dist/index.cjs +2 -2
  84. package/dist/index.mjs +2 -2
  85. package/dist/{install-CGYDeYes.cjs → install-C1y_g7kj.cjs} +3 -3
  86. package/dist/{install-DeUM6h8X.mjs → install-C5XCDwgD.mjs} +3 -3
  87. package/dist/lib.cjs +12 -12
  88. package/dist/lib.d.cts +11 -0
  89. package/dist/lib.d.mts +11 -0
  90. package/dist/lib.mjs +12 -12
  91. package/dist/{lidState-C4YgPn6y.cjs → lidState-BxHu6dus.cjs} +1 -1
  92. package/dist/{lidState-CBjQEwTt.mjs → lidState-CZ1ggYiB.mjs} +1 -1
  93. package/dist/{localHappyAgentAuth-BzCuIkzi.cjs → localHappyAgentAuth-BHklNDKQ.cjs} +1 -1
  94. package/dist/{localHappyAgentAuth-CcWGU_lS.mjs → localHappyAgentAuth-OJk4xDwg.mjs} +1 -1
  95. package/dist/{logger-D2qd0mMg.mjs → logger-CpaeM90D.mjs} +2 -2
  96. package/dist/{logger-CrtT0opS.cjs → logger-L0pLBOLK.cjs} +2 -2
  97. package/dist/{machineMetadata-D1hlm_oF.cjs → machineMetadata-YeHF4gSY.cjs} +3 -3
  98. package/dist/{machineMetadata-B2czDiTd.mjs → machineMetadata-ukaYmmlK.mjs} +3 -3
  99. package/dist/{main-BWgWN5d1.cjs → main-VyiAJXfb.cjs} +47 -47
  100. package/dist/{main-BNYWELul.mjs → main-pkH_VRP-.mjs} +47 -47
  101. package/dist/{mcp-ColtiH23.mjs → mcp-BwoAhEnN.mjs} +15 -15
  102. package/dist/{mcp-C18unjs1.cjs → mcp-Y8Xsr2Xh.cjs} +15 -15
  103. package/dist/{mirrorProtocol-D4CR5I5W.cjs → mirrorProtocol-Did0-1jn.cjs} +3 -3
  104. package/dist/{mirrorProtocol-DTHWtAE5.mjs → mirrorProtocol-DukUp2Bj.mjs} +3 -3
  105. package/dist/{package-DczR1k0c.cjs → package-BuATIMpK.cjs} +7 -7
  106. package/dist/{package-Ek5FOyEo.mjs → package-DagIeOhi.mjs} +7 -7
  107. package/dist/{panels-BIQ7FrCB.mjs → panels-C3dUoUbA.mjs} +5 -5
  108. package/dist/{panels-DYSMHhdb.cjs → panels-CZ_CRUbM.cjs} +5 -5
  109. package/dist/{peerTools-CABQ6iKd.mjs → peerTools-CUCqJ83-.mjs} +5 -5
  110. package/dist/{peerTools-Cufh4Qp_.cjs → peerTools-Cs3Ln6d0.cjs} +5 -5
  111. package/dist/{persistence-IYH6bAXY.cjs → persistence-CIzOAWK6.cjs} +2 -2
  112. package/dist/{persistence-DFtgQvr6.mjs → persistence-FgtDuVAP.mjs} +2 -2
  113. package/dist/{piRunnerArgs-Dgjmj8KL.cjs → piRunnerArgs-CJhXFPM9.cjs} +1 -1
  114. package/dist/{piRunnerArgs-CIWprC1S.mjs → piRunnerArgs-YbYkfixz.mjs} +1 -1
  115. package/dist/{piRuntime-C_nX977w.cjs → piRuntime-CEzoAYHe.cjs} +1 -1
  116. package/dist/{piRuntime-K6o4GPZ9.mjs → piRuntime-CShuw-1A.mjs} +1 -1
  117. package/dist/{piTerminal-CRl0EZc3.mjs → piTerminal-BvvcgVoW.mjs} +17 -17
  118. package/dist/{piTerminal-CYhcmkyi.cjs → piTerminal-DVr2W6bI.cjs} +17 -17
  119. package/dist/{pushNotifications-gVJWGFBP.mjs → pushNotifications-2CyhYAte.mjs} +3 -3
  120. package/dist/{pushNotifications-BgQ_QTgS.cjs → pushNotifications-OtQY-Mfa.cjs} +3 -3
  121. package/dist/{query-CGp9vY4e.mjs → query-B7DvMlYM.mjs} +1 -1
  122. package/dist/{query-DFreaScb.cjs → query-DimRl61I.cjs} +1 -1
  123. package/dist/{rateLimitWindows-DM_gshI4.mjs → rateLimitWindows-C0zbGT7K.mjs} +1 -1
  124. package/dist/{rateLimitWindows-CeogT1b6.cjs → rateLimitWindows-DwhrA5wy.cjs} +1 -1
  125. package/dist/{registerCommonHandlers-CRqKXwQt.cjs → registerCommonHandlers-De54jKz8.cjs} +2 -2
  126. package/dist/{registerCommonHandlers-CyAtDNvs.mjs → registerCommonHandlers-X9lnO2TF.mjs} +2 -2
  127. package/dist/{registerKillSessionHandler-CX49N52L.cjs → registerKillSessionHandler-CAif4Uz4.cjs} +6 -6
  128. package/dist/{registerKillSessionHandler-DGWADNla.mjs → registerKillSessionHandler-CrLsN5m3.mjs} +6 -6
  129. package/dist/{remoteSessionClient-CuAkp19e.cjs → remoteSessionClient-9j3N_bzV.cjs} +5 -5
  130. package/dist/{remoteSessionClient-1nycIdrG.mjs → remoteSessionClient-BApor-c2.mjs} +5 -5
  131. package/dist/{reportProgressTool-CdSi-uSC.mjs → reportProgressTool-6mDoxKuq.mjs} +3 -3
  132. package/dist/{reportProgressTool-BS7TkeEk.cjs → reportProgressTool-RR5VkbDf.cjs} +3 -3
  133. package/dist/{run-gVwkplx0.cjs → run-B2ZorDI7.cjs} +216 -44
  134. package/dist/{run-DqjEj8M2.mjs → run-CmA3cPD_.mjs} +219 -47
  135. package/dist/{runClaude-CtVoFstP.cjs → runClaude-Dk73bQ0n.cjs} +22 -22
  136. package/dist/{runClaude-CuSjrZSf.mjs → runClaude-bxwea9mX.mjs} +22 -22
  137. package/dist/{runClaudeDeps-eazOhb6g.mjs → runClaudeDeps-DoaYM017.mjs} +43 -43
  138. package/dist/{runClaudeDeps-DqOgRuKq.cjs → runClaudeDeps-dVfReVd4.cjs} +38 -38
  139. package/dist/{runGemini-81wkPvMv.cjs → runGemini-BD-wQe5q.cjs} +33 -33
  140. package/dist/{runGemini-B4EqAd1U.mjs → runGemini-Dq2iv4UF.mjs} +33 -33
  141. package/dist/{runOpenClaw-BK7ZQEKj.cjs → runOpenClaw-BXLv_bvU.cjs} +18 -18
  142. package/dist/{runOpenClaw-Brb1KKAA.mjs → runOpenClaw-C1NB1aLx.mjs} +18 -18
  143. package/dist/{sandbox-DFD6an8o.cjs → sandbox-9MIBf8kS.cjs} +4 -4
  144. package/dist/{sandbox-t43Exd4t.mjs → sandbox-Dqs_T8Jw.mjs} +4 -4
  145. package/dist/{selfCheck-Bel50SH3.cjs → selfCheck-CkUezhrg.cjs} +37 -37
  146. package/dist/selfCheck-Dz_Sm7w8.mjs +86 -0
  147. package/dist/{send-Co9jxmc4.mjs → send-4q066vij.mjs} +8 -8
  148. package/dist/{send-IR5DnG9V.cjs → send-rdhpycNB.cjs} +8 -8
  149. package/dist/{server-KnIeKeTb.mjs → server-DN6TvjhP.mjs} +4 -4
  150. package/dist/{server-CAo6a3Vw.cjs → server-DxTjt1mK.cjs} +6 -6
  151. package/dist/{sessionLock-ha9gsQEn.mjs → sessionLock-DOsE5UUf.mjs} +3 -3
  152. package/dist/{sessionLock-DNGDn9oj.cjs → sessionLock-h4162Jrf.cjs} +3 -3
  153. package/dist/{sessionOps-Di9MC0FP.mjs → sessionOps--9p2IzVA.mjs} +4 -4
  154. package/dist/{sessionOps-hRqzcMXB.cjs → sessionOps-tmBKG5qg.cjs} +4 -4
  155. package/dist/{sessionProvider-LqE7Y_cf.cjs → sessionProvider-B9w7rFDR.cjs} +5 -5
  156. package/dist/{sessionProvider-4Nn6e9Kd.mjs → sessionProvider-C6MHJZ9Z.mjs} +5 -5
  157. package/dist/{sessionScanner-DKFKDsrW.mjs → sessionScanner-B6hzp5R9.mjs} +3 -3
  158. package/dist/{sessionScanner-BzEtrHB8.cjs → sessionScanner-Bgvz8Uiy.cjs} +3 -3
  159. package/dist/{sessions-CmLiagcb.cjs → sessions-DJMVXKRz.cjs} +10 -10
  160. package/dist/{sessions-DzgMNXo5.mjs → sessions-iItaUQAF.mjs} +10 -10
  161. package/dist/{setupOfflineReconnection-D4NGi3Jf.mjs → setupOfflineReconnection-DF78nz1N.mjs} +2 -2
  162. package/dist/{setupOfflineReconnection-Dq4N2Txp.cjs → setupOfflineReconnection-DL4HUMDJ.cjs} +2 -2
  163. package/dist/{spawn-tmoekkOW.cjs → spawn-CL9A8dBJ.cjs} +14 -14
  164. package/dist/{spawn-C6CE5PsI.mjs → spawn-CoYfACsc.mjs} +14 -14
  165. package/dist/{spawnAgents-D15n6tAj.cjs → spawnAgents-DsJSyLDl.cjs} +1 -1
  166. package/dist/{spawnAgents-jXo9jIYo.mjs → spawnAgents-f2q31uUV.mjs} +1 -1
  167. package/dist/{spawnHappyCLI-8NcKgkuy.cjs → spawnHappyCLI-BWOub_Uf.cjs} +1 -1
  168. package/dist/{spawnHappyCLI-66grqHO0.mjs → spawnHappyCLI-BcSO1rF6.mjs} +1 -1
  169. package/dist/{specialCommands-BO8ipH0n.mjs → specialCommands-B-DAeFrU.mjs} +3 -3
  170. package/dist/{specialCommands-Dq0TmY1Z.cjs → specialCommands-ByrcSYSh.cjs} +3 -3
  171. package/dist/{startFileWatcher-CjgKvec9.cjs → startFileWatcher-BZrpUz7_.cjs} +1 -1
  172. package/dist/{startFileWatcher-BLDkieUW.mjs → startFileWatcher-DVia64Vg.mjs} +1 -1
  173. package/dist/{startupSessionCreate-CXRVahaU.cjs → startupSessionCreate-63ABDnfJ.cjs} +1 -1
  174. package/dist/{startupSessionCreate-B60THeNz.mjs → startupSessionCreate-CY4tPjlZ.mjs} +1 -1
  175. package/dist/{streamRelay-GzHxvMem.mjs → streamRelay-B3FloUTT.mjs} +1 -1
  176. package/dist/{streamRelay-CtTpf-Li.cjs → streamRelay-Cn_uGG6m.cjs} +1 -1
  177. package/dist/{sync-DKSZOi6w.cjs → sync-CKSmwxec.cjs} +1 -1
  178. package/dist/{sync-DJvx7RbO.mjs → sync-CZjyTC4v.mjs} +1 -1
  179. package/dist/{systemPrompt-dOOpz8L7.mjs → systemPrompt-BKUVX-fd.mjs} +2 -2
  180. package/dist/{systemPrompt-Duos1BtM.cjs → systemPrompt-BPzhf5d5.cjs} +2 -2
  181. package/dist/{teams-uWiMJEe1.mjs → teams-B2-KPjRg.mjs} +7 -7
  182. package/dist/{teams-pO5rjvPO.cjs → teams-CHBszdmc.cjs} +7 -7
  183. package/dist/{template-BLJxflCH.cjs → template-DPsqlHJQ.cjs} +1 -1
  184. package/dist/{template-YlpbYGeQ.mjs → template-DuKZw-Sz.mjs} +1 -1
  185. package/dist/{time-Du0scQeJ.mjs → time-BsNUVcKH.mjs} +1 -1
  186. package/dist/{time-D-8GFCE7.cjs → time-DcICfW0N.cjs} +1 -1
  187. package/dist/{titleGenerator-DKYj8rLY.mjs → titleGenerator-B4b4ah--.mjs} +1 -1
  188. package/dist/{titleGenerator-DnKygjBP.cjs → titleGenerator-Bvk1mx7G.cjs} +2 -2
  189. package/dist/{todo-BFDb7O8q.cjs → todo-BN4hhun6.cjs} +6 -6
  190. package/dist/{todo-Du5dAwnt.mjs → todo-C7--CBge.mjs} +6 -6
  191. package/dist/{tools-DHvMVL0a.mjs → tools-BILbS8Hh.mjs} +1 -1
  192. package/dist/{tools-DK_x86Kl.cjs → tools-Bl5Q_6Nr.cjs} +1 -1
  193. package/dist/{uninstall-CLDEXir0.mjs → uninstall-Bjwl9bqK.mjs} +3 -3
  194. package/dist/{uninstall-c3zjum2o.cjs → uninstall-_qDbgdxh.cjs} +3 -3
  195. package/package.json +7 -7
  196. package/dist/selfCheck-CwpZepG-.mjs +0 -86
@@ -1,25 +1,25 @@
1
- import { i as isClaudeSessionId, g as extractCompleteLines, h as decideBackfill, j as parseTerminalHookPayload, k as decideMirrorBinding, M as MIRROR_BACKFILL_LINES_DEFAULT, m as mirrorLineKey, n as mirrorLocalId, o as initializeOwnedWorktree, e as summarizeSpawnSessionForLog, q as startAgentVersionChecks, W as WORKTREE_CAPABILITY_VERSION, t as currentWorktreeService } from './mirrorProtocol-DTHWtAE5.mjs';
1
+ import { i as isClaudeSessionId, g as extractCompleteLines, h as decideBackfill, j as parseTerminalHookPayload, k as decideMirrorBinding, M as MIRROR_BACKFILL_LINES_DEFAULT, m as mirrorLineKey, n as mirrorLocalId, o as initializeOwnedWorktree, e as summarizeSpawnSessionForLog, q as startAgentVersionChecks, W as WORKTREE_CAPABILITY_VERSION, t as currentWorktreeService } from './mirrorProtocol-DukUp2Bj.mjs';
2
2
  import { F as FS_MKDIR_CAPABILITY_VERSION } from './fsMkdir-DumgLTzR.mjs';
3
- import { P as PI_ADAPTER_INSTALL_HINT, s as sanitizeSpawnModel } from './piRunnerArgs-CIWprC1S.mjs';
3
+ import { P as PI_ADAPTER_INSTALL_HINT, s as sanitizeSpawnModel } from './piRunnerArgs-YbYkfixz.mjs';
4
4
  import fs from 'fs/promises';
5
5
  import os from 'os';
6
6
  import * as tmp from 'tmp';
7
7
  import axios from 'axios';
8
- import { readFileSync, openSync, fsyncSync, closeSync, renameSync, existsSync, readdirSync, statSync, unlinkSync, realpathSync, promises, writeFileSync, mkdirSync, accessSync, constants as constants$1, readSync, rmdirSync } from 'node:fs';
9
- import { join, isAbsolute, resolve, dirname, sep, basename } from 'node:path';
10
- import { f as ensurePrivateDirectorySync, w as writePrivateFileSync, c as configuration } from './configuration-CVgUe2qN.mjs';
11
- import { T as TurnActivityTracker, A as ApiClient } from './api-BpTDU2BO.mjs';
12
- import { S as SPAWN_AGENTS, i as isSpawnAgent, s as sanitizeSpawnPermissionMode, r as resolveSpawnPermissionMode, a as resolveFirstMessageMeta, j as joinProject } from './spawnAgents-jXo9jIYo.mjs';
13
- import { l as logger } from './logger-D2qd0mMg.mjs';
14
- import { p as pruneStaleCompileCaches } from './index-CVUiytNq.mjs';
15
- import { a as authAndSetupMachineIfNeeded } from './auth-D6kSt2sR.mjs';
8
+ import { readFileSync, openSync, fsyncSync, closeSync, renameSync, existsSync, readdirSync, statSync, unlinkSync, realpathSync, promises, constants as constants$1, writeFileSync, mkdirSync, accessSync, readSync, rmdirSync } from 'node:fs';
9
+ import { join, isAbsolute, resolve, dirname, sep, basename, relative } from 'node:path';
10
+ import { f as ensurePrivateDirectorySync, w as writePrivateFileSync, c as configuration } from './configuration-DbCHeEeP.mjs';
11
+ import { T as TurnActivityTracker, A as ApiClient } from './api-DUFy21Nf.mjs';
12
+ import { S as SPAWN_AGENTS, i as isSpawnAgent, s as sanitizeSpawnPermissionMode, r as resolveSpawnPermissionMode, a as resolveFirstMessageMeta, j as joinProject } from './spawnAgents-f2q31uUV.mjs';
13
+ import { l as logger } from './logger-CpaeM90D.mjs';
14
+ import { p as pruneStaleCompileCaches } from './index-Cyu_8WAd.mjs';
15
+ import { a as authAndSetupMachineIfNeeded } from './auth-DP3eN2Fv.mjs';
16
16
  import { spawn, execSync } from 'child_process';
17
- import { p as packageJson } from './package-Ek5FOyEo.mjs';
18
- import { a as globalPrefixForPackage, N as NPM_SAFE_ARG, g as getEnvironmentInfo } from './doctor-OwNmTpYh.mjs';
19
- import { s as spawnHappyCLI } from './spawnHappyCLI-66grqHO0.mjs';
20
- import { c as readPersistedSessions, r as readSettings, l as latchKeepAwake, q as reportSignature, s as decideDaemonHibernation, t as nextCheckDelay, v as persistSession, d as readDaemonState, x as acquireDaemonLock, a as resolveCheckMs, y as resolveIdleMs, z as deletePersistedSessions, A as writeDaemonState, B as writeSettings, C as settingIdleMs, u as updateSettings, D as rewriteCredentialsForRelay, g as readCredentials, E as releaseDaemonLock } from './persistence-DFtgQvr6.mjs';
21
- import { i as isDaemonRunningCurrentlyInstalledHappyVersion, s as stopDaemon, u as cleanupDaemonState } from './controlClient-DMCxtwq2.mjs';
22
- import { e as sendUserMessage, f as readSessionMetadata, r as readSessionTranscript, l as listAccountSessions, a as listSessions, M as MAX_READ_LIMIT, s as sessionWebUrl, g as waitForSessionKey, d as archiveSession, j as analyzeLatestTurn, k as readSessionLog, m as TURN_WINDOW, n as userPromptText } from './sessionOps-Di9MC0FP.mjs';
17
+ import { p as packageJson } from './package-DagIeOhi.mjs';
18
+ import { a as globalPrefixForPackage, N as NPM_SAFE_ARG, g as getEnvironmentInfo } from './doctor-Ymj096qP.mjs';
19
+ import { s as spawnHappyCLI } from './spawnHappyCLI-BcSO1rF6.mjs';
20
+ import { c as readPersistedSessions, r as readSettings, l as latchKeepAwake, q as reportSignature, s as decideDaemonHibernation, t as nextCheckDelay, v as persistSession, d as readDaemonState, x as acquireDaemonLock, a as resolveCheckMs, y as resolveIdleMs, z as deletePersistedSessions, A as writeDaemonState, B as writeSettings, C as settingIdleMs, u as updateSettings, D as rewriteCredentialsForRelay, g as readCredentials, E as releaseDaemonLock } from './persistence-FgtDuVAP.mjs';
21
+ import { i as isDaemonRunningCurrentlyInstalledHappyVersion, s as stopDaemon, u as cleanupDaemonState } from './controlClient-Dv80mB_j.mjs';
22
+ import { e as sendUserMessage, f as readSessionMetadata, r as readSessionTranscript, l as listAccountSessions, a as listSessions, M as MAX_READ_LIMIT, s as sessionWebUrl, g as waitForSessionKey, d as archiveSession, j as analyzeLatestTurn, k as readSessionLog, m as TURN_WINDOW, n as userPromptText } from './sessionOps--9p2IzVA.mjs';
23
23
  import fastify from 'fastify';
24
24
  import { z } from 'zod';
25
25
  import { validatorCompiler, serializerCompiler } from 'fastify-type-provider-zod';
@@ -27,62 +27,62 @@ import { d as decodeBase64, s as sameRelay, e as encodeBase64, h as decrypt } fr
27
27
  import { randomBytes, createHash, timingSafeEqual, randomUUID } from 'node:crypto';
28
28
  import { c as checkPreviewPath } from './previewPath-CXN4Vag0.mjs';
29
29
  import { a as BACKGROUND_TASKS_MAX, d as BACKGROUND_TASK_DESCRIPTION_MAX, e as BackgroundTaskTracker } from './backgroundTaskActivity-8PdPxrvy.mjs';
30
- import { b as sanitizeRateLimitReport } from './rateLimitWindows-DM_gshI4.mjs';
31
- import { f as formatEditConflictNotice, b as SESSION_PEER_SENT_FROM, s as sendPeerMessage, l as listPeerSessions, C as CLI_PEER_SENDER_ID } from './peerTools-CABQ6iKd.mjs';
30
+ import { b as sanitizeRateLimitReport } from './rateLimitWindows-C0zbGT7K.mjs';
31
+ import { f as formatEditConflictNotice, b as SESSION_PEER_SENT_FROM, s as sendPeerMessage, l as listPeerSessions, C as CLI_PEER_SENDER_ID } from './peerTools-CUCqJ83-.mjs';
32
32
  import os$1, { hostname, homedir, tmpdir } from 'node:os';
33
- import { c as RemoteCallBudget, e as REMOTE_WRITE_CALLS_PER_MINUTE, d as deliverToSession, g as guardRemoteSessionOpsRequest, h as remoteError, i as REMOTE_OP_DEADLINE_MS, j as formatRemoteAuditLine, k as REMOTE_SEND_COMMIT_DEADLINE_MS, m as REMOTE_RESUME_WAIT_MS, n as capRemoteTranscript, o as capRemoteText, p as REMOTE_ANSWER_MAX_BYTES, q as REMOTE_TITLE_MAX_BYTES } from './remoteSessionClient-1nycIdrG.mjs';
34
- import { assistantHome, bootstrapAssistantHome } from './bootstrap-CodyCmGt.mjs';
35
- import { refreshAgentHomes, locateClaudeConversation, agentHomeSpawnEnv } from './index-C7zgeuLP.mjs';
33
+ import { c as RemoteCallBudget, e as REMOTE_WRITE_CALLS_PER_MINUTE, d as deliverToSession, g as guardRemoteSessionOpsRequest, h as remoteError, i as REMOTE_OP_DEADLINE_MS, j as formatRemoteAuditLine, k as REMOTE_SEND_COMMIT_DEADLINE_MS, m as REMOTE_RESUME_WAIT_MS, n as capRemoteTranscript, o as capRemoteText, p as REMOTE_ANSWER_MAX_BYTES, q as REMOTE_TITLE_MAX_BYTES } from './remoteSessionClient-BApor-c2.mjs';
34
+ import { assistantHome, bootstrapAssistantHome } from './bootstrap-MFmMruyB.mjs';
35
+ import { refreshAgentHomes, locateClaudeConversation, agentHomeSpawnEnv } from './index-04pYyzsJ.mjs';
36
36
  import require$$0, { existsSync as existsSync$1, statSync as statSync$1, mkdtempSync, rmSync } from 'fs';
37
37
  import require$$1, { join as join$1 } from 'path';
38
38
  import { spawn as spawn$1, execFile, spawnSync } from 'node:child_process';
39
39
  import { p as projectPath } from './projectPath-BTBIMB57.mjs';
40
40
  import { d as daemonEndpointsMatch, r as resolveClaudeCredentialReadiness } from './doctorReadiness-C208SMN9.mjs';
41
- import { o as ownerRetryPending, c as consumeOwnerRetry, s as spawnGate, a as afterStartupFailure, b as startupFailureMessage, T as TEAM_SPAWN_MAX_ATTEMPTS, d as TEAM_CLEANUP_RETRY_MS, g as getInitialMachineMetadata, e as getStartupCliAvailability, f as TEAM_RETRY_CAPABILITY_VERSION, w as withRunningCliFacts } from './machineMetadata-B2czDiTd.mjs';
41
+ import { o as ownerRetryPending, c as consumeOwnerRetry, s as spawnGate, a as afterStartupFailure, b as startupFailureMessage, T as TEAM_SPAWN_MAX_ATTEMPTS, d as TEAM_CLEANUP_RETRY_MS, g as getInitialMachineMetadata, e as getStartupCliAvailability, f as TEAM_RETRY_CAPABILITY_VERSION, w as withRunningCliFacts } from './machineMetadata-ukaYmmlK.mjs';
42
42
  import { M as ModelConfigError, B as BackupStore, r as readConfigFile, s as sha256, a as atomicWriteFile } from './fileStore-5qpetZS0.mjs';
43
43
  import { c as collectSecretValues, a as parseJsonObject, b as childObject, s as setOrDelete, d as changedPaths, e as stringifyLike, f as fail, n as normalizeModelList, g as normalizeModelId, h as normalizeSecret, i as normalizeBaseUrl, u as uniq, j as baseUrlWarnings, m as maskSecret, k as getPath$1, l as normalizeProviderId, o as piAdapter, r as redactText } from './pi-CqyoZMjI.mjs';
44
44
  import require$$3 from 'crypto';
45
45
  import { c as commandOnPath } from './detectCLI-CSGMlV51.mjs';
46
- import { buildResumeLaunch } from './handleResumeCommand-BO00SYjG.mjs';
46
+ import { buildResumeLaunch } from './handleResumeCommand-DW_MRgtz.mjs';
47
47
  import { n as normalizeWebPanels } from './webPanels-B2_C2-3g.mjs';
48
- import { K as ServerMigrateNoticeSchema, L as isHarnessInstallId, e as AUTOMATION_SUMMARY_MAX_CHARS, M as AUTOMATION_PRECHECK_OUTPUT_MAX_CHARS, N as AUTOMATION_PRECHECK_DEFAULT_TIMEOUT_MS, b as AUTOMATION_PRECHECK_MAX_TIMEOUT_MS, Q as AUTOMATION_CLAIM_MAX_RUNS, T as AUTOMATION_DAEMON_CAPABILITY_PRECHECK, U as AUTOMATION_DEFAULT_LEASE_MS, i as isAutomationRunTerminal, V as HARNESS_INSTALL_CAPABILITY_VERSION } from './index-DisBaRvM.mjs';
49
- import { access, symlink, readFile, rm, unlink, readlink, lstat, constants, stat, open } from 'node:fs/promises';
48
+ import { K as ServerMigrateNoticeSchema, L as isHarnessInstallId, e as AUTOMATION_SUMMARY_MAX_CHARS, M as AUTOMATION_PRECHECK_OUTPUT_MAX_CHARS, N as AUTOMATION_PRECHECK_DEFAULT_TIMEOUT_MS, b as AUTOMATION_PRECHECK_MAX_TIMEOUT_MS, Q as AUTOMATION_CLAIM_MAX_RUNS, T as AUTOMATION_DAEMON_CAPABILITY_PRECHECK, U as AUTOMATION_DEFAULT_LEASE_MS, i as isAutomationRunTerminal, V as HARNESS_INSTALL_CAPABILITY_VERSION } from './index-B9f1vKcC.mjs';
49
+ import { access, symlink, readFile, rm, unlink, readlink, lstat, constants, rename, mkdir, copyFile, readdir, stat, open } from 'node:fs/promises';
50
50
  import { p as parseExactVersion, c as compareExactVersions, f as fetchCliUpdateState, r as resolveCliUpdateCheckInterval, D as DEFAULT_CLI_UPDATE_CHECK_INTERVAL_MS } from './cliUpdate-Y34VGe9Y.mjs';
51
- import { P as ProjectsUnsupportedError, c as createProjectsClient } from './client-CX-_2myt.mjs';
52
- import { c as createAutomationsClient, i as isAutomationsUnavailable, d as AutomationsRequestError } from './client-BdbVizjk.mjs';
53
- import { w as withKeychainOffPath, a as keychainIdentityFor, i as interpretSecurityRead, s as securityReadArgs, b as securityDeleteArgs, c as keychainOffShimDir, d as interpretCredentialsFile, C as CREDENTIALS_REJECTED_DETAIL, e as buildClaudeAuthState, f as claudeAuthStateChanged, r as resolveSdkClaudeBinary, g as classifyAuthStatus, h as diagnoseStores, p as parseLaunchctlPid, H as HAPPY_DAEMON_LAUNCHD_LABEL, j as classifyLineage, l as probeLaunchdJob, m as detectDaemonSupervisor, n as daemonLineage } from './daemonSupervisor-DfzrtNhM.mjs';
51
+ import { P as ProjectsUnsupportedError, c as createProjectsClient } from './client-DAnQqPmc.mjs';
52
+ import { c as createAutomationsClient, i as isAutomationsUnavailable, d as AutomationsRequestError } from './client-BfGuTBMO.mjs';
53
+ import { w as withKeychainOffPath, a as keychainIdentityFor, i as interpretSecurityRead, s as securityReadArgs, b as securityDeleteArgs, c as keychainOffShimDir, d as interpretCredentialsFile, C as CREDENTIALS_REJECTED_DETAIL, e as buildClaudeAuthState, f as claudeAuthStateChanged, r as resolveSdkClaudeBinary, g as classifyAuthStatus, h as diagnoseStores, p as parseLaunchctlPid, H as HAPPY_DAEMON_LAUNCHD_LABEL, j as classifyLineage, l as probeLaunchdJob, m as detectDaemonSupervisor, n as daemonLineage, o as probeSystemdKillMode, q as wrappersSurviveHandover, t as handoverWaitsForSessions } from './daemonSupervisor-BxohggqN.mjs';
54
54
  import { g as getProjectPath } from './path-D2wdaNSk.mjs';
55
55
  import { b as extractClaudeEditPaths } from './editPaths-BVfS_FFL.mjs';
56
- import { s as startFileWatcher } from './startFileWatcher-BLDkieUW.mjs';
57
- import { I as InvalidateSync } from './sync-DJvx7RbO.mjs';
56
+ import { s as startFileWatcher } from './startFileWatcher-DVia64Vg.mjs';
57
+ import { I as InvalidateSync } from './sync-CZjyTC4v.mjs';
58
58
  import { R as RawJSONLinesSchema } from './types-CkqAACXx.mjs';
59
59
  import { t as tmuxArgs, a as scrubTmuxClientEnv, s as shellescape } from './tmuxSocket-B8Yx20sT.mjs';
60
- import { p as processIdentityFields, r as readSessionLock, t as terminateProcess, d as terminateProcessTree } from './sessionLock-ha9gsQEn.mjs';
60
+ import { p as processIdentityFields, r as readSessionLock, t as terminateProcess, d as terminateProcessTree } from './sessionLock-DOsE5UUf.mjs';
61
61
  import { findAllHappyProcesses } from './doctor-BPkYWSuq.mjs';
62
62
  import { T as TEAM_SKILL, a as TEAM_LEAD_PLAYBOOK, b as TEAM_MEMBER_RULES } from './resources-CLdQfe3b.mjs';
63
63
  import { promisify } from 'node:util';
64
- import { b as clipText, r as renderAction, c as clipAutomationReport, e as renderTemplate } from './template-YlpbYGeQ.mjs';
64
+ import { b as clipText, r as renderAction, c as clipAutomationReport, e as renderTemplate } from './template-DuKZw-Sz.mjs';
65
65
  import { d as describeAgentHome } from './loginShellEnv-Dw8M7tkI.mjs';
66
- import './acpSessionResume-Dz1myMbR.mjs';
67
- import './lidState-CBjQEwTt.mjs';
66
+ import './acpSessionResume-CKacrrHV.mjs';
67
+ import './lidState-CZ1ggYiB.mjs';
68
68
  import 'node:events';
69
69
  import 'socket.io-client';
70
- import './pushNotifications-gVJWGFBP.mjs';
70
+ import './pushNotifications-2CyhYAte.mjs';
71
71
  import './contentLogMetadata-BlWI0egu.mjs';
72
72
  import './limits-DIo7rEBR.mjs';
73
- import './time-Du0scQeJ.mjs';
74
- import './registerCommonHandlers-CyAtDNvs.mjs';
73
+ import './time-BsNUVcKH.mjs';
74
+ import './registerCommonHandlers-X9lnO2TF.mjs';
75
75
  import 'util';
76
76
  import 'cross-spawn';
77
77
  import '@paralleldrive/cuid2';
78
78
  import 'chalk';
79
79
  import 'node:module';
80
80
  import 'tweetnacl';
81
- import './browser-CqMhj8Gm.mjs';
81
+ import './browser-CfFbN1Us.mjs';
82
82
  import 'open';
83
83
  import './ids-DU6sLx4C.mjs';
84
84
  import 'url';
85
- import './localHappyAgentAuth-CcWGU_lS.mjs';
85
+ import './localHappyAgentAuth-OJk4xDwg.mjs';
86
86
  import './processTreeSnapshot-CuLJDNC-.mjs';
87
87
  import 'ps-list';
88
88
 
@@ -4410,7 +4410,7 @@ const runNpmProcess = (args, deps = processDefaults) => new Promise((resolveResu
4410
4410
  child.on("close", (code) => done({ code: timedOut ? null : code, stdout, stderr, terminationConfirmed: !timedOut || treeKilled }));
4411
4411
  });
4412
4412
  const runNpm = (args) => runNpmProcess(args);
4413
- const defaults = {
4413
+ const defaults$1 = {
4414
4414
  npm: runNpm,
4415
4415
  fs: { lstat, readlink, unlink, rm, readFile, symlink, access },
4416
4416
  platform: process.platform,
@@ -4442,7 +4442,7 @@ function ownedCliLink(link, target, packageDir) {
4442
4442
  const resolved = resolve(dirname(link), target);
4443
4443
  return resolved.startsWith(join(packageDir, "bin") + sep);
4444
4444
  }
4445
- async function installCliSafely(version, deps = defaults) {
4445
+ async function installCliSafely(version, deps = defaults$1) {
4446
4446
  const parsed = parseExactVersion(version);
4447
4447
  if (!parsed) throw new Error("Invalid exact CLI version");
4448
4448
  if (deps.platform === "win32") {
@@ -4539,6 +4539,12 @@ async function installCliSafely(version, deps = defaults) {
4539
4539
  }
4540
4540
  }
4541
4541
 
4542
+ const DEFAULT_BUSY_INSTALL_GRACE_MS = 15 * 6e4;
4543
+ function resolveBusyInstallGrace(raw) {
4544
+ if (raw === void 0 || raw.trim() === "") return DEFAULT_BUSY_INSTALL_GRACE_MS;
4545
+ const value = Number(raw);
4546
+ return Number.isInteger(value) && value >= 0 && value <= 24 * 60 * 6e4 ? value : DEFAULT_BUSY_INSTALL_GRACE_MS;
4547
+ }
4542
4548
  function createUpdateController(deps) {
4543
4549
  let policy = null;
4544
4550
  let outcome = null;
@@ -4549,6 +4555,8 @@ function createUpdateController(deps) {
4549
4555
  let handoverHold;
4550
4556
  let lastPublished = "";
4551
4557
  let autoUpdateEnabled;
4558
+ let busySince = null;
4559
+ let busyDeferred = null;
4552
4560
  let lastInstall = (() => {
4553
4561
  try {
4554
4562
  return deps.lastInstall?.read() ?? null;
@@ -4615,14 +4623,29 @@ function createUpdateController(deps) {
4615
4623
  publish(order === null ? "policy_stale" : "current", target);
4616
4624
  return;
4617
4625
  }
4626
+ let whileBusy = false;
4618
4627
  if (!deps.idle()) {
4619
- publish("waiting_idle", target);
4620
- return;
4628
+ if (busySince?.version !== target) busySince = { version: target, at: now() };
4629
+ whileBusy = !!deps.installWhileBusy && busyDeferred?.version !== target && !deps.installFenced?.() && now() - busySince.at >= (deps.busyGraceMs ?? DEFAULT_BUSY_INSTALL_GRACE_MS);
4630
+ if (!whileBusy) {
4631
+ publish("waiting_idle", target, busyDeferred?.version === target ? busyDeferred.reason : void 0);
4632
+ return;
4633
+ }
4621
4634
  }
4622
4635
  running = true;
4623
- publish("installing", target);
4636
+ publish("installing", target, whileBusy ? "while_busy" : void 0);
4624
4637
  try {
4625
- const code = await deps.install(target);
4638
+ const code = whileBusy ? await deps.installWhileBusy(target) : await deps.install(target);
4639
+ if (code && typeof code === "object" && "deferred" in code) {
4640
+ busyDeferred = { version: target, reason: code.deferred };
4641
+ publish("waiting_idle", target, code.deferred);
4642
+ return;
4643
+ }
4644
+ if (code && typeof code === "object" && "blocked" in code) {
4645
+ blocked = true;
4646
+ publish("manual_required", target, code.blocked);
4647
+ return;
4648
+ }
4626
4649
  if (code && typeof code === "object") {
4627
4650
  if ("manual" in code) publish("manual_required", target, code.manual);
4628
4651
  else publish("failed", target, code.failed);
@@ -4740,6 +4763,134 @@ function createUpdateController(deps) {
4740
4763
  return { refresh, retry, request, tick, withHandover, holdHandover, isRunning: () => running, currentTarget: () => policy?.autoUpdateVersion ?? null };
4741
4764
  }
4742
4765
 
4766
+ const defaults = {
4767
+ npm: runNpm,
4768
+ fs: { lstat, readlink, readFile, readdir, copyFile, mkdir, rename, rm, access },
4769
+ platform: process.platform,
4770
+ runningPackageDir: projectPath(),
4771
+ now: Date.now
4772
+ };
4773
+ const MANAGED_BINS = ["very-happy", "very-happy-mcp"];
4774
+ async function manifest(dir, deps) {
4775
+ try {
4776
+ return JSON.parse(await deps.fs.readFile(join(dir, "package.json"), "utf8"));
4777
+ } catch {
4778
+ return null;
4779
+ }
4780
+ }
4781
+ async function isFile(path, deps) {
4782
+ const stat = await deps.fs.lstat(path).catch(() => null);
4783
+ return !!stat?.isFile();
4784
+ }
4785
+ function packageRelative(path) {
4786
+ const normalized = relative("/pkg", resolve("/pkg", path));
4787
+ return normalized && !normalized.startsWith("..") && !normalized.startsWith(sep) ? normalized : null;
4788
+ }
4789
+ async function binsUnchanged(stagedDir, liveDir, prefix, deps) {
4790
+ const staged = await manifest(stagedDir, deps);
4791
+ const bin = staged?.bin;
4792
+ if (!bin || typeof bin !== "object") return "staged_bin_map_unreadable";
4793
+ const names = Object.keys(bin).sort();
4794
+ if (names.join(",") !== [...MANAGED_BINS].sort().join(",")) return "staged_bin_map_changed";
4795
+ for (const name of MANAGED_BINS) {
4796
+ const target = packageRelative(String(bin[name]));
4797
+ if (!target || !await isFile(join(stagedDir, target), deps)) return "staged_bin_missing";
4798
+ const link = join(prefix, "bin", name);
4799
+ const stat = await deps.fs.lstat(link).catch(() => null);
4800
+ if (!stat?.isSymbolicLink()) return "live_bin_not_linked";
4801
+ const linkTarget = await deps.fs.readlink(link);
4802
+ if (!ownedCliLink(link, linkTarget, liveDir)) return "live_bin_not_owned";
4803
+ if (relative(liveDir, resolve(dirname(link), linkTarget)) !== target) return "staged_bin_map_changed";
4804
+ }
4805
+ return null;
4806
+ }
4807
+ async function keepOldChunks(liveDir, stagedDir, deps, sub = "dist") {
4808
+ const live = await deps.fs.readdir(join(liveDir, sub)).catch(() => []);
4809
+ const staged = new Set(await deps.fs.readdir(join(stagedDir, sub)).catch(() => []));
4810
+ let kept = 0;
4811
+ for (const name of live) {
4812
+ if (basename(name) !== name) continue;
4813
+ const from = join(liveDir, sub, name);
4814
+ const stat = await deps.fs.lstat(from).catch(() => null);
4815
+ if (stat?.isDirectory()) {
4816
+ if (!staged.has(name)) await deps.fs.mkdir(join(stagedDir, sub, name));
4817
+ kept += await keepOldChunks(liveDir, stagedDir, deps, join(sub, name));
4818
+ continue;
4819
+ }
4820
+ if (staged.has(name) || !stat?.isFile()) continue;
4821
+ await deps.fs.copyFile(from, join(stagedDir, sub, name), constants$1.COPYFILE_EXCL);
4822
+ kept++;
4823
+ }
4824
+ return kept;
4825
+ }
4826
+ async function installCliStaged(version, deps = defaults) {
4827
+ const parsed = parseExactVersion(version);
4828
+ if (!parsed) throw new Error("Invalid exact CLI version");
4829
+ if (deps.platform === "win32") return { outcome: { deferred: "staged_install_unsupported" } };
4830
+ const liveDir = deps.runningPackageDir;
4831
+ const prefix = liveDir ? globalPrefixForPackage(liveDir) : null;
4832
+ if (!liveDir || !prefix) return { outcome: { manual: "install_location_unverified" } };
4833
+ const liveStat = await deps.fs.lstat(liveDir).catch(() => null);
4834
+ const live = await manifest(liveDir, deps);
4835
+ if (!liveStat?.isDirectory() || liveStat.isSymbolicLink() || live?.name !== "very-happy-cli" || typeof live.version !== "string") {
4836
+ return { outcome: { manual: "install_location_unverified" } };
4837
+ }
4838
+ const root = dirname(liveDir);
4839
+ try {
4840
+ await deps.fs.access(root, constants$1.W_OK);
4841
+ await deps.fs.access(liveDir, constants$1.W_OK);
4842
+ } catch {
4843
+ return { outcome: { manual: "install_location_not_writable" } };
4844
+ }
4845
+ const stagePrefix = join(root, `.very-happy-cli-stage-${parsed.exact}`);
4846
+ const stagedDir = join(stagePrefix, "lib", "node_modules", "very-happy-cli");
4847
+ const retiredDir = join(root, `.very-happy-cli-retired-${live.version}-${deps.now()}`);
4848
+ const cleanup = async (path) => {
4849
+ await deps.fs.rm(path, { recursive: true, force: true }).catch(() => void 0);
4850
+ };
4851
+ await cleanup(stagePrefix);
4852
+ let swapped = false;
4853
+ try {
4854
+ const result = await deps.npm(autoUpdateInstallArgs(parsed.exact, stagePrefix));
4855
+ if (result.terminationConfirmed === false) return { outcome: "blocked" };
4856
+ if (result.code !== 0) return { outcome: result.code };
4857
+ const staged = await manifest(stagedDir, deps);
4858
+ if (staged?.name !== "very-happy-cli" || staged.version !== parsed.exact) return { outcome: { deferred: "staged_package_unverified" } };
4859
+ const binProblem = await binsUnchanged(stagedDir, liveDir, prefix, deps);
4860
+ if (binProblem) return { outcome: { deferred: binProblem } };
4861
+ let keptChunks;
4862
+ try {
4863
+ keptChunks = await keepOldChunks(liveDir, stagedDir, deps);
4864
+ } catch {
4865
+ return { outcome: { deferred: "staged_copy_failed" } };
4866
+ }
4867
+ try {
4868
+ await deps.fs.rename(liveDir, retiredDir);
4869
+ } catch {
4870
+ return { outcome: { deferred: "staged_retire_failed" } };
4871
+ }
4872
+ try {
4873
+ await deps.fs.rename(stagedDir, liveDir);
4874
+ } catch {
4875
+ try {
4876
+ await deps.fs.rename(retiredDir, liveDir);
4877
+ } catch {
4878
+ return { outcome: { blocked: "staged_rollback_failed", retiredDir }, keptChunks };
4879
+ }
4880
+ return { outcome: { deferred: "staged_swap_failed" } };
4881
+ }
4882
+ swapped = true;
4883
+ const installed = await manifest(liveDir, deps);
4884
+ return { outcome: installed?.version === parsed.exact ? 0 : { failed: "installed_elsewhere" }, keptChunks };
4885
+ } finally {
4886
+ await cleanup(stagePrefix);
4887
+ if (swapped) {
4888
+ await cleanup(retiredDir);
4889
+ await cleanup(join(root, ".package-lock.json"));
4890
+ }
4891
+ }
4892
+ }
4893
+
4743
4894
  function parseLastInstall(raw) {
4744
4895
  if (!raw || typeof raw !== "object") return null;
4745
4896
  const { from, to, at, source } = raw;
@@ -8425,6 +8576,17 @@ async function startDaemon() {
8425
8576
  const daemonSupervisor = detectDaemonSupervisor(process.env, process.platform, launchdJob);
8426
8577
  const lineage = daemonLineage(daemonSupervisor, process.env, process.platform, launchdJob);
8427
8578
  logger.debug(`[DAEMON RUN] Supervisor: ${daemonSupervisor} (lineage ${lineage}${launchdJob ? `, launchd job pid ${launchdJob.jobPid ?? "-"}` : ""})`);
8579
+ const systemdKillMode = daemonSupervisor === "systemd" ? await probeSystemdKillMode() : null;
8580
+ const handoverSparesWrappers = wrappersSurviveHandover({
8581
+ supervisor: daemonSupervisor,
8582
+ env: process.env,
8583
+ platform: process.platform,
8584
+ pid: process.pid,
8585
+ ppid: process.ppid,
8586
+ inContainer: existsSync$1("/.dockerenv") || existsSync$1("/run/.containerenv"),
8587
+ systemdKillMode
8588
+ });
8589
+ logger.debug(`[DAEMON RUN] Handover spares wrappers: ${handoverSparesWrappers}${daemonSupervisor === "systemd" ? ` (KillMode ${systemdKillMode ?? "unknown"})` : ""}`);
8428
8590
  let fileState = {
8429
8591
  pid: process.pid,
8430
8592
  httpPort: controlPort,
@@ -8558,6 +8720,15 @@ async function startDaemon() {
8558
8720
  // whose turn ended but still has background tasks is busy too.
8559
8721
  idle: () => !turnActivity.hasActiveTurn() && !backgroundTasks.hasAny() && !harnessInstaller?.isRunning(),
8560
8722
  install: installCliSafely,
8723
+ // B-817: a machine that is never idle installs after the grace period
8724
+ // through the staged path, which never leaves the live tree incomplete.
8725
+ installWhileBusy: async (version) => {
8726
+ const report = await installCliStaged(version);
8727
+ logger.warn(`[DAEMON RUN] CLI update: staged install while busy -> ${JSON.stringify(report.outcome)} keptChunks=${report.keptChunks ?? 0}`);
8728
+ return report.outcome;
8729
+ },
8730
+ installFenced: () => !!harnessInstaller?.isRunning(),
8731
+ busyGraceMs: resolveBusyInstallGrace(process.env.HAPPY_CLI_UPDATE_BUSY_GRACE_MS),
8561
8732
  lastInstall: lastInstallStore(configuration.happyHomeDir),
8562
8733
  publish: (state) => {
8563
8734
  cliUpdateStateRef = state;
@@ -8659,7 +8830,8 @@ async function startDaemon() {
8659
8830
  }
8660
8831
  }
8661
8832
  const relayMove = pendingRelayMove;
8662
- if ((bundleReplaced || relayMove) && !teamWorker?.busy && !automationRunner?.busy && !updateController.isRunning() && !harnessInstaller?.isRunning() && !turnActivity.hasActiveTurn() && !backgroundTasks.hasAny()) {
8833
+ const sessionsHold = () => handoverWaitsForSessions({ bundleReplaced, relayMove: !!relayMove, sparesWrappers: handoverSparesWrappers }) && (turnActivity.hasActiveTurn() || backgroundTasks.hasAny());
8834
+ if ((bundleReplaced || relayMove) && !teamWorker?.busy && !automationRunner?.busy && !updateController.isRunning() && !harnessInstaller?.isRunning() && !sessionsHold()) {
8663
8835
  const preflight = bundleReplaced ? await preflightNewBundle(bundlePath) : { action: "proceed" };
8664
8836
  if (preflight.action === "hold") {
8665
8837
  if (lastHandoverHold !== preflight.reason) {
@@ -8669,7 +8841,7 @@ async function startDaemon() {
8669
8841
  updateController.holdHandover(preflight.reason);
8670
8842
  return;
8671
8843
  }
8672
- if (teamWorker?.busy || automationRunner?.busy || updateController.isRunning() || harnessInstaller?.isRunning() || turnActivity.hasActiveTurn() || backgroundTasks.hasAny()) return;
8844
+ if (teamWorker?.busy || automationRunner?.busy || updateController.isRunning() || harnessInstaller?.isRunning() || sessionsHold()) return;
8673
8845
  lastHandoverHold = null;
8674
8846
  logger.debug(relayMove ? `[DAEMON RUN] Relay moved to ${relayMove.serverUrl}; handing off to a new daemon on the new settings` : "[DAEMON RUN] Daemon bundle replaced on disk and verified, handing off to new daemon");
8675
8847
  teamWorker?.stop();
@@ -1,27 +1,27 @@
1
1
  'use strict';
2
2
 
3
3
  var os = require('node:os');
4
- var sessionLock = require('./sessionLock-DNGDn9oj.cjs');
5
- var persistence = require('./persistence-IYH6bAXY.cjs');
6
- var defaultPermissionMode = require('./defaultPermissionMode-B7mjHQKp.cjs');
4
+ var sessionLock = require('./sessionLock-h4162Jrf.cjs');
5
+ var persistence = require('./persistence-CIzOAWK6.cjs');
6
+ var defaultPermissionMode = require('./defaultPermissionMode-BYqJbPhc.cjs');
7
7
  var node_crypto = require('node:crypto');
8
- var api = require('./api-rw5xkzxo.cjs');
9
- var logger = require('./logger-CrtT0opS.cjs');
10
- var createSessionMetadata = require('./createSessionMetadata-5Mde6Dfh.cjs');
11
- var _package = require('./package-DczR1k0c.cjs');
12
- var index = require('./index-Ub-5xbcU.cjs');
8
+ var api = require('./api-DjqQTT16.cjs');
9
+ var logger = require('./logger-L0pLBOLK.cjs');
10
+ var createSessionMetadata = require('./createSessionMetadata-DT24NjY2.cjs');
11
+ var _package = require('./package-BuATIMpK.cjs');
12
+ var index = require('./index-BumVulwx.cjs');
13
13
  var forkBackfill = require('./forkBackfill-8eLDeS73.cjs');
14
- var configuration = require('./configuration-C9Sx-Foo.cjs');
14
+ var configuration = require('./configuration-CI0GWwaT.cjs');
15
15
  var providerBinding = require('./providerBinding-B-Qbx9W2.cjs');
16
- var controlClient = require('./controlClient-BLO1_pPx.cjs');
17
- var machineMetadata = require('./machineMetadata-D1hlm_oF.cjs');
16
+ var controlClient = require('./controlClient-BIi1tzEo.cjs');
17
+ var machineMetadata = require('./machineMetadata-YeHF4gSY.cjs');
18
18
  var projectPath = require('./projectPath-C3ioB4Bu.cjs');
19
19
  var path = require('node:path');
20
- var startupSessionCreate = require('./startupSessionCreate-CXRVahaU.cjs');
20
+ var startupSessionCreate = require('./startupSessionCreate-63ABDnfJ.cjs');
21
21
  var permissionMode = require('./permissionMode-CrV-XuMs.cjs');
22
22
  var authRelay = require('./authRelay-Dy1qU9td.cjs');
23
23
  var promises = require('node:fs/promises');
24
- var attachmentContent = require('./attachmentContent-K_Up4InS.cjs');
24
+ var attachmentContent = require('./attachmentContent-2kInPZrP.cjs');
25
25
  var transcriptCursor = require('./transcriptCursor-DcXGLeSc.cjs');
26
26
  var startupPlan = require('./startupPlan-BLMbfQIH.cjs');
27
27
  require('node:fs');
@@ -29,36 +29,36 @@ require('./processTreeSnapshot-mDbnuojn.cjs');
29
29
  require('node:child_process');
30
30
  require('zod');
31
31
  require('axios');
32
- require('./lidState-C4YgPn6y.cjs');
32
+ require('./lidState-BxHu6dus.cjs');
33
33
  require('os');
34
34
  require('child_process');
35
35
  require('node:events');
36
36
  require('socket.io-client');
37
- require('./pushNotifications-BgQ_QTgS.cjs');
37
+ require('./pushNotifications-OtQY-Mfa.cjs');
38
38
  require('./contentLogMetadata-ZSFk_NjQ.cjs');
39
39
  require('./limits-C-a7gr04.cjs');
40
- require('./time-D-8GFCE7.cjs');
41
- require('./registerCommonHandlers-CRqKXwQt.cjs');
40
+ require('./time-DcICfW0N.cjs');
41
+ require('./registerCommonHandlers-De54jKz8.cjs');
42
42
  require('util');
43
43
  require('fs/promises');
44
44
  require('crypto');
45
45
  require('path');
46
46
  require('cross-spawn');
47
47
  require('@paralleldrive/cuid2');
48
- require('./sync-DKSZOi6w.cjs');
48
+ require('./sync-CKSmwxec.cjs');
49
49
  require('./backgroundTaskActivity-CBvUdj39.cjs');
50
50
  require('chalk');
51
51
  require('node:util');
52
52
  require('./detectCLI-BuYR_Qxe.cjs');
53
53
  require('fs');
54
- require('./localHappyAgentAuth-BzCuIkzi.cjs');
54
+ require('./localHappyAgentAuth-BHklNDKQ.cjs');
55
55
  require('tweetnacl');
56
56
  require('./fsMkdir-0K3yENml.cjs');
57
57
  require('url');
58
58
 
59
59
  const DEFAULT_CLAUDE_MODEL = void 0;
60
60
  const DEFAULT_CLAUDE_EFFORT = void 0;
61
- const importRunClaudeDeps = () => Promise.resolve().then(function () { return require('./runClaudeDeps-DqOgRuKq.cjs'); });
61
+ const importRunClaudeDeps = () => Promise.resolve().then(function () { return require('./runClaudeDeps-dVfReVd4.cjs'); });
62
62
  async function runClaude(credentials, options = {}) {
63
63
  logger.logger.debug(`[CLAUDE] ===== CLAUDE MODE STARTING =====`);
64
64
  logger.logger.debug(`[CLAUDE] This is the Claude agent, NOT Gemini`);
@@ -72,7 +72,7 @@ async function runClaude(credentials, options = {}) {
72
72
  const isAssistantVariant = process.env.HAPPY_SESSION_VARIANT === "assistant";
73
73
  if (isAssistantVariant) {
74
74
  try {
75
- const { bootstrapAssistantHome } = await Promise.resolve().then(function () { return require('./bootstrap-BPz1iX77.cjs'); });
75
+ const { bootstrapAssistantHome } = await Promise.resolve().then(function () { return require('./bootstrap-B7YvJcVK.cjs'); });
76
76
  await bootstrapAssistantHome();
77
77
  } catch (error) {
78
78
  logger.logger.debug("[START] Assistant home bootstrap failed:", error);
@@ -192,7 +192,7 @@ async function runClaude(credentials, options = {}) {
192
192
  }
193
193
  if (!response) {
194
194
  let offlineSessionId = null;
195
- const { claudeLocal } = await Promise.resolve().then(function () { return require('./claudeLocal-Dywp8NKr.cjs'); });
195
+ const { claudeLocal } = await Promise.resolve().then(function () { return require('./claudeLocal-C4A7-BmS.cjs'); });
196
196
  const { createSessionScanner: createSessionScanner2 } = await loadDeps();
197
197
  const reconnection = api.startOfflineReconnection({
198
198
  serverUrl: configuration.configuration.serverUrl,
@@ -1,25 +1,25 @@
1
1
  import os from 'node:os';
2
- import { c as claimSessionOrExit, a as applyServerSnapshot, b as applyReconnectReplay, w as withoutServerSnapshot, m as mergeReconnectMetadata, e as exitCursorStamp } from './sessionLock-ha9gsQEn.mjs';
3
- import { r as readSettings, H as HIBERNATION_CAPABILITY, a as resolveCheckMs, l as latchKeepAwake, e as evaluateWrapperIdle } from './persistence-DFtgQvr6.mjs';
4
- import { D as DEFAULT_CLAUDE_PERMISSION_MODE, H as HibernationProbe, c as commitHibernation } from './defaultPermissionMode-CTdxUV_3.mjs';
2
+ import { c as claimSessionOrExit, a as applyServerSnapshot, b as applyReconnectReplay, w as withoutServerSnapshot, m as mergeReconnectMetadata, e as exitCursorStamp } from './sessionLock-DOsE5UUf.mjs';
3
+ import { r as readSettings, H as HIBERNATION_CAPABILITY, a as resolveCheckMs, l as latchKeepAwake, e as evaluateWrapperIdle } from './persistence-FgtDuVAP.mjs';
4
+ import { D as DEFAULT_CLAUDE_PERMISSION_MODE, H as HibernationProbe, c as commitHibernation } from './defaultPermissionMode-yR27mevc.mjs';
5
5
  import { randomUUID } from 'node:crypto';
6
- import { c as connectionState, A as ApiClient, s as startOfflineReconnection } from './api-BpTDU2BO.mjs';
7
- import { l as logger } from './logger-D2qd0mMg.mjs';
8
- import { s as spawnOriginTags, a as sessionWorktreeMetadata } from './createSessionMetadata-BYroCdrU.mjs';
9
- import { p as packageJson } from './package-Ek5FOyEo.mjs';
10
- import { P as PROMPT_QUEUE_CAPABILITY, a as PROJECT_SESSION_CAPABILITY } from './index-DisBaRvM.mjs';
6
+ import { c as connectionState, A as ApiClient, s as startOfflineReconnection } from './api-DUFy21Nf.mjs';
7
+ import { l as logger } from './logger-CpaeM90D.mjs';
8
+ import { s as spawnOriginTags, a as sessionWorktreeMetadata } from './createSessionMetadata-Dqy_DfoF.mjs';
9
+ import { p as packageJson } from './package-DagIeOhi.mjs';
10
+ import { P as PROMPT_QUEUE_CAPABILITY, a as PROJECT_SESSION_CAPABILITY } from './index-B9f1vKcC.mjs';
11
11
  import { F as FORK_BACKFILL_CAPABILITY, p as publishForkBackfillWhenCommitted } from './forkBackfill-DYIjlN1Z.mjs';
12
- import { c as configuration } from './configuration-CVgUe2qN.mjs';
12
+ import { c as configuration } from './configuration-DbCHeEeP.mjs';
13
13
  import { l as loadSessionProvider, a as applyProviderEnv } from './providerBinding-CYubGg-Z.mjs';
14
- import { n as notifyDaemonSessionStarted, c as checkDaemonHibernation } from './controlClient-DMCxtwq2.mjs';
15
- import { g as getInitialMachineMetadata } from './machineMetadata-B2czDiTd.mjs';
14
+ import { n as notifyDaemonSessionStarted, c as checkDaemonHibernation } from './controlClient-Dv80mB_j.mjs';
15
+ import { g as getInitialMachineMetadata } from './machineMetadata-ukaYmmlK.mjs';
16
16
  import { p as projectPath } from './projectPath-BTBIMB57.mjs';
17
17
  import { resolve, join } from 'node:path';
18
- import { c as createSessionForStartup } from './startupSessionCreate-B60THeNz.mjs';
18
+ import { c as createSessionForStartup } from './startupSessionCreate-CY4tPjlZ.mjs';
19
19
  import { a as applySandboxPermissionPolicy, r as resolveInitialClaudePermissionMode, m as mapToClaudeMode, b as reconcilePublishedPermissionMode } from './permissionMode-CH4FoZfU.mjs';
20
20
  import { d as decodeBase64, e as encodeBase64 } from './authRelay-DhQhkBvX.mjs';
21
21
  import { readFile } from 'node:fs/promises';
22
- import { C as CLAUDE_ATTACHMENT_KINDS, s as stripAttachmentManifest } from './attachmentContent-CWSSGMMo.mjs';
22
+ import { C as CLAUDE_ATTACHMENT_KINDS, s as stripAttachmentManifest } from './attachmentContent-D01-pLOB.mjs';
23
23
  import { T as TranscriptPathHints } from './transcriptCursor-B7T_gkQ0.mjs';
24
24
  import { p as planClaudeStartup } from './startupPlan-DFMyNgAs.mjs';
25
25
  import 'node:fs';
@@ -27,36 +27,36 @@ import './processTreeSnapshot-CuLJDNC-.mjs';
27
27
  import 'node:child_process';
28
28
  import 'zod';
29
29
  import 'axios';
30
- import './lidState-CBjQEwTt.mjs';
30
+ import './lidState-CZ1ggYiB.mjs';
31
31
  import 'os';
32
32
  import 'child_process';
33
33
  import 'node:events';
34
34
  import 'socket.io-client';
35
- import './pushNotifications-gVJWGFBP.mjs';
35
+ import './pushNotifications-2CyhYAte.mjs';
36
36
  import './contentLogMetadata-BlWI0egu.mjs';
37
37
  import './limits-DIo7rEBR.mjs';
38
- import './time-Du0scQeJ.mjs';
39
- import './registerCommonHandlers-CyAtDNvs.mjs';
38
+ import './time-BsNUVcKH.mjs';
39
+ import './registerCommonHandlers-X9lnO2TF.mjs';
40
40
  import 'util';
41
41
  import 'fs/promises';
42
42
  import 'crypto';
43
43
  import 'path';
44
44
  import 'cross-spawn';
45
45
  import '@paralleldrive/cuid2';
46
- import './sync-DJvx7RbO.mjs';
46
+ import './sync-CZjyTC4v.mjs';
47
47
  import './backgroundTaskActivity-8PdPxrvy.mjs';
48
48
  import 'chalk';
49
49
  import 'node:util';
50
50
  import './detectCLI-CSGMlV51.mjs';
51
51
  import 'fs';
52
- import './localHappyAgentAuth-CcWGU_lS.mjs';
52
+ import './localHappyAgentAuth-OJk4xDwg.mjs';
53
53
  import 'tweetnacl';
54
54
  import './fsMkdir-DumgLTzR.mjs';
55
55
  import 'url';
56
56
 
57
57
  const DEFAULT_CLAUDE_MODEL = void 0;
58
58
  const DEFAULT_CLAUDE_EFFORT = void 0;
59
- const importRunClaudeDeps = () => import('./runClaudeDeps-eazOhb6g.mjs');
59
+ const importRunClaudeDeps = () => import('./runClaudeDeps-DoaYM017.mjs');
60
60
  async function runClaude(credentials, options = {}) {
61
61
  logger.debug(`[CLAUDE] ===== CLAUDE MODE STARTING =====`);
62
62
  logger.debug(`[CLAUDE] This is the Claude agent, NOT Gemini`);
@@ -70,7 +70,7 @@ async function runClaude(credentials, options = {}) {
70
70
  const isAssistantVariant = process.env.HAPPY_SESSION_VARIANT === "assistant";
71
71
  if (isAssistantVariant) {
72
72
  try {
73
- const { bootstrapAssistantHome } = await import('./bootstrap-CodyCmGt.mjs');
73
+ const { bootstrapAssistantHome } = await import('./bootstrap-MFmMruyB.mjs');
74
74
  await bootstrapAssistantHome();
75
75
  } catch (error) {
76
76
  logger.debug("[START] Assistant home bootstrap failed:", error);
@@ -190,7 +190,7 @@ async function runClaude(credentials, options = {}) {
190
190
  }
191
191
  if (!response) {
192
192
  let offlineSessionId = null;
193
- const { claudeLocal } = await import('./claudeLocal-BgIRtT3Q.mjs');
193
+ const { claudeLocal } = await import('./claudeLocal-C6wNx9qH.mjs');
194
194
  const { createSessionScanner: createSessionScanner2 } = await loadDeps();
195
195
  const reconnection = startOfflineReconnection({
196
196
  serverUrl: configuration.serverUrl,