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,58 +1,61 @@
1
1
  'use strict';
2
2
 
3
3
  var os = require('node:os');
4
- var sessionLock = require('./sessionLock-BmLA2S8K.cjs');
5
- var persistence = require('./persistence-A2NeERZJ.cjs');
6
- var startupSessionCreate = require('./startupSessionCreate-CcF7rGGB.cjs');
4
+ var sessionLock = require('./sessionLock-BDtSzzKS.cjs');
5
+ var persistence = require('./persistence-B4ttN-fR.cjs');
6
+ var startupSessionCreate = require('./startupSessionCreate-B3ND-917.cjs');
7
7
  var node_crypto = require('node:crypto');
8
- var api = require('./api-BBxZ7y2z.cjs');
9
- var logger = require('./logger-Ct2zvaq0.cjs');
10
- var createSessionMetadata = require('./createSessionMetadata-Cf78KHtt.cjs');
11
- var _package = require('./package-9n7wd2dT.cjs');
12
- var index = require('./index-CLUHaPU8.cjs');
13
- var defaultPermissionMode = require('./defaultPermissionMode-oqTupStc.cjs');
8
+ var api = require('./api-hMDsC6Wg.cjs');
9
+ var logger = require('./logger-8su64lqR.cjs');
10
+ var createSessionMetadata = require('./createSessionMetadata-DwdD_uVo.cjs');
11
+ var _package = require('./package-iuLlSiSF.cjs');
12
+ var index = require('./index-BzAYnYct.cjs');
13
+ var defaultPermissionMode = require('./defaultPermissionMode-BFShzF55.cjs');
14
14
  var forkBackfill = require('./forkBackfill-8eLDeS73.cjs');
15
- var configuration = require('./configuration-DfPBa-9d.cjs');
16
- var providerBinding = require('./providerBinding-B-Qbx9W2.cjs');
17
- var controlClient = require('./controlClient-C13_pSKG.cjs');
18
- var machineMetadata = require('./machineMetadata-DDCVWb_x.cjs');
15
+ var configuration = require('./configuration-CXEVKAyF.cjs');
16
+ var wrapperAccount = require('./wrapperAccount-DzoGqS2b.cjs');
17
+ var store = require('./store-DV__wCvP.cjs');
18
+ var controlClient = require('./controlClient-j7p5p3_7.cjs');
19
+ var machineMetadata = require('./machineMetadata-DYXt3p6u.cjs');
19
20
  var projectPath = require('./projectPath-C3ioB4Bu.cjs');
20
21
  var path = require('node:path');
21
22
  var permissionMode = require('./permissionMode-CrV-XuMs.cjs');
22
23
  var authRelay = require('./authRelay-Dy1qU9td.cjs');
23
24
  var promises = require('node:fs/promises');
24
- var attachmentContent = require('./attachmentContent-BO2njyza.cjs');
25
+ var attachmentContent = require('./attachmentContent-BEeT2J5n.cjs');
25
26
  var transcriptCursor = require('./transcriptCursor-DcXGLeSc.cjs');
26
27
  var startupPlan = require('./startupPlan-BLMbfQIH.cjs');
28
+ var reconnectEnv = require('./reconnectEnv-B31lY4nR.cjs');
27
29
  require('./cliUpdate-DsKXPFYp.cjs');
28
30
  require('node:fs');
29
31
  require('./processTreeSnapshot-mDbnuojn.cjs');
30
32
  require('node:child_process');
31
33
  require('zod');
32
34
  require('axios');
33
- require('./lidState-C9_DoF9i.cjs');
35
+ require('./lidState-DqoN7zH4.cjs');
34
36
  require('os');
35
37
  require('child_process');
36
38
  require('node:events');
37
39
  require('socket.io-client');
38
- require('./pushNotifications-23YSd-0l.cjs');
40
+ require('./pushNotifications-BqFoLye2.cjs');
39
41
  require('./contentLogMetadata-ZSFk_NjQ.cjs');
40
42
  require('./limits-C-a7gr04.cjs');
41
- require('./time-Cy0a-7YX.cjs');
42
- require('./registerCommonHandlers-D1MiSfcB.cjs');
43
+ require('./time-CaUlWSNJ.cjs');
44
+ require('./registerCommonHandlers-m6pxxf2J.cjs');
43
45
  require('util');
44
46
  require('fs/promises');
45
47
  require('crypto');
46
48
  require('path');
47
49
  require('cross-spawn');
48
50
  require('@paralleldrive/cuid2');
49
- require('./sync-Ba8N6xba.cjs');
51
+ require('./sync-_2lsZ1U2.cjs');
50
52
  require('./backgroundTaskActivity-CBvUdj39.cjs');
51
53
  require('chalk');
52
54
  require('node:util');
55
+ require('./claudeAccountEnv-BOBpJ3k8.cjs');
53
56
  require('./detectCLI-BuYR_Qxe.cjs');
54
57
  require('fs');
55
- require('./localHappyAgentAuth-CCjUvOfi.cjs');
58
+ require('./localHappyAgentAuth-BnGCpHRX.cjs');
56
59
  require('tweetnacl');
57
60
  require('./fsMkdir-0K3yENml.cjs');
58
61
  require('url');
@@ -63,7 +66,7 @@ const CLAUDE_EFFORTS = ["low", "medium", "high", "xhigh", "max"];
63
66
  function restoredClaudeEffort(effort) {
64
67
  return CLAUDE_EFFORTS.includes(effort ?? "") ? effort : void 0;
65
68
  }
66
- const importRunClaudeDeps = () => Promise.resolve().then(function () { return require('./runClaudeDeps-CYuozSC6.cjs'); });
69
+ const importRunClaudeDeps = () => Promise.resolve().then(function () { return require('./runClaudeDeps-Dkofokgb.cjs'); });
67
70
  async function runClaude(credentials, options = {}) {
68
71
  logger.logger.debug(`[CLAUDE] ===== CLAUDE MODE STARTING =====`);
69
72
  logger.logger.debug(`[CLAUDE] This is the Claude agent, NOT Gemini`);
@@ -73,11 +76,13 @@ async function runClaude(credentials, options = {}) {
73
76
  prewarmSpawnEnv[key] = process.env[key];
74
77
  delete process.env[key];
75
78
  }
79
+ const spawnAccountId = process.env[store.SPAWN_ACCOUNT_ENV] || void 0;
80
+ delete process.env[store.SPAWN_ACCOUNT_ENV];
76
81
  const workingDirectory = process.cwd();
77
82
  const isAssistantVariant = process.env.HAPPY_SESSION_VARIANT === "assistant";
78
83
  if (isAssistantVariant) {
79
84
  try {
80
- const { bootstrapAssistantHome } = await Promise.resolve().then(function () { return require('./bootstrap-sly4qPPY.cjs'); });
85
+ const { bootstrapAssistantHome } = await Promise.resolve().then(function () { return require('./bootstrap-DsZGc69k.cjs'); });
81
86
  await bootstrapAssistantHome();
82
87
  } catch (error) {
83
88
  logger.logger.debug("[START] Assistant home bootstrap failed:", error);
@@ -97,8 +102,9 @@ async function runClaude(credentials, options = {}) {
97
102
  }
98
103
  return depsLoadPromise;
99
104
  };
105
+ const reconnectEnv$1 = reconnectEnv.takeReconnectEnv();
100
106
  const reconnectRequested = Boolean(
101
- process.env.HAPPY_RECONNECT_SESSION_ID && process.env.HAPPY_RECONNECT_ENCRYPTION_KEY && process.env.HAPPY_RECONNECT_ENCRYPTION_VARIANT
107
+ reconnectEnv$1.HAPPY_RECONNECT_SESSION_ID && reconnectEnv$1.HAPPY_RECONNECT_ENCRYPTION_KEY && reconnectEnv$1.HAPPY_RECONNECT_ENCRYPTION_VARIANT
102
108
  );
103
109
  const startupPlan$1 = startupPlan.planClaudeStartup({ startedBy: options.startedBy, reconnect: reconnectRequested });
104
110
  api.connectionState.setBackend("Claude");
@@ -152,7 +158,7 @@ async function runClaude(credentials, options = {}) {
152
158
  // a brand-new session cannot pick a PDF until after sending once.
153
159
  attachmentKinds: [...attachmentContent.CLAUDE_ATTACHMENT_KINDS],
154
160
  queueCancellation: true,
155
- capabilities: ["claude-steer-v1", "claude-live-permission-v1", "claude-live-permission-v2", "claude-btw-v1", "claude-runtime-controls-v1", "claude-opus-5-5-v1", index.PROMPT_QUEUE_CAPABILITY, forkBackfill.FORK_BACKFILL_CAPABILITY, persistence.HIBERNATION_CAPABILITY, sessionLock.AUTO_RESTART_CAPABILITY, index.PROJECT_SESSION_CAPABILITY, index.RUN_INTENT_CAPABILITY, index.CLAUDE_CONFIG_MODEL_CAPABILITY],
161
+ capabilities: ["claude-steer-v1", "claude-live-permission-v1", "claude-live-permission-v2", "claude-btw-v1", "claude-runtime-controls-v1", "claude-opus-5-5-v1", index.PROMPT_QUEUE_CAPABILITY, forkBackfill.FORK_BACKFILL_CAPABILITY, persistence.HIBERNATION_CAPABILITY, sessionLock.AUTO_RESTART_CAPABILITY, index.PROJECT_SESSION_CAPABILITY, index.RUN_INTENT_CAPABILITY, index.CLAUDE_CONFIG_MODEL_CAPABILITY, index.AGENT_PROFILE_SESSION_CAPABILITY],
156
162
  // B-849b: this session's model / thinking choice (wrapper is the sole
157
163
  // writer; a reconnect keeps the server copy). A spawn-time model is a choice.
158
164
  modelIntent: options.model ?? null,
@@ -178,12 +184,12 @@ async function runClaude(credentials, options = {}) {
178
184
  // B-586: linked git worktree → branch shown in the session list.
179
185
  ...createSessionMetadata.sessionWorktreeMetadata(workingDirectory)
180
186
  };
181
- const reconnectSessionId = process.env.HAPPY_RECONNECT_SESSION_ID;
182
- const reconnectKeyBase64 = process.env.HAPPY_RECONNECT_ENCRYPTION_KEY;
183
- const reconnectVariant = process.env.HAPPY_RECONNECT_ENCRYPTION_VARIANT;
184
- const reconnectSeq = process.env.HAPPY_RECONNECT_SEQ;
185
- const reconnectMetadataVersion = process.env.HAPPY_RECONNECT_METADATA_VERSION;
186
- const reconnectAgentStateVersion = process.env.HAPPY_RECONNECT_AGENT_STATE_VERSION;
187
+ const reconnectSessionId = reconnectEnv$1.HAPPY_RECONNECT_SESSION_ID;
188
+ const reconnectKeyBase64 = reconnectEnv$1.HAPPY_RECONNECT_ENCRYPTION_KEY;
189
+ const reconnectVariant = reconnectEnv$1.HAPPY_RECONNECT_ENCRYPTION_VARIANT;
190
+ const reconnectSeq = reconnectEnv$1.HAPPY_RECONNECT_SEQ;
191
+ const reconnectMetadataVersion = reconnectEnv$1.HAPPY_RECONNECT_METADATA_VERSION;
192
+ const reconnectAgentStateVersion = reconnectEnv$1.HAPPY_RECONNECT_AGENT_STATE_VERSION;
187
193
  let response;
188
194
  if (reconnectSessionId && reconnectKeyBase64 && reconnectVariant) {
189
195
  logger.logger.debug(`[START] Reconnecting to existing session ${reconnectSessionId}`);
@@ -202,7 +208,7 @@ async function runClaude(credentials, options = {}) {
202
208
  }
203
209
  if (!response) {
204
210
  let offlineSessionId = null;
205
- const { claudeLocal } = await Promise.resolve().then(function () { return require('./claudeLocal-1vuTFcL8.cjs'); });
211
+ const { claudeLocal } = await Promise.resolve().then(function () { return require('./claudeLocal-BMf9t4Fa.cjs'); });
206
212
  const { createSessionScanner: createSessionScanner2 } = await loadDeps();
207
213
  const reconnection = api.startOfflineReconnection({
208
214
  serverUrl: configuration.configuration.serverUrl,
@@ -439,19 +445,22 @@ async function runClaude(credentials, options = {}) {
439
445
  }
440
446
  });
441
447
  options = { ...options, claudeEnvVars: { ...options.claudeEnvVars, VH_PEER_SESSION_ID: response.id } };
442
- let providerPinnedModel;
448
+ let account;
443
449
  try {
444
- const provider = providerBinding.loadSessionProvider(configuration.configuration.happyHomeDir, response.id);
445
- if (provider) {
446
- providerBinding.applyProviderEnv(process.env, provider);
447
- options = { ...options, model: provider.model };
448
- providerPinnedModel = provider.model;
449
- logger.logger.debug(`[START] B-794 provider binding: profile=${provider.profile} model=${provider.model} baseUrl=${provider.baseUrl}`);
450
- }
450
+ account = wrapperAccount.loadWrapperAccount(configuration.configuration.happyHomeDir, response.id, spawnAccountId);
451
451
  } catch (error) {
452
452
  const reason = error instanceof Error ? error.message : String(error);
453
- logger.logger.debug(`[START] B-794 provider binding failed: ${reason}`);
454
- session.sendSessionEvent({ type: "message", message: `Provider binding ignored: ${reason}` });
453
+ logger.logger.debug(`[START] B-850a account resolution failed: ${reason}`);
454
+ account = spawnAccountId ? { profile: { id: spawnAccountId, label: spawnAccountId, kind: "unknown", status: "unavailable", reason: "error" }, settings: {}, unavailable: true, notices: [`Account "${spawnAccountId}" could not be loaded: ${reason}`], cleanup: () => {
455
+ } } : { profile: null, settings: {}, unavailable: false, notices: [], cleanup: () => {
456
+ } };
457
+ }
458
+ const providerPinnedModel = account.pinnedModel;
459
+ if (providerPinnedModel) options = { ...options, model: providerPinnedModel };
460
+ logger.logger.debug(`[START] B-850a account: ${account.profile ? `${account.profile.id} ${account.profile.kind} ${account.profile.status}` : "machine login"}`);
461
+ session.updateMetadata((current) => ({ ...current, agentProfile: account.profile }));
462
+ for (const notice of account.notices) {
463
+ session.sendSessionEvent({ type: "message", message: notice, kind: account.unavailable ? "agent-profile-unavailable" : "agent-profile-warning" });
455
464
  }
456
465
  const initialScannerSessionId = forkClaudeSessionId ?? (metadata.claudeSessionId ?? null);
457
466
  const transcriptPathHints = new transcriptCursor.TranscriptPathHints();
@@ -501,7 +510,7 @@ async function runClaude(credentials, options = {}) {
501
510
  }
502
511
  });
503
512
  logger.logger.debug(`[START] Hook server started on port ${hookServer.port}`);
504
- const hookSettingsPath = generateHookSettingsFile(hookServer.port);
513
+ const hookSettingsPath = generateHookSettingsFile(hookServer.port, void 0, account.settings);
505
514
  logger.logger.debug(`[START] Generated hook settings file: ${hookSettingsPath}`);
506
515
  const logPath = logger.logger.logFilePath;
507
516
  logger.logger.infoDeveloper(`Session: ${response.id}`);
@@ -572,7 +581,7 @@ async function runClaude(credentials, options = {}) {
572
581
  getModel: () => currentModel,
573
582
  cwd: workingDirectory,
574
583
  getEnv: () => options.claudeEnvVars,
575
- settingsPath: writeSideQuestionSettingsFile(configuration.configuration.happyHomeDir),
584
+ settingsPath: writeSideQuestionSettingsFile(configuration.configuration.happyHomeDir, account.settings),
576
585
  // B-482: in remote mode the launcher parks the live Query's /btw entry
577
586
  // on the session while the Query is alive; local mode never sets it.
578
587
  getLiveQuery: () => currentSession?.getSideQuestionLive() ?? null
@@ -609,6 +618,7 @@ async function runClaude(credentials, options = {}) {
609
618
  startedBy: options.startedBy,
610
619
  startingMode: options.startingMode,
611
620
  claudeArgs: options.claudeArgs,
621
+ reconnect: reconnectRequested,
612
622
  setting: settings?.claudePrewarm
613
623
  };
614
624
  const prewarmCtx = () => ({ sandboxEnabled, isAssistantVariant, staleModeSnapshot: false, pinnedModel: providerPinnedModel });
@@ -626,6 +636,7 @@ async function runClaude(credentials, options = {}) {
626
636
  let userMessageSeen = false;
627
637
  const prewarmTagFiles = /* @__PURE__ */ new Set();
628
638
  const createPrewarm = () => {
639
+ if (account.unavailable) return null;
629
640
  const eligibility = claudePrewarmEligibility({
630
641
  ...prewarmSessionInput,
631
642
  env: { ...process.env, ...prewarmSpawnEnv },
@@ -652,7 +663,7 @@ async function runClaude(credentials, options = {}) {
652
663
  const tag = prewarmHookGate.newTag();
653
664
  let tagHookSettingsPath;
654
665
  try {
655
- tagHookSettingsPath = generateHookSettingsFile(hookServer.port, tag);
666
+ tagHookSettingsPath = generateHookSettingsFile(hookServer.port, tag, account.settings);
656
667
  } catch (error) {
657
668
  slot.release();
658
669
  logger.logger.debug(formatPrewarmLine("skipped", "hook-settings"));
@@ -701,6 +712,11 @@ async function runClaude(credentials, options = {}) {
701
712
  });
702
713
  session.onUserMessage(async (message) => {
703
714
  userMessageSeen = true;
715
+ if (account.unavailable && account.profile) {
716
+ if (message.localKey) session.sendQueueCancelReason([message.localKey], "failed");
717
+ session.sendSessionEvent({ type: "message", message: account.notices[0] ?? `Account "${account.profile.label}" is unavailable.`, kind: "agent-profile-unavailable" });
718
+ return;
719
+ }
704
720
  if (message?.content?.text) {
705
721
  titleGenerator.maybeGenerate(message.content.text);
706
722
  boardAnalyzer.noteUserMessage(message.content.text);
@@ -854,6 +870,7 @@ async function runClaude(credentials, options = {}) {
854
870
  happyServer.stop();
855
871
  hookServer.stop();
856
872
  cleanupHookSettingsFile(hookSettingsPath);
873
+ account.cleanup();
857
874
  await remoteScanner.cleanup();
858
875
  logger.logger.debug("[START] Cleanup complete, exiting");
859
876
  await terminateSurvivors(wrapperTree);
@@ -999,6 +1016,7 @@ async function runClaude(credentials, options = {}) {
999
1016
  logger.logger.debug("Stopped Happy MCP server");
1000
1017
  hookServer.stop();
1001
1018
  cleanupHookSettingsFile(hookSettingsPath);
1019
+ account.cleanup();
1002
1020
  logger.logger.debug("Stopped Hook server and cleaned up settings file");
1003
1021
  process.exit(exitCode);
1004
1022
  }
@@ -1,56 +1,59 @@
1
1
  import os from 'node:os';
2
- import { A as AUTO_RESTART_CAPABILITY, c as claimSessionOrExit, a as applyServerSnapshot, b as applyReconnectReplay, w as withoutServerSnapshot, m as mergeReconnectMetadata, t as takeAutoRestartedEvent, e as exitCursorStamp } from './sessionLock-G2PMqvsh.mjs';
3
- import { r as readSettings, H as HIBERNATION_CAPABILITY, a as resolveCheckMs, l as latchKeepAwake, e as evaluateWrapperIdle } from './persistence-Cpw4yJs8.mjs';
4
- import { c as createSessionForStartup, H as HibernationProbe, a as commitHibernation } from './startupSessionCreate-BtR4iYEC.mjs';
2
+ import { A as AUTO_RESTART_CAPABILITY, c as claimSessionOrExit, a as applyServerSnapshot, b as applyReconnectReplay, w as withoutServerSnapshot, m as mergeReconnectMetadata, t as takeAutoRestartedEvent, e as exitCursorStamp } from './sessionLock-Dl6i7IgA.mjs';
3
+ import { r as readSettings, H as HIBERNATION_CAPABILITY, a as resolveCheckMs, l as latchKeepAwake, e as evaluateWrapperIdle } from './persistence-DWcHe035.mjs';
4
+ import { c as createSessionForStartup, H as HibernationProbe, a as commitHibernation } from './startupSessionCreate-CDdaLaMq.mjs';
5
5
  import { randomUUID } from 'node:crypto';
6
- import { c as connectionState, A as ApiClient, s as startOfflineReconnection } from './api-jfeMRg5R.mjs';
7
- import { l as logger } from './logger-GcbI0eg2.mjs';
8
- import { s as spawnOriginTags, a as sessionWorktreeMetadata } from './createSessionMetadata-B0eT_Kfj.mjs';
9
- import { p as packageJson } from './package-BsUHyqWe.mjs';
10
- import { P as PROMPT_QUEUE_CAPABILITY, a as PROJECT_SESSION_CAPABILITY, R as RUN_INTENT_CAPABILITY, C as CLAUDE_CONFIG_MODEL_CAPABILITY, r as restoredEffort, b as restoredModel } from './index-Bq8NKSCF.mjs';
11
- import { D as DEFAULT_CLAUDE_PERMISSION_MODE, r as registerRunIntentRpc, a as recordRunIntents, w as withoutEffort } from './defaultPermissionMode-m6z2QVyP.mjs';
6
+ import { c as connectionState, A as ApiClient, s as startOfflineReconnection } from './api-_LeBScjg.mjs';
7
+ import { l as logger } from './logger-Fd_rNvgd.mjs';
8
+ import { s as spawnOriginTags, a as sessionWorktreeMetadata } from './createSessionMetadata-oyaTZm1b.mjs';
9
+ import { p as packageJson } from './package-6KkRAops.mjs';
10
+ import { P as PROMPT_QUEUE_CAPABILITY, a as PROJECT_SESSION_CAPABILITY, R as RUN_INTENT_CAPABILITY, C as CLAUDE_CONFIG_MODEL_CAPABILITY, A as AGENT_PROFILE_SESSION_CAPABILITY, r as restoredEffort, b as restoredModel } from './index-DYD3GM1m.mjs';
11
+ import { D as DEFAULT_CLAUDE_PERMISSION_MODE, r as registerRunIntentRpc, a as recordRunIntents, w as withoutEffort } from './defaultPermissionMode-Lt3PUCwY.mjs';
12
12
  import { F as FORK_BACKFILL_CAPABILITY, p as publishForkBackfillWhenCommitted } from './forkBackfill-DYIjlN1Z.mjs';
13
- import { c as configuration } from './configuration-ECqXu34R.mjs';
14
- import { l as loadSessionProvider, a as applyProviderEnv } from './providerBinding-CYubGg-Z.mjs';
15
- import { n as notifyDaemonSessionStarted, c as checkDaemonHibernation } from './controlClient-ClI7A0qE.mjs';
16
- import { g as getInitialMachineMetadata } from './machineMetadata-CXRmFNOV.mjs';
13
+ import { c as configuration } from './configuration-IhRiLDVe.mjs';
14
+ import { l as loadWrapperAccount } from './wrapperAccount-DXlD3bsO.mjs';
15
+ import { S as SPAWN_ACCOUNT_ENV } from './store--XN-7MS0.mjs';
16
+ import { n as notifyDaemonSessionStarted, c as checkDaemonHibernation } from './controlClient-8ILulwjc.mjs';
17
+ import { g as getInitialMachineMetadata } from './machineMetadata-1HIIC7Bc.mjs';
17
18
  import { p as projectPath } from './projectPath-BTBIMB57.mjs';
18
19
  import { resolve, join } from 'node:path';
19
20
  import { a as applySandboxPermissionPolicy, r as resolveInitialClaudePermissionMode, m as mapToClaudeMode, b as reconcilePublishedPermissionMode } from './permissionMode-CH4FoZfU.mjs';
20
21
  import { d as decodeBase64, e as encodeBase64 } from './authRelay-DhQhkBvX.mjs';
21
22
  import { readFile } from 'node:fs/promises';
22
- import { C as CLAUDE_ATTACHMENT_KINDS, s as stripAttachmentManifest } from './attachmentContent-Dm_RIs5L.mjs';
23
+ import { C as CLAUDE_ATTACHMENT_KINDS, s as stripAttachmentManifest } from './attachmentContent-CyptLIfq.mjs';
23
24
  import { T as TranscriptPathHints } from './transcriptCursor-B7T_gkQ0.mjs';
24
25
  import { p as planClaudeStartup } from './startupPlan-DFMyNgAs.mjs';
26
+ import { t as takeReconnectEnv } from './reconnectEnv-DeSvHl3q.mjs';
25
27
  import './cliUpdate-Y34VGe9Y.mjs';
26
28
  import 'node:fs';
27
29
  import './processTreeSnapshot-CuLJDNC-.mjs';
28
30
  import 'node:child_process';
29
31
  import 'zod';
30
32
  import 'axios';
31
- import './lidState-CD81ryTy.mjs';
33
+ import './lidState-CZOXXdzv.mjs';
32
34
  import 'os';
33
35
  import 'child_process';
34
36
  import 'node:events';
35
37
  import 'socket.io-client';
36
- import './pushNotifications-XAM8__Pg.mjs';
38
+ import './pushNotifications-DkQ0yvFs.mjs';
37
39
  import './contentLogMetadata-BlWI0egu.mjs';
38
40
  import './limits-DIo7rEBR.mjs';
39
- import './time-D0jvDRhn.mjs';
40
- import './registerCommonHandlers-DRRfinzK.mjs';
41
+ import './time-bzmet4s5.mjs';
42
+ import './registerCommonHandlers-yQ7Ru-l0.mjs';
41
43
  import 'util';
42
44
  import 'fs/promises';
43
45
  import 'crypto';
44
46
  import 'path';
45
47
  import 'cross-spawn';
46
48
  import '@paralleldrive/cuid2';
47
- import './sync-C0PRuTMj.mjs';
49
+ import './sync-JoEZKRo8.mjs';
48
50
  import './backgroundTaskActivity-8PdPxrvy.mjs';
49
51
  import 'chalk';
50
52
  import 'node:util';
53
+ import './claudeAccountEnv-ON24i0qv.mjs';
51
54
  import './detectCLI-CSGMlV51.mjs';
52
55
  import 'fs';
53
- import './localHappyAgentAuth-Cg-m1lwm.mjs';
56
+ import './localHappyAgentAuth-YHxDZ4x4.mjs';
54
57
  import 'tweetnacl';
55
58
  import './fsMkdir-DumgLTzR.mjs';
56
59
  import 'url';
@@ -61,7 +64,7 @@ const CLAUDE_EFFORTS = ["low", "medium", "high", "xhigh", "max"];
61
64
  function restoredClaudeEffort(effort) {
62
65
  return CLAUDE_EFFORTS.includes(effort ?? "") ? effort : void 0;
63
66
  }
64
- const importRunClaudeDeps = () => import('./runClaudeDeps-DlVfMG4F.mjs');
67
+ const importRunClaudeDeps = () => import('./runClaudeDeps-BheVcIlD.mjs');
65
68
  async function runClaude(credentials, options = {}) {
66
69
  logger.debug(`[CLAUDE] ===== CLAUDE MODE STARTING =====`);
67
70
  logger.debug(`[CLAUDE] This is the Claude agent, NOT Gemini`);
@@ -71,11 +74,13 @@ async function runClaude(credentials, options = {}) {
71
74
  prewarmSpawnEnv[key] = process.env[key];
72
75
  delete process.env[key];
73
76
  }
77
+ const spawnAccountId = process.env[SPAWN_ACCOUNT_ENV] || void 0;
78
+ delete process.env[SPAWN_ACCOUNT_ENV];
74
79
  const workingDirectory = process.cwd();
75
80
  const isAssistantVariant = process.env.HAPPY_SESSION_VARIANT === "assistant";
76
81
  if (isAssistantVariant) {
77
82
  try {
78
- const { bootstrapAssistantHome } = await import('./bootstrap-rLaL3kTa.mjs');
83
+ const { bootstrapAssistantHome } = await import('./bootstrap-DaZ0Np7X.mjs');
79
84
  await bootstrapAssistantHome();
80
85
  } catch (error) {
81
86
  logger.debug("[START] Assistant home bootstrap failed:", error);
@@ -95,8 +100,9 @@ async function runClaude(credentials, options = {}) {
95
100
  }
96
101
  return depsLoadPromise;
97
102
  };
103
+ const reconnectEnv = takeReconnectEnv();
98
104
  const reconnectRequested = Boolean(
99
- process.env.HAPPY_RECONNECT_SESSION_ID && process.env.HAPPY_RECONNECT_ENCRYPTION_KEY && process.env.HAPPY_RECONNECT_ENCRYPTION_VARIANT
105
+ reconnectEnv.HAPPY_RECONNECT_SESSION_ID && reconnectEnv.HAPPY_RECONNECT_ENCRYPTION_KEY && reconnectEnv.HAPPY_RECONNECT_ENCRYPTION_VARIANT
100
106
  );
101
107
  const startupPlan = planClaudeStartup({ startedBy: options.startedBy, reconnect: reconnectRequested });
102
108
  connectionState.setBackend("Claude");
@@ -150,7 +156,7 @@ async function runClaude(credentials, options = {}) {
150
156
  // a brand-new session cannot pick a PDF until after sending once.
151
157
  attachmentKinds: [...CLAUDE_ATTACHMENT_KINDS],
152
158
  queueCancellation: true,
153
- capabilities: ["claude-steer-v1", "claude-live-permission-v1", "claude-live-permission-v2", "claude-btw-v1", "claude-runtime-controls-v1", "claude-opus-5-5-v1", PROMPT_QUEUE_CAPABILITY, FORK_BACKFILL_CAPABILITY, HIBERNATION_CAPABILITY, AUTO_RESTART_CAPABILITY, PROJECT_SESSION_CAPABILITY, RUN_INTENT_CAPABILITY, CLAUDE_CONFIG_MODEL_CAPABILITY],
159
+ capabilities: ["claude-steer-v1", "claude-live-permission-v1", "claude-live-permission-v2", "claude-btw-v1", "claude-runtime-controls-v1", "claude-opus-5-5-v1", PROMPT_QUEUE_CAPABILITY, FORK_BACKFILL_CAPABILITY, HIBERNATION_CAPABILITY, AUTO_RESTART_CAPABILITY, PROJECT_SESSION_CAPABILITY, RUN_INTENT_CAPABILITY, CLAUDE_CONFIG_MODEL_CAPABILITY, AGENT_PROFILE_SESSION_CAPABILITY],
154
160
  // B-849b: this session's model / thinking choice (wrapper is the sole
155
161
  // writer; a reconnect keeps the server copy). A spawn-time model is a choice.
156
162
  modelIntent: options.model ?? null,
@@ -176,12 +182,12 @@ async function runClaude(credentials, options = {}) {
176
182
  // B-586: linked git worktree → branch shown in the session list.
177
183
  ...sessionWorktreeMetadata(workingDirectory)
178
184
  };
179
- const reconnectSessionId = process.env.HAPPY_RECONNECT_SESSION_ID;
180
- const reconnectKeyBase64 = process.env.HAPPY_RECONNECT_ENCRYPTION_KEY;
181
- const reconnectVariant = process.env.HAPPY_RECONNECT_ENCRYPTION_VARIANT;
182
- const reconnectSeq = process.env.HAPPY_RECONNECT_SEQ;
183
- const reconnectMetadataVersion = process.env.HAPPY_RECONNECT_METADATA_VERSION;
184
- const reconnectAgentStateVersion = process.env.HAPPY_RECONNECT_AGENT_STATE_VERSION;
185
+ const reconnectSessionId = reconnectEnv.HAPPY_RECONNECT_SESSION_ID;
186
+ const reconnectKeyBase64 = reconnectEnv.HAPPY_RECONNECT_ENCRYPTION_KEY;
187
+ const reconnectVariant = reconnectEnv.HAPPY_RECONNECT_ENCRYPTION_VARIANT;
188
+ const reconnectSeq = reconnectEnv.HAPPY_RECONNECT_SEQ;
189
+ const reconnectMetadataVersion = reconnectEnv.HAPPY_RECONNECT_METADATA_VERSION;
190
+ const reconnectAgentStateVersion = reconnectEnv.HAPPY_RECONNECT_AGENT_STATE_VERSION;
185
191
  let response;
186
192
  if (reconnectSessionId && reconnectKeyBase64 && reconnectVariant) {
187
193
  logger.debug(`[START] Reconnecting to existing session ${reconnectSessionId}`);
@@ -200,7 +206,7 @@ async function runClaude(credentials, options = {}) {
200
206
  }
201
207
  if (!response) {
202
208
  let offlineSessionId = null;
203
- const { claudeLocal } = await import('./claudeLocal-Bgb5GGsq.mjs');
209
+ const { claudeLocal } = await import('./claudeLocal-B1ZVtryl.mjs');
204
210
  const { createSessionScanner: createSessionScanner2 } = await loadDeps();
205
211
  const reconnection = startOfflineReconnection({
206
212
  serverUrl: configuration.serverUrl,
@@ -437,19 +443,22 @@ async function runClaude(credentials, options = {}) {
437
443
  }
438
444
  });
439
445
  options = { ...options, claudeEnvVars: { ...options.claudeEnvVars, VH_PEER_SESSION_ID: response.id } };
440
- let providerPinnedModel;
446
+ let account;
441
447
  try {
442
- const provider = loadSessionProvider(configuration.happyHomeDir, response.id);
443
- if (provider) {
444
- applyProviderEnv(process.env, provider);
445
- options = { ...options, model: provider.model };
446
- providerPinnedModel = provider.model;
447
- logger.debug(`[START] B-794 provider binding: profile=${provider.profile} model=${provider.model} baseUrl=${provider.baseUrl}`);
448
- }
448
+ account = loadWrapperAccount(configuration.happyHomeDir, response.id, spawnAccountId);
449
449
  } catch (error) {
450
450
  const reason = error instanceof Error ? error.message : String(error);
451
- logger.debug(`[START] B-794 provider binding failed: ${reason}`);
452
- session.sendSessionEvent({ type: "message", message: `Provider binding ignored: ${reason}` });
451
+ logger.debug(`[START] B-850a account resolution failed: ${reason}`);
452
+ account = spawnAccountId ? { profile: { id: spawnAccountId, label: spawnAccountId, kind: "unknown", status: "unavailable", reason: "error" }, settings: {}, unavailable: true, notices: [`Account "${spawnAccountId}" could not be loaded: ${reason}`], cleanup: () => {
453
+ } } : { profile: null, settings: {}, unavailable: false, notices: [], cleanup: () => {
454
+ } };
455
+ }
456
+ const providerPinnedModel = account.pinnedModel;
457
+ if (providerPinnedModel) options = { ...options, model: providerPinnedModel };
458
+ logger.debug(`[START] B-850a account: ${account.profile ? `${account.profile.id} ${account.profile.kind} ${account.profile.status}` : "machine login"}`);
459
+ session.updateMetadata((current) => ({ ...current, agentProfile: account.profile }));
460
+ for (const notice of account.notices) {
461
+ session.sendSessionEvent({ type: "message", message: notice, kind: account.unavailable ? "agent-profile-unavailable" : "agent-profile-warning" });
453
462
  }
454
463
  const initialScannerSessionId = forkClaudeSessionId ?? (metadata.claudeSessionId ?? null);
455
464
  const transcriptPathHints = new TranscriptPathHints();
@@ -499,7 +508,7 @@ async function runClaude(credentials, options = {}) {
499
508
  }
500
509
  });
501
510
  logger.debug(`[START] Hook server started on port ${hookServer.port}`);
502
- const hookSettingsPath = generateHookSettingsFile(hookServer.port);
511
+ const hookSettingsPath = generateHookSettingsFile(hookServer.port, void 0, account.settings);
503
512
  logger.debug(`[START] Generated hook settings file: ${hookSettingsPath}`);
504
513
  const logPath = logger.logFilePath;
505
514
  logger.infoDeveloper(`Session: ${response.id}`);
@@ -570,7 +579,7 @@ async function runClaude(credentials, options = {}) {
570
579
  getModel: () => currentModel,
571
580
  cwd: workingDirectory,
572
581
  getEnv: () => options.claudeEnvVars,
573
- settingsPath: writeSideQuestionSettingsFile(configuration.happyHomeDir),
582
+ settingsPath: writeSideQuestionSettingsFile(configuration.happyHomeDir, account.settings),
574
583
  // B-482: in remote mode the launcher parks the live Query's /btw entry
575
584
  // on the session while the Query is alive; local mode never sets it.
576
585
  getLiveQuery: () => currentSession?.getSideQuestionLive() ?? null
@@ -607,6 +616,7 @@ async function runClaude(credentials, options = {}) {
607
616
  startedBy: options.startedBy,
608
617
  startingMode: options.startingMode,
609
618
  claudeArgs: options.claudeArgs,
619
+ reconnect: reconnectRequested,
610
620
  setting: settings?.claudePrewarm
611
621
  };
612
622
  const prewarmCtx = () => ({ sandboxEnabled, isAssistantVariant, staleModeSnapshot: false, pinnedModel: providerPinnedModel });
@@ -624,6 +634,7 @@ async function runClaude(credentials, options = {}) {
624
634
  let userMessageSeen = false;
625
635
  const prewarmTagFiles = /* @__PURE__ */ new Set();
626
636
  const createPrewarm = () => {
637
+ if (account.unavailable) return null;
627
638
  const eligibility = claudePrewarmEligibility({
628
639
  ...prewarmSessionInput,
629
640
  env: { ...process.env, ...prewarmSpawnEnv },
@@ -650,7 +661,7 @@ async function runClaude(credentials, options = {}) {
650
661
  const tag = prewarmHookGate.newTag();
651
662
  let tagHookSettingsPath;
652
663
  try {
653
- tagHookSettingsPath = generateHookSettingsFile(hookServer.port, tag);
664
+ tagHookSettingsPath = generateHookSettingsFile(hookServer.port, tag, account.settings);
654
665
  } catch (error) {
655
666
  slot.release();
656
667
  logger.debug(formatPrewarmLine("skipped", "hook-settings"));
@@ -699,6 +710,11 @@ async function runClaude(credentials, options = {}) {
699
710
  });
700
711
  session.onUserMessage(async (message) => {
701
712
  userMessageSeen = true;
713
+ if (account.unavailable && account.profile) {
714
+ if (message.localKey) session.sendQueueCancelReason([message.localKey], "failed");
715
+ session.sendSessionEvent({ type: "message", message: account.notices[0] ?? `Account "${account.profile.label}" is unavailable.`, kind: "agent-profile-unavailable" });
716
+ return;
717
+ }
702
718
  if (message?.content?.text) {
703
719
  titleGenerator.maybeGenerate(message.content.text);
704
720
  boardAnalyzer.noteUserMessage(message.content.text);
@@ -852,6 +868,7 @@ async function runClaude(credentials, options = {}) {
852
868
  happyServer.stop();
853
869
  hookServer.stop();
854
870
  cleanupHookSettingsFile(hookSettingsPath);
871
+ account.cleanup();
855
872
  await remoteScanner.cleanup();
856
873
  logger.debug("[START] Cleanup complete, exiting");
857
874
  await terminateSurvivors(wrapperTree);
@@ -997,6 +1014,7 @@ async function runClaude(credentials, options = {}) {
997
1014
  logger.debug("Stopped Happy MCP server");
998
1015
  hookServer.stop();
999
1016
  cleanupHookSettingsFile(hookSettingsPath);
1017
+ account.cleanup();
1000
1018
  logger.debug("Stopped Hook server and cleaned up settings file");
1001
1019
  process.exit(exitCode);
1002
1020
  }