very-happy-cli 0.2.190 → 0.2.192
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{AcpBackend-dkRv9QHm.cjs → AcpBackend-BQO4ShOy.cjs} +3 -3
- package/dist/{AcpBackend-Dd1h-Rgt.mjs → AcpBackend-CGHTDJd9.mjs} +3 -3
- package/dist/{AcpSessionManager-QBZ-CIf7.mjs → AcpSessionManager-G0xD6Jbq.mjs} +2 -2
- package/dist/{AcpSessionManager-AqWAqahm.cjs → AcpSessionManager-LlUMmcpB.cjs} +2 -2
- package/dist/{BasePermissionHandler-CLp1ge-4.mjs → BasePermissionHandler-BmTIg376.mjs} +1 -1
- package/dist/{BasePermissionHandler-CpSugp7Z.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-CcpDuIO5.mjs → acpSessionResume-BWEUxNtC.mjs} +1 -1
- package/dist/{acpSessionResume-CZao6QEd.cjs → acpSessionResume-BnHDk5eD.cjs} +1 -1
- package/dist/{agentHome-BJGRA2Kx.mjs → agentHome-B0VnjkZW.mjs} +4 -4
- package/dist/{agentHome-fIUqT-pn.cjs → agentHome-CqQ29YY7.cjs} +4 -4
- package/dist/{api-Dw8gFsQi.mjs → api-_LeBScjg.mjs} +10 -10
- package/dist/{api-CXL6jp-p.cjs → api-hMDsC6Wg.cjs} +10 -10
- package/dist/{apiMachine-BBNEtjf7.mjs → apiMachine-CgRldeJ6.mjs} +76 -21
- package/dist/{apiMachine-C6UqHoPF.cjs → apiMachine-CqW2m6Zr.cjs} +81 -26
- package/dist/{attachmentContent-NmVfKp-B.cjs → attachmentContent-BEeT2J5n.cjs} +2 -2
- package/dist/{attachmentContent-CC4yIrSm.mjs → attachmentContent-CyptLIfq.mjs} +2 -2
- package/dist/{auth-Bb_SL2os.cjs → auth-C9NvNHhL.cjs} +5 -5
- package/dist/{auth-DKa4MsAi.cjs → auth-CA1OClsW.cjs} +8 -8
- package/dist/{auth-Bh6SUoGi.mjs → auth-CFQikywl.mjs} +8 -8
- package/dist/{auth-Bj0psrD2.mjs → auth-DL8_J9vu.mjs} +5 -5
- package/dist/{auto-DK7pbCnV.mjs → auto-CKI05w1D.mjs} +17 -17
- package/dist/{auto-C9Qohh0P.cjs → auto-uQOxlxLp.cjs} +17 -17
- package/dist/{bootstrap-Ct9Nb4sv.mjs → bootstrap-DaZ0Np7X.mjs} +2 -2
- package/dist/{bootstrap-DBJB0y-H.cjs → bootstrap-DsZGc69k.cjs} +2 -2
- package/dist/{browser-BGxDRhHy.mjs → browser-BUIaSHK2.mjs} +1 -1
- package/dist/{browser-CLJWcodR.cjs → browser-Ft0ASDm7.cjs} +1 -1
- package/dist/claudeAccountEnv-BOBpJ3k8.cjs +137 -0
- package/dist/claudeAccountEnv-ON24i0qv.mjs +132 -0
- package/dist/{claudeLocal-Ux31hZyC.mjs → claudeLocal-B1ZVtryl.mjs} +5 -5
- package/dist/{claudeLocal-B6YDYlnY.cjs → claudeLocal-BMf9t4Fa.cjs} +5 -5
- package/dist/{claudeLocalLauncher-D06QijMw.mjs → claudeLocalLauncher-Bp8bqF4y.mjs} +10 -10
- package/dist/{claudeLocalLauncher-DFvmF8rC.cjs → claudeLocalLauncher-C8TeJcfF.cjs} +10 -10
- package/dist/{claudeSessionFork-D2GI7P59.mjs → claudeSessionFork-8AA47z8Y.mjs} +1 -1
- package/dist/{claudeSessionFork-DTLZ2rek.cjs → claudeSessionFork-YiktY55n.cjs} +1 -1
- package/dist/{client-CnGNYidN.mjs → client-Bm4oKvW7.mjs} +2 -2
- package/dist/{client-CtL0Vtww.mjs → client-BmPaBnDK.mjs} +4 -4
- package/dist/{client-CARZ_lNS.cjs → client-CFHZfh9x.cjs} +4 -4
- package/dist/{client-Bffkrs5p.cjs → client-Crh8_cNx.cjs} +2 -2
- package/dist/{client-DZkBUoh9.mjs → client-Cxlp_D4I.mjs} +2 -2
- package/dist/{client-CMKGrnmT.cjs → client-D8XROyZc.cjs} +2 -2
- package/dist/codex/happyMcpStdioBridge.cjs +16 -16
- package/dist/codex/happyMcpStdioBridge.mjs +16 -16
- package/dist/{codexAppServerClient-CLc5nhLT.mjs → codexAppServerClient-BWJbLCQn.mjs} +3 -3
- package/dist/{codexAppServerClient-CpT9F6EM.cjs → codexAppServerClient-q8GHQhyC.cjs} +3 -3
- package/dist/{codexCommand-Dliq3EBv.mjs → codexCommand-BfXfRQr4.mjs} +121 -61
- package/dist/{codexCommand-39kH99SJ.cjs → codexCommand-BgpGg-Zy.cjs} +121 -61
- package/dist/{codexTermination-ByW7tRjr.cjs → codexTermination-CVUF0X75.cjs} +1 -1
- package/dist/{codexTermination-ORIw0gpU.mjs → codexTermination-s9fd1gkA.mjs} +1 -1
- package/dist/{config-CeIzCsfj.cjs → config-BAjyTyYp.cjs} +3 -3
- package/dist/{config-CxSsGO1Z.mjs → config-BF8XgLyc.mjs} +3 -3
- package/dist/{configuration-Dt5lKW3P.cjs → configuration-CXEVKAyF.cjs} +1 -1
- package/dist/{configuration-Dechcvd-.mjs → configuration-IhRiLDVe.mjs} +1 -1
- package/dist/{connect-UwQHvCpR.mjs → connect-LZh1gr08.mjs} +13 -13
- package/dist/{connect-NPDzIVC6.cjs → connect-rCS56arw.cjs} +13 -13
- package/dist/{context-BdZssgF0.cjs → context-3_S_mWz9.cjs} +1 -1
- package/dist/{context-C9JbJoNe.mjs → context-DO6F5YwH.mjs} +1 -1
- package/dist/{controlClient-D7NGfmtq.mjs → controlClient-8ILulwjc.mjs} +14 -5
- package/dist/{controlClient-BRk65BRO.cjs → controlClient-j7p5p3_7.cjs} +15 -4
- package/dist/{createSessionMetadata-B_HZCDj_.cjs → createSessionMetadata-DwdD_uVo.cjs} +2 -2
- package/dist/{createSessionMetadata-DyhFKAby.mjs → createSessionMetadata-oyaTZm1b.mjs} +2 -2
- package/dist/daemonAccounts-BCjDgoNt.cjs +51 -0
- package/dist/daemonAccounts-BJgt6IJe.mjs +27 -0
- package/dist/defaultPermissionMode-BFShzF55.cjs +49 -0
- package/dist/defaultPermissionMode-Lt3PUCwY.mjs +43 -0
- package/dist/{deterministicJson-BEygolBQ.cjs → deterministicJson-DUN0v3St.cjs} +13 -13
- package/dist/{deterministicJson-DNmMVhFu.mjs → deterministicJson-Dfp-7wUZ.mjs} +13 -13
- package/dist/{doctor-BdBi7TFZ.mjs → doctor-B_UwMcVT.mjs} +7 -7
- package/dist/{doctor-B9lW1WlG.cjs → doctor-FgUYTbAT.cjs} +7 -7
- package/dist/{downloadTarget-DS0zT2AU.cjs → downloadTarget-BrrQEDxg.cjs} +6 -6
- package/dist/{downloadTarget-CGojGjaN.mjs → downloadTarget-C0d6jRx-.mjs} +6 -6
- package/dist/{ensureDaemonRunning-Bibp6vhe.cjs → ensureDaemonRunning-Cq4FYI5Q.cjs} +5 -5
- package/dist/{ensureDaemonRunning-BOdbryDM.mjs → ensureDaemonRunning-KUMFfIil.mjs} +5 -5
- package/dist/{handleResumeCommand-CgLzBYne.mjs → handleResumeCommand-BGhVo3QH.mjs} +5 -5
- package/dist/{handleResumeCommand-DXOuWr4p.cjs → handleResumeCommand-Cl9GIL5F.cjs} +5 -5
- package/dist/{index-Db0HIC-k.mjs → index-BjXjMhGY.mjs} +4 -4
- package/dist/{index-BOe6dKnL.cjs → index-BzAYnYct.cjs} +186 -0
- package/dist/{index-CwRW11hT.cjs → index-CQ_hLLCj.cjs} +3 -3
- package/dist/{index-DXSIi6j_.cjs → index-CRipkiqo.cjs} +4 -4
- package/dist/{index-Bs5FD8JF.cjs → index-CZaLMmPC.cjs} +4 -4
- package/dist/{index-CBHfkQNY.mjs → index-Ca1Tt96A.mjs} +45 -41
- package/dist/{index-f8oDidjV.cjs → index-D8ODb0_U.cjs} +44 -40
- package/dist/{index-DmqsRnV7.mjs → index-DYD3GM1m.mjs} +168 -1
- package/dist/{index-rNTX33in.mjs → index-JQDyJ3Li.mjs} +3 -3
- package/dist/{index-DUByZsKe.mjs → index-v5EmjT8l.mjs} +4 -4
- package/dist/index.cjs +2 -2
- package/dist/index.mjs +2 -2
- package/dist/{install-CXIL_FYx.cjs → install-ClUA9tbC.cjs} +3 -3
- package/dist/{install-DfPrEWGG.mjs → install-D6EHRtAN.mjs} +3 -3
- package/dist/lib.cjs +12 -12
- package/dist/lib.d.cts +292 -0
- package/dist/lib.d.mts +292 -0
- package/dist/lib.mjs +12 -12
- package/dist/{lidState-D0DF20oG.mjs → lidState-CZOXXdzv.mjs} +1 -1
- package/dist/{lidState-q_XFYg33.cjs → lidState-DqoN7zH4.cjs} +1 -1
- package/dist/{localHappyAgentAuth-CKNW-MXw.cjs → localHappyAgentAuth-BnGCpHRX.cjs} +1 -1
- package/dist/{localHappyAgentAuth-BBhM4Qk1.mjs → localHappyAgentAuth-YHxDZ4x4.mjs} +1 -1
- package/dist/{logger-BBRTTVsQ.cjs → logger-8su64lqR.cjs} +2 -2
- package/dist/{logger-CL7pin9b.mjs → logger-Fd_rNvgd.mjs} +2 -2
- package/dist/{machineMetadata-DP06qdBk.mjs → machineMetadata-1HIIC7Bc.mjs} +3 -3
- package/dist/{machineMetadata-DnFNlrVK.cjs → machineMetadata-DYXt3p6u.cjs} +3 -3
- package/dist/{main-DO7nRvhf.mjs → main-BI6GIzUL.mjs} +92 -48
- package/dist/{main-DLOXykOR.cjs → main-C_GrcYkn.cjs} +92 -48
- package/dist/{mcp-Du0MgR7e.cjs → mcp-BycIv9oQ.cjs} +18 -15
- package/dist/{mcp-C-4sPTae.mjs → mcp-XGoxywno.mjs} +18 -15
- package/dist/{mirrorProtocol-GuWMxLkh.cjs → mirrorProtocol-DVnB8EO8.cjs} +3 -3
- package/dist/{mirrorProtocol-dkq2ZENA.mjs → mirrorProtocol-DXT3rv7T.mjs} +3 -3
- package/dist/{package-C6uiXULx.mjs → package-6KkRAops.mjs} +7 -7
- package/dist/{package-DrY090nZ.cjs → package-iuLlSiSF.cjs} +7 -7
- package/dist/{panels-4DRBKHZP.cjs → panels-0C89q0Tu.cjs} +5 -5
- package/dist/{panels-DXYdJA6n.mjs → panels-B5Di2zb2.mjs} +5 -5
- package/dist/{peerTools-5ZM4spcZ.cjs → peerTools-CANTX_mG.cjs} +5 -5
- package/dist/{peerTools-dY1aJez4.mjs → peerTools-CKJ-IDM4.mjs} +5 -5
- package/dist/{persistence-Bl5S3TLB.cjs → persistence-B4ttN-fR.cjs} +2 -2
- package/dist/{persistence-Dogj7JIp.mjs → persistence-DWcHe035.mjs} +2 -2
- package/dist/{piRunnerArgs-C3jZ1M6b.cjs → piRunnerArgs-BOkfxyak.cjs} +1 -1
- package/dist/{piRunnerArgs-D8nN_Iit.mjs → piRunnerArgs-Bl5GpBoN.mjs} +2 -2
- package/dist/{piRuntime-BoeMsAXK.mjs → piRuntime-BhwxzdQf.mjs} +1 -1
- package/dist/{piRuntime-Bd9-eq6M.cjs → piRuntime-DzrIiZU8.cjs} +1 -1
- package/dist/{piTerminal-C3j1ca3x.cjs → piTerminal-BdS7ol7v.cjs} +20 -17
- package/dist/{piTerminal-GEPkIGD4.mjs → piTerminal-DnA2CbGr.mjs} +20 -17
- package/dist/{pushNotifications-CfspRcl-.cjs → pushNotifications-BqFoLye2.cjs} +12 -3
- package/dist/{pushNotifications-dUceOIni.mjs → pushNotifications-DkQ0yvFs.mjs} +12 -3
- package/dist/{query-DjsVgG3E.cjs → query-BQ4br3yn.cjs} +1 -1
- package/dist/{query-iYH-tm7L.mjs → query-BRJYSkb1.mjs} +1 -1
- package/dist/{rateLimitReporter-jeVi-fym.mjs → rateLimitReporter-BRbYkmuP.mjs} +3 -3
- package/dist/{rateLimitReporter-DUu2KydZ.cjs → rateLimitReporter-DK5SQuCc.cjs} +3 -3
- package/dist/{rateLimitWindows-Bx3ROBP5.cjs → rateLimitWindows-DBfiuYeg.cjs} +1 -1
- package/dist/{rateLimitWindows-CEn0DXaX.mjs → rateLimitWindows-Da5AR-4u.mjs} +1 -1
- package/dist/reconnectEnv-B31lY4nR.cjs +27 -0
- package/dist/reconnectEnv-DeSvHl3q.mjs +24 -0
- package/dist/{registerCommonHandlers-Beun-cQv.cjs → registerCommonHandlers-m6pxxf2J.cjs} +2 -2
- package/dist/{registerCommonHandlers-DWZ7mfdt.mjs → registerCommonHandlers-yQ7Ru-l0.mjs} +2 -2
- package/dist/{registerKillSessionHandler-CA1FFr_F.cjs → registerKillSessionHandler-BAOIa_Fs.cjs} +6 -6
- package/dist/{registerKillSessionHandler-CzgklwLG.mjs → registerKillSessionHandler-BDNpi7YO.mjs} +6 -6
- package/dist/{remoteSessionClient-BiC2KDew.mjs → remoteSessionClient-CZ7aaNgj.mjs} +5 -5
- package/dist/{remoteSessionClient-DGFI__5Z.cjs → remoteSessionClient-iJMXRN_D.cjs} +5 -5
- package/dist/{reportProgressTool-CgPy6n_7.mjs → reportProgressTool-DfQhPu0s.mjs} +3 -3
- package/dist/{reportProgressTool-CvPGov1F.cjs → reportProgressTool-DpFs7pSe.cjs} +3 -3
- package/dist/{run-B_gFgJVB.mjs → run-CwN28mcj.mjs} +215 -52
- package/dist/{run-rPqQwDi_.cjs → run-p-xp1_HY.cjs} +214 -51
- package/dist/{runClaude-DM8gm8iu.cjs → runClaude-D6U1Z575.cjs} +83 -48
- package/dist/{runClaude-CykqeXK7.mjs → runClaude-DRKtAGTm.mjs} +83 -48
- package/dist/{runClaudeDeps-D2phXGut.mjs → runClaudeDeps-BheVcIlD.mjs} +147 -69
- package/dist/{runClaudeDeps-DGAomimZ.cjs → runClaudeDeps-Dkofokgb.cjs} +142 -64
- package/dist/{runGemini-CXTeSOZp.cjs → runGemini-C8q3YCc0.cjs} +33 -33
- package/dist/{runGemini-CtWCVkj5.mjs → runGemini-owbvhFbi.mjs} +33 -33
- package/dist/{runOpenClaw-CH_9_RyZ.cjs → runOpenClaw-DGeN66-t.cjs} +18 -18
- package/dist/{runOpenClaw-BBdjlViJ.mjs → runOpenClaw-Dky3-mjO.mjs} +18 -18
- package/dist/{sandbox-Bb5IMun3.cjs → sandbox-D2CPyoCA.cjs} +4 -4
- package/dist/{sandbox-DGmXZ6Zz.mjs → sandbox-sq_wy9Gl.mjs} +4 -4
- package/dist/{selfCheck-CccwNTTK.cjs → selfCheck-BgLvQKSt.cjs} +39 -37
- package/dist/selfCheck-vkfrgQ7X.mjs +88 -0
- package/dist/{send-BpiXPkDo.cjs → send-Cd10YhXh.cjs} +8 -8
- package/dist/{send-B6rHg8GT.mjs → send-K9vg-8t-.mjs} +8 -8
- package/dist/{server-DHUzjApC.cjs → server-DRrV64r0.cjs} +6 -6
- package/dist/{server-BkdAyHhC.mjs → server-De4W1zuK.mjs} +4 -4
- package/dist/{sessionLock-BFBReiKq.cjs → sessionLock-BDtSzzKS.cjs} +10 -3
- package/dist/{sessionLock-Ca_bIo50.mjs → sessionLock-Dl6i7IgA.mjs} +10 -4
- package/dist/{sessionOps-DeWVqpe4.cjs → sessionOps-DvnEH4PL.cjs} +6 -4
- package/dist/{sessionOps-CA2kpm66.mjs → sessionOps-gU88-W9F.mjs} +6 -4
- package/dist/sessionProvider-CKcIo7KO.mjs +108 -0
- package/dist/sessionProvider-CbSZeZrl.cjs +113 -0
- package/dist/{sessionScanner-CGzsN8V6.cjs → sessionScanner-7RtcCeyD.cjs} +3 -3
- package/dist/{sessionScanner-DDDud5re.mjs → sessionScanner-DR32uSby.mjs} +3 -3
- package/dist/{sessions-CKJPWFgu.cjs → sessions-BvuMjgvJ.cjs} +10 -10
- package/dist/{sessions-B4d50sCI.mjs → sessions-DTt2Eguk.mjs} +10 -10
- package/dist/{setupOfflineReconnection-CyPNgyCe.mjs → setupOfflineReconnection-BGnvhRfb.mjs} +2 -2
- package/dist/{setupOfflineReconnection-DPXRo_zf.cjs → setupOfflineReconnection-DduOsw6p.cjs} +2 -2
- package/dist/{spawn-CrYN_OOT.mjs → spawn-CL3cUc7b.mjs} +26 -17
- package/dist/{spawn-CgSJzzWS.cjs → spawn-DMB6rRPA.cjs} +26 -17
- package/dist/{spawnAgents-C1-4m7aN.cjs → spawnAgents-CClb7buD.cjs} +8 -2
- package/dist/{spawnAgents-DWCDYCQ1.mjs → spawnAgents-CRMfOJhh.mjs} +8 -2
- package/dist/{spawnHappyCLI-DjbkiSH1.mjs → spawnHappyCLI-Cj_6IICe.mjs} +1 -1
- package/dist/{spawnHappyCLI-CTy3p6V_.cjs → spawnHappyCLI-DJdhX_Qx.cjs} +1 -1
- package/dist/{startFileWatcher-Dedtu1vq.mjs → startFileWatcher-DikVa8kg.mjs} +1 -1
- package/dist/{startFileWatcher-BQs0cJA-.cjs → startFileWatcher-LnOmVW6H.cjs} +1 -1
- package/dist/{startupSessionCreate-Dxy3X4DG.cjs → startupSessionCreate-B3ND-917.cjs} +3 -3
- package/dist/{startupSessionCreate-BKFU4v_h.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-D9a4cBEa.cjs → streamRelay-DFdOaLOn.cjs} +1 -1
- package/dist/{streamRelay-P9e7Sohm.mjs → streamRelay-sABnxEXq.mjs} +1 -1
- package/dist/{sync-eZkXnsW_.mjs → sync-JoEZKRo8.mjs} +1 -1
- package/dist/{sync-DtWB7RzA.cjs → sync-_2lsZ1U2.cjs} +1 -1
- package/dist/{systemPrompt-2XOpZ1j6.cjs → systemPrompt-CJEvNCuW.cjs} +2 -2
- package/dist/{systemPrompt-Bn6g6aCH.mjs → systemPrompt-Zq4HyrZ5.mjs} +2 -2
- package/dist/{teams-ecFay4Gn.cjs → teams-BNZafnrT.cjs} +7 -7
- package/dist/{teams-nadkqrbW.mjs → teams-qz4LqKJ2.mjs} +7 -7
- package/dist/{template-BiTD-jI9.mjs → template-CJ8BWSsc.mjs} +1 -1
- package/dist/{template-17HATY_Y.cjs → template-LgvBbOna.cjs} +1 -1
- package/dist/{time-gPD_EmA-.cjs → time-CaUlWSNJ.cjs} +1 -1
- package/dist/{time-CN3TuSVG.mjs → time-bzmet4s5.mjs} +1 -1
- package/dist/{titleGenerator-lT5ldPuN.cjs → titleGenerator-BuIIu_JP.cjs} +17 -13
- package/dist/{titleGenerator-DgzTQdn2.mjs → titleGenerator-CbTtJ_1D.mjs} +16 -12
- package/dist/{todo-B1VeMk5A.cjs → todo-CQ_BTf9C.cjs} +6 -6
- package/dist/{todo-BIxd7l2Q.mjs → todo-DIrVF_Ak.mjs} +6 -6
- package/dist/{tools-DvqbLsCF.cjs → tools-BnmmFZji.cjs} +1 -1
- package/dist/{tools-zXJpxiG_.mjs → tools-cLOjBvPn.mjs} +1 -1
- package/dist/{uninstall-9htK6mb7.mjs → uninstall-C5OuW6dE.mjs} +3 -3
- package/dist/{uninstall-CvIOpwB5.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/defaultPermissionMode-BnxJPVHT.mjs +0 -4
- package/dist/defaultPermissionMode-CxmTXUQR.cjs +0 -7
- package/dist/providerBinding-B-Qbx9W2.cjs +0 -140
- package/dist/providerBinding-CYubGg-Z.mjs +0 -132
- package/dist/selfCheck-BfK945YQ.mjs +0 -86
- package/dist/sessionProvider-VFbtUmMR.cjs +0 -114
- package/dist/sessionProvider-g18IiK74.mjs +0 -109
|
@@ -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-BOe6dKnL.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
|
};
|
|
@@ -6618,6 +6725,9 @@ async function removeTeamWorktree(resource) {
|
|
|
6618
6725
|
if (ownBranch) await git(repository, ["branch", "-D", branch]);
|
|
6619
6726
|
}
|
|
6620
6727
|
|
|
6728
|
+
function teamInitialModelMeta(model) {
|
|
6729
|
+
return model ? { model, modelIntent: model } : { modelIntent: index.MODEL_INTENT_CONFIG };
|
|
6730
|
+
}
|
|
6621
6731
|
function refusalCode(error) {
|
|
6622
6732
|
const code = axios.isAxiosError(error) ? error.response?.data?.error : void 0;
|
|
6623
6733
|
return typeof code === "string" && /^[a-z_]{1,64}$/.test(code) ? ` (${code})` : "";
|
|
@@ -6734,7 +6844,7 @@ function createTeamWorker(deps) {
|
|
|
6734
6844
|
return;
|
|
6735
6845
|
}
|
|
6736
6846
|
const key = await sessionOps.waitForSessionKey(receipt.sessionId, 1e4);
|
|
6737
|
-
await sessionOps.sendUserMessage(receipt.sessionId, key, teamInitialPrompt(op.prompt, bot?.root === true, receipt.directory), "teams", { localId: `teams-initial-${op.id}`, sentFrom: "team", ...op.model
|
|
6847
|
+
await sessionOps.sendUserMessage(receipt.sessionId, key, teamInitialPrompt(op.prompt, bot?.root === true, receipt.directory), "teams", { localId: `teams-initial-${op.id}`, sentFrom: "team", ...teamInitialModelMeta(op.model) });
|
|
6738
6848
|
receipt = { ...receipt, phase: "delivered" };
|
|
6739
6849
|
writeReceipt$1(home, receipt);
|
|
6740
6850
|
}
|
|
@@ -7674,6 +7784,7 @@ async function startDaemon() {
|
|
|
7674
7784
|
const initialMachineMetadata = machineMetadata.getInitialMachineMetadata();
|
|
7675
7785
|
const startupCliAvailability = machineMetadata.getStartupCliAvailability();
|
|
7676
7786
|
let claudeAuthServiceRef = null;
|
|
7787
|
+
let accountServiceRef = null;
|
|
7677
7788
|
let cliUpdateStateRef = null;
|
|
7678
7789
|
let lastHandoverHold = null;
|
|
7679
7790
|
let claudeCredentialStoreSetting = (await persistence.readSettings()).claudeCredentialStore === "file" ? "file" : "auto";
|
|
@@ -7802,6 +7913,7 @@ async function startDaemon() {
|
|
|
7802
7913
|
const sessionIdToFinishedSession = /* @__PURE__ */ new Map();
|
|
7803
7914
|
let teamWorker;
|
|
7804
7915
|
let autoRestart;
|
|
7916
|
+
let bundleReplacedSeen = false;
|
|
7805
7917
|
let automationRunner;
|
|
7806
7918
|
let projectPresence;
|
|
7807
7919
|
const persisted = persistence.readPersistedSessions();
|
|
@@ -8097,8 +8209,20 @@ async function startDaemon() {
|
|
|
8097
8209
|
if (options.spawnedBy) {
|
|
8098
8210
|
extraEnv.HAPPY_SPAWNED_BY = options.spawnedBy;
|
|
8099
8211
|
}
|
|
8212
|
+
let spawnAccountId = null;
|
|
8213
|
+
delete extraEnv[store.SPAWN_ACCOUNT_ENV];
|
|
8214
|
+
if ((options.agent ?? "claude") === "claude" && accountServiceRef) {
|
|
8215
|
+
try {
|
|
8216
|
+
spawnAccountId = accountServiceRef.resolveSpawnAccount("claude", options.agentProfileId);
|
|
8217
|
+
} catch (error) {
|
|
8218
|
+
return { type: "error", errorMessage: error instanceof Error ? error.message : String(error) };
|
|
8219
|
+
}
|
|
8220
|
+
if (spawnAccountId) extraEnv[store.SPAWN_ACCOUNT_ENV] = spawnAccountId;
|
|
8221
|
+
} else if (options.agentProfileId) {
|
|
8222
|
+
return { type: "error", errorMessage: `agent-profile-unavailable:agent-mismatch: accounts are not supported for ${options.agent} yet` };
|
|
8223
|
+
}
|
|
8100
8224
|
const claudeAuthStatus = claudeAuthServiceRef?.current()?.status;
|
|
8101
|
-
if ((options.agent ?? "claude") === "claude" && claudeAuthStatus) {
|
|
8225
|
+
if ((options.agent ?? "claude") === "claude" && claudeAuthStatus && !spawnAccountId) {
|
|
8102
8226
|
extraEnv.HAPPY_CLAUDE_AUTH_STATUS = claudeAuthStatus;
|
|
8103
8227
|
}
|
|
8104
8228
|
logger.logger.debug(`[DAEMON RUN] Environment variable keys (before expansion) (${Object.keys(extraEnv).length}): ${Object.keys(extraEnv).join(", ")}`);
|
|
@@ -8542,6 +8666,7 @@ async function startDaemon() {
|
|
|
8542
8666
|
}
|
|
8543
8667
|
};
|
|
8544
8668
|
const restartCounts = /* @__PURE__ */ new Map();
|
|
8669
|
+
const accountRestartCounts = /* @__PURE__ */ new Map();
|
|
8545
8670
|
const autoRestartExits = /* @__PURE__ */ new Set();
|
|
8546
8671
|
const stopSessionAndWait = async (happySessionId, timeoutMs = 8e3) => {
|
|
8547
8672
|
const targets = /* @__PURE__ */ new Set();
|
|
@@ -8591,8 +8716,9 @@ async function startDaemon() {
|
|
|
8591
8716
|
};
|
|
8592
8717
|
const restartSessionImpl = async (happySessionId, options) => {
|
|
8593
8718
|
try {
|
|
8594
|
-
const
|
|
8595
|
-
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);
|
|
8596
8722
|
if (!decision.allowed) {
|
|
8597
8723
|
return { type: "error", errorMessage: `restart:${decision.reason}` };
|
|
8598
8724
|
}
|
|
@@ -8643,7 +8769,7 @@ async function startDaemon() {
|
|
|
8643
8769
|
if (model) args.push("--model", model);
|
|
8644
8770
|
const permissionMode = spawnAgents.sanitizeSpawnPermissionMode(options?.permissionMode ?? (options?.keepPublishedPermissionMode ? publishedRelaunchPermissionMode(metadata) : void 0));
|
|
8645
8771
|
if (permissionMode) args.push("--permission-mode", permissionMode);
|
|
8646
|
-
if (!options?.auto)
|
|
8772
|
+
if (!options?.auto) counts.set(happySessionId, recordRestartAttempt(prior));
|
|
8647
8773
|
const teamEnv = await teamRelaunchEnvFor(happySessionId, metadata);
|
|
8648
8774
|
const result = await spawnTrackedHappyProcess({
|
|
8649
8775
|
args,
|
|
@@ -8809,6 +8935,11 @@ async function startDaemon() {
|
|
|
8809
8935
|
startedBy: metadata?.startedBy ?? null
|
|
8810
8936
|
};
|
|
8811
8937
|
};
|
|
8938
|
+
const upgradePending = () => sessionLock.pendingUpgradeVersion({
|
|
8939
|
+
daemonVersion: _package.packageJson.version,
|
|
8940
|
+
autoUpdate: cliUpdateStateRef?.autoUpdate,
|
|
8941
|
+
bundleReplaced: bundleReplacedSeen
|
|
8942
|
+
});
|
|
8812
8943
|
const autoRestartScheduler = createAutoRestart({
|
|
8813
8944
|
enabled: () => autoRestartSetting,
|
|
8814
8945
|
quietMs: sessionLock.resolveQuietMs(),
|
|
@@ -8863,6 +8994,7 @@ async function startDaemon() {
|
|
|
8863
8994
|
if (!row || typeof row.active !== "boolean") return null;
|
|
8864
8995
|
return { active: row.active, archived: row.archivedAt != null };
|
|
8865
8996
|
},
|
|
8997
|
+
upgradePending,
|
|
8866
8998
|
publish: (sessions) => {
|
|
8867
8999
|
void apiMachineRef?.setAutoRestartSessions(sessions);
|
|
8868
9000
|
},
|
|
@@ -8882,6 +9014,8 @@ async function startDaemon() {
|
|
|
8882
9014
|
// B-501: `very-happy send --resume`
|
|
8883
9015
|
restartSession,
|
|
8884
9016
|
// B-794: `very-happy session provider`
|
|
9017
|
+
getAgentProfiles: () => accountServiceRef?.state() ?? null,
|
|
9018
|
+
// B-850a: `very-happy account list`
|
|
8885
9019
|
requestShutdown: () => requestShutdown("happy-cli"),
|
|
8886
9020
|
onHappySessionWebhook,
|
|
8887
9021
|
onSessionStateEvent,
|
|
@@ -8909,6 +9043,9 @@ async function startDaemon() {
|
|
|
8909
9043
|
// B-505: `daemon list` shows which sessions have a turn in flight, so an
|
|
8910
9044
|
// operator can check the WHOLE machine before a supervised restart.
|
|
8911
9045
|
isTurnActive: (sessionId) => turnActivity.activeSessions().includes(sessionId),
|
|
9046
|
+
// B-856: the auto-restart classification, readable locally (it is encrypted on the server).
|
|
9047
|
+
getAutoRestartStatus: (sessionId) => autoRestartScheduler.statuses()[sessionId],
|
|
9048
|
+
getDaemonInfo: () => ({ version: _package.packageJson.version, upgradePending: upgradePending(), autoRestartEnabled: autoRestartSetting }),
|
|
8912
9049
|
pushClipboard: (text, terminalId) => {
|
|
8913
9050
|
if (!apiMachineRef) {
|
|
8914
9051
|
return { delivered: false, truncated: false, totalBytes: 0, error: "daemon is still starting up" };
|
|
@@ -9063,6 +9200,27 @@ async function startDaemon() {
|
|
|
9063
9200
|
return autoRestartSetting;
|
|
9064
9201
|
});
|
|
9065
9202
|
setTimeout(() => autoRestartScheduler.sweep(), 5e3).unref?.();
|
|
9203
|
+
const accountService$1 = new accountService.AccountService({
|
|
9204
|
+
home: configuration.configuration.happyHomeDir,
|
|
9205
|
+
env: process.env,
|
|
9206
|
+
daemonPid: process.pid,
|
|
9207
|
+
spawnPty: (env) => daemonAccounts.spawnSetupTokenPty(os$1.homedir(), env),
|
|
9208
|
+
restartSession: async (sessionId) => {
|
|
9209
|
+
const result = await restartSession(sessionId, { keepPublishedPermissionMode: true, account: true });
|
|
9210
|
+
if (result.type === "success") return { ok: true };
|
|
9211
|
+
const error = result.type === "error" ? result.errorMessage : "unexpected restart result";
|
|
9212
|
+
const stillRunning = [...pidToTrackedSession.values()].some((s) => s.happySessionId === sessionId && isPidAlive(s.pid));
|
|
9213
|
+
return { ok: false, notRunning: error.startsWith("restart-precheck:not-tracked"), stillRunning, error };
|
|
9214
|
+
},
|
|
9215
|
+
onChanged: () => {
|
|
9216
|
+
void apiMachine.publishAgentProfiles();
|
|
9217
|
+
}
|
|
9218
|
+
});
|
|
9219
|
+
accountServiceRef = accountService$1;
|
|
9220
|
+
apiMachine.setAgentProfileService(accountService$1);
|
|
9221
|
+
const stopAccountWatch = daemonAccounts.watchAccountFiles(configuration.configuration.happyHomeDir, () => {
|
|
9222
|
+
void apiMachine.publishAgentProfiles();
|
|
9223
|
+
});
|
|
9066
9224
|
const webPanelsSync = startWebPanelsSync({
|
|
9067
9225
|
statMtime: async () => (await fs.stat(configuration.configuration.settingsFile).catch(() => null))?.mtimeMs ?? null,
|
|
9068
9226
|
readRaw: async () => (await persistence.readSettings()).webPanels,
|
|
@@ -9197,6 +9355,7 @@ async function startDaemon() {
|
|
|
9197
9355
|
try {
|
|
9198
9356
|
const currentMtimeMs = require$$0.statSync(bundlePath).mtimeMs;
|
|
9199
9357
|
bundleReplaced = currentMtimeMs !== initialBundleMtimeMs;
|
|
9358
|
+
if (bundleReplaced) bundleReplacedSeen = true;
|
|
9200
9359
|
} catch {
|
|
9201
9360
|
}
|
|
9202
9361
|
}
|
|
@@ -9223,6 +9382,8 @@ async function startDaemon() {
|
|
|
9223
9382
|
policyAnnouncements.stop();
|
|
9224
9383
|
stopAgentVersionChecks();
|
|
9225
9384
|
claudeAuthService.stop();
|
|
9385
|
+
stopAccountWatch();
|
|
9386
|
+
accountService$1.dispose();
|
|
9226
9387
|
apiMachine.shutdown();
|
|
9227
9388
|
await stopControlServer();
|
|
9228
9389
|
await controlClient.cleanupDaemonState();
|
|
@@ -9354,6 +9515,8 @@ async function startDaemon() {
|
|
|
9354
9515
|
} catch (error) {
|
|
9355
9516
|
logger.logger.debug("[DAEMON RUN] Mirror shutdown failed:", error);
|
|
9356
9517
|
}
|
|
9518
|
+
stopAccountWatch();
|
|
9519
|
+
accountService$1.dispose();
|
|
9357
9520
|
apiMachine.shutdown();
|
|
9358
9521
|
await stopControlServer();
|
|
9359
9522
|
await controlClient.cleanupDaemonState();
|