very-happy-cli 0.2.183 → 0.2.185

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-B-aMuEzO.cjs → AcpBackend-CCqL9mP1.cjs} +3 -3
  2. package/dist/{AcpBackend-9c-Jeaxd.mjs → AcpBackend-DkoqWhTa.mjs} +3 -3
  3. package/dist/{AcpSessionManager-CS0FOSQk.mjs → AcpSessionManager-BNPex8tJ.mjs} +2 -2
  4. package/dist/{AcpSessionManager-BxXe24AV.cjs → AcpSessionManager-DrtAJQUH.cjs} +2 -2
  5. package/dist/{BasePermissionHandler-BREjppjP.cjs → BasePermissionHandler-DJZITwmL.cjs} +1 -1
  6. package/dist/{BasePermissionHandler-BJ1ID_Br.mjs → BasePermissionHandler-Dd4oGPDg.mjs} +1 -1
  7. package/dist/{acpSessionResume-BKtI9Jq_.mjs → acpSessionResume-_2NtETqb.mjs} +1 -1
  8. package/dist/{acpSessionResume-mVoJ75vI.cjs → acpSessionResume-umHzSMbQ.cjs} +1 -1
  9. package/dist/{agentHome-rzjm56o4.cjs → agentHome-CmIMqMWy.cjs} +4 -4
  10. package/dist/{agentHome-B8Ctr_Nu.mjs → agentHome-Dv_hRIt7.mjs} +4 -4
  11. package/dist/{api-xZiqVynF.cjs → api-BSz8MYte.cjs} +67 -17
  12. package/dist/{api-C29WLYkW.mjs → api-BTS8mqLy.mjs} +67 -17
  13. package/dist/{apiMachine-Dz6Yfk0m.mjs → apiMachine-BcjccOmd.mjs} +14 -14
  14. package/dist/{apiMachine-B-FNBIYG.cjs → apiMachine-utCDabnO.cjs} +14 -14
  15. package/dist/{attachmentContent-DwY0uIg6.mjs → attachmentContent-DpOzgDTw.mjs} +2 -2
  16. package/dist/{attachmentContent-COV4LF8k.cjs → attachmentContent-hkdGP2NV.cjs} +2 -2
  17. package/dist/{auth-CYtk9_ga.cjs → auth-B8nCUEiK.cjs} +5 -5
  18. package/dist/{auth-xT70IYMx.mjs → auth-BKD2U9S2.mjs} +5 -5
  19. package/dist/{auth-DvbSDalm.mjs → auth-CpbTj74y.mjs} +8 -8
  20. package/dist/{auth-D_qsnVr3.cjs → auth-DzXdF08E.cjs} +8 -8
  21. package/dist/{auto-IiPqvIsN.mjs → auto-C-NK2JS8.mjs} +17 -17
  22. package/dist/{auto-DT_PfpCx.cjs → auto-E3ouHO37.cjs} +17 -17
  23. package/dist/{bootstrap-C50NkfPx.cjs → bootstrap-DIMkxIbR.cjs} +2 -2
  24. package/dist/{bootstrap-DS8Acdhm.mjs → bootstrap-DV4dqeCe.mjs} +2 -2
  25. package/dist/{browser-1j9gdZoD.mjs → browser-C0xt1NE-.mjs} +1 -1
  26. package/dist/{browser-CxKZLd2T.cjs → browser-Ch50ZchJ.cjs} +1 -1
  27. package/dist/{claudeLocal-CgNWpepB.cjs → claudeLocal-Curd8-dn.cjs} +5 -5
  28. package/dist/{claudeLocal-U1Fa9sJo.mjs → claudeLocal-D-U3fIdS.mjs} +5 -5
  29. package/dist/{claudeLocalLauncher-IyFm0D6a.cjs → claudeLocalLauncher-BEJ9Wad_.cjs} +10 -10
  30. package/dist/{claudeLocalLauncher-BjCsfZUE.mjs → claudeLocalLauncher-BTNUVzRK.mjs} +10 -10
  31. package/dist/{claudeSessionFork-BUO1XdSm.cjs → claudeSessionFork-DMdeScGk.cjs} +1 -1
  32. package/dist/{claudeSessionFork-6-1vKISn.mjs → claudeSessionFork-JPEHVbfR.mjs} +1 -1
  33. package/dist/{client-DcKJ0ul_.cjs → client-C54hMWx6.cjs} +2 -2
  34. package/dist/{client-BgHvK7lo.mjs → client-Ct1rnpJw.mjs} +2 -2
  35. package/dist/{client-DfDyE322.mjs → client-D1rJt15-.mjs} +18 -5
  36. package/dist/{client-5_zDNdOh.mjs → client-D2lOnvzs.mjs} +2 -2
  37. package/dist/{client--vZueZYF.cjs → client-dpo5EbS9.cjs} +18 -5
  38. package/dist/{client-DYGDBD0M.cjs → client-qgKef7S6.cjs} +2 -2
  39. package/dist/codex/happyMcpStdioBridge.cjs +16 -16
  40. package/dist/codex/happyMcpStdioBridge.mjs +16 -16
  41. package/dist/{codexAppServerClient-DvBg4hGc.mjs → codexAppServerClient-CM3O0zHW.mjs} +3 -3
  42. package/dist/{codexAppServerClient-C3nrTfwY.cjs → codexAppServerClient-DGeqZViU.cjs} +3 -3
  43. package/dist/{codexCommand-Bqp2--g_.mjs → codexCommand-CkdopWS7.mjs} +42 -42
  44. package/dist/{codexCommand-DSiU6MNt.cjs → codexCommand-D_8fbJEk.cjs} +42 -42
  45. package/dist/{codexTermination-DsliWl_s.mjs → codexTermination-FO52Ahcx.mjs} +1 -1
  46. package/dist/{codexTermination-D9TRTglF.cjs → codexTermination-MG2j2DDX.cjs} +1 -1
  47. package/dist/{config-DeaqRn3o.mjs → config-CppOKnWe.mjs} +3 -3
  48. package/dist/{config-CRhWiOwi.cjs → config-IDbpY1Am.cjs} +3 -3
  49. package/dist/{configuration-K3I6yOjZ.cjs → configuration-CwfmwaLU.cjs} +1 -1
  50. package/dist/{configuration-elzht62L.mjs → configuration-HPdj5Til.mjs} +1 -1
  51. package/dist/{connect-CT5cOlnC.mjs → connect-1YK7vPbW.mjs} +13 -13
  52. package/dist/{connect-B5UbfmO3.cjs → connect-BNlBIAM8.cjs} +13 -13
  53. package/dist/{context-DNKNF8Yh.cjs → context-D3vDWjiI.cjs} +1 -1
  54. package/dist/{context-CLj1_RYF.mjs → context-DetK5c-x.mjs} +1 -1
  55. package/dist/{controlClient-CuYQs2aZ.mjs → controlClient-DBylxaEh.mjs} +14 -4
  56. package/dist/{controlClient-ChqmxgbB.cjs → controlClient-DTMI1aTp.cjs} +14 -3
  57. package/dist/{createSessionMetadata-QfiRx4Tf.cjs → createSessionMetadata-D2Ll7PlQ.cjs} +2 -2
  58. package/dist/{createSessionMetadata-C1MbLQnh.mjs → createSessionMetadata-D8pfpX4V.mjs} +2 -2
  59. package/dist/{defaultPermissionMode-U9LuUeQh.mjs → defaultPermissionMode-Bkhj_DwT.mjs} +2 -2
  60. package/dist/{defaultPermissionMode-DQmdZZIg.cjs → defaultPermissionMode-DVXkcryy.cjs} +2 -2
  61. package/dist/{deterministicJson-BBRUcB8i.cjs → deterministicJson-DUCYjhHe.cjs} +13 -13
  62. package/dist/{deterministicJson-BixlyPWV.mjs → deterministicJson-cEWItQun.mjs} +13 -13
  63. package/dist/{doctor-Dban2oE2.mjs → doctor-DpWtxNeT.mjs} +7 -7
  64. package/dist/{doctor-CKgHUV4W.cjs → doctor-tLRILlmz.cjs} +7 -7
  65. package/dist/{downloadTarget-VUTd9lEO.mjs → downloadTarget-B5b5BHb2.mjs} +6 -6
  66. package/dist/{downloadTarget-CmC11Y7E.cjs → downloadTarget-Ci5wcYC2.cjs} +6 -6
  67. package/dist/{ensureDaemonRunning-L0fl0cLE.cjs → ensureDaemonRunning-Dsv8UPwx.cjs} +5 -5
  68. package/dist/{ensureDaemonRunning-khb8Nr1n.mjs → ensureDaemonRunning-GDGwNDGF.mjs} +5 -5
  69. package/dist/{handleResumeCommand-D9myBN2N.cjs → handleResumeCommand-CncudrQd.cjs} +5 -5
  70. package/dist/{handleResumeCommand-CLDGWpTJ.mjs → handleResumeCommand-DW7Ml1u5.mjs} +5 -5
  71. package/dist/{index-DgA79dVw.cjs → index-BEHzEYP0.cjs} +39 -39
  72. package/dist/{index-BdJs0465.cjs → index-Bh806Q-1.cjs} +3 -3
  73. package/dist/{index-IRI8s8kz.mjs → index-C1qLnBOk.mjs} +40 -40
  74. package/dist/{index-CtwqBeH6.mjs → index-DRWlaLbe.mjs} +3 -3
  75. package/dist/{index-BptfFoXM.mjs → index-DisBaRvM.mjs} +10 -1
  76. package/dist/{index-y4JNyz9H.cjs → index-Dzb_Bsfu.cjs} +4 -4
  77. package/dist/{index-Fq-jxjsB.cjs → index-Ub-5xbcU.cjs} +10 -1
  78. package/dist/{index-COSjJPIv.cjs → index-Vx4EQ6wI.cjs} +4 -4
  79. package/dist/{index-GkkbUZX-.mjs → index-Wf6mKJq9.mjs} +4 -4
  80. package/dist/{index-BMZx-699.mjs → index-bT1X9Brv.mjs} +4 -4
  81. package/dist/index.cjs +2 -2
  82. package/dist/index.mjs +2 -2
  83. package/dist/{install-cn98bTCs.cjs → install-CRs4tGBa.cjs} +3 -3
  84. package/dist/{install-JvCk2PJV.mjs → install-DmF9wfwV.mjs} +3 -3
  85. package/dist/lib.cjs +12 -12
  86. package/dist/lib.d.cts +11 -0
  87. package/dist/lib.d.mts +11 -0
  88. package/dist/lib.mjs +12 -12
  89. package/dist/{lidState-DXeYTsrm.mjs → lidState-CG9jFcML.mjs} +1 -1
  90. package/dist/{lidState-Bcs5kRHi.cjs → lidState-wwiu6M3p.cjs} +1 -1
  91. package/dist/{localHappyAgentAuth-C1A4ChCR.mjs → localHappyAgentAuth-CWha8BiX.mjs} +1 -1
  92. package/dist/{localHappyAgentAuth-CypTSe42.cjs → localHappyAgentAuth-UoytSUX0.cjs} +1 -1
  93. package/dist/{logger-RMPh5aqe.mjs → logger-BjXkscIr.mjs} +2 -2
  94. package/dist/{logger-Cgwz30rK.cjs → logger-CIUMiSLo.cjs} +2 -2
  95. package/dist/{machineMetadata-BSOGMNRi.cjs → machineMetadata-BPlyxzxb.cjs} +3 -3
  96. package/dist/{machineMetadata-BTUtPRth.mjs → machineMetadata-Ca4Dpy6s.mjs} +3 -3
  97. package/dist/{main-DNDL6t8z.mjs → main-CS1U9i4s.mjs} +53 -45
  98. package/dist/{main-4iiwYpCR.cjs → main-FD8mmcsK.cjs} +53 -45
  99. package/dist/{mcp-DXYDPOpJ.mjs → mcp-BS6rdR8p.mjs} +15 -15
  100. package/dist/{mcp-C7eEoGhz.cjs → mcp-C7Rm1dTM.cjs} +15 -15
  101. package/dist/{mirrorProtocol-DQRy5PaT.mjs → mirrorProtocol-C3Anki4S.mjs} +3 -3
  102. package/dist/{mirrorProtocol-c5g5MgNc.cjs → mirrorProtocol-CMJ2HOZF.cjs} +3 -3
  103. package/dist/{package-3aPiSpZj.cjs → package-CRDjc5vK.cjs} +7 -7
  104. package/dist/{package-CTrz6U3C.mjs → package-Do0Y9bGA.mjs} +7 -7
  105. package/dist/{panels-B5sZ84vA.mjs → panels-C-jss7nF.mjs} +5 -5
  106. package/dist/{panels-BmsmKHbw.cjs → panels-DwTHrZuo.cjs} +5 -5
  107. package/dist/{peerTools-DIPOX033.mjs → peerTools-CL7zBxlC.mjs} +5 -5
  108. package/dist/{peerTools-Dxe7iCi_.cjs → peerTools-SLRntgX6.cjs} +5 -5
  109. package/dist/{persistence-DZRMUZZS.cjs → persistence-CNWBdUH2.cjs} +2 -2
  110. package/dist/{persistence-zJo4r7YI.mjs → persistence-CmVwM5uq.mjs} +2 -2
  111. package/dist/{piRunnerArgs-BSPiS6tZ.cjs → piRunnerArgs-CXJx3PPx.cjs} +1 -1
  112. package/dist/{piRunnerArgs-IVdoHUB6.mjs → piRunnerArgs-K0K9Y0Yq.mjs} +1 -1
  113. package/dist/{piRuntime-BvHO3vgO.mjs → piRuntime-BSoHy-QJ.mjs} +1 -1
  114. package/dist/{piRuntime-BJzjlMcN.cjs → piRuntime-Bv41vG05.cjs} +1 -1
  115. package/dist/{piTerminal-D7vBOpkE.mjs → piTerminal-B8acGxsm.mjs} +17 -17
  116. package/dist/{piTerminal-Cz4pW55d.cjs → piTerminal-DSs-fnps.cjs} +17 -17
  117. package/dist/providerBinding-B-Qbx9W2.cjs +140 -0
  118. package/dist/providerBinding-CYubGg-Z.mjs +132 -0
  119. package/dist/{pushNotifications-CgIrYml3.cjs → pushNotifications-C651e0ZZ.cjs} +3 -3
  120. package/dist/{pushNotifications-C4R9-1hU.mjs → pushNotifications-DnpJJ7VR.mjs} +3 -3
  121. package/dist/{query-CZQG1PdU.cjs → query-DXFx2VZY.cjs} +1 -1
  122. package/dist/{query-DKPmDsHS.mjs → query-rxLftxvh.mjs} +1 -1
  123. package/dist/{rateLimitWindows-CPV0nLeq.cjs → rateLimitWindows-1WoBs8ln.cjs} +1 -1
  124. package/dist/{rateLimitWindows-HlHATOQ0.mjs → rateLimitWindows-D9mQRGHv.mjs} +1 -1
  125. package/dist/{registerCommonHandlers-a9lHojSV.mjs → registerCommonHandlers-DpBxSCBi.mjs} +2 -2
  126. package/dist/{registerCommonHandlers-D1pC83Op.cjs → registerCommonHandlers-K-BTp2iR.cjs} +2 -2
  127. package/dist/{registerKillSessionHandler-Bp-fuH-w.mjs → registerKillSessionHandler-BDxd20fg.mjs} +6 -6
  128. package/dist/{registerKillSessionHandler-nTi2vVJy.cjs → registerKillSessionHandler-DwPEAS2G.cjs} +6 -6
  129. package/dist/{remoteSessionClient-Cwrddscy.mjs → remoteSessionClient-DHWfDMHA.mjs} +5 -5
  130. package/dist/{remoteSessionClient-HQAKAvVd.cjs → remoteSessionClient-DnFblfFz.cjs} +5 -5
  131. package/dist/{reportProgressTool-Be-8ADI4.cjs → reportProgressTool-CYgnezAO.cjs} +3 -3
  132. package/dist/{reportProgressTool-CcZ32nrd.mjs → reportProgressTool-DJXfK6rp.mjs} +3 -3
  133. package/dist/{run-CxRJk9qq.cjs → run-BChqUxs6.cjs} +77 -40
  134. package/dist/{run-BBU8GyxE.mjs → run-BkixRBWm.mjs} +77 -40
  135. package/dist/{runClaude-Dd5zJaUZ.cjs → runClaude-Bdw9vTgv.cjs} +39 -24
  136. package/dist/{runClaude-DR6pEQwd.mjs → runClaude-FWTCLnVq.mjs} +39 -24
  137. package/dist/{runClaudeDeps-COgZaUZm.mjs → runClaudeDeps-C6mCzhtO.mjs} +47 -43
  138. package/dist/{runClaudeDeps-CTtZ_1mC.cjs → runClaudeDeps-CN_moqup.cjs} +42 -38
  139. package/dist/{runGemini-DVoVUfPp.mjs → runGemini-CI7ut_ng.mjs} +33 -33
  140. package/dist/{runGemini-DX72qB92.cjs → runGemini-CzPwEltY.cjs} +33 -33
  141. package/dist/{runOpenClaw-BHjzmzeC.mjs → runOpenClaw-8V2K_-lg.mjs} +18 -18
  142. package/dist/{runOpenClaw-BSg4hFVt.cjs → runOpenClaw-CLw64Nmq.cjs} +18 -18
  143. package/dist/{sandbox-CWR9EqoN.mjs → sandbox-BMkBdvHW.mjs} +4 -4
  144. package/dist/{sandbox-D1T_hmgZ.cjs → sandbox-DD2oQTt3.cjs} +4 -4
  145. package/dist/{selfCheck-CE7vlnNS.cjs → selfCheck-0jELpLE9.cjs} +37 -36
  146. package/dist/selfCheck-DgWZfw5E.mjs +86 -0
  147. package/dist/{send-BDF0Zvxo.mjs → send-BNjwFaVp.mjs} +8 -8
  148. package/dist/{send-BxZqRCcG.cjs → send-BoLglO1t.cjs} +8 -8
  149. package/dist/{server-B4JtnDLF.mjs → server-C5wOp8jw.mjs} +4 -4
  150. package/dist/{server-DB7_70Mi.cjs → server-Uw82k7zD.cjs} +6 -6
  151. package/dist/{sessionLock-BXvFN6uw.cjs → sessionLock-BTo7Cdbi.cjs} +3 -3
  152. package/dist/{sessionLock-CXOOX-VD.mjs → sessionLock-YMRCi-Ec.mjs} +3 -3
  153. package/dist/{sessionOps-BWlDlFYP.cjs → sessionOps-BDHEzyAY.cjs} +4 -4
  154. package/dist/{sessionOps-ByVggB_q.mjs → sessionOps-BO6AesNJ.mjs} +4 -4
  155. package/dist/sessionProvider-CB9lGJdF.mjs +109 -0
  156. package/dist/sessionProvider-DLdJJV6A.cjs +114 -0
  157. package/dist/{sessionScanner-DkxPB5VA.cjs → sessionScanner-3TevonZd.cjs} +3 -3
  158. package/dist/{sessionScanner-r66RtF95.mjs → sessionScanner-BkukogZy.mjs} +3 -3
  159. package/dist/{sessions-BiJTxFy9.cjs → sessions-BkBcZSj7.cjs} +10 -10
  160. package/dist/{sessions-C1lLK_a9.mjs → sessions-Bx-6fXTL.mjs} +10 -10
  161. package/dist/{setupOfflineReconnection-CecTiFZ-.cjs → setupOfflineReconnection-DMfoVL-0.cjs} +2 -2
  162. package/dist/{setupOfflineReconnection-Bl3DuakT.mjs → setupOfflineReconnection-DYzysFFJ.mjs} +2 -2
  163. package/dist/{spawn-D-8MlEM6.mjs → spawn-CHC32rLr.mjs} +14 -14
  164. package/dist/{spawn-D79mVa3h.cjs → spawn-DvyBhowH.cjs} +14 -14
  165. package/dist/{spawnAgents-Sfnf-4pN.cjs → spawnAgents-D15n6tAj.cjs} +1 -1
  166. package/dist/{spawnAgents-DJHjq01u.mjs → spawnAgents-jXo9jIYo.mjs} +1 -1
  167. package/dist/{spawnHappyCLI-CQwQs9G5.cjs → spawnHappyCLI-WYJCvAWD.cjs} +1 -1
  168. package/dist/{spawnHappyCLI-v_bJwZ4Z.mjs → spawnHappyCLI-e9MaJWB0.mjs} +1 -1
  169. package/dist/{specialCommands-yMnFvS-W.mjs → specialCommands-D00VrQ09.mjs} +3 -3
  170. package/dist/{specialCommands-CWMVfT5s.cjs → specialCommands-DqrQnKHC.cjs} +3 -3
  171. package/dist/{startFileWatcher-BCDkT_tr.mjs → startFileWatcher-CvUUesns.mjs} +1 -1
  172. package/dist/{startFileWatcher-GW4_E7dV.cjs → startFileWatcher-VFZ-Bpwa.cjs} +1 -1
  173. package/dist/{startupSessionCreate-tBRa_ze8.cjs → startupSessionCreate-B25xTUJ4.cjs} +1 -1
  174. package/dist/{startupSessionCreate-BcAGYo51.mjs → startupSessionCreate-B6HNLg0g.mjs} +1 -1
  175. package/dist/{streamRelay-BZ8drtof.cjs → streamRelay-CtTpf-Li.cjs} +1 -1
  176. package/dist/{streamRelay-BEDiy6_b.mjs → streamRelay-GzHxvMem.mjs} +1 -1
  177. package/dist/{sync-BMDkyo75.cjs → sync-DliZ1zZh.cjs} +1 -1
  178. package/dist/{sync--QUIOuf8.mjs → sync-HPnxI4fz.mjs} +1 -1
  179. package/dist/{systemPrompt-DoHSXrH0.cjs → systemPrompt-CYvRvanR.cjs} +2 -2
  180. package/dist/{systemPrompt-O0Kd6vbA.mjs → systemPrompt-D9JJpzl_.mjs} +2 -2
  181. package/dist/{teams-CTF1gT48.mjs → teams-C0PJlIMz.mjs} +7 -7
  182. package/dist/{teams-BkZop-sP.cjs → teams-D7Ad6YSf.cjs} +7 -7
  183. package/dist/{template-CeC1dYe-.cjs → template-BLJxflCH.cjs} +1 -1
  184. package/dist/{template-D1fm22em.mjs → template-YlpbYGeQ.mjs} +1 -1
  185. package/dist/{time-CdCotzKU.cjs → time-BCGGrWp4.cjs} +1 -1
  186. package/dist/{time-B2KKdAym.mjs → time-BbJ-NWcl.mjs} +1 -1
  187. package/dist/{titleGenerator-BFDczskR.mjs → titleGenerator-03Y2uoZW.mjs} +1 -1
  188. package/dist/{titleGenerator-DZH1XqAf.cjs → titleGenerator-IrI84kqh.cjs} +2 -2
  189. package/dist/{todo-C2gyOUom.mjs → todo-DOh8KaxD.mjs} +6 -6
  190. package/dist/{todo-DnTFTHmV.cjs → todo-DdV9_uEu.cjs} +6 -6
  191. package/dist/{tools-C8rpwyIl.cjs → tools-DeoxWyQ0.cjs} +1 -1
  192. package/dist/{tools-DUjkqSQL.mjs → tools-WXF7ApAe.mjs} +1 -1
  193. package/dist/{uninstall-B5Ew50mZ.mjs → uninstall-BVYlC0jw.mjs} +3 -3
  194. package/dist/{uninstall-CKMPWTMv.cjs → uninstall-oGvAKOlN.cjs} +3 -3
  195. package/package.json +7 -7
  196. package/dist/selfCheck-ZGgBtxFQ.mjs +0 -85
@@ -1,27 +1,27 @@
1
1
  'use strict';
2
2
 
3
- var mirrorProtocol = require('./mirrorProtocol-c5g5MgNc.cjs');
3
+ var mirrorProtocol = require('./mirrorProtocol-CMJ2HOZF.cjs');
4
4
  var fsMkdir = require('./fsMkdir-0K3yENml.cjs');
5
- var piRunnerArgs = require('./piRunnerArgs-BSPiS6tZ.cjs');
5
+ var piRunnerArgs = require('./piRunnerArgs-CXJx3PPx.cjs');
6
6
  var fs = require('fs/promises');
7
7
  var os$1 = require('os');
8
8
  var tmp = require('tmp');
9
9
  var axios = require('axios');
10
10
  var node_fs = require('node:fs');
11
11
  var path = require('node:path');
12
- var configuration = require('./configuration-K3I6yOjZ.cjs');
13
- var api = require('./api-xZiqVynF.cjs');
14
- var spawnAgents = require('./spawnAgents-Sfnf-4pN.cjs');
15
- var logger = require('./logger-Cgwz30rK.cjs');
16
- var index$2 = require('./index-BdJs0465.cjs');
17
- var auth = require('./auth-CYtk9_ga.cjs');
12
+ var configuration = require('./configuration-CwfmwaLU.cjs');
13
+ var api = require('./api-BSz8MYte.cjs');
14
+ var spawnAgents = require('./spawnAgents-D15n6tAj.cjs');
15
+ var logger = require('./logger-CIUMiSLo.cjs');
16
+ var index$2 = require('./index-Bh806Q-1.cjs');
17
+ var auth = require('./auth-B8nCUEiK.cjs');
18
18
  var child_process = require('child_process');
19
- var _package = require('./package-3aPiSpZj.cjs');
20
- var doctor = require('./doctor-CKgHUV4W.cjs');
21
- var spawnHappyCLI = require('./spawnHappyCLI-CQwQs9G5.cjs');
22
- var persistence = require('./persistence-DZRMUZZS.cjs');
23
- var controlClient = require('./controlClient-ChqmxgbB.cjs');
24
- var sessionOps = require('./sessionOps-BWlDlFYP.cjs');
19
+ var _package = require('./package-CRDjc5vK.cjs');
20
+ var doctor = require('./doctor-tLRILlmz.cjs');
21
+ var spawnHappyCLI = require('./spawnHappyCLI-WYJCvAWD.cjs');
22
+ var persistence = require('./persistence-CNWBdUH2.cjs');
23
+ var controlClient = require('./controlClient-DTMI1aTp.cjs');
24
+ var sessionOps = require('./sessionOps-BDHEzyAY.cjs');
25
25
  var fastify = require('fastify');
26
26
  var z = require('zod');
27
27
  var fastifyTypeProviderZod = require('fastify-type-provider-zod');
@@ -29,62 +29,62 @@ var authRelay = require('./authRelay-Dy1qU9td.cjs');
29
29
  var node_crypto = require('node:crypto');
30
30
  var previewPath = require('./previewPath-B0rBdhy1.cjs');
31
31
  var backgroundTaskActivity = require('./backgroundTaskActivity-CBvUdj39.cjs');
32
- var rateLimitWindows = require('./rateLimitWindows-CPV0nLeq.cjs');
33
- var peerTools = require('./peerTools-Dxe7iCi_.cjs');
32
+ var rateLimitWindows = require('./rateLimitWindows-1WoBs8ln.cjs');
33
+ var peerTools = require('./peerTools-SLRntgX6.cjs');
34
34
  var os = require('node:os');
35
- var remoteSessionClient = require('./remoteSessionClient-HQAKAvVd.cjs');
36
- var bootstrap = require('./bootstrap-C50NkfPx.cjs');
37
- var index$1 = require('./index-y4JNyz9H.cjs');
35
+ var remoteSessionClient = require('./remoteSessionClient-DnFblfFz.cjs');
36
+ var bootstrap = require('./bootstrap-DIMkxIbR.cjs');
37
+ var index$1 = require('./index-Dzb_Bsfu.cjs');
38
38
  var require$$0 = require('fs');
39
39
  var require$$1 = require('path');
40
40
  var node_child_process = require('node:child_process');
41
41
  var projectPath = require('./projectPath-C3ioB4Bu.cjs');
42
42
  var doctorReadiness = require('./doctorReadiness-Dl6yRQCy.cjs');
43
- var machineMetadata = require('./machineMetadata-BSOGMNRi.cjs');
43
+ var machineMetadata = require('./machineMetadata-BPlyxzxb.cjs');
44
44
  var fileStore = require('./fileStore-7qhnbs6N.cjs');
45
45
  var pi = require('./pi-DlsrPCTa.cjs');
46
46
  var require$$3 = require('crypto');
47
47
  var detectCLI = require('./detectCLI-BuYR_Qxe.cjs');
48
- var handleResumeCommand = require('./handleResumeCommand-D9myBN2N.cjs');
48
+ var handleResumeCommand = require('./handleResumeCommand-CncudrQd.cjs');
49
49
  var webPanels = require('./webPanels-FCgFKvVe.cjs');
50
- var index = require('./index-Fq-jxjsB.cjs');
50
+ var index = require('./index-Ub-5xbcU.cjs');
51
51
  var promises = require('node:fs/promises');
52
52
  var cliUpdate = require('./cliUpdate-DsKXPFYp.cjs');
53
- var client = require('./client-DcKJ0ul_.cjs');
54
- var client$1 = require('./client-DYGDBD0M.cjs');
53
+ var client = require('./client-C54hMWx6.cjs');
54
+ var client$1 = require('./client-qgKef7S6.cjs');
55
55
  var daemonSupervisor = require('./daemonSupervisor-57JYYzMf.cjs');
56
56
  var path$1 = require('./path-B7zW-WwE.cjs');
57
57
  var editPaths = require('./editPaths-Bqp4OFPw.cjs');
58
- var startFileWatcher = require('./startFileWatcher-GW4_E7dV.cjs');
59
- var sync = require('./sync-BMDkyo75.cjs');
58
+ var startFileWatcher = require('./startFileWatcher-VFZ-Bpwa.cjs');
59
+ var sync = require('./sync-DliZ1zZh.cjs');
60
60
  var types = require('./types-CRS-srZK.cjs');
61
61
  var tmuxSocket = require('./tmuxSocket-D-Xt6Vn-.cjs');
62
- var sessionLock = require('./sessionLock-BXvFN6uw.cjs');
62
+ var sessionLock = require('./sessionLock-BTo7Cdbi.cjs');
63
63
  var doctor$1 = require('./doctor-u46qYYKX.cjs');
64
64
  var resources = require('./resources-CqwHPhdK.cjs');
65
65
  var node_util = require('node:util');
66
- var template = require('./template-CeC1dYe-.cjs');
66
+ var template = require('./template-BLJxflCH.cjs');
67
67
  var loginShellEnv = require('./loginShellEnv-BkuYtExZ.cjs');
68
- require('./acpSessionResume-mVoJ75vI.cjs');
69
- require('./lidState-Bcs5kRHi.cjs');
68
+ require('./acpSessionResume-umHzSMbQ.cjs');
69
+ require('./lidState-wwiu6M3p.cjs');
70
70
  require('node:events');
71
71
  require('socket.io-client');
72
- require('./pushNotifications-CgIrYml3.cjs');
72
+ require('./pushNotifications-C651e0ZZ.cjs');
73
73
  require('./contentLogMetadata-ZSFk_NjQ.cjs');
74
74
  require('./limits-C-a7gr04.cjs');
75
- require('./time-CdCotzKU.cjs');
76
- require('./registerCommonHandlers-D1pC83Op.cjs');
75
+ require('./time-BCGGrWp4.cjs');
76
+ require('./registerCommonHandlers-K-BTp2iR.cjs');
77
77
  require('util');
78
78
  require('cross-spawn');
79
79
  require('@paralleldrive/cuid2');
80
80
  require('chalk');
81
81
  require('node:module');
82
82
  require('tweetnacl');
83
- require('./browser-CxKZLd2T.cjs');
83
+ require('./browser-Ch50ZchJ.cjs');
84
84
  require('open');
85
85
  require('./ids-B6ZC0HGt.cjs');
86
86
  require('url');
87
- require('./localHappyAgentAuth-CypTSe42.cjs');
87
+ require('./localHappyAgentAuth-UoytSUX0.cjs');
88
88
  require('./processTreeSnapshot-mDbnuojn.cjs');
89
89
  require('ps-list');
90
90
 
@@ -593,6 +593,7 @@ function startDaemonControlServer({
593
593
  stopSession,
594
594
  spawnSession,
595
595
  resumeSession,
596
+ restartSession,
596
597
  requestShutdown,
597
598
  onHappySessionWebhook,
598
599
  onSessionStateEvent,
@@ -889,6 +890,34 @@ function startDaemonControlServer({
889
890
  return { success: false, error: result.errorMessage };
890
891
  }
891
892
  });
893
+ typed.post("/restart-session", {
894
+ schema: {
895
+ body: z.z.object({ sessionId: z.z.string().min(1).max(200) }),
896
+ response: {
897
+ 200: z.z.object({ success: z.z.boolean(), sessionId: z.z.string().optional(), error: z.z.string().optional() }),
898
+ 500: z.z.object({ success: z.z.boolean(), error: z.z.string().optional() }),
899
+ 503: z.z.object({ success: z.z.boolean(), error: z.z.string().optional() })
900
+ }
901
+ }
902
+ }, async (request, reply) => {
903
+ const { sessionId } = request.body;
904
+ if (!restartSession) {
905
+ reply.code(503);
906
+ return { success: false, error: "daemon is still starting up" };
907
+ }
908
+ logger.logger.debug(`[CONTROL SERVER] Restart session request: ${sessionId}`);
909
+ const result = await restartSession(sessionId, { keepPublishedPermissionMode: true });
910
+ switch (result.type) {
911
+ case "success":
912
+ return { success: true, sessionId: result.sessionId };
913
+ case "requestToApproveDirectoryCreation":
914
+ reply.code(500);
915
+ return { success: false, error: `Cannot restart: working directory ${result.directory} needs to be created first` };
916
+ case "error":
917
+ reply.code(500);
918
+ return { success: false, error: result.errorMessage };
919
+ }
920
+ });
892
921
  typed.post("/terminal-hook", {
893
922
  schema: {
894
923
  body: z.z.any(),
@@ -6188,6 +6217,10 @@ async function removeTeamWorktree(resource) {
6188
6217
  if (ownBranch) await git(repository, ["branch", "-D", branch]);
6189
6218
  }
6190
6219
 
6220
+ function refusalCode(error) {
6221
+ const code = axios.isAxiosError(error) ? error.response?.data?.error : void 0;
6222
+ return typeof code === "string" && /^[a-z_]{1,64}$/.test(code) ? ` (${code})` : "";
6223
+ }
6191
6224
  function persistedSpawnMatches(operationId) {
6192
6225
  return Object.entries(persistence.readPersistedSessions()).filter(([, entry]) => entry.metadata?.teamOperationId === operationId);
6193
6226
  }
@@ -6222,6 +6255,7 @@ function createTeamWorker(deps) {
6222
6255
  writeReceipt$1(home, receipt);
6223
6256
  }
6224
6257
  if (receipt.phase === "completed") return;
6258
+ let sessionStopped = false;
6225
6259
  try {
6226
6260
  if (op.type === "spawn") {
6227
6261
  if (machineMetadata.ownerRetryPending(op, receipt) && (receipt.phase === "prepared" || receipt.phase === "spawning" && persistedSpawnMatches(op.id).length === 0)) {
@@ -6318,10 +6352,11 @@ function createTeamWorker(deps) {
6318
6352
  return;
6319
6353
  }
6320
6354
  const bot = team.bots.find((candidate) => candidate.id === op.botId);
6321
- if (!bot || bot.generation !== op.generation || bot.sessionId !== op.sessionId) throw new Error("Worker binding changed; preserve resources for reconciliation");
6355
+ if (!bot || op.sessionId && bot.transferredTo?.sessionId === op.sessionId) throw new Error("Worker binding changed; preserve resources for reconciliation");
6322
6356
  if (op.sessionId) {
6323
6357
  await deps.stopAndWait(op.sessionId);
6324
6358
  await sessionOps.archiveSession(op.sessionId);
6359
+ sessionStopped = true;
6325
6360
  }
6326
6361
  if (team.archivedAt !== void 0) {
6327
6362
  await complete(op, receipt);
@@ -6344,7 +6379,7 @@ function createTeamWorker(deps) {
6344
6379
  } catch {
6345
6380
  }
6346
6381
  }
6347
- await action(op.teamId, `failure-${op.id}-${receipt.phase}-${node_crypto.createHash("sha256").update(detail).digest("hex").slice(0, 12)}`, { type: "fail-operation", operationId: op.id, machineId: deps.machineId, claimId: receipt.claimId, error: detail.slice(0, 1e3), unknown }).catch(() => {
6382
+ await action(op.teamId, `failure-${op.id}-${receipt.phase}-${node_crypto.createHash("sha256").update(detail).digest("hex").slice(0, 12)}${sessionStopped ? "-stopped" : ""}`, { type: "fail-operation", operationId: op.id, machineId: deps.machineId, claimId: receipt.claimId, error: detail.slice(0, 1e3), unknown, ...sessionStopped ? { sessionStopped: true } : {} }).catch(() => {
6348
6383
  });
6349
6384
  deps.log(`Teams operation ${op.id} ${unknown ? "needs reconciliation" : "will retry"}`);
6350
6385
  }
@@ -6424,8 +6459,8 @@ Use the teams tools to inspect current task state before acting. This message is
6424
6459
  if (closed) break;
6425
6460
  try {
6426
6461
  await execute(op);
6427
- } catch {
6428
- deps.log(`Teams operation ${op.id} remains pending`);
6462
+ } catch (error) {
6463
+ deps.log(`Teams operation ${op.id} remains pending${refusalCode(error)}`);
6429
6464
  }
6430
6465
  }
6431
6466
  await flushEvents(data.teams ?? []);
@@ -8202,7 +8237,7 @@ async function startDaemon() {
8202
8237
  }
8203
8238
  const model = sanitizeResumeModel(options?.model);
8204
8239
  if (model) args.push("--model", model);
8205
- const permissionMode = spawnAgents.sanitizeSpawnPermissionMode(options?.permissionMode);
8240
+ const permissionMode = spawnAgents.sanitizeSpawnPermissionMode(options?.permissionMode ?? (options?.keepPublishedPermissionMode ? publishedRelaunchPermissionMode(metadata) : void 0));
8206
8241
  if (permissionMode) args.push("--permission-mode", permissionMode);
8207
8242
  restartCounts.set(happySessionId, recordRestartAttempt(prior));
8208
8243
  const teamEnv = await teamRelaunchEnvFor(happySessionId, metadata);
@@ -8361,6 +8396,8 @@ async function startDaemon() {
8361
8396
  spawnSession,
8362
8397
  resumeSession,
8363
8398
  // B-501: `very-happy send --resume`
8399
+ restartSession,
8400
+ // B-794: `very-happy session provider`
8364
8401
  requestShutdown: () => requestShutdown("happy-cli"),
8365
8402
  onHappySessionWebhook,
8366
8403
  onSessionStateEvent,
@@ -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-DQRy5PaT.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-C3Anki4S.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-IVdoHUB6.mjs';
3
+ import { P as PI_ADAPTER_INSTALL_HINT, s as sanitizeSpawnModel } from './piRunnerArgs-K0K9Y0Yq.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
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
9
  import { join, isAbsolute, resolve, dirname, sep, basename } from 'node:path';
10
- import { f as ensurePrivateDirectorySync, w as writePrivateFileSync, c as configuration } from './configuration-elzht62L.mjs';
11
- import { T as TurnActivityTracker, A as ApiClient } from './api-C29WLYkW.mjs';
12
- import { S as SPAWN_AGENTS, i as isSpawnAgent, s as sanitizeSpawnPermissionMode, r as resolveSpawnPermissionMode, a as resolveFirstMessageMeta, j as joinProject } from './spawnAgents-DJHjq01u.mjs';
13
- import { l as logger } from './logger-RMPh5aqe.mjs';
14
- import { p as pruneStaleCompileCaches } from './index-CtwqBeH6.mjs';
15
- import { a as authAndSetupMachineIfNeeded } from './auth-xT70IYMx.mjs';
10
+ import { f as ensurePrivateDirectorySync, w as writePrivateFileSync, c as configuration } from './configuration-HPdj5Til.mjs';
11
+ import { T as TurnActivityTracker, A as ApiClient } from './api-BTS8mqLy.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-BjXkscIr.mjs';
14
+ import { p as pruneStaleCompileCaches } from './index-DRWlaLbe.mjs';
15
+ import { a as authAndSetupMachineIfNeeded } from './auth-BKD2U9S2.mjs';
16
16
  import { spawn, execSync } from 'child_process';
17
- import { p as packageJson } from './package-CTrz6U3C.mjs';
18
- import { a as globalPrefixForPackage, N as NPM_SAFE_ARG, g as getEnvironmentInfo } from './doctor-Dban2oE2.mjs';
19
- import { s as spawnHappyCLI } from './spawnHappyCLI-v_bJwZ4Z.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-zJo4r7YI.mjs';
21
- import { i as isDaemonRunningCurrentlyInstalledHappyVersion, s as stopDaemon, t as cleanupDaemonState } from './controlClient-CuYQs2aZ.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-ByVggB_q.mjs';
17
+ import { p as packageJson } from './package-Do0Y9bGA.mjs';
18
+ import { a as globalPrefixForPackage, N as NPM_SAFE_ARG, g as getEnvironmentInfo } from './doctor-DpWtxNeT.mjs';
19
+ import { s as spawnHappyCLI } from './spawnHappyCLI-e9MaJWB0.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-CmVwM5uq.mjs';
21
+ import { i as isDaemonRunningCurrentlyInstalledHappyVersion, s as stopDaemon, u as cleanupDaemonState } from './controlClient-DBylxaEh.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-BO6AesNJ.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-HlHATOQ0.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-DIPOX033.mjs';
30
+ import { b as sanitizeRateLimitReport } from './rateLimitWindows-D9mQRGHv.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-CL7zBxlC.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-Cwrddscy.mjs';
34
- import { assistantHome, bootstrapAssistantHome } from './bootstrap-DS8Acdhm.mjs';
35
- import { refreshAgentHomes, locateClaudeConversation, agentHomeSpawnEnv } from './index-GkkbUZX-.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-DHWfDMHA.mjs';
34
+ import { assistantHome, bootstrapAssistantHome } from './bootstrap-DV4dqeCe.mjs';
35
+ import { refreshAgentHomes, locateClaudeConversation, agentHomeSpawnEnv } from './index-Wf6mKJq9.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-BTUtPRth.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-Ca4Dpy6s.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-CLDGWpTJ.mjs';
46
+ import { buildResumeLaunch } from './handleResumeCommand-DW7Ml1u5.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-BptfFoXM.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
49
  import { access, symlink, readFile, rm, unlink, readlink, lstat, constants, 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-5_zDNdOh.mjs';
52
- import { c as createAutomationsClient, i as isAutomationsUnavailable, d as AutomationsRequestError } from './client-BgHvK7lo.mjs';
51
+ import { P as ProjectsUnsupportedError, c as createProjectsClient } from './client-D2lOnvzs.mjs';
52
+ import { c as createAutomationsClient, i as isAutomationsUnavailable, d as AutomationsRequestError } from './client-Ct1rnpJw.mjs';
53
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';
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-BCDkT_tr.mjs';
57
- import { I as InvalidateSync } from './sync--QUIOuf8.mjs';
56
+ import { s as startFileWatcher } from './startFileWatcher-CvUUesns.mjs';
57
+ import { I as InvalidateSync } from './sync-HPnxI4fz.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-CXOOX-VD.mjs';
60
+ import { p as processIdentityFields, r as readSessionLock, t as terminateProcess, d as terminateProcessTree } from './sessionLock-YMRCi-Ec.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-D1fm22em.mjs';
64
+ import { b as clipText, r as renderAction, c as clipAutomationReport, e as renderTemplate } from './template-YlpbYGeQ.mjs';
65
65
  import { d as describeAgentHome } from './loginShellEnv-Dw8M7tkI.mjs';
66
- import './acpSessionResume-BKtI9Jq_.mjs';
67
- import './lidState-DXeYTsrm.mjs';
66
+ import './acpSessionResume-_2NtETqb.mjs';
67
+ import './lidState-CG9jFcML.mjs';
68
68
  import 'node:events';
69
69
  import 'socket.io-client';
70
- import './pushNotifications-C4R9-1hU.mjs';
70
+ import './pushNotifications-DnpJJ7VR.mjs';
71
71
  import './contentLogMetadata-BlWI0egu.mjs';
72
72
  import './limits-DIo7rEBR.mjs';
73
- import './time-B2KKdAym.mjs';
74
- import './registerCommonHandlers-a9lHojSV.mjs';
73
+ import './time-BbJ-NWcl.mjs';
74
+ import './registerCommonHandlers-DpBxSCBi.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-1j9gdZoD.mjs';
81
+ import './browser-C0xt1NE-.mjs';
82
82
  import 'open';
83
83
  import './ids-DU6sLx4C.mjs';
84
84
  import 'url';
85
- import './localHappyAgentAuth-C1A4ChCR.mjs';
85
+ import './localHappyAgentAuth-CWha8BiX.mjs';
86
86
  import './processTreeSnapshot-CuLJDNC-.mjs';
87
87
  import 'ps-list';
88
88
 
@@ -572,6 +572,7 @@ function startDaemonControlServer({
572
572
  stopSession,
573
573
  spawnSession,
574
574
  resumeSession,
575
+ restartSession,
575
576
  requestShutdown,
576
577
  onHappySessionWebhook,
577
578
  onSessionStateEvent,
@@ -868,6 +869,34 @@ function startDaemonControlServer({
868
869
  return { success: false, error: result.errorMessage };
869
870
  }
870
871
  });
872
+ typed.post("/restart-session", {
873
+ schema: {
874
+ body: z.object({ sessionId: z.string().min(1).max(200) }),
875
+ response: {
876
+ 200: z.object({ success: z.boolean(), sessionId: z.string().optional(), error: z.string().optional() }),
877
+ 500: z.object({ success: z.boolean(), error: z.string().optional() }),
878
+ 503: z.object({ success: z.boolean(), error: z.string().optional() })
879
+ }
880
+ }
881
+ }, async (request, reply) => {
882
+ const { sessionId } = request.body;
883
+ if (!restartSession) {
884
+ reply.code(503);
885
+ return { success: false, error: "daemon is still starting up" };
886
+ }
887
+ logger.debug(`[CONTROL SERVER] Restart session request: ${sessionId}`);
888
+ const result = await restartSession(sessionId, { keepPublishedPermissionMode: true });
889
+ switch (result.type) {
890
+ case "success":
891
+ return { success: true, sessionId: result.sessionId };
892
+ case "requestToApproveDirectoryCreation":
893
+ reply.code(500);
894
+ return { success: false, error: `Cannot restart: working directory ${result.directory} needs to be created first` };
895
+ case "error":
896
+ reply.code(500);
897
+ return { success: false, error: result.errorMessage };
898
+ }
899
+ });
871
900
  typed.post("/terminal-hook", {
872
901
  schema: {
873
902
  body: z.any(),
@@ -6167,6 +6196,10 @@ async function removeTeamWorktree(resource) {
6167
6196
  if (ownBranch) await git(repository, ["branch", "-D", branch]);
6168
6197
  }
6169
6198
 
6199
+ function refusalCode(error) {
6200
+ const code = axios.isAxiosError(error) ? error.response?.data?.error : void 0;
6201
+ return typeof code === "string" && /^[a-z_]{1,64}$/.test(code) ? ` (${code})` : "";
6202
+ }
6170
6203
  function persistedSpawnMatches(operationId) {
6171
6204
  return Object.entries(readPersistedSessions()).filter(([, entry]) => entry.metadata?.teamOperationId === operationId);
6172
6205
  }
@@ -6201,6 +6234,7 @@ function createTeamWorker(deps) {
6201
6234
  writeReceipt$1(home, receipt);
6202
6235
  }
6203
6236
  if (receipt.phase === "completed") return;
6237
+ let sessionStopped = false;
6204
6238
  try {
6205
6239
  if (op.type === "spawn") {
6206
6240
  if (ownerRetryPending(op, receipt) && (receipt.phase === "prepared" || receipt.phase === "spawning" && persistedSpawnMatches(op.id).length === 0)) {
@@ -6297,10 +6331,11 @@ function createTeamWorker(deps) {
6297
6331
  return;
6298
6332
  }
6299
6333
  const bot = team.bots.find((candidate) => candidate.id === op.botId);
6300
- if (!bot || bot.generation !== op.generation || bot.sessionId !== op.sessionId) throw new Error("Worker binding changed; preserve resources for reconciliation");
6334
+ if (!bot || op.sessionId && bot.transferredTo?.sessionId === op.sessionId) throw new Error("Worker binding changed; preserve resources for reconciliation");
6301
6335
  if (op.sessionId) {
6302
6336
  await deps.stopAndWait(op.sessionId);
6303
6337
  await archiveSession(op.sessionId);
6338
+ sessionStopped = true;
6304
6339
  }
6305
6340
  if (team.archivedAt !== void 0) {
6306
6341
  await complete(op, receipt);
@@ -6323,7 +6358,7 @@ function createTeamWorker(deps) {
6323
6358
  } catch {
6324
6359
  }
6325
6360
  }
6326
- await action(op.teamId, `failure-${op.id}-${receipt.phase}-${createHash("sha256").update(detail).digest("hex").slice(0, 12)}`, { type: "fail-operation", operationId: op.id, machineId: deps.machineId, claimId: receipt.claimId, error: detail.slice(0, 1e3), unknown }).catch(() => {
6361
+ await action(op.teamId, `failure-${op.id}-${receipt.phase}-${createHash("sha256").update(detail).digest("hex").slice(0, 12)}${sessionStopped ? "-stopped" : ""}`, { type: "fail-operation", operationId: op.id, machineId: deps.machineId, claimId: receipt.claimId, error: detail.slice(0, 1e3), unknown, ...sessionStopped ? { sessionStopped: true } : {} }).catch(() => {
6327
6362
  });
6328
6363
  deps.log(`Teams operation ${op.id} ${unknown ? "needs reconciliation" : "will retry"}`);
6329
6364
  }
@@ -6403,8 +6438,8 @@ Use the teams tools to inspect current task state before acting. This message is
6403
6438
  if (closed) break;
6404
6439
  try {
6405
6440
  await execute(op);
6406
- } catch {
6407
- deps.log(`Teams operation ${op.id} remains pending`);
6441
+ } catch (error) {
6442
+ deps.log(`Teams operation ${op.id} remains pending${refusalCode(error)}`);
6408
6443
  }
6409
6444
  }
6410
6445
  await flushEvents(data.teams ?? []);
@@ -8181,7 +8216,7 @@ async function startDaemon() {
8181
8216
  }
8182
8217
  const model = sanitizeResumeModel(options?.model);
8183
8218
  if (model) args.push("--model", model);
8184
- const permissionMode = sanitizeSpawnPermissionMode(options?.permissionMode);
8219
+ const permissionMode = sanitizeSpawnPermissionMode(options?.permissionMode ?? (options?.keepPublishedPermissionMode ? publishedRelaunchPermissionMode(metadata) : void 0));
8185
8220
  if (permissionMode) args.push("--permission-mode", permissionMode);
8186
8221
  restartCounts.set(happySessionId, recordRestartAttempt(prior));
8187
8222
  const teamEnv = await teamRelaunchEnvFor(happySessionId, metadata);
@@ -8340,6 +8375,8 @@ async function startDaemon() {
8340
8375
  spawnSession,
8341
8376
  resumeSession,
8342
8377
  // B-501: `very-happy send --resume`
8378
+ restartSession,
8379
+ // B-794: `very-happy session provider`
8343
8380
  requestShutdown: () => requestShutdown("happy-cli"),
8344
8381
  onHappySessionWebhook,
8345
8382
  onSessionStateEvent,
@@ -1,26 +1,27 @@
1
1
  'use strict';
2
2
 
3
3
  var os = require('node:os');
4
- var sessionLock = require('./sessionLock-BXvFN6uw.cjs');
5
- var persistence = require('./persistence-DZRMUZZS.cjs');
6
- var defaultPermissionMode = require('./defaultPermissionMode-DQmdZZIg.cjs');
4
+ var sessionLock = require('./sessionLock-BTo7Cdbi.cjs');
5
+ var persistence = require('./persistence-CNWBdUH2.cjs');
6
+ var defaultPermissionMode = require('./defaultPermissionMode-DVXkcryy.cjs');
7
7
  var node_crypto = require('node:crypto');
8
- var api = require('./api-xZiqVynF.cjs');
9
- var logger = require('./logger-Cgwz30rK.cjs');
10
- var createSessionMetadata = require('./createSessionMetadata-QfiRx4Tf.cjs');
11
- var _package = require('./package-3aPiSpZj.cjs');
12
- var index = require('./index-Fq-jxjsB.cjs');
8
+ var api = require('./api-BSz8MYte.cjs');
9
+ var logger = require('./logger-CIUMiSLo.cjs');
10
+ var createSessionMetadata = require('./createSessionMetadata-D2Ll7PlQ.cjs');
11
+ var _package = require('./package-CRDjc5vK.cjs');
12
+ var index = require('./index-Ub-5xbcU.cjs');
13
13
  var forkBackfill = require('./forkBackfill-8eLDeS73.cjs');
14
- var configuration = require('./configuration-K3I6yOjZ.cjs');
15
- var controlClient = require('./controlClient-ChqmxgbB.cjs');
16
- var machineMetadata = require('./machineMetadata-BSOGMNRi.cjs');
14
+ var configuration = require('./configuration-CwfmwaLU.cjs');
15
+ var providerBinding = require('./providerBinding-B-Qbx9W2.cjs');
16
+ var controlClient = require('./controlClient-DTMI1aTp.cjs');
17
+ var machineMetadata = require('./machineMetadata-BPlyxzxb.cjs');
17
18
  var projectPath = require('./projectPath-C3ioB4Bu.cjs');
18
19
  var path = require('node:path');
19
- var startupSessionCreate = require('./startupSessionCreate-tBRa_ze8.cjs');
20
+ var startupSessionCreate = require('./startupSessionCreate-B25xTUJ4.cjs');
20
21
  var permissionMode = require('./permissionMode-CrV-XuMs.cjs');
21
22
  var authRelay = require('./authRelay-Dy1qU9td.cjs');
22
23
  var promises = require('node:fs/promises');
23
- var attachmentContent = require('./attachmentContent-COV4LF8k.cjs');
24
+ var attachmentContent = require('./attachmentContent-hkdGP2NV.cjs');
24
25
  var transcriptCursor = require('./transcriptCursor-DcXGLeSc.cjs');
25
26
  var startupPlan = require('./startupPlan-BLMbfQIH.cjs');
26
27
  require('node:fs');
@@ -28,36 +29,36 @@ require('./processTreeSnapshot-mDbnuojn.cjs');
28
29
  require('node:child_process');
29
30
  require('zod');
30
31
  require('axios');
31
- require('./lidState-Bcs5kRHi.cjs');
32
+ require('./lidState-wwiu6M3p.cjs');
32
33
  require('os');
33
34
  require('child_process');
34
35
  require('node:events');
35
36
  require('socket.io-client');
36
- require('./pushNotifications-CgIrYml3.cjs');
37
+ require('./pushNotifications-C651e0ZZ.cjs');
37
38
  require('./contentLogMetadata-ZSFk_NjQ.cjs');
38
39
  require('./limits-C-a7gr04.cjs');
39
- require('./time-CdCotzKU.cjs');
40
- require('./registerCommonHandlers-D1pC83Op.cjs');
40
+ require('./time-BCGGrWp4.cjs');
41
+ require('./registerCommonHandlers-K-BTp2iR.cjs');
41
42
  require('util');
42
43
  require('fs/promises');
43
44
  require('crypto');
44
45
  require('path');
45
46
  require('cross-spawn');
46
47
  require('@paralleldrive/cuid2');
47
- require('./sync-BMDkyo75.cjs');
48
+ require('./sync-DliZ1zZh.cjs');
48
49
  require('./backgroundTaskActivity-CBvUdj39.cjs');
49
50
  require('chalk');
50
51
  require('node:util');
51
52
  require('./detectCLI-BuYR_Qxe.cjs');
52
53
  require('fs');
53
- require('./localHappyAgentAuth-CypTSe42.cjs');
54
+ require('./localHappyAgentAuth-UoytSUX0.cjs');
54
55
  require('tweetnacl');
55
56
  require('./fsMkdir-0K3yENml.cjs');
56
57
  require('url');
57
58
 
58
59
  const DEFAULT_CLAUDE_MODEL = void 0;
59
60
  const DEFAULT_CLAUDE_EFFORT = void 0;
60
- const importRunClaudeDeps = () => Promise.resolve().then(function () { return require('./runClaudeDeps-CTtZ_1mC.cjs'); });
61
+ const importRunClaudeDeps = () => Promise.resolve().then(function () { return require('./runClaudeDeps-CN_moqup.cjs'); });
61
62
  async function runClaude(credentials, options = {}) {
62
63
  logger.logger.debug(`[CLAUDE] ===== CLAUDE MODE STARTING =====`);
63
64
  logger.logger.debug(`[CLAUDE] This is the Claude agent, NOT Gemini`);
@@ -71,7 +72,7 @@ async function runClaude(credentials, options = {}) {
71
72
  const isAssistantVariant = process.env.HAPPY_SESSION_VARIANT === "assistant";
72
73
  if (isAssistantVariant) {
73
74
  try {
74
- const { bootstrapAssistantHome } = await Promise.resolve().then(function () { return require('./bootstrap-C50NkfPx.cjs'); });
75
+ const { bootstrapAssistantHome } = await Promise.resolve().then(function () { return require('./bootstrap-DIMkxIbR.cjs'); });
75
76
  await bootstrapAssistantHome();
76
77
  } catch (error) {
77
78
  logger.logger.debug("[START] Assistant home bootstrap failed:", error);
@@ -191,7 +192,7 @@ async function runClaude(credentials, options = {}) {
191
192
  }
192
193
  if (!response) {
193
194
  let offlineSessionId = null;
194
- const { claudeLocal } = await Promise.resolve().then(function () { return require('./claudeLocal-CgNWpepB.cjs'); });
195
+ const { claudeLocal } = await Promise.resolve().then(function () { return require('./claudeLocal-Curd8-dn.cjs'); });
195
196
  const { createSessionScanner: createSessionScanner2 } = await loadDeps();
196
197
  const reconnection = api.startOfflineReconnection({
197
198
  serverUrl: configuration.configuration.serverUrl,
@@ -427,6 +428,20 @@ async function runClaude(credentials, options = {}) {
427
428
  }
428
429
  });
429
430
  options = { ...options, claudeEnvVars: { ...options.claudeEnvVars, VH_PEER_SESSION_ID: response.id } };
431
+ let providerPinnedModel;
432
+ try {
433
+ const provider = providerBinding.loadSessionProvider(configuration.configuration.happyHomeDir, response.id);
434
+ if (provider) {
435
+ providerBinding.applyProviderEnv(process.env, provider);
436
+ options = { ...options, model: provider.model };
437
+ providerPinnedModel = provider.model;
438
+ logger.logger.debug(`[START] B-794 provider binding: profile=${provider.profile} model=${provider.model} baseUrl=${provider.baseUrl}`);
439
+ }
440
+ } catch (error) {
441
+ const reason = error instanceof Error ? error.message : String(error);
442
+ logger.logger.debug(`[START] B-794 provider binding failed: ${reason}`);
443
+ session.sendSessionEvent({ type: "message", message: `Provider binding ignored: ${reason}` });
444
+ }
430
445
  const initialScannerSessionId = forkClaudeSessionId ?? (metadata.claudeSessionId ?? null);
431
446
  const transcriptPathHints = new transcriptCursor.TranscriptPathHints();
432
447
  const remoteScanner = await createSessionScanner({
@@ -579,7 +594,7 @@ async function runClaude(credentials, options = {}) {
579
594
  claudeArgs: options.claudeArgs,
580
595
  setting: settings?.claudePrewarm
581
596
  };
582
- const prewarmCtx = () => ({ sandboxEnabled, isAssistantVariant, staleModeSnapshot: false });
597
+ const prewarmCtx = () => ({ sandboxEnabled, isAssistantVariant, staleModeSnapshot: false, pinnedModel: providerPinnedModel });
583
598
  const predictFirstMessageMode = () => prewarmCache ? resolveMessageMode(currentModeState(), prewarmPredictionMeta(prewarmCache), prewarmCtx()).mode : null;
584
599
  let firstMessageScored = false;
585
600
  const scoreFirstMessage = (meta, predicted, actual) => {
@@ -681,7 +696,7 @@ async function runClaude(credentials, options = {}) {
681
696
  }
682
697
  const previousPermissionMode = currentPermissionMode;
683
698
  const predictedFirstMode = firstMessageScored ? null : predictFirstMessageMode();
684
- const resolved = resolveMessageMode(currentModeState(), message.meta, { sandboxEnabled, isAssistantVariant, staleModeSnapshot });
699
+ const resolved = resolveMessageMode(currentModeState(), message.meta, { sandboxEnabled, isAssistantVariant, staleModeSnapshot, pinnedModel: providerPinnedModel });
685
700
  if ("publishPermissionMode" in resolved) {
686
701
  publishPermissionMode(resolved.publishPermissionMode);
687
702
  const ignoredDefaultDowngrade = (previousPermissionMode === "bypassPermissions" || previousPermissionMode === "yolo") && message.meta?.permissionMode === "default" && currentPermissionMode === previousPermissionMode;