very-happy-cli 0.2.191 → 0.2.193

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-CCy_9AfR.mjs → AcpBackend-B4PwjqHt.mjs} +3 -3
  2. package/dist/{AcpBackend-DgrIc1vH.cjs → AcpBackend-DtJCgftG.cjs} +3 -3
  3. package/dist/{AcpSessionManager-CQnxx7gD.mjs → AcpSessionManager-BzKWgkdP.mjs} +2 -2
  4. package/dist/{AcpSessionManager-DVOzCD3P.cjs → AcpSessionManager-D4qshX_H.cjs} +2 -2
  5. package/dist/{BasePermissionHandler-C9Ag7yvs.cjs → BasePermissionHandler-5iG-cvA2.cjs} +1 -1
  6. package/dist/{BasePermissionHandler-DYLN6Ec9.mjs → BasePermissionHandler-DV6UM6e9.mjs} +1 -1
  7. package/dist/account-Dco_nGT4.mjs +297 -0
  8. package/dist/account-DvpA60oU.cjs +302 -0
  9. package/dist/accountService-Cd7bnkfd.mjs +916 -0
  10. package/dist/accountService-CuUSJDhP.cjs +921 -0
  11. package/dist/{acpSessionResume-TvP_4Zq2.cjs → acpSessionResume-Bk9mjXZ9.cjs} +1 -1
  12. package/dist/{acpSessionResume-Bi7pA1n_.mjs → acpSessionResume-TQwN9ZZE.mjs} +1 -1
  13. package/dist/{agentHome-DGv105SR.mjs → agentHome-Bep8semY.mjs} +4 -4
  14. package/dist/{agentHome-DNUKJWOY.cjs → agentHome-c2dlgcw1.cjs} +4 -4
  15. package/dist/{api-BBxZ7y2z.cjs → api-CBE_a88I.cjs} +10 -10
  16. package/dist/{api-jfeMRg5R.mjs → api-DUfunY3x.mjs} +10 -10
  17. package/dist/{apiMachine-DqyjKBZG.cjs → apiMachine-BqtG0IWm.cjs} +83 -27
  18. package/dist/{apiMachine-DRJ7y-BB.mjs → apiMachine-CU_bw5nV.mjs} +78 -22
  19. package/dist/{attachmentContent-BO2njyza.cjs → attachmentContent-B3AzuYqk.cjs} +2 -2
  20. package/dist/{attachmentContent-Dm_RIs5L.mjs → attachmentContent-KNIZxwlu.mjs} +2 -2
  21. package/dist/{auth-BYDtjVNb.mjs → auth-CZ7pKS-j.mjs} +8 -8
  22. package/dist/{auth-DnxoVkkf.cjs → auth-DCjxpI6Z.cjs} +5 -5
  23. package/dist/{auth-DLR3ksCF.cjs → auth-SJ_dPw7H.cjs} +8 -8
  24. package/dist/{auth-DC6rg8lJ.mjs → auth-jN5dNqTO.mjs} +5 -5
  25. package/dist/{auto-CwO0u8hB.cjs → auto-B_59RYH1.cjs} +23 -21
  26. package/dist/{auto-D5Jhukq1.mjs → auto-DC0Sq-qB.mjs} +23 -21
  27. package/dist/{bootstrap-rLaL3kTa.mjs → bootstrap-B3gMpU9e.mjs} +2 -2
  28. package/dist/{bootstrap-sly4qPPY.cjs → bootstrap-CoJu9VnB.cjs} +2 -2
  29. package/dist/{browser-CHpVgyni.mjs → browser-LHW2hBH8.mjs} +1 -1
  30. package/dist/{browser-BTgZ9d4i.cjs → browser-v1pdPP1E.cjs} +1 -1
  31. package/dist/claudeAccountEnv-BL1pR_37.mjs +133 -0
  32. package/dist/claudeAccountEnv-CEX_EMZr.cjs +138 -0
  33. package/dist/{claudeLocal-Bgb5GGsq.mjs → claudeLocal-BZUgA5G2.mjs} +5 -5
  34. package/dist/{claudeLocal-1vuTFcL8.cjs → claudeLocal-BrzM2RBI.cjs} +5 -5
  35. package/dist/{claudeLocalLauncher-T7EfT68h.mjs → claudeLocalLauncher-A0AQyHFi.mjs} +10 -10
  36. package/dist/{claudeLocalLauncher-DOsL6HFY.cjs → claudeLocalLauncher-XAMpXUM7.cjs} +10 -10
  37. package/dist/{claudeSessionFork-Cko4SaVi.cjs → claudeSessionFork-Mhn2fYe_.cjs} +1 -1
  38. package/dist/{claudeSessionFork-CPvi6yDX.mjs → claudeSessionFork-_GwIlmMB.mjs} +1 -1
  39. package/dist/{client-BXD66ZF5.mjs → client-7RnI9J0W.mjs} +2 -2
  40. package/dist/{client-Bi20Ka0h.mjs → client-Bde4QVIn.mjs} +4 -2
  41. package/dist/{client-C5-C0t2a.cjs → client-CJr8Pjwm.cjs} +4 -2
  42. package/dist/{client-BscskEBk.cjs → client-D2GWkd-T.cjs} +2 -2
  43. package/dist/{client-C-OdTbrU.cjs → client-DLlnmAPL.cjs} +4 -4
  44. package/dist/{client-Bh1aUPh-.mjs → client-DwbhrX6D.mjs} +4 -4
  45. package/dist/codex/happyMcpStdioBridge.cjs +16 -16
  46. package/dist/codex/happyMcpStdioBridge.mjs +16 -16
  47. package/dist/codexAccount-BDQjRbtI.cjs +1028 -0
  48. package/dist/codexAccount-NOX5pmQf.mjs +1015 -0
  49. package/dist/{codexAppServerClient-DXhAf6i-.mjs → codexAppServerClient-B3QJV6Ey.mjs} +18 -7
  50. package/dist/{codexAppServerClient-DKXeikEe.cjs → codexAppServerClient-DWEsZUC4.cjs} +18 -7
  51. package/dist/{codexCommand-DvbbpYBS.cjs → codexCommand-Bg8AmxVm.cjs} +195 -63
  52. package/dist/{codexCommand-CIaOiiOj.mjs → codexCommand-D1xlj4sT.mjs} +196 -64
  53. package/dist/{codexTermination-BszWfyk5.cjs → codexTermination-ByX9GcEJ.cjs} +1 -1
  54. package/dist/{codexTermination-BcQdEDaw.mjs → codexTermination-CaWAVQjZ.mjs} +1 -1
  55. package/dist/{config-Di3Cf6js.cjs → config-B2GGbiTv.cjs} +3 -3
  56. package/dist/{config-OCEcVVK1.mjs → config-C2XYEwXz.mjs} +3 -3
  57. package/dist/{configuration-DfPBa-9d.cjs → configuration-BBK0rmmj.cjs} +1 -1
  58. package/dist/{configuration-ECqXu34R.mjs → configuration-ThKBP_zY.mjs} +1 -1
  59. package/dist/{connect-BTfAUhk8.mjs → connect-BirnCl9q.mjs} +13 -13
  60. package/dist/{connect-BPQRuOw5.cjs → connect-C3tZs_NC.cjs} +13 -13
  61. package/dist/{context-CfgTFpCB.mjs → context-C0EFLnOg.mjs} +1 -1
  62. package/dist/{context-Co7hUaW-.cjs → context-wDp0aZBK.cjs} +1 -1
  63. package/dist/{controlClient-ClI7A0qE.mjs → controlClient-Ckl8N1MS.mjs} +14 -5
  64. package/dist/{controlClient-C13_pSKG.cjs → controlClient-DwWTns3A.cjs} +15 -4
  65. package/dist/{createSessionMetadata-Cf78KHtt.cjs → createSessionMetadata-DqZ6h02H.cjs} +2 -2
  66. package/dist/{createSessionMetadata-B0eT_Kfj.mjs → createSessionMetadata-vug4Cv8z.mjs} +2 -2
  67. package/dist/daemonAccounts-CpGDY_4k.cjs +54 -0
  68. package/dist/daemonAccounts-DwPwKxvv.mjs +30 -0
  69. package/dist/{defaultPermissionMode-oqTupStc.cjs → defaultPermissionMode-BakXiqRr.cjs} +1 -1
  70. package/dist/{defaultPermissionMode-m6z2QVyP.mjs → defaultPermissionMode-DF5AfeBb.mjs} +1 -1
  71. package/dist/{deterministicJson-BtSwbsok.mjs → deterministicJson-BzX94gi3.mjs} +13 -13
  72. package/dist/{deterministicJson-CpFFgUL_.cjs → deterministicJson-t33SsuRC.cjs} +13 -13
  73. package/dist/{doctor-BEU0_1Xv.cjs → doctor-B9ug1LZb.cjs} +7 -7
  74. package/dist/{doctor-lsxmAK4o.mjs → doctor-C1zyOSXw.mjs} +7 -7
  75. package/dist/{downloadTarget-BXqXhNF7.mjs → downloadTarget-Baslc6jW.mjs} +6 -6
  76. package/dist/{downloadTarget-CikzJv1h.cjs → downloadTarget-T1id2Gh6.cjs} +6 -6
  77. package/dist/{ensureDaemonRunning-B_9WAlbU.mjs → ensureDaemonRunning-C6ERYK-O.mjs} +5 -5
  78. package/dist/{ensureDaemonRunning-BUuH-pbE.cjs → ensureDaemonRunning-CoAg11Zi.cjs} +5 -5
  79. package/dist/{handleResumeCommand-BK9XKH_l.mjs → handleResumeCommand-CrlqDuz7.mjs} +5 -5
  80. package/dist/{handleResumeCommand-Dj7oi2KO.cjs → handleResumeCommand-DPi-sPm7.cjs} +5 -5
  81. package/dist/{index-D3c7CLot.cjs → index-B1swQJUS.cjs} +4 -4
  82. package/dist/{index-CmZusg8Q.cjs → index-B2dJA8VG.cjs} +3 -3
  83. package/dist/{index-CLUHaPU8.cjs → index-BUFrKZeQ.cjs} +205 -5
  84. package/dist/{index-BjZnpGWX.mjs → index-BbdV2mzy.mjs} +3 -3
  85. package/dist/{index-BdOJOZ6J.mjs → index-BcSPg3c5.mjs} +4 -4
  86. package/dist/{index-CauRYQKr.cjs → index-Bkslzin5.cjs} +44 -40
  87. package/dist/{index-DuK9XYbZ.mjs → index-Cn73rdtQ.mjs} +4 -4
  88. package/dist/{index-Bq8NKSCF.mjs → index-D1YnIih6.mjs} +195 -6
  89. package/dist/{index-Cxso1rg4.mjs → index-fZO4nF6e.mjs} +45 -41
  90. package/dist/{index-Dg2NAF_-.cjs → index-rocrvOYG.cjs} +4 -4
  91. package/dist/index.cjs +2 -2
  92. package/dist/index.mjs +2 -2
  93. package/dist/{install-DXllkuy0.cjs → install-CArXjPfW.cjs} +3 -3
  94. package/dist/{install-DTIveLOS.mjs → install-CChhyV2G.mjs} +3 -3
  95. package/dist/lib.cjs +12 -12
  96. package/dist/lib.d.cts +354 -0
  97. package/dist/lib.d.mts +354 -0
  98. package/dist/lib.mjs +12 -12
  99. package/dist/{lidState-CD81ryTy.mjs → lidState-B6yYKjNK.mjs} +1 -1
  100. package/dist/{lidState-C9_DoF9i.cjs → lidState-B_v6qgfE.cjs} +1 -1
  101. package/dist/{localHappyAgentAuth-Cg-m1lwm.mjs → localHappyAgentAuth-KRlg_aI0.mjs} +1 -1
  102. package/dist/{localHappyAgentAuth-CCjUvOfi.cjs → localHappyAgentAuth-jJH0n67S.cjs} +1 -1
  103. package/dist/{logger-Ct2zvaq0.cjs → logger-CX3x2eI4.cjs} +2 -2
  104. package/dist/{logger-GcbI0eg2.mjs → logger-JV7-4Q_6.mjs} +2 -2
  105. package/dist/{machineMetadata-CXRmFNOV.mjs → machineMetadata-D5-SW9kv.mjs} +3 -3
  106. package/dist/{machineMetadata-DDCVWb_x.cjs → machineMetadata-DhZuM0iB.cjs} +3 -3
  107. package/dist/{main-BHC-WIcM.cjs → main-1x1HGQEy.cjs} +92 -48
  108. package/dist/{main-omGr_ONk.mjs → main-CFOdXbPD.mjs} +92 -48
  109. package/dist/{mcp-xUzii0m8.cjs → mcp-BnKBSEh7.cjs} +18 -15
  110. package/dist/{mcp-D5hxmRAq.mjs → mcp-R6lMcFLO.mjs} +18 -15
  111. package/dist/{mirrorProtocol-Lcx20Oby.mjs → mirrorProtocol-CD4ntuZJ.mjs} +3 -3
  112. package/dist/{mirrorProtocol-Dfl8Ahyf.cjs → mirrorProtocol-DO-KtvAL.cjs} +3 -3
  113. package/dist/{package-BsUHyqWe.mjs → package-Bw3H6VLn.mjs} +7 -7
  114. package/dist/{package-9n7wd2dT.cjs → package-uzlvxa5S.cjs} +7 -7
  115. package/dist/{panels-CpEKWWbI.mjs → panels-BamhZCoZ.mjs} +5 -5
  116. package/dist/{panels-BfknEmt7.cjs → panels-C46FxjmH.cjs} +5 -5
  117. package/dist/{peerTools-CElYh-5u.cjs → peerTools-D-VNNFw-.cjs} +5 -5
  118. package/dist/{peerTools-CwCe6tmJ.mjs → peerTools-WtRgTSqG.mjs} +5 -5
  119. package/dist/{persistence-Cpw4yJs8.mjs → persistence-Cg4sfjQV.mjs} +2 -2
  120. package/dist/{persistence-A2NeERZJ.cjs → persistence-CsmAgN-C.cjs} +2 -2
  121. package/dist/{piRunnerArgs-Bqmu16He.mjs → piRunnerArgs-BbaAQvb4.mjs} +2 -2
  122. package/dist/{piRunnerArgs-BnFU0K73.cjs → piRunnerArgs-vnFygygF.cjs} +1 -1
  123. package/dist/{piRuntime-Cgn1b0OX.mjs → piRuntime-Bid7TBf5.mjs} +1 -1
  124. package/dist/{piRuntime-DpS9TAIs.cjs → piRuntime-C2uj5Ucx.cjs} +1 -1
  125. package/dist/{piTerminal-rmve-VlI.cjs → piTerminal-Ckpjfoqa.cjs} +20 -17
  126. package/dist/{piTerminal-BGdps8f3.mjs → piTerminal-CqxgrI13.mjs} +20 -17
  127. package/dist/{pushNotifications-23YSd-0l.cjs → pushNotifications-BCg7YAiu.cjs} +5 -3
  128. package/dist/{pushNotifications-XAM8__Pg.mjs → pushNotifications-BbE-qV9I.mjs} +5 -3
  129. package/dist/{query-SZcYnJoW.mjs → query-Bfr9O_62.mjs} +1 -1
  130. package/dist/{query-u2GX-I0C.cjs → query-vQ-HG394.cjs} +1 -1
  131. package/dist/{rateLimitReporter-CaTzBe3x.cjs → rateLimitReporter-BZ8x0-6-.cjs} +3 -3
  132. package/dist/{rateLimitReporter-COUkf446.mjs → rateLimitReporter-CAz7VMw4.mjs} +3 -3
  133. package/dist/{rateLimitWindows-B2Kx6L0S.cjs → rateLimitWindows-BZl6GMwQ.cjs} +1 -1
  134. package/dist/{rateLimitWindows-j_qQk0KY.mjs → rateLimitWindows-CRARnKaI.mjs} +1 -1
  135. package/dist/reconnectEnv-B31lY4nR.cjs +27 -0
  136. package/dist/reconnectEnv-DeSvHl3q.mjs +24 -0
  137. package/dist/{registerCommonHandlers-D1MiSfcB.cjs → registerCommonHandlers-CZGmrPbT.cjs} +2 -2
  138. package/dist/{registerCommonHandlers-DRRfinzK.mjs → registerCommonHandlers-Cj3Nl9y-.mjs} +2 -2
  139. package/dist/{registerKillSessionHandler-Cpug_r5C.mjs → registerKillSessionHandler-Bg9t45Ub.mjs} +6 -6
  140. package/dist/{registerKillSessionHandler-hvCsEn7b.cjs → registerKillSessionHandler-C3EDnW4F.cjs} +6 -6
  141. package/dist/{remoteSessionClient-BdnJ_n8C.mjs → remoteSessionClient--0vfA7I5.mjs} +5 -5
  142. package/dist/{remoteSessionClient-6ymeMVa4.cjs → remoteSessionClient-CcSP24Zq.cjs} +5 -5
  143. package/dist/{reportProgressTool-XgQBzxoD.mjs → reportProgressTool-DVru7jc_.mjs} +3 -3
  144. package/dist/{reportProgressTool-tzQLCLIw.cjs → reportProgressTool-Ddg1yVq2.cjs} +3 -3
  145. package/dist/{run-DYL_wuj7.cjs → run-BTrIT_jU.cjs} +347 -856
  146. package/dist/{run-Bt0AklUU.mjs → run-HtvH6BLi.mjs} +346 -855
  147. package/dist/{runClaude-C3rii_S6.mjs → runClaude-DsHTk5Bu.mjs} +62 -44
  148. package/dist/{runClaude-CBEpYO4S.cjs → runClaude-ipjwAHPI.cjs} +62 -44
  149. package/dist/{runClaudeDeps-CYuozSC6.cjs → runClaudeDeps-BKpwL6ln.cjs} +51 -42
  150. package/dist/{runClaudeDeps-DlVfMG4F.mjs → runClaudeDeps-BV3vpeyY.mjs} +56 -47
  151. package/dist/{runGemini-CEI3b90u.cjs → runGemini-B-G0_7Ab.cjs} +33 -33
  152. package/dist/{runGemini-DkYhRk9S.mjs → runGemini-DhjK6_Fp.mjs} +33 -33
  153. package/dist/{runOpenClaw-DpprWCoz.mjs → runOpenClaw-B6lawk8n.mjs} +18 -18
  154. package/dist/{runOpenClaw-BgjD6E4d.cjs → runOpenClaw-BHIo8tkn.cjs} +18 -18
  155. package/dist/{sandbox-XCDUbH72.cjs → sandbox-BAsO0ILe.cjs} +4 -4
  156. package/dist/{sandbox-DJ7A7lsy.mjs → sandbox-CKb7pCXg.mjs} +4 -4
  157. package/dist/selfCheck-CZ-t1Xzq.mjs +88 -0
  158. package/dist/{selfCheck-BYUDB1Uq.cjs → selfCheck-D4VvVZNi.cjs} +39 -37
  159. package/dist/{send-CASDBCyJ.cjs → send-Cz5m39QR.cjs} +8 -8
  160. package/dist/{send-Ba63huxv.mjs → send-D8ipLKMY.mjs} +8 -8
  161. package/dist/{server-w3W0toNd.mjs → server-CjvgT3N9.mjs} +4 -4
  162. package/dist/{server-cZoV9XRt.cjs → server-CySyJKPH.cjs} +6 -6
  163. package/dist/{sessionLock-G2PMqvsh.mjs → sessionLock-B73fhgQN.mjs} +10 -4
  164. package/dist/{sessionLock-BmLA2S8K.cjs → sessionLock-DdDCuNUs.cjs} +10 -3
  165. package/dist/{sessionOps-DPw5k8vV.mjs → sessionOps-C65Iej_C.mjs} +50 -8
  166. package/dist/{sessionOps-DXlTmS7J.cjs → sessionOps-XSEjIqNq.cjs} +50 -8
  167. package/dist/sessionProvider-CLVNkfji.mjs +110 -0
  168. package/dist/sessionProvider-Dgsty8z_.cjs +115 -0
  169. package/dist/{sessionScanner-AHjnicxi.cjs → sessionScanner-D8IVXMMH.cjs} +3 -3
  170. package/dist/{sessionScanner-BCXpdZJN.mjs → sessionScanner-MW1P9Pm9.mjs} +3 -3
  171. package/dist/{sessions-BiBXOBx0.cjs → sessions-BKz7gZqg.cjs} +10 -10
  172. package/dist/{sessions-Clk8MR5Y.mjs → sessions-Dtk_agUL.mjs} +10 -10
  173. package/dist/{setupOfflineReconnection-DI-QZGYz.mjs → setupOfflineReconnection-Bvdy-2xd.mjs} +2 -2
  174. package/dist/{setupOfflineReconnection-BKLfOd-i.cjs → setupOfflineReconnection-DxMiW7OV.cjs} +2 -2
  175. package/dist/{spawn-D5omsx1Q.cjs → spawn-DiPkJcrQ.cjs} +36 -17
  176. package/dist/{spawn-4tsp1uhh.mjs → spawn-Dm4xsZBX.mjs} +36 -17
  177. package/dist/{spawnAgents-CtkkIFHd.cjs → spawnAgents-B9olJ8xn.cjs} +1 -1
  178. package/dist/{spawnAgents-CjoU6ZOS.mjs → spawnAgents-I29H9nO8.mjs} +1 -1
  179. package/dist/{spawnHappyCLI-CF_gLi92.cjs → spawnHappyCLI-BYGOUda1.cjs} +1 -1
  180. package/dist/{spawnHappyCLI-CIA9Sc_5.mjs → spawnHappyCLI-CnMwzjWX.mjs} +1 -1
  181. package/dist/{startFileWatcher-9Stpxe7p.cjs → startFileWatcher-D14W6gn-.cjs} +1 -1
  182. package/dist/{startFileWatcher-CDO6fb2m.mjs → startFileWatcher-DePAY1T5.mjs} +1 -1
  183. package/dist/{startupSessionCreate-BtR4iYEC.mjs → startupSessionCreate-DoK0IvJG.mjs} +3 -3
  184. package/dist/{startupSessionCreate-CcF7rGGB.cjs → startupSessionCreate-rBHd4tc1.cjs} +3 -3
  185. package/dist/store-CkNa6oj4.cjs +326 -0
  186. package/dist/store-Vej_738f.mjs +305 -0
  187. package/dist/{streamRelay-BhI6jqF-.cjs → streamRelay-C0G1HOOd.cjs} +1 -1
  188. package/dist/{streamRelay-DMwOMTKf.mjs → streamRelay-C5U-C4GS.mjs} +1 -1
  189. package/dist/{sync-C0PRuTMj.mjs → sync-BP6vnxVP.mjs} +1 -1
  190. package/dist/{sync-Ba8N6xba.cjs → sync-WYBwkJvG.cjs} +1 -1
  191. package/dist/{systemPrompt-DV5IReD4.cjs → systemPrompt-BkQlCk5_.cjs} +2 -2
  192. package/dist/{systemPrompt-D0q8eyjy.mjs → systemPrompt-aRqBmkpw.mjs} +2 -2
  193. package/dist/{teams-BO3_arwM.mjs → teams-CGmC4ygu.mjs} +7 -7
  194. package/dist/{teams-z3Gp-KlV.cjs → teams-phbpwAGD.cjs} +7 -7
  195. package/dist/{template-B_5l6pkc.cjs → template-B9pLEP8v.cjs} +2 -2
  196. package/dist/{template-DLR_0hfj.mjs → template-CL9EvQLQ.mjs} +2 -2
  197. package/dist/{time-Cy0a-7YX.cjs → time-BTLcO8jp.cjs} +1 -1
  198. package/dist/{time-D0jvDRhn.mjs → time-Cw0liIqB.mjs} +1 -1
  199. package/dist/{titleGenerator-RGHWP2YL.cjs → titleGenerator-Y1_7ceJC.cjs} +17 -13
  200. package/dist/{titleGenerator-AGQsXskb.mjs → titleGenerator-h6TmFe-c.mjs} +16 -12
  201. package/dist/{todo-CzIDPLFy.cjs → todo-BxiPiCvB.cjs} +6 -6
  202. package/dist/{todo-BZ954vsz.mjs → todo-OKcTC_VC.mjs} +6 -6
  203. package/dist/{tools-Bei5i03L.mjs → tools-BR-drXZ8.mjs} +3 -2
  204. package/dist/{tools-B1x1j6tz.cjs → tools-CcebYtLj.cjs} +3 -2
  205. package/dist/{uninstall-C3cnIvz1.cjs → uninstall-CnDeCC-M.cjs} +3 -3
  206. package/dist/{uninstall-B4T_e3Mr.mjs → uninstall-D3stWKD2.mjs} +3 -3
  207. package/dist/wrapperAccount-BkufO_9g.mjs +107 -0
  208. package/dist/wrapperAccount-D2A4DuZy.cjs +113 -0
  209. package/package.json +7 -7
  210. package/dist/providerBinding-B-Qbx9W2.cjs +0 -140
  211. package/dist/providerBinding-CYubGg-Z.mjs +0 -132
  212. package/dist/selfCheck-C-rNljKV.mjs +0 -86
  213. package/dist/sessionProvider-DUn91LhJ.mjs +0 -109
  214. package/dist/sessionProvider-Dg691XQ4.cjs +0 -114
@@ -1,11 +1,11 @@
1
1
  import { execSync } from 'node:child_process';
2
2
  import { spawn } from 'cross-spawn';
3
3
  import { createInterface } from 'node:readline';
4
- import { l as logger } from './logger-GcbI0eg2.mjs';
4
+ import { l as logger } from './logger-JV7-4Q_6.mjs';
5
5
  import { e as errorLogMetadata, c as contentLogMetadata } from './contentLogMetadata-BlWI0egu.mjs';
6
6
  import { i as initializeSandbox, w as wrapForMcpTransport } from './manager-BEsI4qt3.mjs';
7
- import { p as packageJson } from './package-BsUHyqWe.mjs';
8
- import { s as shouldReadCodexRateLimits, i as isUnsupportedCodexMethodError } from './rateLimitWindows-j_qQk0KY.mjs';
7
+ import { p as packageJson } from './package-Bw3H6VLn.mjs';
8
+ import { s as shouldReadCodexRateLimits, i as isUnsupportedCodexMethodError } from './rateLimitWindows-CRARnKaI.mjs';
9
9
  import { s as stopProcessGracefully, k as killProcessTree } from './processTree-CP5IvQ2Z.mjs';
10
10
 
11
11
  const CODEX_HELPER_LABEL_MAX_CHARS = 80;
@@ -195,6 +195,15 @@ class CodexAppServerClient {
195
195
  rateLimitReadAt = 0;
196
196
  rateLimitReadInFlight = false;
197
197
  rateLimitReadUnsupported = false;
198
+ /**
199
+ * B-850b: the session's account (agentProfiles/codexWrapperAccount.ts) —
200
+ * env for the app-server (a ChatGPT account's CODEX_HOME overlay) and the
201
+ * provider every thread runs on. Kept across idle-release respawns.
202
+ */
203
+ accountOverrides = { env: {} };
204
+ setAccountOverrides(overrides) {
205
+ this.accountOverrides = overrides;
206
+ }
198
207
  constructor(sandboxConfig) {
199
208
  this.sandboxConfig = sandboxConfig;
200
209
  }
@@ -560,6 +569,7 @@ class CodexAppServerClient {
560
569
  if (this.sandboxEnabled) {
561
570
  env.CODEX_SANDBOX = "seatbelt";
562
571
  }
572
+ Object.assign(env, this.accountOverrides.env);
563
573
  logger.debug(`[CodexAppServer] Spawning: ${command} ${args.join(" ")}`);
564
574
  const epoch = ++this.processEpoch;
565
575
  const proc = spawn(command, args, {
@@ -730,7 +740,8 @@ ${text}`.slice(-400);
730
740
  }
731
741
  }
732
742
  buildThreadConfig(mcpServers) {
733
- return mcpServers ? { mcp_servers: mcpServers } : null;
743
+ const config = { ...mcpServers ? { mcp_servers: mcpServers } : {}, ...this.accountOverrides.config };
744
+ return Object.keys(config).length > 0 ? config : null;
734
745
  }
735
746
  rememberThreadDefaults(opts) {
736
747
  this.threadDefaults = {
@@ -746,7 +757,7 @@ ${text}`.slice(-400);
746
757
  await this.ensureConnected();
747
758
  const params = {
748
759
  model: opts.model ?? null,
749
- modelProvider: null,
760
+ modelProvider: this.accountOverrides.modelProvider ?? null,
750
761
  profile: null,
751
762
  cwd: opts.cwd ?? process.cwd(),
752
763
  approvalPolicy: opts.approvalPolicy ?? null,
@@ -777,7 +788,7 @@ ${text}`.slice(-400);
777
788
  const params = {
778
789
  threadId,
779
790
  model: opts?.model ?? defaults.model ?? null,
780
- modelProvider: null,
791
+ modelProvider: this.accountOverrides.modelProvider ?? null,
781
792
  cwd: opts?.cwd ?? defaults.cwd ?? process.cwd(),
782
793
  approvalPolicy: opts?.approvalPolicy ?? defaults.approvalPolicy ?? null,
783
794
  sandbox: opts?.sandbox ?? defaults.sandbox ?? null,
@@ -806,7 +817,7 @@ ${text}`.slice(-400);
806
817
  const params = {
807
818
  threadId: opts.threadId,
808
819
  model: opts.model ?? defaults.model ?? null,
809
- modelProvider: null,
820
+ modelProvider: this.accountOverrides.modelProvider ?? null,
810
821
  cwd: opts.cwd ?? defaults.cwd ?? process.cwd(),
811
822
  approvalPolicy: opts.approvalPolicy ?? defaults.approvalPolicy ?? null,
812
823
  sandbox: opts.sandbox ?? defaults.sandbox ?? null,
@@ -3,11 +3,11 @@
3
3
  var node_child_process = require('node:child_process');
4
4
  var spawn = require('cross-spawn');
5
5
  var node_readline = require('node:readline');
6
- var logger = require('./logger-Ct2zvaq0.cjs');
6
+ var logger = require('./logger-CX3x2eI4.cjs');
7
7
  var contentLogMetadata = require('./contentLogMetadata-ZSFk_NjQ.cjs');
8
8
  var manager = require('./manager-HrEj442o.cjs');
9
- var _package = require('./package-9n7wd2dT.cjs');
10
- var rateLimitWindows = require('./rateLimitWindows-B2Kx6L0S.cjs');
9
+ var _package = require('./package-uzlvxa5S.cjs');
10
+ var rateLimitWindows = require('./rateLimitWindows-BZl6GMwQ.cjs');
11
11
  var processTree = require('./processTree-CMHWlVse.cjs');
12
12
 
13
13
  const CODEX_HELPER_LABEL_MAX_CHARS = 80;
@@ -197,6 +197,15 @@ class CodexAppServerClient {
197
197
  rateLimitReadAt = 0;
198
198
  rateLimitReadInFlight = false;
199
199
  rateLimitReadUnsupported = false;
200
+ /**
201
+ * B-850b: the session's account (agentProfiles/codexWrapperAccount.ts) —
202
+ * env for the app-server (a ChatGPT account's CODEX_HOME overlay) and the
203
+ * provider every thread runs on. Kept across idle-release respawns.
204
+ */
205
+ accountOverrides = { env: {} };
206
+ setAccountOverrides(overrides) {
207
+ this.accountOverrides = overrides;
208
+ }
200
209
  constructor(sandboxConfig) {
201
210
  this.sandboxConfig = sandboxConfig;
202
211
  }
@@ -562,6 +571,7 @@ class CodexAppServerClient {
562
571
  if (this.sandboxEnabled) {
563
572
  env.CODEX_SANDBOX = "seatbelt";
564
573
  }
574
+ Object.assign(env, this.accountOverrides.env);
565
575
  logger.logger.debug(`[CodexAppServer] Spawning: ${command} ${args.join(" ")}`);
566
576
  const epoch = ++this.processEpoch;
567
577
  const proc = spawn.spawn(command, args, {
@@ -732,7 +742,8 @@ ${text}`.slice(-400);
732
742
  }
733
743
  }
734
744
  buildThreadConfig(mcpServers) {
735
- return mcpServers ? { mcp_servers: mcpServers } : null;
745
+ const config = { ...mcpServers ? { mcp_servers: mcpServers } : {}, ...this.accountOverrides.config };
746
+ return Object.keys(config).length > 0 ? config : null;
736
747
  }
737
748
  rememberThreadDefaults(opts) {
738
749
  this.threadDefaults = {
@@ -748,7 +759,7 @@ ${text}`.slice(-400);
748
759
  await this.ensureConnected();
749
760
  const params = {
750
761
  model: opts.model ?? null,
751
- modelProvider: null,
762
+ modelProvider: this.accountOverrides.modelProvider ?? null,
752
763
  profile: null,
753
764
  cwd: opts.cwd ?? process.cwd(),
754
765
  approvalPolicy: opts.approvalPolicy ?? null,
@@ -779,7 +790,7 @@ ${text}`.slice(-400);
779
790
  const params = {
780
791
  threadId,
781
792
  model: opts?.model ?? defaults.model ?? null,
782
- modelProvider: null,
793
+ modelProvider: this.accountOverrides.modelProvider ?? null,
783
794
  cwd: opts?.cwd ?? defaults.cwd ?? process.cwd(),
784
795
  approvalPolicy: opts?.approvalPolicy ?? defaults.approvalPolicy ?? null,
785
796
  sandbox: opts?.sandbox ?? defaults.sandbox ?? null,
@@ -808,7 +819,7 @@ ${text}`.slice(-400);
808
819
  const params = {
809
820
  threadId: opts.threadId,
810
821
  model: opts.model ?? defaults.model ?? null,
811
- modelProvider: null,
822
+ modelProvider: this.accountOverrides.modelProvider ?? null,
812
823
  cwd: opts.cwd ?? defaults.cwd ?? process.cwd(),
813
824
  approvalPolicy: opts.approvalPolicy ?? defaults.approvalPolicy ?? null,
814
825
  sandbox: opts.sandbox ?? defaults.sandbox ?? null,
@@ -1,109 +1,114 @@
1
1
  'use strict';
2
2
 
3
- var auth = require('./auth-DnxoVkkf.cjs');
4
- var index = require('./index-CLUHaPU8.cjs');
5
- var defaultPermissionMode = require('./defaultPermissionMode-oqTupStc.cjs');
6
- var deterministicJson = require('./deterministicJson-CpFFgUL_.cjs');
7
- var client = require('./client-C5-C0t2a.cjs');
3
+ var auth = require('./auth-DCjxpI6Z.cjs');
4
+ var index = require('./index-BUFrKZeQ.cjs');
5
+ var defaultPermissionMode = require('./defaultPermissionMode-BakXiqRr.cjs');
6
+ var deterministicJson = require('./deterministicJson-t33SsuRC.cjs');
7
+ var client = require('./client-CJr8Pjwm.cjs');
8
8
  var promises = require('node:fs/promises');
9
9
  var forkBackfill = require('./forkBackfill-8eLDeS73.cjs');
10
10
  var node_crypto = require('node:crypto');
11
11
  var cuid2 = require('@paralleldrive/cuid2');
12
- var api = require('./api-BBxZ7y2z.cjs');
12
+ var api = require('./api-CBE_a88I.cjs');
13
13
  var heldInput = require('./heldInput-BOtqFO2r.cjs');
14
- var attachmentContent = require('./attachmentContent-BO2njyza.cjs');
14
+ var attachmentContent = require('./attachmentContent-B3AzuYqk.cjs');
15
15
  var ink = require('ink');
16
- var sessionLock = require('./sessionLock-BmLA2S8K.cjs');
16
+ var sessionLock = require('./sessionLock-DdDCuNUs.cjs');
17
17
  var React = require('react');
18
- var codexAppServerClient = require('./codexAppServerClient-DKXeikEe.cjs');
19
- var rateLimitReporter = require('./rateLimitReporter-CaTzBe3x.cjs');
20
- var logger = require('./logger-Ct2zvaq0.cjs');
21
- var BasePermissionHandler = require('./BasePermissionHandler-C9Ag7yvs.cjs');
22
- var codexTermination = require('./codexTermination-BszWfyk5.cjs');
18
+ var codexAppServerClient = require('./codexAppServerClient-DWEsZUC4.cjs');
19
+ var rateLimitReporter = require('./rateLimitReporter-BZ8x0-6-.cjs');
20
+ var logger = require('./logger-CX3x2eI4.cjs');
21
+ var BasePermissionHandler = require('./BasePermissionHandler-5iG-cvA2.cjs');
22
+ var codexTermination = require('./codexTermination-ByX9GcEJ.cjs');
23
23
  var node_child_process = require('node:child_process');
24
- var persistence = require('./persistence-A2NeERZJ.cjs');
25
- var machineMetadata = require('./machineMetadata-DDCVWb_x.cjs');
26
- var configuration = require('./configuration-DfPBa-9d.cjs');
27
- var registerKillSessionHandler = require('./registerKillSessionHandler-hvCsEn7b.cjs');
24
+ var persistence = require('./persistence-CsmAgN-C.cjs');
25
+ var machineMetadata = require('./machineMetadata-DhZuM0iB.cjs');
26
+ var configuration = require('./configuration-BBK0rmmj.cjs');
27
+ var registerKillSessionHandler = require('./registerKillSessionHandler-C3EDnW4F.cjs');
28
28
  var projectPath = require('./projectPath-C3ioB4Bu.cjs');
29
29
  var path = require('node:path');
30
- var createSessionMetadata = require('./createSessionMetadata-Cf78KHtt.cjs');
30
+ var createSessionMetadata = require('./createSessionMetadata-DqZ6h02H.cjs');
31
31
  var sessionExitLifecycle = require('./sessionExitLifecycle-DFltxXU8.cjs');
32
- var controlClient = require('./controlClient-C13_pSKG.cjs');
33
- var startupSessionCreate = require('./startupSessionCreate-CcF7rGGB.cjs');
32
+ var controlClient = require('./controlClient-DwWTns3A.cjs');
33
+ var startupSessionCreate = require('./startupSessionCreate-rBHd4tc1.cjs');
34
34
  var authRelay = require('./authRelay-Dy1qU9td.cjs');
35
- var setupOfflineReconnection = require('./setupOfflineReconnection-BKLfOd-i.cjs');
35
+ var setupOfflineReconnection = require('./setupOfflineReconnection-DxMiW7OV.cjs');
36
36
  var trimIdent = require('./trimIdent-4gvk9Wk6.cjs');
37
37
  var specialCommands = require('./specialCommands-J3JFOq0J.cjs');
38
38
  var constants = require('./constants-VJ0N6WuG.cjs');
39
39
  var editPaths = require('./editPaths-Bqp4OFPw.cjs');
40
- var ensureDaemonRunning = require('./ensureDaemonRunning-BUuH-pbE.cjs');
40
+ var reconnectEnv = require('./reconnectEnv-B31lY4nR.cjs');
41
+ var store = require('./store-CkNa6oj4.cjs');
42
+ var node_fs = require('node:fs');
43
+ var codexAccount = require('./codexAccount-BDQjRbtI.cjs');
44
+ var wrapperAccount = require('./wrapperAccount-D2A4DuZy.cjs');
45
+ var ensureDaemonRunning = require('./ensureDaemonRunning-CoAg11Zi.cjs');
41
46
  require('tweetnacl');
42
47
  require('axios');
43
- require('./time-Cy0a-7YX.cjs');
44
- require('./browser-BTgZ9d4i.cjs');
48
+ require('./time-BTLcO8jp.cjs');
49
+ require('./browser-v1pdPP1E.cjs');
45
50
  require('open');
46
51
  require('zod');
47
52
  require('./prompt-Bof2aQkI.cjs');
48
- require('./reportProgressTool-tzQLCLIw.cjs');
49
- require('./client-BscskEBk.cjs');
53
+ require('./reportProgressTool-Ddg1yVq2.cjs');
54
+ require('./client-D2GWkd-T.cjs');
50
55
  require('./precheckCompat-CWOi5c9L.cjs');
51
56
  require('./agentGuidance-BtBx2xxE.cjs');
52
- require('node:fs');
53
57
  require('node:os');
54
58
  require('./pi-DlsrPCTa.cjs');
55
59
  require('./fileStore-7qhnbs6N.cjs');
56
- require('./client-C-OdTbrU.cjs');
60
+ require('./client-DLlnmAPL.cjs');
57
61
  require('node:util');
58
- require('./context-Co7hUaW-.cjs');
59
- require('./sessionOps-DXlTmS7J.cjs');
62
+ require('./context-wDp0aZBK.cjs');
63
+ require('./sessionOps-XSEjIqNq.cjs');
60
64
  require('socket.io-client');
61
65
  require('./backgroundTaskActivity-CBvUdj39.cjs');
62
66
  require('./resources-BZ_Be0qM.cjs');
63
- require('./tools-B1x1j6tz.cjs');
64
- require('./peerTools-CElYh-5u.cjs');
67
+ require('./tools-CcebYtLj.cjs');
68
+ require('./peerTools-D-VNNFw-.cjs');
65
69
  require('./ids-B6ZC0HGt.cjs');
66
- require('./remoteSessionClient-6ymeMVa4.cjs');
70
+ require('./remoteSessionClient-CcSP24Zq.cjs');
67
71
  require('@modelcontextprotocol/sdk/server/mcp.js');
68
72
  require('node:http');
69
73
  require('@modelcontextprotocol/sdk/server/streamableHttp.js');
70
74
  require('./limits-C-a7gr04.cjs');
71
- require('./downloadTarget-CikzJv1h.cjs');
75
+ require('./downloadTarget-T1id2Gh6.cjs');
72
76
  require('./terminals-B_bfC9c2.cjs');
73
77
  require('./terminalTitleSuggest-DhvRFX3H.cjs');
74
78
  require('./tmuxSocket-D-Xt6Vn-.cjs');
75
- require('./bootstrap-sly4qPPY.cjs');
76
- require('./package-9n7wd2dT.cjs');
79
+ require('./bootstrap-CoJu9VnB.cjs');
80
+ require('./package-uzlvxa5S.cjs');
77
81
  require('./webPanels-FCgFKvVe.cjs');
78
- require('./pushNotifications-23YSd-0l.cjs');
82
+ require('./pushNotifications-BCg7YAiu.cjs');
79
83
  require('./contentLogMetadata-ZSFk_NjQ.cjs');
80
84
  require('./previewPath-B0rBdhy1.cjs');
81
85
  require('crypto');
82
- require('./lidState-C9_DoF9i.cjs');
86
+ require('./lidState-B_v6qgfE.cjs');
83
87
  require('os');
84
88
  require('child_process');
85
89
  require('node:events');
86
- require('./registerCommonHandlers-D1MiSfcB.cjs');
90
+ require('./registerCommonHandlers-CZGmrPbT.cjs');
87
91
  require('util');
88
92
  require('fs/promises');
89
93
  require('path');
90
94
  require('cross-spawn');
91
- require('./sync-Ba8N6xba.cjs');
95
+ require('./sync-WYBwkJvG.cjs');
92
96
  require('chalk');
93
97
  require('./cliUpdate-DsKXPFYp.cjs');
94
98
  require('./processTreeSnapshot-mDbnuojn.cjs');
95
99
  require('node:readline');
96
100
  require('./manager-HrEj442o.cjs');
97
101
  require('@anthropic-ai/sandbox-runtime');
98
- require('./rateLimitWindows-B2Kx6L0S.cjs');
102
+ require('./rateLimitWindows-BZl6GMwQ.cjs');
99
103
  require('./processTree-CMHWlVse.cjs');
100
104
  require('./detectCLI-BuYR_Qxe.cjs');
101
105
  require('fs');
102
- require('./localHappyAgentAuth-CCjUvOfi.cjs');
106
+ require('./localHappyAgentAuth-jJH0n67S.cjs');
103
107
  require('./fsMkdir-0K3yENml.cjs');
104
108
  require('./types-CRS-srZK.cjs');
105
109
  require('url');
106
- require('./spawnHappyCLI-CF_gLi92.cjs');
110
+ require('./claudeAccountEnv-CEX_EMZr.cjs');
111
+ require('./spawnHappyCLI-BYGOUda1.cjs');
107
112
  require('./doctorReadiness-Dl6yRQCy.cjs');
108
113
 
109
114
  function getStartedSubagents(state) {
@@ -1185,7 +1190,8 @@ async function resumeExistingThread(opts) {
1185
1190
  const resumedThread = await opts.client.resumeThread({
1186
1191
  threadId: opts.threadId,
1187
1192
  cwd: opts.cwd,
1188
- mcpServers: opts.mcpServers
1193
+ mcpServers: opts.mcpServers,
1194
+ ...opts.model ? { model: opts.model } : {}
1189
1195
  });
1190
1196
  opts.session.updateMetadata((currentMetadata) => ({
1191
1197
  ...currentMetadata,
@@ -1463,6 +1469,70 @@ function codexPublishablePermissionMode(mode) {
1463
1469
  return typeof mode === "string" && CODEX_REMOTE_PERMISSION_MODES.includes(mode) ? mode : null;
1464
1470
  }
1465
1471
 
1472
+ const MACHINE_CODEX_ACCOUNT = { profile: null, overrides: { env: {} }, unavailable: false, notices: [], cleanup: () => {
1473
+ } };
1474
+ function loadCodexWrapperAccount(happyHome, sessionId, spawnAccountId, env = process.env, now = Date.now()) {
1475
+ let bindings = store.readSessionBindings(happyHome);
1476
+ if (wrapperAccount.shouldRecordSpawnAccount(spawnAccountId, sessionId in bindings)) {
1477
+ store.writeSessionBinding(happyHome, sessionId, { account: spawnAccountId });
1478
+ bindings = { ...bindings, [sessionId]: { account: spawnAccountId } };
1479
+ }
1480
+ const probe = store.defaultSecretProbe(env);
1481
+ const resolution = codexAccount.resolveCodexAccount(sessionId, {
1482
+ home: happyHome,
1483
+ accounts: store.readAccounts(happyHome),
1484
+ bindings,
1485
+ providers: codexAccount.readCodexProviders(env),
1486
+ fileReadable: probe.fileReadable,
1487
+ env,
1488
+ nodePath: process.execPath,
1489
+ envKeyCopyPath: (id) => path.join(happyHome, "tmp", "accounts", `key-${process.pid}-${id}`)
1490
+ });
1491
+ if (resolution.kind === "machine") return MACHINE_CODEX_ACCOUNT;
1492
+ let cleanup = () => {
1493
+ };
1494
+ if (resolution.kind === "active" && resolution.envKeyCopy) {
1495
+ const { name, path: path$1 } = resolution.envKeyCopy;
1496
+ node_fs.mkdirSync(path.dirname(path$1), { recursive: true, mode: 448 });
1497
+ node_fs.writeFileSync(path$1, (env[name] ?? "").trim() + "\n", { mode: 384 });
1498
+ node_fs.chmodSync(path$1, 384);
1499
+ cleanup = () => node_fs.rmSync(path$1, { force: true });
1500
+ }
1501
+ for (const key of resolution.unset) delete env[key];
1502
+ if (resolution.kind === "active" && resolution.envKeyCopy) delete env[resolution.envKeyCopy.name];
1503
+ if (resolution.kind === "unavailable") {
1504
+ return { profile: resolution.profile, overrides: { env: {} }, unavailable: true, notices: [wrapperAccount.unavailableNotice(resolution.profile)], cleanup };
1505
+ }
1506
+ const overrides = { env: {}, modelProvider: resolution.modelProvider, ...resolution.config ? { config: resolution.config } : {} };
1507
+ if (resolution.codexHome) {
1508
+ codexAccount.syncCodexOverlay(resolution.codexHome, codexAccount.baseCodexHome(env), now);
1509
+ overrides.env.CODEX_HOME = resolution.codexHome;
1510
+ }
1511
+ return {
1512
+ profile: resolution.profile,
1513
+ overrides,
1514
+ ...resolution.pinnedModel ? { pinnedModel: resolution.pinnedModel } : {},
1515
+ ...resolution.models ? { models: resolution.models } : {},
1516
+ unavailable: false,
1517
+ notices: [],
1518
+ cleanup
1519
+ };
1520
+ }
1521
+ function markCodexAccountRejected(happyHome, accountId, now = Date.now()) {
1522
+ try {
1523
+ const file = store.readAccountsFileV2(happyHome);
1524
+ const record = file.accounts[accountId];
1525
+ if (!record || record.agent !== "codex") return null;
1526
+ const status = record.kind === "codex-chatgpt" ? "expired" : "invalid";
1527
+ if (record.check?.status === status) return status;
1528
+ record.check = { status, at: now, detail: "rejected during a session" };
1529
+ store.writeAccountsFile(happyHome, file);
1530
+ return status;
1531
+ } catch {
1532
+ return null;
1533
+ }
1534
+ }
1535
+
1466
1536
  const DEFAULT_CODEX_MODEL = void 0;
1467
1537
  const DEFAULT_CODEX_EFFORT = "medium";
1468
1538
  async function runCodex(opts) {
@@ -1479,6 +1549,8 @@ async function runCodex(opts) {
1479
1549
  console.error(" \x1B[36mvery-happy claude\x1B[0m\n");
1480
1550
  process.exit(1);
1481
1551
  }
1552
+ const spawnAccountId = process.env[store.SPAWN_ACCOUNT_ENV] || void 0;
1553
+ delete process.env[store.SPAWN_ACCOUNT_ENV];
1482
1554
  const sessionTag = node_crypto.randomUUID();
1483
1555
  api.connectionState.setBackend("Codex");
1484
1556
  const api$1 = await api.ApiClient.create(opts.credentials);
@@ -1507,7 +1579,7 @@ async function runCodex(opts) {
1507
1579
  dangerouslySkipPermissions: initialPermissionMode === "yolo" || initialPermissionMode === "bypassPermissions",
1508
1580
  ...forkedFromSessionId ? { parentSessionId: forkedFromSessionId } : {},
1509
1581
  ...forkedFromMessageId ? { forkedFromMessageId } : {},
1510
- capabilities: [index.PROMPT_QUEUE_CAPABILITY, forkBackfill.FORK_BACKFILL_CAPABILITY, persistence.HIBERNATION_CAPABILITY, sessionLock.AUTO_RESTART_CAPABILITY, index.CODEX_STEER_CAPABILITY, index.PROJECT_SESSION_CAPABILITY, index.CODEX_COMPACT_CAPABILITY, index.RUN_INTENT_CAPABILITY]
1582
+ capabilities: [index.PROMPT_QUEUE_CAPABILITY, forkBackfill.FORK_BACKFILL_CAPABILITY, persistence.HIBERNATION_CAPABILITY, sessionLock.AUTO_RESTART_CAPABILITY, index.CODEX_STEER_CAPABILITY, index.PROJECT_SESSION_CAPABILITY, index.CODEX_COMPACT_CAPABILITY, index.RUN_INTENT_CAPABILITY, index.AGENT_PROFILE_SESSION_CAPABILITY]
1511
1583
  });
1512
1584
  metadata.attachmentKinds = [...attachmentContent.CLAUDE_ATTACHMENT_KINDS];
1513
1585
  metadata.stickyModel = null;
@@ -1520,12 +1592,13 @@ async function runCodex(opts) {
1520
1592
  const importTitle = process.env.HAPPY_IMPORT_TITLE;
1521
1593
  if (importTitle) metadata.summary = { text: importTitle, updatedAt: Date.now() };
1522
1594
  }
1523
- const reconnectSessionId = process.env.HAPPY_RECONNECT_SESSION_ID;
1524
- const reconnectKeyBase64 = process.env.HAPPY_RECONNECT_ENCRYPTION_KEY;
1525
- const reconnectVariant = process.env.HAPPY_RECONNECT_ENCRYPTION_VARIANT;
1526
- const reconnectSeq = process.env.HAPPY_RECONNECT_SEQ;
1527
- const reconnectMetadataVersion = process.env.HAPPY_RECONNECT_METADATA_VERSION;
1528
- const reconnectAgentStateVersion = process.env.HAPPY_RECONNECT_AGENT_STATE_VERSION;
1595
+ const reconnectEnv$1 = reconnectEnv.takeReconnectEnv();
1596
+ const reconnectSessionId = reconnectEnv$1.HAPPY_RECONNECT_SESSION_ID;
1597
+ const reconnectKeyBase64 = reconnectEnv$1.HAPPY_RECONNECT_ENCRYPTION_KEY;
1598
+ const reconnectVariant = reconnectEnv$1.HAPPY_RECONNECT_ENCRYPTION_VARIANT;
1599
+ const reconnectSeq = reconnectEnv$1.HAPPY_RECONNECT_SEQ;
1600
+ const reconnectMetadataVersion = reconnectEnv$1.HAPPY_RECONNECT_METADATA_VERSION;
1601
+ const reconnectAgentStateVersion = reconnectEnv$1.HAPPY_RECONNECT_AGENT_STATE_VERSION;
1529
1602
  let response;
1530
1603
  if (reconnectSessionId && reconnectKeyBase64 && reconnectVariant) {
1531
1604
  logger.logger.debug(`[START] Reconnecting to existing session ${reconnectSessionId}`);
@@ -1568,6 +1641,21 @@ async function runCodex(opts) {
1568
1641
  }
1569
1642
  }
1570
1643
  const resumedEffort = reconnectSeeded && response ? index.restoredEffort(response.metadata, { useReportedLevel: true }) : void 0;
1644
+ let codexAccount$1 = MACHINE_CODEX_ACCOUNT;
1645
+ if (response) {
1646
+ try {
1647
+ codexAccount$1 = loadCodexWrapperAccount(configuration.configuration.happyHomeDir, response.id, spawnAccountId);
1648
+ } catch (error) {
1649
+ const reason = error instanceof Error ? error.message : String(error);
1650
+ logger.logger.debug(`[START] B-850b account resolution failed: ${reason}`);
1651
+ if (spawnAccountId) {
1652
+ codexAccount$1 = { ...MACHINE_CODEX_ACCOUNT, profile: { id: spawnAccountId, label: spawnAccountId, kind: "unknown", status: "unavailable", reason: "error" }, unavailable: true, notices: [`Account "${spawnAccountId}" could not be loaded: ${reason}`] };
1653
+ }
1654
+ }
1655
+ }
1656
+ const accountSwitched = !!reconnectSessionId && reconnectSeeded && !!response && codexAccount.codexAccountSwitched(response.metadata?.agentProfile, codexAccount$1.profile);
1657
+ if (accountSwitched && !codexAccount$1.profile) codexAccount$1 = { ...codexAccount$1, overrides: { env: {}, modelProvider: codexAccount.readCodexDefaultProvider() } };
1658
+ logger.logger.debug(`[START] B-850b account: ${codexAccount$1.profile ? `${codexAccount$1.profile.id} ${codexAccount$1.profile.kind} ${codexAccount$1.profile.status}` : "machine login"}${accountSwitched ? " (switched)" : ""}`);
1571
1659
  let session;
1572
1660
  let permissionHandler;
1573
1661
  let client$1;
@@ -1596,6 +1684,25 @@ async function runCodex(opts) {
1596
1684
  if (!wakingFromHibernation) void session.cancelUndeliveredQueuedInputs(reconnectReplay ? { maxSeq: reconnectReplay.seq } : void 0);
1597
1685
  session.updateMetadata((meta) => sessionLock.mergeReconnectMetadata(meta, metadata, Date.now()));
1598
1686
  }
1687
+ session.updateMetadata((current) => ({
1688
+ ...current,
1689
+ agentProfile: codexAccount$1.profile,
1690
+ ...accountSwitched ? { stickyModel: null, modelIntent: null } : {}
1691
+ }));
1692
+ for (const notice of codexAccount$1.notices) {
1693
+ session.sendSessionEvent({ type: "message", message: notice, kind: codexAccount$1.unavailable ? "agent-profile-unavailable" : "agent-profile-warning" });
1694
+ }
1695
+ let historyRejectionReported = false;
1696
+ const noteAccountFailure = (text) => {
1697
+ if (!codexAccount$1.profile || codexAccount$1.unavailable) return;
1698
+ if (accountSwitched && !historyRejectionReported && codexAccount.isHistoryRejectedError(text)) {
1699
+ historyRejectionReported = true;
1700
+ session.sendSessionEvent({ type: "message", message: `This conversation's history cannot continue on account "${codexAccount$1.profile.label}". Start a new session on it, or switch back to the previous account.`, kind: "agent-profile-history-rejected" });
1701
+ } else if (codexAccount.isCodexAuthRejection(text)) {
1702
+ const marked = markCodexAccountRejected(configuration.configuration.happyHomeDir, codexAccount$1.profile.id);
1703
+ if (marked) session.sendSessionEvent({ type: "message", message: `Account "${codexAccount$1.profile.label}" was rejected (${marked}). Sign in again or switch accounts.`, kind: "agent-profile-auth-failed" });
1704
+ }
1705
+ };
1599
1706
  if (response) {
1600
1707
  try {
1601
1708
  logger.logger.debug(`[START] Reporting session ${response.id} to daemon`);
@@ -1688,6 +1795,11 @@ async function runCodex(opts) {
1688
1795
  };
1689
1796
  let userMessageDelivery = Promise.resolve();
1690
1797
  session.onUserMessage((message) => {
1798
+ if (codexAccount$1.unavailable && codexAccount$1.profile) {
1799
+ if (message.localKey) session.sendQueueCancelReason([message.localKey], "failed");
1800
+ session.sendSessionEvent({ type: "message", message: codexAccount$1.notices[0] ?? `Account "${codexAccount$1.profile.label}" is unavailable.`, kind: "agent-profile-unavailable" });
1801
+ return;
1802
+ }
1691
1803
  const downloads = session.drainAttachmentsForUserMessage();
1692
1804
  userMessageDelivery = userMessageDelivery.then(async () => {
1693
1805
  const attachments = await downloads;
@@ -1952,6 +2064,7 @@ async function runCodex(opts) {
1952
2064
  process.stdin.setEncoding("utf8");
1953
2065
  }
1954
2066
  client$1 = new codexAppServerClient.CodexAppServerClient(sandboxConfig);
2067
+ client$1.setAccountOverrides(codexAccount$1.overrides);
1955
2068
  const idleRelease = new CodexIdleReleaseTimer({
1956
2069
  delayMs: resolveCodexIdleReleaseMs(process.env[CODEX_IDLE_RELEASE_ENV]),
1957
2070
  isIdle: () => shouldReleaseIdleCodex({
@@ -2021,6 +2134,7 @@ async function runCodex(opts) {
2021
2134
  if (failure) {
2022
2135
  messageBuffer.addMessage(`Task failed: ${failure}`, "status");
2023
2136
  session.sendSessionEvent({ type: "message", message: `Codex error: ${failure}` });
2137
+ noteAccountFailure(failure);
2024
2138
  } else {
2025
2139
  messageBuffer.addMessage("Task completed", "status");
2026
2140
  }
@@ -2029,6 +2143,7 @@ async function runCodex(opts) {
2029
2143
  if (failure) {
2030
2144
  messageBuffer.addMessage(`Turn aborted: ${failure}`, "status");
2031
2145
  session.sendSessionEvent({ type: "message", message: `Codex error: ${failure}` });
2146
+ noteAccountFailure(failure);
2032
2147
  } else {
2033
2148
  messageBuffer.addMessage("Turn aborted", "status");
2034
2149
  }
@@ -2135,6 +2250,11 @@ async function runCodex(opts) {
2135
2250
  logger.logger.debug("[Codex] config/read unavailable", safeCodexErrorMetadata(error));
2136
2251
  }
2137
2252
  machineDefaultModel = configured?.model ?? discoveredModels.find((model) => model.isDefault)?.model;
2253
+ const accountDefault = codexAccount.codexAccountDefaultModel(codexAccount$1, configured?.model ?? null, discoveredModels);
2254
+ if (codexAccount$1.profile && !codexAccount$1.unavailable) {
2255
+ machineDefaultModel = accountDefault;
2256
+ if (codexAccount$1.models?.length) discoveredModels = codexAccount.accountModelsAsCatalog(codexAccount$1.models, discoveredModels);
2257
+ }
2138
2258
  if (discoveredModels.length > 0 || configured) {
2139
2259
  session.updateMetadata((metadata2) => ({
2140
2260
  ...metadata2,
@@ -2147,22 +2267,30 @@ async function runCodex(opts) {
2147
2267
  defaultReasoningEffort: model.defaultReasoningEffort
2148
2268
  }))
2149
2269
  } : {},
2150
- defaultModelCode: configured?.model ?? discoveredModels.find((model) => model.isDefault)?.model,
2151
- ...configured ? { configuredModel: configured.model } : {}
2270
+ defaultModelCode: codexAccount$1.profile && !codexAccount$1.unavailable ? accountDefault : configured?.model ?? discoveredModels.find((model) => model.isDefault)?.model,
2271
+ ...configured ? { configuredModel: codexAccount$1.profile && !codexAccount$1.unavailable ? accountDefault ?? null : configured.model } : {}
2152
2272
  }));
2153
2273
  }
2154
2274
  } catch (error) {
2155
2275
  logger.logger.debug("[Codex] Model discovery unavailable; using compatibility fallback", safeCodexErrorMetadata(error));
2156
2276
  }
2157
- if (opts.resumeThreadId) {
2158
- await resumeExistingThread({
2159
- client: client$1,
2160
- session,
2161
- messageBuffer,
2162
- threadId: opts.resumeThreadId,
2163
- cwd: process.cwd(),
2164
- mcpServers
2165
- });
2277
+ if (opts.resumeThreadId && !codexAccount$1.unavailable) {
2278
+ try {
2279
+ await resumeExistingThread({
2280
+ client: client$1,
2281
+ session,
2282
+ messageBuffer,
2283
+ threadId: opts.resumeThreadId,
2284
+ cwd: process.cwd(),
2285
+ mcpServers,
2286
+ // B-850b: after an account switch the thread moves to the
2287
+ // new account's model (its old one is sticky otherwise).
2288
+ ...accountSwitched && machineDefaultModel ? { model: machineDefaultModel } : {}
2289
+ });
2290
+ } catch (error) {
2291
+ noteAccountFailure(error instanceof Error ? error.message : String(error));
2292
+ throw error;
2293
+ }
2166
2294
  first = false;
2167
2295
  appendSystemPromptInjected = true;
2168
2296
  }
@@ -2358,7 +2486,10 @@ async function runCodex(opts) {
2358
2486
  }
2359
2487
  if (!client$1.hasActiveThread()) {
2360
2488
  const startedThread = await client$1.startThread({
2361
- model: turnModel,
2489
+ // B-850b: a new thread on an account starts on the account's
2490
+ // model — Codex would otherwise pick config.toml's, which
2491
+ // belongs to the machine's own provider.
2492
+ model: turnModel ?? (codexAccount$1.profile && !codexAccount$1.unavailable ? machineDefaultModel : void 0),
2362
2493
  cwd: process.cwd(),
2363
2494
  approvalPolicy: executionPolicy.approvalPolicy,
2364
2495
  sandbox: executionPolicy.sandbox,
@@ -2413,6 +2544,7 @@ async function runCodex(opts) {
2413
2544
  if (reason) {
2414
2545
  messageBuffer.addMessage(`Task failed: ${reason}`, "status");
2415
2546
  session.sendSessionEvent({ type: "message", message: `Codex error: ${reason}` });
2547
+ noteAccountFailure(reason);
2416
2548
  } else {
2417
2549
  const tail = codexStderrTailOf(error);
2418
2550
  messageBuffer.addMessage("Process exited unexpectedly", "status");