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,21 +1,21 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var spawnAgents = require('./spawnAgents-
|
|
4
|
-
var client = require('./client-
|
|
3
|
+
var spawnAgents = require('./spawnAgents-CClb7buD.cjs');
|
|
4
|
+
var client = require('./client-D8XROyZc.cjs');
|
|
5
5
|
var chalk = require('chalk');
|
|
6
6
|
var node_fs = require('node:fs');
|
|
7
7
|
var path$1 = require('node:path');
|
|
8
|
-
var controlClient = require('./controlClient-
|
|
9
|
-
var persistence = require('./persistence-
|
|
10
|
-
var index = require('./index-
|
|
11
|
-
var configuration = require('./configuration-
|
|
8
|
+
var controlClient = require('./controlClient-j7p5p3_7.cjs');
|
|
9
|
+
var persistence = require('./persistence-B4ttN-fR.cjs');
|
|
10
|
+
var index = require('./index-BzAYnYct.cjs');
|
|
11
|
+
var configuration = require('./configuration-CXEVKAyF.cjs');
|
|
12
12
|
var path = require('./path-B7zW-WwE.cjs');
|
|
13
|
-
var claudeSessionFork = require('./claudeSessionFork-
|
|
14
|
-
var codexAppServerClient = require('./codexAppServerClient-
|
|
13
|
+
var claudeSessionFork = require('./claudeSessionFork-YiktY55n.cjs');
|
|
14
|
+
var codexAppServerClient = require('./codexAppServerClient-q8GHQhyC.cjs');
|
|
15
15
|
var codexThreadFork = require('./codexThreadFork-5kwoKjMu.cjs');
|
|
16
|
-
var sessionOps = require('./sessionOps-
|
|
17
|
-
var createSessionMetadata = require('./createSessionMetadata-
|
|
18
|
-
var logger = require('./logger-
|
|
16
|
+
var sessionOps = require('./sessionOps-DvnEH4PL.cjs');
|
|
17
|
+
var createSessionMetadata = require('./createSessionMetadata-DwdD_uVo.cjs');
|
|
18
|
+
var logger = require('./logger-8su64lqR.cjs');
|
|
19
19
|
var forkBackfill = require('./forkBackfill-8eLDeS73.cjs');
|
|
20
20
|
require('node:fs/promises');
|
|
21
21
|
require('zod');
|
|
@@ -24,17 +24,17 @@ require('node:crypto');
|
|
|
24
24
|
require('tweetnacl');
|
|
25
25
|
require('@paralleldrive/cuid2');
|
|
26
26
|
require('node:os');
|
|
27
|
-
require('./package-
|
|
27
|
+
require('./package-iuLlSiSF.cjs');
|
|
28
28
|
require('node:readline');
|
|
29
29
|
require('node:child_process');
|
|
30
30
|
require('cross-spawn');
|
|
31
31
|
require('./contentLogMetadata-ZSFk_NjQ.cjs');
|
|
32
32
|
require('./manager-HrEj442o.cjs');
|
|
33
33
|
require('@anthropic-ai/sandbox-runtime');
|
|
34
|
-
require('./rateLimitWindows-
|
|
34
|
+
require('./rateLimitWindows-DBfiuYeg.cjs');
|
|
35
35
|
require('./processTree-CMHWlVse.cjs');
|
|
36
36
|
require('axios');
|
|
37
|
-
require('./time-
|
|
37
|
+
require('./time-CaUlWSNJ.cjs');
|
|
38
38
|
require('./specialCommands-J3JFOq0J.cjs');
|
|
39
39
|
require('socket.io-client');
|
|
40
40
|
require('./backgroundTaskActivity-CBvUdj39.cjs');
|
|
@@ -157,6 +157,10 @@ function parseSpawnArgs(args) {
|
|
|
157
157
|
const value = args[++i];
|
|
158
158
|
if (value === void 0 || value.trim().length === 0) throw new Error("--model requires a value");
|
|
159
159
|
options.model = value;
|
|
160
|
+
} else if (arg === "--account") {
|
|
161
|
+
const value = args[++i];
|
|
162
|
+
if (value === void 0 || !/^[a-z0-9][a-z0-9-]{0,47}$/.test(value)) throw new Error('--account requires an account id (see `very-happy account list`) or "machine"');
|
|
163
|
+
options.account = value;
|
|
160
164
|
} else if (arg === "--fork") {
|
|
161
165
|
const value = args[++i];
|
|
162
166
|
if (value === void 0) throw new Error("--fork requires a session id");
|
|
@@ -192,8 +196,8 @@ ${chalk.bold("very-happy spawn")} - Spawn a remote session via the local daemon
|
|
|
192
196
|
${chalk.bold("Usage:")}
|
|
193
197
|
very-happy spawn --dir <path> [--prompt <text> | --prompt-file <file>]
|
|
194
198
|
[--spawned-by <name>] [--permission-mode <mode>]
|
|
195
|
-
[--agent <name>] [--model <id>] [--
|
|
196
|
-
[--project <id> | --no-project] [--json]
|
|
199
|
+
[--agent <name>] [--model <id>] [--account <id>]
|
|
200
|
+
[--env KEY=VALUE]... [--project <id> | --no-project] [--json]
|
|
197
201
|
very-happy spawn --fork <sessionId> [--prompt \u2026] [--permission-mode <mode>]
|
|
198
202
|
[--model <id>] [--spawned-by <name>] [--project <id>]
|
|
199
203
|
[--json]
|
|
@@ -220,6 +224,10 @@ ${chalk.bold("Options:")}
|
|
|
220
224
|
machine runs (claude: newest Opus; codex: newest
|
|
221
225
|
sol its Codex lists; gemini: newest pro), else the
|
|
222
226
|
machine default. 'default' = the machine default.
|
|
227
|
+
--account <id> Claude account on this machine (\`very-happy account
|
|
228
|
+
list\`); 'machine' = the machine's own login.
|
|
229
|
+
Default = the machine's default account, if set. A
|
|
230
|
+
missing or expired account fails the spawn.
|
|
223
231
|
--fork <sessionId> Fork an existing session of THIS machine (same as the
|
|
224
232
|
web's fork): copies its conversation and continues
|
|
225
233
|
it in a new session, in the same directory and with
|
|
@@ -382,7 +390,8 @@ async function handleSpawnCommand(args) {
|
|
|
382
390
|
// through, an old wrapper ignores it).
|
|
383
391
|
environmentVariables: spawnEnvironmentVariables(options.env, prompt !== void 0),
|
|
384
392
|
...resumeIds,
|
|
385
|
-
...forkSource ? { parentSessionId: forkSource.parentSessionId } : {}
|
|
393
|
+
...forkSource ? { parentSessionId: forkSource.parentSessionId } : {},
|
|
394
|
+
...options.account ? { agentProfileId: options.account === "machine" ? null : options.account } : {}
|
|
386
395
|
});
|
|
387
396
|
if (result?.error || !result?.success || !result?.sessionId) {
|
|
388
397
|
const message = result?.error || "Daemon returned no session ID";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { I as getAgentCodeDefaults, J as isLatestModelMode, K as resolveLatestModel, L as LATEST_MODEL_MODE, M as EFFORT_INTENT_AUTO, N as normalizeAgentKey } from './index-DYD3GM1m.mjs';
|
|
2
2
|
|
|
3
3
|
function chooseProject(opts) {
|
|
4
4
|
if (opts.project) return { kind: "explicit", projectId: opts.project };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { spawn } from 'cross-spawn';
|
|
2
2
|
import { join } from 'node:path';
|
|
3
3
|
import { p as projectPath } from './projectPath-BTBIMB57.mjs';
|
|
4
|
-
import { l as logger } from './logger-
|
|
4
|
+
import { l as logger } from './logger-Fd_rNvgd.mjs';
|
|
5
5
|
import { existsSync } from 'node:fs';
|
|
6
6
|
|
|
7
7
|
let cachedRuntime = null;
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
var spawn = require('cross-spawn');
|
|
4
4
|
var path = require('node:path');
|
|
5
5
|
var projectPath = require('./projectPath-C3ioB4Bu.cjs');
|
|
6
|
-
var logger = require('./logger-
|
|
6
|
+
var logger = require('./logger-8su64lqR.cjs');
|
|
7
7
|
var node_fs = require('node:fs');
|
|
8
8
|
|
|
9
9
|
let cachedRuntime = null;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var logger = require('./logger-
|
|
4
|
-
var persistence = require('./persistence-
|
|
5
|
-
var api = require('./api-
|
|
3
|
+
var logger = require('./logger-8su64lqR.cjs');
|
|
4
|
+
var persistence = require('./persistence-B4ttN-fR.cjs');
|
|
5
|
+
var api = require('./api-hMDsC6Wg.cjs');
|
|
6
6
|
|
|
7
7
|
const PRESENCE_SETTLE_MS = 6e3;
|
|
8
8
|
async function commitHibernation(deps) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { l as logger } from './logger-
|
|
2
|
-
import { e as evaluateWrapperIdle, j as isQuiescent, k as HIBERNATION_UNSUPPORTED_BACKOFF_MS } from './persistence-
|
|
3
|
-
import { c as connectionState } from './api-
|
|
1
|
+
import { l as logger } from './logger-Fd_rNvgd.mjs';
|
|
2
|
+
import { e as evaluateWrapperIdle, j as isQuiescent, k as HIBERNATION_UNSUPPORTED_BACKOFF_MS } from './persistence-DWcHe035.mjs';
|
|
3
|
+
import { c as connectionState } from './api-_LeBScjg.mjs';
|
|
4
4
|
|
|
5
5
|
const PRESENCE_SETTLE_MS = 6e3;
|
|
6
6
|
async function commitHibernation(deps) {
|
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
import { readFileSync, existsSync, mkdirSync, chmodSync, writeFileSync, renameSync, rmSync } from 'node:fs';
|
|
2
|
+
import { homedir } from 'node:os';
|
|
3
|
+
import { join, dirname } from 'node:path';
|
|
4
|
+
|
|
5
|
+
function providersPath(happyHomeDir) {
|
|
6
|
+
return join(happyHomeDir, "providers.json");
|
|
7
|
+
}
|
|
8
|
+
function sessionProvidersPath(happyHomeDir) {
|
|
9
|
+
return join(happyHomeDir, "session-providers.json");
|
|
10
|
+
}
|
|
11
|
+
function parseProvidersFile(raw) {
|
|
12
|
+
const profiles = {};
|
|
13
|
+
const src = raw && typeof raw === "object" ? raw.profiles : void 0;
|
|
14
|
+
if (src && typeof src === "object") {
|
|
15
|
+
for (const [id, p] of Object.entries(src)) {
|
|
16
|
+
if (!p || typeof p !== "object") continue;
|
|
17
|
+
const { name, baseUrl, apiKeyFile, models } = p;
|
|
18
|
+
if (typeof baseUrl !== "string" || !/^https?:\/\//.test(baseUrl) || typeof apiKeyFile !== "string" || !apiKeyFile) continue;
|
|
19
|
+
const ids = [];
|
|
20
|
+
const contextWindows = {};
|
|
21
|
+
for (const m of Array.isArray(models) ? models : []) {
|
|
22
|
+
if (typeof m === "string") ids.push(m);
|
|
23
|
+
else if (m && typeof m === "object" && typeof m.id === "string") {
|
|
24
|
+
const { id: modelId, contextWindow } = m;
|
|
25
|
+
ids.push(modelId);
|
|
26
|
+
if (typeof contextWindow === "number" && Number.isInteger(contextWindow) && contextWindow > 0) contextWindows[modelId] = contextWindow;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
profiles[id] = {
|
|
30
|
+
...typeof name === "string" ? { name } : {},
|
|
31
|
+
baseUrl: baseUrl.replace(/\/+$/, ""),
|
|
32
|
+
apiKeyFile,
|
|
33
|
+
...Array.isArray(models) ? { models: ids } : {},
|
|
34
|
+
...Object.keys(contextWindows).length > 0 ? { contextWindows } : {}
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return { profiles };
|
|
39
|
+
}
|
|
40
|
+
function parseSessionProvidersFile(raw) {
|
|
41
|
+
const out = {};
|
|
42
|
+
if (!raw || typeof raw !== "object") return out;
|
|
43
|
+
for (const [sessionId, b] of Object.entries(raw)) {
|
|
44
|
+
if (!b || typeof b !== "object") continue;
|
|
45
|
+
const { profile, model } = b;
|
|
46
|
+
if (typeof profile === "string" && profile && typeof model === "string" && model) out[sessionId] = { profile, model };
|
|
47
|
+
}
|
|
48
|
+
return out;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
const SPAWN_ACCOUNT_ENV = "VH_AGENT_PROFILE_ID";
|
|
52
|
+
const SUBSCRIPTION_TOKEN_TTL_MS = 365 * 24 * 60 * 60 * 1e3;
|
|
53
|
+
const ACCOUNT_ID_PATTERN = /^[a-z0-9][a-z0-9-]{0,47}$/;
|
|
54
|
+
function accountsPath(home) {
|
|
55
|
+
return join(home, "accounts.json");
|
|
56
|
+
}
|
|
57
|
+
function accountSecretPath(home, id) {
|
|
58
|
+
if (!ACCOUNT_ID_PATTERN.test(id)) throw new Error(`invalid account id "${id}"`);
|
|
59
|
+
return join(home, "accounts", id, "secret");
|
|
60
|
+
}
|
|
61
|
+
function sessionAccountsPath(home) {
|
|
62
|
+
return join(home, "session-accounts.json");
|
|
63
|
+
}
|
|
64
|
+
function expandHome(path, home = homedir()) {
|
|
65
|
+
return path === "~" ? home : path.startsWith("~/") ? join(home, path.slice(2)) : path;
|
|
66
|
+
}
|
|
67
|
+
function readJson(path) {
|
|
68
|
+
if (!existsSync(path)) return void 0;
|
|
69
|
+
try {
|
|
70
|
+
return JSON.parse(readFileSync(path, "utf8"));
|
|
71
|
+
} catch {
|
|
72
|
+
return void 0;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
function writeJson0600(path, value) {
|
|
76
|
+
mkdirSync(dirname(path), { recursive: true });
|
|
77
|
+
const tmp = `${path}.${process.pid}.${Date.now()}.tmp`;
|
|
78
|
+
writeFileSync(tmp, JSON.stringify(value, null, 2) + "\n", { mode: 384 });
|
|
79
|
+
chmodSync(tmp, 384);
|
|
80
|
+
renameSync(tmp, path);
|
|
81
|
+
}
|
|
82
|
+
function parseKey(raw) {
|
|
83
|
+
if (!raw || typeof raw !== "object") return void 0;
|
|
84
|
+
const k = raw;
|
|
85
|
+
if (k.source === "file" && typeof k.path === "string" && k.path) return { source: "file", path: k.path };
|
|
86
|
+
if (k.source === "env" && typeof k.name === "string" && /^[A-Za-z_][A-Za-z0-9_]*$/.test(k.name)) return { source: "env", name: k.name };
|
|
87
|
+
if (k.source === "stored") return { source: "stored" };
|
|
88
|
+
return void 0;
|
|
89
|
+
}
|
|
90
|
+
function parseAccountsFile(raw) {
|
|
91
|
+
const out = { version: 2, accounts: {}, defaults: {} };
|
|
92
|
+
if (!raw || typeof raw !== "object") return out;
|
|
93
|
+
const src = raw.accounts;
|
|
94
|
+
if (src && typeof src === "object") {
|
|
95
|
+
for (const [id, value] of Object.entries(src)) {
|
|
96
|
+
if (!ACCOUNT_ID_PATTERN.test(id) || !value || typeof value !== "object") continue;
|
|
97
|
+
const a = value;
|
|
98
|
+
if (a.agent !== "claude" || a.kind !== "claude-subscription" && a.kind !== "claude-api") continue;
|
|
99
|
+
const label = typeof a.label === "string" && a.label.trim() ? a.label.trim() : id;
|
|
100
|
+
const rec = { label, agent: "claude", kind: a.kind, createdAt: typeof a.createdAt === "number" ? a.createdAt : 0 };
|
|
101
|
+
if (a.kind === "claude-api") {
|
|
102
|
+
if (typeof a.baseUrl !== "string" || !/^https?:\/\//.test(a.baseUrl)) continue;
|
|
103
|
+
const key = parseKey(a.key);
|
|
104
|
+
if (!key) continue;
|
|
105
|
+
rec.baseUrl = a.baseUrl.replace(/\/+$/, "");
|
|
106
|
+
rec.key = key;
|
|
107
|
+
if (Array.isArray(a.models)) rec.models = a.models.filter((m) => typeof m === "string" && m.length > 0);
|
|
108
|
+
if (a.contextWindows && typeof a.contextWindows === "object") {
|
|
109
|
+
const cw = {};
|
|
110
|
+
for (const [m, n] of Object.entries(a.contextWindows)) {
|
|
111
|
+
if (typeof n === "number" && Number.isInteger(n) && n > 0) cw[m] = n;
|
|
112
|
+
}
|
|
113
|
+
if (Object.keys(cw).length > 0) rec.contextWindows = cw;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
if (typeof a.expiresAt === "number") rec.expiresAt = a.expiresAt;
|
|
117
|
+
if (a.check && typeof a.check === "object") {
|
|
118
|
+
const c = a.check;
|
|
119
|
+
if (typeof c.status === "string" && typeof c.at === "number") {
|
|
120
|
+
rec.check = { status: c.status, at: c.at, ...typeof c.detail === "string" ? { detail: c.detail } : {} };
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
out.accounts[id] = rec;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
const defaults = raw.defaults;
|
|
127
|
+
if (defaults && typeof defaults === "object") {
|
|
128
|
+
for (const [agent, id] of Object.entries(defaults)) {
|
|
129
|
+
if (typeof id === "string" && id) out.defaults[agent] = id;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
return out;
|
|
133
|
+
}
|
|
134
|
+
function legacyAccountsFromProviders(raw) {
|
|
135
|
+
const out = {};
|
|
136
|
+
for (const [id, p] of Object.entries(parseProvidersFile(raw).profiles)) {
|
|
137
|
+
if (!ACCOUNT_ID_PATTERN.test(id)) continue;
|
|
138
|
+
out[id] = {
|
|
139
|
+
label: p.name ?? id,
|
|
140
|
+
agent: "claude",
|
|
141
|
+
kind: "claude-api",
|
|
142
|
+
createdAt: 0,
|
|
143
|
+
baseUrl: p.baseUrl,
|
|
144
|
+
key: { source: "file", path: p.apiKeyFile },
|
|
145
|
+
...p.models ? { models: p.models } : {},
|
|
146
|
+
...p.contextWindows ? { contextWindows: p.contextWindows } : {},
|
|
147
|
+
legacy: true
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
return out;
|
|
151
|
+
}
|
|
152
|
+
function mergeAccounts(v2, legacy) {
|
|
153
|
+
return { ...v2, accounts: { ...legacy, ...v2.accounts } };
|
|
154
|
+
}
|
|
155
|
+
function readAccountsFileV2(home) {
|
|
156
|
+
return parseAccountsFile(readJson(accountsPath(home)));
|
|
157
|
+
}
|
|
158
|
+
function readAccounts(home) {
|
|
159
|
+
return mergeAccounts(readAccountsFileV2(home), legacyAccountsFromProviders(readJson(providersPath(home))));
|
|
160
|
+
}
|
|
161
|
+
function writeAccountsFile(home, file) {
|
|
162
|
+
const accounts = {};
|
|
163
|
+
for (const [id, a] of Object.entries(file.accounts)) if (!a.legacy) accounts[id] = a;
|
|
164
|
+
writeJson0600(accountsPath(home), { version: 2, accounts, defaults: file.defaults });
|
|
165
|
+
}
|
|
166
|
+
function mergeSessionBindings(v2Raw, v1Raw) {
|
|
167
|
+
const out = {};
|
|
168
|
+
for (const [sessionId, b] of Object.entries(parseSessionProvidersFile(v1Raw))) out[sessionId] = { account: b.profile, model: b.model };
|
|
169
|
+
if (v2Raw && typeof v2Raw === "object") {
|
|
170
|
+
for (const [sessionId, b] of Object.entries(v2Raw)) {
|
|
171
|
+
if (!b || typeof b !== "object") continue;
|
|
172
|
+
const { account, model } = b;
|
|
173
|
+
if (account !== null && (typeof account !== "string" || !account)) continue;
|
|
174
|
+
out[sessionId] = { account, ...typeof model === "string" && model ? { model } : {} };
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
return out;
|
|
178
|
+
}
|
|
179
|
+
function readSessionBindings(home) {
|
|
180
|
+
return mergeSessionBindings(readJson(sessionAccountsPath(home)), readJson(sessionProvidersPath(home)));
|
|
181
|
+
}
|
|
182
|
+
function readSessionBindingV2(home, sessionId) {
|
|
183
|
+
const raw = readJson(sessionAccountsPath(home));
|
|
184
|
+
const entry = raw && typeof raw === "object" ? raw[sessionId] : void 0;
|
|
185
|
+
return entry && typeof entry === "object" ? entry : void 0;
|
|
186
|
+
}
|
|
187
|
+
function writeSessionBinding(home, sessionId, binding) {
|
|
188
|
+
const raw = readJson(sessionAccountsPath(home));
|
|
189
|
+
const current = raw && typeof raw === "object" ? { ...raw } : {};
|
|
190
|
+
if (binding === void 0) delete current[sessionId];
|
|
191
|
+
else current[sessionId] = binding;
|
|
192
|
+
writeJson0600(sessionAccountsPath(home), current);
|
|
193
|
+
}
|
|
194
|
+
function sessionsBoundTo(bindings, accountId) {
|
|
195
|
+
return Object.entries(bindings).filter(([, b]) => b.account === accountId).map(([id]) => id);
|
|
196
|
+
}
|
|
197
|
+
function writeAccountSecret(home, id, secret) {
|
|
198
|
+
const path = accountSecretPath(home, id);
|
|
199
|
+
mkdirSync(dirname(path), { recursive: true, mode: 448 });
|
|
200
|
+
chmodSync(dirname(path), 448);
|
|
201
|
+
const tmp = `${path}.${process.pid}.tmp`;
|
|
202
|
+
writeFileSync(tmp, secret.trim() + "\n", { mode: 384 });
|
|
203
|
+
chmodSync(tmp, 384);
|
|
204
|
+
renameSync(tmp, path);
|
|
205
|
+
}
|
|
206
|
+
function removeAccountSecret(home, id) {
|
|
207
|
+
rmSync(dirname(accountSecretPath(home, id)), { recursive: true, force: true });
|
|
208
|
+
}
|
|
209
|
+
function newAccountId(label, kind, taken) {
|
|
210
|
+
const used = new Set(taken);
|
|
211
|
+
const ascii = /^[\x20-\x7e]*$/.test(label);
|
|
212
|
+
const slug = ascii ? label.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "").slice(0, 40) : "";
|
|
213
|
+
const base = slug && /^[a-z0-9]/.test(slug) ? slug : kind === "claude-subscription" ? "claude-sub" : "claude-api";
|
|
214
|
+
if (!used.has(base)) return base;
|
|
215
|
+
for (let n = 2; ; n++) if (!used.has(`${base}-${n}`)) return `${base}-${n}`;
|
|
216
|
+
}
|
|
217
|
+
function secretPresent(home, id, a, probe) {
|
|
218
|
+
if (a.kind === "claude-subscription" || a.key?.source === "stored") return probe.fileReadable(accountSecretPath(home, id));
|
|
219
|
+
if (a.key?.source === "file") return probe.fileReadable(expandHome(a.key.path));
|
|
220
|
+
if (a.key?.source === "env") return !!probe.env[a.key.name]?.trim();
|
|
221
|
+
return false;
|
|
222
|
+
}
|
|
223
|
+
function accountStatus(home, id, a, probe, now) {
|
|
224
|
+
if (!secretPresent(home, id, a, probe)) return { status: "missing-secret" };
|
|
225
|
+
if (a.expiresAt !== void 0 && a.expiresAt <= now) return { status: "expired" };
|
|
226
|
+
if (a.check) return { status: a.check.status, ...a.check.detail ? { detail: a.check.detail } : {} };
|
|
227
|
+
return { status: "unverified" };
|
|
228
|
+
}
|
|
229
|
+
function summarizeAccount(home, id, a, probe, now) {
|
|
230
|
+
const { status, detail } = accountStatus(home, id, a, probe, now);
|
|
231
|
+
const keySource = a.kind === "claude-subscription" ? "stored" : a.key?.source;
|
|
232
|
+
const keyRef = a.key?.source === "file" ? a.key.path : a.key?.source === "env" ? a.key.name : void 0;
|
|
233
|
+
return {
|
|
234
|
+
id,
|
|
235
|
+
label: a.label,
|
|
236
|
+
agent: a.agent,
|
|
237
|
+
kind: a.kind,
|
|
238
|
+
status,
|
|
239
|
+
...detail ? { statusDetail: detail } : {},
|
|
240
|
+
...a.check ? { checkedAt: a.check.at } : {},
|
|
241
|
+
...a.createdAt ? { createdAt: a.createdAt } : {},
|
|
242
|
+
...a.expiresAt !== void 0 ? { expiresAt: a.expiresAt } : {},
|
|
243
|
+
...a.baseUrl ? { baseUrl: a.baseUrl } : {},
|
|
244
|
+
...a.models ? { models: a.models } : {},
|
|
245
|
+
...keySource ? { keySource } : {},
|
|
246
|
+
...keyRef ? { keyRef } : {},
|
|
247
|
+
...a.legacy ? { legacy: true } : {}
|
|
248
|
+
};
|
|
249
|
+
}
|
|
250
|
+
function defaultSecretProbe(env = process.env) {
|
|
251
|
+
return {
|
|
252
|
+
fileReadable: (path) => {
|
|
253
|
+
try {
|
|
254
|
+
return readFileSync(path, "utf8").trim().length > 0;
|
|
255
|
+
} catch {
|
|
256
|
+
return false;
|
|
257
|
+
}
|
|
258
|
+
},
|
|
259
|
+
env
|
|
260
|
+
};
|
|
261
|
+
}
|
|
262
|
+
function buildAgentProfilesState(home, file, probe, now, daemonPid) {
|
|
263
|
+
const accounts = Object.entries(file.accounts).map(([id, a]) => summarizeAccount(home, id, a, probe, now)).sort((x, y) => (x.createdAt ?? 0) - (y.createdAt ?? 0) || x.id.localeCompare(y.id));
|
|
264
|
+
const defaults = {};
|
|
265
|
+
for (const [agent, id] of Object.entries(file.defaults)) if (file.accounts[id]) defaults[agent] = id;
|
|
266
|
+
return { daemonPid, updatedAt: now, accounts, defaults };
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
export { SPAWN_ACCOUNT_ENV as S, readAccounts as a, accountSecretPath as b, readAccountsFileV2 as c, defaultSecretProbe as d, expandHome as e, writeAccountsFile as f, accountsPath as g, buildAgentProfilesState as h, writeAccountSecret as i, sessionsBoundTo as j, removeAccountSecret as k, SUBSCRIPTION_TOKEN_TTL_MS as l, readSessionBindingV2 as m, newAccountId as n, providersPath as p, readSessionBindings as r, summarizeAccount as s, writeSessionBinding as w };
|