very-happy-cli 0.2.191 → 0.2.192

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 (212) hide show
  1. package/dist/{AcpBackend-DgrIc1vH.cjs → AcpBackend-BQO4ShOy.cjs} +3 -3
  2. package/dist/{AcpBackend-CCy_9AfR.mjs → AcpBackend-CGHTDJd9.mjs} +3 -3
  3. package/dist/{AcpSessionManager-CQnxx7gD.mjs → AcpSessionManager-G0xD6Jbq.mjs} +2 -2
  4. package/dist/{AcpSessionManager-DVOzCD3P.cjs → AcpSessionManager-LlUMmcpB.cjs} +2 -2
  5. package/dist/{BasePermissionHandler-DYLN6Ec9.mjs → BasePermissionHandler-BmTIg376.mjs} +1 -1
  6. package/dist/{BasePermissionHandler-C9Ag7yvs.cjs → BasePermissionHandler-N6Ip3tFt.cjs} +1 -1
  7. package/dist/account-CCVT-HO_.mjs +240 -0
  8. package/dist/account-DtaouikP.cjs +245 -0
  9. package/dist/accountService-Bddy0zwL.cjs +571 -0
  10. package/dist/accountService-Dd9uqde2.mjs +566 -0
  11. package/dist/{acpSessionResume-Bi7pA1n_.mjs → acpSessionResume-BWEUxNtC.mjs} +1 -1
  12. package/dist/{acpSessionResume-TvP_4Zq2.cjs → acpSessionResume-BnHDk5eD.cjs} +1 -1
  13. package/dist/{agentHome-DGv105SR.mjs → agentHome-B0VnjkZW.mjs} +4 -4
  14. package/dist/{agentHome-DNUKJWOY.cjs → agentHome-CqQ29YY7.cjs} +4 -4
  15. package/dist/{api-jfeMRg5R.mjs → api-_LeBScjg.mjs} +10 -10
  16. package/dist/{api-BBxZ7y2z.cjs → api-hMDsC6Wg.cjs} +10 -10
  17. package/dist/{apiMachine-DRJ7y-BB.mjs → apiMachine-CgRldeJ6.mjs} +76 -21
  18. package/dist/{apiMachine-DqyjKBZG.cjs → apiMachine-CqW2m6Zr.cjs} +81 -26
  19. package/dist/{attachmentContent-BO2njyza.cjs → attachmentContent-BEeT2J5n.cjs} +2 -2
  20. package/dist/{attachmentContent-Dm_RIs5L.mjs → attachmentContent-CyptLIfq.mjs} +2 -2
  21. package/dist/{auth-DnxoVkkf.cjs → auth-C9NvNHhL.cjs} +5 -5
  22. package/dist/{auth-DLR3ksCF.cjs → auth-CA1OClsW.cjs} +8 -8
  23. package/dist/{auth-BYDtjVNb.mjs → auth-CFQikywl.mjs} +8 -8
  24. package/dist/{auth-DC6rg8lJ.mjs → auth-DL8_J9vu.mjs} +5 -5
  25. package/dist/{auto-D5Jhukq1.mjs → auto-CKI05w1D.mjs} +17 -17
  26. package/dist/{auto-CwO0u8hB.cjs → auto-uQOxlxLp.cjs} +17 -17
  27. package/dist/{bootstrap-rLaL3kTa.mjs → bootstrap-DaZ0Np7X.mjs} +2 -2
  28. package/dist/{bootstrap-sly4qPPY.cjs → bootstrap-DsZGc69k.cjs} +2 -2
  29. package/dist/{browser-CHpVgyni.mjs → browser-BUIaSHK2.mjs} +1 -1
  30. package/dist/{browser-BTgZ9d4i.cjs → browser-Ft0ASDm7.cjs} +1 -1
  31. package/dist/claudeAccountEnv-BOBpJ3k8.cjs +137 -0
  32. package/dist/claudeAccountEnv-ON24i0qv.mjs +132 -0
  33. package/dist/{claudeLocal-Bgb5GGsq.mjs → claudeLocal-B1ZVtryl.mjs} +5 -5
  34. package/dist/{claudeLocal-1vuTFcL8.cjs → claudeLocal-BMf9t4Fa.cjs} +5 -5
  35. package/dist/{claudeLocalLauncher-T7EfT68h.mjs → claudeLocalLauncher-Bp8bqF4y.mjs} +10 -10
  36. package/dist/{claudeLocalLauncher-DOsL6HFY.cjs → claudeLocalLauncher-C8TeJcfF.cjs} +10 -10
  37. package/dist/{claudeSessionFork-CPvi6yDX.mjs → claudeSessionFork-8AA47z8Y.mjs} +1 -1
  38. package/dist/{claudeSessionFork-Cko4SaVi.cjs → claudeSessionFork-YiktY55n.cjs} +1 -1
  39. package/dist/{client-Bi20Ka0h.mjs → client-Bm4oKvW7.mjs} +2 -2
  40. package/dist/{client-Bh1aUPh-.mjs → client-BmPaBnDK.mjs} +4 -4
  41. package/dist/{client-C-OdTbrU.cjs → client-CFHZfh9x.cjs} +4 -4
  42. package/dist/{client-BscskEBk.cjs → client-Crh8_cNx.cjs} +2 -2
  43. package/dist/{client-BXD66ZF5.mjs → client-Cxlp_D4I.mjs} +2 -2
  44. package/dist/{client-C5-C0t2a.cjs → client-D8XROyZc.cjs} +2 -2
  45. package/dist/codex/happyMcpStdioBridge.cjs +16 -16
  46. package/dist/codex/happyMcpStdioBridge.mjs +16 -16
  47. package/dist/{codexAppServerClient-DXhAf6i-.mjs → codexAppServerClient-BWJbLCQn.mjs} +3 -3
  48. package/dist/{codexAppServerClient-DKXeikEe.cjs → codexAppServerClient-q8GHQhyC.cjs} +3 -3
  49. package/dist/{codexCommand-CIaOiiOj.mjs → codexCommand-BfXfRQr4.mjs} +50 -48
  50. package/dist/{codexCommand-DvbbpYBS.cjs → codexCommand-BgpGg-Zy.cjs} +50 -48
  51. package/dist/{codexTermination-BszWfyk5.cjs → codexTermination-CVUF0X75.cjs} +1 -1
  52. package/dist/{codexTermination-BcQdEDaw.mjs → codexTermination-s9fd1gkA.mjs} +1 -1
  53. package/dist/{config-Di3Cf6js.cjs → config-BAjyTyYp.cjs} +3 -3
  54. package/dist/{config-OCEcVVK1.mjs → config-BF8XgLyc.mjs} +3 -3
  55. package/dist/{configuration-DfPBa-9d.cjs → configuration-CXEVKAyF.cjs} +1 -1
  56. package/dist/{configuration-ECqXu34R.mjs → configuration-IhRiLDVe.mjs} +1 -1
  57. package/dist/{connect-BTfAUhk8.mjs → connect-LZh1gr08.mjs} +13 -13
  58. package/dist/{connect-BPQRuOw5.cjs → connect-rCS56arw.cjs} +13 -13
  59. package/dist/{context-Co7hUaW-.cjs → context-3_S_mWz9.cjs} +1 -1
  60. package/dist/{context-CfgTFpCB.mjs → context-DO6F5YwH.mjs} +1 -1
  61. package/dist/{controlClient-ClI7A0qE.mjs → controlClient-8ILulwjc.mjs} +14 -5
  62. package/dist/{controlClient-C13_pSKG.cjs → controlClient-j7p5p3_7.cjs} +15 -4
  63. package/dist/{createSessionMetadata-Cf78KHtt.cjs → createSessionMetadata-DwdD_uVo.cjs} +2 -2
  64. package/dist/{createSessionMetadata-B0eT_Kfj.mjs → createSessionMetadata-oyaTZm1b.mjs} +2 -2
  65. package/dist/daemonAccounts-BCjDgoNt.cjs +51 -0
  66. package/dist/daemonAccounts-BJgt6IJe.mjs +27 -0
  67. package/dist/{defaultPermissionMode-oqTupStc.cjs → defaultPermissionMode-BFShzF55.cjs} +1 -1
  68. package/dist/{defaultPermissionMode-m6z2QVyP.mjs → defaultPermissionMode-Lt3PUCwY.mjs} +1 -1
  69. package/dist/{deterministicJson-CpFFgUL_.cjs → deterministicJson-DUN0v3St.cjs} +13 -13
  70. package/dist/{deterministicJson-BtSwbsok.mjs → deterministicJson-Dfp-7wUZ.mjs} +13 -13
  71. package/dist/{doctor-lsxmAK4o.mjs → doctor-B_UwMcVT.mjs} +7 -7
  72. package/dist/{doctor-BEU0_1Xv.cjs → doctor-FgUYTbAT.cjs} +7 -7
  73. package/dist/{downloadTarget-CikzJv1h.cjs → downloadTarget-BrrQEDxg.cjs} +6 -6
  74. package/dist/{downloadTarget-BXqXhNF7.mjs → downloadTarget-C0d6jRx-.mjs} +6 -6
  75. package/dist/{ensureDaemonRunning-BUuH-pbE.cjs → ensureDaemonRunning-Cq4FYI5Q.cjs} +5 -5
  76. package/dist/{ensureDaemonRunning-B_9WAlbU.mjs → ensureDaemonRunning-KUMFfIil.mjs} +5 -5
  77. package/dist/{handleResumeCommand-BK9XKH_l.mjs → handleResumeCommand-BGhVo3QH.mjs} +5 -5
  78. package/dist/{handleResumeCommand-Dj7oi2KO.cjs → handleResumeCommand-Cl9GIL5F.cjs} +5 -5
  79. package/dist/{index-BdOJOZ6J.mjs → index-BjXjMhGY.mjs} +4 -4
  80. package/dist/{index-CLUHaPU8.cjs → index-BzAYnYct.cjs} +110 -0
  81. package/dist/{index-CmZusg8Q.cjs → index-CQ_hLLCj.cjs} +3 -3
  82. package/dist/{index-Dg2NAF_-.cjs → index-CRipkiqo.cjs} +4 -4
  83. package/dist/{index-D3c7CLot.cjs → index-CZaLMmPC.cjs} +4 -4
  84. package/dist/{index-Cxso1rg4.mjs → index-Ca1Tt96A.mjs} +45 -41
  85. package/dist/{index-CauRYQKr.cjs → index-D8ODb0_U.cjs} +44 -40
  86. package/dist/{index-Bq8NKSCF.mjs → index-DYD3GM1m.mjs} +104 -1
  87. package/dist/{index-BjZnpGWX.mjs → index-JQDyJ3Li.mjs} +3 -3
  88. package/dist/{index-DuK9XYbZ.mjs → index-v5EmjT8l.mjs} +4 -4
  89. package/dist/index.cjs +2 -2
  90. package/dist/index.mjs +2 -2
  91. package/dist/{install-DXllkuy0.cjs → install-ClUA9tbC.cjs} +3 -3
  92. package/dist/{install-DTIveLOS.mjs → install-D6EHRtAN.mjs} +3 -3
  93. package/dist/lib.cjs +12 -12
  94. package/dist/lib.d.cts +282 -0
  95. package/dist/lib.d.mts +282 -0
  96. package/dist/lib.mjs +12 -12
  97. package/dist/{lidState-CD81ryTy.mjs → lidState-CZOXXdzv.mjs} +1 -1
  98. package/dist/{lidState-C9_DoF9i.cjs → lidState-DqoN7zH4.cjs} +1 -1
  99. package/dist/{localHappyAgentAuth-CCjUvOfi.cjs → localHappyAgentAuth-BnGCpHRX.cjs} +1 -1
  100. package/dist/{localHappyAgentAuth-Cg-m1lwm.mjs → localHappyAgentAuth-YHxDZ4x4.mjs} +1 -1
  101. package/dist/{logger-Ct2zvaq0.cjs → logger-8su64lqR.cjs} +2 -2
  102. package/dist/{logger-GcbI0eg2.mjs → logger-Fd_rNvgd.mjs} +2 -2
  103. package/dist/{machineMetadata-CXRmFNOV.mjs → machineMetadata-1HIIC7Bc.mjs} +3 -3
  104. package/dist/{machineMetadata-DDCVWb_x.cjs → machineMetadata-DYXt3p6u.cjs} +3 -3
  105. package/dist/{main-omGr_ONk.mjs → main-BI6GIzUL.mjs} +92 -48
  106. package/dist/{main-BHC-WIcM.cjs → main-C_GrcYkn.cjs} +92 -48
  107. package/dist/{mcp-xUzii0m8.cjs → mcp-BycIv9oQ.cjs} +18 -15
  108. package/dist/{mcp-D5hxmRAq.mjs → mcp-XGoxywno.mjs} +18 -15
  109. package/dist/{mirrorProtocol-Dfl8Ahyf.cjs → mirrorProtocol-DVnB8EO8.cjs} +3 -3
  110. package/dist/{mirrorProtocol-Lcx20Oby.mjs → mirrorProtocol-DXT3rv7T.mjs} +3 -3
  111. package/dist/{package-BsUHyqWe.mjs → package-6KkRAops.mjs} +7 -7
  112. package/dist/{package-9n7wd2dT.cjs → package-iuLlSiSF.cjs} +7 -7
  113. package/dist/{panels-BfknEmt7.cjs → panels-0C89q0Tu.cjs} +5 -5
  114. package/dist/{panels-CpEKWWbI.mjs → panels-B5Di2zb2.mjs} +5 -5
  115. package/dist/{peerTools-CElYh-5u.cjs → peerTools-CANTX_mG.cjs} +5 -5
  116. package/dist/{peerTools-CwCe6tmJ.mjs → peerTools-CKJ-IDM4.mjs} +5 -5
  117. package/dist/{persistence-A2NeERZJ.cjs → persistence-B4ttN-fR.cjs} +2 -2
  118. package/dist/{persistence-Cpw4yJs8.mjs → persistence-DWcHe035.mjs} +2 -2
  119. package/dist/{piRunnerArgs-BnFU0K73.cjs → piRunnerArgs-BOkfxyak.cjs} +1 -1
  120. package/dist/{piRunnerArgs-Bqmu16He.mjs → piRunnerArgs-Bl5GpBoN.mjs} +2 -2
  121. package/dist/{piRuntime-Cgn1b0OX.mjs → piRuntime-BhwxzdQf.mjs} +1 -1
  122. package/dist/{piRuntime-DpS9TAIs.cjs → piRuntime-DzrIiZU8.cjs} +1 -1
  123. package/dist/{piTerminal-rmve-VlI.cjs → piTerminal-BdS7ol7v.cjs} +20 -17
  124. package/dist/{piTerminal-BGdps8f3.mjs → piTerminal-DnA2CbGr.mjs} +20 -17
  125. package/dist/{pushNotifications-23YSd-0l.cjs → pushNotifications-BqFoLye2.cjs} +5 -3
  126. package/dist/{pushNotifications-XAM8__Pg.mjs → pushNotifications-DkQ0yvFs.mjs} +5 -3
  127. package/dist/{query-u2GX-I0C.cjs → query-BQ4br3yn.cjs} +1 -1
  128. package/dist/{query-SZcYnJoW.mjs → query-BRJYSkb1.mjs} +1 -1
  129. package/dist/{rateLimitReporter-COUkf446.mjs → rateLimitReporter-BRbYkmuP.mjs} +3 -3
  130. package/dist/{rateLimitReporter-CaTzBe3x.cjs → rateLimitReporter-DK5SQuCc.cjs} +3 -3
  131. package/dist/{rateLimitWindows-B2Kx6L0S.cjs → rateLimitWindows-DBfiuYeg.cjs} +1 -1
  132. package/dist/{rateLimitWindows-j_qQk0KY.mjs → rateLimitWindows-Da5AR-4u.mjs} +1 -1
  133. package/dist/reconnectEnv-B31lY4nR.cjs +27 -0
  134. package/dist/reconnectEnv-DeSvHl3q.mjs +24 -0
  135. package/dist/{registerCommonHandlers-D1MiSfcB.cjs → registerCommonHandlers-m6pxxf2J.cjs} +2 -2
  136. package/dist/{registerCommonHandlers-DRRfinzK.mjs → registerCommonHandlers-yQ7Ru-l0.mjs} +2 -2
  137. package/dist/{registerKillSessionHandler-hvCsEn7b.cjs → registerKillSessionHandler-BAOIa_Fs.cjs} +6 -6
  138. package/dist/{registerKillSessionHandler-Cpug_r5C.mjs → registerKillSessionHandler-BDNpi7YO.mjs} +6 -6
  139. package/dist/{remoteSessionClient-BdnJ_n8C.mjs → remoteSessionClient-CZ7aaNgj.mjs} +5 -5
  140. package/dist/{remoteSessionClient-6ymeMVa4.cjs → remoteSessionClient-iJMXRN_D.cjs} +5 -5
  141. package/dist/{reportProgressTool-XgQBzxoD.mjs → reportProgressTool-DfQhPu0s.mjs} +3 -3
  142. package/dist/{reportProgressTool-tzQLCLIw.cjs → reportProgressTool-DpFs7pSe.cjs} +3 -3
  143. package/dist/{run-Bt0AklUU.mjs → run-CwN28mcj.mjs} +211 -51
  144. package/dist/{run-DYL_wuj7.cjs → run-p-xp1_HY.cjs} +210 -50
  145. package/dist/{runClaude-CBEpYO4S.cjs → runClaude-D6U1Z575.cjs} +62 -44
  146. package/dist/{runClaude-C3rii_S6.mjs → runClaude-DRKtAGTm.mjs} +62 -44
  147. package/dist/{runClaudeDeps-DlVfMG4F.mjs → runClaudeDeps-BheVcIlD.mjs} +56 -47
  148. package/dist/{runClaudeDeps-CYuozSC6.cjs → runClaudeDeps-Dkofokgb.cjs} +51 -42
  149. package/dist/{runGemini-CEI3b90u.cjs → runGemini-C8q3YCc0.cjs} +33 -33
  150. package/dist/{runGemini-DkYhRk9S.mjs → runGemini-owbvhFbi.mjs} +33 -33
  151. package/dist/{runOpenClaw-BgjD6E4d.cjs → runOpenClaw-DGeN66-t.cjs} +18 -18
  152. package/dist/{runOpenClaw-DpprWCoz.mjs → runOpenClaw-Dky3-mjO.mjs} +18 -18
  153. package/dist/{sandbox-XCDUbH72.cjs → sandbox-D2CPyoCA.cjs} +4 -4
  154. package/dist/{sandbox-DJ7A7lsy.mjs → sandbox-sq_wy9Gl.mjs} +4 -4
  155. package/dist/{selfCheck-BYUDB1Uq.cjs → selfCheck-BgLvQKSt.cjs} +39 -37
  156. package/dist/selfCheck-vkfrgQ7X.mjs +88 -0
  157. package/dist/{send-CASDBCyJ.cjs → send-Cd10YhXh.cjs} +8 -8
  158. package/dist/{send-Ba63huxv.mjs → send-K9vg-8t-.mjs} +8 -8
  159. package/dist/{server-cZoV9XRt.cjs → server-DRrV64r0.cjs} +6 -6
  160. package/dist/{server-w3W0toNd.mjs → server-De4W1zuK.mjs} +4 -4
  161. package/dist/{sessionLock-BmLA2S8K.cjs → sessionLock-BDtSzzKS.cjs} +10 -3
  162. package/dist/{sessionLock-G2PMqvsh.mjs → sessionLock-Dl6i7IgA.mjs} +10 -4
  163. package/dist/{sessionOps-DXlTmS7J.cjs → sessionOps-DvnEH4PL.cjs} +4 -4
  164. package/dist/{sessionOps-DPw5k8vV.mjs → sessionOps-gU88-W9F.mjs} +4 -4
  165. package/dist/sessionProvider-CKcIo7KO.mjs +108 -0
  166. package/dist/sessionProvider-CbSZeZrl.cjs +113 -0
  167. package/dist/{sessionScanner-AHjnicxi.cjs → sessionScanner-7RtcCeyD.cjs} +3 -3
  168. package/dist/{sessionScanner-BCXpdZJN.mjs → sessionScanner-DR32uSby.mjs} +3 -3
  169. package/dist/{sessions-BiBXOBx0.cjs → sessions-BvuMjgvJ.cjs} +10 -10
  170. package/dist/{sessions-Clk8MR5Y.mjs → sessions-DTt2Eguk.mjs} +10 -10
  171. package/dist/{setupOfflineReconnection-DI-QZGYz.mjs → setupOfflineReconnection-BGnvhRfb.mjs} +2 -2
  172. package/dist/{setupOfflineReconnection-BKLfOd-i.cjs → setupOfflineReconnection-DduOsw6p.cjs} +2 -2
  173. package/dist/{spawn-4tsp1uhh.mjs → spawn-CL3cUc7b.mjs} +26 -17
  174. package/dist/{spawn-D5omsx1Q.cjs → spawn-DMB6rRPA.cjs} +26 -17
  175. package/dist/{spawnAgents-CtkkIFHd.cjs → spawnAgents-CClb7buD.cjs} +1 -1
  176. package/dist/{spawnAgents-CjoU6ZOS.mjs → spawnAgents-CRMfOJhh.mjs} +1 -1
  177. package/dist/{spawnHappyCLI-CIA9Sc_5.mjs → spawnHappyCLI-Cj_6IICe.mjs} +1 -1
  178. package/dist/{spawnHappyCLI-CF_gLi92.cjs → spawnHappyCLI-DJdhX_Qx.cjs} +1 -1
  179. package/dist/{startFileWatcher-CDO6fb2m.mjs → startFileWatcher-DikVa8kg.mjs} +1 -1
  180. package/dist/{startFileWatcher-9Stpxe7p.cjs → startFileWatcher-LnOmVW6H.cjs} +1 -1
  181. package/dist/{startupSessionCreate-CcF7rGGB.cjs → startupSessionCreate-B3ND-917.cjs} +3 -3
  182. package/dist/{startupSessionCreate-BtR4iYEC.mjs → startupSessionCreate-CDdaLaMq.mjs} +3 -3
  183. package/dist/store--XN-7MS0.mjs +269 -0
  184. package/dist/store-DV__wCvP.cjs +289 -0
  185. package/dist/{streamRelay-BhI6jqF-.cjs → streamRelay-DFdOaLOn.cjs} +1 -1
  186. package/dist/{streamRelay-DMwOMTKf.mjs → streamRelay-sABnxEXq.mjs} +1 -1
  187. package/dist/{sync-C0PRuTMj.mjs → sync-JoEZKRo8.mjs} +1 -1
  188. package/dist/{sync-Ba8N6xba.cjs → sync-_2lsZ1U2.cjs} +1 -1
  189. package/dist/{systemPrompt-DV5IReD4.cjs → systemPrompt-CJEvNCuW.cjs} +2 -2
  190. package/dist/{systemPrompt-D0q8eyjy.mjs → systemPrompt-Zq4HyrZ5.mjs} +2 -2
  191. package/dist/{teams-z3Gp-KlV.cjs → teams-BNZafnrT.cjs} +7 -7
  192. package/dist/{teams-BO3_arwM.mjs → teams-qz4LqKJ2.mjs} +7 -7
  193. package/dist/{template-DLR_0hfj.mjs → template-CJ8BWSsc.mjs} +1 -1
  194. package/dist/{template-B_5l6pkc.cjs → template-LgvBbOna.cjs} +1 -1
  195. package/dist/{time-Cy0a-7YX.cjs → time-CaUlWSNJ.cjs} +1 -1
  196. package/dist/{time-D0jvDRhn.mjs → time-bzmet4s5.mjs} +1 -1
  197. package/dist/{titleGenerator-RGHWP2YL.cjs → titleGenerator-BuIIu_JP.cjs} +17 -13
  198. package/dist/{titleGenerator-AGQsXskb.mjs → titleGenerator-CbTtJ_1D.mjs} +16 -12
  199. package/dist/{todo-CzIDPLFy.cjs → todo-CQ_BTf9C.cjs} +6 -6
  200. package/dist/{todo-BZ954vsz.mjs → todo-DIrVF_Ak.mjs} +6 -6
  201. package/dist/{tools-B1x1j6tz.cjs → tools-BnmmFZji.cjs} +1 -1
  202. package/dist/{tools-Bei5i03L.mjs → tools-cLOjBvPn.mjs} +1 -1
  203. package/dist/{uninstall-B4T_e3Mr.mjs → uninstall-C5OuW6dE.mjs} +3 -3
  204. package/dist/{uninstall-C3cnIvz1.cjs → uninstall-uEEGKB84.cjs} +3 -3
  205. package/dist/wrapperAccount-DXlD3bsO.mjs +106 -0
  206. package/dist/wrapperAccount-DzoGqS2b.cjs +110 -0
  207. package/package.json +7 -7
  208. package/dist/providerBinding-B-Qbx9W2.cjs +0 -140
  209. package/dist/providerBinding-CYubGg-Z.mjs +0 -132
  210. package/dist/selfCheck-C-rNljKV.mjs +0 -86
  211. package/dist/sessionProvider-DUn91LhJ.mjs +0 -109
  212. package/dist/sessionProvider-Dg691XQ4.cjs +0 -114
@@ -1,10 +1,10 @@
1
1
  'use strict';
2
2
 
3
3
  var z = require('zod');
4
- var index = require('./index-CLUHaPU8.cjs');
5
- var client = require('./client-BscskEBk.cjs');
4
+ var index = require('./index-BzAYnYct.cjs');
5
+ var client = require('./client-Crh8_cNx.cjs');
6
6
  var precheckCompat = require('./precheckCompat-CWOi5c9L.cjs');
7
- var client$1 = require('./client-C5-C0t2a.cjs');
7
+ var client$1 = require('./client-D8XROyZc.cjs');
8
8
  var prompt = require('./prompt-Bof2aQkI.cjs');
9
9
  var agentGuidance = require('./agentGuidance-BtBx2xxE.cjs');
10
10
 
@@ -1,25 +1,26 @@
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-Lcx20Oby.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-DXT3rv7T.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-Bqmu16He.mjs';
3
+ import { P as PI_ADAPTER_INSTALL_HINT, s as sanitizeSpawnModel } from './piRunnerArgs-Bl5GpBoN.mjs';
4
4
  import fs from 'fs/promises';
5
5
  import os from 'os';
6
6
  import * as tmp from 'tmp';
7
7
  import axios from 'axios';
8
- import { readFileSync, openSync, fsyncSync, closeSync, renameSync, existsSync, readdirSync, statSync, unlinkSync, realpathSync, promises, constants as constants$1, writeFileSync, mkdirSync, accessSync, readSync, rmdirSync } from 'node:fs';
8
+ 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';
9
9
  import { join, isAbsolute, resolve, dirname, sep, basename, relative } from 'node:path';
10
- import { f as ensurePrivateDirectorySync, w as writePrivateFileSync, c as configuration } from './configuration-ECqXu34R.mjs';
11
- import { T as TurnActivityTracker, A as ApiClient } from './api-jfeMRg5R.mjs';
12
- import { S as SPAWN_AGENTS, i as isSpawnAgent, s as sanitizeSpawnPermissionMode, r as resolveSpawnPermissionMode, a as resolveFirstMessageMeta, j as joinProject } from './spawnAgents-CjoU6ZOS.mjs';
13
- import { l as logger } from './logger-GcbI0eg2.mjs';
14
- import { p as pruneStaleCompileCaches } from './index-BjZnpGWX.mjs';
15
- import { a as authAndSetupMachineIfNeeded } from './auth-DC6rg8lJ.mjs';
10
+ import { f as ensurePrivateDirectorySync, w as writePrivateFileSync, c as configuration } from './configuration-IhRiLDVe.mjs';
11
+ import { T as TurnActivityTracker, A as ApiClient } from './api-_LeBScjg.mjs';
12
+ import { S as SPAWN_AGENTS, i as isSpawnAgent, s as sanitizeSpawnPermissionMode, r as resolveSpawnPermissionMode, a as resolveFirstMessageMeta, j as joinProject } from './spawnAgents-CRMfOJhh.mjs';
13
+ import { l as logger } from './logger-Fd_rNvgd.mjs';
14
+ import { p as pruneStaleCompileCaches } from './index-JQDyJ3Li.mjs';
15
+ import { a as authAndSetupMachineIfNeeded } from './auth-DL8_J9vu.mjs';
16
16
  import { spawn, execSync } from 'child_process';
17
- import { p as packageJson } from './package-BsUHyqWe.mjs';
18
- import { a as globalPrefixForPackage, N as NPM_SAFE_ARG, g as getEnvironmentInfo } from './doctor-lsxmAK4o.mjs';
19
- import { s as spawnHappyCLI } from './spawnHappyCLI-CIA9Sc_5.mjs';
20
- 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 rewriteCredentialsForRelay, g as readCredentials, F as releaseDaemonLock } from './persistence-Cpw4yJs8.mjs';
21
- import { i as isDaemonRunningCurrentlyInstalledHappyVersion, s as stopDaemon, u as cleanupDaemonState } from './controlClient-ClI7A0qE.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, j as lineageOf, g as waitForSessionKey, d as archiveSession, k as analyzeLatestTurn, m as readSessionLog, n as TURN_WINDOW, p as userPromptText } from './sessionOps-DPw5k8vV.mjs';
17
+ import { p as packageJson } from './package-6KkRAops.mjs';
18
+ import { a as globalPrefixForPackage, N as NPM_SAFE_ARG, g as getEnvironmentInfo } from './doctor-B_UwMcVT.mjs';
19
+ import { s as spawnHappyCLI } from './spawnHappyCLI-Cj_6IICe.mjs';
20
+ 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 rewriteCredentialsForRelay, g as readCredentials, F as releaseDaemonLock } from './persistence-DWcHe035.mjs';
21
+ import { i as isDaemonRunningCurrentlyInstalledHappyVersion, s as stopDaemon, w as cleanupDaemonState } from './controlClient-8ILulwjc.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, j as lineageOf, g as waitForSessionKey, d as archiveSession, k as analyzeLatestTurn, m as readSessionLog, n as TURN_WINDOW, p as userPromptText } from './sessionOps-gU88-W9F.mjs';
23
+ import { G as AgentProfilesStateSchema, a6 as ServerMigrateNoticeSchema, a7 as isHarnessInstallId, a8 as MODEL_INTENT_CONFIG, j as AUTOMATION_SUMMARY_MAX_CHARS, a9 as AUTOMATION_PRECHECK_OUTPUT_MAX_CHARS, aa as AUTOMATION_PRECHECK_DEFAULT_TIMEOUT_MS, d as AUTOMATION_PRECHECK_MAX_TIMEOUT_MS, ab as AUTOMATION_CLAIM_MAX_RUNS, ac as AUTOMATION_DAEMON_CAPABILITY_PRECHECK, ad as AUTOMATION_DEFAULT_LEASE_MS, i as isAutomationRunTerminal, ae as HARNESS_INSTALL_CAPABILITY_VERSION } from './index-DYD3GM1m.mjs';
23
24
  import fastify from 'fastify';
24
25
  import { z } from 'zod';
25
26
  import { validatorCompiler, serializerCompiler } from 'fastify-type-provider-zod';
@@ -27,64 +28,68 @@ import { d as decodeBase64, s as sameRelay, e as encodeBase64, h as decrypt } fr
27
28
  import { randomBytes, createHash, timingSafeEqual, randomUUID } from 'node:crypto';
28
29
  import { c as checkPreviewPath } from './previewPath-CXN4Vag0.mjs';
29
30
  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-j_qQk0KY.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-CwCe6tmJ.mjs';
31
+ import { b as sanitizeRateLimitReport } from './rateLimitWindows-Da5AR-4u.mjs';
32
+ import { f as formatEditConflictNotice, b as SESSION_PEER_SENT_FROM, s as sendPeerMessage, l as listPeerSessions, C as CLI_PEER_SENDER_ID } from './peerTools-CKJ-IDM4.mjs';
32
33
  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-BdnJ_n8C.mjs';
34
- import { assistantHome, bootstrapAssistantHome } from './bootstrap-rLaL3kTa.mjs';
35
- import { refreshAgentHomes, locateClaudeConversation, agentHomeSpawnEnv } from './index-DuK9XYbZ.mjs';
34
+ 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-CZ7aaNgj.mjs';
35
+ import { assistantHome, bootstrapAssistantHome } from './bootstrap-DaZ0Np7X.mjs';
36
+ import { refreshAgentHomes, locateClaudeConversation, agentHomeSpawnEnv } from './index-v5EmjT8l.mjs';
36
37
  import require$$0, { existsSync as existsSync$1, statSync as statSync$1, mkdtempSync, rmSync } from 'fs';
37
38
  import require$$1, { join as join$1 } from 'path';
38
39
  import { spawn as spawn$1, execFile, spawnSync } from 'node:child_process';
39
40
  import { p as projectPath } from './projectPath-BTBIMB57.mjs';
40
41
  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-CXRmFNOV.mjs';
42
+ 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-1HIIC7Bc.mjs';
42
43
  import { M as ModelConfigError, B as BackupStore, r as readConfigFile, s as sha256, a as atomicWriteFile } from './fileStore-5qpetZS0.mjs';
43
44
  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
45
  import require$$3 from 'crypto';
45
46
  import { c as commandOnPath } from './detectCLI-CSGMlV51.mjs';
46
- import { buildResumeLaunch } from './handleResumeCommand-BK9XKH_l.mjs';
47
+ import { buildResumeLaunch } from './handleResumeCommand-BGhVo3QH.mjs';
47
48
  import { n as normalizeWebPanels } from './webPanels-B2_C2-3g.mjs';
48
- import { $ as ServerMigrateNoticeSchema, a0 as isHarnessInstallId, a1 as MODEL_INTENT_CONFIG, f as AUTOMATION_SUMMARY_MAX_CHARS, a2 as AUTOMATION_PRECHECK_OUTPUT_MAX_CHARS, a3 as AUTOMATION_PRECHECK_DEFAULT_TIMEOUT_MS, c as AUTOMATION_PRECHECK_MAX_TIMEOUT_MS, a4 as AUTOMATION_CLAIM_MAX_RUNS, a5 as AUTOMATION_DAEMON_CAPABILITY_PRECHECK, a6 as AUTOMATION_DEFAULT_LEASE_MS, i as isAutomationRunTerminal, a7 as HARNESS_INSTALL_CAPABILITY_VERSION } from './index-Bq8NKSCF.mjs';
49
49
  import { access, symlink, readFile, rm, unlink, readlink, lstat, constants, rename, mkdir, copyFile, readdir, stat, open } from 'node:fs/promises';
50
50
  import { p as parseExactVersion, c as compareExactVersions, f as fetchCliUpdateState, r as resolveCliUpdateCheckInterval, D as DEFAULT_CLI_UPDATE_CHECK_INTERVAL_MS } from './cliUpdate-Y34VGe9Y.mjs';
51
- import { P as ProjectsUnsupportedError, c as createProjectsClient } from './client-Bi20Ka0h.mjs';
52
- 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 terminateProcess, n as terminateProcessTree, o as AUTO_RESTARTED_ENV, q as encodeAutoRestarted, u as resolveQuietMs, v as AUTO_RESTART_RECHECK_CAP_MS } from './sessionLock-G2PMqvsh.mjs';
53
- import { c as createAutomationsClient, i as isAutomationsUnavailable, d as AutomationsRequestError } from './client-BXD66ZF5.mjs';
51
+ import { P as ProjectsUnsupportedError, c as createProjectsClient } from './client-Bm4oKvW7.mjs';
52
+ 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 terminateProcess, n as terminateProcessTree, o as AUTO_RESTARTED_ENV, q as encodeAutoRestarted, u as pendingUpgradeVersion, v as resolveQuietMs, x as AUTO_RESTART_RECHECK_CAP_MS } from './sessionLock-Dl6i7IgA.mjs';
53
+ import { c as createAutomationsClient, i as isAutomationsUnavailable, d as AutomationsRequestError } from './client-Cxlp_D4I.mjs';
54
54
  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';
55
+ import { A as AccountService } from './accountService-Dd9uqde2.mjs';
56
+ import { spawnSetupTokenPty, watchAccountFiles } from './daemonAccounts-BJgt6IJe.mjs';
55
57
  import { g as getProjectPath } from './path-D2wdaNSk.mjs';
56
58
  import { b as extractClaudeEditPaths } from './editPaths-BVfS_FFL.mjs';
57
- import { s as startFileWatcher } from './startFileWatcher-CDO6fb2m.mjs';
58
- import { I as InvalidateSync } from './sync-C0PRuTMj.mjs';
59
+ import { s as startFileWatcher } from './startFileWatcher-DikVa8kg.mjs';
60
+ import { I as InvalidateSync } from './sync-JoEZKRo8.mjs';
59
61
  import { R as RawJSONLinesSchema } from './types-CkqAACXx.mjs';
60
62
  import { t as tmuxArgs, a as scrubTmuxClientEnv, s as shellescape } from './tmuxSocket-B8Yx20sT.mjs';
61
63
  import { findAllHappyProcesses } from './doctor-BPkYWSuq.mjs';
62
64
  import { T as TEAM_SKILL, a as TEAM_LEAD_PLAYBOOK, b as TEAM_MEMBER_RULES } from './resources-CLP_MpK4.mjs';
63
65
  import { promisify } from 'node:util';
64
- import { b as clipText, r as renderAction, c as clipAutomationReport, e as renderTemplate } from './template-DLR_0hfj.mjs';
66
+ import { b as clipText, r as renderAction, c as clipAutomationReport, e as renderTemplate } from './template-CJ8BWSsc.mjs';
65
67
  import { d as describeAgentHome } from './loginShellEnv-Dw8M7tkI.mjs';
66
- import './acpSessionResume-Bi7pA1n_.mjs';
67
- import './lidState-CD81ryTy.mjs';
68
+ import { S as SPAWN_ACCOUNT_ENV } from './store--XN-7MS0.mjs';
69
+ import './acpSessionResume-BWEUxNtC.mjs';
70
+ import './lidState-CZOXXdzv.mjs';
68
71
  import 'node:events';
69
72
  import 'socket.io-client';
70
- import './pushNotifications-XAM8__Pg.mjs';
73
+ import './pushNotifications-DkQ0yvFs.mjs';
71
74
  import './contentLogMetadata-BlWI0egu.mjs';
72
75
  import './limits-DIo7rEBR.mjs';
73
- import './time-D0jvDRhn.mjs';
74
- import './registerCommonHandlers-DRRfinzK.mjs';
76
+ import './time-bzmet4s5.mjs';
77
+ import './registerCommonHandlers-yQ7Ru-l0.mjs';
75
78
  import 'util';
76
79
  import 'cross-spawn';
77
80
  import '@paralleldrive/cuid2';
78
81
  import 'chalk';
79
82
  import 'node:module';
80
83
  import 'tweetnacl';
81
- import './browser-CHpVgyni.mjs';
84
+ import './browser-BUIaSHK2.mjs';
82
85
  import 'open';
83
86
  import './specialCommands-MXUN0wfI.mjs';
84
87
  import './ids-DU6sLx4C.mjs';
85
88
  import 'url';
86
- import './localHappyAgentAuth-Cg-m1lwm.mjs';
89
+ import './localHappyAgentAuth-YHxDZ4x4.mjs';
87
90
  import './processTreeSnapshot-CuLJDNC-.mjs';
91
+ import './claudeAccountEnv-ON24i0qv.mjs';
92
+ import 'node-pty';
88
93
  import 'ps-list';
89
94
 
90
95
  async function resolveRelaunchMetadata(snapshot, fetchServer) {
@@ -180,8 +185,34 @@ async function teamRelaunchEnv(input) {
180
185
  const DEFAULT_LOG_PRUNE_POLICY = {
181
186
  maxAgeMs: 14 * 24 * 60 * 6e4,
182
187
  maxTotalBytes: 200 * 1024 * 1024,
183
- keepRecentCount: 10
188
+ keepRecentCount: 10,
189
+ keepDaemonLogs: 3,
190
+ maxDaemonLogBytes: 64 * 1024 * 1024
184
191
  };
192
+ const DAEMON_LOG_SUFFIX = "-daemon.log";
193
+ function planDaemonLogRetention(files, policy = DEFAULT_LOG_PRUNE_POLICY, protectedPaths = /* @__PURE__ */ new Set()) {
194
+ const keep = /* @__PURE__ */ new Set();
195
+ let trim = null;
196
+ const count = policy.keepDaemonLogs ?? 0;
197
+ let budget = policy.maxDaemonLogBytes ?? 0;
198
+ if (count <= 0 || budget <= 0) return { keep, trim };
199
+ const daemonLogs = files.filter((f) => f.path.endsWith(DAEMON_LOG_SUFFIX) && !protectedPaths.has(f.path)).sort((a, b) => b.mtimeMs - a.mtimeMs);
200
+ for (const f of daemonLogs) {
201
+ if (keep.size >= count || budget <= 0) break;
202
+ if (keep.size === 0) {
203
+ keep.add(f.path);
204
+ if (f.size > budget) {
205
+ trim = { path: f.path, keepBytes: budget };
206
+ budget = 0;
207
+ } else budget -= f.size;
208
+ continue;
209
+ }
210
+ if (f.size > budget) break;
211
+ keep.add(f.path);
212
+ budget -= f.size;
213
+ }
214
+ return { keep, trim };
215
+ }
185
216
  function planLogPrune(files, now, policy = DEFAULT_LOG_PRUNE_POLICY, protectedPaths = /* @__PURE__ */ new Set()) {
186
217
  const sorted = [...files].sort((a, b) => b.mtimeMs - a.mtimeMs);
187
218
  const doomed = /* @__PURE__ */ new Set();
@@ -210,7 +241,9 @@ function pruneLogsDir(logsDir, protectedPaths = /* @__PURE__ */ new Set(), polic
210
241
  } catch {
211
242
  return 0;
212
243
  }
213
- const doomed = planLogPrune(files, Date.now(), policy, protectedPaths);
244
+ const daemonLogs = planDaemonLogRetention(files, policy, protectedPaths);
245
+ if (daemonLogs.trim) trimToTail(daemonLogs.trim.path, daemonLogs.trim.keepBytes);
246
+ const doomed = planLogPrune(files.filter((f) => !daemonLogs.keep.has(f.path)), Date.now(), policy, protectedPaths);
214
247
  let deleted = 0;
215
248
  for (const p of doomed) {
216
249
  try {
@@ -221,6 +254,36 @@ function pruneLogsDir(logsDir, protectedPaths = /* @__PURE__ */ new Set(), polic
221
254
  }
222
255
  return deleted;
223
256
  }
257
+ function trimToTail(path, keepBytes) {
258
+ let fd = null;
259
+ try {
260
+ const st = statSync(path);
261
+ if (st.size <= keepBytes) return;
262
+ const marker = Buffer.from(`[log trimmed to its last ${keepBytes} bytes by the daemon log retention]
263
+ `);
264
+ const tailBytes = Math.max(0, keepBytes - marker.length);
265
+ fd = openSync(path, "r+");
266
+ const tail = Buffer.alloc(tailBytes);
267
+ let read = 0;
268
+ while (read < tailBytes) {
269
+ const n = readSync(fd, tail, read, tailBytes - read, st.size - tailBytes + read);
270
+ if (n <= 0) break;
271
+ read += n;
272
+ }
273
+ writeSync(fd, marker, 0, marker.length, 0);
274
+ writeSync(fd, tail, 0, read, marker.length);
275
+ ftruncateSync(fd, marker.length + read);
276
+ closeSync(fd);
277
+ fd = null;
278
+ utimesSync(path, st.atime, st.mtime);
279
+ } catch {
280
+ } finally {
281
+ if (fd !== null) try {
282
+ closeSync(fd);
283
+ } catch {
284
+ }
285
+ }
286
+ }
224
287
 
225
288
  function createSpawnTimer(clock = Date.now) {
226
289
  const requestAt = clock();
@@ -506,6 +569,7 @@ function sanitizeResumeModel(value) {
506
569
  }
507
570
 
508
571
  const DEFAULT_MAX_RESTARTS = 3;
572
+ const DEFAULT_MAX_ACCOUNT_RESTARTS = 50;
509
573
  function decideRestart(priorAttempts, max = DEFAULT_MAX_RESTARTS) {
510
574
  if (priorAttempts >= max) {
511
575
  return {
@@ -562,6 +626,19 @@ const BackgroundTaskInfoSchema = z.object({
562
626
  description: z.string().max(BACKGROUND_TASK_DESCRIPTION_MAX + 1),
563
627
  startedAt: z.number()
564
628
  });
629
+ const AutoRestartStatusSchema = z.object({
630
+ state: z.string(),
631
+ reason: z.string().optional(),
632
+ since: z.number(),
633
+ target: z.string(),
634
+ offline: z.boolean().optional(),
635
+ retryAt: z.number().optional()
636
+ });
637
+ const DaemonListInfoSchema = z.object({
638
+ version: z.string(),
639
+ upgradePending: z.string().nullable(),
640
+ autoRestartEnabled: z.boolean()
641
+ });
565
642
  const BackgroundTasksReportSchema = z.object({
566
643
  count: z.number().int().nonnegative(),
567
644
  tasks: z.array(BackgroundTaskInfoSchema),
@@ -590,8 +667,11 @@ function startDaemonControlServer({
590
667
  onSessionEdit,
591
668
  listPeers,
592
669
  isTurnActive,
670
+ getAutoRestartStatus,
671
+ getDaemonInfo,
593
672
  onRateLimits,
594
- onHibernateCheck
673
+ onHibernateCheck,
674
+ getAgentProfiles
595
675
  }) {
596
676
  return new Promise((resolve) => {
597
677
  const app = fastify({
@@ -697,6 +777,16 @@ function startDaemonControlServer({
697
777
  }
698
778
  });
699
779
  }
780
+ typed.post("/agent-profiles", {
781
+ schema: { response: { 200: AgentProfilesStateSchema, 503: z.object({ error: z.string() }) } }
782
+ }, async (_request, reply) => {
783
+ const state = getAgentProfiles?.() ?? null;
784
+ if (!state) {
785
+ reply.code(503);
786
+ return { error: "accounts are not available in this daemon yet" };
787
+ }
788
+ return state;
789
+ });
700
790
  typed.post("/list", {
701
791
  schema: {
702
792
  response: {
@@ -707,8 +797,12 @@ function startDaemonControlServer({
707
797
  pid: z.number(),
708
798
  turnActive: z.boolean(),
709
799
  // B-507: in-flight background tasks per the wrapper's last report (lease-expired = count 0).
710
- backgroundTasks: BackgroundTasksReportSchema.optional()
711
- }))
800
+ backgroundTasks: BackgroundTasksReportSchema.optional(),
801
+ // B-856: the wrapper's own CLI version and its auto-restart status (null = nothing pending).
802
+ cliVersion: z.string().optional(),
803
+ autoRestart: AutoRestartStatusSchema.nullable().optional()
804
+ })),
805
+ daemon: DaemonListInfoSchema.optional()
712
806
  })
713
807
  }
714
808
  }
@@ -721,8 +815,11 @@ function startDaemonControlServer({
721
815
  happySessionId: child.happySessionId,
722
816
  pid: child.pid,
723
817
  turnActive: isTurnActive ? isTurnActive(child.happySessionId) : false,
724
- ...getBackgroundTasks ? { backgroundTasks: getBackgroundTasks(child.happySessionId) } : {}
725
- }))
818
+ ...getBackgroundTasks ? { backgroundTasks: getBackgroundTasks(child.happySessionId) } : {},
819
+ ...child.happySessionMetadataFromLocalWebhook?.version ? { cliVersion: child.happySessionMetadataFromLocalWebhook.version } : {},
820
+ ...getAutoRestartStatus ? { autoRestart: getAutoRestartStatus(child.happySessionId) ?? null } : {}
821
+ })),
822
+ ...getDaemonInfo ? { daemon: getDaemonInfo() } : {}
726
823
  };
727
824
  });
728
825
  typed.post("/stop-session", {
@@ -765,7 +862,9 @@ function startDaemonControlServer({
765
862
  // sends over the machine RPC. Old CLIs never send them.
766
863
  resumeClaudeSessionId: z.string().regex(/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i).optional(),
767
864
  resumeCodexThreadId: z.string().min(1).max(200).optional(),
768
- parentSessionId: z.string().min(1).max(200).optional()
865
+ parentSessionId: z.string().min(1).max(200).optional(),
866
+ // B-850a: `very-happy spawn --account` (null = machine login; absent = machine default).
867
+ agentProfileId: z.string().min(1).max(64).nullable().optional()
769
868
  }),
770
869
  response: {
771
870
  200: z.object({
@@ -790,13 +889,13 @@ function startDaemonControlServer({
790
889
  }
791
890
  }
792
891
  }, async (request, reply) => {
793
- const { directory, sessionId, agent, environmentVariables, variant, forceNew, permissionMode, spawnedBy, resumeClaudeSessionId, resumeCodexThreadId, parentSessionId } = request.body;
892
+ const { directory, sessionId, agent, environmentVariables, variant, forceNew, permissionMode, spawnedBy, resumeClaudeSessionId, resumeCodexThreadId, parentSessionId, agentProfileId } = request.body;
794
893
  if (!directory && variant !== "assistant") {
795
894
  reply.code(500);
796
895
  return { success: false, error: "directory is required" };
797
896
  }
798
897
  logger.debug(`[CONTROL SERVER] Spawn session request: dir=${directory}, sessionId=${sessionId || "new"}, agent=${agent || "default"}, variant=${variant || "none"}, forceNew=${forceNew === true}, spawnedBy=${spawnedBy || "unset"}`);
799
- const result = await spawnSession({ directory, sessionId, agent, environmentVariables, variant, forceNew, permissionMode, spawnedBy, resumeClaudeSessionId, resumeCodexThreadId, parentSessionId });
898
+ const result = await spawnSession({ directory, sessionId, agent, environmentVariables, variant, forceNew, permissionMode, spawnedBy, resumeClaudeSessionId, resumeCodexThreadId, parentSessionId, ...agentProfileId !== void 0 ? { agentProfileId } : {} });
800
899
  const resumed = Boolean(resumeClaudeSessionId || resumeCodexThreadId);
801
900
  switch (result.type) {
802
901
  case "success":
@@ -887,7 +986,7 @@ function startDaemonControlServer({
887
986
  return { success: false, error: "daemon is still starting up" };
888
987
  }
889
988
  logger.debug(`[CONTROL SERVER] Restart session request: ${sessionId}`);
890
- const result = await restartSession(sessionId, { keepPublishedPermissionMode: true });
989
+ const result = await restartSession(sessionId, { keepPublishedPermissionMode: true, account: true });
891
990
  switch (result.type) {
892
991
  case "success":
893
992
  return { success: true, sessionId: result.sessionId };
@@ -5334,6 +5433,12 @@ function createAutoRestart(deps) {
5334
5433
  setStatus(sessionId, { state: "waiting", reason: "turn-active", since, target: staleness.target });
5335
5434
  return;
5336
5435
  }
5436
+ const pending = deps.upgradePending?.() ?? null;
5437
+ if (pending) {
5438
+ deps.log?.(`[auto-restart] ${sessionId} left to the next daemon: upgrade to ${pending} pending`);
5439
+ setStatus(sessionId, { state: "waiting", reason: "upgrade-pending", since, target: staleness.target });
5440
+ return;
5441
+ }
5337
5442
  let result;
5338
5443
  try {
5339
5444
  result = await deps.restart(sessionId, staleness);
@@ -5423,6 +5528,7 @@ function createAutoRestart(deps) {
5423
5528
  automationRunning: deps.automationRunning(request.sessionId),
5424
5529
  resumable: false,
5425
5530
  attempt,
5531
+ upgradePending: deps.upgradePending?.() ?? null,
5426
5532
  inFlight,
5427
5533
  lastStartedAt
5428
5534
  };
@@ -5439,6 +5545,7 @@ function createAutoRestart(deps) {
5439
5545
  automationRunning: deps.automationRunning(request.sessionId),
5440
5546
  resumable,
5441
5547
  attempt: attempts.get(request.sessionId) ?? null,
5548
+ upgradePending: deps.upgradePending?.() ?? null,
5442
5549
  inFlight,
5443
5550
  lastStartedAt
5444
5551
  };
@@ -7656,6 +7763,7 @@ async function startDaemon() {
7656
7763
  const initialMachineMetadata = getInitialMachineMetadata();
7657
7764
  const startupCliAvailability = getStartupCliAvailability();
7658
7765
  let claudeAuthServiceRef = null;
7766
+ let accountServiceRef = null;
7659
7767
  let cliUpdateStateRef = null;
7660
7768
  let lastHandoverHold = null;
7661
7769
  let claudeCredentialStoreSetting = (await readSettings()).claudeCredentialStore === "file" ? "file" : "auto";
@@ -7784,6 +7892,7 @@ async function startDaemon() {
7784
7892
  const sessionIdToFinishedSession = /* @__PURE__ */ new Map();
7785
7893
  let teamWorker;
7786
7894
  let autoRestart;
7895
+ let bundleReplacedSeen = false;
7787
7896
  let automationRunner;
7788
7897
  let projectPresence;
7789
7898
  const persisted = readPersistedSessions();
@@ -8079,8 +8188,20 @@ async function startDaemon() {
8079
8188
  if (options.spawnedBy) {
8080
8189
  extraEnv.HAPPY_SPAWNED_BY = options.spawnedBy;
8081
8190
  }
8191
+ let spawnAccountId = null;
8192
+ delete extraEnv[SPAWN_ACCOUNT_ENV];
8193
+ if ((options.agent ?? "claude") === "claude" && accountServiceRef) {
8194
+ try {
8195
+ spawnAccountId = accountServiceRef.resolveSpawnAccount("claude", options.agentProfileId);
8196
+ } catch (error) {
8197
+ return { type: "error", errorMessage: error instanceof Error ? error.message : String(error) };
8198
+ }
8199
+ if (spawnAccountId) extraEnv[SPAWN_ACCOUNT_ENV] = spawnAccountId;
8200
+ } else if (options.agentProfileId) {
8201
+ return { type: "error", errorMessage: `agent-profile-unavailable:agent-mismatch: accounts are not supported for ${options.agent} yet` };
8202
+ }
8082
8203
  const claudeAuthStatus = claudeAuthServiceRef?.current()?.status;
8083
- if ((options.agent ?? "claude") === "claude" && claudeAuthStatus) {
8204
+ if ((options.agent ?? "claude") === "claude" && claudeAuthStatus && !spawnAccountId) {
8084
8205
  extraEnv.HAPPY_CLAUDE_AUTH_STATUS = claudeAuthStatus;
8085
8206
  }
8086
8207
  logger.debug(`[DAEMON RUN] Environment variable keys (before expansion) (${Object.keys(extraEnv).length}): ${Object.keys(extraEnv).join(", ")}`);
@@ -8524,6 +8645,7 @@ async function startDaemon() {
8524
8645
  }
8525
8646
  };
8526
8647
  const restartCounts = /* @__PURE__ */ new Map();
8648
+ const accountRestartCounts = /* @__PURE__ */ new Map();
8527
8649
  const autoRestartExits = /* @__PURE__ */ new Set();
8528
8650
  const stopSessionAndWait = async (happySessionId, timeoutMs = 8e3) => {
8529
8651
  const targets = /* @__PURE__ */ new Set();
@@ -8573,8 +8695,9 @@ async function startDaemon() {
8573
8695
  };
8574
8696
  const restartSessionImpl = async (happySessionId, options) => {
8575
8697
  try {
8576
- const prior = restartCounts.get(happySessionId) ?? 0;
8577
- const decision = options?.auto ? { allowed: true } : decideRestart(prior, DEFAULT_MAX_RESTARTS);
8698
+ const counts = options?.account ? accountRestartCounts : restartCounts;
8699
+ const prior = counts.get(happySessionId) ?? 0;
8700
+ const decision = options?.auto ? { allowed: true } : decideRestart(prior, options?.account ? DEFAULT_MAX_ACCOUNT_RESTARTS : DEFAULT_MAX_RESTARTS);
8578
8701
  if (!decision.allowed) {
8579
8702
  return { type: "error", errorMessage: `restart:${decision.reason}` };
8580
8703
  }
@@ -8625,7 +8748,7 @@ async function startDaemon() {
8625
8748
  if (model) args.push("--model", model);
8626
8749
  const permissionMode = sanitizeSpawnPermissionMode(options?.permissionMode ?? (options?.keepPublishedPermissionMode ? publishedRelaunchPermissionMode(metadata) : void 0));
8627
8750
  if (permissionMode) args.push("--permission-mode", permissionMode);
8628
- if (!options?.auto) restartCounts.set(happySessionId, recordRestartAttempt(prior));
8751
+ if (!options?.auto) counts.set(happySessionId, recordRestartAttempt(prior));
8629
8752
  const teamEnv = await teamRelaunchEnvFor(happySessionId, metadata);
8630
8753
  const result = await spawnTrackedHappyProcess({
8631
8754
  args,
@@ -8791,6 +8914,11 @@ async function startDaemon() {
8791
8914
  startedBy: metadata?.startedBy ?? null
8792
8915
  };
8793
8916
  };
8917
+ const upgradePending = () => pendingUpgradeVersion({
8918
+ daemonVersion: packageJson.version,
8919
+ autoUpdate: cliUpdateStateRef?.autoUpdate,
8920
+ bundleReplaced: bundleReplacedSeen
8921
+ });
8794
8922
  const autoRestartScheduler = createAutoRestart({
8795
8923
  enabled: () => autoRestartSetting,
8796
8924
  quietMs: resolveQuietMs(),
@@ -8845,6 +8973,7 @@ async function startDaemon() {
8845
8973
  if (!row || typeof row.active !== "boolean") return null;
8846
8974
  return { active: row.active, archived: row.archivedAt != null };
8847
8975
  },
8976
+ upgradePending,
8848
8977
  publish: (sessions) => {
8849
8978
  void apiMachineRef?.setAutoRestartSessions(sessions);
8850
8979
  },
@@ -8864,6 +8993,8 @@ async function startDaemon() {
8864
8993
  // B-501: `very-happy send --resume`
8865
8994
  restartSession,
8866
8995
  // B-794: `very-happy session provider`
8996
+ getAgentProfiles: () => accountServiceRef?.state() ?? null,
8997
+ // B-850a: `very-happy account list`
8867
8998
  requestShutdown: () => requestShutdown("happy-cli"),
8868
8999
  onHappySessionWebhook,
8869
9000
  onSessionStateEvent,
@@ -8891,6 +9022,9 @@ async function startDaemon() {
8891
9022
  // B-505: `daemon list` shows which sessions have a turn in flight, so an
8892
9023
  // operator can check the WHOLE machine before a supervised restart.
8893
9024
  isTurnActive: (sessionId) => turnActivity.activeSessions().includes(sessionId),
9025
+ // B-856: the auto-restart classification, readable locally (it is encrypted on the server).
9026
+ getAutoRestartStatus: (sessionId) => autoRestartScheduler.statuses()[sessionId],
9027
+ getDaemonInfo: () => ({ version: packageJson.version, upgradePending: upgradePending(), autoRestartEnabled: autoRestartSetting }),
8894
9028
  pushClipboard: (text, terminalId) => {
8895
9029
  if (!apiMachineRef) {
8896
9030
  return { delivered: false, truncated: false, totalBytes: 0, error: "daemon is still starting up" };
@@ -9045,6 +9179,27 @@ async function startDaemon() {
9045
9179
  return autoRestartSetting;
9046
9180
  });
9047
9181
  setTimeout(() => autoRestartScheduler.sweep(), 5e3).unref?.();
9182
+ const accountService = new AccountService({
9183
+ home: configuration.happyHomeDir,
9184
+ env: process.env,
9185
+ daemonPid: process.pid,
9186
+ spawnPty: (env) => spawnSetupTokenPty(os.homedir(), env),
9187
+ restartSession: async (sessionId) => {
9188
+ const result = await restartSession(sessionId, { keepPublishedPermissionMode: true, account: true });
9189
+ if (result.type === "success") return { ok: true };
9190
+ const error = result.type === "error" ? result.errorMessage : "unexpected restart result";
9191
+ const stillRunning = [...pidToTrackedSession.values()].some((s) => s.happySessionId === sessionId && isPidAlive(s.pid));
9192
+ return { ok: false, notRunning: error.startsWith("restart-precheck:not-tracked"), stillRunning, error };
9193
+ },
9194
+ onChanged: () => {
9195
+ void apiMachine.publishAgentProfiles();
9196
+ }
9197
+ });
9198
+ accountServiceRef = accountService;
9199
+ apiMachine.setAgentProfileService(accountService);
9200
+ const stopAccountWatch = watchAccountFiles(configuration.happyHomeDir, () => {
9201
+ void apiMachine.publishAgentProfiles();
9202
+ });
9048
9203
  const webPanelsSync = startWebPanelsSync({
9049
9204
  statMtime: async () => (await fs.stat(configuration.settingsFile).catch(() => null))?.mtimeMs ?? null,
9050
9205
  readRaw: async () => (await readSettings()).webPanels,
@@ -9179,6 +9334,7 @@ async function startDaemon() {
9179
9334
  try {
9180
9335
  const currentMtimeMs = statSync$1(bundlePath).mtimeMs;
9181
9336
  bundleReplaced = currentMtimeMs !== initialBundleMtimeMs;
9337
+ if (bundleReplaced) bundleReplacedSeen = true;
9182
9338
  } catch {
9183
9339
  }
9184
9340
  }
@@ -9205,6 +9361,8 @@ async function startDaemon() {
9205
9361
  policyAnnouncements.stop();
9206
9362
  stopAgentVersionChecks();
9207
9363
  claudeAuthService.stop();
9364
+ stopAccountWatch();
9365
+ accountService.dispose();
9208
9366
  apiMachine.shutdown();
9209
9367
  await stopControlServer();
9210
9368
  await cleanupDaemonState();
@@ -9336,6 +9494,8 @@ async function startDaemon() {
9336
9494
  } catch (error) {
9337
9495
  logger.debug("[DAEMON RUN] Mirror shutdown failed:", error);
9338
9496
  }
9497
+ stopAccountWatch();
9498
+ accountService.dispose();
9339
9499
  apiMachine.shutdown();
9340
9500
  await stopControlServer();
9341
9501
  await cleanupDaemonState();