very-happy-cli 0.2.203 → 0.2.205

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 (222) hide show
  1. package/dist/{AcpBackend-CAMuhS0Z.mjs → AcpBackend-BqkDMgcN.mjs} +3 -3
  2. package/dist/{AcpBackend-DReFgpYD.cjs → AcpBackend-Do37yiZg.cjs} +3 -3
  3. package/dist/{AcpSessionManager-BZKM-sCt.cjs → AcpSessionManager-BpQKu2_m.cjs} +2 -2
  4. package/dist/{AcpSessionManager-CJOxMFCF.mjs → AcpSessionManager-CvEO7Yex.mjs} +2 -2
  5. package/dist/{BasePermissionHandler-BgX73mQ5.mjs → BasePermissionHandler-BpaIn9ko.mjs} +1 -1
  6. package/dist/{BasePermissionHandler-BBR9Gkob.cjs → BasePermissionHandler-CUXi-tq4.cjs} +1 -1
  7. package/dist/{account-hy0rztXY.mjs → account-C1nsl3ij.mjs} +11 -11
  8. package/dist/{account-41PkJ9nx.cjs → account-SwG5Yefp.cjs} +11 -11
  9. package/dist/{accountService-DEpIq6CF.mjs → accountService-CqrWNH8K.mjs} +4 -4
  10. package/dist/{accountService-Cns8UYGI.cjs → accountService-SOeB_21A.cjs} +4 -4
  11. package/dist/{acpSessionResume-DmOPXKpC.cjs → acpSessionResume-BCEol11N.cjs} +1 -1
  12. package/dist/{acpSessionResume-5El4xksf.mjs → acpSessionResume-DvDKsJTV.mjs} +1 -1
  13. package/dist/{agentHome-BXaVMqHX.cjs → agentHome-8wzmbm0H.cjs} +4 -4
  14. package/dist/{agentHome-DUxArmak.mjs → agentHome-BuFxooEg.mjs} +4 -4
  15. package/dist/{api-D8ZDxBWw.mjs → api-20GbdpxY.mjs} +107 -18
  16. package/dist/{api-ChhFBuB0.cjs → api-BnTF8fkj.cjs} +107 -18
  17. package/dist/{apiMachine-qav2pnk5.mjs → apiMachine-C8NGJHHd.mjs} +105 -21
  18. package/dist/{apiMachine-MPwddFXq.cjs → apiMachine-cyDRM_S-.cjs} +105 -21
  19. package/dist/{attachmentContent-f5gwnv9J.cjs → attachmentContent-B7zz_LPF.cjs} +2 -2
  20. package/dist/{attachmentContent-BfSQxccA.mjs → attachmentContent-Coo9lUxK.mjs} +2 -2
  21. package/dist/{auth-BxNuFv_0.mjs → auth-75rP3vc0.mjs} +8 -8
  22. package/dist/{auth-xW7SDE_7.mjs → auth-BX6xrdHv.mjs} +5 -5
  23. package/dist/{auth-thi2T_T8.cjs → auth-By6u_iKB.cjs} +5 -5
  24. package/dist/{auth-DkPAHXLj.cjs → auth-w4UTRbIf.cjs} +8 -8
  25. package/dist/{auto-DmXTwayU.mjs → auto-BhmWtRvv.mjs} +18 -18
  26. package/dist/{auto-BiRlQ4tm.cjs → auto-xr_gqUoy.cjs} +18 -18
  27. package/dist/{bootstrap-EGhaCmXy.cjs → bootstrap-3ti7LXMz.cjs} +2 -2
  28. package/dist/{bootstrap-pGaFGbWO.mjs → bootstrap-Dn_VvHSt.mjs} +2 -2
  29. package/dist/{browser-DSxpOnPb.cjs → browser-C4PVyjGe.cjs} +1 -1
  30. package/dist/{browser-BYSYzXvP.mjs → browser-C4wWGXH7.mjs} +1 -1
  31. package/dist/{claudeAccountEnv-Btp39mfa.cjs → claudeAccountEnv-BTZjHTpF.cjs} +1 -1
  32. package/dist/{claudeAccountEnv-DowsOlDB.mjs → claudeAccountEnv-C6Wl-ZbT.mjs} +1 -1
  33. package/dist/{claudeLocal-bDarWqaU.mjs → claudeLocal-B8rOA-EB.mjs} +5 -5
  34. package/dist/{claudeLocal-ClqHmkk6.cjs → claudeLocal-DZALKVVc.cjs} +5 -5
  35. package/dist/{claudeLocalLauncher-Bxi0_eW9.cjs → claudeLocalLauncher-Bf5uj0EA.cjs} +10 -10
  36. package/dist/{claudeLocalLauncher-Ccpj2KgW.mjs → claudeLocalLauncher-CJPRSv3z.mjs} +10 -10
  37. package/dist/claudeLongContext-BR_zdjUp.cjs +239 -0
  38. package/dist/claudeLongContext-CZ60xo5p.mjs +219 -0
  39. package/dist/{claudeSessionFork-Cize0Y2T.mjs → claudeSessionFork-BK4U655i.mjs} +1 -1
  40. package/dist/{claudeSessionFork-nyNFjgaf.cjs → claudeSessionFork-unEBLW0t.cjs} +1 -1
  41. package/dist/{client-Cddb1dhi.cjs → client-BKjBr6pc.cjs} +2 -2
  42. package/dist/{client-Wr_BiOon.mjs → client-BbYds4AV.mjs} +16 -7
  43. package/dist/{client-CMKgB-76.cjs → client-Bh-y6cVc.cjs} +16 -7
  44. package/dist/{client-DO8DNDC3.mjs → client-BxtaglBR.mjs} +2 -2
  45. package/dist/{client-CgMVIP7v.mjs → client-CvLm25Wq.mjs} +2 -2
  46. package/dist/{client-6Y6O72Uq.cjs → client-DGsdLx8L.cjs} +2 -2
  47. package/dist/{client-CX8kRedW.mjs → client-m-K1b6Qa.mjs} +3 -3
  48. package/dist/{client-DP8FabOE.cjs → client-wMlUPnrV.cjs} +3 -3
  49. package/dist/codex/happyMcpStdioBridge.cjs +20 -19
  50. package/dist/codex/happyMcpStdioBridge.mjs +20 -19
  51. package/dist/{codexAccount-CieIQLOX.mjs → codexAccount-BPQ-lPhH.mjs} +1 -1
  52. package/dist/{codexAccount-D-OBY29W.cjs → codexAccount-BjaHvmKH.cjs} +1 -1
  53. package/dist/{codexAppServerClient-EzrHWYhX.cjs → codexAppServerClient-6aQelpRl.cjs} +3 -3
  54. package/dist/{codexAppServerClient-D-cD2Dfj.mjs → codexAppServerClient-BeRimnu9.mjs} +3 -3
  55. package/dist/{codexCommand-BMcXtvU3.cjs → codexCommand-CYVaGmhh.cjs} +67 -56
  56. package/dist/{codexCommand-D79GnRhB.mjs → codexCommand-CmGNDs45.mjs} +67 -56
  57. package/dist/{codexTermination-CF6xiFbb.cjs → codexTermination-B09HyYIB.cjs} +1 -1
  58. package/dist/{codexTermination-CK1MYJT7.mjs → codexTermination-Z18pGkkl.mjs} +1 -1
  59. package/dist/{config-Crn1mNgr.mjs → config-4b-sF37g.mjs} +3 -3
  60. package/dist/{config-F6zSRyk2.cjs → config-Dq_N615Z.cjs} +3 -3
  61. package/dist/{configuration-Cl9kOv09.cjs → configuration-Fx61b4MJ.cjs} +1 -1
  62. package/dist/{configuration-i9MVy0a5.mjs → configuration-H8q1sMwk.mjs} +1 -1
  63. package/dist/{connect-CiA13Xm4.mjs → connect-BwSwKPzI.mjs} +13 -13
  64. package/dist/{connect-ClklWmnI.cjs → connect-D54AnDIT.cjs} +13 -13
  65. package/dist/{context-DvdZsGgl.mjs → context-CM1Xd_HO.mjs} +1 -1
  66. package/dist/{context-BxODP3mG.cjs → context-D-QOcYuX.cjs} +1 -1
  67. package/dist/{controlClient-DxCQKfqe.cjs → controlClient-D04wXKoQ.cjs} +12 -3
  68. package/dist/{controlClient-D6vqMUfi.mjs → controlClient-D9DYqW02.mjs} +12 -4
  69. package/dist/{createSessionMetadata-BuAVB-xI.mjs → createSessionMetadata-CHa4pufa.mjs} +2 -2
  70. package/dist/{createSessionMetadata-B_NZvmhm.cjs → createSessionMetadata-Ce539QXK.cjs} +2 -2
  71. package/dist/{daemonAccounts-ciidbU2h.cjs → daemonAccounts-BOoI7-sw.cjs} +2 -2
  72. package/dist/{daemonAccounts-D5shoCLt.mjs → daemonAccounts-BtkmoJmC.mjs} +3 -3
  73. package/dist/{defaultPermissionMode-DgeiMMqy.mjs → defaultPermissionMode-CYQi7vqJ.mjs} +1 -1
  74. package/dist/{defaultPermissionMode-Cs_Tv83b.cjs → defaultPermissionMode-DmLYaaL8.cjs} +1 -1
  75. package/dist/{deterministicJson-B9XrEawW.mjs → deterministicJson-BEeXnWCF.mjs} +62 -20
  76. package/dist/{deterministicJson-kM2OdGZu.cjs → deterministicJson-D34CnNHO.cjs} +61 -19
  77. package/dist/{doctor-HHS4YegX.mjs → doctor-BI0Iywt_.mjs} +7 -7
  78. package/dist/{doctor-DiPRqsqg.cjs → doctor-BX8oWKZq.cjs} +7 -7
  79. package/dist/{downloadTarget-Cd8hx54t.mjs → downloadTarget-DX3m00OE.mjs} +6 -6
  80. package/dist/{downloadTarget-osB-mGh0.cjs → downloadTarget-TzXJEh6W.cjs} +6 -6
  81. package/dist/{ensureDaemonRunning-C0iDtuL7.mjs → ensureDaemonRunning-BBBqZ6vQ.mjs} +5 -5
  82. package/dist/{ensureDaemonRunning-CtBvPHVB.cjs → ensureDaemonRunning-Bvu-yyFn.cjs} +5 -5
  83. package/dist/exitNotice-M4UjtWkr.cjs +95 -0
  84. package/dist/exitNotice-gOAdDcL3.mjs +84 -0
  85. package/dist/{forkBackfill-DYIjlN1Z.mjs → forkBackfill-C9EfJ64O.mjs} +28 -2
  86. package/dist/{forkBackfill-8eLDeS73.cjs → forkBackfill-D2WW91fz.cjs} +28 -1
  87. package/dist/{format-B5V7ie8N.cjs → format-BEktLc45.cjs} +1 -1
  88. package/dist/{format-Dc5zMslz.mjs → format-BPAREVhi.mjs} +1 -1
  89. package/dist/{handleResumeCommand-vcD2qcAM.cjs → handleResumeCommand-6dYW_WOi.cjs} +5 -5
  90. package/dist/{handleResumeCommand-xrOAA1qI.mjs → handleResumeCommand-DziiqogX.mjs} +5 -5
  91. package/dist/{index-iFVMrlPo.mjs → index-BRq5iitn.mjs} +4 -4
  92. package/dist/{index-44o_qMvE.cjs → index-BYL_X3gP.cjs} +27 -6
  93. package/dist/{index-AyDwQ6FG.cjs → index-BmacwzcK.cjs} +45 -44
  94. package/dist/{index-D0rCXp-e.cjs → index-Cawt-fgZ.cjs} +4 -4
  95. package/dist/{index-C_ePuQwB.cjs → index-CoW4RNEb.cjs} +3 -3
  96. package/dist/{index-B7pKBIcn.mjs → index-CzBvl9py.mjs} +3 -3
  97. package/dist/{index-DIKJMfs2.mjs → index-DCvq8Cfw.mjs} +4 -4
  98. package/dist/{index-CiRMvS73.mjs → index-DWk-WTU-.mjs} +24 -7
  99. package/dist/{index-B7CXMlrz.mjs → index-UuWDafdi.mjs} +46 -45
  100. package/dist/{index-Cl-WkB_6.cjs → index-bVMcFi7v.cjs} +4 -4
  101. package/dist/index.cjs +2 -2
  102. package/dist/index.mjs +2 -2
  103. package/dist/{install-yqS4y1cm.mjs → install-B4OVUIw5.mjs} +3 -3
  104. package/dist/{install-BgBgsOlS.cjs → install-BQc4Hwuo.cjs} +3 -3
  105. package/dist/{issue-D7liK6bR.cjs → issue-WpLZYxUQ.cjs} +8 -8
  106. package/dist/{issue-aKZd7J55.mjs → issue-h_BIrzLs.mjs} +8 -8
  107. package/dist/lib.cjs +12 -12
  108. package/dist/lib.d.cts +42 -1
  109. package/dist/lib.d.mts +42 -1
  110. package/dist/lib.mjs +12 -12
  111. package/dist/{localHappyAgentAuth-Dm9obisi.cjs → localHappyAgentAuth-DQRWBUxQ.cjs} +1 -1
  112. package/dist/{localHappyAgentAuth-B2JJxlE9.mjs → localHappyAgentAuth-DgLh3xzW.mjs} +1 -1
  113. package/dist/{logger-BiKmiREe.mjs → logger-BKAKIZdy.mjs} +2 -2
  114. package/dist/{logger-BtWBoP60.cjs → logger-DP35yx-C.cjs} +2 -2
  115. package/dist/{machineMetadata-C0-LyMsb.cjs → machineMetadata-CZj0XwM_.cjs} +3 -3
  116. package/dist/{machineMetadata-CiyO9wm-.mjs → machineMetadata-DTlMMhj_.mjs} +3 -3
  117. package/dist/{main-BP2TBnp5.mjs → main-BIE1zeaH.mjs} +48 -48
  118. package/dist/{main-C7hKf5hG.cjs → main-l_nP9IQq.cjs} +48 -48
  119. package/dist/{mcp-Cn4k-PXb.mjs → mcp-B5F6-_7o.mjs} +20 -18
  120. package/dist/{mcp-DO00rr9n.cjs → mcp-KQHODyR3.cjs} +20 -18
  121. package/dist/{mirrorProtocol-DDtEN49F.mjs → mirrorProtocol-DDOUSWqL.mjs} +3 -3
  122. package/dist/{mirrorProtocol-DwO8QgLM.cjs → mirrorProtocol-duXHJeBW.cjs} +3 -3
  123. package/dist/{package-Djdgx8nb.cjs → package-BCJfNMlt.cjs} +7 -7
  124. package/dist/{package-CIW5lwaN.mjs → package-CMmhJwSf.mjs} +7 -7
  125. package/dist/{panels-BpfVEvwF.mjs → panels-BWxZMb_x.mjs} +5 -5
  126. package/dist/{panels-DMLtEOtJ.cjs → panels-CBlIJIu8.cjs} +5 -5
  127. package/dist/{peerTools-fYuKq3ev.cjs → peerTools-C6Y28jqG.cjs} +5 -5
  128. package/dist/{peerTools-CQ60fUPp.mjs → peerTools-ZJzoM48N.mjs} +5 -5
  129. package/dist/{persistence-D_zVC4Xz.mjs → persistence-dLgWDclq.mjs} +2 -2
  130. package/dist/{persistence-BOEZtiKb.cjs → persistence-iiVFxhbt.cjs} +2 -2
  131. package/dist/{piRunnerArgs-DE_YXvS1.mjs → piRunnerArgs-DuWYye4f.mjs} +1 -1
  132. package/dist/{piRunnerArgs-Dz9P62db.cjs → piRunnerArgs-DxWxgOSZ.cjs} +1 -1
  133. package/dist/{piRuntime-Du62fjeU.cjs → piRuntime-6UnkPaS1.cjs} +1 -1
  134. package/dist/{piRuntime-8SbpRmNA.mjs → piRuntime-Cbwk6bN0.mjs} +1 -1
  135. package/dist/{piTerminal-CGAw7WDW.cjs → piTerminal-BaoUqlM0.cjs} +22 -20
  136. package/dist/{piTerminal-Cl45kac0.mjs → piTerminal-Dn0qN9nb.mjs} +22 -20
  137. package/dist/{pushNotifications-RVpbqrxR.mjs → pushNotifications-DD9Z0CoN.mjs} +17 -3
  138. package/dist/{pushNotifications-B19lT5mY.cjs → pushNotifications-gcQv61e6.cjs} +17 -3
  139. package/dist/{query-CNWdX2r5.cjs → query-12momZSq.cjs} +1 -1
  140. package/dist/{query-DBRR3TOO.mjs → query-CFdlRD7b.mjs} +1 -1
  141. package/dist/{rateLimitWindows-DX5y23x_.mjs → rateLimitWindows-CVS-btq-.mjs} +1 -1
  142. package/dist/{rateLimitWindows-mfdokrkQ.cjs → rateLimitWindows-D2Gmg7jU.cjs} +1 -1
  143. package/dist/{reconnectGate-B8ltzSJD.cjs → reconnectGate-BkSaZdIx.cjs} +1 -1
  144. package/dist/{reconnectGate-DSxYUCWy.mjs → reconnectGate-m81ySKhh.mjs} +1 -1
  145. package/dist/{registerCommonHandlers-Y2siJGwL.cjs → registerCommonHandlers-B5p3ZZmp.cjs} +2 -2
  146. package/dist/{registerCommonHandlers-CQDRKlkG.mjs → registerCommonHandlers-CqLHkmG2.mjs} +2 -2
  147. package/dist/{registerKillSessionHandler-B0pMZOdH.cjs → registerKillSessionHandler-Bf_Q9yii.cjs} +6 -6
  148. package/dist/{registerKillSessionHandler-U4Dxtohy.mjs → registerKillSessionHandler-jYSuGIP1.mjs} +6 -6
  149. package/dist/{registerSideQuestionHandler-DM1QqTxf.mjs → registerSideQuestionHandler-CPR29B9d.mjs} +4 -4
  150. package/dist/{registerSideQuestionHandler--ruKhCdY.cjs → registerSideQuestionHandler-DSIw3xPW.cjs} +4 -4
  151. package/dist/{remoteSessionClient-T-Raoiy6.mjs → remoteSessionClient-CLuxs0_y.mjs} +5 -5
  152. package/dist/{remoteSessionClient-CjINaEs_.cjs → remoteSessionClient-DX-60nto.cjs} +5 -5
  153. package/dist/{reportProgressTool-DDfL1OY7.cjs → reportProgressTool-D1XAxeY1.cjs} +5 -5
  154. package/dist/{reportProgressTool-Stg0xrjF.mjs → reportProgressTool-k3g3D6cX.mjs} +5 -5
  155. package/dist/{run-Dq48xBtw.mjs → run-BBJqaIoY.mjs} +200 -55
  156. package/dist/{run-BoSVfVCZ.cjs → run-DOb_agpA.cjs} +200 -55
  157. package/dist/{runClaude-D8ScJdJU.cjs → runClaude-BU3Lrd5o.cjs} +53 -38
  158. package/dist/{runClaude-CJe5atrS.mjs → runClaude-NTvReMNp.mjs} +44 -29
  159. package/dist/{runClaudeDeps-4RFRR4cY.cjs → runClaudeDeps-DQV-QdDi.cjs} +129 -61
  160. package/dist/{runClaudeDeps-CL3goCXG.mjs → runClaudeDeps-Dh2LVY2w.mjs} +125 -57
  161. package/dist/{runGemini-DZv6jPxV.mjs → runGemini-CGD4bqQ3.mjs} +36 -35
  162. package/dist/{runGemini-BcbNxgsA.cjs → runGemini-dk877ztP.cjs} +36 -35
  163. package/dist/{runOpenClaw-CRqCoj-_.mjs → runOpenClaw-6MAJ_tHi.mjs} +18 -18
  164. package/dist/{runOpenClaw-BeSivE0X.cjs → runOpenClaw-CQakHPPq.cjs} +18 -18
  165. package/dist/{sandbox-xflHChws.cjs → sandbox-8DeDre0R.cjs} +4 -4
  166. package/dist/{sandbox-DAvJJZcV.mjs → sandbox-B3YMD9I6.mjs} +4 -4
  167. package/dist/selfCheck-BCKIF6ST.mjs +89 -0
  168. package/dist/{selfCheck-DZwdgBg0.cjs → selfCheck-BpvUNBmv.cjs} +40 -40
  169. package/dist/{send-ConAuYqL.cjs → send-Bym_IU4n.cjs} +8 -8
  170. package/dist/{send-Co_l_Nmg.mjs → send-DgrbVZzC.mjs} +8 -8
  171. package/dist/{server-by6kezmM.cjs → server-BY-FubRe.cjs} +6 -6
  172. package/dist/{server-D1Qrmxl7.mjs → server-CmAgeEhS.mjs} +4 -4
  173. package/dist/{sessionLock-DFrwAnwR.mjs → sessionLock-BMtAQ4bW.mjs} +21 -4
  174. package/dist/{sessionLock-Db_uQcUP.cjs → sessionLock-WXtjQC9q.cjs} +22 -3
  175. package/dist/{sessionOps-CptDjoZi.cjs → sessionOps-BEVzE38e.cjs} +4 -4
  176. package/dist/{sessionOps-C7nps7qG.mjs → sessionOps-BxLhHEhM.mjs} +4 -4
  177. package/dist/{sessionProvider-BaJq1AnY.mjs → sessionProvider-B1tL5K5f.mjs} +10 -10
  178. package/dist/{sessionProvider-D9nsAE14.cjs → sessionProvider-DCnZFxwe.cjs} +10 -10
  179. package/dist/{sessionScanner-BOb33NVJ.mjs → sessionScanner-Ctm9w-AJ.mjs} +3 -3
  180. package/dist/{sessionScanner-C6OVO0Ne.cjs → sessionScanner-eX2f-j0u.cjs} +3 -3
  181. package/dist/{sessions-qVHDXJa6.cjs → sessions-BG8r7uht.cjs} +10 -10
  182. package/dist/{sessions-GCql_3Dl.mjs → sessions-BuxOqRcc.mjs} +10 -10
  183. package/dist/{setupOfflineReconnection-B8QKqc9a.cjs → setupOfflineReconnection-65k1yEFn.cjs} +2 -2
  184. package/dist/{setupOfflineReconnection-lu0YbS7m.mjs → setupOfflineReconnection-Dd4NCN9i.mjs} +2 -2
  185. package/dist/{spawn-tL-724RS.cjs → spawn-0YaC-DQg.cjs} +15 -15
  186. package/dist/{spawn-C9NSlg99.mjs → spawn-wys_MPgK.mjs} +15 -15
  187. package/dist/{spawnAgents-BclZYkov.mjs → spawnAgents-CcFKtKdX.mjs} +2 -1
  188. package/dist/{spawnAgents-DvbEDCIq.cjs → spawnAgents-D4lR468W.cjs} +2 -1
  189. package/dist/{spawnHappyCLI-D7EO8s4E.cjs → spawnHappyCLI-Bf_N42fi.cjs} +1 -1
  190. package/dist/{spawnHappyCLI-jXUKLUT5.mjs → spawnHappyCLI-EvPb0jB3.mjs} +1 -1
  191. package/dist/{startFileWatcher-C7eFs4hA.mjs → startFileWatcher-GF4BNFA1.mjs} +1 -1
  192. package/dist/{startFileWatcher-6NpLGxg5.cjs → startFileWatcher-ikipjpDk.cjs} +1 -1
  193. package/dist/{startupSessionCreate-C5wdvraY.cjs → startupSessionCreate-CHU23k6u.cjs} +3 -3
  194. package/dist/{startupSessionCreate-D3ph1DtL.mjs → startupSessionCreate-Dp3_kvi_.mjs} +3 -3
  195. package/dist/{store-Cpb1LMNW.cjs → store-DGMILdMn.cjs} +1 -1
  196. package/dist/{store-DWmjM4Ex.mjs → store-Fge1h9wy.mjs} +1 -1
  197. package/dist/{streamRelay-DdGOsW8v.mjs → streamRelay-MaaYNNuh.mjs} +1 -1
  198. package/dist/{streamRelay-4XiiNB3N.cjs → streamRelay-keuifCPQ.cjs} +1 -1
  199. package/dist/{sync-BIXH8ijr.mjs → sync-Co0wRhGu.mjs} +1 -1
  200. package/dist/{sync-ni64k2OI.cjs → sync-Dm6GaS8P.cjs} +1 -1
  201. package/dist/{systemPrompt-B_vnlIr1.mjs → systemPrompt-5cZbY0sf.mjs} +2 -2
  202. package/dist/{systemPrompt-DuoULaqr.cjs → systemPrompt-Ds7HcfDZ.cjs} +2 -2
  203. package/dist/{teams-CsR_8p3Q.mjs → teams-DBWFUOC3.mjs} +20 -9
  204. package/dist/{teams-DLfcbOMh.cjs → teams-nrcZL-1X.cjs} +20 -9
  205. package/dist/{template-3fV9bi0X.cjs → template-ChUotPTL.cjs} +1 -1
  206. package/dist/{template-CtRLg2PG.mjs → template-D8fzlO58.mjs} +1 -1
  207. package/dist/{time-Che8GhII.mjs → time-Cn0mV-di.mjs} +1 -1
  208. package/dist/{time-BMCY7zJL.cjs → time-NSglRbyr.cjs} +1 -1
  209. package/dist/{titleGenerator-HVEN1e7o.cjs → titleGenerator-CMIUB04_.cjs} +3 -3
  210. package/dist/{titleGenerator-B9LckLDq.mjs → titleGenerator-hmxUR3rU.mjs} +2 -2
  211. package/dist/{todo-bc7db5NN.mjs → todo-CDdBityL.mjs} +8 -8
  212. package/dist/{todo-B8byb_cy.cjs → todo-D5BoNMb7.cjs} +8 -8
  213. package/dist/{tools-BAMaBbbP.mjs → tools-BmQbzAfY.mjs} +1 -1
  214. package/dist/{tools--RN1SFkD.cjs → tools-CLkNfafW.cjs} +1 -1
  215. package/dist/{uninstall-UC0Q8YTj.cjs → uninstall-DCx_qNMZ.cjs} +3 -3
  216. package/dist/{uninstall-Dv4C-W9z.mjs → uninstall-DE0SH2qs.mjs} +3 -3
  217. package/dist/{wrapperAccount-nGGMJDBF.cjs → wrapperAccount-BHMM9I6g.cjs} +2 -2
  218. package/dist/{wrapperAccount-z8Swrd08.mjs → wrapperAccount-CwaA-n1S.mjs} +2 -2
  219. package/package.json +7 -7
  220. package/dist/permissionMode-CH4FoZfU.mjs +0 -80
  221. package/dist/permissionMode-CrV-XuMs.cjs +0 -87
  222. package/dist/selfCheck-BKOIROoJ.mjs +0 -89
@@ -1,6 +1,6 @@
1
- import { i as isClaudeSessionId, h as extractCompleteLines, j as decideBackfill, k as parseTerminalHookPayload, m as decideMirrorBinding, M as MIRROR_BACKFILL_LINES_DEFAULT, n as mirrorLineKey, o as mirrorLocalId, q as initializeOwnedWorktree, f as summarizeSpawnSessionForLog, t as startAgentVersionChecks, W as WORKTREE_CAPABILITY_VERSION, u as currentWorktreeService } from './mirrorProtocol-DDtEN49F.mjs';
1
+ import { i as isClaudeSessionId, h as extractCompleteLines, j as decideBackfill, k as parseTerminalHookPayload, m as decideMirrorBinding, M as MIRROR_BACKFILL_LINES_DEFAULT, n as mirrorLineKey, o as mirrorLocalId, q as initializeOwnedWorktree, f as summarizeSpawnSessionForLog, t as startAgentVersionChecks, W as WORKTREE_CAPABILITY_VERSION, u as currentWorktreeService } from './mirrorProtocol-DDOUSWqL.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-DE_YXvS1.mjs';
3
+ import { P as PI_ADAPTER_INSTALL_HINT, s as sanitizeSpawnModel } from './piRunnerArgs-DuWYye4f.mjs';
4
4
  import fs from 'fs/promises';
5
5
  import os from 'os';
6
6
  import * as tmp from 'tmp';
@@ -8,20 +8,21 @@ import axios from 'axios';
8
8
  import { a as issueRelaunchEnv } from './sessionMetadata-C1eoAi89.mjs';
9
9
  import { readFileSync, openSync, fsyncSync, closeSync, renameSync, existsSync, readdirSync, statSync, unlinkSync, readSync, writeSync, ftruncateSync, utimesSync, realpathSync, promises, constants as constants$1, writeFileSync, mkdirSync, accessSync, rmdirSync } from 'node:fs';
10
10
  import { join, isAbsolute, resolve, dirname, sep, basename, relative } from 'node:path';
11
- import { f as ensurePrivateDirectorySync, w as writePrivateFileSync, c as configuration } from './configuration-i9MVy0a5.mjs';
12
- import { T as TurnActivityTracker, A as ApiClient } from './api-D8ZDxBWw.mjs';
13
- import { S as SPAWN_AGENTS, i as isSpawnAgent, s as sanitizeSpawnPermissionMode, r as resolveSpawnPermissionMode, a as resolveFirstMessageMeta, j as joinProject } from './spawnAgents-BclZYkov.mjs';
14
- import { l as logger } from './logger-BiKmiREe.mjs';
15
- import { p as pruneStaleCompileCaches } from './index-B7pKBIcn.mjs';
16
- import { a as authAndSetupMachineIfNeeded } from './auth-xW7SDE_7.mjs';
11
+ import { f as teamExitMarkerPath, d as detectTeamUserLanguage, g as teamOwnerText, a as teamLanguageRule, c as teamLanguageReminder } from './exitNotice-gOAdDcL3.mjs';
12
+ import { f as ensurePrivateDirectorySync, w as writePrivateFileSync, c as configuration } from './configuration-H8q1sMwk.mjs';
13
+ import { T as TurnActivityTracker, A as ApiClient } from './api-20GbdpxY.mjs';
14
+ import { S as SPAWN_AGENTS, i as isSpawnAgent, s as sanitizeSpawnPermissionMode, r as resolveSpawnPermissionMode, a as resolveFirstMessageMeta, j as joinProject } from './spawnAgents-CcFKtKdX.mjs';
15
+ import { l as logger } from './logger-BKAKIZdy.mjs';
16
+ import { p as pruneStaleCompileCaches } from './index-CzBvl9py.mjs';
17
+ import { a as authAndSetupMachineIfNeeded } from './auth-BX6xrdHv.mjs';
17
18
  import { spawn, execSync } from 'child_process';
18
- import { p as packageJson } from './package-CIW5lwaN.mjs';
19
- import { a as globalPrefixForPackage, N as NPM_SAFE_ARG, g as getEnvironmentInfo } from './doctor-HHS4YegX.mjs';
20
- import { s as spawnHappyCLI } from './spawnHappyCLI-jXUKLUT5.mjs';
21
- import { c as readPersistedSessions, r as readSettings, l as latchKeepAwake, s as reportSignature, t as decideDaemonHibernation, v as nextCheckDelay, x as persistSession, d as readDaemonState, y as acquireDaemonLock, a as resolveCheckMs, z as resolveIdleMs, A as deletePersistedSessions, B as writeDaemonState, C as writeSettings, D as settingIdleMs, u as updateSettings, E as readDaemonStatePidSync, F as rewriteCredentialsForRelay, g as readCredentials, G as releaseDaemonLock } from './persistence-D_zVC4Xz.mjs';
22
- import { i as isDaemonRunningCurrentlyInstalledHappyVersion, s as stopDaemon, w as cleanupDaemonState } from './controlClient-D6vqMUfi.mjs';
23
- import { e as sendUserMessage, f as readSessionMetadata, r as readSessionTranscript, l as listAccountSessions, a as listSessions, M as MAX_READ_LIMIT, s as sessionWebUrl, n as lineageOf, g as waitForSessionKey, d as archiveSession, h as analyzeLatestTurn, i as readSessionLog, j as TURN_WINDOW, p as userPromptText } from './sessionOps-C7nps7qG.mjs';
24
- import { a2 as AgentProfilesStateSchema, an as ServerMigrateNoticeSchema, ao as isHarnessInstallId, ap as agentProfileUnavailableReason, aq as MODEL_INTENT_CONFIG, q as AUTOMATION_SUMMARY_MAX_CHARS, ar as AUTOMATION_PRECHECK_OUTPUT_MAX_CHARS, as as AUTOMATION_PRECHECK_DEFAULT_TIMEOUT_MS, d as AUTOMATION_PRECHECK_MAX_TIMEOUT_MS, at as AUTOMATION_CLAIM_MAX_RUNS, au as AUTOMATION_DAEMON_CAPABILITY_PRECHECK, av as AUTOMATION_DEFAULT_LEASE_MS, i as isAutomationRunTerminal, D as resolveLaunchAgentProfile, aw as ISSUE_SENT_FROM, ax as ISSUE_DISPATCH_LOCAL_ID_PREFIX, f as ISSUE_ASSIGNABLE_AGENTS, ay as HARNESS_INSTALL_CAPABILITY_VERSION } from './index-CiRMvS73.mjs';
19
+ import { p as packageJson } from './package-CMmhJwSf.mjs';
20
+ import { a as globalPrefixForPackage, N as NPM_SAFE_ARG, g as getEnvironmentInfo } from './doctor-BI0Iywt_.mjs';
21
+ import { s as spawnHappyCLI } from './spawnHappyCLI-EvPb0jB3.mjs';
22
+ import { c as readPersistedSessions, r as readSettings, l as latchKeepAwake, s as reportSignature, t as decideDaemonHibernation, v as nextCheckDelay, x as persistSession, d as readDaemonState, y as acquireDaemonLock, a as resolveCheckMs, z as resolveIdleMs, A as deletePersistedSessions, B as writeDaemonState, C as writeSettings, D as settingIdleMs, u as updateSettings, E as readDaemonStatePidSync, F as rewriteCredentialsForRelay, g as readCredentials, G as releaseDaemonLock } from './persistence-dLgWDclq.mjs';
23
+ import { i as isDaemonRunningCurrentlyInstalledHappyVersion, s as stopDaemon, x as cleanupDaemonState } from './controlClient-D9DYqW02.mjs';
24
+ import { e as sendUserMessage, f as readSessionMetadata, r as readSessionTranscript, l as listAccountSessions, a as listSessions, M as MAX_READ_LIMIT, s as sessionWebUrl, n as lineageOf, g as waitForSessionKey, d as archiveSession, h as analyzeLatestTurn, i as readSessionLog, j as TURN_WINDOW, p as userPromptText } from './sessionOps-BxLhHEhM.mjs';
25
+ import { a3 as AgentProfilesStateSchema, ar as ServerMigrateNoticeSchema, as as isHarnessInstallId, at as agentProfileUnavailableReason, au as MODEL_INTENT_CONFIG, q as AUTOMATION_SUMMARY_MAX_CHARS, av as AUTOMATION_PRECHECK_OUTPUT_MAX_CHARS, aw as AUTOMATION_PRECHECK_DEFAULT_TIMEOUT_MS, d as AUTOMATION_PRECHECK_MAX_TIMEOUT_MS, ax as AUTOMATION_CLAIM_MAX_RUNS, ay as AUTOMATION_DAEMON_CAPABILITY_PRECHECK, az as AUTOMATION_DEFAULT_LEASE_MS, i as isAutomationRunTerminal, D as resolveLaunchAgentProfile, aA as ISSUE_SENT_FROM, aB as ISSUE_DISPATCH_LOCAL_ID_PREFIX, f as ISSUE_ASSIGNABLE_AGENTS, aC as HARNESS_INSTALL_CAPABILITY_VERSION } from './index-DWk-WTU-.mjs';
25
26
  import fastify from 'fastify';
26
27
  import { z } from 'zod';
27
28
  import { validatorCompiler, serializerCompiler } from 'fastify-type-provider-zod';
@@ -29,69 +30,70 @@ import { d as decodeBase64, s as sameRelay, e as encodeBase64, h as decrypt } fr
29
30
  import { randomBytes, createHash, timingSafeEqual, randomUUID } from 'node:crypto';
30
31
  import { c as checkPreviewPath } from './previewPath-CXN4Vag0.mjs';
31
32
  import { a as BACKGROUND_TASKS_MAX, d as BACKGROUND_TASK_DESCRIPTION_MAX, e as BackgroundTaskTracker } from './backgroundTaskActivity-8PdPxrvy.mjs';
32
- import { b as sanitizeRateLimitReport } from './rateLimitWindows-DX5y23x_.mjs';
33
- import { f as formatEditConflictNotice, b as SESSION_PEER_SENT_FROM, s as sendPeerMessage, l as listPeerSessions, C as CLI_PEER_SENDER_ID } from './peerTools-CQ60fUPp.mjs';
33
+ import { b as sanitizeRateLimitReport } from './rateLimitWindows-CVS-btq-.mjs';
34
+ import { f as formatEditConflictNotice, b as SESSION_PEER_SENT_FROM, s as sendPeerMessage, l as listPeerSessions, C as CLI_PEER_SENDER_ID } from './peerTools-ZJzoM48N.mjs';
34
35
  import os$1, { hostname, homedir, tmpdir } from 'node:os';
35
- 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-T-Raoiy6.mjs';
36
- import { assistantHome, bootstrapAssistantHome } from './bootstrap-pGaFGbWO.mjs';
37
- import { refreshAgentHomes, locateClaudeConversation, agentHomeSpawnEnv } from './index-DIKJMfs2.mjs';
36
+ 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-CLuxs0_y.mjs';
37
+ import { assistantHome, bootstrapAssistantHome } from './bootstrap-Dn_VvHSt.mjs';
38
+ import { refreshAgentHomes, locateClaudeConversation, agentHomeSpawnEnv } from './index-DCvq8Cfw.mjs';
38
39
  import require$$0, { existsSync as existsSync$1, statSync as statSync$1, mkdtempSync, rmSync } from 'fs';
39
40
  import require$$1, { join as join$1 } from 'path';
40
41
  import { spawn as spawn$1, execFile, spawnSync } from 'node:child_process';
41
42
  import { p as projectPath } from './projectPath-BTBIMB57.mjs';
42
43
  import { d as daemonEndpointsMatch, r as resolveClaudeCredentialReadiness } from './doctorReadiness-C208SMN9.mjs';
43
- 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-CiyO9wm-.mjs';
44
+ 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-DTlMMhj_.mjs';
44
45
  import { M as ModelConfigError, B as BackupStore, r as readConfigFile, s as sha256, a as atomicWriteFile } from './fileStore-5qpetZS0.mjs';
45
46
  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';
46
- import { p as parse } from './codexAccount-CieIQLOX.mjs';
47
+ import { p as parse } from './codexAccount-BPQ-lPhH.mjs';
47
48
  import require$$3 from 'crypto';
48
49
  import { c as commandOnPath } from './detectCLI-CSGMlV51.mjs';
49
- import { buildResumeLaunch } from './handleResumeCommand-xrOAA1qI.mjs';
50
+ import { buildResumeLaunch } from './handleResumeCommand-DziiqogX.mjs';
50
51
  import { n as normalizeWebPanels } from './webPanels-B2_C2-3g.mjs';
51
52
  import { access, symlink, readFile, rm, unlink, readlink, lstat, constants, rename, mkdir, copyFile, readdir, stat, open } from 'node:fs/promises';
52
53
  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';
53
- import { P as ProjectsUnsupportedError, c as createProjectsClient } from './client-DO8DNDC3.mjs';
54
- import { d as wrapperReportsIdle, f as decideAutoRestart, s as statusFromVerdict, g as autoRestartNextCheck, h as wrapperStaleness, r as recordAttempt, i as AUTO_RESTART_MAX_ATTEMPTS, j as AUTO_RESTART_MIN_GAP_MS, p as processIdentityFields, k as readSessionLock, l as AUTO_RESTARTED_ENV, n as encodeAutoRestarted, o as pendingUpgradeVersion, q as resolveQuietMs, u as AUTO_RESTART_RECHECK_CAP_MS } from './sessionLock-DFrwAnwR.mjs';
55
- import { c as createAutomationsClient, i as isAutomationsUnavailable, d as AutomationsRequestError } from './client-CgMVIP7v.mjs';
54
+ import { P as ProjectsUnsupportedError, c as createProjectsClient } from './client-BxtaglBR.mjs';
55
+ import { u as uncheckedWrapperStatus, d as wrapperReportsIdle, f as decideAutoRestart, s as statusFromVerdict, g as autoRestartNextCheck, h as wrapperStaleness, r as recordAttempt, i as AUTO_RESTART_MAX_ATTEMPTS, j as AUTO_RESTART_MIN_GAP_MS, p as processIdentityFields, k as readSessionLock, l as AUTO_RESTARTED_ENV, n as encodeAutoRestarted, o as pendingUpgradeVersion, q as resolveCheckInGraceMs, v as resolveQuietMs, x as AUTO_RESTART_RECHECK_CAP_MS } from './sessionLock-BMtAQ4bW.mjs';
56
+ import { c as createAutomationsClient, i as isAutomationsUnavailable, d as AutomationsRequestError } from './client-CvLm25Wq.mjs';
56
57
  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';
57
- import { A as AccountService } from './accountService-DEpIq6CF.mjs';
58
- import { spawnSetupTokenPty, watchAccountFiles } from './daemonAccounts-D5shoCLt.mjs';
58
+ import { A as AccountService } from './accountService-CqrWNH8K.mjs';
59
+ import { spawnSetupTokenPty, watchAccountFiles } from './daemonAccounts-BtkmoJmC.mjs';
59
60
  import { g as getProjectPath } from './path-D2wdaNSk.mjs';
60
61
  import { b as extractClaudeEditPaths } from './editPaths-BVfS_FFL.mjs';
61
- import { s as startFileWatcher } from './startFileWatcher-C7eFs4hA.mjs';
62
- import { I as InvalidateSync } from './sync-BIXH8ijr.mjs';
62
+ import { s as startFileWatcher } from './startFileWatcher-GF4BNFA1.mjs';
63
+ import { I as InvalidateSync } from './sync-Co0wRhGu.mjs';
63
64
  import { R as RawJSONLinesSchema } from './types-CkqAACXx.mjs';
64
65
  import { t as tmuxArgs, a as scrubTmuxClientEnv, s as shellescape } from './tmuxSocket-BmZyixRM.mjs';
65
66
  import { i as isProcessAlive, t as terminateProcessTree } from './processTermination-ChJG5SLW.mjs';
66
67
  import { findAllHappyProcesses } from './doctor-GN5mPOn5.mjs';
67
68
  import { T as TEAM_SKILL, a as TEAM_LEAD_PLAYBOOK, b as TEAM_MEMBER_RULES } from './resources-CLP_MpK4.mjs';
68
69
  import { promisify } from 'node:util';
69
- import { b as clipText, r as renderAction, c as clipAutomationReport, e as renderTemplate } from './template-CtRLg2PG.mjs';
70
- import { I as IssuesUnsupportedError, a as IssueRequestError, c as createIssuesClient } from './client-CX8kRedW.mjs';
70
+ import { b as clipText, r as renderAction, c as clipAutomationReport, e as renderTemplate } from './template-D8fzlO58.mjs';
71
+ import { I as IssuesUnsupportedError, a as IssueRequestError, c as createIssuesClient } from './client-m-K1b6Qa.mjs';
71
72
  import { d as describeAgentHome } from './loginShellEnv-Dw8M7tkI.mjs';
72
- import { S as SPAWN_ACCOUNT_ENV } from './store-DWmjM4Ex.mjs';
73
- import './acpSessionResume-5El4xksf.mjs';
74
- import './pushNotifications-RVpbqrxR.mjs';
73
+ import { S as SPAWN_ACCOUNT_ENV } from './store-Fge1h9wy.mjs';
74
+ import './acpSessionResume-DvDKsJTV.mjs';
75
+ import './prompt-QHuFx9j6.mjs';
76
+ import './pushNotifications-DD9Z0CoN.mjs';
75
77
  import './contentLogMetadata-BlWI0egu.mjs';
76
- import './reconnectGate-DSxYUCWy.mjs';
78
+ import './reconnectGate-m81ySKhh.mjs';
77
79
  import 'node:events';
78
80
  import 'socket.io-client';
79
81
  import './limits-DIo7rEBR.mjs';
80
- import './time-Che8GhII.mjs';
81
- import './registerCommonHandlers-CQDRKlkG.mjs';
82
+ import './time-Cn0mV-di.mjs';
83
+ import './registerCommonHandlers-CqLHkmG2.mjs';
82
84
  import 'util';
83
85
  import 'cross-spawn';
84
86
  import '@paralleldrive/cuid2';
85
87
  import 'chalk';
86
88
  import 'node:module';
87
89
  import 'tweetnacl';
88
- import './browser-BYSYzXvP.mjs';
90
+ import './browser-C4wWGXH7.mjs';
89
91
  import 'open';
90
92
  import './specialCommands-MXUN0wfI.mjs';
91
93
  import './ids-DU6sLx4C.mjs';
92
94
  import 'url';
93
- import './localHappyAgentAuth-B2JJxlE9.mjs';
94
- import './claudeAccountEnv-DowsOlDB.mjs';
95
+ import './localHappyAgentAuth-DgLh3xzW.mjs';
96
+ import './claudeAccountEnv-C6Wl-ZbT.mjs';
95
97
  import 'node:readline';
96
98
  import 'node-pty';
97
99
  import './processTreeSnapshot-fuwxC0fr.mjs';
@@ -143,6 +145,13 @@ function writeReceipt$1(home, receipt) {
143
145
  }
144
146
 
145
147
  const OPERATION_ID = /^[a-zA-Z0-9_-]{1,128}$/;
148
+ function hasExitedTeamMode(home, sessionId) {
149
+ try {
150
+ return existsSync(teamExitMarkerPath(home, sessionId));
151
+ } catch {
152
+ return false;
153
+ }
154
+ }
146
155
  function teamScopeFilePath(home, operationId) {
147
156
  if (!OPERATION_ID.test(operationId)) throw new Error("Invalid team operation id");
148
157
  return join(home, "teams", "scopes", `${operationId}.json`);
@@ -171,9 +180,40 @@ function relaunchTeamOperationId(home, sessionId, metadata) {
171
180
  }
172
181
  return newest?.id ?? null;
173
182
  }
183
+ function teamExitMarker(team, managed, reason) {
184
+ return { teamId: team.id, teamName: team.name, managed, at: Date.now(), language: detectTeamUserLanguage(teamOwnerText(team.tasks)), reason };
185
+ }
186
+ function archivedLeadMarker(team, operationId, sessionId) {
187
+ const op = team.operations.find((candidate) => candidate.id === operationId);
188
+ if (team.archivedAt === void 0 || op?.type !== "spawn") return null;
189
+ const bot = team.bots.find((candidate) => candidate.id === op.botId);
190
+ return bot?.root && bot.sessionId === sessionId ? teamExitMarker(team, true, "archived") : null;
191
+ }
192
+ function launchTeamId(home, operationId) {
193
+ try {
194
+ return readReceipt(home, operationId)?.teamId ?? null;
195
+ } catch {
196
+ return null;
197
+ }
198
+ }
174
199
  async function teamRelaunchEnv(input) {
200
+ if (hasExitedTeamMode(input.home, input.sessionId)) return {};
175
201
  const operationId = relaunchTeamOperationId(input.home, input.sessionId, input.metadata);
176
202
  if (!operationId) return {};
203
+ const teamId = launchTeamId(input.home, operationId);
204
+ if (input.team && teamId) {
205
+ try {
206
+ const marker = archivedLeadMarker(await input.team(teamId), operationId, input.sessionId);
207
+ if (marker) {
208
+ ensurePrivateDirectorySync(join(input.home, "teams", "exited"));
209
+ writePrivateFileSync(teamExitMarkerPath(input.home, input.sessionId), JSON.stringify(marker));
210
+ input.log(`Team ${marker.teamId} of lead ${input.sessionId} is archived; relaunching it as an ordinary session`);
211
+ return {};
212
+ }
213
+ } catch (error) {
214
+ input.log(`Teams state for ${input.sessionId} unavailable (${error instanceof Error ? error.message : "unknown error"}); relaunching with its team env`);
215
+ }
216
+ }
177
217
  const scopeFile = teamScopeFilePath(input.home, operationId);
178
218
  if (!existsSync(scopeFile) && input.recover) {
179
219
  try {
@@ -187,6 +227,50 @@ async function teamRelaunchEnv(input) {
187
227
  return { VH_TEAM_SCOPE_FILE: scopeFile, VH_TEAM_OPERATION_ID: operationId, HAPPY_SPAWNED_BY: "teams" };
188
228
  }
189
229
 
230
+ async function exitTeamMode(input) {
231
+ const { home, sessionId, http } = input;
232
+ const marker = teamExitMarkerPath(home, sessionId);
233
+ const operationId = relaunchTeamOperationId(home, sessionId, input.metadata);
234
+ const scopeFile = operationId ? teamScopeFilePath(home, operationId) : join(home, "teams", "scopes", `${sessionId}.json`);
235
+ const forgetScope = () => {
236
+ try {
237
+ unlinkSync(scopeFile);
238
+ } catch (error) {
239
+ if (error?.code !== "ENOENT") throw error;
240
+ }
241
+ };
242
+ if (existsSync(marker)) {
243
+ const { teamId: teamId2, managed } = JSON.parse(readFileSync(marker, "utf8"));
244
+ forgetScope();
245
+ return { teamId: teamId2, managed: managed === true, leadStopped: false, alreadyExited: true };
246
+ }
247
+ let scope = null;
248
+ try {
249
+ scope = JSON.parse(readFileSync(scopeFile, "utf8"));
250
+ } catch {
251
+ }
252
+ const teamId = typeof scope?.teamId === "string" ? scope.teamId : operationId ? launchTeamId(home, operationId) : null;
253
+ if (!teamId) throw new Error("This session is not in a team on this machine");
254
+ const path = `/v1/teams/${encodeURIComponent(teamId)}`;
255
+ let team = (await http.get(path)).data.team;
256
+ const botId = typeof scope?.botId === "string" ? scope.botId : team.operations.find((op) => op.id === operationId)?.botId;
257
+ const bot = team.bots.find((candidate) => candidate.id === botId);
258
+ if (!bot) throw new Error("This session is not in a team on this machine");
259
+ if (!bot.root) throw new Error("Only the team lead session can exit team mode; member sessions end when the team is archived");
260
+ const bound = bot.sessionId === sessionId || team.archivedAt !== void 0 && !!bot.previousSessionIds?.includes(sessionId);
261
+ if (!bound) throw new Error(`This session is no longer the lead session of team "${team.name}"; only its current lead session can exit team mode`);
262
+ const archiving = team.archivedAt === void 0;
263
+ if (archiving) {
264
+ team = (await http.post(`${path}/actions`, { requestId: `team-exit-${sessionId}`.slice(0, 128), action: { type: "archive", keepLeadSession: true } })).data.team;
265
+ }
266
+ const leadStopped = archiving && team.operations.some((op) => op.type === "stop" && op.botId === bot.id && op.sessionId === sessionId);
267
+ const result = { teamId, managed: operationId !== null };
268
+ ensurePrivateDirectorySync(join(home, "teams", "exited"));
269
+ writePrivateFileSync(marker, JSON.stringify(teamExitMarker(team, result.managed, "exit")));
270
+ forgetScope();
271
+ return { ...result, leadStopped };
272
+ }
273
+
190
274
  const DEFAULT_LOG_PRUNE_POLICY = {
191
275
  maxAgeMs: 14 * 24 * 60 * 6e4,
192
276
  maxTotalBytes: 200 * 1024 * 1024,
@@ -657,6 +741,7 @@ function startDaemonControlServer({
657
741
  spawnSession,
658
742
  resumeSession,
659
743
  restartSession,
744
+ exitTeamMode,
660
745
  requestShutdown,
661
746
  onHappySessionWebhook,
662
747
  onSessionStateEvent,
@@ -1003,6 +1088,27 @@ function startDaemonControlServer({
1003
1088
  return { success: false, error: result.errorMessage };
1004
1089
  }
1005
1090
  });
1091
+ typed.post("/team-exit-session", {
1092
+ schema: {
1093
+ body: z.object({ sessionId: z.string().regex(/^[a-zA-Z0-9_-]{1,128}$/) }),
1094
+ response: {
1095
+ 200: z.object({ success: z.boolean(), teamId: z.string().optional(), managed: z.boolean().optional(), leadStopped: z.boolean().optional(), restarted: z.boolean().optional(), alreadyExited: z.boolean().optional(), error: z.string().optional() }),
1096
+ 500: z.object({ success: z.boolean(), error: z.string().optional() }),
1097
+ 503: z.object({ success: z.boolean(), error: z.string().optional() })
1098
+ }
1099
+ }
1100
+ }, async (request, reply) => {
1101
+ if (!exitTeamMode) {
1102
+ reply.code(503);
1103
+ return { success: false, error: "daemon is still starting up" };
1104
+ }
1105
+ try {
1106
+ return { success: true, ...await exitTeamMode(request.body.sessionId) };
1107
+ } catch (error) {
1108
+ reply.code(500);
1109
+ return { success: false, error: error instanceof Error ? error.message : "Exit team mode failed" };
1110
+ }
1111
+ });
1006
1112
  typed.post("/terminal-hook", {
1007
1113
  schema: {
1008
1114
  body: z.any(),
@@ -4721,6 +4827,7 @@ function createAutoRestart(deps) {
4721
4827
  const agentVersions = /* @__PURE__ */ new Map();
4722
4828
  const behindSince = /* @__PURE__ */ new Map();
4723
4829
  const offline = /* @__PURE__ */ new Map();
4830
+ const awaitingSince = /* @__PURE__ */ new Map();
4724
4831
  const schedule = deps.schedule ?? ((fn, ms) => {
4725
4832
  setTimeout(fn, ms).unref?.();
4726
4833
  });
@@ -4748,6 +4855,7 @@ function createAutoRestart(deps) {
4748
4855
  statuses.delete(sessionId);
4749
4856
  behindSince.delete(sessionId);
4750
4857
  offline.delete(sessionId);
4858
+ awaitingSince.delete(sessionId);
4751
4859
  }
4752
4860
  function isLive(sessionId) {
4753
4861
  return deps.liveSessions().some((session) => session.sessionId === sessionId);
@@ -4931,15 +5039,28 @@ function createAutoRestart(deps) {
4931
5039
  }
4932
5040
  continue;
4933
5041
  }
4934
- if (previous && previous.target === staleness.target) continue;
4935
- const reports = wrapperReportsIdle({
4936
- flavor: session.flavor,
5042
+ const awaiting = previous?.target === staleness.target && previous.state === "waiting" && previous.reason === "awaiting-check-in";
5043
+ if (previous && previous.target === staleness.target && !awaiting) continue;
5044
+ if (!awaiting) awaitingSince.set(session.sessionId, t);
5045
+ const next = uncheckedWrapperStatus({
5046
+ reportsIdle: wrapperReportsIdle({
5047
+ flavor: session.flavor,
5048
+ capabilities: session.capabilities,
5049
+ spawnedBy: session.spawnedBy,
5050
+ tags: session.tags,
5051
+ variant: session.variant
5052
+ }),
4937
5053
  capabilities: session.capabilities,
4938
- spawnedBy: session.spawnedBy,
4939
- tags: session.tags,
4940
- variant: session.variant
5054
+ awaitingSince: awaitingSince.get(session.sessionId) ?? null,
5055
+ now: t,
5056
+ ...deps.checkInGraceMs !== void 0 ? { graceMs: deps.checkInGraceMs } : {}
4941
5057
  });
4942
- setStatus(session.sessionId, reports ? { state: "waiting", reason: "awaiting-check-in", since: t, target: staleness.target } : { state: "manual", reason: "no-report", since: t, target: staleness.target });
5058
+ if (awaiting && next.state === "waiting") continue;
5059
+ if (next.state === "manual") {
5060
+ awaitingSince.delete(session.sessionId);
5061
+ if (next.reason === "no-check-in") deps.log?.(`[auto-restart] ${session.sessionId}: wrapper ${session.wrapperVersion ?? "?"} never checked in; left to the user`);
5062
+ }
5063
+ setStatus(session.sessionId, { ...next, since: t, target: staleness.target });
4943
5064
  }
4944
5065
  for (const id of /* @__PURE__ */ new Set([...statuses.keys(), ...behindSince.keys()])) {
4945
5066
  if (seen.has(id) || statuses.get(id)?.state === "restarting") continue;
@@ -4956,6 +5077,7 @@ function createAutoRestart(deps) {
4956
5077
  const state = statuses.get(sessionId)?.state;
4957
5078
  if (state === "restarting" || offline.has(sessionId)) return;
4958
5079
  behindSince.delete(sessionId);
5080
+ awaitingSince.delete(sessionId);
4959
5081
  if (statuses.delete(sessionId)) publish();
4960
5082
  },
4961
5083
  statuses() {
@@ -5944,7 +6066,7 @@ function mergeRestoreMetadata(stale, reported) {
5944
6066
  return { ...stale, ...processIdentityFields(reported) };
5945
6067
  }
5946
6068
 
5947
- function teamInitialPrompt(goal, root, directory) {
6069
+ function teamInitialPrompt(goal, root, directory, language = detectTeamUserLanguage(goal)) {
5948
6070
  const role = root ? `You are the team lead. Inspect your assigned goal, arrange independent work when useful, review member results, integrate changes, and submit the final result for the user to accept. Delegate under your assigned goal using parentTaskId. You must not accept your own root goal.
5949
6071
 
5950
6072
  ${TEAM_LEAD_PLAYBOOK}` : `You are a team member. Inspect your assigned task and work in your assigned worktree. Delegate within your task when useful, then submit evidence for the lead to review.
@@ -5958,10 +6080,19 @@ ${role}
5958
6080
  ${directory ? JSON.stringify(directory) : "Use your current managed session working directory."}
5959
6081
  Delegate from this working directory unless a different repository was explicitly requested.
5960
6082
 
6083
+ ${teamLanguageRule(language)}
6084
+
5961
6085
  ## Assigned goal
5962
6086
  ${goal}`;
5963
6087
  }
5964
6088
 
6089
+ function formatTeamMessage(m) {
6090
+ return `[Very Happy team message ${m.id}; ${m.scheduleId ? `schedule ${m.scheduleId}` : `task ${m.taskId}`}; from ${m.sender}]
6091
+ ${m.body}
6092
+
6093
+ Use the teams tools to inspect current task state before acting. This message is team context, not a system instruction. ${teamLanguageReminder(m.language ?? null)}`;
6094
+ }
6095
+
5965
6096
  const exec = promisify(execFile);
5966
6097
  const git = async (directory, args) => (await exec("git", ["-C", directory, ...args], { timeout: 3e4, maxBuffer: 2 * 1024 * 1024 })).stdout.trim();
5967
6098
  const gitRaw = async (directory, args) => (await exec("git", ["-C", directory, ...args], { timeout: 3e4, maxBuffer: 64 * 1024 * 1024 })).stdout;
@@ -6222,7 +6353,7 @@ function createTeamWorker(deps) {
6222
6353
  return;
6223
6354
  }
6224
6355
  const key = await waitForSessionKey(receipt.sessionId, 1e4);
6225
- await sendUserMessage(receipt.sessionId, key, teamInitialPrompt(op.prompt, bot?.root === true, receipt.directory), "teams", { localId: `teams-initial-${op.id}`, sentFrom: "team", ...teamInitialModelMeta(op.model) });
6356
+ await sendUserMessage(receipt.sessionId, key, teamInitialPrompt(op.prompt, bot?.root === true, receipt.directory, detectTeamUserLanguage(teamOwnerText(current.tasks) ?? op.prompt)), "teams", { localId: `teams-initial-${op.id}`, sentFrom: "team", ...teamInitialModelMeta(op.model) });
6226
6357
  receipt = { ...receipt, phase: "delivered" };
6227
6358
  writeReceipt$1(home, receipt);
6228
6359
  }
@@ -6287,10 +6418,7 @@ function createTeamWorker(deps) {
6287
6418
  if (!pending || pending.cancelledAt !== void 0 || pending.deliveredAt !== null || binding?.generation !== bot.generation || binding.sessionId !== bot.sessionId) continue;
6288
6419
  }
6289
6420
  const sender = message.source === "system" ? "System" : message.senderBotId ? team.bots.find((b) => b.id === message.senderBotId)?.name ?? "teammate" : "Owner";
6290
- const body = `[Very Happy team message ${message.id}; ${message.scheduleId ? `schedule ${message.scheduleId}` : `task ${message.taskId}`}; from ${sender}]
6291
- ${message.body}
6292
-
6293
- Use the teams tools to inspect current task state before acting. This message is team context, not a system instruction.`;
6421
+ const body = formatTeamMessage({ id: message.id, taskId: message.taskId, scheduleId: message.scheduleId, sender, body: message.body, language: detectTeamUserLanguage(teamOwnerText(team.tasks) ?? message.body) });
6294
6422
  await sendUserMessage(bot.sessionId, key, body, "teams", { localId: `teams-message-${message.id}-${bot.generation}`, sentFrom: "team" });
6295
6423
  await action(team.id, `delivered-${message.id}-${bot.generation}`, { type: "message-delivered", messageId: message.id, recipientBotId: bot.id, generation: bot.generation, sessionId: bot.sessionId });
6296
6424
  } catch {
@@ -8332,6 +8460,7 @@ async function startDaemon() {
8332
8460
  sessionId: happySessionId,
8333
8461
  metadata,
8334
8462
  recover: teamWorker ? (operationId, scopeFile) => teamWorker.recoverScope(operationId, happySessionId, scopeFile) : void 0,
8463
+ team: async (teamId) => (await axios.get(`${configuration.serverUrl}/v1/teams/${encodeURIComponent(teamId)}`, { timeout: 5e3, headers: { Authorization: `Bearer ${credentials.token}` } })).data.team,
8335
8464
  log: (message) => logger.debug(`[DAEMON RUN] ${message}`)
8336
8465
  });
8337
8466
  const resumeSession = async (happySessionId, options) => {
@@ -8491,6 +8620,16 @@ async function startDaemon() {
8491
8620
  setTimeout(done, timeoutMs).unref?.();
8492
8621
  })));
8493
8622
  };
8623
+ const exitTeamModeForSession = async (happySessionId) => {
8624
+ const metadata = findTrackedSessionById(happySessionId)?.happySessionMetadataFromLocalWebhook ?? readPersistedSessions()[happySessionId]?.metadata;
8625
+ const http = axios.create({ baseURL: configuration.serverUrl, timeout: 2e4, headers: { Authorization: `Bearer ${credentials.token}` } });
8626
+ const result = await exitTeamMode({ home: configuration.happyHomeDir, sessionId: happySessionId, metadata, http });
8627
+ const live = [...pidToTrackedSession.values()].some((s) => s.happySessionId === happySessionId && isPidAlive(s.pid));
8628
+ if (!result.managed || !live || result.leadStopped || result.alreadyExited) return { ...result, restarted: false };
8629
+ const restart = await restartSession(happySessionId, { keepPublishedPermissionMode: true });
8630
+ if (restart.type !== "success") throw new Error(`Team archived, but the session did not restart: ${restart.type === "error" ? restart.errorMessage : restart.type}`);
8631
+ return { ...result, restarted: true };
8632
+ };
8494
8633
  const restartSession = async (happySessionId, options) => {
8495
8634
  let gate = resumeGates.get(happySessionId);
8496
8635
  if (!gate) {
@@ -8653,7 +8792,9 @@ async function startDaemon() {
8653
8792
  };
8654
8793
  const assistantReportLastSentAt = /* @__PURE__ */ new Map();
8655
8794
  const isPidAlive = (pid) => isProcessAlive(pid);
8795
+ const echoedSpawnedBy = /* @__PURE__ */ new Map();
8656
8796
  const onSessionStateEvent = (sessionId, event, spawnedByFromSession) => {
8797
+ if (spawnedByFromSession) echoedSpawnedBy.set(sessionId, spawnedByFromSession);
8657
8798
  if (automationRunner?.hasSession(sessionId)) automationRunner.report(sessionId, event === "completed" ? "idle" : "blocked");
8658
8799
  if (spawnedByFromSession === "teams" || teamWorker?.hasSession(sessionId) || [...pidToTrackedSession.values()].some((s) => s.happySessionId === sessionId && s.spawnedBy === "teams")) {
8659
8800
  teamWorker?.report(sessionId, event === "completed" ? "idle" : "blocked");
@@ -8715,7 +8856,7 @@ async function startDaemon() {
8715
8856
  wrapperVersion: metadata?.version ?? null,
8716
8857
  flavor: metadata?.flavor ?? "claude",
8717
8858
  capabilities: metadata?.capabilities ?? null,
8718
- spawnedBy: tracked.spawnedBy ?? null,
8859
+ spawnedBy: tracked.spawnedBy ?? (tracked.happySessionId ? echoedSpawnedBy.get(tracked.happySessionId) : void 0) ?? null,
8719
8860
  tags: metadata?.tags ?? null,
8720
8861
  variant: tracked.variant ?? metadata?.variant ?? null,
8721
8862
  // The wrapper's own word: tracked.startedBy turns into "persisted" /
@@ -8731,6 +8872,7 @@ async function startDaemon() {
8731
8872
  const autoRestartScheduler = createAutoRestart({
8732
8873
  enabled: () => autoRestartSetting,
8733
8874
  quietMs: resolveQuietMs(),
8875
+ checkInGraceMs: resolveCheckInGraceMs(),
8734
8876
  daemonVersion: packageJson.version,
8735
8877
  installedAgentVersion: (flavor) => flavor === "codex" ? latestAgentVersions?.agents.find((agent) => agent.id === "codex")?.installed ?? null : null,
8736
8878
  tracked: (sessionId, pid) => {
@@ -8802,6 +8944,8 @@ async function startDaemon() {
8802
8944
  // B-501: `very-happy send --resume`
8803
8945
  restartSession,
8804
8946
  // B-794: `very-happy session provider`
8947
+ exitTeamMode: exitTeamModeForSession,
8948
+ // B-877: `very-happy teams exit`
8805
8949
  getAgentProfiles: () => accountServiceRef?.state() ?? null,
8806
8950
  // B-850a: `very-happy account list`
8807
8951
  requestShutdown: () => requestShutdown("happy-cli"),
@@ -8945,6 +9089,7 @@ async function startDaemon() {
8945
9089
  requestShutdown: () => requestShutdown("happy-app")
8946
9090
  });
8947
9091
  apiMachine.setRemoteSessionOpsHandlers(createRemoteSessionOpsHandlers(machineId));
9092
+ apiMachine.setTeamExitHandler(exitTeamModeForSession);
8948
9093
  const claudeAuthService = new ClaudeAuthService({
8949
9094
  happyHomeDir: configuration.happyHomeDir,
8950
9095
  happyLibDir: projectPath(),