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.
- package/dist/{AcpBackend-DgrIc1vH.cjs → AcpBackend-BQO4ShOy.cjs} +3 -3
- package/dist/{AcpBackend-CCy_9AfR.mjs → AcpBackend-CGHTDJd9.mjs} +3 -3
- package/dist/{AcpSessionManager-CQnxx7gD.mjs → AcpSessionManager-G0xD6Jbq.mjs} +2 -2
- package/dist/{AcpSessionManager-DVOzCD3P.cjs → AcpSessionManager-LlUMmcpB.cjs} +2 -2
- package/dist/{BasePermissionHandler-DYLN6Ec9.mjs → BasePermissionHandler-BmTIg376.mjs} +1 -1
- package/dist/{BasePermissionHandler-C9Ag7yvs.cjs → BasePermissionHandler-N6Ip3tFt.cjs} +1 -1
- package/dist/account-CCVT-HO_.mjs +240 -0
- package/dist/account-DtaouikP.cjs +245 -0
- package/dist/accountService-Bddy0zwL.cjs +571 -0
- package/dist/accountService-Dd9uqde2.mjs +566 -0
- package/dist/{acpSessionResume-Bi7pA1n_.mjs → acpSessionResume-BWEUxNtC.mjs} +1 -1
- package/dist/{acpSessionResume-TvP_4Zq2.cjs → acpSessionResume-BnHDk5eD.cjs} +1 -1
- package/dist/{agentHome-DGv105SR.mjs → agentHome-B0VnjkZW.mjs} +4 -4
- package/dist/{agentHome-DNUKJWOY.cjs → agentHome-CqQ29YY7.cjs} +4 -4
- package/dist/{api-jfeMRg5R.mjs → api-_LeBScjg.mjs} +10 -10
- package/dist/{api-BBxZ7y2z.cjs → api-hMDsC6Wg.cjs} +10 -10
- package/dist/{apiMachine-DRJ7y-BB.mjs → apiMachine-CgRldeJ6.mjs} +76 -21
- package/dist/{apiMachine-DqyjKBZG.cjs → apiMachine-CqW2m6Zr.cjs} +81 -26
- package/dist/{attachmentContent-BO2njyza.cjs → attachmentContent-BEeT2J5n.cjs} +2 -2
- package/dist/{attachmentContent-Dm_RIs5L.mjs → attachmentContent-CyptLIfq.mjs} +2 -2
- package/dist/{auth-DnxoVkkf.cjs → auth-C9NvNHhL.cjs} +5 -5
- package/dist/{auth-DLR3ksCF.cjs → auth-CA1OClsW.cjs} +8 -8
- package/dist/{auth-BYDtjVNb.mjs → auth-CFQikywl.mjs} +8 -8
- package/dist/{auth-DC6rg8lJ.mjs → auth-DL8_J9vu.mjs} +5 -5
- package/dist/{auto-D5Jhukq1.mjs → auto-CKI05w1D.mjs} +17 -17
- package/dist/{auto-CwO0u8hB.cjs → auto-uQOxlxLp.cjs} +17 -17
- package/dist/{bootstrap-rLaL3kTa.mjs → bootstrap-DaZ0Np7X.mjs} +2 -2
- package/dist/{bootstrap-sly4qPPY.cjs → bootstrap-DsZGc69k.cjs} +2 -2
- package/dist/{browser-CHpVgyni.mjs → browser-BUIaSHK2.mjs} +1 -1
- package/dist/{browser-BTgZ9d4i.cjs → browser-Ft0ASDm7.cjs} +1 -1
- package/dist/claudeAccountEnv-BOBpJ3k8.cjs +137 -0
- package/dist/claudeAccountEnv-ON24i0qv.mjs +132 -0
- package/dist/{claudeLocal-Bgb5GGsq.mjs → claudeLocal-B1ZVtryl.mjs} +5 -5
- package/dist/{claudeLocal-1vuTFcL8.cjs → claudeLocal-BMf9t4Fa.cjs} +5 -5
- package/dist/{claudeLocalLauncher-T7EfT68h.mjs → claudeLocalLauncher-Bp8bqF4y.mjs} +10 -10
- package/dist/{claudeLocalLauncher-DOsL6HFY.cjs → claudeLocalLauncher-C8TeJcfF.cjs} +10 -10
- package/dist/{claudeSessionFork-CPvi6yDX.mjs → claudeSessionFork-8AA47z8Y.mjs} +1 -1
- package/dist/{claudeSessionFork-Cko4SaVi.cjs → claudeSessionFork-YiktY55n.cjs} +1 -1
- package/dist/{client-Bi20Ka0h.mjs → client-Bm4oKvW7.mjs} +2 -2
- package/dist/{client-Bh1aUPh-.mjs → client-BmPaBnDK.mjs} +4 -4
- package/dist/{client-C-OdTbrU.cjs → client-CFHZfh9x.cjs} +4 -4
- package/dist/{client-BscskEBk.cjs → client-Crh8_cNx.cjs} +2 -2
- package/dist/{client-BXD66ZF5.mjs → client-Cxlp_D4I.mjs} +2 -2
- package/dist/{client-C5-C0t2a.cjs → client-D8XROyZc.cjs} +2 -2
- package/dist/codex/happyMcpStdioBridge.cjs +16 -16
- package/dist/codex/happyMcpStdioBridge.mjs +16 -16
- package/dist/{codexAppServerClient-DXhAf6i-.mjs → codexAppServerClient-BWJbLCQn.mjs} +3 -3
- package/dist/{codexAppServerClient-DKXeikEe.cjs → codexAppServerClient-q8GHQhyC.cjs} +3 -3
- package/dist/{codexCommand-CIaOiiOj.mjs → codexCommand-BfXfRQr4.mjs} +50 -48
- package/dist/{codexCommand-DvbbpYBS.cjs → codexCommand-BgpGg-Zy.cjs} +50 -48
- package/dist/{codexTermination-BszWfyk5.cjs → codexTermination-CVUF0X75.cjs} +1 -1
- package/dist/{codexTermination-BcQdEDaw.mjs → codexTermination-s9fd1gkA.mjs} +1 -1
- package/dist/{config-Di3Cf6js.cjs → config-BAjyTyYp.cjs} +3 -3
- package/dist/{config-OCEcVVK1.mjs → config-BF8XgLyc.mjs} +3 -3
- package/dist/{configuration-DfPBa-9d.cjs → configuration-CXEVKAyF.cjs} +1 -1
- package/dist/{configuration-ECqXu34R.mjs → configuration-IhRiLDVe.mjs} +1 -1
- package/dist/{connect-BTfAUhk8.mjs → connect-LZh1gr08.mjs} +13 -13
- package/dist/{connect-BPQRuOw5.cjs → connect-rCS56arw.cjs} +13 -13
- package/dist/{context-Co7hUaW-.cjs → context-3_S_mWz9.cjs} +1 -1
- package/dist/{context-CfgTFpCB.mjs → context-DO6F5YwH.mjs} +1 -1
- package/dist/{controlClient-ClI7A0qE.mjs → controlClient-8ILulwjc.mjs} +14 -5
- package/dist/{controlClient-C13_pSKG.cjs → controlClient-j7p5p3_7.cjs} +15 -4
- package/dist/{createSessionMetadata-Cf78KHtt.cjs → createSessionMetadata-DwdD_uVo.cjs} +2 -2
- package/dist/{createSessionMetadata-B0eT_Kfj.mjs → createSessionMetadata-oyaTZm1b.mjs} +2 -2
- package/dist/daemonAccounts-BCjDgoNt.cjs +51 -0
- package/dist/daemonAccounts-BJgt6IJe.mjs +27 -0
- package/dist/{defaultPermissionMode-oqTupStc.cjs → defaultPermissionMode-BFShzF55.cjs} +1 -1
- package/dist/{defaultPermissionMode-m6z2QVyP.mjs → defaultPermissionMode-Lt3PUCwY.mjs} +1 -1
- package/dist/{deterministicJson-CpFFgUL_.cjs → deterministicJson-DUN0v3St.cjs} +13 -13
- package/dist/{deterministicJson-BtSwbsok.mjs → deterministicJson-Dfp-7wUZ.mjs} +13 -13
- package/dist/{doctor-lsxmAK4o.mjs → doctor-B_UwMcVT.mjs} +7 -7
- package/dist/{doctor-BEU0_1Xv.cjs → doctor-FgUYTbAT.cjs} +7 -7
- package/dist/{downloadTarget-CikzJv1h.cjs → downloadTarget-BrrQEDxg.cjs} +6 -6
- package/dist/{downloadTarget-BXqXhNF7.mjs → downloadTarget-C0d6jRx-.mjs} +6 -6
- package/dist/{ensureDaemonRunning-BUuH-pbE.cjs → ensureDaemonRunning-Cq4FYI5Q.cjs} +5 -5
- package/dist/{ensureDaemonRunning-B_9WAlbU.mjs → ensureDaemonRunning-KUMFfIil.mjs} +5 -5
- package/dist/{handleResumeCommand-BK9XKH_l.mjs → handleResumeCommand-BGhVo3QH.mjs} +5 -5
- package/dist/{handleResumeCommand-Dj7oi2KO.cjs → handleResumeCommand-Cl9GIL5F.cjs} +5 -5
- package/dist/{index-BdOJOZ6J.mjs → index-BjXjMhGY.mjs} +4 -4
- package/dist/{index-CLUHaPU8.cjs → index-BzAYnYct.cjs} +110 -0
- package/dist/{index-CmZusg8Q.cjs → index-CQ_hLLCj.cjs} +3 -3
- package/dist/{index-Dg2NAF_-.cjs → index-CRipkiqo.cjs} +4 -4
- package/dist/{index-D3c7CLot.cjs → index-CZaLMmPC.cjs} +4 -4
- package/dist/{index-Cxso1rg4.mjs → index-Ca1Tt96A.mjs} +45 -41
- package/dist/{index-CauRYQKr.cjs → index-D8ODb0_U.cjs} +44 -40
- package/dist/{index-Bq8NKSCF.mjs → index-DYD3GM1m.mjs} +104 -1
- package/dist/{index-BjZnpGWX.mjs → index-JQDyJ3Li.mjs} +3 -3
- package/dist/{index-DuK9XYbZ.mjs → index-v5EmjT8l.mjs} +4 -4
- package/dist/index.cjs +2 -2
- package/dist/index.mjs +2 -2
- package/dist/{install-DXllkuy0.cjs → install-ClUA9tbC.cjs} +3 -3
- package/dist/{install-DTIveLOS.mjs → install-D6EHRtAN.mjs} +3 -3
- package/dist/lib.cjs +12 -12
- package/dist/lib.d.cts +282 -0
- package/dist/lib.d.mts +282 -0
- package/dist/lib.mjs +12 -12
- package/dist/{lidState-CD81ryTy.mjs → lidState-CZOXXdzv.mjs} +1 -1
- package/dist/{lidState-C9_DoF9i.cjs → lidState-DqoN7zH4.cjs} +1 -1
- package/dist/{localHappyAgentAuth-CCjUvOfi.cjs → localHappyAgentAuth-BnGCpHRX.cjs} +1 -1
- package/dist/{localHappyAgentAuth-Cg-m1lwm.mjs → localHappyAgentAuth-YHxDZ4x4.mjs} +1 -1
- package/dist/{logger-Ct2zvaq0.cjs → logger-8su64lqR.cjs} +2 -2
- package/dist/{logger-GcbI0eg2.mjs → logger-Fd_rNvgd.mjs} +2 -2
- package/dist/{machineMetadata-CXRmFNOV.mjs → machineMetadata-1HIIC7Bc.mjs} +3 -3
- package/dist/{machineMetadata-DDCVWb_x.cjs → machineMetadata-DYXt3p6u.cjs} +3 -3
- package/dist/{main-omGr_ONk.mjs → main-BI6GIzUL.mjs} +92 -48
- package/dist/{main-BHC-WIcM.cjs → main-C_GrcYkn.cjs} +92 -48
- package/dist/{mcp-xUzii0m8.cjs → mcp-BycIv9oQ.cjs} +18 -15
- package/dist/{mcp-D5hxmRAq.mjs → mcp-XGoxywno.mjs} +18 -15
- package/dist/{mirrorProtocol-Dfl8Ahyf.cjs → mirrorProtocol-DVnB8EO8.cjs} +3 -3
- package/dist/{mirrorProtocol-Lcx20Oby.mjs → mirrorProtocol-DXT3rv7T.mjs} +3 -3
- package/dist/{package-BsUHyqWe.mjs → package-6KkRAops.mjs} +7 -7
- package/dist/{package-9n7wd2dT.cjs → package-iuLlSiSF.cjs} +7 -7
- package/dist/{panels-BfknEmt7.cjs → panels-0C89q0Tu.cjs} +5 -5
- package/dist/{panels-CpEKWWbI.mjs → panels-B5Di2zb2.mjs} +5 -5
- package/dist/{peerTools-CElYh-5u.cjs → peerTools-CANTX_mG.cjs} +5 -5
- package/dist/{peerTools-CwCe6tmJ.mjs → peerTools-CKJ-IDM4.mjs} +5 -5
- package/dist/{persistence-A2NeERZJ.cjs → persistence-B4ttN-fR.cjs} +2 -2
- package/dist/{persistence-Cpw4yJs8.mjs → persistence-DWcHe035.mjs} +2 -2
- package/dist/{piRunnerArgs-BnFU0K73.cjs → piRunnerArgs-BOkfxyak.cjs} +1 -1
- package/dist/{piRunnerArgs-Bqmu16He.mjs → piRunnerArgs-Bl5GpBoN.mjs} +2 -2
- package/dist/{piRuntime-Cgn1b0OX.mjs → piRuntime-BhwxzdQf.mjs} +1 -1
- package/dist/{piRuntime-DpS9TAIs.cjs → piRuntime-DzrIiZU8.cjs} +1 -1
- package/dist/{piTerminal-rmve-VlI.cjs → piTerminal-BdS7ol7v.cjs} +20 -17
- package/dist/{piTerminal-BGdps8f3.mjs → piTerminal-DnA2CbGr.mjs} +20 -17
- package/dist/{pushNotifications-23YSd-0l.cjs → pushNotifications-BqFoLye2.cjs} +5 -3
- package/dist/{pushNotifications-XAM8__Pg.mjs → pushNotifications-DkQ0yvFs.mjs} +5 -3
- package/dist/{query-u2GX-I0C.cjs → query-BQ4br3yn.cjs} +1 -1
- package/dist/{query-SZcYnJoW.mjs → query-BRJYSkb1.mjs} +1 -1
- package/dist/{rateLimitReporter-COUkf446.mjs → rateLimitReporter-BRbYkmuP.mjs} +3 -3
- package/dist/{rateLimitReporter-CaTzBe3x.cjs → rateLimitReporter-DK5SQuCc.cjs} +3 -3
- package/dist/{rateLimitWindows-B2Kx6L0S.cjs → rateLimitWindows-DBfiuYeg.cjs} +1 -1
- package/dist/{rateLimitWindows-j_qQk0KY.mjs → rateLimitWindows-Da5AR-4u.mjs} +1 -1
- package/dist/reconnectEnv-B31lY4nR.cjs +27 -0
- package/dist/reconnectEnv-DeSvHl3q.mjs +24 -0
- package/dist/{registerCommonHandlers-D1MiSfcB.cjs → registerCommonHandlers-m6pxxf2J.cjs} +2 -2
- package/dist/{registerCommonHandlers-DRRfinzK.mjs → registerCommonHandlers-yQ7Ru-l0.mjs} +2 -2
- package/dist/{registerKillSessionHandler-hvCsEn7b.cjs → registerKillSessionHandler-BAOIa_Fs.cjs} +6 -6
- package/dist/{registerKillSessionHandler-Cpug_r5C.mjs → registerKillSessionHandler-BDNpi7YO.mjs} +6 -6
- package/dist/{remoteSessionClient-BdnJ_n8C.mjs → remoteSessionClient-CZ7aaNgj.mjs} +5 -5
- package/dist/{remoteSessionClient-6ymeMVa4.cjs → remoteSessionClient-iJMXRN_D.cjs} +5 -5
- package/dist/{reportProgressTool-XgQBzxoD.mjs → reportProgressTool-DfQhPu0s.mjs} +3 -3
- package/dist/{reportProgressTool-tzQLCLIw.cjs → reportProgressTool-DpFs7pSe.cjs} +3 -3
- package/dist/{run-Bt0AklUU.mjs → run-CwN28mcj.mjs} +211 -51
- package/dist/{run-DYL_wuj7.cjs → run-p-xp1_HY.cjs} +210 -50
- package/dist/{runClaude-CBEpYO4S.cjs → runClaude-D6U1Z575.cjs} +62 -44
- package/dist/{runClaude-C3rii_S6.mjs → runClaude-DRKtAGTm.mjs} +62 -44
- package/dist/{runClaudeDeps-DlVfMG4F.mjs → runClaudeDeps-BheVcIlD.mjs} +56 -47
- package/dist/{runClaudeDeps-CYuozSC6.cjs → runClaudeDeps-Dkofokgb.cjs} +51 -42
- package/dist/{runGemini-CEI3b90u.cjs → runGemini-C8q3YCc0.cjs} +33 -33
- package/dist/{runGemini-DkYhRk9S.mjs → runGemini-owbvhFbi.mjs} +33 -33
- package/dist/{runOpenClaw-BgjD6E4d.cjs → runOpenClaw-DGeN66-t.cjs} +18 -18
- package/dist/{runOpenClaw-DpprWCoz.mjs → runOpenClaw-Dky3-mjO.mjs} +18 -18
- package/dist/{sandbox-XCDUbH72.cjs → sandbox-D2CPyoCA.cjs} +4 -4
- package/dist/{sandbox-DJ7A7lsy.mjs → sandbox-sq_wy9Gl.mjs} +4 -4
- package/dist/{selfCheck-BYUDB1Uq.cjs → selfCheck-BgLvQKSt.cjs} +39 -37
- package/dist/selfCheck-vkfrgQ7X.mjs +88 -0
- package/dist/{send-CASDBCyJ.cjs → send-Cd10YhXh.cjs} +8 -8
- package/dist/{send-Ba63huxv.mjs → send-K9vg-8t-.mjs} +8 -8
- package/dist/{server-cZoV9XRt.cjs → server-DRrV64r0.cjs} +6 -6
- package/dist/{server-w3W0toNd.mjs → server-De4W1zuK.mjs} +4 -4
- package/dist/{sessionLock-BmLA2S8K.cjs → sessionLock-BDtSzzKS.cjs} +10 -3
- package/dist/{sessionLock-G2PMqvsh.mjs → sessionLock-Dl6i7IgA.mjs} +10 -4
- package/dist/{sessionOps-DXlTmS7J.cjs → sessionOps-DvnEH4PL.cjs} +4 -4
- package/dist/{sessionOps-DPw5k8vV.mjs → sessionOps-gU88-W9F.mjs} +4 -4
- package/dist/sessionProvider-CKcIo7KO.mjs +108 -0
- package/dist/sessionProvider-CbSZeZrl.cjs +113 -0
- package/dist/{sessionScanner-AHjnicxi.cjs → sessionScanner-7RtcCeyD.cjs} +3 -3
- package/dist/{sessionScanner-BCXpdZJN.mjs → sessionScanner-DR32uSby.mjs} +3 -3
- package/dist/{sessions-BiBXOBx0.cjs → sessions-BvuMjgvJ.cjs} +10 -10
- package/dist/{sessions-Clk8MR5Y.mjs → sessions-DTt2Eguk.mjs} +10 -10
- package/dist/{setupOfflineReconnection-DI-QZGYz.mjs → setupOfflineReconnection-BGnvhRfb.mjs} +2 -2
- package/dist/{setupOfflineReconnection-BKLfOd-i.cjs → setupOfflineReconnection-DduOsw6p.cjs} +2 -2
- package/dist/{spawn-4tsp1uhh.mjs → spawn-CL3cUc7b.mjs} +26 -17
- package/dist/{spawn-D5omsx1Q.cjs → spawn-DMB6rRPA.cjs} +26 -17
- package/dist/{spawnAgents-CtkkIFHd.cjs → spawnAgents-CClb7buD.cjs} +1 -1
- package/dist/{spawnAgents-CjoU6ZOS.mjs → spawnAgents-CRMfOJhh.mjs} +1 -1
- package/dist/{spawnHappyCLI-CIA9Sc_5.mjs → spawnHappyCLI-Cj_6IICe.mjs} +1 -1
- package/dist/{spawnHappyCLI-CF_gLi92.cjs → spawnHappyCLI-DJdhX_Qx.cjs} +1 -1
- package/dist/{startFileWatcher-CDO6fb2m.mjs → startFileWatcher-DikVa8kg.mjs} +1 -1
- package/dist/{startFileWatcher-9Stpxe7p.cjs → startFileWatcher-LnOmVW6H.cjs} +1 -1
- package/dist/{startupSessionCreate-CcF7rGGB.cjs → startupSessionCreate-B3ND-917.cjs} +3 -3
- package/dist/{startupSessionCreate-BtR4iYEC.mjs → startupSessionCreate-CDdaLaMq.mjs} +3 -3
- package/dist/store--XN-7MS0.mjs +269 -0
- package/dist/store-DV__wCvP.cjs +289 -0
- package/dist/{streamRelay-BhI6jqF-.cjs → streamRelay-DFdOaLOn.cjs} +1 -1
- package/dist/{streamRelay-DMwOMTKf.mjs → streamRelay-sABnxEXq.mjs} +1 -1
- package/dist/{sync-C0PRuTMj.mjs → sync-JoEZKRo8.mjs} +1 -1
- package/dist/{sync-Ba8N6xba.cjs → sync-_2lsZ1U2.cjs} +1 -1
- package/dist/{systemPrompt-DV5IReD4.cjs → systemPrompt-CJEvNCuW.cjs} +2 -2
- package/dist/{systemPrompt-D0q8eyjy.mjs → systemPrompt-Zq4HyrZ5.mjs} +2 -2
- package/dist/{teams-z3Gp-KlV.cjs → teams-BNZafnrT.cjs} +7 -7
- package/dist/{teams-BO3_arwM.mjs → teams-qz4LqKJ2.mjs} +7 -7
- package/dist/{template-DLR_0hfj.mjs → template-CJ8BWSsc.mjs} +1 -1
- package/dist/{template-B_5l6pkc.cjs → template-LgvBbOna.cjs} +1 -1
- package/dist/{time-Cy0a-7YX.cjs → time-CaUlWSNJ.cjs} +1 -1
- package/dist/{time-D0jvDRhn.mjs → time-bzmet4s5.mjs} +1 -1
- package/dist/{titleGenerator-RGHWP2YL.cjs → titleGenerator-BuIIu_JP.cjs} +17 -13
- package/dist/{titleGenerator-AGQsXskb.mjs → titleGenerator-CbTtJ_1D.mjs} +16 -12
- package/dist/{todo-CzIDPLFy.cjs → todo-CQ_BTf9C.cjs} +6 -6
- package/dist/{todo-BZ954vsz.mjs → todo-DIrVF_Ak.mjs} +6 -6
- package/dist/{tools-B1x1j6tz.cjs → tools-BnmmFZji.cjs} +1 -1
- package/dist/{tools-Bei5i03L.mjs → tools-cLOjBvPn.mjs} +1 -1
- package/dist/{uninstall-B4T_e3Mr.mjs → uninstall-C5OuW6dE.mjs} +3 -3
- package/dist/{uninstall-C3cnIvz1.cjs → uninstall-uEEGKB84.cjs} +3 -3
- package/dist/wrapperAccount-DXlD3bsO.mjs +106 -0
- package/dist/wrapperAccount-DzoGqS2b.cjs +110 -0
- package/package.json +7 -7
- package/dist/providerBinding-B-Qbx9W2.cjs +0 -140
- package/dist/providerBinding-CYubGg-Z.mjs +0 -132
- package/dist/selfCheck-C-rNljKV.mjs +0 -86
- package/dist/sessionProvider-DUn91LhJ.mjs +0 -109
- package/dist/sessionProvider-Dg691XQ4.cjs +0 -114
|
@@ -1,27 +1,28 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var mirrorProtocol = require('./mirrorProtocol-
|
|
3
|
+
var mirrorProtocol = require('./mirrorProtocol-DVnB8EO8.cjs');
|
|
4
4
|
var fsMkdir = require('./fsMkdir-0K3yENml.cjs');
|
|
5
|
-
var piRunnerArgs = require('./piRunnerArgs-
|
|
5
|
+
var piRunnerArgs = require('./piRunnerArgs-BOkfxyak.cjs');
|
|
6
6
|
var fs = require('fs/promises');
|
|
7
7
|
var os$1 = require('os');
|
|
8
8
|
var tmp = require('tmp');
|
|
9
9
|
var axios = require('axios');
|
|
10
10
|
var node_fs = require('node:fs');
|
|
11
11
|
var path = require('node:path');
|
|
12
|
-
var configuration = require('./configuration-
|
|
13
|
-
var api = require('./api-
|
|
14
|
-
var spawnAgents = require('./spawnAgents-
|
|
15
|
-
var logger = require('./logger-
|
|
16
|
-
var index$2 = require('./index-
|
|
17
|
-
var auth = require('./auth-
|
|
12
|
+
var configuration = require('./configuration-CXEVKAyF.cjs');
|
|
13
|
+
var api = require('./api-hMDsC6Wg.cjs');
|
|
14
|
+
var spawnAgents = require('./spawnAgents-CClb7buD.cjs');
|
|
15
|
+
var logger = require('./logger-8su64lqR.cjs');
|
|
16
|
+
var index$2 = require('./index-CQ_hLLCj.cjs');
|
|
17
|
+
var auth = require('./auth-C9NvNHhL.cjs');
|
|
18
18
|
var child_process = require('child_process');
|
|
19
|
-
var _package = require('./package-
|
|
20
|
-
var doctor = require('./doctor-
|
|
21
|
-
var spawnHappyCLI = require('./spawnHappyCLI-
|
|
22
|
-
var persistence = require('./persistence-
|
|
23
|
-
var controlClient = require('./controlClient-
|
|
24
|
-
var sessionOps = require('./sessionOps-
|
|
19
|
+
var _package = require('./package-iuLlSiSF.cjs');
|
|
20
|
+
var doctor = require('./doctor-FgUYTbAT.cjs');
|
|
21
|
+
var spawnHappyCLI = require('./spawnHappyCLI-DJdhX_Qx.cjs');
|
|
22
|
+
var persistence = require('./persistence-B4ttN-fR.cjs');
|
|
23
|
+
var controlClient = require('./controlClient-j7p5p3_7.cjs');
|
|
24
|
+
var sessionOps = require('./sessionOps-DvnEH4PL.cjs');
|
|
25
|
+
var index = require('./index-BzAYnYct.cjs');
|
|
25
26
|
var fastify = require('fastify');
|
|
26
27
|
var z = require('zod');
|
|
27
28
|
var fastifyTypeProviderZod = require('fastify-type-provider-zod');
|
|
@@ -29,64 +30,68 @@ var authRelay = require('./authRelay-Dy1qU9td.cjs');
|
|
|
29
30
|
var node_crypto = require('node:crypto');
|
|
30
31
|
var previewPath = require('./previewPath-B0rBdhy1.cjs');
|
|
31
32
|
var backgroundTaskActivity = require('./backgroundTaskActivity-CBvUdj39.cjs');
|
|
32
|
-
var rateLimitWindows = require('./rateLimitWindows-
|
|
33
|
-
var peerTools = require('./peerTools-
|
|
33
|
+
var rateLimitWindows = require('./rateLimitWindows-DBfiuYeg.cjs');
|
|
34
|
+
var peerTools = require('./peerTools-CANTX_mG.cjs');
|
|
34
35
|
var os = require('node:os');
|
|
35
|
-
var remoteSessionClient = require('./remoteSessionClient-
|
|
36
|
-
var bootstrap = require('./bootstrap-
|
|
37
|
-
var index$1 = require('./index-
|
|
36
|
+
var remoteSessionClient = require('./remoteSessionClient-iJMXRN_D.cjs');
|
|
37
|
+
var bootstrap = require('./bootstrap-DsZGc69k.cjs');
|
|
38
|
+
var index$1 = require('./index-CZaLMmPC.cjs');
|
|
38
39
|
var require$$0 = require('fs');
|
|
39
40
|
var require$$1 = require('path');
|
|
40
41
|
var node_child_process = require('node:child_process');
|
|
41
42
|
var projectPath = require('./projectPath-C3ioB4Bu.cjs');
|
|
42
43
|
var doctorReadiness = require('./doctorReadiness-Dl6yRQCy.cjs');
|
|
43
|
-
var machineMetadata = require('./machineMetadata-
|
|
44
|
+
var machineMetadata = require('./machineMetadata-DYXt3p6u.cjs');
|
|
44
45
|
var fileStore = require('./fileStore-7qhnbs6N.cjs');
|
|
45
46
|
var pi = require('./pi-DlsrPCTa.cjs');
|
|
46
47
|
var require$$3 = require('crypto');
|
|
47
48
|
var detectCLI = require('./detectCLI-BuYR_Qxe.cjs');
|
|
48
|
-
var handleResumeCommand = require('./handleResumeCommand-
|
|
49
|
+
var handleResumeCommand = require('./handleResumeCommand-Cl9GIL5F.cjs');
|
|
49
50
|
var webPanels = require('./webPanels-FCgFKvVe.cjs');
|
|
50
|
-
var index = require('./index-CLUHaPU8.cjs');
|
|
51
51
|
var promises = require('node:fs/promises');
|
|
52
52
|
var cliUpdate = require('./cliUpdate-DsKXPFYp.cjs');
|
|
53
|
-
var client = require('./client-
|
|
54
|
-
var sessionLock = require('./sessionLock-
|
|
55
|
-
var client$1 = require('./client-
|
|
53
|
+
var client = require('./client-D8XROyZc.cjs');
|
|
54
|
+
var sessionLock = require('./sessionLock-BDtSzzKS.cjs');
|
|
55
|
+
var client$1 = require('./client-Crh8_cNx.cjs');
|
|
56
56
|
var daemonSupervisor = require('./daemonSupervisor-alqGPANc.cjs');
|
|
57
|
+
var accountService = require('./accountService-Bddy0zwL.cjs');
|
|
58
|
+
var daemonAccounts = require('./daemonAccounts-BCjDgoNt.cjs');
|
|
57
59
|
var path$1 = require('./path-B7zW-WwE.cjs');
|
|
58
60
|
var editPaths = require('./editPaths-Bqp4OFPw.cjs');
|
|
59
|
-
var startFileWatcher = require('./startFileWatcher-
|
|
60
|
-
var sync = require('./sync-
|
|
61
|
+
var startFileWatcher = require('./startFileWatcher-LnOmVW6H.cjs');
|
|
62
|
+
var sync = require('./sync-_2lsZ1U2.cjs');
|
|
61
63
|
var types = require('./types-CRS-srZK.cjs');
|
|
62
64
|
var tmuxSocket = require('./tmuxSocket-D-Xt6Vn-.cjs');
|
|
63
65
|
var doctor$1 = require('./doctor-u46qYYKX.cjs');
|
|
64
66
|
var resources = require('./resources-BZ_Be0qM.cjs');
|
|
65
67
|
var node_util = require('node:util');
|
|
66
|
-
var template = require('./template-
|
|
68
|
+
var template = require('./template-LgvBbOna.cjs');
|
|
67
69
|
var loginShellEnv = require('./loginShellEnv-BkuYtExZ.cjs');
|
|
68
|
-
require('./
|
|
69
|
-
require('./
|
|
70
|
+
var store = require('./store-DV__wCvP.cjs');
|
|
71
|
+
require('./acpSessionResume-BnHDk5eD.cjs');
|
|
72
|
+
require('./lidState-DqoN7zH4.cjs');
|
|
70
73
|
require('node:events');
|
|
71
74
|
require('socket.io-client');
|
|
72
|
-
require('./pushNotifications-
|
|
75
|
+
require('./pushNotifications-BqFoLye2.cjs');
|
|
73
76
|
require('./contentLogMetadata-ZSFk_NjQ.cjs');
|
|
74
77
|
require('./limits-C-a7gr04.cjs');
|
|
75
|
-
require('./time-
|
|
76
|
-
require('./registerCommonHandlers-
|
|
78
|
+
require('./time-CaUlWSNJ.cjs');
|
|
79
|
+
require('./registerCommonHandlers-m6pxxf2J.cjs');
|
|
77
80
|
require('util');
|
|
78
81
|
require('cross-spawn');
|
|
79
82
|
require('@paralleldrive/cuid2');
|
|
80
83
|
require('chalk');
|
|
81
84
|
require('node:module');
|
|
82
85
|
require('tweetnacl');
|
|
83
|
-
require('./browser-
|
|
86
|
+
require('./browser-Ft0ASDm7.cjs');
|
|
84
87
|
require('open');
|
|
85
88
|
require('./specialCommands-J3JFOq0J.cjs');
|
|
86
89
|
require('./ids-B6ZC0HGt.cjs');
|
|
87
90
|
require('url');
|
|
88
|
-
require('./localHappyAgentAuth-
|
|
91
|
+
require('./localHappyAgentAuth-BnGCpHRX.cjs');
|
|
89
92
|
require('./processTreeSnapshot-mDbnuojn.cjs');
|
|
93
|
+
require('./claudeAccountEnv-BOBpJ3k8.cjs');
|
|
94
|
+
require('node-pty');
|
|
90
95
|
require('ps-list');
|
|
91
96
|
|
|
92
97
|
function _interopNamespaceDefault(e) {
|
|
@@ -201,8 +206,34 @@ async function teamRelaunchEnv(input) {
|
|
|
201
206
|
const DEFAULT_LOG_PRUNE_POLICY = {
|
|
202
207
|
maxAgeMs: 14 * 24 * 60 * 6e4,
|
|
203
208
|
maxTotalBytes: 200 * 1024 * 1024,
|
|
204
|
-
keepRecentCount: 10
|
|
209
|
+
keepRecentCount: 10,
|
|
210
|
+
keepDaemonLogs: 3,
|
|
211
|
+
maxDaemonLogBytes: 64 * 1024 * 1024
|
|
205
212
|
};
|
|
213
|
+
const DAEMON_LOG_SUFFIX = "-daemon.log";
|
|
214
|
+
function planDaemonLogRetention(files, policy = DEFAULT_LOG_PRUNE_POLICY, protectedPaths = /* @__PURE__ */ new Set()) {
|
|
215
|
+
const keep = /* @__PURE__ */ new Set();
|
|
216
|
+
let trim = null;
|
|
217
|
+
const count = policy.keepDaemonLogs ?? 0;
|
|
218
|
+
let budget = policy.maxDaemonLogBytes ?? 0;
|
|
219
|
+
if (count <= 0 || budget <= 0) return { keep, trim };
|
|
220
|
+
const daemonLogs = files.filter((f) => f.path.endsWith(DAEMON_LOG_SUFFIX) && !protectedPaths.has(f.path)).sort((a, b) => b.mtimeMs - a.mtimeMs);
|
|
221
|
+
for (const f of daemonLogs) {
|
|
222
|
+
if (keep.size >= count || budget <= 0) break;
|
|
223
|
+
if (keep.size === 0) {
|
|
224
|
+
keep.add(f.path);
|
|
225
|
+
if (f.size > budget) {
|
|
226
|
+
trim = { path: f.path, keepBytes: budget };
|
|
227
|
+
budget = 0;
|
|
228
|
+
} else budget -= f.size;
|
|
229
|
+
continue;
|
|
230
|
+
}
|
|
231
|
+
if (f.size > budget) break;
|
|
232
|
+
keep.add(f.path);
|
|
233
|
+
budget -= f.size;
|
|
234
|
+
}
|
|
235
|
+
return { keep, trim };
|
|
236
|
+
}
|
|
206
237
|
function planLogPrune(files, now, policy = DEFAULT_LOG_PRUNE_POLICY, protectedPaths = /* @__PURE__ */ new Set()) {
|
|
207
238
|
const sorted = [...files].sort((a, b) => b.mtimeMs - a.mtimeMs);
|
|
208
239
|
const doomed = /* @__PURE__ */ new Set();
|
|
@@ -231,7 +262,9 @@ function pruneLogsDir(logsDir, protectedPaths = /* @__PURE__ */ new Set(), polic
|
|
|
231
262
|
} catch {
|
|
232
263
|
return 0;
|
|
233
264
|
}
|
|
234
|
-
const
|
|
265
|
+
const daemonLogs = planDaemonLogRetention(files, policy, protectedPaths);
|
|
266
|
+
if (daemonLogs.trim) trimToTail(daemonLogs.trim.path, daemonLogs.trim.keepBytes);
|
|
267
|
+
const doomed = planLogPrune(files.filter((f) => !daemonLogs.keep.has(f.path)), Date.now(), policy, protectedPaths);
|
|
235
268
|
let deleted = 0;
|
|
236
269
|
for (const p of doomed) {
|
|
237
270
|
try {
|
|
@@ -242,6 +275,36 @@ function pruneLogsDir(logsDir, protectedPaths = /* @__PURE__ */ new Set(), polic
|
|
|
242
275
|
}
|
|
243
276
|
return deleted;
|
|
244
277
|
}
|
|
278
|
+
function trimToTail(path, keepBytes) {
|
|
279
|
+
let fd = null;
|
|
280
|
+
try {
|
|
281
|
+
const st = node_fs.statSync(path);
|
|
282
|
+
if (st.size <= keepBytes) return;
|
|
283
|
+
const marker = Buffer.from(`[log trimmed to its last ${keepBytes} bytes by the daemon log retention]
|
|
284
|
+
`);
|
|
285
|
+
const tailBytes = Math.max(0, keepBytes - marker.length);
|
|
286
|
+
fd = node_fs.openSync(path, "r+");
|
|
287
|
+
const tail = Buffer.alloc(tailBytes);
|
|
288
|
+
let read = 0;
|
|
289
|
+
while (read < tailBytes) {
|
|
290
|
+
const n = node_fs.readSync(fd, tail, read, tailBytes - read, st.size - tailBytes + read);
|
|
291
|
+
if (n <= 0) break;
|
|
292
|
+
read += n;
|
|
293
|
+
}
|
|
294
|
+
node_fs.writeSync(fd, marker, 0, marker.length, 0);
|
|
295
|
+
node_fs.writeSync(fd, tail, 0, read, marker.length);
|
|
296
|
+
node_fs.ftruncateSync(fd, marker.length + read);
|
|
297
|
+
node_fs.closeSync(fd);
|
|
298
|
+
fd = null;
|
|
299
|
+
node_fs.utimesSync(path, st.atime, st.mtime);
|
|
300
|
+
} catch {
|
|
301
|
+
} finally {
|
|
302
|
+
if (fd !== null) try {
|
|
303
|
+
node_fs.closeSync(fd);
|
|
304
|
+
} catch {
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
}
|
|
245
308
|
|
|
246
309
|
function createSpawnTimer(clock = Date.now) {
|
|
247
310
|
const requestAt = clock();
|
|
@@ -527,6 +590,7 @@ function sanitizeResumeModel(value) {
|
|
|
527
590
|
}
|
|
528
591
|
|
|
529
592
|
const DEFAULT_MAX_RESTARTS = 3;
|
|
593
|
+
const DEFAULT_MAX_ACCOUNT_RESTARTS = 50;
|
|
530
594
|
function decideRestart(priorAttempts, max = DEFAULT_MAX_RESTARTS) {
|
|
531
595
|
if (priorAttempts >= max) {
|
|
532
596
|
return {
|
|
@@ -583,6 +647,19 @@ const BackgroundTaskInfoSchema = z.z.object({
|
|
|
583
647
|
description: z.z.string().max(backgroundTaskActivity.BACKGROUND_TASK_DESCRIPTION_MAX + 1),
|
|
584
648
|
startedAt: z.z.number()
|
|
585
649
|
});
|
|
650
|
+
const AutoRestartStatusSchema = z.z.object({
|
|
651
|
+
state: z.z.string(),
|
|
652
|
+
reason: z.z.string().optional(),
|
|
653
|
+
since: z.z.number(),
|
|
654
|
+
target: z.z.string(),
|
|
655
|
+
offline: z.z.boolean().optional(),
|
|
656
|
+
retryAt: z.z.number().optional()
|
|
657
|
+
});
|
|
658
|
+
const DaemonListInfoSchema = z.z.object({
|
|
659
|
+
version: z.z.string(),
|
|
660
|
+
upgradePending: z.z.string().nullable(),
|
|
661
|
+
autoRestartEnabled: z.z.boolean()
|
|
662
|
+
});
|
|
586
663
|
const BackgroundTasksReportSchema = z.z.object({
|
|
587
664
|
count: z.z.number().int().nonnegative(),
|
|
588
665
|
tasks: z.z.array(BackgroundTaskInfoSchema),
|
|
@@ -611,8 +688,11 @@ function startDaemonControlServer({
|
|
|
611
688
|
onSessionEdit,
|
|
612
689
|
listPeers,
|
|
613
690
|
isTurnActive,
|
|
691
|
+
getAutoRestartStatus,
|
|
692
|
+
getDaemonInfo,
|
|
614
693
|
onRateLimits,
|
|
615
|
-
onHibernateCheck
|
|
694
|
+
onHibernateCheck,
|
|
695
|
+
getAgentProfiles
|
|
616
696
|
}) {
|
|
617
697
|
return new Promise((resolve) => {
|
|
618
698
|
const app = fastify({
|
|
@@ -718,6 +798,16 @@ function startDaemonControlServer({
|
|
|
718
798
|
}
|
|
719
799
|
});
|
|
720
800
|
}
|
|
801
|
+
typed.post("/agent-profiles", {
|
|
802
|
+
schema: { response: { 200: index.AgentProfilesStateSchema, 503: z.z.object({ error: z.z.string() }) } }
|
|
803
|
+
}, async (_request, reply) => {
|
|
804
|
+
const state = getAgentProfiles?.() ?? null;
|
|
805
|
+
if (!state) {
|
|
806
|
+
reply.code(503);
|
|
807
|
+
return { error: "accounts are not available in this daemon yet" };
|
|
808
|
+
}
|
|
809
|
+
return state;
|
|
810
|
+
});
|
|
721
811
|
typed.post("/list", {
|
|
722
812
|
schema: {
|
|
723
813
|
response: {
|
|
@@ -728,8 +818,12 @@ function startDaemonControlServer({
|
|
|
728
818
|
pid: z.z.number(),
|
|
729
819
|
turnActive: z.z.boolean(),
|
|
730
820
|
// B-507: in-flight background tasks per the wrapper's last report (lease-expired = count 0).
|
|
731
|
-
backgroundTasks: BackgroundTasksReportSchema.optional()
|
|
732
|
-
|
|
821
|
+
backgroundTasks: BackgroundTasksReportSchema.optional(),
|
|
822
|
+
// B-856: the wrapper's own CLI version and its auto-restart status (null = nothing pending).
|
|
823
|
+
cliVersion: z.z.string().optional(),
|
|
824
|
+
autoRestart: AutoRestartStatusSchema.nullable().optional()
|
|
825
|
+
})),
|
|
826
|
+
daemon: DaemonListInfoSchema.optional()
|
|
733
827
|
})
|
|
734
828
|
}
|
|
735
829
|
}
|
|
@@ -742,8 +836,11 @@ function startDaemonControlServer({
|
|
|
742
836
|
happySessionId: child.happySessionId,
|
|
743
837
|
pid: child.pid,
|
|
744
838
|
turnActive: isTurnActive ? isTurnActive(child.happySessionId) : false,
|
|
745
|
-
...getBackgroundTasks ? { backgroundTasks: getBackgroundTasks(child.happySessionId) } : {}
|
|
746
|
-
|
|
839
|
+
...getBackgroundTasks ? { backgroundTasks: getBackgroundTasks(child.happySessionId) } : {},
|
|
840
|
+
...child.happySessionMetadataFromLocalWebhook?.version ? { cliVersion: child.happySessionMetadataFromLocalWebhook.version } : {},
|
|
841
|
+
...getAutoRestartStatus ? { autoRestart: getAutoRestartStatus(child.happySessionId) ?? null } : {}
|
|
842
|
+
})),
|
|
843
|
+
...getDaemonInfo ? { daemon: getDaemonInfo() } : {}
|
|
747
844
|
};
|
|
748
845
|
});
|
|
749
846
|
typed.post("/stop-session", {
|
|
@@ -786,7 +883,9 @@ function startDaemonControlServer({
|
|
|
786
883
|
// sends over the machine RPC. Old CLIs never send them.
|
|
787
884
|
resumeClaudeSessionId: z.z.string().regex(/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i).optional(),
|
|
788
885
|
resumeCodexThreadId: z.z.string().min(1).max(200).optional(),
|
|
789
|
-
parentSessionId: z.z.string().min(1).max(200).optional()
|
|
886
|
+
parentSessionId: z.z.string().min(1).max(200).optional(),
|
|
887
|
+
// B-850a: `very-happy spawn --account` (null = machine login; absent = machine default).
|
|
888
|
+
agentProfileId: z.z.string().min(1).max(64).nullable().optional()
|
|
790
889
|
}),
|
|
791
890
|
response: {
|
|
792
891
|
200: z.z.object({
|
|
@@ -811,13 +910,13 @@ function startDaemonControlServer({
|
|
|
811
910
|
}
|
|
812
911
|
}
|
|
813
912
|
}, async (request, reply) => {
|
|
814
|
-
const { directory, sessionId, agent, environmentVariables, variant, forceNew, permissionMode, spawnedBy, resumeClaudeSessionId, resumeCodexThreadId, parentSessionId } = request.body;
|
|
913
|
+
const { directory, sessionId, agent, environmentVariables, variant, forceNew, permissionMode, spawnedBy, resumeClaudeSessionId, resumeCodexThreadId, parentSessionId, agentProfileId } = request.body;
|
|
815
914
|
if (!directory && variant !== "assistant") {
|
|
816
915
|
reply.code(500);
|
|
817
916
|
return { success: false, error: "directory is required" };
|
|
818
917
|
}
|
|
819
918
|
logger.logger.debug(`[CONTROL SERVER] Spawn session request: dir=${directory}, sessionId=${sessionId || "new"}, agent=${agent || "default"}, variant=${variant || "none"}, forceNew=${forceNew === true}, spawnedBy=${spawnedBy || "unset"}`);
|
|
820
|
-
const result = await spawnSession({ directory, sessionId, agent, environmentVariables, variant, forceNew, permissionMode, spawnedBy, resumeClaudeSessionId, resumeCodexThreadId, parentSessionId });
|
|
919
|
+
const result = await spawnSession({ directory, sessionId, agent, environmentVariables, variant, forceNew, permissionMode, spawnedBy, resumeClaudeSessionId, resumeCodexThreadId, parentSessionId, ...agentProfileId !== void 0 ? { agentProfileId } : {} });
|
|
821
920
|
const resumed = Boolean(resumeClaudeSessionId || resumeCodexThreadId);
|
|
822
921
|
switch (result.type) {
|
|
823
922
|
case "success":
|
|
@@ -908,7 +1007,7 @@ function startDaemonControlServer({
|
|
|
908
1007
|
return { success: false, error: "daemon is still starting up" };
|
|
909
1008
|
}
|
|
910
1009
|
logger.logger.debug(`[CONTROL SERVER] Restart session request: ${sessionId}`);
|
|
911
|
-
const result = await restartSession(sessionId, { keepPublishedPermissionMode: true });
|
|
1010
|
+
const result = await restartSession(sessionId, { keepPublishedPermissionMode: true, account: true });
|
|
912
1011
|
switch (result.type) {
|
|
913
1012
|
case "success":
|
|
914
1013
|
return { success: true, sessionId: result.sessionId };
|
|
@@ -5355,6 +5454,12 @@ function createAutoRestart(deps) {
|
|
|
5355
5454
|
setStatus(sessionId, { state: "waiting", reason: "turn-active", since, target: staleness.target });
|
|
5356
5455
|
return;
|
|
5357
5456
|
}
|
|
5457
|
+
const pending = deps.upgradePending?.() ?? null;
|
|
5458
|
+
if (pending) {
|
|
5459
|
+
deps.log?.(`[auto-restart] ${sessionId} left to the next daemon: upgrade to ${pending} pending`);
|
|
5460
|
+
setStatus(sessionId, { state: "waiting", reason: "upgrade-pending", since, target: staleness.target });
|
|
5461
|
+
return;
|
|
5462
|
+
}
|
|
5358
5463
|
let result;
|
|
5359
5464
|
try {
|
|
5360
5465
|
result = await deps.restart(sessionId, staleness);
|
|
@@ -5444,6 +5549,7 @@ function createAutoRestart(deps) {
|
|
|
5444
5549
|
automationRunning: deps.automationRunning(request.sessionId),
|
|
5445
5550
|
resumable: false,
|
|
5446
5551
|
attempt,
|
|
5552
|
+
upgradePending: deps.upgradePending?.() ?? null,
|
|
5447
5553
|
inFlight,
|
|
5448
5554
|
lastStartedAt
|
|
5449
5555
|
};
|
|
@@ -5460,6 +5566,7 @@ function createAutoRestart(deps) {
|
|
|
5460
5566
|
automationRunning: deps.automationRunning(request.sessionId),
|
|
5461
5567
|
resumable,
|
|
5462
5568
|
attempt: attempts.get(request.sessionId) ?? null,
|
|
5569
|
+
upgradePending: deps.upgradePending?.() ?? null,
|
|
5463
5570
|
inFlight,
|
|
5464
5571
|
lastStartedAt
|
|
5465
5572
|
};
|
|
@@ -7677,6 +7784,7 @@ async function startDaemon() {
|
|
|
7677
7784
|
const initialMachineMetadata = machineMetadata.getInitialMachineMetadata();
|
|
7678
7785
|
const startupCliAvailability = machineMetadata.getStartupCliAvailability();
|
|
7679
7786
|
let claudeAuthServiceRef = null;
|
|
7787
|
+
let accountServiceRef = null;
|
|
7680
7788
|
let cliUpdateStateRef = null;
|
|
7681
7789
|
let lastHandoverHold = null;
|
|
7682
7790
|
let claudeCredentialStoreSetting = (await persistence.readSettings()).claudeCredentialStore === "file" ? "file" : "auto";
|
|
@@ -7805,6 +7913,7 @@ async function startDaemon() {
|
|
|
7805
7913
|
const sessionIdToFinishedSession = /* @__PURE__ */ new Map();
|
|
7806
7914
|
let teamWorker;
|
|
7807
7915
|
let autoRestart;
|
|
7916
|
+
let bundleReplacedSeen = false;
|
|
7808
7917
|
let automationRunner;
|
|
7809
7918
|
let projectPresence;
|
|
7810
7919
|
const persisted = persistence.readPersistedSessions();
|
|
@@ -8100,8 +8209,20 @@ async function startDaemon() {
|
|
|
8100
8209
|
if (options.spawnedBy) {
|
|
8101
8210
|
extraEnv.HAPPY_SPAWNED_BY = options.spawnedBy;
|
|
8102
8211
|
}
|
|
8212
|
+
let spawnAccountId = null;
|
|
8213
|
+
delete extraEnv[store.SPAWN_ACCOUNT_ENV];
|
|
8214
|
+
if ((options.agent ?? "claude") === "claude" && accountServiceRef) {
|
|
8215
|
+
try {
|
|
8216
|
+
spawnAccountId = accountServiceRef.resolveSpawnAccount("claude", options.agentProfileId);
|
|
8217
|
+
} catch (error) {
|
|
8218
|
+
return { type: "error", errorMessage: error instanceof Error ? error.message : String(error) };
|
|
8219
|
+
}
|
|
8220
|
+
if (spawnAccountId) extraEnv[store.SPAWN_ACCOUNT_ENV] = spawnAccountId;
|
|
8221
|
+
} else if (options.agentProfileId) {
|
|
8222
|
+
return { type: "error", errorMessage: `agent-profile-unavailable:agent-mismatch: accounts are not supported for ${options.agent} yet` };
|
|
8223
|
+
}
|
|
8103
8224
|
const claudeAuthStatus = claudeAuthServiceRef?.current()?.status;
|
|
8104
|
-
if ((options.agent ?? "claude") === "claude" && claudeAuthStatus) {
|
|
8225
|
+
if ((options.agent ?? "claude") === "claude" && claudeAuthStatus && !spawnAccountId) {
|
|
8105
8226
|
extraEnv.HAPPY_CLAUDE_AUTH_STATUS = claudeAuthStatus;
|
|
8106
8227
|
}
|
|
8107
8228
|
logger.logger.debug(`[DAEMON RUN] Environment variable keys (before expansion) (${Object.keys(extraEnv).length}): ${Object.keys(extraEnv).join(", ")}`);
|
|
@@ -8545,6 +8666,7 @@ async function startDaemon() {
|
|
|
8545
8666
|
}
|
|
8546
8667
|
};
|
|
8547
8668
|
const restartCounts = /* @__PURE__ */ new Map();
|
|
8669
|
+
const accountRestartCounts = /* @__PURE__ */ new Map();
|
|
8548
8670
|
const autoRestartExits = /* @__PURE__ */ new Set();
|
|
8549
8671
|
const stopSessionAndWait = async (happySessionId, timeoutMs = 8e3) => {
|
|
8550
8672
|
const targets = /* @__PURE__ */ new Set();
|
|
@@ -8594,8 +8716,9 @@ async function startDaemon() {
|
|
|
8594
8716
|
};
|
|
8595
8717
|
const restartSessionImpl = async (happySessionId, options) => {
|
|
8596
8718
|
try {
|
|
8597
|
-
const
|
|
8598
|
-
const
|
|
8719
|
+
const counts = options?.account ? accountRestartCounts : restartCounts;
|
|
8720
|
+
const prior = counts.get(happySessionId) ?? 0;
|
|
8721
|
+
const decision = options?.auto ? { allowed: true } : decideRestart(prior, options?.account ? DEFAULT_MAX_ACCOUNT_RESTARTS : DEFAULT_MAX_RESTARTS);
|
|
8599
8722
|
if (!decision.allowed) {
|
|
8600
8723
|
return { type: "error", errorMessage: `restart:${decision.reason}` };
|
|
8601
8724
|
}
|
|
@@ -8646,7 +8769,7 @@ async function startDaemon() {
|
|
|
8646
8769
|
if (model) args.push("--model", model);
|
|
8647
8770
|
const permissionMode = spawnAgents.sanitizeSpawnPermissionMode(options?.permissionMode ?? (options?.keepPublishedPermissionMode ? publishedRelaunchPermissionMode(metadata) : void 0));
|
|
8648
8771
|
if (permissionMode) args.push("--permission-mode", permissionMode);
|
|
8649
|
-
if (!options?.auto)
|
|
8772
|
+
if (!options?.auto) counts.set(happySessionId, recordRestartAttempt(prior));
|
|
8650
8773
|
const teamEnv = await teamRelaunchEnvFor(happySessionId, metadata);
|
|
8651
8774
|
const result = await spawnTrackedHappyProcess({
|
|
8652
8775
|
args,
|
|
@@ -8812,6 +8935,11 @@ async function startDaemon() {
|
|
|
8812
8935
|
startedBy: metadata?.startedBy ?? null
|
|
8813
8936
|
};
|
|
8814
8937
|
};
|
|
8938
|
+
const upgradePending = () => sessionLock.pendingUpgradeVersion({
|
|
8939
|
+
daemonVersion: _package.packageJson.version,
|
|
8940
|
+
autoUpdate: cliUpdateStateRef?.autoUpdate,
|
|
8941
|
+
bundleReplaced: bundleReplacedSeen
|
|
8942
|
+
});
|
|
8815
8943
|
const autoRestartScheduler = createAutoRestart({
|
|
8816
8944
|
enabled: () => autoRestartSetting,
|
|
8817
8945
|
quietMs: sessionLock.resolveQuietMs(),
|
|
@@ -8866,6 +8994,7 @@ async function startDaemon() {
|
|
|
8866
8994
|
if (!row || typeof row.active !== "boolean") return null;
|
|
8867
8995
|
return { active: row.active, archived: row.archivedAt != null };
|
|
8868
8996
|
},
|
|
8997
|
+
upgradePending,
|
|
8869
8998
|
publish: (sessions) => {
|
|
8870
8999
|
void apiMachineRef?.setAutoRestartSessions(sessions);
|
|
8871
9000
|
},
|
|
@@ -8885,6 +9014,8 @@ async function startDaemon() {
|
|
|
8885
9014
|
// B-501: `very-happy send --resume`
|
|
8886
9015
|
restartSession,
|
|
8887
9016
|
// B-794: `very-happy session provider`
|
|
9017
|
+
getAgentProfiles: () => accountServiceRef?.state() ?? null,
|
|
9018
|
+
// B-850a: `very-happy account list`
|
|
8888
9019
|
requestShutdown: () => requestShutdown("happy-cli"),
|
|
8889
9020
|
onHappySessionWebhook,
|
|
8890
9021
|
onSessionStateEvent,
|
|
@@ -8912,6 +9043,9 @@ async function startDaemon() {
|
|
|
8912
9043
|
// B-505: `daemon list` shows which sessions have a turn in flight, so an
|
|
8913
9044
|
// operator can check the WHOLE machine before a supervised restart.
|
|
8914
9045
|
isTurnActive: (sessionId) => turnActivity.activeSessions().includes(sessionId),
|
|
9046
|
+
// B-856: the auto-restart classification, readable locally (it is encrypted on the server).
|
|
9047
|
+
getAutoRestartStatus: (sessionId) => autoRestartScheduler.statuses()[sessionId],
|
|
9048
|
+
getDaemonInfo: () => ({ version: _package.packageJson.version, upgradePending: upgradePending(), autoRestartEnabled: autoRestartSetting }),
|
|
8915
9049
|
pushClipboard: (text, terminalId) => {
|
|
8916
9050
|
if (!apiMachineRef) {
|
|
8917
9051
|
return { delivered: false, truncated: false, totalBytes: 0, error: "daemon is still starting up" };
|
|
@@ -9066,6 +9200,27 @@ async function startDaemon() {
|
|
|
9066
9200
|
return autoRestartSetting;
|
|
9067
9201
|
});
|
|
9068
9202
|
setTimeout(() => autoRestartScheduler.sweep(), 5e3).unref?.();
|
|
9203
|
+
const accountService$1 = new accountService.AccountService({
|
|
9204
|
+
home: configuration.configuration.happyHomeDir,
|
|
9205
|
+
env: process.env,
|
|
9206
|
+
daemonPid: process.pid,
|
|
9207
|
+
spawnPty: (env) => daemonAccounts.spawnSetupTokenPty(os$1.homedir(), env),
|
|
9208
|
+
restartSession: async (sessionId) => {
|
|
9209
|
+
const result = await restartSession(sessionId, { keepPublishedPermissionMode: true, account: true });
|
|
9210
|
+
if (result.type === "success") return { ok: true };
|
|
9211
|
+
const error = result.type === "error" ? result.errorMessage : "unexpected restart result";
|
|
9212
|
+
const stillRunning = [...pidToTrackedSession.values()].some((s) => s.happySessionId === sessionId && isPidAlive(s.pid));
|
|
9213
|
+
return { ok: false, notRunning: error.startsWith("restart-precheck:not-tracked"), stillRunning, error };
|
|
9214
|
+
},
|
|
9215
|
+
onChanged: () => {
|
|
9216
|
+
void apiMachine.publishAgentProfiles();
|
|
9217
|
+
}
|
|
9218
|
+
});
|
|
9219
|
+
accountServiceRef = accountService$1;
|
|
9220
|
+
apiMachine.setAgentProfileService(accountService$1);
|
|
9221
|
+
const stopAccountWatch = daemonAccounts.watchAccountFiles(configuration.configuration.happyHomeDir, () => {
|
|
9222
|
+
void apiMachine.publishAgentProfiles();
|
|
9223
|
+
});
|
|
9069
9224
|
const webPanelsSync = startWebPanelsSync({
|
|
9070
9225
|
statMtime: async () => (await fs.stat(configuration.configuration.settingsFile).catch(() => null))?.mtimeMs ?? null,
|
|
9071
9226
|
readRaw: async () => (await persistence.readSettings()).webPanels,
|
|
@@ -9200,6 +9355,7 @@ async function startDaemon() {
|
|
|
9200
9355
|
try {
|
|
9201
9356
|
const currentMtimeMs = require$$0.statSync(bundlePath).mtimeMs;
|
|
9202
9357
|
bundleReplaced = currentMtimeMs !== initialBundleMtimeMs;
|
|
9358
|
+
if (bundleReplaced) bundleReplacedSeen = true;
|
|
9203
9359
|
} catch {
|
|
9204
9360
|
}
|
|
9205
9361
|
}
|
|
@@ -9226,6 +9382,8 @@ async function startDaemon() {
|
|
|
9226
9382
|
policyAnnouncements.stop();
|
|
9227
9383
|
stopAgentVersionChecks();
|
|
9228
9384
|
claudeAuthService.stop();
|
|
9385
|
+
stopAccountWatch();
|
|
9386
|
+
accountService$1.dispose();
|
|
9229
9387
|
apiMachine.shutdown();
|
|
9230
9388
|
await stopControlServer();
|
|
9231
9389
|
await controlClient.cleanupDaemonState();
|
|
@@ -9357,6 +9515,8 @@ async function startDaemon() {
|
|
|
9357
9515
|
} catch (error) {
|
|
9358
9516
|
logger.logger.debug("[DAEMON RUN] Mirror shutdown failed:", error);
|
|
9359
9517
|
}
|
|
9518
|
+
stopAccountWatch();
|
|
9519
|
+
accountService$1.dispose();
|
|
9360
9520
|
apiMachine.shutdown();
|
|
9361
9521
|
await stopControlServer();
|
|
9362
9522
|
await controlClient.cleanupDaemonState();
|