very-happy-cli 0.2.190 → 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 (214) hide show
  1. package/dist/{AcpBackend-dkRv9QHm.cjs → AcpBackend-BQO4ShOy.cjs} +3 -3
  2. package/dist/{AcpBackend-Dd1h-Rgt.mjs → AcpBackend-CGHTDJd9.mjs} +3 -3
  3. package/dist/{AcpSessionManager-QBZ-CIf7.mjs → AcpSessionManager-G0xD6Jbq.mjs} +2 -2
  4. package/dist/{AcpSessionManager-AqWAqahm.cjs → AcpSessionManager-LlUMmcpB.cjs} +2 -2
  5. package/dist/{BasePermissionHandler-CLp1ge-4.mjs → BasePermissionHandler-BmTIg376.mjs} +1 -1
  6. package/dist/{BasePermissionHandler-CpSugp7Z.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-CcpDuIO5.mjs → acpSessionResume-BWEUxNtC.mjs} +1 -1
  12. package/dist/{acpSessionResume-CZao6QEd.cjs → acpSessionResume-BnHDk5eD.cjs} +1 -1
  13. package/dist/{agentHome-BJGRA2Kx.mjs → agentHome-B0VnjkZW.mjs} +4 -4
  14. package/dist/{agentHome-fIUqT-pn.cjs → agentHome-CqQ29YY7.cjs} +4 -4
  15. package/dist/{api-Dw8gFsQi.mjs → api-_LeBScjg.mjs} +10 -10
  16. package/dist/{api-CXL6jp-p.cjs → api-hMDsC6Wg.cjs} +10 -10
  17. package/dist/{apiMachine-BBNEtjf7.mjs → apiMachine-CgRldeJ6.mjs} +76 -21
  18. package/dist/{apiMachine-C6UqHoPF.cjs → apiMachine-CqW2m6Zr.cjs} +81 -26
  19. package/dist/{attachmentContent-NmVfKp-B.cjs → attachmentContent-BEeT2J5n.cjs} +2 -2
  20. package/dist/{attachmentContent-CC4yIrSm.mjs → attachmentContent-CyptLIfq.mjs} +2 -2
  21. package/dist/{auth-Bb_SL2os.cjs → auth-C9NvNHhL.cjs} +5 -5
  22. package/dist/{auth-DKa4MsAi.cjs → auth-CA1OClsW.cjs} +8 -8
  23. package/dist/{auth-Bh6SUoGi.mjs → auth-CFQikywl.mjs} +8 -8
  24. package/dist/{auth-Bj0psrD2.mjs → auth-DL8_J9vu.mjs} +5 -5
  25. package/dist/{auto-DK7pbCnV.mjs → auto-CKI05w1D.mjs} +17 -17
  26. package/dist/{auto-C9Qohh0P.cjs → auto-uQOxlxLp.cjs} +17 -17
  27. package/dist/{bootstrap-Ct9Nb4sv.mjs → bootstrap-DaZ0Np7X.mjs} +2 -2
  28. package/dist/{bootstrap-DBJB0y-H.cjs → bootstrap-DsZGc69k.cjs} +2 -2
  29. package/dist/{browser-BGxDRhHy.mjs → browser-BUIaSHK2.mjs} +1 -1
  30. package/dist/{browser-CLJWcodR.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-Ux31hZyC.mjs → claudeLocal-B1ZVtryl.mjs} +5 -5
  34. package/dist/{claudeLocal-B6YDYlnY.cjs → claudeLocal-BMf9t4Fa.cjs} +5 -5
  35. package/dist/{claudeLocalLauncher-D06QijMw.mjs → claudeLocalLauncher-Bp8bqF4y.mjs} +10 -10
  36. package/dist/{claudeLocalLauncher-DFvmF8rC.cjs → claudeLocalLauncher-C8TeJcfF.cjs} +10 -10
  37. package/dist/{claudeSessionFork-D2GI7P59.mjs → claudeSessionFork-8AA47z8Y.mjs} +1 -1
  38. package/dist/{claudeSessionFork-DTLZ2rek.cjs → claudeSessionFork-YiktY55n.cjs} +1 -1
  39. package/dist/{client-CnGNYidN.mjs → client-Bm4oKvW7.mjs} +2 -2
  40. package/dist/{client-CtL0Vtww.mjs → client-BmPaBnDK.mjs} +4 -4
  41. package/dist/{client-CARZ_lNS.cjs → client-CFHZfh9x.cjs} +4 -4
  42. package/dist/{client-Bffkrs5p.cjs → client-Crh8_cNx.cjs} +2 -2
  43. package/dist/{client-DZkBUoh9.mjs → client-Cxlp_D4I.mjs} +2 -2
  44. package/dist/{client-CMKGrnmT.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-CLc5nhLT.mjs → codexAppServerClient-BWJbLCQn.mjs} +3 -3
  48. package/dist/{codexAppServerClient-CpT9F6EM.cjs → codexAppServerClient-q8GHQhyC.cjs} +3 -3
  49. package/dist/{codexCommand-Dliq3EBv.mjs → codexCommand-BfXfRQr4.mjs} +121 -61
  50. package/dist/{codexCommand-39kH99SJ.cjs → codexCommand-BgpGg-Zy.cjs} +121 -61
  51. package/dist/{codexTermination-ByW7tRjr.cjs → codexTermination-CVUF0X75.cjs} +1 -1
  52. package/dist/{codexTermination-ORIw0gpU.mjs → codexTermination-s9fd1gkA.mjs} +1 -1
  53. package/dist/{config-CeIzCsfj.cjs → config-BAjyTyYp.cjs} +3 -3
  54. package/dist/{config-CxSsGO1Z.mjs → config-BF8XgLyc.mjs} +3 -3
  55. package/dist/{configuration-Dt5lKW3P.cjs → configuration-CXEVKAyF.cjs} +1 -1
  56. package/dist/{configuration-Dechcvd-.mjs → configuration-IhRiLDVe.mjs} +1 -1
  57. package/dist/{connect-UwQHvCpR.mjs → connect-LZh1gr08.mjs} +13 -13
  58. package/dist/{connect-NPDzIVC6.cjs → connect-rCS56arw.cjs} +13 -13
  59. package/dist/{context-BdZssgF0.cjs → context-3_S_mWz9.cjs} +1 -1
  60. package/dist/{context-C9JbJoNe.mjs → context-DO6F5YwH.mjs} +1 -1
  61. package/dist/{controlClient-D7NGfmtq.mjs → controlClient-8ILulwjc.mjs} +14 -5
  62. package/dist/{controlClient-BRk65BRO.cjs → controlClient-j7p5p3_7.cjs} +15 -4
  63. package/dist/{createSessionMetadata-B_HZCDj_.cjs → createSessionMetadata-DwdD_uVo.cjs} +2 -2
  64. package/dist/{createSessionMetadata-DyhFKAby.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-BFShzF55.cjs +49 -0
  68. package/dist/defaultPermissionMode-Lt3PUCwY.mjs +43 -0
  69. package/dist/{deterministicJson-BEygolBQ.cjs → deterministicJson-DUN0v3St.cjs} +13 -13
  70. package/dist/{deterministicJson-DNmMVhFu.mjs → deterministicJson-Dfp-7wUZ.mjs} +13 -13
  71. package/dist/{doctor-BdBi7TFZ.mjs → doctor-B_UwMcVT.mjs} +7 -7
  72. package/dist/{doctor-B9lW1WlG.cjs → doctor-FgUYTbAT.cjs} +7 -7
  73. package/dist/{downloadTarget-DS0zT2AU.cjs → downloadTarget-BrrQEDxg.cjs} +6 -6
  74. package/dist/{downloadTarget-CGojGjaN.mjs → downloadTarget-C0d6jRx-.mjs} +6 -6
  75. package/dist/{ensureDaemonRunning-Bibp6vhe.cjs → ensureDaemonRunning-Cq4FYI5Q.cjs} +5 -5
  76. package/dist/{ensureDaemonRunning-BOdbryDM.mjs → ensureDaemonRunning-KUMFfIil.mjs} +5 -5
  77. package/dist/{handleResumeCommand-CgLzBYne.mjs → handleResumeCommand-BGhVo3QH.mjs} +5 -5
  78. package/dist/{handleResumeCommand-DXOuWr4p.cjs → handleResumeCommand-Cl9GIL5F.cjs} +5 -5
  79. package/dist/{index-Db0HIC-k.mjs → index-BjXjMhGY.mjs} +4 -4
  80. package/dist/{index-BOe6dKnL.cjs → index-BzAYnYct.cjs} +186 -0
  81. package/dist/{index-CwRW11hT.cjs → index-CQ_hLLCj.cjs} +3 -3
  82. package/dist/{index-DXSIi6j_.cjs → index-CRipkiqo.cjs} +4 -4
  83. package/dist/{index-Bs5FD8JF.cjs → index-CZaLMmPC.cjs} +4 -4
  84. package/dist/{index-CBHfkQNY.mjs → index-Ca1Tt96A.mjs} +45 -41
  85. package/dist/{index-f8oDidjV.cjs → index-D8ODb0_U.cjs} +44 -40
  86. package/dist/{index-DmqsRnV7.mjs → index-DYD3GM1m.mjs} +168 -1
  87. package/dist/{index-rNTX33in.mjs → index-JQDyJ3Li.mjs} +3 -3
  88. package/dist/{index-DUByZsKe.mjs → index-v5EmjT8l.mjs} +4 -4
  89. package/dist/index.cjs +2 -2
  90. package/dist/index.mjs +2 -2
  91. package/dist/{install-CXIL_FYx.cjs → install-ClUA9tbC.cjs} +3 -3
  92. package/dist/{install-DfPrEWGG.mjs → install-D6EHRtAN.mjs} +3 -3
  93. package/dist/lib.cjs +12 -12
  94. package/dist/lib.d.cts +292 -0
  95. package/dist/lib.d.mts +292 -0
  96. package/dist/lib.mjs +12 -12
  97. package/dist/{lidState-D0DF20oG.mjs → lidState-CZOXXdzv.mjs} +1 -1
  98. package/dist/{lidState-q_XFYg33.cjs → lidState-DqoN7zH4.cjs} +1 -1
  99. package/dist/{localHappyAgentAuth-CKNW-MXw.cjs → localHappyAgentAuth-BnGCpHRX.cjs} +1 -1
  100. package/dist/{localHappyAgentAuth-BBhM4Qk1.mjs → localHappyAgentAuth-YHxDZ4x4.mjs} +1 -1
  101. package/dist/{logger-BBRTTVsQ.cjs → logger-8su64lqR.cjs} +2 -2
  102. package/dist/{logger-CL7pin9b.mjs → logger-Fd_rNvgd.mjs} +2 -2
  103. package/dist/{machineMetadata-DP06qdBk.mjs → machineMetadata-1HIIC7Bc.mjs} +3 -3
  104. package/dist/{machineMetadata-DnFNlrVK.cjs → machineMetadata-DYXt3p6u.cjs} +3 -3
  105. package/dist/{main-DO7nRvhf.mjs → main-BI6GIzUL.mjs} +92 -48
  106. package/dist/{main-DLOXykOR.cjs → main-C_GrcYkn.cjs} +92 -48
  107. package/dist/{mcp-Du0MgR7e.cjs → mcp-BycIv9oQ.cjs} +18 -15
  108. package/dist/{mcp-C-4sPTae.mjs → mcp-XGoxywno.mjs} +18 -15
  109. package/dist/{mirrorProtocol-GuWMxLkh.cjs → mirrorProtocol-DVnB8EO8.cjs} +3 -3
  110. package/dist/{mirrorProtocol-dkq2ZENA.mjs → mirrorProtocol-DXT3rv7T.mjs} +3 -3
  111. package/dist/{package-C6uiXULx.mjs → package-6KkRAops.mjs} +7 -7
  112. package/dist/{package-DrY090nZ.cjs → package-iuLlSiSF.cjs} +7 -7
  113. package/dist/{panels-4DRBKHZP.cjs → panels-0C89q0Tu.cjs} +5 -5
  114. package/dist/{panels-DXYdJA6n.mjs → panels-B5Di2zb2.mjs} +5 -5
  115. package/dist/{peerTools-5ZM4spcZ.cjs → peerTools-CANTX_mG.cjs} +5 -5
  116. package/dist/{peerTools-dY1aJez4.mjs → peerTools-CKJ-IDM4.mjs} +5 -5
  117. package/dist/{persistence-Bl5S3TLB.cjs → persistence-B4ttN-fR.cjs} +2 -2
  118. package/dist/{persistence-Dogj7JIp.mjs → persistence-DWcHe035.mjs} +2 -2
  119. package/dist/{piRunnerArgs-C3jZ1M6b.cjs → piRunnerArgs-BOkfxyak.cjs} +1 -1
  120. package/dist/{piRunnerArgs-D8nN_Iit.mjs → piRunnerArgs-Bl5GpBoN.mjs} +2 -2
  121. package/dist/{piRuntime-BoeMsAXK.mjs → piRuntime-BhwxzdQf.mjs} +1 -1
  122. package/dist/{piRuntime-Bd9-eq6M.cjs → piRuntime-DzrIiZU8.cjs} +1 -1
  123. package/dist/{piTerminal-C3j1ca3x.cjs → piTerminal-BdS7ol7v.cjs} +20 -17
  124. package/dist/{piTerminal-GEPkIGD4.mjs → piTerminal-DnA2CbGr.mjs} +20 -17
  125. package/dist/{pushNotifications-CfspRcl-.cjs → pushNotifications-BqFoLye2.cjs} +12 -3
  126. package/dist/{pushNotifications-dUceOIni.mjs → pushNotifications-DkQ0yvFs.mjs} +12 -3
  127. package/dist/{query-DjsVgG3E.cjs → query-BQ4br3yn.cjs} +1 -1
  128. package/dist/{query-iYH-tm7L.mjs → query-BRJYSkb1.mjs} +1 -1
  129. package/dist/{rateLimitReporter-jeVi-fym.mjs → rateLimitReporter-BRbYkmuP.mjs} +3 -3
  130. package/dist/{rateLimitReporter-DUu2KydZ.cjs → rateLimitReporter-DK5SQuCc.cjs} +3 -3
  131. package/dist/{rateLimitWindows-Bx3ROBP5.cjs → rateLimitWindows-DBfiuYeg.cjs} +1 -1
  132. package/dist/{rateLimitWindows-CEn0DXaX.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-Beun-cQv.cjs → registerCommonHandlers-m6pxxf2J.cjs} +2 -2
  136. package/dist/{registerCommonHandlers-DWZ7mfdt.mjs → registerCommonHandlers-yQ7Ru-l0.mjs} +2 -2
  137. package/dist/{registerKillSessionHandler-CA1FFr_F.cjs → registerKillSessionHandler-BAOIa_Fs.cjs} +6 -6
  138. package/dist/{registerKillSessionHandler-CzgklwLG.mjs → registerKillSessionHandler-BDNpi7YO.mjs} +6 -6
  139. package/dist/{remoteSessionClient-BiC2KDew.mjs → remoteSessionClient-CZ7aaNgj.mjs} +5 -5
  140. package/dist/{remoteSessionClient-DGFI__5Z.cjs → remoteSessionClient-iJMXRN_D.cjs} +5 -5
  141. package/dist/{reportProgressTool-CgPy6n_7.mjs → reportProgressTool-DfQhPu0s.mjs} +3 -3
  142. package/dist/{reportProgressTool-CvPGov1F.cjs → reportProgressTool-DpFs7pSe.cjs} +3 -3
  143. package/dist/{run-B_gFgJVB.mjs → run-CwN28mcj.mjs} +215 -52
  144. package/dist/{run-rPqQwDi_.cjs → run-p-xp1_HY.cjs} +214 -51
  145. package/dist/{runClaude-DM8gm8iu.cjs → runClaude-D6U1Z575.cjs} +83 -48
  146. package/dist/{runClaude-CykqeXK7.mjs → runClaude-DRKtAGTm.mjs} +83 -48
  147. package/dist/{runClaudeDeps-D2phXGut.mjs → runClaudeDeps-BheVcIlD.mjs} +147 -69
  148. package/dist/{runClaudeDeps-DGAomimZ.cjs → runClaudeDeps-Dkofokgb.cjs} +142 -64
  149. package/dist/{runGemini-CXTeSOZp.cjs → runGemini-C8q3YCc0.cjs} +33 -33
  150. package/dist/{runGemini-CtWCVkj5.mjs → runGemini-owbvhFbi.mjs} +33 -33
  151. package/dist/{runOpenClaw-CH_9_RyZ.cjs → runOpenClaw-DGeN66-t.cjs} +18 -18
  152. package/dist/{runOpenClaw-BBdjlViJ.mjs → runOpenClaw-Dky3-mjO.mjs} +18 -18
  153. package/dist/{sandbox-Bb5IMun3.cjs → sandbox-D2CPyoCA.cjs} +4 -4
  154. package/dist/{sandbox-DGmXZ6Zz.mjs → sandbox-sq_wy9Gl.mjs} +4 -4
  155. package/dist/{selfCheck-CccwNTTK.cjs → selfCheck-BgLvQKSt.cjs} +39 -37
  156. package/dist/selfCheck-vkfrgQ7X.mjs +88 -0
  157. package/dist/{send-BpiXPkDo.cjs → send-Cd10YhXh.cjs} +8 -8
  158. package/dist/{send-B6rHg8GT.mjs → send-K9vg-8t-.mjs} +8 -8
  159. package/dist/{server-DHUzjApC.cjs → server-DRrV64r0.cjs} +6 -6
  160. package/dist/{server-BkdAyHhC.mjs → server-De4W1zuK.mjs} +4 -4
  161. package/dist/{sessionLock-BFBReiKq.cjs → sessionLock-BDtSzzKS.cjs} +10 -3
  162. package/dist/{sessionLock-Ca_bIo50.mjs → sessionLock-Dl6i7IgA.mjs} +10 -4
  163. package/dist/{sessionOps-DeWVqpe4.cjs → sessionOps-DvnEH4PL.cjs} +6 -4
  164. package/dist/{sessionOps-CA2kpm66.mjs → sessionOps-gU88-W9F.mjs} +6 -4
  165. package/dist/sessionProvider-CKcIo7KO.mjs +108 -0
  166. package/dist/sessionProvider-CbSZeZrl.cjs +113 -0
  167. package/dist/{sessionScanner-CGzsN8V6.cjs → sessionScanner-7RtcCeyD.cjs} +3 -3
  168. package/dist/{sessionScanner-DDDud5re.mjs → sessionScanner-DR32uSby.mjs} +3 -3
  169. package/dist/{sessions-CKJPWFgu.cjs → sessions-BvuMjgvJ.cjs} +10 -10
  170. package/dist/{sessions-B4d50sCI.mjs → sessions-DTt2Eguk.mjs} +10 -10
  171. package/dist/{setupOfflineReconnection-CyPNgyCe.mjs → setupOfflineReconnection-BGnvhRfb.mjs} +2 -2
  172. package/dist/{setupOfflineReconnection-DPXRo_zf.cjs → setupOfflineReconnection-DduOsw6p.cjs} +2 -2
  173. package/dist/{spawn-CrYN_OOT.mjs → spawn-CL3cUc7b.mjs} +26 -17
  174. package/dist/{spawn-CgSJzzWS.cjs → spawn-DMB6rRPA.cjs} +26 -17
  175. package/dist/{spawnAgents-C1-4m7aN.cjs → spawnAgents-CClb7buD.cjs} +8 -2
  176. package/dist/{spawnAgents-DWCDYCQ1.mjs → spawnAgents-CRMfOJhh.mjs} +8 -2
  177. package/dist/{spawnHappyCLI-DjbkiSH1.mjs → spawnHappyCLI-Cj_6IICe.mjs} +1 -1
  178. package/dist/{spawnHappyCLI-CTy3p6V_.cjs → spawnHappyCLI-DJdhX_Qx.cjs} +1 -1
  179. package/dist/{startFileWatcher-Dedtu1vq.mjs → startFileWatcher-DikVa8kg.mjs} +1 -1
  180. package/dist/{startFileWatcher-BQs0cJA-.cjs → startFileWatcher-LnOmVW6H.cjs} +1 -1
  181. package/dist/{startupSessionCreate-Dxy3X4DG.cjs → startupSessionCreate-B3ND-917.cjs} +3 -3
  182. package/dist/{startupSessionCreate-BKFU4v_h.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-D9a4cBEa.cjs → streamRelay-DFdOaLOn.cjs} +1 -1
  186. package/dist/{streamRelay-P9e7Sohm.mjs → streamRelay-sABnxEXq.mjs} +1 -1
  187. package/dist/{sync-eZkXnsW_.mjs → sync-JoEZKRo8.mjs} +1 -1
  188. package/dist/{sync-DtWB7RzA.cjs → sync-_2lsZ1U2.cjs} +1 -1
  189. package/dist/{systemPrompt-2XOpZ1j6.cjs → systemPrompt-CJEvNCuW.cjs} +2 -2
  190. package/dist/{systemPrompt-Bn6g6aCH.mjs → systemPrompt-Zq4HyrZ5.mjs} +2 -2
  191. package/dist/{teams-ecFay4Gn.cjs → teams-BNZafnrT.cjs} +7 -7
  192. package/dist/{teams-nadkqrbW.mjs → teams-qz4LqKJ2.mjs} +7 -7
  193. package/dist/{template-BiTD-jI9.mjs → template-CJ8BWSsc.mjs} +1 -1
  194. package/dist/{template-17HATY_Y.cjs → template-LgvBbOna.cjs} +1 -1
  195. package/dist/{time-gPD_EmA-.cjs → time-CaUlWSNJ.cjs} +1 -1
  196. package/dist/{time-CN3TuSVG.mjs → time-bzmet4s5.mjs} +1 -1
  197. package/dist/{titleGenerator-lT5ldPuN.cjs → titleGenerator-BuIIu_JP.cjs} +17 -13
  198. package/dist/{titleGenerator-DgzTQdn2.mjs → titleGenerator-CbTtJ_1D.mjs} +16 -12
  199. package/dist/{todo-B1VeMk5A.cjs → todo-CQ_BTf9C.cjs} +6 -6
  200. package/dist/{todo-BIxd7l2Q.mjs → todo-DIrVF_Ak.mjs} +6 -6
  201. package/dist/{tools-DvqbLsCF.cjs → tools-BnmmFZji.cjs} +1 -1
  202. package/dist/{tools-zXJpxiG_.mjs → tools-cLOjBvPn.mjs} +1 -1
  203. package/dist/{uninstall-9htK6mb7.mjs → uninstall-C5OuW6dE.mjs} +3 -3
  204. package/dist/{uninstall-CvIOpwB5.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/defaultPermissionMode-BnxJPVHT.mjs +0 -4
  209. package/dist/defaultPermissionMode-CxmTXUQR.cjs +0 -7
  210. package/dist/providerBinding-B-Qbx9W2.cjs +0 -140
  211. package/dist/providerBinding-CYubGg-Z.mjs +0 -132
  212. package/dist/selfCheck-BfK945YQ.mjs +0 -86
  213. package/dist/sessionProvider-VFbtUmMR.cjs +0 -114
  214. package/dist/sessionProvider-g18IiK74.mjs +0 -109
@@ -1,27 +1,28 @@
1
1
  'use strict';
2
2
 
3
- var mirrorProtocol = require('./mirrorProtocol-GuWMxLkh.cjs');
3
+ var mirrorProtocol = require('./mirrorProtocol-DVnB8EO8.cjs');
4
4
  var fsMkdir = require('./fsMkdir-0K3yENml.cjs');
5
- var piRunnerArgs = require('./piRunnerArgs-C3jZ1M6b.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-Dt5lKW3P.cjs');
13
- var api = require('./api-CXL6jp-p.cjs');
14
- var spawnAgents = require('./spawnAgents-C1-4m7aN.cjs');
15
- var logger = require('./logger-BBRTTVsQ.cjs');
16
- var index$2 = require('./index-CwRW11hT.cjs');
17
- var auth = require('./auth-Bb_SL2os.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-DrY090nZ.cjs');
20
- var doctor = require('./doctor-B9lW1WlG.cjs');
21
- var spawnHappyCLI = require('./spawnHappyCLI-CTy3p6V_.cjs');
22
- var persistence = require('./persistence-Bl5S3TLB.cjs');
23
- var controlClient = require('./controlClient-BRk65BRO.cjs');
24
- var sessionOps = require('./sessionOps-DeWVqpe4.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-Bx3ROBP5.cjs');
33
- var peerTools = require('./peerTools-5ZM4spcZ.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-DGFI__5Z.cjs');
36
- var bootstrap = require('./bootstrap-DBJB0y-H.cjs');
37
- var index$1 = require('./index-Bs5FD8JF.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-DnFNlrVK.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-DXOuWr4p.cjs');
49
+ var handleResumeCommand = require('./handleResumeCommand-Cl9GIL5F.cjs');
49
50
  var webPanels = require('./webPanels-FCgFKvVe.cjs');
50
- var index = require('./index-BOe6dKnL.cjs');
51
51
  var promises = require('node:fs/promises');
52
52
  var cliUpdate = require('./cliUpdate-DsKXPFYp.cjs');
53
- var client = require('./client-CMKGrnmT.cjs');
54
- var sessionLock = require('./sessionLock-BFBReiKq.cjs');
55
- var client$1 = require('./client-Bffkrs5p.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-BQs0cJA-.cjs');
60
- var sync = require('./sync-DtWB7RzA.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-17HATY_Y.cjs');
68
+ var template = require('./template-LgvBbOna.cjs');
67
69
  var loginShellEnv = require('./loginShellEnv-BkuYtExZ.cjs');
68
- require('./acpSessionResume-CZao6QEd.cjs');
69
- require('./lidState-q_XFYg33.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-CfspRcl-.cjs');
75
+ require('./pushNotifications-BqFoLye2.cjs');
73
76
  require('./contentLogMetadata-ZSFk_NjQ.cjs');
74
77
  require('./limits-C-a7gr04.cjs');
75
- require('./time-gPD_EmA-.cjs');
76
- require('./registerCommonHandlers-Beun-cQv.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-CLJWcodR.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-CKNW-MXw.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
  };
@@ -6618,6 +6725,9 @@ async function removeTeamWorktree(resource) {
6618
6725
  if (ownBranch) await git(repository, ["branch", "-D", branch]);
6619
6726
  }
6620
6727
 
6728
+ function teamInitialModelMeta(model) {
6729
+ return model ? { model, modelIntent: model } : { modelIntent: index.MODEL_INTENT_CONFIG };
6730
+ }
6621
6731
  function refusalCode(error) {
6622
6732
  const code = axios.isAxiosError(error) ? error.response?.data?.error : void 0;
6623
6733
  return typeof code === "string" && /^[a-z_]{1,64}$/.test(code) ? ` (${code})` : "";
@@ -6734,7 +6844,7 @@ function createTeamWorker(deps) {
6734
6844
  return;
6735
6845
  }
6736
6846
  const key = await sessionOps.waitForSessionKey(receipt.sessionId, 1e4);
6737
- await sessionOps.sendUserMessage(receipt.sessionId, key, teamInitialPrompt(op.prompt, bot?.root === true, receipt.directory), "teams", { localId: `teams-initial-${op.id}`, sentFrom: "team", ...op.model ? { model: op.model } : {} });
6847
+ await sessionOps.sendUserMessage(receipt.sessionId, key, teamInitialPrompt(op.prompt, bot?.root === true, receipt.directory), "teams", { localId: `teams-initial-${op.id}`, sentFrom: "team", ...teamInitialModelMeta(op.model) });
6738
6848
  receipt = { ...receipt, phase: "delivered" };
6739
6849
  writeReceipt$1(home, receipt);
6740
6850
  }
@@ -7674,6 +7784,7 @@ async function startDaemon() {
7674
7784
  const initialMachineMetadata = machineMetadata.getInitialMachineMetadata();
7675
7785
  const startupCliAvailability = machineMetadata.getStartupCliAvailability();
7676
7786
  let claudeAuthServiceRef = null;
7787
+ let accountServiceRef = null;
7677
7788
  let cliUpdateStateRef = null;
7678
7789
  let lastHandoverHold = null;
7679
7790
  let claudeCredentialStoreSetting = (await persistence.readSettings()).claudeCredentialStore === "file" ? "file" : "auto";
@@ -7802,6 +7913,7 @@ async function startDaemon() {
7802
7913
  const sessionIdToFinishedSession = /* @__PURE__ */ new Map();
7803
7914
  let teamWorker;
7804
7915
  let autoRestart;
7916
+ let bundleReplacedSeen = false;
7805
7917
  let automationRunner;
7806
7918
  let projectPresence;
7807
7919
  const persisted = persistence.readPersistedSessions();
@@ -8097,8 +8209,20 @@ async function startDaemon() {
8097
8209
  if (options.spawnedBy) {
8098
8210
  extraEnv.HAPPY_SPAWNED_BY = options.spawnedBy;
8099
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
+ }
8100
8224
  const claudeAuthStatus = claudeAuthServiceRef?.current()?.status;
8101
- if ((options.agent ?? "claude") === "claude" && claudeAuthStatus) {
8225
+ if ((options.agent ?? "claude") === "claude" && claudeAuthStatus && !spawnAccountId) {
8102
8226
  extraEnv.HAPPY_CLAUDE_AUTH_STATUS = claudeAuthStatus;
8103
8227
  }
8104
8228
  logger.logger.debug(`[DAEMON RUN] Environment variable keys (before expansion) (${Object.keys(extraEnv).length}): ${Object.keys(extraEnv).join(", ")}`);
@@ -8542,6 +8666,7 @@ async function startDaemon() {
8542
8666
  }
8543
8667
  };
8544
8668
  const restartCounts = /* @__PURE__ */ new Map();
8669
+ const accountRestartCounts = /* @__PURE__ */ new Map();
8545
8670
  const autoRestartExits = /* @__PURE__ */ new Set();
8546
8671
  const stopSessionAndWait = async (happySessionId, timeoutMs = 8e3) => {
8547
8672
  const targets = /* @__PURE__ */ new Set();
@@ -8591,8 +8716,9 @@ async function startDaemon() {
8591
8716
  };
8592
8717
  const restartSessionImpl = async (happySessionId, options) => {
8593
8718
  try {
8594
- const prior = restartCounts.get(happySessionId) ?? 0;
8595
- 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);
8596
8722
  if (!decision.allowed) {
8597
8723
  return { type: "error", errorMessage: `restart:${decision.reason}` };
8598
8724
  }
@@ -8643,7 +8769,7 @@ async function startDaemon() {
8643
8769
  if (model) args.push("--model", model);
8644
8770
  const permissionMode = spawnAgents.sanitizeSpawnPermissionMode(options?.permissionMode ?? (options?.keepPublishedPermissionMode ? publishedRelaunchPermissionMode(metadata) : void 0));
8645
8771
  if (permissionMode) args.push("--permission-mode", permissionMode);
8646
- if (!options?.auto) restartCounts.set(happySessionId, recordRestartAttempt(prior));
8772
+ if (!options?.auto) counts.set(happySessionId, recordRestartAttempt(prior));
8647
8773
  const teamEnv = await teamRelaunchEnvFor(happySessionId, metadata);
8648
8774
  const result = await spawnTrackedHappyProcess({
8649
8775
  args,
@@ -8809,6 +8935,11 @@ async function startDaemon() {
8809
8935
  startedBy: metadata?.startedBy ?? null
8810
8936
  };
8811
8937
  };
8938
+ const upgradePending = () => sessionLock.pendingUpgradeVersion({
8939
+ daemonVersion: _package.packageJson.version,
8940
+ autoUpdate: cliUpdateStateRef?.autoUpdate,
8941
+ bundleReplaced: bundleReplacedSeen
8942
+ });
8812
8943
  const autoRestartScheduler = createAutoRestart({
8813
8944
  enabled: () => autoRestartSetting,
8814
8945
  quietMs: sessionLock.resolveQuietMs(),
@@ -8863,6 +8994,7 @@ async function startDaemon() {
8863
8994
  if (!row || typeof row.active !== "boolean") return null;
8864
8995
  return { active: row.active, archived: row.archivedAt != null };
8865
8996
  },
8997
+ upgradePending,
8866
8998
  publish: (sessions) => {
8867
8999
  void apiMachineRef?.setAutoRestartSessions(sessions);
8868
9000
  },
@@ -8882,6 +9014,8 @@ async function startDaemon() {
8882
9014
  // B-501: `very-happy send --resume`
8883
9015
  restartSession,
8884
9016
  // B-794: `very-happy session provider`
9017
+ getAgentProfiles: () => accountServiceRef?.state() ?? null,
9018
+ // B-850a: `very-happy account list`
8885
9019
  requestShutdown: () => requestShutdown("happy-cli"),
8886
9020
  onHappySessionWebhook,
8887
9021
  onSessionStateEvent,
@@ -8909,6 +9043,9 @@ async function startDaemon() {
8909
9043
  // B-505: `daemon list` shows which sessions have a turn in flight, so an
8910
9044
  // operator can check the WHOLE machine before a supervised restart.
8911
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 }),
8912
9049
  pushClipboard: (text, terminalId) => {
8913
9050
  if (!apiMachineRef) {
8914
9051
  return { delivered: false, truncated: false, totalBytes: 0, error: "daemon is still starting up" };
@@ -9063,6 +9200,27 @@ async function startDaemon() {
9063
9200
  return autoRestartSetting;
9064
9201
  });
9065
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
+ });
9066
9224
  const webPanelsSync = startWebPanelsSync({
9067
9225
  statMtime: async () => (await fs.stat(configuration.configuration.settingsFile).catch(() => null))?.mtimeMs ?? null,
9068
9226
  readRaw: async () => (await persistence.readSettings()).webPanels,
@@ -9197,6 +9355,7 @@ async function startDaemon() {
9197
9355
  try {
9198
9356
  const currentMtimeMs = require$$0.statSync(bundlePath).mtimeMs;
9199
9357
  bundleReplaced = currentMtimeMs !== initialBundleMtimeMs;
9358
+ if (bundleReplaced) bundleReplacedSeen = true;
9200
9359
  } catch {
9201
9360
  }
9202
9361
  }
@@ -9223,6 +9382,8 @@ async function startDaemon() {
9223
9382
  policyAnnouncements.stop();
9224
9383
  stopAgentVersionChecks();
9225
9384
  claudeAuthService.stop();
9385
+ stopAccountWatch();
9386
+ accountService$1.dispose();
9226
9387
  apiMachine.shutdown();
9227
9388
  await stopControlServer();
9228
9389
  await controlClient.cleanupDaemonState();
@@ -9354,6 +9515,8 @@ async function startDaemon() {
9354
9515
  } catch (error) {
9355
9516
  logger.logger.debug("[DAEMON RUN] Mirror shutdown failed:", error);
9356
9517
  }
9518
+ stopAccountWatch();
9519
+ accountService$1.dispose();
9357
9520
  apiMachine.shutdown();
9358
9521
  await stopControlServer();
9359
9522
  await controlClient.cleanupDaemonState();