very-happy-cli 0.2.176 → 0.2.178
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-9_ZI1Bv3.cjs → AcpBackend-CDkAQXYf.cjs} +188 -37
- package/dist/{AcpBackend-COp6D8gl.mjs → AcpBackend-DCQXHRzT.mjs} +187 -38
- package/dist/{AcpSessionManager-DykjzBM4.mjs → AcpSessionManager-BXrQcqwC.mjs} +1 -1
- package/dist/{AcpSessionManager-CjdJLofq.cjs → AcpSessionManager-DckmUZza.cjs} +1 -1
- package/dist/{BasePermissionHandler-ChMkmsGD.mjs → BasePermissionHandler-BVlrEhIi.mjs} +1 -1
- package/dist/{BasePermissionHandler-DPvLN7aR.cjs → BasePermissionHandler-DyLmKKtO.cjs} +1 -1
- package/dist/{agentHome-D61ZMLXM.mjs → agentHome-C1xi37as.mjs} +5 -5
- package/dist/{agentHome-BKi7tsE9.cjs → agentHome-CEp9RMyK.cjs} +5 -5
- package/dist/{api-CbwDDXJt.mjs → api-Dib0dmqC.mjs} +19 -12
- package/dist/{api-Buc_ejoA.cjs → api-JANhFdZV.cjs} +18 -11
- package/dist/{apiMachine-CS7t3Rg-.mjs → apiMachine-DNTJidYH.mjs} +26 -16
- package/dist/{apiMachine--PXoXwKq.cjs → apiMachine-QhK-sKcr.cjs} +25 -15
- package/dist/{attachmentContent-BQYc8KpE.mjs → attachmentContent-DkkdpSSJ.mjs} +2 -2
- package/dist/{attachmentContent-CFzzTeV9.cjs → attachmentContent-bpQTBJ0y.cjs} +2 -2
- package/dist/{attachmentLimits-DtFqqiwR.cjs → attachmentLimits-SqeAHrVC.cjs} +1 -1
- package/dist/{attachmentLimits-Di1Z93lN.mjs → attachmentLimits-UyFn8fkQ.mjs} +1 -1
- package/dist/{auth-B3xMoveE.mjs → auth-BRjd2esb.mjs} +6 -6
- package/dist/{auth-CBkmRIGw.mjs → auth-DNct7VUi.mjs} +9 -9
- package/dist/{auth-CpO3ZUMz.cjs → auth-DgIV0Cvt.cjs} +6 -6
- package/dist/{auth-LPvsVriN.cjs → auth-omWDtgR8.cjs} +9 -9
- package/dist/{authRelay-DSAvg1uv.mjs → authRelay-DhQhkBvX.mjs} +1 -1
- package/dist/{authRelay-BdYkC1Po.cjs → authRelay-Dy1qU9td.cjs} +1 -0
- package/dist/{auto-Dm3EIKT7.cjs → auto-CI16FZmX.cjs} +17 -16
- package/dist/{auto-DHGch_zK.mjs → auto-DKGFOJBo.mjs} +19 -18
- package/dist/{backgroundTaskActivity-8PdPxrvy.mjs → backgroundTaskActivity-BVwJBl02.mjs} +1 -1
- package/dist/{bootstrap-CxuBAkJU.mjs → bootstrap-BUagGC_-.mjs} +2 -2
- package/dist/{bootstrap-BboDz_w2.cjs → bootstrap-DCQ87Aan.cjs} +2 -2
- package/dist/{browser-GQZJxD2n.cjs → browser-CSKhc0Bl.cjs} +1 -1
- package/dist/{browser-BvARP-YR.mjs → browser-Dj_DYQEh.mjs} +1 -1
- package/dist/{claudeLocal-B9EhFmD7.mjs → claudeLocal-CCCvAeMd.mjs} +6 -6
- package/dist/{claudeLocal-D-mujSX1.cjs → claudeLocal-CdIVnOZp.cjs} +5 -5
- package/dist/{claudeLocalLauncher-Tbrx6TXF.cjs → claudeLocalLauncher-21-xh5gc.cjs} +15 -18
- package/dist/{claudeLocalLauncher-Bdl-9aU_.mjs → claudeLocalLauncher-BmrpaRYJ.mjs} +16 -19
- package/dist/{claudeSessionFork-D_DKvDKE.mjs → claudeSessionFork-DvxMKAmY.mjs} +1 -1
- package/dist/{claudeSessionFork-sOz97qqW.cjs → claudeSessionFork-kYCP1IJB.cjs} +1 -1
- package/dist/{client-Cg6ABRe-.mjs → client-BTX9hsbr.mjs} +3 -3
- package/dist/{client-D9pEOhn4.cjs → client-C4zKGjiJ.cjs} +2 -2
- package/dist/{client-Ryu9fllj.mjs → client-CnlkkrZO.mjs} +2 -2
- package/dist/{client-D7sSU04O.cjs → client-Dnza1hgN.cjs} +3 -3
- package/dist/codex/happyMcpStdioBridge.cjs +16 -16
- package/dist/codex/happyMcpStdioBridge.mjs +17 -17
- package/dist/{codexAppServerClient-DsIUkVnX.cjs → codexAppServerClient-CRlBWGn3.cjs} +6 -54
- package/dist/{codexAppServerClient-C70pJ-BB.mjs → codexAppServerClient-DvkpQgyv.mjs} +10 -58
- package/dist/{codexCommand-DWbA3pJN.mjs → codexCommand-BxjogBzU.mjs} +44 -66
- package/dist/{codexCommand-Aycux-B7.cjs → codexCommand-DzxIWXIT.cjs} +44 -66
- package/dist/{BaseReasoningProcessor-Dnf16mtJ.cjs → codexTermination-C28FzlLb.cjs} +25 -1
- package/dist/{BaseReasoningProcessor-pjvLSTQF.mjs → codexTermination-ySDNMEhd.mjs} +25 -2
- package/dist/{config-BcL0bxO5.cjs → config-BFB5uJ4t.cjs} +3 -3
- package/dist/{config-Bztmzu8z.mjs → config-DwfEpFr3.mjs} +3 -3
- package/dist/{configuration-CpBrilxV.cjs → configuration-4TGMrjul.cjs} +1 -1
- package/dist/{configuration-BAwOtWFY.mjs → configuration-DVrb61aY.mjs} +1 -1
- package/dist/{connect-BeWQ4MMA.mjs → connect-C7FPY0PI.mjs} +15 -15
- package/dist/{connect-BBNCMTi8.cjs → connect-QH2VJGBG.cjs} +14 -14
- package/dist/{context-j114QJre.mjs → context-B3XPVJlj.mjs} +1 -1
- package/dist/{context-Hk0j2Y9-.cjs → context-JoKu0V54.cjs} +1 -1
- package/dist/{controlClient-bs_YqwDl.cjs → controlClient-BTaZlbC6.cjs} +3 -3
- package/dist/{controlClient-00KYAjsI.mjs → controlClient-BYKyGyxj.mjs} +4 -4
- package/dist/{createSessionMetadata-xlycGog5.mjs → createSessionMetadata-8Fuj2-IV.mjs} +2 -2
- package/dist/{createSessionMetadata-D4Sj6H95.cjs → createSessionMetadata-B2NynaWZ.cjs} +2 -2
- package/dist/{defaultPermissionMode-B97ox9p1.mjs → defaultPermissionMode-B8kJG9uI.mjs} +2 -2
- package/dist/{defaultPermissionMode-CMsiaRzr.cjs → defaultPermissionMode-BEWCqJU-.cjs} +2 -2
- package/dist/{deterministicJson-aHxtYLha.cjs → deterministicJson-BjNQsAjO.cjs} +9 -9
- package/dist/{deterministicJson-ucyv8j6b.mjs → deterministicJson-C5ZwZ7hu.mjs} +9 -9
- package/dist/{doctor-D554c6Bg.mjs → doctor-0BiGwJXk.mjs} +9 -9
- package/dist/{doctor-BXkNXcok.cjs → doctor-BshRnjLi.cjs} +8 -8
- package/dist/{downloadTarget-CmdlljZW.cjs → downloadTarget-BN5vZt3K.cjs} +6 -6
- package/dist/{downloadTarget-2_zMvt2N.mjs → downloadTarget-DJPwAZlu.mjs} +6 -6
- package/dist/{ensureDaemonRunning-CY7iC--U.cjs → ensureDaemonRunning-C5QfToCe.cjs} +5 -5
- package/dist/{ensureDaemonRunning-DJlziY-m.mjs → ensureDaemonRunning-CSmb_mqt.mjs} +5 -5
- package/dist/{handleResumeCommand-lSVnvTNC.cjs → handleResumeCommand-BwnUZmbo.cjs} +6 -6
- package/dist/{handleResumeCommand-CNTnXBXA.mjs → handleResumeCommand-CgjpsdDe.mjs} +6 -6
- package/dist/{index-MwTVbeGW.cjs → index-BRClDe07.cjs} +3 -3
- package/dist/{index-DhARRePz.cjs → index-BYOZ_8WZ.cjs} +5 -5
- package/dist/{index-59hR7nVz.mjs → index-BYgfern_.mjs} +3 -3
- package/dist/{index-DY3I8j0W.mjs → index-BehVbAsA.mjs} +144 -90
- package/dist/{index-CxSLrTPA.mjs → index-Bvldtdny.mjs} +5 -5
- package/dist/{index-B6UGRQ7h.mjs → index-CEjJnq05.mjs} +3 -0
- package/dist/{index-DMy3OCBe.mjs → index-Clqlu17M.mjs} +2 -2
- package/dist/{index-D3kI0hDR.cjs → index-DFPT4HOO.cjs} +3 -0
- package/dist/{index-De8L5lFK.cjs → index-_l1Sdmbi.cjs} +2 -1
- package/dist/{index-jeD70GGH.cjs → index-piJPsTsm.cjs} +142 -88
- package/dist/index.cjs +2 -2
- package/dist/index.mjs +2 -2
- package/dist/{install-DXUEtGfU.cjs → install-TO4taKW7.cjs} +3 -3
- package/dist/{install-DytIJ_Ia.mjs → install-fYWHrPcC.mjs} +3 -3
- package/dist/lib.cjs +13 -13
- package/dist/lib.d.cts +10 -1
- package/dist/lib.d.mts +10 -1
- package/dist/lib.mjs +14 -14
- package/dist/{lidState-UasMvPzw.cjs → lidState-BeOwj6eW.cjs} +2 -2
- package/dist/{lidState-CduPmrM0.mjs → lidState-DNMlIhX0.mjs} +2 -2
- package/dist/{localHappyAgentAuth-DL8JjHTV.mjs → localHappyAgentAuth-BezKSFDi.mjs} +2 -2
- package/dist/{localHappyAgentAuth-CA02WOny.cjs → localHappyAgentAuth-Br-mgogg.cjs} +2 -2
- package/dist/{logger-CihCDWDw.mjs → logger--vAVtXB_.mjs} +2 -2
- package/dist/{logger-zoO54Zsy.cjs → logger-DXTWlPzP.cjs} +2 -2
- package/dist/{machineMetadata-DEZcQ_CQ.mjs → machineMetadata-B1H9gNbN.mjs} +3 -3
- package/dist/{machineMetadata-BAKVtr-k.cjs → machineMetadata-DcUupMje.cjs} +3 -3
- package/dist/{main-DyJfNlL_.mjs → main-CshDb5-1.mjs} +45 -45
- package/dist/{main-BIvxyX71.cjs → main-DoMFJ2Cl.cjs} +45 -45
- package/dist/{manager-2Il8XJVq.mjs → manager-BEsI4qt3.mjs} +1 -1
- package/dist/{mcp-yoIdGe6C.mjs → mcp-DKT_lrvQ.mjs} +16 -16
- package/dist/{mcp-Dd11vHij.cjs → mcp-pNc1EbQf.cjs} +15 -15
- package/dist/{mirrorProtocol-BukXB5s3.mjs → mirrorProtocol-6IFGPpjJ.mjs} +3 -3
- package/dist/{mirrorProtocol-D-hF_SE5.cjs → mirrorProtocol-qKflWTX_.cjs} +3 -3
- package/dist/{package-ayqGDKSp.mjs → package-B7B03ejW.mjs} +7 -7
- package/dist/{package-A7zOGx8B.cjs → package-DY4zTbKS.cjs} +7 -7
- package/dist/{peerTools-DDMSViPu.mjs → peerTools-3R9RUARX.mjs} +4 -4
- package/dist/{peerTools-dPc9hRC5.cjs → peerTools-iy3_6Yc5.cjs} +4 -4
- package/dist/{persistence-Cih2AWml.cjs → persistence-BfX72dne.cjs} +14 -3
- package/dist/{persistence-Dy3lmall.mjs → persistence-DTk4sNpd.mjs} +14 -4
- package/dist/{piRunnerArgs-D3z3-1VJ.mjs → piRunnerArgs-AT8QJY7x.mjs} +1 -1
- package/dist/{piRunnerArgs-BuJgnUI5.cjs → piRunnerArgs-CRQVR9o-.cjs} +1 -1
- package/dist/{piRuntime-B-SPcWIr.cjs → piRuntime-BHRT5MKO.cjs} +1 -1
- package/dist/{piRuntime-kVGue-_5.mjs → piRuntime-E44qTVQ4.mjs} +1 -1
- package/dist/{piTerminal-aEtVdCJ2.mjs → piTerminal-De8nbciM.mjs} +18 -18
- package/dist/{piTerminal-DSxK5aAm.cjs → piTerminal-hI4WFdWm.cjs} +17 -17
- package/dist/processTree-CMHWlVse.cjs +66 -0
- package/dist/processTree-CP5IvQ2Z.mjs +61 -0
- package/dist/{rateLimitWindows-82izLQy8.cjs → rateLimitWindows-Czb7_7cK.cjs} +1 -1
- package/dist/{rateLimitWindows-E5DRjfE6.mjs → rateLimitWindows-XrJiiBpU.mjs} +1 -1
- package/dist/{registerCommonHandlers-CqO075-X.cjs → registerCommonHandlers-C0_fyBQ0.cjs} +2 -2
- package/dist/{registerCommonHandlers-Bm7CMqMv.mjs → registerCommonHandlers-CvIedVRf.mjs} +2 -2
- package/dist/{registerKillSessionHandler-WQra3T9B.cjs → registerKillSessionHandler-DYl7l4Ts.cjs} +6 -6
- package/dist/{registerKillSessionHandler-D02OY4vi.mjs → registerKillSessionHandler-gwJ5lTf0.mjs} +6 -6
- package/dist/{remoteSessionClient-f3DYorl8.cjs → remoteSessionClient-BRTIOX5b.cjs} +5 -5
- package/dist/{remoteSessionClient-Buh6NejV.mjs → remoteSessionClient-DRb2Jr5s.mjs} +5 -5
- package/dist/{reportProgressTool-C2gn_HWD.cjs → reportProgressTool-B9nCzbkL.cjs} +2 -2
- package/dist/{reportProgressTool-C5aSoKYX.mjs → reportProgressTool-D5tEoXMW.mjs} +2 -2
- package/dist/{run-Drxogp0j.mjs → run-BQ_FGaOL.mjs} +106 -38
- package/dist/{run-CDEmq6Zs.cjs → run-CKe_WeLW.cjs} +106 -38
- package/dist/{runClaude-yEcZTCt_.cjs → runClaude-MHI5IKM-.cjs} +27 -23
- package/dist/{runClaude-BF6U2Js7.mjs → runClaude-zrrNcQC_.mjs} +28 -24
- package/dist/{runClaudeDeps-Bl4ndq7N.mjs → runClaudeDeps-CVBCokOS.mjs} +394 -96
- package/dist/{runClaudeDeps-CnNNFjlI.cjs → runClaudeDeps-RRw-Nusc.cjs} +388 -90
- package/dist/{runGemini-DDVDRNg4.cjs → runGemini-D7Lg9yCr.cjs} +209 -194
- package/dist/{runGemini-C3wt7iv7.mjs → runGemini-kipag2ag.mjs} +209 -194
- package/dist/{runOpenClaw-CY6YHAvj.mjs → runOpenClaw-C_lRY3Do.mjs} +20 -20
- package/dist/{runOpenClaw-BzlVA_9Q.cjs → runOpenClaw-DCcQ0L2N.cjs} +19 -19
- package/dist/{sandbox-CX_wLwpq.mjs → sandbox-BSyXFVFp.mjs} +5 -5
- package/dist/{sandbox-0UNHR3hP.cjs → sandbox-dMwPTmjm.cjs} +5 -5
- package/dist/selfCheck-CF7XGJPb.mjs +84 -0
- package/dist/{selfCheck-FNwMFY8p.cjs → selfCheck-DkzDDUsE.cjs} +35 -35
- package/dist/{send-CpEGYict.mjs → send-C-k9nsd3.mjs} +10 -10
- package/dist/{send-BQkl25g0.cjs → send-dxC0miIA.cjs} +9 -9
- package/dist/{server-BodFZ5sW.cjs → server-B-W6P7Qr.cjs} +7 -7
- package/dist/{server-DnINX_Lm.mjs → server-DxoTYNlw.mjs} +5 -5
- package/dist/{sessionLock-Ddn-fhZ0.mjs → sessionLock-DBdtZGOL.mjs} +3 -3
- package/dist/{sessionLock-DOj6mMXn.cjs → sessionLock-DWX6BbiU.cjs} +3 -3
- package/dist/{sessionModeFile-DDbonFR_.mjs → sessionModeFile-ByLbXTbg.mjs} +1 -1
- package/dist/{sessionModeFile-DVukoSp7.cjs → sessionModeFile-CLLdidiJ.cjs} +1 -1
- package/dist/{sessionOps-Nryt1DZt.cjs → sessionOps-BAnr7n8t.cjs} +5 -5
- package/dist/{sessionOps-B1vQ25GS.mjs → sessionOps-BVoXe12O.mjs} +6 -6
- package/dist/{sessionScanner-DCr3ofhR.mjs → sessionScanner-BtxoeluY.mjs} +34 -4
- package/dist/{sessionScanner-D1h-cdte.cjs → sessionScanner-CDOYsEUD.cjs} +34 -3
- package/dist/{sessions-DpAN6Ft9.mjs → sessions-C3sZJkzI.mjs} +11 -11
- package/dist/{sessions-D2HsTbLf.cjs → sessions-hAitoN-m.cjs} +10 -10
- package/dist/{setupOfflineReconnection-B9Tw1Ouj.cjs → setupOfflineReconnection-C2EeYTFH.cjs} +2 -2
- package/dist/{setupOfflineReconnection-DQHEp330.mjs → setupOfflineReconnection-_eD4cuUT.mjs} +2 -2
- package/dist/{spawn-CvDZ38hi.cjs → spawn-Bc9v7pIf.cjs} +15 -14
- package/dist/{spawn-CNjm1yOi.mjs → spawn-qNrB2CD_.mjs} +17 -16
- package/dist/{spawnAgents-CCjJifAW.cjs → spawnAgents-BVEaz35W.cjs} +1 -1
- package/dist/{spawnAgents-BjtmjBvP.mjs → spawnAgents-Bw6j4tqz.mjs} +1 -1
- package/dist/{spawnHappyCLI-C8Vl56wB.mjs → spawnHappyCLI-C2stUioM.mjs} +1 -1
- package/dist/{spawnHappyCLI-ahi4j6Mh.cjs → spawnHappyCLI-fzUagkKV.cjs} +1 -1
- package/dist/{specialCommands-BpqnGrOP.cjs → specialCommands-BJ-nqY4s.cjs} +3 -3
- package/dist/{specialCommands-DfVMGXTl.mjs → specialCommands-C6W-rVyh.mjs} +3 -3
- package/dist/{startFileWatcher-Ddn3L0u3.cjs → startFileWatcher-Bqlqjt93.cjs} +1 -1
- package/dist/{startFileWatcher-DXJXY4AE.mjs → startFileWatcher-CR09Snmz.mjs} +1 -1
- package/dist/{streamRelay-Cx01enfe.cjs → streamRelay-9kBPpbvU.cjs} +1 -1
- package/dist/{streamRelay-_qCd873P.mjs → streamRelay-CJoMk_d2.mjs} +1 -1
- package/dist/{sync-BKvgkhPs.mjs → sync-DbW07iQS.mjs} +1 -1
- package/dist/{sync-BgZuthoS.cjs → sync-Dhmtk66S.cjs} +1 -1
- package/dist/{systemPrompt-C6O1cHUg.cjs → systemPrompt-3PYi3EUY.cjs} +2 -2
- package/dist/{systemPrompt-DuPem6c9.mjs → systemPrompt-CQcuUmVp.mjs} +2 -2
- package/dist/{teams-CffMBBfU.mjs → teams-CwF4Z2fA.mjs} +7 -7
- package/dist/{teams-DifEhhmk.cjs → teams-DpxLcUU_.cjs} +7 -7
- package/dist/{time-s8CaneqW.cjs → time-A6zR3Iy6.cjs} +1 -1
- package/dist/{time-DxCTiteK.mjs → time-BuGWTVP6.mjs} +1 -1
- package/dist/{titleGenerator-B5T7QSzu.mjs → titleGenerator-BGEzNWC9.mjs} +1 -1
- package/dist/{titleGenerator-CXr7t6cf.cjs → titleGenerator-D26gvNaS.cjs} +2 -2
- package/dist/{todo-B41GKMcI.cjs → todo-73g3NCIO.cjs} +7 -7
- package/dist/{todo-DNO7s8td.mjs → todo-DrZc76H5.mjs} +7 -7
- package/dist/{tools-697R1uqn.mjs → tools-BtsrQnNS.mjs} +1 -1
- package/dist/{tools-lotMyxIE.cjs → tools-CxJp4T1T.cjs} +1 -1
- package/dist/{uninstall-CYO7EDjO.mjs → uninstall-DOb2mTwV.mjs} +3 -3
- package/dist/{uninstall-CRu96len.cjs → uninstall-DWNYvewQ.cjs} +3 -3
- package/package.json +7 -7
- package/dist/selfCheck-ClVv8NK3.mjs +0 -84
|
@@ -1,70 +1,70 @@
|
|
|
1
|
-
import { i as isClaudeSessionId, g as extractCompleteLines, h as decideBackfill, j as parseTerminalHookPayload, k as decideMirrorBinding, M as MIRROR_BACKFILL_LINES_DEFAULT, m as mirrorLineKey, n as mirrorLocalId, o as initializeOwnedWorktree, e as summarizeSpawnSessionForLog, q as startAgentVersionChecks, W as WORKTREE_CAPABILITY_VERSION, t as currentWorktreeService } from './mirrorProtocol-
|
|
2
|
-
import { P as PI_ADAPTER_INSTALL_HINT, s as sanitizeSpawnModel } from './piRunnerArgs-
|
|
1
|
+
import { i as isClaudeSessionId, g as extractCompleteLines, h as decideBackfill, j as parseTerminalHookPayload, k as decideMirrorBinding, M as MIRROR_BACKFILL_LINES_DEFAULT, m as mirrorLineKey, n as mirrorLocalId, o as initializeOwnedWorktree, e as summarizeSpawnSessionForLog, q as startAgentVersionChecks, W as WORKTREE_CAPABILITY_VERSION, t as currentWorktreeService } from './mirrorProtocol-6IFGPpjJ.mjs';
|
|
2
|
+
import { P as PI_ADAPTER_INSTALL_HINT, s as sanitizeSpawnModel } from './piRunnerArgs-AT8QJY7x.mjs';
|
|
3
3
|
import fs from 'fs/promises';
|
|
4
4
|
import * as tmp from 'tmp';
|
|
5
5
|
import axios from 'axios';
|
|
6
|
-
import { T as TurnActivityTracker, A as ApiClient } from './api-
|
|
7
|
-
import { S as SPAWN_AGENTS, i as isSpawnAgent, s as sanitizeSpawnPermissionMode, r as resolveSpawnPermissionMode, a as resolveFirstMessageMeta } from './spawnAgents-
|
|
8
|
-
import { l as logger } from './logger
|
|
6
|
+
import { T as TurnActivityTracker, A as ApiClient } from './api-Dib0dmqC.mjs';
|
|
7
|
+
import { S as SPAWN_AGENTS, i as isSpawnAgent, s as sanitizeSpawnPermissionMode, r as resolveSpawnPermissionMode, a as resolveFirstMessageMeta } from './spawnAgents-Bw6j4tqz.mjs';
|
|
8
|
+
import { l as logger } from './logger--vAVtXB_.mjs';
|
|
9
9
|
import { readdirSync, statSync, unlinkSync, realpathSync, mkdirSync, writeFileSync, accessSync, constants as constants$1, existsSync, readFileSync, openSync, fsyncSync, closeSync, renameSync } from 'node:fs';
|
|
10
10
|
import { join, isAbsolute, resolve, dirname, sep, basename, delimiter } from 'node:path';
|
|
11
|
-
import { p as pruneStaleCompileCaches } from './index-
|
|
12
|
-
import { a as authAndSetupMachineIfNeeded } from './auth-
|
|
13
|
-
import { c as configuration, f as ensurePrivateDirectorySync, w as writePrivateFileSync } from './configuration-
|
|
11
|
+
import { p as pruneStaleCompileCaches } from './index-BYgfern_.mjs';
|
|
12
|
+
import { a as authAndSetupMachineIfNeeded } from './auth-BRjd2esb.mjs';
|
|
13
|
+
import { c as configuration, f as ensurePrivateDirectorySync, w as writePrivateFileSync } from './configuration-DVrb61aY.mjs';
|
|
14
14
|
import { spawn, execSync } from 'child_process';
|
|
15
|
-
import { p as packageJson } from './package-
|
|
16
|
-
import {
|
|
17
|
-
import { s as spawnHappyCLI } from './spawnHappyCLI-
|
|
18
|
-
import { b as readPersistedSessions, r as readSettings, l as latchKeepAwake, q as reportSignature, s as decideDaemonHibernation, t as nextCheckDelay, v as persistSession, d as readDaemonState, x as acquireDaemonLock, a as resolveCheckMs, y as resolveIdleMs, z as deletePersistedSessions, A as writeDaemonState, B as writeSettings, C as settingIdleMs, u as updateSettings, D as releaseDaemonLock } from './persistence-
|
|
19
|
-
import { i as isDaemonRunningCurrentlyInstalledHappyVersion, b as stopDaemon,
|
|
20
|
-
import { e as sendUserMessage, f as readSessionMetadata, r as readSessionTranscript, l as listAccountSessions, a as listSessions, M as MAX_READ_LIMIT, s as sessionWebUrl, g as waitForSessionKey, d as archiveSession, j as analyzeLatestTurn, k as readSessionLog, m as TURN_WINDOW, n as userPromptText } from './sessionOps-
|
|
15
|
+
import { p as packageJson } from './package-B7B03ejW.mjs';
|
|
16
|
+
import { g as globalPrefixForPackage, a as getEnvironmentInfo } from './doctor-0BiGwJXk.mjs';
|
|
17
|
+
import { s as spawnHappyCLI } from './spawnHappyCLI-C2stUioM.mjs';
|
|
18
|
+
import { b as readPersistedSessions, r as readSettings, l as latchKeepAwake, q as reportSignature, s as decideDaemonHibernation, t as nextCheckDelay, v as persistSession, d as readDaemonState, x as acquireDaemonLock, a as resolveCheckMs, y as resolveIdleMs, z as deletePersistedSessions, A as writeDaemonState, B as writeSettings, C as settingIdleMs, u as updateSettings, D as rewriteCredentialsForRelay, g as readCredentials, E as releaseDaemonLock } from './persistence-DTk4sNpd.mjs';
|
|
19
|
+
import { i as isDaemonRunningCurrentlyInstalledHappyVersion, b as stopDaemon, o as cleanupDaemonState } from './controlClient-BYKyGyxj.mjs';
|
|
20
|
+
import { e as sendUserMessage, f as readSessionMetadata, r as readSessionTranscript, l as listAccountSessions, a as listSessions, M as MAX_READ_LIMIT, s as sessionWebUrl, g as waitForSessionKey, d as archiveSession, j as analyzeLatestTurn, k as readSessionLog, m as TURN_WINDOW, n as userPromptText } from './sessionOps-BVoXe12O.mjs';
|
|
21
21
|
import fastify from 'fastify';
|
|
22
22
|
import { z } from 'zod';
|
|
23
23
|
import { validatorCompiler, serializerCompiler } from 'fastify-type-provider-zod';
|
|
24
|
-
import { d as decodeBase64, e as encodeBase64, h as decrypt } from './authRelay-
|
|
24
|
+
import { d as decodeBase64, s as sameRelay, e as encodeBase64, h as decrypt } from './authRelay-DhQhkBvX.mjs';
|
|
25
25
|
import { randomBytes, createHash, timingSafeEqual, randomUUID } from 'node:crypto';
|
|
26
26
|
import { c as checkPreviewPath } from './previewPath-CXN4Vag0.mjs';
|
|
27
|
-
import { a as BACKGROUND_TASKS_MAX,
|
|
28
|
-
import { b as sanitizeRateLimitReport } from './rateLimitWindows-
|
|
29
|
-
import { f as formatEditConflictNotice, b as SESSION_PEER_SENT_FROM, s as sendPeerMessage, l as listPeerSessions, C as CLI_PEER_SENDER_ID } from './peerTools-
|
|
27
|
+
import { a as BACKGROUND_TASKS_MAX, c as BACKGROUND_TASK_DESCRIPTION_MAX, d as BackgroundTaskTracker } from './backgroundTaskActivity-BVwJBl02.mjs';
|
|
28
|
+
import { b as sanitizeRateLimitReport } from './rateLimitWindows-XrJiiBpU.mjs';
|
|
29
|
+
import { f as formatEditConflictNotice, b as SESSION_PEER_SENT_FROM, s as sendPeerMessage, l as listPeerSessions, C as CLI_PEER_SENDER_ID } from './peerTools-3R9RUARX.mjs';
|
|
30
30
|
import os, { hostname, homedir, userInfo, tmpdir } from 'node:os';
|
|
31
|
-
import { c as RemoteCallBudget, e as REMOTE_WRITE_CALLS_PER_MINUTE, d as deliverToSession, g as guardRemoteSessionOpsRequest, h as remoteError, i as REMOTE_OP_DEADLINE_MS, j as formatRemoteAuditLine, k as REMOTE_SEND_COMMIT_DEADLINE_MS, m as REMOTE_RESUME_WAIT_MS, n as capRemoteTranscript, o as capRemoteText, p as REMOTE_ANSWER_MAX_BYTES, q as REMOTE_TITLE_MAX_BYTES } from './remoteSessionClient-
|
|
32
|
-
import { assistantHome, bootstrapAssistantHome } from './bootstrap-
|
|
33
|
-
import { refreshAgentHomes, locateClaudeConversation, agentHomeSpawnEnv } from './index-
|
|
31
|
+
import { c as RemoteCallBudget, e as REMOTE_WRITE_CALLS_PER_MINUTE, d as deliverToSession, g as guardRemoteSessionOpsRequest, h as remoteError, i as REMOTE_OP_DEADLINE_MS, j as formatRemoteAuditLine, k as REMOTE_SEND_COMMIT_DEADLINE_MS, m as REMOTE_RESUME_WAIT_MS, n as capRemoteTranscript, o as capRemoteText, p as REMOTE_ANSWER_MAX_BYTES, q as REMOTE_TITLE_MAX_BYTES } from './remoteSessionClient-DRb2Jr5s.mjs';
|
|
32
|
+
import { assistantHome, bootstrapAssistantHome } from './bootstrap-BUagGC_-.mjs';
|
|
33
|
+
import { refreshAgentHomes, locateClaudeConversation, agentHomeSpawnEnv } from './index-Bvldtdny.mjs';
|
|
34
34
|
import { existsSync as existsSync$1, statSync as statSync$1, mkdtempSync, rmSync } from 'fs';
|
|
35
35
|
import { join as join$1 } from 'path';
|
|
36
36
|
import { spawn as spawn$1, execFile, spawnSync } from 'node:child_process';
|
|
37
37
|
import { p as projectPath } from './projectPath-BTBIMB57.mjs';
|
|
38
38
|
import { d as daemonEndpointsMatch, r as resolveClaudeCredentialReadiness } from './doctorReadiness-C208SMN9.mjs';
|
|
39
|
-
import { g as getInitialMachineMetadata, a as getStartupCliAvailability } from './machineMetadata-
|
|
40
|
-
import { buildResumeLaunch } from './handleResumeCommand-
|
|
39
|
+
import { g as getInitialMachineMetadata, a as getStartupCliAvailability } from './machineMetadata-B1H9gNbN.mjs';
|
|
40
|
+
import { buildResumeLaunch } from './handleResumeCommand-CgjpsdDe.mjs';
|
|
41
|
+
import { u as ServerMigrateNoticeSchema, v as AUTOMATION_SUMMARY_MAX_CHARS, w as AUTOMATION_PRECHECK_OUTPUT_MAX_CHARS, x as AUTOMATION_PRECHECK_DEFAULT_TIMEOUT_MS, a as AUTOMATION_PRECHECK_MAX_TIMEOUT_MS, y as AUTOMATION_CLAIM_MAX_RUNS, z as AUTOMATION_DAEMON_CAPABILITY_PRECHECK, D as AUTOMATION_DEFAULT_LEASE_MS, i as isAutomationRunTerminal } from './index-Clqlu17M.mjs';
|
|
41
42
|
import { access, symlink, readFile, rm, unlink, readlink, lstat, constants, stat, open } from 'node:fs/promises';
|
|
42
43
|
import { p as parseExactVersion, c as compareExactVersions, f as fetchCliUpdateState, r as resolveCliUpdateCheckInterval, D as DEFAULT_CLI_UPDATE_CHECK_INTERVAL_MS } from './cliUpdate-Y34VGe9Y.mjs';
|
|
43
|
-
import { c as createAutomationsClient, i as isAutomationsUnavailable, d as AutomationsRequestError } from './client-
|
|
44
|
+
import { c as createAutomationsClient, i as isAutomationsUnavailable, d as AutomationsRequestError } from './client-CnlkkrZO.mjs';
|
|
44
45
|
import { createRequire } from 'node:module';
|
|
45
46
|
import { g as getProjectPath } from './path-D2wdaNSk.mjs';
|
|
46
47
|
import { b as extractClaudeEditPaths } from './editPaths-BVfS_FFL.mjs';
|
|
47
|
-
import { s as startFileWatcher } from './startFileWatcher-
|
|
48
|
-
import { I as InvalidateSync } from './sync-
|
|
48
|
+
import { s as startFileWatcher } from './startFileWatcher-CR09Snmz.mjs';
|
|
49
|
+
import { I as InvalidateSync } from './sync-DbW07iQS.mjs';
|
|
49
50
|
import { R as RawJSONLinesSchema } from './types-CkqAACXx.mjs';
|
|
50
51
|
import { t as tmuxArgs, a as scrubTmuxClientEnv, s as shellescape } from './tmuxSocket-B8Yx20sT.mjs';
|
|
51
|
-
import { p as processIdentityFields, r as readSessionLock, t as terminateProcess } from './sessionLock-
|
|
52
|
+
import { p as processIdentityFields, r as readSessionLock, t as terminateProcess } from './sessionLock-DBdtZGOL.mjs';
|
|
52
53
|
import { findAllHappyProcesses } from './doctor-BPkYWSuq.mjs';
|
|
53
54
|
import { T as TEAM_SKILL } from './resources-BdFBQi8r.mjs';
|
|
54
55
|
import { promisify } from 'node:util';
|
|
55
|
-
import { u as AUTOMATION_SUMMARY_MAX_CHARS, v as AUTOMATION_PRECHECK_OUTPUT_MAX_CHARS, w as AUTOMATION_PRECHECK_DEFAULT_TIMEOUT_MS, a as AUTOMATION_PRECHECK_MAX_TIMEOUT_MS, x as AUTOMATION_CLAIM_MAX_RUNS, y as AUTOMATION_DAEMON_CAPABILITY_PRECHECK, z as AUTOMATION_DEFAULT_LEASE_MS, i as isAutomationRunTerminal } from './index-DMy3OCBe.mjs';
|
|
56
56
|
import { c as clipText, r as renderAction, b as renderTemplate } from './template-CiOPa2rd.mjs';
|
|
57
57
|
import { d as detectDaemonSupervisor } from './daemonSupervisor-C6urv3_8.mjs';
|
|
58
58
|
import { d as describeAgentHome } from './loginShellEnv-Dw8M7tkI.mjs';
|
|
59
|
-
import './sessionModeFile-
|
|
60
|
-
import './lidState-
|
|
59
|
+
import './sessionModeFile-ByLbXTbg.mjs';
|
|
60
|
+
import './lidState-DNMlIhX0.mjs';
|
|
61
61
|
import 'os';
|
|
62
62
|
import 'node:events';
|
|
63
63
|
import 'socket.io-client';
|
|
64
|
-
import './attachmentLimits-
|
|
64
|
+
import './attachmentLimits-UyFn8fkQ.mjs';
|
|
65
65
|
import './limits-DIo7rEBR.mjs';
|
|
66
|
-
import './time-
|
|
67
|
-
import './registerCommonHandlers-
|
|
66
|
+
import './time-BuGWTVP6.mjs';
|
|
67
|
+
import './registerCommonHandlers-CvIedVRf.mjs';
|
|
68
68
|
import 'util';
|
|
69
69
|
import 'crypto';
|
|
70
70
|
import 'cross-spawn';
|
|
@@ -72,12 +72,12 @@ import '@paralleldrive/cuid2';
|
|
|
72
72
|
import './contentLogMetadata-BlWI0egu.mjs';
|
|
73
73
|
import 'chalk';
|
|
74
74
|
import 'tweetnacl';
|
|
75
|
-
import './browser-
|
|
75
|
+
import './browser-Dj_DYQEh.mjs';
|
|
76
76
|
import 'open';
|
|
77
77
|
import './ids-DU6sLx4C.mjs';
|
|
78
78
|
import 'url';
|
|
79
79
|
import './detectCLI-CSGMlV51.mjs';
|
|
80
|
-
import './localHappyAgentAuth-
|
|
80
|
+
import './localHappyAgentAuth-BezKSFDi.mjs';
|
|
81
81
|
import 'ps-list';
|
|
82
82
|
|
|
83
83
|
async function resolveRelaunchMetadata(snapshot, fetchServer) {
|
|
@@ -2030,6 +2030,52 @@ function spawnAgentUnavailableError(agent, availability) {
|
|
|
2030
2030
|
return null;
|
|
2031
2031
|
}
|
|
2032
2032
|
|
|
2033
|
+
function isAcceptableRelayUrl(url) {
|
|
2034
|
+
try {
|
|
2035
|
+
const parsed = new URL(url);
|
|
2036
|
+
const loopback = parsed.hostname === "localhost" || parsed.hostname === "127.0.0.1" || parsed.hostname === "[::1]";
|
|
2037
|
+
return parsed.protocol === "https:" || parsed.protocol === "http:" && loopback;
|
|
2038
|
+
} catch {
|
|
2039
|
+
return false;
|
|
2040
|
+
}
|
|
2041
|
+
}
|
|
2042
|
+
async function applyServerMigration(raw, deps) {
|
|
2043
|
+
const parsed = ServerMigrateNoticeSchema.safeParse(raw);
|
|
2044
|
+
if (!parsed.success) return { action: "ignored", reason: "malformed notice" };
|
|
2045
|
+
const notice = parsed.data;
|
|
2046
|
+
if (sameRelay(notice.url, deps.configuredServerUrl)) return { action: "ignored", reason: "already on that relay" };
|
|
2047
|
+
if (!isAcceptableRelayUrl(notice.url) || !isAcceptableRelayUrl(notice.webappUrl)) {
|
|
2048
|
+
return refuse(deps, `relay URL must be https: ${notice.url}`);
|
|
2049
|
+
}
|
|
2050
|
+
if (deps.env.HAPPY_SERVER_URL?.trim()) {
|
|
2051
|
+
return refuse(deps, `HAPPY_SERVER_URL is set in this daemon's environment; unset it (or point it at ${notice.url}) and restart the daemon`);
|
|
2052
|
+
}
|
|
2053
|
+
const credentials = await deps.readCredentials();
|
|
2054
|
+
if (!credentials) return refuse(deps, "no credentials on disk");
|
|
2055
|
+
let token;
|
|
2056
|
+
try {
|
|
2057
|
+
const response = await deps.fetch(`${notice.url}/v1/auth/migrate/complete`, {
|
|
2058
|
+
method: "POST",
|
|
2059
|
+
headers: { "content-type": "application/json", "X-Happy-Client": deps.clientId },
|
|
2060
|
+
body: JSON.stringify({ handoff: notice.handoff })
|
|
2061
|
+
});
|
|
2062
|
+
if (!response.ok) return refuse(deps, `${notice.url} refused the handoff (HTTP ${response.status})`);
|
|
2063
|
+
const body = await response.json();
|
|
2064
|
+
if (body.kind !== "daemon" || typeof body.token !== "string" || !body.token) return refuse(deps, `${notice.url} answered without a daemon token`);
|
|
2065
|
+
token = body.token;
|
|
2066
|
+
} catch (error) {
|
|
2067
|
+
return refuse(deps, `${notice.url} unreachable: ${error instanceof Error ? error.message : String(error)}`);
|
|
2068
|
+
}
|
|
2069
|
+
await deps.updateSettings((current) => ({ ...current, serverUrl: notice.url, webappUrl: notice.webappUrl }));
|
|
2070
|
+
await deps.rewriteCredentials(credentials, { token, authServerUrl: notice.url });
|
|
2071
|
+
deps.log(`[RELAY MOVE] Moved this machine from ${deps.configuredServerUrl} to ${notice.url}; handing over to a new daemon`);
|
|
2072
|
+
return { action: "moved", serverUrl: notice.url, webappUrl: notice.webappUrl };
|
|
2073
|
+
}
|
|
2074
|
+
function refuse(deps, reason) {
|
|
2075
|
+
deps.log(`[RELAY MOVE] Not moving this machine: ${reason}`);
|
|
2076
|
+
return { action: "refused", reason };
|
|
2077
|
+
}
|
|
2078
|
+
|
|
2033
2079
|
function str(value) {
|
|
2034
2080
|
return typeof value === "string" && value.length > 0 ? value : void 0;
|
|
2035
2081
|
}
|
|
@@ -6007,6 +6053,27 @@ async function startDaemon() {
|
|
|
6007
6053
|
});
|
|
6008
6054
|
apiMachine.setCliUpdateRetryHandler(updateController.retry);
|
|
6009
6055
|
apiMachine.setCliUpdateRequestHandler(updateController.request);
|
|
6056
|
+
let pendingRelayMove = null;
|
|
6057
|
+
let relayMoveInFlight = null;
|
|
6058
|
+
apiMachine.setServerMigrateHandler((notice) => {
|
|
6059
|
+
if (relayMoveInFlight || pendingRelayMove) return;
|
|
6060
|
+
relayMoveInFlight = applyServerMigration(notice, {
|
|
6061
|
+
configuredServerUrl: configuration.serverUrl,
|
|
6062
|
+
env: process.env,
|
|
6063
|
+
clientId: `cli-daemon/${configuration.currentCliVersion}`,
|
|
6064
|
+
fetch,
|
|
6065
|
+
readCredentials,
|
|
6066
|
+
rewriteCredentials: rewriteCredentialsForRelay,
|
|
6067
|
+
updateSettings,
|
|
6068
|
+
log: (message) => logger.warn(message)
|
|
6069
|
+
}).then((outcome) => {
|
|
6070
|
+
if (outcome.action === "moved") pendingRelayMove = { serverUrl: outcome.serverUrl };
|
|
6071
|
+
}).catch((error) => {
|
|
6072
|
+
logger.warn("[RELAY MOVE] Failed:", error);
|
|
6073
|
+
}).finally(() => {
|
|
6074
|
+
relayMoveInFlight = null;
|
|
6075
|
+
});
|
|
6076
|
+
});
|
|
6010
6077
|
const refreshCliUpdate = () => updateController.refresh().catch((error) => {
|
|
6011
6078
|
logger.debug("[DAEMON RUN] CLI update policy check failed:", error);
|
|
6012
6079
|
});
|
|
@@ -6044,8 +6111,9 @@ async function startDaemon() {
|
|
|
6044
6111
|
} catch {
|
|
6045
6112
|
}
|
|
6046
6113
|
}
|
|
6047
|
-
|
|
6048
|
-
|
|
6114
|
+
const relayMove = pendingRelayMove;
|
|
6115
|
+
if ((bundleReplaced || relayMove) && !teamWorker?.busy && !automationRunner?.busy && !updateController.isRunning() && !turnActivity.hasActiveTurn() && !backgroundTasks.hasAny()) {
|
|
6116
|
+
const preflight = bundleReplaced ? await preflightNewBundle(bundlePath) : { action: "proceed" };
|
|
6049
6117
|
if (preflight.action === "hold") {
|
|
6050
6118
|
if (lastHandoverHold !== preflight.reason) {
|
|
6051
6119
|
lastHandoverHold = preflight.reason;
|
|
@@ -6056,7 +6124,7 @@ async function startDaemon() {
|
|
|
6056
6124
|
}
|
|
6057
6125
|
if (teamWorker?.busy || automationRunner?.busy || updateController.isRunning() || turnActivity.hasActiveTurn() || backgroundTasks.hasAny()) return;
|
|
6058
6126
|
lastHandoverHold = null;
|
|
6059
|
-
logger.debug("[DAEMON RUN] Daemon bundle replaced on disk and verified, handing off to new daemon");
|
|
6127
|
+
logger.debug(relayMove ? `[DAEMON RUN] Relay moved to ${relayMove.serverUrl}; handing off to a new daemon on the new settings` : "[DAEMON RUN] Daemon bundle replaced on disk and verified, handing off to new daemon");
|
|
6060
6128
|
teamWorker?.stop();
|
|
6061
6129
|
automationRunner?.stop();
|
|
6062
6130
|
clearInterval(restartOnStaleVersionAndHeartbeat);
|
|
@@ -1,72 +1,72 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var mirrorProtocol = require('./mirrorProtocol-
|
|
4
|
-
var piRunnerArgs = require('./piRunnerArgs-
|
|
3
|
+
var mirrorProtocol = require('./mirrorProtocol-qKflWTX_.cjs');
|
|
4
|
+
var piRunnerArgs = require('./piRunnerArgs-CRQVR9o-.cjs');
|
|
5
5
|
var fs = require('fs/promises');
|
|
6
6
|
var tmp = require('tmp');
|
|
7
7
|
var axios = require('axios');
|
|
8
|
-
var api = require('./api-
|
|
9
|
-
var spawnAgents = require('./spawnAgents-
|
|
10
|
-
var logger = require('./logger-
|
|
8
|
+
var api = require('./api-JANhFdZV.cjs');
|
|
9
|
+
var spawnAgents = require('./spawnAgents-BVEaz35W.cjs');
|
|
10
|
+
var logger = require('./logger-DXTWlPzP.cjs');
|
|
11
11
|
var node_fs = require('node:fs');
|
|
12
12
|
var path = require('node:path');
|
|
13
|
-
var index$2 = require('./index-
|
|
14
|
-
var auth = require('./auth-
|
|
15
|
-
var configuration = require('./configuration-
|
|
13
|
+
var index$2 = require('./index-BRClDe07.cjs');
|
|
14
|
+
var auth = require('./auth-DgIV0Cvt.cjs');
|
|
15
|
+
var configuration = require('./configuration-4TGMrjul.cjs');
|
|
16
16
|
var child_process = require('child_process');
|
|
17
|
-
var _package = require('./package-
|
|
18
|
-
var doctor = require('./doctor-
|
|
19
|
-
var spawnHappyCLI = require('./spawnHappyCLI-
|
|
20
|
-
var persistence = require('./persistence-
|
|
21
|
-
var controlClient = require('./controlClient-
|
|
22
|
-
var sessionOps = require('./sessionOps-
|
|
17
|
+
var _package = require('./package-DY4zTbKS.cjs');
|
|
18
|
+
var doctor = require('./doctor-BshRnjLi.cjs');
|
|
19
|
+
var spawnHappyCLI = require('./spawnHappyCLI-fzUagkKV.cjs');
|
|
20
|
+
var persistence = require('./persistence-BfX72dne.cjs');
|
|
21
|
+
var controlClient = require('./controlClient-BTaZlbC6.cjs');
|
|
22
|
+
var sessionOps = require('./sessionOps-BAnr7n8t.cjs');
|
|
23
23
|
var fastify = require('fastify');
|
|
24
24
|
var z = require('zod');
|
|
25
25
|
var fastifyTypeProviderZod = require('fastify-type-provider-zod');
|
|
26
|
-
var authRelay = require('./authRelay-
|
|
26
|
+
var authRelay = require('./authRelay-Dy1qU9td.cjs');
|
|
27
27
|
var node_crypto = require('node:crypto');
|
|
28
28
|
var previewPath = require('./previewPath-B0rBdhy1.cjs');
|
|
29
29
|
var backgroundTaskActivity = require('./backgroundTaskActivity-CBvUdj39.cjs');
|
|
30
|
-
var rateLimitWindows = require('./rateLimitWindows-
|
|
31
|
-
var peerTools = require('./peerTools-
|
|
30
|
+
var rateLimitWindows = require('./rateLimitWindows-Czb7_7cK.cjs');
|
|
31
|
+
var peerTools = require('./peerTools-iy3_6Yc5.cjs');
|
|
32
32
|
var os = require('node:os');
|
|
33
|
-
var remoteSessionClient = require('./remoteSessionClient-
|
|
34
|
-
var bootstrap = require('./bootstrap-
|
|
35
|
-
var index$1 = require('./index-
|
|
33
|
+
var remoteSessionClient = require('./remoteSessionClient-BRTIOX5b.cjs');
|
|
34
|
+
var bootstrap = require('./bootstrap-DCQ87Aan.cjs');
|
|
35
|
+
var index$1 = require('./index-BYOZ_8WZ.cjs');
|
|
36
36
|
var fs$1 = require('fs');
|
|
37
37
|
var path$2 = require('path');
|
|
38
38
|
var node_child_process = require('node:child_process');
|
|
39
39
|
var projectPath = require('./projectPath-ChLhdOyt.cjs');
|
|
40
40
|
var doctorReadiness = require('./doctorReadiness-BCZGcN0a.cjs');
|
|
41
|
-
var machineMetadata = require('./machineMetadata-
|
|
42
|
-
var handleResumeCommand = require('./handleResumeCommand-
|
|
41
|
+
var machineMetadata = require('./machineMetadata-DcUupMje.cjs');
|
|
42
|
+
var handleResumeCommand = require('./handleResumeCommand-BwnUZmbo.cjs');
|
|
43
|
+
var index = require('./index-_l1Sdmbi.cjs');
|
|
43
44
|
var promises = require('node:fs/promises');
|
|
44
45
|
var cliUpdate = require('./cliUpdate-DsKXPFYp.cjs');
|
|
45
|
-
var client = require('./client-
|
|
46
|
+
var client = require('./client-C4zKGjiJ.cjs');
|
|
46
47
|
var module$1 = require('node:module');
|
|
47
48
|
var path$1 = require('./path-B7zW-WwE.cjs');
|
|
48
49
|
var editPaths = require('./editPaths-Bqp4OFPw.cjs');
|
|
49
|
-
var startFileWatcher = require('./startFileWatcher-
|
|
50
|
-
var sync = require('./sync-
|
|
50
|
+
var startFileWatcher = require('./startFileWatcher-Bqlqjt93.cjs');
|
|
51
|
+
var sync = require('./sync-Dhmtk66S.cjs');
|
|
51
52
|
var types = require('./types-CRS-srZK.cjs');
|
|
52
53
|
var tmuxSocket = require('./tmuxSocket-D-Xt6Vn-.cjs');
|
|
53
|
-
var sessionLock = require('./sessionLock-
|
|
54
|
+
var sessionLock = require('./sessionLock-DWX6BbiU.cjs');
|
|
54
55
|
var doctor$1 = require('./doctor-u46qYYKX.cjs');
|
|
55
56
|
var resources = require('./resources-JDPugcDq.cjs');
|
|
56
57
|
var node_util = require('node:util');
|
|
57
|
-
var index = require('./index-De8L5lFK.cjs');
|
|
58
58
|
var template = require('./template-BaHAmH2K.cjs');
|
|
59
59
|
var daemonSupervisor = require('./daemonSupervisor-B-SPSqhs.cjs');
|
|
60
60
|
var loginShellEnv = require('./loginShellEnv-BkuYtExZ.cjs');
|
|
61
|
-
require('./sessionModeFile-
|
|
62
|
-
require('./lidState-
|
|
61
|
+
require('./sessionModeFile-CLLdidiJ.cjs');
|
|
62
|
+
require('./lidState-BeOwj6eW.cjs');
|
|
63
63
|
require('os');
|
|
64
64
|
require('node:events');
|
|
65
65
|
require('socket.io-client');
|
|
66
|
-
require('./attachmentLimits-
|
|
66
|
+
require('./attachmentLimits-SqeAHrVC.cjs');
|
|
67
67
|
require('./limits-C-a7gr04.cjs');
|
|
68
|
-
require('./time-
|
|
69
|
-
require('./registerCommonHandlers-
|
|
68
|
+
require('./time-A6zR3Iy6.cjs');
|
|
69
|
+
require('./registerCommonHandlers-C0_fyBQ0.cjs');
|
|
70
70
|
require('util');
|
|
71
71
|
require('crypto');
|
|
72
72
|
require('cross-spawn');
|
|
@@ -74,12 +74,12 @@ require('@paralleldrive/cuid2');
|
|
|
74
74
|
require('./contentLogMetadata-ZSFk_NjQ.cjs');
|
|
75
75
|
require('chalk');
|
|
76
76
|
require('tweetnacl');
|
|
77
|
-
require('./browser-
|
|
77
|
+
require('./browser-CSKhc0Bl.cjs');
|
|
78
78
|
require('open');
|
|
79
79
|
require('./ids-B6ZC0HGt.cjs');
|
|
80
80
|
require('url');
|
|
81
81
|
require('./detectCLI-DR9ZaN6B.cjs');
|
|
82
|
-
require('./localHappyAgentAuth-
|
|
82
|
+
require('./localHappyAgentAuth-Br-mgogg.cjs');
|
|
83
83
|
require('ps-list');
|
|
84
84
|
|
|
85
85
|
var _documentCurrentScript = typeof document !== 'undefined' ? document.currentScript : null;
|
|
@@ -2052,6 +2052,52 @@ function spawnAgentUnavailableError(agent, availability) {
|
|
|
2052
2052
|
return null;
|
|
2053
2053
|
}
|
|
2054
2054
|
|
|
2055
|
+
function isAcceptableRelayUrl(url) {
|
|
2056
|
+
try {
|
|
2057
|
+
const parsed = new URL(url);
|
|
2058
|
+
const loopback = parsed.hostname === "localhost" || parsed.hostname === "127.0.0.1" || parsed.hostname === "[::1]";
|
|
2059
|
+
return parsed.protocol === "https:" || parsed.protocol === "http:" && loopback;
|
|
2060
|
+
} catch {
|
|
2061
|
+
return false;
|
|
2062
|
+
}
|
|
2063
|
+
}
|
|
2064
|
+
async function applyServerMigration(raw, deps) {
|
|
2065
|
+
const parsed = index.ServerMigrateNoticeSchema.safeParse(raw);
|
|
2066
|
+
if (!parsed.success) return { action: "ignored", reason: "malformed notice" };
|
|
2067
|
+
const notice = parsed.data;
|
|
2068
|
+
if (authRelay.sameRelay(notice.url, deps.configuredServerUrl)) return { action: "ignored", reason: "already on that relay" };
|
|
2069
|
+
if (!isAcceptableRelayUrl(notice.url) || !isAcceptableRelayUrl(notice.webappUrl)) {
|
|
2070
|
+
return refuse(deps, `relay URL must be https: ${notice.url}`);
|
|
2071
|
+
}
|
|
2072
|
+
if (deps.env.HAPPY_SERVER_URL?.trim()) {
|
|
2073
|
+
return refuse(deps, `HAPPY_SERVER_URL is set in this daemon's environment; unset it (or point it at ${notice.url}) and restart the daemon`);
|
|
2074
|
+
}
|
|
2075
|
+
const credentials = await deps.readCredentials();
|
|
2076
|
+
if (!credentials) return refuse(deps, "no credentials on disk");
|
|
2077
|
+
let token;
|
|
2078
|
+
try {
|
|
2079
|
+
const response = await deps.fetch(`${notice.url}/v1/auth/migrate/complete`, {
|
|
2080
|
+
method: "POST",
|
|
2081
|
+
headers: { "content-type": "application/json", "X-Happy-Client": deps.clientId },
|
|
2082
|
+
body: JSON.stringify({ handoff: notice.handoff })
|
|
2083
|
+
});
|
|
2084
|
+
if (!response.ok) return refuse(deps, `${notice.url} refused the handoff (HTTP ${response.status})`);
|
|
2085
|
+
const body = await response.json();
|
|
2086
|
+
if (body.kind !== "daemon" || typeof body.token !== "string" || !body.token) return refuse(deps, `${notice.url} answered without a daemon token`);
|
|
2087
|
+
token = body.token;
|
|
2088
|
+
} catch (error) {
|
|
2089
|
+
return refuse(deps, `${notice.url} unreachable: ${error instanceof Error ? error.message : String(error)}`);
|
|
2090
|
+
}
|
|
2091
|
+
await deps.updateSettings((current) => ({ ...current, serverUrl: notice.url, webappUrl: notice.webappUrl }));
|
|
2092
|
+
await deps.rewriteCredentials(credentials, { token, authServerUrl: notice.url });
|
|
2093
|
+
deps.log(`[RELAY MOVE] Moved this machine from ${deps.configuredServerUrl} to ${notice.url}; handing over to a new daemon`);
|
|
2094
|
+
return { action: "moved", serverUrl: notice.url, webappUrl: notice.webappUrl };
|
|
2095
|
+
}
|
|
2096
|
+
function refuse(deps, reason) {
|
|
2097
|
+
deps.log(`[RELAY MOVE] Not moving this machine: ${reason}`);
|
|
2098
|
+
return { action: "refused", reason };
|
|
2099
|
+
}
|
|
2100
|
+
|
|
2055
2101
|
function str(value) {
|
|
2056
2102
|
return typeof value === "string" && value.length > 0 ? value : void 0;
|
|
2057
2103
|
}
|
|
@@ -2651,7 +2697,7 @@ function parseJsonObject(text) {
|
|
|
2651
2697
|
return null;
|
|
2652
2698
|
}
|
|
2653
2699
|
}
|
|
2654
|
-
function resolveSdkClaudeBinary(platform = process.platform, arch = process.arch, resolver = (s) => module$1.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('run-
|
|
2700
|
+
function resolveSdkClaudeBinary(platform = process.platform, arch = process.arch, resolver = (s) => module$1.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('run-CKe_WeLW.cjs', document.baseURI).href))).resolve(s)) {
|
|
2655
2701
|
const platformArch = `${platform}-${arch}`;
|
|
2656
2702
|
const candidates = [
|
|
2657
2703
|
`@anthropic-ai/claude-agent-sdk-${platformArch}/claude`,
|
|
@@ -6029,6 +6075,27 @@ async function startDaemon() {
|
|
|
6029
6075
|
});
|
|
6030
6076
|
apiMachine.setCliUpdateRetryHandler(updateController.retry);
|
|
6031
6077
|
apiMachine.setCliUpdateRequestHandler(updateController.request);
|
|
6078
|
+
let pendingRelayMove = null;
|
|
6079
|
+
let relayMoveInFlight = null;
|
|
6080
|
+
apiMachine.setServerMigrateHandler((notice) => {
|
|
6081
|
+
if (relayMoveInFlight || pendingRelayMove) return;
|
|
6082
|
+
relayMoveInFlight = applyServerMigration(notice, {
|
|
6083
|
+
configuredServerUrl: configuration.configuration.serverUrl,
|
|
6084
|
+
env: process.env,
|
|
6085
|
+
clientId: `cli-daemon/${configuration.configuration.currentCliVersion}`,
|
|
6086
|
+
fetch,
|
|
6087
|
+
readCredentials: persistence.readCredentials,
|
|
6088
|
+
rewriteCredentials: persistence.rewriteCredentialsForRelay,
|
|
6089
|
+
updateSettings: persistence.updateSettings,
|
|
6090
|
+
log: (message) => logger.logger.warn(message)
|
|
6091
|
+
}).then((outcome) => {
|
|
6092
|
+
if (outcome.action === "moved") pendingRelayMove = { serverUrl: outcome.serverUrl };
|
|
6093
|
+
}).catch((error) => {
|
|
6094
|
+
logger.logger.warn("[RELAY MOVE] Failed:", error);
|
|
6095
|
+
}).finally(() => {
|
|
6096
|
+
relayMoveInFlight = null;
|
|
6097
|
+
});
|
|
6098
|
+
});
|
|
6032
6099
|
const refreshCliUpdate = () => updateController.refresh().catch((error) => {
|
|
6033
6100
|
logger.logger.debug("[DAEMON RUN] CLI update policy check failed:", error);
|
|
6034
6101
|
});
|
|
@@ -6066,8 +6133,9 @@ async function startDaemon() {
|
|
|
6066
6133
|
} catch {
|
|
6067
6134
|
}
|
|
6068
6135
|
}
|
|
6069
|
-
|
|
6070
|
-
|
|
6136
|
+
const relayMove = pendingRelayMove;
|
|
6137
|
+
if ((bundleReplaced || relayMove) && !teamWorker?.busy && !automationRunner?.busy && !updateController.isRunning() && !turnActivity.hasActiveTurn() && !backgroundTasks.hasAny()) {
|
|
6138
|
+
const preflight = bundleReplaced ? await preflightNewBundle(bundlePath) : { action: "proceed" };
|
|
6071
6139
|
if (preflight.action === "hold") {
|
|
6072
6140
|
if (lastHandoverHold !== preflight.reason) {
|
|
6073
6141
|
lastHandoverHold = preflight.reason;
|
|
@@ -6078,7 +6146,7 @@ async function startDaemon() {
|
|
|
6078
6146
|
}
|
|
6079
6147
|
if (teamWorker?.busy || automationRunner?.busy || updateController.isRunning() || turnActivity.hasActiveTurn() || backgroundTasks.hasAny()) return;
|
|
6080
6148
|
lastHandoverHold = null;
|
|
6081
|
-
logger.logger.debug("[DAEMON RUN] Daemon bundle replaced on disk and verified, handing off to new daemon");
|
|
6149
|
+
logger.logger.debug(relayMove ? `[DAEMON RUN] Relay moved to ${relayMove.serverUrl}; handing off to a new daemon on the new settings` : "[DAEMON RUN] Daemon bundle replaced on disk and verified, handing off to new daemon");
|
|
6082
6150
|
teamWorker?.stop();
|
|
6083
6151
|
automationRunner?.stop();
|
|
6084
6152
|
clearInterval(restartOnStaleVersionAndHeartbeat);
|
|
@@ -1,59 +1,59 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var os = require('node:os');
|
|
4
|
-
var sessionLock = require('./sessionLock-
|
|
5
|
-
var persistence = require('./persistence-
|
|
6
|
-
var defaultPermissionMode = require('./defaultPermissionMode-
|
|
4
|
+
var sessionLock = require('./sessionLock-DWX6BbiU.cjs');
|
|
5
|
+
var persistence = require('./persistence-BfX72dne.cjs');
|
|
6
|
+
var defaultPermissionMode = require('./defaultPermissionMode-BEWCqJU-.cjs');
|
|
7
7
|
var node_crypto = require('node:crypto');
|
|
8
|
-
var api = require('./api-
|
|
9
|
-
var logger = require('./logger-
|
|
10
|
-
var createSessionMetadata = require('./createSessionMetadata-
|
|
11
|
-
var _package = require('./package-
|
|
12
|
-
var index = require('./index-
|
|
8
|
+
var api = require('./api-JANhFdZV.cjs');
|
|
9
|
+
var logger = require('./logger-DXTWlPzP.cjs');
|
|
10
|
+
var createSessionMetadata = require('./createSessionMetadata-B2NynaWZ.cjs');
|
|
11
|
+
var _package = require('./package-DY4zTbKS.cjs');
|
|
12
|
+
var index = require('./index-_l1Sdmbi.cjs');
|
|
13
13
|
var forkBackfill = require('./forkBackfill-8eLDeS73.cjs');
|
|
14
|
-
var configuration = require('./configuration-
|
|
15
|
-
var controlClient = require('./controlClient-
|
|
16
|
-
var machineMetadata = require('./machineMetadata-
|
|
14
|
+
var configuration = require('./configuration-4TGMrjul.cjs');
|
|
15
|
+
var controlClient = require('./controlClient-BTaZlbC6.cjs');
|
|
16
|
+
var machineMetadata = require('./machineMetadata-DcUupMje.cjs');
|
|
17
17
|
var projectPath = require('./projectPath-ChLhdOyt.cjs');
|
|
18
18
|
var path = require('node:path');
|
|
19
19
|
var permissionMode = require('./permissionMode-CrV-XuMs.cjs');
|
|
20
|
-
var authRelay = require('./authRelay-
|
|
20
|
+
var authRelay = require('./authRelay-Dy1qU9td.cjs');
|
|
21
21
|
var promises = require('node:fs/promises');
|
|
22
|
-
var attachmentContent = require('./attachmentContent-
|
|
22
|
+
var attachmentContent = require('./attachmentContent-bpQTBJ0y.cjs');
|
|
23
23
|
var transcriptCursor = require('./transcriptCursor-DcXGLeSc.cjs');
|
|
24
24
|
var startupPlan = require('./startupPlan-BLMbfQIH.cjs');
|
|
25
25
|
require('node:fs');
|
|
26
26
|
require('zod');
|
|
27
27
|
require('axios');
|
|
28
|
-
require('./lidState-
|
|
28
|
+
require('./lidState-BeOwj6eW.cjs');
|
|
29
29
|
require('os');
|
|
30
30
|
require('child_process');
|
|
31
31
|
require('node:events');
|
|
32
32
|
require('socket.io-client');
|
|
33
|
-
require('./attachmentLimits-
|
|
33
|
+
require('./attachmentLimits-SqeAHrVC.cjs');
|
|
34
34
|
require('./limits-C-a7gr04.cjs');
|
|
35
|
-
require('./time-
|
|
36
|
-
require('./registerCommonHandlers-
|
|
35
|
+
require('./time-A6zR3Iy6.cjs');
|
|
36
|
+
require('./registerCommonHandlers-C0_fyBQ0.cjs');
|
|
37
37
|
require('util');
|
|
38
38
|
require('fs/promises');
|
|
39
39
|
require('crypto');
|
|
40
40
|
require('path');
|
|
41
41
|
require('cross-spawn');
|
|
42
42
|
require('@paralleldrive/cuid2');
|
|
43
|
-
require('./sync-
|
|
43
|
+
require('./sync-Dhmtk66S.cjs');
|
|
44
44
|
require('./backgroundTaskActivity-CBvUdj39.cjs');
|
|
45
45
|
require('./contentLogMetadata-ZSFk_NjQ.cjs');
|
|
46
46
|
require('chalk');
|
|
47
47
|
require('node:util');
|
|
48
48
|
require('./detectCLI-DR9ZaN6B.cjs');
|
|
49
49
|
require('fs');
|
|
50
|
-
require('./localHappyAgentAuth-
|
|
50
|
+
require('./localHappyAgentAuth-Br-mgogg.cjs');
|
|
51
51
|
require('tweetnacl');
|
|
52
52
|
require('url');
|
|
53
53
|
|
|
54
54
|
const DEFAULT_CLAUDE_MODEL = void 0;
|
|
55
55
|
const DEFAULT_CLAUDE_EFFORT = void 0;
|
|
56
|
-
const importRunClaudeDeps = () => Promise.resolve().then(function () { return require('./runClaudeDeps-
|
|
56
|
+
const importRunClaudeDeps = () => Promise.resolve().then(function () { return require('./runClaudeDeps-RRw-Nusc.cjs'); });
|
|
57
57
|
async function runClaude(credentials, options = {}) {
|
|
58
58
|
logger.logger.debug(`[CLAUDE] ===== CLAUDE MODE STARTING =====`);
|
|
59
59
|
logger.logger.debug(`[CLAUDE] This is the Claude agent, NOT Gemini`);
|
|
@@ -67,7 +67,7 @@ async function runClaude(credentials, options = {}) {
|
|
|
67
67
|
const isAssistantVariant = process.env.HAPPY_SESSION_VARIANT === "assistant";
|
|
68
68
|
if (isAssistantVariant) {
|
|
69
69
|
try {
|
|
70
|
-
const { bootstrapAssistantHome } = await Promise.resolve().then(function () { return require('./bootstrap-
|
|
70
|
+
const { bootstrapAssistantHome } = await Promise.resolve().then(function () { return require('./bootstrap-DCQ87Aan.cjs'); });
|
|
71
71
|
await bootstrapAssistantHome();
|
|
72
72
|
} catch (error) {
|
|
73
73
|
logger.logger.debug("[START] Assistant home bootstrap failed:", error);
|
|
@@ -187,7 +187,7 @@ async function runClaude(credentials, options = {}) {
|
|
|
187
187
|
}
|
|
188
188
|
if (!response) {
|
|
189
189
|
let offlineSessionId = null;
|
|
190
|
-
const { claudeLocal } = await Promise.resolve().then(function () { return require('./claudeLocal-
|
|
190
|
+
const { claudeLocal } = await Promise.resolve().then(function () { return require('./claudeLocal-CdIVnOZp.cjs'); });
|
|
191
191
|
const { createSessionScanner: createSessionScanner2 } = await loadDeps();
|
|
192
192
|
const reconnection = api.startOfflineReconnection({
|
|
193
193
|
serverUrl: configuration.configuration.serverUrl,
|
|
@@ -769,7 +769,11 @@ async function runClaude(credentials, options = {}) {
|
|
|
769
769
|
const accepted = await currentSession?.trySteer({
|
|
770
770
|
message: message.content.text,
|
|
771
771
|
mode: enhancedMode,
|
|
772
|
-
attachments: attachmentsForThisMessage
|
|
772
|
+
attachments: attachmentsForThisMessage,
|
|
773
|
+
// B-631: the localKey rides along as the steer's uuid, so Claude
|
|
774
|
+
// Code's command_lifecycle / interrupt receipt can name it when a
|
|
775
|
+
// Stop sweeps it before the model read it.
|
|
776
|
+
localKey: message.localKey
|
|
773
777
|
}) === true;
|
|
774
778
|
if (accepted) {
|
|
775
779
|
logger.logger.debug("User message steered into current turn:", {
|