very-happy-cli 0.2.178 → 0.2.180
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-DCQXHRzT.mjs → AcpBackend-B8Zi30Zh.mjs} +135 -16
- package/dist/{AcpBackend-CDkAQXYf.cjs → AcpBackend-DfRDtMcG.cjs} +135 -16
- package/dist/{AcpSessionManager-DckmUZza.cjs → AcpSessionManager-CASKOnOj.cjs} +38 -4
- package/dist/{AcpSessionManager-BXrQcqwC.mjs → AcpSessionManager-i8Rab0xT.mjs} +38 -4
- package/dist/{BasePermissionHandler-BVlrEhIi.mjs → BasePermissionHandler-26fKbRCm.mjs} +5 -2
- package/dist/{BasePermissionHandler-DyLmKKtO.cjs → BasePermissionHandler-BlM_tfej.cjs} +5 -2
- package/dist/acpSessionResume-B9l54P-X.mjs +67 -0
- package/dist/acpSessionResume-CR5pmgVo.cjs +74 -0
- package/dist/{agentHome-CEp9RMyK.cjs → agentHome-C7Sb7-Tz.cjs} +4 -4
- package/dist/{agentHome-C1xi37as.mjs → agentHome-CmGy0NWv.mjs} +4 -4
- package/dist/{api-JANhFdZV.cjs → api-DM7b1OKj.cjs} +38 -262
- package/dist/{api-Dib0dmqC.mjs → api-Hov8p7CA.mjs} +32 -256
- package/dist/{apiMachine-DNTJidYH.mjs → apiMachine-CwGEhQDT.mjs} +62 -15
- package/dist/{apiMachine-QhK-sKcr.cjs → apiMachine-DkGRj-Ai.cjs} +64 -17
- package/dist/{attachmentContent-bpQTBJ0y.cjs → attachmentContent-CEm13_gF.cjs} +4 -4
- package/dist/{attachmentContent-DkkdpSSJ.mjs → attachmentContent-CIn4iPEk.mjs} +2 -2
- package/dist/{auth-BRjd2esb.mjs → auth-BG1DY0gj.mjs} +5 -5
- package/dist/{auth-DgIV0Cvt.cjs → auth-CBXnm-Mj.cjs} +5 -5
- package/dist/{auth-omWDtgR8.cjs → auth-Dawj7pP5.cjs} +8 -8
- package/dist/{auth-DNct7VUi.mjs → auth-rggxMpEE.mjs} +8 -8
- package/dist/{auto-DKGFOJBo.mjs → auto-CXXLXGeL.mjs} +19 -18
- package/dist/{auto-CI16FZmX.cjs → auto-CbYOfoPS.cjs} +19 -18
- package/dist/{backgroundTaskActivity-BVwJBl02.mjs → backgroundTaskActivity-8PdPxrvy.mjs} +1 -1
- package/dist/{bootstrap-DCQ87Aan.cjs → bootstrap-DoA7okld.cjs} +2 -2
- package/dist/{bootstrap-BUagGC_-.mjs → bootstrap-Dt5I1SOl.mjs} +2 -2
- package/dist/{browser-Dj_DYQEh.mjs → browser-DUNetFT4.mjs} +1 -1
- package/dist/{browser-CSKhc0Bl.cjs → browser-DZ6qRtfH.cjs} +1 -1
- package/dist/{claudeCliPath-U4HHmV4r.cjs → claudeCliPath-GaP3UUz1.cjs} +1 -1
- package/dist/{claudeLocal-CdIVnOZp.cjs → claudeLocal--DNyMOSv.cjs} +8 -7
- package/dist/{claudeLocal-CCCvAeMd.mjs → claudeLocal-OHWQigCl.mjs} +6 -5
- package/dist/{claudeLocalLauncher-BmrpaRYJ.mjs → claudeLocalLauncher-BStvfa7M.mjs} +11 -10
- package/dist/{claudeLocalLauncher-21-xh5gc.cjs → claudeLocalLauncher-BhvPbcyH.cjs} +13 -12
- package/dist/{claudeSessionFork-kYCP1IJB.cjs → claudeSessionFork-Be16vzGc.cjs} +1 -1
- package/dist/{claudeSessionFork-DvxMKAmY.mjs → claudeSessionFork-GAVWhiKG.mjs} +1 -1
- package/dist/{client-C4zKGjiJ.cjs → client-BWjaHKtj.cjs} +2 -2
- package/dist/client-Ca5Pcgy_.mjs +71 -0
- package/dist/{client-CnlkkrZO.mjs → client-CnB7kRCT.mjs} +2 -2
- package/dist/{client-BTX9hsbr.mjs → client-D4uPb1uu.mjs} +3 -3
- package/dist/client-DJplzPjD.cjs +76 -0
- package/dist/{client-Dnza1hgN.cjs → client-D_loZ9IK.cjs} +3 -3
- package/dist/codex/happyMcpStdioBridge.cjs +24 -15
- package/dist/codex/happyMcpStdioBridge.mjs +25 -16
- package/dist/{codexAppServerClient-DvkpQgyv.mjs → codexAppServerClient-CO4G6OS4.mjs} +3 -3
- package/dist/{codexAppServerClient-CRlBWGn3.cjs → codexAppServerClient-PE-12AsW.cjs} +3 -3
- package/dist/{codexCommand-DzxIWXIT.cjs → codexCommand-BNoD1t1C.cjs} +127 -116
- package/dist/{codexCommand-BxjogBzU.mjs → codexCommand-B_xUH79E.mjs} +77 -66
- package/dist/{codexTermination-C28FzlLb.cjs → codexTermination-BmBbizFK.cjs} +7 -2
- package/dist/{codexTermination-ySDNMEhd.mjs → codexTermination-Dx48ma6e.mjs} +7 -2
- package/dist/{config-BFB5uJ4t.cjs → config-CtwEUxUP.cjs} +26 -26
- package/dist/{config-DwfEpFr3.mjs → config-DSu0Blos.mjs} +3 -3
- package/dist/{configuration-4TGMrjul.cjs → configuration-CYO-kPOS.cjs} +1 -1
- package/dist/{configuration-DVrb61aY.mjs → configuration-PxzEJumr.mjs} +1 -1
- package/dist/{connect-C7FPY0PI.mjs → connect-BQrg3TB6.mjs} +15 -15
- package/dist/{connect-QH2VJGBG.cjs → connect-Dq7wndzR.cjs} +28 -28
- package/dist/{context-JoKu0V54.cjs → context-6TP-iz_c.cjs} +1 -1
- package/dist/{context-B3XPVJlj.mjs → context-CJGRRGWW.mjs} +1 -1
- package/dist/{controlClient-BTaZlbC6.cjs → controlClient-Bqv5v5OM.cjs} +3 -3
- package/dist/{controlClient-BYKyGyxj.mjs → controlClient-DoeYovwP.mjs} +4 -4
- package/dist/{createSessionMetadata-8Fuj2-IV.mjs → createSessionMetadata-DDIChCx8.mjs} +2 -2
- package/dist/{createSessionMetadata-B2NynaWZ.cjs → createSessionMetadata-xz767pcG.cjs} +3 -3
- package/dist/{defaultPermissionMode-BEWCqJU-.cjs → defaultPermissionMode-PkZGsQDk.cjs} +2 -2
- package/dist/{defaultPermissionMode-B8kJG9uI.mjs → defaultPermissionMode-i5KzdK09.mjs} +2 -2
- package/dist/{detectCLI-DR9ZaN6B.cjs → detectCLI-BuYR_Qxe.cjs} +4 -4
- package/dist/{deterministicJson-C5ZwZ7hu.mjs → deterministicJson-CTEJDqtS.mjs} +217 -12
- package/dist/{deterministicJson-BjNQsAjO.cjs → deterministicJson-xqA6DaOm.cjs} +222 -16
- package/dist/{doctor-BshRnjLi.cjs → doctor-BrgSlfXn.cjs} +9 -9
- package/dist/{doctor-0BiGwJXk.mjs → doctor-IctjVh9T.mjs} +8 -8
- package/dist/{doctorReadiness-BCZGcN0a.cjs → doctorReadiness-Dl6yRQCy.cjs} +1 -1
- package/dist/{downloadTarget-BN5vZt3K.cjs → downloadTarget-CEb9che-.cjs} +6 -6
- package/dist/{downloadTarget-DJPwAZlu.mjs → downloadTarget-jbOz1egC.mjs} +6 -6
- package/dist/{ensureDaemonRunning-C5QfToCe.cjs → ensureDaemonRunning-D-HyjGIX.cjs} +6 -6
- package/dist/{ensureDaemonRunning-CSmb_mqt.mjs → ensureDaemonRunning-b1e8LCSM.mjs} +5 -5
- package/dist/{handleResumeCommand-BwnUZmbo.cjs → handleResumeCommand-BvWVuRwH.cjs} +23 -7
- package/dist/{handleResumeCommand-CgjpsdDe.mjs → handleResumeCommand-DpaZvm2c.mjs} +22 -6
- package/dist/{index-piJPsTsm.cjs → index-B2p2Mut7.cjs} +259 -53
- package/dist/{index-BehVbAsA.mjs → index-BUNnpGFF.mjs} +256 -50
- package/dist/{index-Bvldtdny.mjs → index-Bsvbgh9e.mjs} +4 -4
- package/dist/{index-BYOZ_8WZ.cjs → index-C64Ufj4D.cjs} +4 -4
- package/dist/{index-Clqlu17M.mjs → index-C6Vn5Eac.mjs} +155 -34
- package/dist/index-CMf5VbzG.mjs +18 -0
- package/dist/index-DmTlDRSL.cjs +24 -0
- package/dist/{index-_l1Sdmbi.cjs → index-Dv0Q48P3.cjs} +156 -33
- package/dist/{index-BRClDe07.cjs → index-F2UejqYs.cjs} +3 -3
- package/dist/{index-BYgfern_.mjs → index-wCbtF4BK.mjs} +3 -3
- package/dist/index.cjs +2 -2
- package/dist/index.mjs +2 -2
- package/dist/{install-BdvKiOQw.mjs → install-BX3lv3NO.mjs} +1 -1
- package/dist/{install-Cf6AFSWC.cjs → install-BXvf2E3o.cjs} +1 -1
- package/dist/{install-TO4taKW7.cjs → install-C0ANcEAW.cjs} +7 -7
- package/dist/{install-fYWHrPcC.mjs → install-CdzSV7qO.mjs} +3 -3
- package/dist/{installPiTools-BKnXjrVu.cjs → installPiTools-CL_axh_6.cjs} +1 -1
- package/dist/{installTerminalHooks-BQZbvxsZ.cjs → installTerminalHooks-BETLKAtd.cjs} +3 -3
- package/dist/lib.cjs +14 -14
- package/dist/lib.d.cts +239 -2
- package/dist/lib.d.mts +239 -2
- package/dist/lib.mjs +14 -14
- package/dist/{lidState-BeOwj6eW.cjs → lidState-DWGnm2H4.cjs} +1 -1
- package/dist/{lidState-DNMlIhX0.mjs → lidState-bBrmaQd2.mjs} +1 -1
- package/dist/{localHappyAgentAuth-Br-mgogg.cjs → localHappyAgentAuth-DZHQnIW9.cjs} +1 -1
- package/dist/{localHappyAgentAuth-BezKSFDi.mjs → localHappyAgentAuth-Dn1jYDpt.mjs} +1 -1
- package/dist/{logger--vAVtXB_.mjs → logger-BUngm5Xg.mjs} +2 -2
- package/dist/{logger-DXTWlPzP.cjs → logger-CphW5nUE.cjs} +2 -2
- package/dist/machineMetadata-BQm9YTcI.cjs +79 -0
- package/dist/machineMetadata-BXN_bKU3.mjs +68 -0
- package/dist/{main-DoMFJ2Cl.cjs → main-B2UV51nK.cjs} +112 -132
- package/dist/{main-CshDb5-1.mjs → main-DGkdYfEq.mjs} +106 -126
- package/dist/{mcp-pNc1EbQf.cjs → mcp-BFvAEIRz.cjs} +15 -15
- package/dist/{mcp-DKT_lrvQ.mjs → mcp-CbTtbs0f.mjs} +15 -15
- package/dist/{mirrorProtocol-6IFGPpjJ.mjs → mirrorProtocol-BR4luBC0.mjs} +148 -7
- package/dist/{mirrorProtocol-qKflWTX_.cjs → mirrorProtocol-HKPivs5o.cjs} +150 -4
- package/dist/{package-B7B03ejW.mjs → package-7Ld1YMhh.mjs} +8 -7
- package/dist/{package-DY4zTbKS.cjs → package-KhLqBDX9.cjs} +8 -7
- package/dist/panels-C7IVqpJk.mjs +137 -0
- package/dist/panels-Njf6GelF.cjs +142 -0
- package/dist/{peerTools-3R9RUARX.mjs → peerTools-BOlDRyhi.mjs} +60 -10
- package/dist/{peerTools-iy3_6Yc5.cjs → peerTools-DQNlrcqM.cjs} +60 -9
- package/dist/{persistence-BfX72dne.cjs → persistence-9BMYspxG.cjs} +2 -2
- package/dist/{persistence-DTk4sNpd.mjs → persistence-BFUOHW5h.mjs} +3 -3
- package/dist/{piRunnerArgs-CRQVR9o-.cjs → piRunnerArgs-DGaq6VYM.cjs} +8 -2
- package/dist/{piRunnerArgs-AT8QJY7x.mjs → piRunnerArgs-H2pgpA5z.mjs} +7 -1
- package/dist/{piRuntime-BHRT5MKO.cjs → piRuntime-CT5xv_3h.cjs} +2 -2
- package/dist/{piRuntime-E44qTVQ4.mjs → piRuntime-CdN0JAsa.mjs} +2 -2
- package/dist/{piTerminal-hI4WFdWm.cjs → piTerminal-0FBtXTHK.cjs} +18 -18
- package/dist/{piTerminal-De8nbciM.mjs → piTerminal-C4m9YXAV.mjs} +18 -18
- package/dist/processTreeSnapshot-CuLJDNC-.mjs +101 -0
- package/dist/processTreeSnapshot-mDbnuojn.cjs +105 -0
- package/dist/projectPath-C3ioB4Bu.cjs +13 -0
- package/dist/prompt-BOouDaTM.mjs +99 -0
- package/dist/prompt-lgF9IE82.cjs +105 -0
- package/dist/{attachmentLimits-UyFn8fkQ.mjs → pushNotifications-DCiBEVeC.mjs} +307 -3
- package/dist/{attachmentLimits-SqeAHrVC.cjs → pushNotifications-DI92havG.cjs} +308 -2
- package/dist/{index-DFPT4HOO.cjs → query-BETKBrnz.cjs} +25 -5
- package/dist/{index-CEjJnq05.mjs → query-ywZbQUzR.mjs} +26 -3
- package/dist/{rateLimitWindows-XrJiiBpU.mjs → rateLimitWindows-BkfuUB1a.mjs} +1 -1
- package/dist/{rateLimitWindows-Czb7_7cK.cjs → rateLimitWindows-YRIYVdo4.cjs} +1 -1
- package/dist/{registerCommonHandlers-C0_fyBQ0.cjs → registerCommonHandlers-C7a_dUWs.cjs} +30 -30
- package/dist/{registerCommonHandlers-CvIedVRf.mjs → registerCommonHandlers-CTkCvjxt.mjs} +2 -2
- package/dist/{registerKillSessionHandler-DYl7l4Ts.cjs → registerKillSessionHandler-CIsvBrVe.cjs} +6 -6
- package/dist/{registerKillSessionHandler-gwJ5lTf0.mjs → registerKillSessionHandler-CaqqRYq6.mjs} +6 -6
- package/dist/{remoteSessionClient-BRTIOX5b.cjs → remoteSessionClient-D843fkzL.cjs} +5 -5
- package/dist/{remoteSessionClient-DRb2Jr5s.mjs → remoteSessionClient-PP-mOKmw.mjs} +5 -5
- package/dist/{reportProgressTool-B9nCzbkL.cjs → reportProgressTool-14AXr959.cjs} +84 -2
- package/dist/{reportProgressTool-D5tEoXMW.mjs → reportProgressTool-ZOCNjWHr.mjs} +82 -3
- package/dist/{resources-JDPugcDq.cjs → resources-CvIlkzpP.cjs} +30 -0
- package/dist/{resources-BdFBQi8r.mjs → resources-y9jfyO-_.mjs} +30 -0
- package/dist/{run-CKe_WeLW.cjs → run-CAOCYYfT.cjs} +2806 -110
- package/dist/{run-BQ_FGaOL.mjs → run-Dajw2E5j.mjs} +2787 -91
- package/dist/{runClaude-zrrNcQC_.mjs → runClaude-C6oxWYbp.mjs} +49 -47
- package/dist/{runClaude-MHI5IKM-.cjs → runClaude-CRRKt-tm.cjs} +50 -48
- package/dist/{runClaudeDeps-RRw-Nusc.cjs → runClaudeDeps-B1ysqTvx.cjs} +310 -237
- package/dist/{runClaudeDeps-CVBCokOS.mjs → runClaudeDeps-BcZ68cX3.mjs} +297 -226
- package/dist/{runGemini-kipag2ag.mjs → runGemini-D7yKc4wD.mjs} +61 -55
- package/dist/{runGemini-D7Lg9yCr.cjs → runGemini-DtKFXqf-.cjs} +89 -83
- package/dist/{runOpenClaw-C_lRY3Do.mjs → runOpenClaw-C8ilyLP9.mjs} +19 -19
- package/dist/{runOpenClaw-DCcQ0L2N.cjs → runOpenClaw-Cq29mryb.cjs} +20 -20
- package/dist/{sandbox-BSyXFVFp.mjs → sandbox-CbCutma4.mjs} +4 -4
- package/dist/{sandbox-dMwPTmjm.cjs → sandbox-gIj-EuF4.cjs} +4 -4
- package/dist/{selfCheck-DkzDDUsE.cjs → selfCheck-BTGBVthv.cjs} +39 -38
- package/dist/selfCheck-Smt-5Xiq.mjs +85 -0
- package/dist/{send-dxC0miIA.cjs → send-CZf5lLw_.cjs} +8 -8
- package/dist/{send-C-k9nsd3.mjs → send-YZRMQvMJ.mjs} +9 -9
- package/dist/{server-DxoTYNlw.mjs → server-BqwXRzFZ.mjs} +4 -4
- package/dist/{server-B-W6P7Qr.cjs → server-CknFq6xG.cjs} +6 -6
- package/dist/sessionExitLifecycle-CzkLIgNZ.mjs +142 -0
- package/dist/sessionExitLifecycle-DFltxXU8.cjs +148 -0
- package/dist/{sessionLock-DWX6BbiU.cjs → sessionLock-DRZUcKHT.cjs} +38 -5
- package/dist/{sessionLock-DBdtZGOL.mjs → sessionLock-nBXdJxJm.mjs} +36 -5
- package/dist/{sessionOps-BAnr7n8t.cjs → sessionOps-BrGiU9-s.cjs} +10 -5
- package/dist/{sessionOps-BVoXe12O.mjs → sessionOps-C58iDeD5.mjs} +11 -6
- package/dist/{sessionScanner-BtxoeluY.mjs → sessionScanner-Bm57LEXe.mjs} +3 -3
- package/dist/{sessionScanner-CDOYsEUD.cjs → sessionScanner-CaO8bLaG.cjs} +3 -3
- package/dist/{sessions-C3sZJkzI.mjs → sessions-BXyBHo8n.mjs} +40 -18
- package/dist/{sessions-hAitoN-m.cjs → sessions-uzqPCc37.cjs} +39 -16
- package/dist/{setupOfflineReconnection-_eD4cuUT.mjs → setupOfflineReconnection-1Qlek3wl.mjs} +2 -2
- package/dist/{setupOfflineReconnection-C2EeYTFH.cjs → setupOfflineReconnection-DvvVX3TB.cjs} +2 -2
- package/dist/{spawn-Bc9v7pIf.cjs → spawn-DBkodJEO.cjs} +49 -18
- package/dist/{spawn-qNrB2CD_.mjs → spawn-vn93PhYL.mjs} +49 -18
- package/dist/spawnAgents-CgPMWexP.mjs +79 -0
- package/dist/{spawnAgents-BVEaz35W.cjs → spawnAgents-DLNMlhWJ.cjs} +37 -1
- package/dist/{spawnHappyCLI-C2stUioM.mjs → spawnHappyCLI-BjFZc_7V.mjs} +1 -1
- package/dist/{spawnHappyCLI-fzUagkKV.cjs → spawnHappyCLI-DnUZv0X2.cjs} +2 -2
- package/dist/{specialCommands-BJ-nqY4s.cjs → specialCommands-BRufxlqe.cjs} +3 -3
- package/dist/{specialCommands-C6W-rVyh.mjs → specialCommands-D3ND9bdg.mjs} +3 -3
- package/dist/{startFileWatcher-Bqlqjt93.cjs → startFileWatcher-D9cYzZOq.cjs} +1 -1
- package/dist/{startFileWatcher-CR09Snmz.mjs → startFileWatcher-DXJ7yB5v.mjs} +1 -1
- package/dist/startupSessionCreate-kdr3m1uX.cjs +26 -0
- package/dist/startupSessionCreate-uZ6BM0ty.mjs +24 -0
- package/dist/{streamRelay-CJoMk_d2.mjs → streamRelay-DnMCMMfV.mjs} +1 -1
- package/dist/{streamRelay-9kBPpbvU.cjs → streamRelay-Dy6amlzx.cjs} +1 -1
- package/dist/{sync-Dhmtk66S.cjs → sync-Bn-idAoy.cjs} +1 -1
- package/dist/{sync-DbW07iQS.mjs → sync-BvVhDO40.mjs} +1 -1
- package/dist/{systemPrompt-CQcuUmVp.mjs → systemPrompt-CIZcJuJF.mjs} +4 -3
- package/dist/{systemPrompt-3PYi3EUY.cjs → systemPrompt-DlyEk35T.cjs} +4 -3
- package/dist/{teams-DpxLcUU_.cjs → teams-BLeRpDxv.cjs} +8 -8
- package/dist/{teams-CwF4Z2fA.mjs → teams-DLY3B5yi.mjs} +8 -8
- package/dist/{time-A6zR3Iy6.cjs → time-Cjv0zxQO.cjs} +1 -1
- package/dist/{time-BuGWTVP6.mjs → time-D3ETL7Jb.mjs} +1 -1
- package/dist/{titleGenerator-D26gvNaS.cjs → titleGenerator-Cgp5ihFb.cjs} +10 -9
- package/dist/{titleGenerator-BGEzNWC9.mjs → titleGenerator-Uzbd4utr.mjs} +9 -8
- package/dist/{todo-DrZc76H5.mjs → todo-C9Ga-oEM.mjs} +6 -6
- package/dist/{todo-73g3NCIO.cjs → todo-pOMcEECE.cjs} +6 -6
- package/dist/{tools-CxJp4T1T.cjs → tools-BL7Byl_x.cjs} +1 -1
- package/dist/{tools-BtsrQnNS.mjs → tools-Cho7iIWf.mjs} +1 -1
- package/dist/{uninstall-DWNYvewQ.cjs → uninstall-CbayEVoV.cjs} +6 -6
- package/dist/{uninstall-DOb2mTwV.mjs → uninstall-CvZHVY9C.mjs} +3 -3
- package/dist/webPanels-B2_C2-3g.mjs +49 -0
- package/dist/webPanels-FCgFKvVe.cjs +53 -0
- package/package.json +8 -7
- package/dist/machineMetadata-B1H9gNbN.mjs +0 -39
- package/dist/machineMetadata-DcUupMje.cjs +0 -42
- package/dist/messageBuffer-BWlGgR3A.mjs +0 -71
- package/dist/messageBuffer-fJMH6uY8.cjs +0 -73
- package/dist/projectPath-ChLhdOyt.cjs +0 -13
- package/dist/selfCheck-CF7XGJPb.mjs +0 -84
- package/dist/sessionModeFile-ByLbXTbg.mjs +0 -32
- package/dist/sessionModeFile-CLLdidiJ.cjs +0 -36
- package/dist/spawnAgents-Bw6j4tqz.mjs +0 -45
package/dist/lib.d.mts
CHANGED
|
@@ -367,7 +367,9 @@ type Session = {
|
|
|
367
367
|
declare const MachineMetadataSchema: z$1.ZodObject<{
|
|
368
368
|
teamsVersion: z$1.ZodOptional<z$1.ZodNumber>;
|
|
369
369
|
teamLaunchVersion: z$1.ZodOptional<z$1.ZodNumber>;
|
|
370
|
+
teamRetryVersion: z$1.ZodOptional<z$1.ZodNumber>;
|
|
370
371
|
worktreeVersion: z$1.ZodOptional<z$1.ZodNumber>;
|
|
372
|
+
modelConfigVersion: z$1.ZodOptional<z$1.ZodNumber>;
|
|
371
373
|
host: z$1.ZodString;
|
|
372
374
|
platform: z$1.ZodString;
|
|
373
375
|
happyCliVersion: z$1.ZodString;
|
|
@@ -588,6 +590,15 @@ declare const DaemonStateSchema: z$1.ZodObject<{
|
|
|
588
590
|
rpcAvailable: z$1.ZodBoolean;
|
|
589
591
|
detectedAt: z$1.ZodNumber;
|
|
590
592
|
}, z$1.core.$loose>>;
|
|
593
|
+
webPanels: z$1.ZodOptional<z$1.ZodObject<{
|
|
594
|
+
panels: z$1.ZodArray<z$1.ZodObject<{
|
|
595
|
+
id: z$1.ZodString;
|
|
596
|
+
title: z$1.ZodString;
|
|
597
|
+
url: z$1.ZodString;
|
|
598
|
+
embed: z$1.ZodBoolean;
|
|
599
|
+
}, z$1.core.$strip>>;
|
|
600
|
+
updatedAt: z$1.ZodNumber;
|
|
601
|
+
}, z$1.core.$strip>>;
|
|
591
602
|
}, z$1.core.$strip>;
|
|
592
603
|
type DaemonState = z$1.infer<typeof DaemonStateSchema>;
|
|
593
604
|
type ClaudeAuthState = ClaudeAuthState$1;
|
|
@@ -707,6 +718,7 @@ type Metadata = {
|
|
|
707
718
|
*/
|
|
708
719
|
terminalId?: string;
|
|
709
720
|
codexThreadId?: string;
|
|
721
|
+
piSessionId?: string;
|
|
710
722
|
tools?: string[];
|
|
711
723
|
slashCommands?: string[];
|
|
712
724
|
mcpServers?: Array<{
|
|
@@ -747,6 +759,18 @@ type Metadata = {
|
|
|
747
759
|
idleMs: number;
|
|
748
760
|
v: 1;
|
|
749
761
|
};
|
|
762
|
+
/**
|
|
763
|
+
* B-679: written by a wrapper that went OFFLINE (SIGTERM / SIGINT: `sessions
|
|
764
|
+
* stop`, daemon stop / upgrade, shutdown); cleared by the next wrapper on
|
|
765
|
+
* reconnect. `seq` = its message cursor — user input stored above it (sent
|
|
766
|
+
* to the offline session) was never routed and is replayed on resume. Old
|
|
767
|
+
* clients ignore it.
|
|
768
|
+
*/
|
|
769
|
+
exitCursor?: {
|
|
770
|
+
at: number;
|
|
771
|
+
seq: number;
|
|
772
|
+
v: 1;
|
|
773
|
+
};
|
|
750
774
|
/** B-587: user opted this session out of idle hibernation (web ⋯ menu). */
|
|
751
775
|
keepAwake?: boolean;
|
|
752
776
|
flavor?: string;
|
|
@@ -1273,7 +1297,9 @@ declare class ApiSessionClient extends EventEmitter {
|
|
|
1273
1297
|
* session down. Needs no socket; POSTs through the same session-message
|
|
1274
1298
|
* channel so the web receives it identically to a cancel-button tombstone.
|
|
1275
1299
|
*/
|
|
1276
|
-
cancelUndeliveredQueuedInputs(
|
|
1300
|
+
cancelUndeliveredQueuedInputs(opts?: {
|
|
1301
|
+
maxSeq?: number;
|
|
1302
|
+
}): Promise<void>;
|
|
1277
1303
|
/**
|
|
1278
1304
|
* Send a message to session
|
|
1279
1305
|
* @param body - Message body (can be MessageContent or raw content for agent messages)
|
|
@@ -1291,6 +1317,11 @@ declare class ApiSessionClient extends EventEmitter {
|
|
|
1291
1317
|
* own line, so a launcher sends the matching session event only when this
|
|
1292
1318
|
* says the turn-end did not carry it).
|
|
1293
1319
|
*/
|
|
1320
|
+
/**
|
|
1321
|
+
* B-495: close the turn a fork backfill left open. History, not a live
|
|
1322
|
+
* turn end — so no `turn-ended` tap (board analyzer, completion hooks).
|
|
1323
|
+
*/
|
|
1324
|
+
closeReplayedClaudeTurn(): void;
|
|
1294
1325
|
closeClaudeSessionTurn(status?: SessionTurnEndStatus, meta?: {
|
|
1295
1326
|
error?: string;
|
|
1296
1327
|
}): boolean;
|
|
@@ -1453,6 +1484,44 @@ declare class ApiSessionClient extends EventEmitter {
|
|
|
1453
1484
|
private startSmartReconnect;
|
|
1454
1485
|
}
|
|
1455
1486
|
|
|
1487
|
+
/**
|
|
1488
|
+
* B-510: machine web panels — local web pages a person may need to look at
|
|
1489
|
+
* (noVNC, an agent-browser dashboard, Grafana, a dev server), declared ONLY in
|
|
1490
|
+
* this machine's `~/.happy/settings.json` (`webPanels`) and mirrored to the web
|
|
1491
|
+
* through `daemonState.webPanels`. Spec: specs/2026-09-machine-web-panels.md.
|
|
1492
|
+
*
|
|
1493
|
+
* The web, RPC and server have no write path (same rule as `todoProvider`):
|
|
1494
|
+
* the URL is opened by the viewer's browser, so whoever can write it chooses
|
|
1495
|
+
* what the user's browser loads. Only the machine owner can.
|
|
1496
|
+
*
|
|
1497
|
+
* Nothing is proxied: the viewer's browser connects to the URL directly.
|
|
1498
|
+
*/
|
|
1499
|
+
interface WebPanel {
|
|
1500
|
+
id: string;
|
|
1501
|
+
title: string;
|
|
1502
|
+
url: string;
|
|
1503
|
+
/** false = the web only offers "open in new window" (site forbids framing). */
|
|
1504
|
+
embed: boolean;
|
|
1505
|
+
}
|
|
1506
|
+
|
|
1507
|
+
/**
|
|
1508
|
+
* B-689: why a daemon-spawned wrapper died before it reported its session.
|
|
1509
|
+
*
|
|
1510
|
+
* The wrapper runs with `stdio: 'ignore'`, so the daemon cannot read its
|
|
1511
|
+
* stderr; the wrapper's own log file is the record (utils/exitReason.ts writes
|
|
1512
|
+
* an `[EXIT] …` line on every non-zero exit). Older wrappers have no `[EXIT]`
|
|
1513
|
+
* line — fall back to the last logged error.
|
|
1514
|
+
*/
|
|
1515
|
+
type StartupExit = {
|
|
1516
|
+
/** The process is confirmed gone (exited, or stopped after the timeout). */
|
|
1517
|
+
exited: boolean;
|
|
1518
|
+
code: number | null;
|
|
1519
|
+
signal: string | null;
|
|
1520
|
+
/** No session report within the spawn window; the daemon stopped it. */
|
|
1521
|
+
timedOut?: boolean;
|
|
1522
|
+
reason?: string;
|
|
1523
|
+
};
|
|
1524
|
+
|
|
1456
1525
|
/**
|
|
1457
1526
|
* The backends the daemon can spawn as a remote session.
|
|
1458
1527
|
*
|
|
@@ -1549,8 +1618,148 @@ type SpawnSessionResult = {
|
|
|
1549
1618
|
} | {
|
|
1550
1619
|
type: 'error';
|
|
1551
1620
|
errorMessage: string;
|
|
1621
|
+
startupExit?: StartupExit;
|
|
1552
1622
|
};
|
|
1553
1623
|
|
|
1624
|
+
/**
|
|
1625
|
+
* B-688 wire shapes for the `model-config-*` machine RPCs
|
|
1626
|
+
* (spec specs/2026-10-custom-models.md). Mirrored by the web in
|
|
1627
|
+
* packages/happy-web-v2/src/sync/modelConfigTypes.ts — keep both in step.
|
|
1628
|
+
*
|
|
1629
|
+
* Patch convention: a field left `undefined` keeps the file's value; `null`
|
|
1630
|
+
* or '' removes the key Very Happy manages. Secrets never come back: reads
|
|
1631
|
+
* return `SecretView`, never the value.
|
|
1632
|
+
*/
|
|
1633
|
+
|
|
1634
|
+
declare const MODEL_CONFIG_CAPABILITY_VERSION = 1;
|
|
1635
|
+
type HarnessId = 'claude' | 'codex' | 'gemini' | 'pi';
|
|
1636
|
+
interface SecretView {
|
|
1637
|
+
/** none: nothing configured; command: a helper/command the user wrote (not shown). */
|
|
1638
|
+
mode: 'none' | 'literal' | 'env' | 'command';
|
|
1639
|
+
/** `sk-a…9f3c` / `••••` for literal; never the value. */
|
|
1640
|
+
masked?: string;
|
|
1641
|
+
envName?: string;
|
|
1642
|
+
/** Whether the daemon's environment (inherited by sessions) defines envName. */
|
|
1643
|
+
envPresent?: boolean;
|
|
1644
|
+
}
|
|
1645
|
+
interface ConfigWarning {
|
|
1646
|
+
code: string;
|
|
1647
|
+
message: string;
|
|
1648
|
+
}
|
|
1649
|
+
interface FileView {
|
|
1650
|
+
role: string;
|
|
1651
|
+
path: string;
|
|
1652
|
+
exists: boolean;
|
|
1653
|
+
error?: {
|
|
1654
|
+
code: string;
|
|
1655
|
+
message: string;
|
|
1656
|
+
};
|
|
1657
|
+
}
|
|
1658
|
+
interface BackupView {
|
|
1659
|
+
id: string;
|
|
1660
|
+
createdAt: number;
|
|
1661
|
+
reason: string;
|
|
1662
|
+
files: string[];
|
|
1663
|
+
}
|
|
1664
|
+
/** Per-harness current values, already masked. Shape depends on the harness. */
|
|
1665
|
+
interface HarnessCurrent {
|
|
1666
|
+
baseUrl?: string | null;
|
|
1667
|
+
apiKey?: SecretView;
|
|
1668
|
+
authHeader?: 'bearer' | 'x-api-key';
|
|
1669
|
+
model?: string | null;
|
|
1670
|
+
opusModel?: string | null;
|
|
1671
|
+
sonnetModel?: string | null;
|
|
1672
|
+
haikuModel?: string | null;
|
|
1673
|
+
pickerModels?: string[];
|
|
1674
|
+
providerId?: string | null;
|
|
1675
|
+
providerName?: string | null;
|
|
1676
|
+
api?: string | null;
|
|
1677
|
+
models?: string[];
|
|
1678
|
+
defaultModel?: string | null;
|
|
1679
|
+
/** codex/pi: provider currently selected by the harness. */
|
|
1680
|
+
activeProvider?: string | null;
|
|
1681
|
+
active?: boolean;
|
|
1682
|
+
}
|
|
1683
|
+
interface HarnessConfigView {
|
|
1684
|
+
harness: HarnessId;
|
|
1685
|
+
/** Harness binary found on the daemon's PATH. */
|
|
1686
|
+
installed: boolean;
|
|
1687
|
+
files: FileView[];
|
|
1688
|
+
/** sha256 over all files; `apply`/`restore` refuse when the disk moved on. */
|
|
1689
|
+
baseHash: string;
|
|
1690
|
+
current: HarnessCurrent;
|
|
1691
|
+
/** codex/pi: user-defined provider ids in the file. */
|
|
1692
|
+
providers?: string[];
|
|
1693
|
+
/** Model keys the web should offer in this harness's composer picker. */
|
|
1694
|
+
pickerModels: string[];
|
|
1695
|
+
backups: BackupView[];
|
|
1696
|
+
warnings: ConfigWarning[];
|
|
1697
|
+
}
|
|
1698
|
+
interface ModelConfigReadResult {
|
|
1699
|
+
version: typeof MODEL_CONFIG_CAPABILITY_VERSION;
|
|
1700
|
+
harnesses: HarnessConfigView[];
|
|
1701
|
+
}
|
|
1702
|
+
interface FileDiff {
|
|
1703
|
+
path: string;
|
|
1704
|
+
/** Unified diff with secrets masked; '' when unchanged. */
|
|
1705
|
+
diff: string;
|
|
1706
|
+
created: boolean;
|
|
1707
|
+
deleted: boolean;
|
|
1708
|
+
}
|
|
1709
|
+
interface ModelConfigApplyResult {
|
|
1710
|
+
harness: HarnessId;
|
|
1711
|
+
dryRun: boolean;
|
|
1712
|
+
changed: boolean;
|
|
1713
|
+
baseHash: string;
|
|
1714
|
+
files: FileDiff[];
|
|
1715
|
+
warnings: ConfigWarning[];
|
|
1716
|
+
backup?: BackupView;
|
|
1717
|
+
/** Fresh view after a real write. */
|
|
1718
|
+
config?: HarnessConfigView;
|
|
1719
|
+
}
|
|
1720
|
+
|
|
1721
|
+
interface ModelConfigServiceOptions {
|
|
1722
|
+
/** The home the harnesses resolve `~` against (the daemon user's). */
|
|
1723
|
+
home: string;
|
|
1724
|
+
/** The daemon's environment: harness dir overrides + env-reference presence. */
|
|
1725
|
+
env: NodeJS.ProcessEnv;
|
|
1726
|
+
/** Very Happy home; backups and the audit log live under it. */
|
|
1727
|
+
happyHomeDir: string;
|
|
1728
|
+
isInstalled?: (binary: string) => boolean;
|
|
1729
|
+
/** Called after a successful write (e.g. re-run the Claude auth preflight). */
|
|
1730
|
+
onChanged?: (harness: HarnessId) => void;
|
|
1731
|
+
now?: () => number;
|
|
1732
|
+
}
|
|
1733
|
+
declare class ModelConfigService {
|
|
1734
|
+
private readonly opts;
|
|
1735
|
+
private readonly backups;
|
|
1736
|
+
private readonly auditPath;
|
|
1737
|
+
private chain;
|
|
1738
|
+
constructor(opts: ModelConfigServiceOptions);
|
|
1739
|
+
private get ctx();
|
|
1740
|
+
private serialize;
|
|
1741
|
+
private loadFiles;
|
|
1742
|
+
readOne(harness: HarnessId, providerId?: string): Promise<HarnessConfigView>;
|
|
1743
|
+
read(params?: {
|
|
1744
|
+
harness?: unknown;
|
|
1745
|
+
providerId?: unknown;
|
|
1746
|
+
}): Promise<ModelConfigReadResult>;
|
|
1747
|
+
private diffs;
|
|
1748
|
+
private write;
|
|
1749
|
+
private audit;
|
|
1750
|
+
apply(params: {
|
|
1751
|
+
patch?: unknown;
|
|
1752
|
+
baseHash?: unknown;
|
|
1753
|
+
dryRun?: unknown;
|
|
1754
|
+
}): Promise<ModelConfigApplyResult>;
|
|
1755
|
+
restore(params: {
|
|
1756
|
+
harness?: unknown;
|
|
1757
|
+
backupId?: unknown;
|
|
1758
|
+
baseHash?: unknown;
|
|
1759
|
+
dryRun?: unknown;
|
|
1760
|
+
}): Promise<ModelConfigApplyResult>;
|
|
1761
|
+
}
|
|
1762
|
+
|
|
1554
1763
|
/** Agent-specific visible-screen adapters. Unknown is deliberately not idle. */
|
|
1555
1764
|
type CodingAgentKind = 'claude' | 'codex' | 'pi';
|
|
1556
1765
|
|
|
@@ -1691,6 +1900,9 @@ declare class ApiMachineClient {
|
|
|
1691
1900
|
private claudeAuthState;
|
|
1692
1901
|
/** B-587: the machine's hibernation threshold, published as a capability. */
|
|
1693
1902
|
private agentHibernationIdleMs;
|
|
1903
|
+
/** B-510: last normalized `webPanels` (null = never set → field not written). */
|
|
1904
|
+
private webPanels;
|
|
1905
|
+
private webPanelsSignatureSent;
|
|
1694
1906
|
private rateLimitPushChain;
|
|
1695
1907
|
private readonly rateLimitPublisher;
|
|
1696
1908
|
private rpcHandlerManager;
|
|
@@ -1770,6 +1982,12 @@ declare class ApiMachineClient {
|
|
|
1770
1982
|
* `daemonState.agentHibernation` capability. Call before connect().
|
|
1771
1983
|
*/
|
|
1772
1984
|
setAgentHibernationHandlers(initialIdleMs: number, set: (idleMs: number) => Promise<number>): void;
|
|
1985
|
+
/**
|
|
1986
|
+
* B-510: mirror the local `webPanels` declaration into daemonState. Every
|
|
1987
|
+
* daemonState write is a CAS + DB write + broadcast, so an unchanged list
|
|
1988
|
+
* (same signature as the last one sent) writes nothing.
|
|
1989
|
+
*/
|
|
1990
|
+
setWebPanels(panels: WebPanel[]): Promise<void>;
|
|
1773
1991
|
private publishAgentHibernation;
|
|
1774
1992
|
/** B-276 machine RPCs. Responses always carry `claudeAuth` so the web can refresh in place. */
|
|
1775
1993
|
setClaudeAuthHandlers(handlers: {
|
|
@@ -1783,6 +2001,8 @@ declare class ApiMachineClient {
|
|
|
1783
2001
|
}>;
|
|
1784
2002
|
setStore: (store: 'auto' | 'file') => Promise<ClaudeAuthState>;
|
|
1785
2003
|
}): void;
|
|
2004
|
+
/** B-688 machine RPCs `model-config-*` (modules/modelConfig/modelConfigRpc.ts). */
|
|
2005
|
+
setModelConfigService(service: ModelConfigService): void;
|
|
1786
2006
|
/**
|
|
1787
2007
|
* B-506: the five `sessions.*` methods a CLI on ANOTHER machine of this
|
|
1788
2008
|
* account calls to read / message sessions this daemon spawned. Plaintext
|
|
@@ -1862,7 +2082,7 @@ interface PushToken {
|
|
|
1862
2082
|
createdAt: number;
|
|
1863
2083
|
updatedAt: number;
|
|
1864
2084
|
}
|
|
1865
|
-
type SessionNotificationKind = 'done' | 'permission' | 'question';
|
|
2085
|
+
type SessionNotificationKind = 'done' | 'permission' | 'question' | 'attention';
|
|
1866
2086
|
declare class PushNotificationClient {
|
|
1867
2087
|
private readonly token;
|
|
1868
2088
|
private readonly baseUrl;
|
|
@@ -1897,6 +2117,23 @@ declare class PushNotificationClient {
|
|
|
1897
2117
|
metadata: Metadata | null | undefined;
|
|
1898
2118
|
data?: Record<string, any>;
|
|
1899
2119
|
}): void;
|
|
2120
|
+
/**
|
|
2121
|
+
* B-510 `request_human` / `very-happy attention --session`: an awaited
|
|
2122
|
+
* push-event `attention` (title "Needs you", body = the reason, data.url =
|
|
2123
|
+
* panel deep link or the session). A server that predates the kind answers
|
|
2124
|
+
* 400; then the same push goes out as `question`, so the person is still
|
|
2125
|
+
* reached (compat matrix in specs/2026-09-machine-web-panels.md).
|
|
2126
|
+
*/
|
|
2127
|
+
sendAttention(params: {
|
|
2128
|
+
sessionId: string;
|
|
2129
|
+
reason: string;
|
|
2130
|
+
url: string;
|
|
2131
|
+
sessionTitle?: string;
|
|
2132
|
+
}): Promise<{
|
|
2133
|
+
sent: boolean;
|
|
2134
|
+
kind?: SessionNotificationKind;
|
|
2135
|
+
error?: string;
|
|
2136
|
+
}>;
|
|
1900
2137
|
}
|
|
1901
2138
|
|
|
1902
2139
|
/**
|
package/dist/lib.mjs
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
export { A as ApiClient, a as ApiSessionClient } from './api-
|
|
2
|
-
export { l as logger } from './logger
|
|
3
|
-
export { c as configuration } from './configuration-
|
|
1
|
+
export { A as ApiClient, a as ApiSessionClient } from './api-Hov8p7CA.mjs';
|
|
2
|
+
export { l as logger } from './logger-BUngm5Xg.mjs';
|
|
3
|
+
export { c as configuration } from './configuration-PxzEJumr.mjs';
|
|
4
4
|
export { R as RawJSONLinesSchema } from './types-CkqAACXx.mjs';
|
|
5
5
|
import 'axios';
|
|
6
|
-
import './lidState-
|
|
6
|
+
import './lidState-bBrmaQd2.mjs';
|
|
7
7
|
import './authRelay-DhQhkBvX.mjs';
|
|
8
8
|
import 'node:crypto';
|
|
9
9
|
import 'tweetnacl';
|
|
@@ -11,13 +11,14 @@ import 'os';
|
|
|
11
11
|
import 'child_process';
|
|
12
12
|
import 'node:events';
|
|
13
13
|
import 'socket.io-client';
|
|
14
|
-
import './
|
|
14
|
+
import './pushNotifications-DCiBEVeC.mjs';
|
|
15
15
|
import 'zod';
|
|
16
|
-
import './index-
|
|
16
|
+
import './index-C6Vn5Eac.mjs';
|
|
17
17
|
import '@paralleldrive/cuid2';
|
|
18
|
+
import './contentLogMetadata-BlWI0egu.mjs';
|
|
18
19
|
import './limits-DIo7rEBR.mjs';
|
|
19
|
-
import './time-
|
|
20
|
-
import './registerCommonHandlers-
|
|
20
|
+
import './time-D3ETL7Jb.mjs';
|
|
21
|
+
import './registerCommonHandlers-CTkCvjxt.mjs';
|
|
21
22
|
import 'util';
|
|
22
23
|
import 'fs/promises';
|
|
23
24
|
import 'crypto';
|
|
@@ -25,15 +26,14 @@ import 'path';
|
|
|
25
26
|
import 'cross-spawn';
|
|
26
27
|
import './projectPath-BTBIMB57.mjs';
|
|
27
28
|
import 'url';
|
|
28
|
-
import './sync-
|
|
29
|
-
import './backgroundTaskActivity-
|
|
30
|
-
import './controlClient-
|
|
31
|
-
import './persistence-
|
|
29
|
+
import './sync-BvVhDO40.mjs';
|
|
30
|
+
import './backgroundTaskActivity-8PdPxrvy.mjs';
|
|
31
|
+
import './controlClient-DoeYovwP.mjs';
|
|
32
|
+
import './persistence-BFUOHW5h.mjs';
|
|
32
33
|
import 'node:fs/promises';
|
|
33
34
|
import 'node:fs';
|
|
34
|
-
import './contentLogMetadata-BlWI0egu.mjs';
|
|
35
35
|
import 'chalk';
|
|
36
36
|
import 'node:util';
|
|
37
37
|
import 'node:path';
|
|
38
38
|
import 'node:os';
|
|
39
|
-
import './package-
|
|
39
|
+
import './package-7Ld1YMhh.mjs';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { l as logger } from './logger
|
|
1
|
+
import { l as logger } from './logger-BUngm5Xg.mjs';
|
|
2
2
|
import { e as encodeBase64, g as encrypt, h as decrypt, d as decodeBase64 } from './authRelay-DhQhkBvX.mjs';
|
|
3
3
|
import os from 'os';
|
|
4
4
|
import { execSync } from 'child_process';
|
|
@@ -6,7 +6,7 @@ var path = require('node:path');
|
|
|
6
6
|
var tweetnacl = require('tweetnacl');
|
|
7
7
|
var z = require('zod');
|
|
8
8
|
var authRelay = require('./authRelay-Dy1qU9td.cjs');
|
|
9
|
-
var configuration = require('./configuration-
|
|
9
|
+
var configuration = require('./configuration-CYO-kPOS.cjs');
|
|
10
10
|
|
|
11
11
|
const AgentCredentialsSchema = z.z.object({
|
|
12
12
|
token: z.z.string().min(1),
|
|
@@ -4,7 +4,7 @@ import { join } from 'node:path';
|
|
|
4
4
|
import tweetnacl from 'tweetnacl';
|
|
5
5
|
import { z } from 'zod';
|
|
6
6
|
import { c as credentialRelayProblem, d as decodeBase64 } from './authRelay-DhQhkBvX.mjs';
|
|
7
|
-
import { c as configuration } from './configuration-
|
|
7
|
+
import { c as configuration } from './configuration-PxzEJumr.mjs';
|
|
8
8
|
|
|
9
9
|
const AgentCredentialsSchema = z.object({
|
|
10
10
|
token: z.string().min(1),
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import chalk from 'chalk';
|
|
2
2
|
import { inspect } from 'node:util';
|
|
3
|
-
import { d as appendPrivateFileSync, c as configuration } from './configuration-
|
|
3
|
+
import { d as appendPrivateFileSync, c as configuration } from './configuration-PxzEJumr.mjs';
|
|
4
4
|
import { existsSync, readdirSync, statSync } from 'node:fs';
|
|
5
5
|
import { join, basename } from 'node:path';
|
|
6
6
|
|
|
@@ -236,7 +236,7 @@ async function listDaemonLogFiles(limit = 50) {
|
|
|
236
236
|
return { file, path: fullPath, modified: stats.mtime };
|
|
237
237
|
}).sort((a, b) => b.modified.getTime() - a.modified.getTime());
|
|
238
238
|
try {
|
|
239
|
-
const { readDaemonState } = await import('./persistence-
|
|
239
|
+
const { readDaemonState } = await import('./persistence-BFUOHW5h.mjs').then(function (n) { return n.F; });
|
|
240
240
|
const state = await readDaemonState();
|
|
241
241
|
if (!state) {
|
|
242
242
|
return logs;
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
var chalk = require('chalk');
|
|
4
4
|
var node_util = require('node:util');
|
|
5
|
-
var configuration = require('./configuration-
|
|
5
|
+
var configuration = require('./configuration-CYO-kPOS.cjs');
|
|
6
6
|
var node_fs = require('node:fs');
|
|
7
7
|
var path = require('node:path');
|
|
8
8
|
|
|
@@ -238,7 +238,7 @@ async function listDaemonLogFiles(limit = 50) {
|
|
|
238
238
|
return { file, path: fullPath, modified: stats.mtime };
|
|
239
239
|
}).sort((a, b) => b.modified.getTime() - a.modified.getTime());
|
|
240
240
|
try {
|
|
241
|
-
const { readDaemonState } = await Promise.resolve().then(function () { return require('./persistence-
|
|
241
|
+
const { readDaemonState } = await Promise.resolve().then(function () { return require('./persistence-9BMYspxG.cjs'); }).then(function (n) { return n.persistence; });
|
|
242
242
|
const state = await readDaemonState();
|
|
243
243
|
if (!state) {
|
|
244
244
|
return logs;
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var os = require('node:os');
|
|
4
|
+
var _package = require('./package-KhLqBDX9.cjs');
|
|
5
|
+
var configuration = require('./configuration-CYO-kPOS.cjs');
|
|
6
|
+
var projectPath = require('./projectPath-C3ioB4Bu.cjs');
|
|
7
|
+
var detectCLI = require('./detectCLI-BuYR_Qxe.cjs');
|
|
8
|
+
var localHappyAgentAuth = require('./localHappyAgentAuth-DZHQnIW9.cjs');
|
|
9
|
+
|
|
10
|
+
const TEAM_RETRY_CAPABILITY_VERSION = 2;
|
|
11
|
+
const TEAM_CLEANUP_RETRY_MS = 5 * 6e4;
|
|
12
|
+
const TEAM_SPAWN_RETRY_DELAYS_MS = [1e4, 3e4, 6e4, 12e4];
|
|
13
|
+
const TEAM_SPAWN_MAX_ATTEMPTS = TEAM_SPAWN_RETRY_DELAYS_MS.length + 1;
|
|
14
|
+
function ownerRetryPending(op, receipt) {
|
|
15
|
+
return typeof op.retryRequestedAt === "number" && op.retryRequestedAt !== receipt.retryConsumed;
|
|
16
|
+
}
|
|
17
|
+
function spawnGate(receipt, now) {
|
|
18
|
+
if (receipt.phase !== "prepared" || !receipt.spawnFailures) return "run";
|
|
19
|
+
if (receipt.retryAt === void 0) return "exhausted";
|
|
20
|
+
return now < receipt.retryAt ? "wait" : "run";
|
|
21
|
+
}
|
|
22
|
+
function afterStartupFailure(receipt, now) {
|
|
23
|
+
const spawnFailures = (receipt.spawnFailures ?? 0) + 1;
|
|
24
|
+
const delay = TEAM_SPAWN_RETRY_DELAYS_MS[spawnFailures - 1];
|
|
25
|
+
const { sessionId: _sessionId, retryAt: _retryAt, ...rest } = receipt;
|
|
26
|
+
return { ...rest, phase: "prepared", spawnFailures, ...delay !== void 0 ? { retryAt: now + delay } : {} };
|
|
27
|
+
}
|
|
28
|
+
function startupFailureMessage(error, receipt, now) {
|
|
29
|
+
const attempt = receipt.spawnFailures ?? 1;
|
|
30
|
+
const next = receipt.retryAt !== void 0 ? `automatic retry ${attempt + 1}/${TEAM_SPAWN_MAX_ATTEMPTS} in ${Math.max(1, Math.round((receipt.retryAt - now) / 1e3))}s` : `automatic retries exhausted after ${attempt} attempts; use Retry launch after fixing the cause`;
|
|
31
|
+
return `${error} (${next})`;
|
|
32
|
+
}
|
|
33
|
+
function consumeOwnerRetry(op, receipt) {
|
|
34
|
+
const { retryAt: _retryAt, sessionId: _sessionId, ...rest } = receipt;
|
|
35
|
+
return { ...rest, phase: "prepared", spawnFailures: 0, retryConsumed: op.retryRequestedAt };
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
function buildInitialMachineMetadata(cliAvailability) {
|
|
39
|
+
const hostSuffix = process.env.HAPPY_VARIANT === "dev" ? "-dev" : "";
|
|
40
|
+
return {
|
|
41
|
+
teamsVersion: 1,
|
|
42
|
+
teamLaunchVersion: 1,
|
|
43
|
+
teamRetryVersion: TEAM_RETRY_CAPABILITY_VERSION,
|
|
44
|
+
worktreeVersion: 1,
|
|
45
|
+
host: os.hostname() + hostSuffix,
|
|
46
|
+
platform: os.platform(),
|
|
47
|
+
happyCliVersion: _package.packageJson.version,
|
|
48
|
+
homeDir: os.homedir(),
|
|
49
|
+
happyHomeDir: configuration.configuration.happyHomeDir,
|
|
50
|
+
happyLibDir: projectPath.projectPath(),
|
|
51
|
+
cliAvailability,
|
|
52
|
+
resumeSupport: { ...localHappyAgentAuth.detectResumeSupport(), rpcAvailable: true }
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
let memo = null;
|
|
56
|
+
function compute() {
|
|
57
|
+
if (!memo) {
|
|
58
|
+
const cliAvailability = detectCLI.detectCLIAvailability();
|
|
59
|
+
memo = { metadata: buildInitialMachineMetadata(cliAvailability), cliAvailability };
|
|
60
|
+
}
|
|
61
|
+
return memo;
|
|
62
|
+
}
|
|
63
|
+
function getInitialMachineMetadata() {
|
|
64
|
+
return compute().metadata;
|
|
65
|
+
}
|
|
66
|
+
function getStartupCliAvailability() {
|
|
67
|
+
return compute().cliAvailability;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
exports.TEAM_CLEANUP_RETRY_MS = TEAM_CLEANUP_RETRY_MS;
|
|
71
|
+
exports.TEAM_RETRY_CAPABILITY_VERSION = TEAM_RETRY_CAPABILITY_VERSION;
|
|
72
|
+
exports.TEAM_SPAWN_MAX_ATTEMPTS = TEAM_SPAWN_MAX_ATTEMPTS;
|
|
73
|
+
exports.afterStartupFailure = afterStartupFailure;
|
|
74
|
+
exports.consumeOwnerRetry = consumeOwnerRetry;
|
|
75
|
+
exports.getInitialMachineMetadata = getInitialMachineMetadata;
|
|
76
|
+
exports.getStartupCliAvailability = getStartupCliAvailability;
|
|
77
|
+
exports.ownerRetryPending = ownerRetryPending;
|
|
78
|
+
exports.spawnGate = spawnGate;
|
|
79
|
+
exports.startupFailureMessage = startupFailureMessage;
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import os from 'node:os';
|
|
2
|
+
import { p as packageJson } from './package-7Ld1YMhh.mjs';
|
|
3
|
+
import { c as configuration } from './configuration-PxzEJumr.mjs';
|
|
4
|
+
import { p as projectPath } from './projectPath-BTBIMB57.mjs';
|
|
5
|
+
import { d as detectCLIAvailability } from './detectCLI-CSGMlV51.mjs';
|
|
6
|
+
import { d as detectResumeSupport } from './localHappyAgentAuth-Dn1jYDpt.mjs';
|
|
7
|
+
|
|
8
|
+
const TEAM_RETRY_CAPABILITY_VERSION = 2;
|
|
9
|
+
const TEAM_CLEANUP_RETRY_MS = 5 * 6e4;
|
|
10
|
+
const TEAM_SPAWN_RETRY_DELAYS_MS = [1e4, 3e4, 6e4, 12e4];
|
|
11
|
+
const TEAM_SPAWN_MAX_ATTEMPTS = TEAM_SPAWN_RETRY_DELAYS_MS.length + 1;
|
|
12
|
+
function ownerRetryPending(op, receipt) {
|
|
13
|
+
return typeof op.retryRequestedAt === "number" && op.retryRequestedAt !== receipt.retryConsumed;
|
|
14
|
+
}
|
|
15
|
+
function spawnGate(receipt, now) {
|
|
16
|
+
if (receipt.phase !== "prepared" || !receipt.spawnFailures) return "run";
|
|
17
|
+
if (receipt.retryAt === void 0) return "exhausted";
|
|
18
|
+
return now < receipt.retryAt ? "wait" : "run";
|
|
19
|
+
}
|
|
20
|
+
function afterStartupFailure(receipt, now) {
|
|
21
|
+
const spawnFailures = (receipt.spawnFailures ?? 0) + 1;
|
|
22
|
+
const delay = TEAM_SPAWN_RETRY_DELAYS_MS[spawnFailures - 1];
|
|
23
|
+
const { sessionId: _sessionId, retryAt: _retryAt, ...rest } = receipt;
|
|
24
|
+
return { ...rest, phase: "prepared", spawnFailures, ...delay !== void 0 ? { retryAt: now + delay } : {} };
|
|
25
|
+
}
|
|
26
|
+
function startupFailureMessage(error, receipt, now) {
|
|
27
|
+
const attempt = receipt.spawnFailures ?? 1;
|
|
28
|
+
const next = receipt.retryAt !== void 0 ? `automatic retry ${attempt + 1}/${TEAM_SPAWN_MAX_ATTEMPTS} in ${Math.max(1, Math.round((receipt.retryAt - now) / 1e3))}s` : `automatic retries exhausted after ${attempt} attempts; use Retry launch after fixing the cause`;
|
|
29
|
+
return `${error} (${next})`;
|
|
30
|
+
}
|
|
31
|
+
function consumeOwnerRetry(op, receipt) {
|
|
32
|
+
const { retryAt: _retryAt, sessionId: _sessionId, ...rest } = receipt;
|
|
33
|
+
return { ...rest, phase: "prepared", spawnFailures: 0, retryConsumed: op.retryRequestedAt };
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
function buildInitialMachineMetadata(cliAvailability) {
|
|
37
|
+
const hostSuffix = process.env.HAPPY_VARIANT === "dev" ? "-dev" : "";
|
|
38
|
+
return {
|
|
39
|
+
teamsVersion: 1,
|
|
40
|
+
teamLaunchVersion: 1,
|
|
41
|
+
teamRetryVersion: TEAM_RETRY_CAPABILITY_VERSION,
|
|
42
|
+
worktreeVersion: 1,
|
|
43
|
+
host: os.hostname() + hostSuffix,
|
|
44
|
+
platform: os.platform(),
|
|
45
|
+
happyCliVersion: packageJson.version,
|
|
46
|
+
homeDir: os.homedir(),
|
|
47
|
+
happyHomeDir: configuration.happyHomeDir,
|
|
48
|
+
happyLibDir: projectPath(),
|
|
49
|
+
cliAvailability,
|
|
50
|
+
resumeSupport: { ...detectResumeSupport(), rpcAvailable: true }
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
let memo = null;
|
|
54
|
+
function compute() {
|
|
55
|
+
if (!memo) {
|
|
56
|
+
const cliAvailability = detectCLIAvailability();
|
|
57
|
+
memo = { metadata: buildInitialMachineMetadata(cliAvailability), cliAvailability };
|
|
58
|
+
}
|
|
59
|
+
return memo;
|
|
60
|
+
}
|
|
61
|
+
function getInitialMachineMetadata() {
|
|
62
|
+
return compute().metadata;
|
|
63
|
+
}
|
|
64
|
+
function getStartupCliAvailability() {
|
|
65
|
+
return compute().cliAvailability;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
export { TEAM_SPAWN_MAX_ATTEMPTS as T, afterStartupFailure as a, startupFailureMessage as b, consumeOwnerRetry as c, TEAM_CLEANUP_RETRY_MS as d, getStartupCliAvailability as e, TEAM_RETRY_CAPABILITY_VERSION as f, getInitialMachineMetadata as g, ownerRetryPending as o, spawnGate as s };
|