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,27 +1,28 @@
1
1
  'use strict';
2
2
 
3
- var mirrorProtocol = require('./mirrorProtocol-Dfl8Ahyf.cjs');
3
+ var mirrorProtocol = require('./mirrorProtocol-DVnB8EO8.cjs');
4
4
  var fsMkdir = require('./fsMkdir-0K3yENml.cjs');
5
- var piRunnerArgs = require('./piRunnerArgs-BnFU0K73.cjs');
5
+ var piRunnerArgs = require('./piRunnerArgs-BOkfxyak.cjs');
6
6
  var fs = require('fs/promises');
7
7
  var os$1 = require('os');
8
8
  var tmp = require('tmp');
9
9
  var axios = require('axios');
10
10
  var node_fs = require('node:fs');
11
11
  var path = require('node:path');
12
- var configuration = require('./configuration-DfPBa-9d.cjs');
13
- var api = require('./api-BBxZ7y2z.cjs');
14
- var spawnAgents = require('./spawnAgents-CtkkIFHd.cjs');
15
- var logger = require('./logger-Ct2zvaq0.cjs');
16
- var index$2 = require('./index-CmZusg8Q.cjs');
17
- var auth = require('./auth-DnxoVkkf.cjs');
12
+ var configuration = require('./configuration-CXEVKAyF.cjs');
13
+ var api = require('./api-hMDsC6Wg.cjs');
14
+ var spawnAgents = require('./spawnAgents-CClb7buD.cjs');
15
+ var logger = require('./logger-8su64lqR.cjs');
16
+ var index$2 = require('./index-CQ_hLLCj.cjs');
17
+ var auth = require('./auth-C9NvNHhL.cjs');
18
18
  var child_process = require('child_process');
19
- var _package = require('./package-9n7wd2dT.cjs');
20
- var doctor = require('./doctor-BEU0_1Xv.cjs');
21
- var spawnHappyCLI = require('./spawnHappyCLI-CF_gLi92.cjs');
22
- var persistence = require('./persistence-A2NeERZJ.cjs');
23
- var controlClient = require('./controlClient-C13_pSKG.cjs');
24
- var sessionOps = require('./sessionOps-DXlTmS7J.cjs');
19
+ var _package = require('./package-iuLlSiSF.cjs');
20
+ var doctor = require('./doctor-FgUYTbAT.cjs');
21
+ var spawnHappyCLI = require('./spawnHappyCLI-DJdhX_Qx.cjs');
22
+ var persistence = require('./persistence-B4ttN-fR.cjs');
23
+ var controlClient = require('./controlClient-j7p5p3_7.cjs');
24
+ var sessionOps = require('./sessionOps-DvnEH4PL.cjs');
25
+ var index = require('./index-BzAYnYct.cjs');
25
26
  var fastify = require('fastify');
26
27
  var z = require('zod');
27
28
  var fastifyTypeProviderZod = require('fastify-type-provider-zod');
@@ -29,64 +30,68 @@ var authRelay = require('./authRelay-Dy1qU9td.cjs');
29
30
  var node_crypto = require('node:crypto');
30
31
  var previewPath = require('./previewPath-B0rBdhy1.cjs');
31
32
  var backgroundTaskActivity = require('./backgroundTaskActivity-CBvUdj39.cjs');
32
- var rateLimitWindows = require('./rateLimitWindows-B2Kx6L0S.cjs');
33
- var peerTools = require('./peerTools-CElYh-5u.cjs');
33
+ var rateLimitWindows = require('./rateLimitWindows-DBfiuYeg.cjs');
34
+ var peerTools = require('./peerTools-CANTX_mG.cjs');
34
35
  var os = require('node:os');
35
- var remoteSessionClient = require('./remoteSessionClient-6ymeMVa4.cjs');
36
- var bootstrap = require('./bootstrap-sly4qPPY.cjs');
37
- var index$1 = require('./index-D3c7CLot.cjs');
36
+ var remoteSessionClient = require('./remoteSessionClient-iJMXRN_D.cjs');
37
+ var bootstrap = require('./bootstrap-DsZGc69k.cjs');
38
+ var index$1 = require('./index-CZaLMmPC.cjs');
38
39
  var require$$0 = require('fs');
39
40
  var require$$1 = require('path');
40
41
  var node_child_process = require('node:child_process');
41
42
  var projectPath = require('./projectPath-C3ioB4Bu.cjs');
42
43
  var doctorReadiness = require('./doctorReadiness-Dl6yRQCy.cjs');
43
- var machineMetadata = require('./machineMetadata-DDCVWb_x.cjs');
44
+ var machineMetadata = require('./machineMetadata-DYXt3p6u.cjs');
44
45
  var fileStore = require('./fileStore-7qhnbs6N.cjs');
45
46
  var pi = require('./pi-DlsrPCTa.cjs');
46
47
  var require$$3 = require('crypto');
47
48
  var detectCLI = require('./detectCLI-BuYR_Qxe.cjs');
48
- var handleResumeCommand = require('./handleResumeCommand-Dj7oi2KO.cjs');
49
+ var handleResumeCommand = require('./handleResumeCommand-Cl9GIL5F.cjs');
49
50
  var webPanels = require('./webPanels-FCgFKvVe.cjs');
50
- var index = require('./index-CLUHaPU8.cjs');
51
51
  var promises = require('node:fs/promises');
52
52
  var cliUpdate = require('./cliUpdate-DsKXPFYp.cjs');
53
- var client = require('./client-C5-C0t2a.cjs');
54
- var sessionLock = require('./sessionLock-BmLA2S8K.cjs');
55
- var client$1 = require('./client-BscskEBk.cjs');
53
+ var client = require('./client-D8XROyZc.cjs');
54
+ var sessionLock = require('./sessionLock-BDtSzzKS.cjs');
55
+ var client$1 = require('./client-Crh8_cNx.cjs');
56
56
  var daemonSupervisor = require('./daemonSupervisor-alqGPANc.cjs');
57
+ var accountService = require('./accountService-Bddy0zwL.cjs');
58
+ var daemonAccounts = require('./daemonAccounts-BCjDgoNt.cjs');
57
59
  var path$1 = require('./path-B7zW-WwE.cjs');
58
60
  var editPaths = require('./editPaths-Bqp4OFPw.cjs');
59
- var startFileWatcher = require('./startFileWatcher-9Stpxe7p.cjs');
60
- var sync = require('./sync-Ba8N6xba.cjs');
61
+ var startFileWatcher = require('./startFileWatcher-LnOmVW6H.cjs');
62
+ var sync = require('./sync-_2lsZ1U2.cjs');
61
63
  var types = require('./types-CRS-srZK.cjs');
62
64
  var tmuxSocket = require('./tmuxSocket-D-Xt6Vn-.cjs');
63
65
  var doctor$1 = require('./doctor-u46qYYKX.cjs');
64
66
  var resources = require('./resources-BZ_Be0qM.cjs');
65
67
  var node_util = require('node:util');
66
- var template = require('./template-B_5l6pkc.cjs');
68
+ var template = require('./template-LgvBbOna.cjs');
67
69
  var loginShellEnv = require('./loginShellEnv-BkuYtExZ.cjs');
68
- require('./acpSessionResume-TvP_4Zq2.cjs');
69
- require('./lidState-C9_DoF9i.cjs');
70
+ var store = require('./store-DV__wCvP.cjs');
71
+ require('./acpSessionResume-BnHDk5eD.cjs');
72
+ require('./lidState-DqoN7zH4.cjs');
70
73
  require('node:events');
71
74
  require('socket.io-client');
72
- require('./pushNotifications-23YSd-0l.cjs');
75
+ require('./pushNotifications-BqFoLye2.cjs');
73
76
  require('./contentLogMetadata-ZSFk_NjQ.cjs');
74
77
  require('./limits-C-a7gr04.cjs');
75
- require('./time-Cy0a-7YX.cjs');
76
- require('./registerCommonHandlers-D1MiSfcB.cjs');
78
+ require('./time-CaUlWSNJ.cjs');
79
+ require('./registerCommonHandlers-m6pxxf2J.cjs');
77
80
  require('util');
78
81
  require('cross-spawn');
79
82
  require('@paralleldrive/cuid2');
80
83
  require('chalk');
81
84
  require('node:module');
82
85
  require('tweetnacl');
83
- require('./browser-BTgZ9d4i.cjs');
86
+ require('./browser-Ft0ASDm7.cjs');
84
87
  require('open');
85
88
  require('./specialCommands-J3JFOq0J.cjs');
86
89
  require('./ids-B6ZC0HGt.cjs');
87
90
  require('url');
88
- require('./localHappyAgentAuth-CCjUvOfi.cjs');
91
+ require('./localHappyAgentAuth-BnGCpHRX.cjs');
89
92
  require('./processTreeSnapshot-mDbnuojn.cjs');
93
+ require('./claudeAccountEnv-BOBpJ3k8.cjs');
94
+ require('node-pty');
90
95
  require('ps-list');
91
96
 
92
97
  function _interopNamespaceDefault(e) {
@@ -201,8 +206,34 @@ async function teamRelaunchEnv(input) {
201
206
  const DEFAULT_LOG_PRUNE_POLICY = {
202
207
  maxAgeMs: 14 * 24 * 60 * 6e4,
203
208
  maxTotalBytes: 200 * 1024 * 1024,
204
- keepRecentCount: 10
209
+ keepRecentCount: 10,
210
+ keepDaemonLogs: 3,
211
+ maxDaemonLogBytes: 64 * 1024 * 1024
205
212
  };
213
+ const DAEMON_LOG_SUFFIX = "-daemon.log";
214
+ function planDaemonLogRetention(files, policy = DEFAULT_LOG_PRUNE_POLICY, protectedPaths = /* @__PURE__ */ new Set()) {
215
+ const keep = /* @__PURE__ */ new Set();
216
+ let trim = null;
217
+ const count = policy.keepDaemonLogs ?? 0;
218
+ let budget = policy.maxDaemonLogBytes ?? 0;
219
+ if (count <= 0 || budget <= 0) return { keep, trim };
220
+ const daemonLogs = files.filter((f) => f.path.endsWith(DAEMON_LOG_SUFFIX) && !protectedPaths.has(f.path)).sort((a, b) => b.mtimeMs - a.mtimeMs);
221
+ for (const f of daemonLogs) {
222
+ if (keep.size >= count || budget <= 0) break;
223
+ if (keep.size === 0) {
224
+ keep.add(f.path);
225
+ if (f.size > budget) {
226
+ trim = { path: f.path, keepBytes: budget };
227
+ budget = 0;
228
+ } else budget -= f.size;
229
+ continue;
230
+ }
231
+ if (f.size > budget) break;
232
+ keep.add(f.path);
233
+ budget -= f.size;
234
+ }
235
+ return { keep, trim };
236
+ }
206
237
  function planLogPrune(files, now, policy = DEFAULT_LOG_PRUNE_POLICY, protectedPaths = /* @__PURE__ */ new Set()) {
207
238
  const sorted = [...files].sort((a, b) => b.mtimeMs - a.mtimeMs);
208
239
  const doomed = /* @__PURE__ */ new Set();
@@ -231,7 +262,9 @@ function pruneLogsDir(logsDir, protectedPaths = /* @__PURE__ */ new Set(), polic
231
262
  } catch {
232
263
  return 0;
233
264
  }
234
- const doomed = planLogPrune(files, Date.now(), policy, protectedPaths);
265
+ const daemonLogs = planDaemonLogRetention(files, policy, protectedPaths);
266
+ if (daemonLogs.trim) trimToTail(daemonLogs.trim.path, daemonLogs.trim.keepBytes);
267
+ const doomed = planLogPrune(files.filter((f) => !daemonLogs.keep.has(f.path)), Date.now(), policy, protectedPaths);
235
268
  let deleted = 0;
236
269
  for (const p of doomed) {
237
270
  try {
@@ -242,6 +275,36 @@ function pruneLogsDir(logsDir, protectedPaths = /* @__PURE__ */ new Set(), polic
242
275
  }
243
276
  return deleted;
244
277
  }
278
+ function trimToTail(path, keepBytes) {
279
+ let fd = null;
280
+ try {
281
+ const st = node_fs.statSync(path);
282
+ if (st.size <= keepBytes) return;
283
+ const marker = Buffer.from(`[log trimmed to its last ${keepBytes} bytes by the daemon log retention]
284
+ `);
285
+ const tailBytes = Math.max(0, keepBytes - marker.length);
286
+ fd = node_fs.openSync(path, "r+");
287
+ const tail = Buffer.alloc(tailBytes);
288
+ let read = 0;
289
+ while (read < tailBytes) {
290
+ const n = node_fs.readSync(fd, tail, read, tailBytes - read, st.size - tailBytes + read);
291
+ if (n <= 0) break;
292
+ read += n;
293
+ }
294
+ node_fs.writeSync(fd, marker, 0, marker.length, 0);
295
+ node_fs.writeSync(fd, tail, 0, read, marker.length);
296
+ node_fs.ftruncateSync(fd, marker.length + read);
297
+ node_fs.closeSync(fd);
298
+ fd = null;
299
+ node_fs.utimesSync(path, st.atime, st.mtime);
300
+ } catch {
301
+ } finally {
302
+ if (fd !== null) try {
303
+ node_fs.closeSync(fd);
304
+ } catch {
305
+ }
306
+ }
307
+ }
245
308
 
246
309
  function createSpawnTimer(clock = Date.now) {
247
310
  const requestAt = clock();
@@ -527,6 +590,7 @@ function sanitizeResumeModel(value) {
527
590
  }
528
591
 
529
592
  const DEFAULT_MAX_RESTARTS = 3;
593
+ const DEFAULT_MAX_ACCOUNT_RESTARTS = 50;
530
594
  function decideRestart(priorAttempts, max = DEFAULT_MAX_RESTARTS) {
531
595
  if (priorAttempts >= max) {
532
596
  return {
@@ -583,6 +647,19 @@ const BackgroundTaskInfoSchema = z.z.object({
583
647
  description: z.z.string().max(backgroundTaskActivity.BACKGROUND_TASK_DESCRIPTION_MAX + 1),
584
648
  startedAt: z.z.number()
585
649
  });
650
+ const AutoRestartStatusSchema = z.z.object({
651
+ state: z.z.string(),
652
+ reason: z.z.string().optional(),
653
+ since: z.z.number(),
654
+ target: z.z.string(),
655
+ offline: z.z.boolean().optional(),
656
+ retryAt: z.z.number().optional()
657
+ });
658
+ const DaemonListInfoSchema = z.z.object({
659
+ version: z.z.string(),
660
+ upgradePending: z.z.string().nullable(),
661
+ autoRestartEnabled: z.z.boolean()
662
+ });
586
663
  const BackgroundTasksReportSchema = z.z.object({
587
664
  count: z.z.number().int().nonnegative(),
588
665
  tasks: z.z.array(BackgroundTaskInfoSchema),
@@ -611,8 +688,11 @@ function startDaemonControlServer({
611
688
  onSessionEdit,
612
689
  listPeers,
613
690
  isTurnActive,
691
+ getAutoRestartStatus,
692
+ getDaemonInfo,
614
693
  onRateLimits,
615
- onHibernateCheck
694
+ onHibernateCheck,
695
+ getAgentProfiles
616
696
  }) {
617
697
  return new Promise((resolve) => {
618
698
  const app = fastify({
@@ -718,6 +798,16 @@ function startDaemonControlServer({
718
798
  }
719
799
  });
720
800
  }
801
+ typed.post("/agent-profiles", {
802
+ schema: { response: { 200: index.AgentProfilesStateSchema, 503: z.z.object({ error: z.z.string() }) } }
803
+ }, async (_request, reply) => {
804
+ const state = getAgentProfiles?.() ?? null;
805
+ if (!state) {
806
+ reply.code(503);
807
+ return { error: "accounts are not available in this daemon yet" };
808
+ }
809
+ return state;
810
+ });
721
811
  typed.post("/list", {
722
812
  schema: {
723
813
  response: {
@@ -728,8 +818,12 @@ function startDaemonControlServer({
728
818
  pid: z.z.number(),
729
819
  turnActive: z.z.boolean(),
730
820
  // B-507: in-flight background tasks per the wrapper's last report (lease-expired = count 0).
731
- backgroundTasks: BackgroundTasksReportSchema.optional()
732
- }))
821
+ backgroundTasks: BackgroundTasksReportSchema.optional(),
822
+ // B-856: the wrapper's own CLI version and its auto-restart status (null = nothing pending).
823
+ cliVersion: z.z.string().optional(),
824
+ autoRestart: AutoRestartStatusSchema.nullable().optional()
825
+ })),
826
+ daemon: DaemonListInfoSchema.optional()
733
827
  })
734
828
  }
735
829
  }
@@ -742,8 +836,11 @@ function startDaemonControlServer({
742
836
  happySessionId: child.happySessionId,
743
837
  pid: child.pid,
744
838
  turnActive: isTurnActive ? isTurnActive(child.happySessionId) : false,
745
- ...getBackgroundTasks ? { backgroundTasks: getBackgroundTasks(child.happySessionId) } : {}
746
- }))
839
+ ...getBackgroundTasks ? { backgroundTasks: getBackgroundTasks(child.happySessionId) } : {},
840
+ ...child.happySessionMetadataFromLocalWebhook?.version ? { cliVersion: child.happySessionMetadataFromLocalWebhook.version } : {},
841
+ ...getAutoRestartStatus ? { autoRestart: getAutoRestartStatus(child.happySessionId) ?? null } : {}
842
+ })),
843
+ ...getDaemonInfo ? { daemon: getDaemonInfo() } : {}
747
844
  };
748
845
  });
749
846
  typed.post("/stop-session", {
@@ -786,7 +883,9 @@ function startDaemonControlServer({
786
883
  // sends over the machine RPC. Old CLIs never send them.
787
884
  resumeClaudeSessionId: z.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(),
788
885
  resumeCodexThreadId: z.z.string().min(1).max(200).optional(),
789
- parentSessionId: z.z.string().min(1).max(200).optional()
886
+ parentSessionId: z.z.string().min(1).max(200).optional(),
887
+ // B-850a: `very-happy spawn --account` (null = machine login; absent = machine default).
888
+ agentProfileId: z.z.string().min(1).max(64).nullable().optional()
790
889
  }),
791
890
  response: {
792
891
  200: z.z.object({
@@ -811,13 +910,13 @@ function startDaemonControlServer({
811
910
  }
812
911
  }
813
912
  }, async (request, reply) => {
814
- const { directory, sessionId, agent, environmentVariables, variant, forceNew, permissionMode, spawnedBy, resumeClaudeSessionId, resumeCodexThreadId, parentSessionId } = request.body;
913
+ const { directory, sessionId, agent, environmentVariables, variant, forceNew, permissionMode, spawnedBy, resumeClaudeSessionId, resumeCodexThreadId, parentSessionId, agentProfileId } = request.body;
815
914
  if (!directory && variant !== "assistant") {
816
915
  reply.code(500);
817
916
  return { success: false, error: "directory is required" };
818
917
  }
819
918
  logger.logger.debug(`[CONTROL SERVER] Spawn session request: dir=${directory}, sessionId=${sessionId || "new"}, agent=${agent || "default"}, variant=${variant || "none"}, forceNew=${forceNew === true}, spawnedBy=${spawnedBy || "unset"}`);
820
- const result = await spawnSession({ directory, sessionId, agent, environmentVariables, variant, forceNew, permissionMode, spawnedBy, resumeClaudeSessionId, resumeCodexThreadId, parentSessionId });
919
+ const result = await spawnSession({ directory, sessionId, agent, environmentVariables, variant, forceNew, permissionMode, spawnedBy, resumeClaudeSessionId, resumeCodexThreadId, parentSessionId, ...agentProfileId !== void 0 ? { agentProfileId } : {} });
821
920
  const resumed = Boolean(resumeClaudeSessionId || resumeCodexThreadId);
822
921
  switch (result.type) {
823
922
  case "success":
@@ -908,7 +1007,7 @@ function startDaemonControlServer({
908
1007
  return { success: false, error: "daemon is still starting up" };
909
1008
  }
910
1009
  logger.logger.debug(`[CONTROL SERVER] Restart session request: ${sessionId}`);
911
- const result = await restartSession(sessionId, { keepPublishedPermissionMode: true });
1010
+ const result = await restartSession(sessionId, { keepPublishedPermissionMode: true, account: true });
912
1011
  switch (result.type) {
913
1012
  case "success":
914
1013
  return { success: true, sessionId: result.sessionId };
@@ -5355,6 +5454,12 @@ function createAutoRestart(deps) {
5355
5454
  setStatus(sessionId, { state: "waiting", reason: "turn-active", since, target: staleness.target });
5356
5455
  return;
5357
5456
  }
5457
+ const pending = deps.upgradePending?.() ?? null;
5458
+ if (pending) {
5459
+ deps.log?.(`[auto-restart] ${sessionId} left to the next daemon: upgrade to ${pending} pending`);
5460
+ setStatus(sessionId, { state: "waiting", reason: "upgrade-pending", since, target: staleness.target });
5461
+ return;
5462
+ }
5358
5463
  let result;
5359
5464
  try {
5360
5465
  result = await deps.restart(sessionId, staleness);
@@ -5444,6 +5549,7 @@ function createAutoRestart(deps) {
5444
5549
  automationRunning: deps.automationRunning(request.sessionId),
5445
5550
  resumable: false,
5446
5551
  attempt,
5552
+ upgradePending: deps.upgradePending?.() ?? null,
5447
5553
  inFlight,
5448
5554
  lastStartedAt
5449
5555
  };
@@ -5460,6 +5566,7 @@ function createAutoRestart(deps) {
5460
5566
  automationRunning: deps.automationRunning(request.sessionId),
5461
5567
  resumable,
5462
5568
  attempt: attempts.get(request.sessionId) ?? null,
5569
+ upgradePending: deps.upgradePending?.() ?? null,
5463
5570
  inFlight,
5464
5571
  lastStartedAt
5465
5572
  };
@@ -7677,6 +7784,7 @@ async function startDaemon() {
7677
7784
  const initialMachineMetadata = machineMetadata.getInitialMachineMetadata();
7678
7785
  const startupCliAvailability = machineMetadata.getStartupCliAvailability();
7679
7786
  let claudeAuthServiceRef = null;
7787
+ let accountServiceRef = null;
7680
7788
  let cliUpdateStateRef = null;
7681
7789
  let lastHandoverHold = null;
7682
7790
  let claudeCredentialStoreSetting = (await persistence.readSettings()).claudeCredentialStore === "file" ? "file" : "auto";
@@ -7805,6 +7913,7 @@ async function startDaemon() {
7805
7913
  const sessionIdToFinishedSession = /* @__PURE__ */ new Map();
7806
7914
  let teamWorker;
7807
7915
  let autoRestart;
7916
+ let bundleReplacedSeen = false;
7808
7917
  let automationRunner;
7809
7918
  let projectPresence;
7810
7919
  const persisted = persistence.readPersistedSessions();
@@ -8100,8 +8209,20 @@ async function startDaemon() {
8100
8209
  if (options.spawnedBy) {
8101
8210
  extraEnv.HAPPY_SPAWNED_BY = options.spawnedBy;
8102
8211
  }
8212
+ let spawnAccountId = null;
8213
+ delete extraEnv[store.SPAWN_ACCOUNT_ENV];
8214
+ if ((options.agent ?? "claude") === "claude" && accountServiceRef) {
8215
+ try {
8216
+ spawnAccountId = accountServiceRef.resolveSpawnAccount("claude", options.agentProfileId);
8217
+ } catch (error) {
8218
+ return { type: "error", errorMessage: error instanceof Error ? error.message : String(error) };
8219
+ }
8220
+ if (spawnAccountId) extraEnv[store.SPAWN_ACCOUNT_ENV] = spawnAccountId;
8221
+ } else if (options.agentProfileId) {
8222
+ return { type: "error", errorMessage: `agent-profile-unavailable:agent-mismatch: accounts are not supported for ${options.agent} yet` };
8223
+ }
8103
8224
  const claudeAuthStatus = claudeAuthServiceRef?.current()?.status;
8104
- if ((options.agent ?? "claude") === "claude" && claudeAuthStatus) {
8225
+ if ((options.agent ?? "claude") === "claude" && claudeAuthStatus && !spawnAccountId) {
8105
8226
  extraEnv.HAPPY_CLAUDE_AUTH_STATUS = claudeAuthStatus;
8106
8227
  }
8107
8228
  logger.logger.debug(`[DAEMON RUN] Environment variable keys (before expansion) (${Object.keys(extraEnv).length}): ${Object.keys(extraEnv).join(", ")}`);
@@ -8545,6 +8666,7 @@ async function startDaemon() {
8545
8666
  }
8546
8667
  };
8547
8668
  const restartCounts = /* @__PURE__ */ new Map();
8669
+ const accountRestartCounts = /* @__PURE__ */ new Map();
8548
8670
  const autoRestartExits = /* @__PURE__ */ new Set();
8549
8671
  const stopSessionAndWait = async (happySessionId, timeoutMs = 8e3) => {
8550
8672
  const targets = /* @__PURE__ */ new Set();
@@ -8594,8 +8716,9 @@ async function startDaemon() {
8594
8716
  };
8595
8717
  const restartSessionImpl = async (happySessionId, options) => {
8596
8718
  try {
8597
- const prior = restartCounts.get(happySessionId) ?? 0;
8598
- const decision = options?.auto ? { allowed: true } : decideRestart(prior, DEFAULT_MAX_RESTARTS);
8719
+ const counts = options?.account ? accountRestartCounts : restartCounts;
8720
+ const prior = counts.get(happySessionId) ?? 0;
8721
+ const decision = options?.auto ? { allowed: true } : decideRestart(prior, options?.account ? DEFAULT_MAX_ACCOUNT_RESTARTS : DEFAULT_MAX_RESTARTS);
8599
8722
  if (!decision.allowed) {
8600
8723
  return { type: "error", errorMessage: `restart:${decision.reason}` };
8601
8724
  }
@@ -8646,7 +8769,7 @@ async function startDaemon() {
8646
8769
  if (model) args.push("--model", model);
8647
8770
  const permissionMode = spawnAgents.sanitizeSpawnPermissionMode(options?.permissionMode ?? (options?.keepPublishedPermissionMode ? publishedRelaunchPermissionMode(metadata) : void 0));
8648
8771
  if (permissionMode) args.push("--permission-mode", permissionMode);
8649
- if (!options?.auto) restartCounts.set(happySessionId, recordRestartAttempt(prior));
8772
+ if (!options?.auto) counts.set(happySessionId, recordRestartAttempt(prior));
8650
8773
  const teamEnv = await teamRelaunchEnvFor(happySessionId, metadata);
8651
8774
  const result = await spawnTrackedHappyProcess({
8652
8775
  args,
@@ -8812,6 +8935,11 @@ async function startDaemon() {
8812
8935
  startedBy: metadata?.startedBy ?? null
8813
8936
  };
8814
8937
  };
8938
+ const upgradePending = () => sessionLock.pendingUpgradeVersion({
8939
+ daemonVersion: _package.packageJson.version,
8940
+ autoUpdate: cliUpdateStateRef?.autoUpdate,
8941
+ bundleReplaced: bundleReplacedSeen
8942
+ });
8815
8943
  const autoRestartScheduler = createAutoRestart({
8816
8944
  enabled: () => autoRestartSetting,
8817
8945
  quietMs: sessionLock.resolveQuietMs(),
@@ -8866,6 +8994,7 @@ async function startDaemon() {
8866
8994
  if (!row || typeof row.active !== "boolean") return null;
8867
8995
  return { active: row.active, archived: row.archivedAt != null };
8868
8996
  },
8997
+ upgradePending,
8869
8998
  publish: (sessions) => {
8870
8999
  void apiMachineRef?.setAutoRestartSessions(sessions);
8871
9000
  },
@@ -8885,6 +9014,8 @@ async function startDaemon() {
8885
9014
  // B-501: `very-happy send --resume`
8886
9015
  restartSession,
8887
9016
  // B-794: `very-happy session provider`
9017
+ getAgentProfiles: () => accountServiceRef?.state() ?? null,
9018
+ // B-850a: `very-happy account list`
8888
9019
  requestShutdown: () => requestShutdown("happy-cli"),
8889
9020
  onHappySessionWebhook,
8890
9021
  onSessionStateEvent,
@@ -8912,6 +9043,9 @@ async function startDaemon() {
8912
9043
  // B-505: `daemon list` shows which sessions have a turn in flight, so an
8913
9044
  // operator can check the WHOLE machine before a supervised restart.
8914
9045
  isTurnActive: (sessionId) => turnActivity.activeSessions().includes(sessionId),
9046
+ // B-856: the auto-restart classification, readable locally (it is encrypted on the server).
9047
+ getAutoRestartStatus: (sessionId) => autoRestartScheduler.statuses()[sessionId],
9048
+ getDaemonInfo: () => ({ version: _package.packageJson.version, upgradePending: upgradePending(), autoRestartEnabled: autoRestartSetting }),
8915
9049
  pushClipboard: (text, terminalId) => {
8916
9050
  if (!apiMachineRef) {
8917
9051
  return { delivered: false, truncated: false, totalBytes: 0, error: "daemon is still starting up" };
@@ -9066,6 +9200,27 @@ async function startDaemon() {
9066
9200
  return autoRestartSetting;
9067
9201
  });
9068
9202
  setTimeout(() => autoRestartScheduler.sweep(), 5e3).unref?.();
9203
+ const accountService$1 = new accountService.AccountService({
9204
+ home: configuration.configuration.happyHomeDir,
9205
+ env: process.env,
9206
+ daemonPid: process.pid,
9207
+ spawnPty: (env) => daemonAccounts.spawnSetupTokenPty(os$1.homedir(), env),
9208
+ restartSession: async (sessionId) => {
9209
+ const result = await restartSession(sessionId, { keepPublishedPermissionMode: true, account: true });
9210
+ if (result.type === "success") return { ok: true };
9211
+ const error = result.type === "error" ? result.errorMessage : "unexpected restart result";
9212
+ const stillRunning = [...pidToTrackedSession.values()].some((s) => s.happySessionId === sessionId && isPidAlive(s.pid));
9213
+ return { ok: false, notRunning: error.startsWith("restart-precheck:not-tracked"), stillRunning, error };
9214
+ },
9215
+ onChanged: () => {
9216
+ void apiMachine.publishAgentProfiles();
9217
+ }
9218
+ });
9219
+ accountServiceRef = accountService$1;
9220
+ apiMachine.setAgentProfileService(accountService$1);
9221
+ const stopAccountWatch = daemonAccounts.watchAccountFiles(configuration.configuration.happyHomeDir, () => {
9222
+ void apiMachine.publishAgentProfiles();
9223
+ });
9069
9224
  const webPanelsSync = startWebPanelsSync({
9070
9225
  statMtime: async () => (await fs.stat(configuration.configuration.settingsFile).catch(() => null))?.mtimeMs ?? null,
9071
9226
  readRaw: async () => (await persistence.readSettings()).webPanels,
@@ -9200,6 +9355,7 @@ async function startDaemon() {
9200
9355
  try {
9201
9356
  const currentMtimeMs = require$$0.statSync(bundlePath).mtimeMs;
9202
9357
  bundleReplaced = currentMtimeMs !== initialBundleMtimeMs;
9358
+ if (bundleReplaced) bundleReplacedSeen = true;
9203
9359
  } catch {
9204
9360
  }
9205
9361
  }
@@ -9226,6 +9382,8 @@ async function startDaemon() {
9226
9382
  policyAnnouncements.stop();
9227
9383
  stopAgentVersionChecks();
9228
9384
  claudeAuthService.stop();
9385
+ stopAccountWatch();
9386
+ accountService$1.dispose();
9229
9387
  apiMachine.shutdown();
9230
9388
  await stopControlServer();
9231
9389
  await controlClient.cleanupDaemonState();
@@ -9357,6 +9515,8 @@ async function startDaemon() {
9357
9515
  } catch (error) {
9358
9516
  logger.logger.debug("[DAEMON RUN] Mirror shutdown failed:", error);
9359
9517
  }
9518
+ stopAccountWatch();
9519
+ accountService$1.dispose();
9360
9520
  apiMachine.shutdown();
9361
9521
  await stopControlServer();
9362
9522
  await controlClient.cleanupDaemonState();