very-happy-cli 0.2.158 → 0.2.160
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-DIDRig5G.cjs → AcpBackend-Bm2rdke8.cjs} +78 -76
- package/dist/{AcpBackend-vDVLHuYJ.mjs → AcpBackend-mzv8Dhba.mjs} +4 -2
- package/dist/{AcpSessionManager-C44U99CC.cjs → AcpSessionManager-BAY1Pggx.cjs} +9 -9
- package/dist/{AcpSessionManager-CmRjfhn3.mjs → AcpSessionManager-CoMWFVw3.mjs} +1 -1
- package/dist/BasePermissionHandler-CFHAxumV.cjs +157 -0
- package/dist/BasePermissionHandler-m3WVholL.mjs +155 -0
- package/dist/BaseReasoningProcessor-BFa9_rZA.cjs +200 -0
- package/dist/BaseReasoningProcessor-CYrKBXGm.mjs +198 -0
- package/dist/RemoteModeDisplay-D-HewyXg.mjs +150 -0
- package/dist/RemoteModeDisplay-NC1gPHtj.cjs +153 -0
- package/dist/agentAttachments-Dbw8iMCZ.cjs +20 -0
- package/dist/agentAttachments-M_B5qEF2.mjs +18 -0
- package/dist/agentGuidance-B5NATuFa.cjs +28 -0
- package/dist/agentGuidance-CQuNlNx8.mjs +20 -0
- package/dist/{agentHome-Dw8Jx_CJ.cjs → agentHome-CboCeKWq.cjs} +14 -28
- package/dist/{agentHome-CyLmGH5L.mjs → agentHome-Dj1C43aJ.mjs} +8 -22
- package/dist/api-CLMUr-SX.mjs +3339 -0
- package/dist/api-CgundNNX.cjs +3346 -0
- package/dist/{types-DIBF4U0Y.mjs → apiMachine-B9dLW_p5.mjs} +9116 -16015
- package/dist/{types-DnrPeN80.cjs → apiMachine-Bn8482VM.cjs} +9104 -16057
- package/dist/assistantTools-BTqPnlFl.cjs +380 -0
- package/dist/assistantTools-D6tuc6o4.mjs +376 -0
- package/dist/attachmentContent-DpiTJZb4.cjs +88 -0
- package/dist/attachmentContent-_kxRznNf.mjs +82 -0
- package/dist/attachmentLimits-CzVrqgLR.cjs +354 -0
- package/dist/attachmentLimits-yba1uHFO.mjs +348 -0
- package/dist/auth-BDOVh5h5.cjs +220 -0
- package/dist/auth-Cwutmdsa.mjs +225 -0
- package/dist/auth-PYHZQNPp.mjs +218 -0
- package/dist/auth-ba4WMYrN.cjs +227 -0
- package/dist/authRelay-BdYkC1Po.cjs +156 -0
- package/dist/authRelay-DSAvg1uv.mjs +143 -0
- package/dist/{auto-DZbNcTXx.cjs → auto-BOX_fgmR.cjs} +70 -79
- package/dist/{auto-BlMZPwOk.mjs → auto-BXu14yP_.mjs} +27 -36
- package/dist/backgroundTaskActivity-8PdPxrvy.mjs +149 -0
- package/dist/backgroundTaskActivity-CBvUdj39.cjs +157 -0
- package/dist/bootstrap-B5G1TijC.cjs +116 -0
- package/dist/bootstrap-hxXPCFMx.mjs +112 -0
- package/dist/browser-Y6Bl8L_O.cjs +22 -0
- package/dist/browser-jh2P0UVZ.mjs +20 -0
- package/dist/claudeCliPath-BqkaH2oR.mjs +8 -0
- package/dist/claudeCliPath-U4HHmV4r.cjs +10 -0
- package/dist/claudeLocal-BaY4fZKi.mjs +339 -0
- package/dist/claudeLocal-CRGG4Pea.cjs +343 -0
- package/dist/claudeLocalLauncher-D4T7MTqd.mjs +152 -0
- package/dist/claudeLocalLauncher-DyEbVzUN.cjs +154 -0
- package/dist/cliUpdate-DsKXPFYp.cjs +120 -0
- package/dist/cliUpdate-Y34VGe9Y.mjs +112 -0
- package/dist/client-3Ac-O4pw.cjs +104 -0
- package/dist/client-BPNbmtvO.cjs +119 -0
- package/dist/client-CeGKqqcJ.mjs +100 -0
- package/dist/client-ClR0K8zX.mjs +112 -0
- package/dist/codex/happyMcpStdioBridge.cjs +33 -14
- package/dist/codex/happyMcpStdioBridge.mjs +26 -7
- package/dist/codexAppServerClient-I3teiV-N.mjs +1088 -0
- package/dist/codexAppServerClient-q2FjnRcK.cjs +1090 -0
- package/dist/codexCommand-4zcccIoq.cjs +2088 -0
- package/dist/codexCommand-Cc9gcbdX.mjs +2086 -0
- package/dist/codexThreadFork-BH9IZPqD.cjs +350 -0
- package/dist/codexThreadFork-slzAseLx.mjs +338 -0
- package/dist/{config-BtPArqRH.mjs → config-CTx_jb-C.mjs} +7 -40
- package/dist/{config-DG84bjwF.cjs → config-Ci9Kpgwa.cjs} +26 -59
- package/dist/configuration-BSYpcPwE.cjs +181 -0
- package/dist/configuration-RfeNjFmd.mjs +170 -0
- package/dist/connect-BpOdzNbE.mjs +682 -0
- package/dist/connect-C2CiOUFs.cjs +684 -0
- package/dist/constants-BC4St0xd.mjs +11 -0
- package/dist/constants-VJ0N6WuG.cjs +17 -0
- package/dist/contentLogMetadata-BlWI0egu.mjs +51 -0
- package/dist/contentLogMetadata-ZSFk_NjQ.cjs +54 -0
- package/dist/context-DsDr6E2t.cjs +69 -0
- package/dist/context-H0Bcb9S_.mjs +65 -0
- package/dist/controlClient-BGbDcgWS.mjs +260 -0
- package/dist/controlClient-Bcwv3D21.cjs +279 -0
- package/dist/createSessionMetadata-BJxEnM-o.cjs +58 -0
- package/dist/createSessionMetadata-CVVkGjxV.mjs +54 -0
- package/dist/defaultPermissionMode-BnxJPVHT.mjs +4 -0
- package/dist/defaultPermissionMode-CxmTXUQR.cjs +7 -0
- package/dist/detectCLI-CSGMlV51.mjs +58 -0
- package/dist/detectCLI-DR9ZaN6B.cjs +61 -0
- package/dist/deterministicJson-C5CYTVpm.cjs +507 -0
- package/dist/deterministicJson-CzkFJWw1.mjs +502 -0
- package/dist/doctor-BPkYWSuq.mjs +75 -0
- package/dist/doctor-D2YJ-Yn2.cjs +395 -0
- package/dist/doctor-DOvByjbk.mjs +391 -0
- package/dist/doctor-u46qYYKX.cjs +79 -0
- package/dist/doctorReadiness-BCZGcN0a.cjs +151 -0
- package/dist/doctorReadiness-C208SMN9.mjs +142 -0
- package/dist/editPaths-BVfS_FFL.mjs +68 -0
- package/dist/editPaths-Bqp4OFPw.cjs +73 -0
- package/dist/ensureDaemonRunning-BCwNrMyv.cjs +64 -0
- package/dist/ensureDaemonRunning-Dqa2pOjY.mjs +61 -0
- package/dist/handleResumeCommand-BvXYf5El.mjs +240 -0
- package/dist/handleResumeCommand-C2cKchpX.cjs +245 -0
- package/dist/ids-B6ZC0HGt.cjs +13 -0
- package/dist/ids-DU6sLx4C.mjs +10 -0
- package/dist/index-B6UGRQ7h.mjs +102 -0
- package/dist/{index-DPCsWlWK.cjs → index-B6pAdvJx.cjs} +131 -91
- package/dist/index-Bu5Zi_a9.cjs +182 -0
- package/dist/index-D3kI0hDR.cjs +107 -0
- package/dist/index-DA7yINuk.cjs +994 -0
- package/dist/index-DDeHXrIX.cjs +71 -0
- package/dist/index-DKLU_fD0.mjs +158 -0
- package/dist/{index-ZChGsuB7.mjs → index-DMZqWwsP.mjs} +79 -39
- package/dist/index-DVkMGPyS.mjs +68 -0
- package/dist/index-qdS1friN.mjs +949 -0
- package/dist/index.cjs +5 -46
- package/dist/index.mjs +5 -46
- package/dist/{install-DarS_Wco.mjs → install-BO_W7VhL.mjs} +37 -37
- package/dist/install-BgoC2e_2.cjs +88 -0
- package/dist/install-CFY3tYtJ.mjs +86 -0
- package/dist/{install-wKQGgXvN.cjs → install-Cs5qAPrB.cjs} +38 -38
- package/dist/{installPiTools-DuZ6jZvX.cjs → installPiTools-BKnXjrVu.cjs} +2 -3
- package/dist/{installPiTools-Cj7yU9Fc.mjs → installPiTools-B_CdM5_2.mjs} +1 -2
- package/dist/{installTerminalHooks-DcQfee_O.cjs → installTerminalHooks-BQZbvxsZ.cjs} +5 -40
- package/dist/{installTerminalHooks-CpNbRFPz.mjs → installTerminalHooks-By7gBMEF.mjs} +3 -38
- package/dist/lib.cjs +28 -19
- package/dist/lib.d.cts +126 -2
- package/dist/lib.d.mts +126 -2
- package/dist/lib.mjs +23 -14
- package/dist/lidState-BeDfxxEX.cjs +305 -0
- package/dist/lidState-CeEt442o.mjs +297 -0
- package/dist/limits-C-a7gr04.cjs +43 -0
- package/dist/limits-DIo7rEBR.mjs +36 -0
- package/dist/localHappyAgentAuth-C-HQyiv6.mjs +82 -0
- package/dist/localHappyAgentAuth-D6rFhaoc.cjs +86 -0
- package/dist/logger-6HYUEXNk.mjs +271 -0
- package/dist/logger-CS0mw3fa.cjs +275 -0
- package/dist/loginShellEnv-BkuYtExZ.cjs +182 -0
- package/dist/loginShellEnv-Dw8M7tkI.mjs +167 -0
- package/dist/machineMetadata-DyDbODYd.cjs +41 -0
- package/dist/machineMetadata-oOzBfDfs.mjs +38 -0
- package/dist/main-BkxJP6JQ.cjs +941 -0
- package/dist/main-BwNIAI1A.mjs +939 -0
- package/dist/manager-BQ4flvQZ.mjs +101 -0
- package/dist/manager-Cly8xVIR.cjs +105 -0
- package/dist/{mcp-BN6bKIGb.mjs → mcp-B1A4I3TK.mjs} +27 -33
- package/dist/{mcp-DGdeUUDJ.cjs → mcp-Hszd7qpS.cjs} +42 -48
- package/dist/messageBuffer-BWlGgR3A.mjs +71 -0
- package/dist/messageBuffer-fJMH6uY8.cjs +73 -0
- package/dist/mirrorProtocol-BNLtoWjO.mjs +170 -0
- package/dist/mirrorProtocol-BUtmg1ws.cjs +186 -0
- package/dist/oneShotPrompts-CL0dip9C.cjs +16 -0
- package/dist/oneShotPrompts-DT4p6RNd.mjs +12 -0
- package/dist/package-BhaKlnxz.mjs +171 -0
- package/dist/package-BwMrPwqH.cjs +173 -0
- package/dist/path-B7zW-WwE.cjs +18 -0
- package/dist/path-D2wdaNSk.mjs +15 -0
- package/dist/peerTools-BTqw97Gb.mjs +272 -0
- package/dist/peerTools-BvKtHXj8.cjs +283 -0
- package/dist/permissionMode-Cr5JCbB7.mjs +80 -0
- package/dist/permissionMode-CrV-XuMs.cjs +87 -0
- package/dist/persistence-HGW_ZVs9.mjs +372 -0
- package/dist/persistence-yKTH3-5X.cjs +414 -0
- package/dist/piExtension.mjs +2 -1
- package/dist/piRunnerArgs-BNloJCCg.cjs +66 -0
- package/dist/piRunnerArgs-BuX1UFWy.mjs +59 -0
- package/dist/{piRuntime-bkw2NAZU.mjs → piRuntime-CSGkwCKQ.mjs} +2 -2
- package/dist/{piRuntime-3qtbKujX.cjs → piRuntime-C_H7MJCM.cjs} +4 -4
- package/dist/{piTerminal-DilKwM7B.mjs → piTerminal-C8a1OrNQ.mjs} +32 -35
- package/dist/{piTerminal-BYxp3LMr.cjs → piTerminal-DNCZ6yTM.cjs} +32 -35
- package/dist/previewPath-B0rBdhy1.cjs +83 -0
- package/dist/previewPath-CXN4Vag0.mjs +81 -0
- package/dist/projectPath-BTBIMB57.mjs +10 -0
- package/dist/projectPath-ChLhdOyt.cjs +13 -0
- package/dist/registerCommonHandlers-Ccvsz7Ou.mjs +536 -0
- package/dist/registerCommonHandlers-DskirN-_.cjs +538 -0
- package/dist/registerKillSessionHandler-DZeLXWcB.cjs +361 -0
- package/dist/registerKillSessionHandler-GYvHdipX.mjs +358 -0
- package/dist/remoteSessionClient-B0LraSB9.cjs +634 -0
- package/dist/remoteSessionClient-CYnXRynE.mjs +612 -0
- package/dist/resources-BdFBQi8r.mjs +117 -0
- package/dist/resources-JDPugcDq.cjs +120 -0
- package/dist/run-CJzxoHVh.cjs +5762 -0
- package/dist/run-D3ifupU3.mjs +5739 -0
- package/dist/runClaude-Ba01qT-u.mjs +848 -0
- package/dist/runClaude-Da3RirzE.cjs +850 -0
- package/dist/runClaudeDeps-DOt79DjU.mjs +3624 -0
- package/dist/runClaudeDeps-DOzEBMls.cjs +3649 -0
- package/dist/{runGemini-Cjii069p.mjs → runGemini-BGeTz57m.mjs} +58 -31
- package/dist/{runGemini-28O2sqyI.cjs → runGemini-DSr9LIxL.cjs} +202 -175
- package/dist/{runOpenClaw-CiMZad-H.cjs → runOpenClaw-B1mTxN35.cjs} +64 -65
- package/dist/{runOpenClaw-jaLr7KF1.mjs → runOpenClaw-CogSedIc.mjs} +31 -32
- package/dist/sandbox-CG7IyDTU.cjs +187 -0
- package/dist/sandbox-DTe6d54R.mjs +180 -0
- package/dist/selfCheck-C9mVrQwf.mjs +84 -0
- package/dist/selfCheck-Dc-mNSLb.cjs +87 -0
- package/dist/{send-D5ejHPXG.cjs → send-B7J_eaG3.cjs} +16 -9
- package/dist/{send-C9mOtChi.mjs → send-CBXJKc6O.mjs} +12 -5
- package/dist/server-CZTP_iOn.cjs +407 -0
- package/dist/server-DcVBv04l.mjs +404 -0
- package/dist/sessionLock-Bys1PNSo.cjs +205 -0
- package/dist/sessionLock-D-EG2CfG.mjs +197 -0
- package/dist/sessionModeFile-DMl3dw3r.mjs +32 -0
- package/dist/sessionModeFile-RSm0NQkH.cjs +36 -0
- package/dist/sessionOps-Dn8z85h_.cjs +783 -0
- package/dist/sessionOps-SuHW8Dfe.mjs +760 -0
- package/dist/sessionScanner-BOrGjMXL.cjs +209 -0
- package/dist/sessionScanner-CX3onqXh.mjs +206 -0
- package/dist/{sessions-W6771g3X.mjs → sessions-BEG_HTSi.mjs} +17 -8
- package/dist/{sessions-BNMPQoLE.cjs → sessions-D74aJbhL.cjs} +37 -28
- package/dist/setupOfflineReconnection-ByElY60m.cjs +74 -0
- package/dist/setupOfflineReconnection-DpvWTt69.mjs +72 -0
- package/dist/smallFastModel-BLNgMrwR.mjs +18 -0
- package/dist/smallFastModel-D_uxGMo3.cjs +21 -0
- package/dist/{spawn-D0QVhzRb.mjs → spawn-B7yro0b2.mjs} +26 -38
- package/dist/{spawn-Ddtom1cb.cjs → spawn-DgR0RKRs.cjs} +52 -64
- package/dist/spawnAgents-BGQiEF-w.cjs +52 -0
- package/dist/spawnAgents-DZzZ9jMI.mjs +45 -0
- package/dist/spawnHappyCLI-B2H5s4B_.mjs +64 -0
- package/dist/spawnHappyCLI-DBhwZT7O.cjs +66 -0
- package/dist/specialCommands-BSqhYg5X.mjs +52 -0
- package/dist/specialCommands-DSsTeRej.cjs +54 -0
- package/dist/startFileWatcher-B4VsLgjD.cjs +71 -0
- package/dist/startFileWatcher-DErVWZE4.mjs +69 -0
- package/dist/startupPlan-BLMbfQIH.cjs +12 -0
- package/dist/startupPlan-DFMyNgAs.mjs +10 -0
- package/dist/streamRelay-BiKw59Cc.cjs +233 -0
- package/dist/streamRelay-FPVbHpbM.mjs +231 -0
- package/dist/sync-C8gyQFMc.mjs +69 -0
- package/dist/sync-DccIKZ5_.cjs +71 -0
- package/dist/systemPrompt-BwTPWfMu.cjs +97 -0
- package/dist/systemPrompt-DX521JJz.mjs +94 -0
- package/dist/{teams-CqSwtw2O.mjs → teams-C32F1hqd.mjs} +9 -40
- package/dist/{teams-BZ1tayg_.cjs → teams-Dl8g8kTI.cjs} +14 -45
- package/dist/template-BaHAmH2K.cjs +129 -0
- package/dist/template-CiOPa2rd.mjs +121 -0
- package/dist/{terminalTitleSuggest-DKgX3osW.mjs → terminalTitleSuggest-CeKsX_V6.mjs} +1 -9
- package/dist/{terminalTitleSuggest-Dji8I0Jy.cjs → terminalTitleSuggest-DhvRFX3H.cjs} +0 -10
- package/dist/terminals-B_bfC9c2.cjs +250 -0
- package/dist/terminals-Dlg0x3nY.mjs +235 -0
- package/dist/time-D0XyHOid.mjs +38 -0
- package/dist/time-DCuTyook.cjs +42 -0
- package/dist/titleGenerator-CQ8CoGhg.mjs +166 -0
- package/dist/titleGenerator-ChzMJsyg.cjs +172 -0
- package/dist/tmuxSocket-B8Yx20sT.mjs +19 -0
- package/dist/tmuxSocket-D-Xt6Vn-.cjs +24 -0
- package/dist/{todo-BYMg0fR0.cjs → todo-BvUOTa8G.cjs} +15 -12
- package/dist/{todo-BbusB1zM.mjs → todo-CZ6cFrrn.mjs} +11 -8
- package/dist/tools-BZtHF_qQ.mjs +177 -0
- package/dist/tools-Be3AoAwu.cjs +63 -0
- package/dist/tools-DQj0AeLk.cjs +180 -0
- package/dist/tools-DkluDcG4.mjs +60 -0
- package/dist/trimIdent-4gvk9Wk6.cjs +22 -0
- package/dist/trimIdent-BAjmv_TG.mjs +20 -0
- package/dist/types-CRS-srZK.cjs +66 -0
- package/dist/types-CkqAACXx.mjs +64 -0
- package/dist/uninstall-BkLzaJ6I.mjs +47 -0
- package/dist/uninstall-x-TUtf5H.cjs +49 -0
- package/package.json +7 -7
- package/dist/agentGuidance-CrR9l62U.mjs +0 -2145
- package/dist/agentGuidance-DwOWbX55.cjs +0 -2217
- package/dist/index-BG932eCh.cjs +0 -19655
- package/dist/index-CVCt3kSt.mjs +0 -19591
- package/dist/index-D5ScEErM.cjs +0 -58
- package/dist/index-DgO0FHOx.mjs +0 -52
- package/dist/limits-D2uN090G.mjs +0 -2528
- package/dist/limits-kqFqhfsh.cjs +0 -2652
|
@@ -1,57 +1,87 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var AcpBackend = require('./AcpBackend-
|
|
4
|
-
var
|
|
5
|
-
var AcpSessionManager = require('./AcpSessionManager-
|
|
6
|
-
var index
|
|
7
|
-
var
|
|
3
|
+
var AcpBackend = require('./AcpBackend-Bm2rdke8.cjs');
|
|
4
|
+
var logger = require('./logger-CS0mw3fa.cjs');
|
|
5
|
+
var AcpSessionManager = require('./AcpSessionManager-BAY1Pggx.cjs');
|
|
6
|
+
var index = require('./index-DA7yINuk.cjs');
|
|
7
|
+
var agentAttachments = require('./agentAttachments-Dbw8iMCZ.cjs');
|
|
8
|
+
var configuration = require('./configuration-BSYpcPwE.cjs');
|
|
9
|
+
var attachmentContent = require('./attachmentContent-DpiTJZb4.cjs');
|
|
10
|
+
var piRuntime = require('./piRuntime-C_H7MJCM.cjs');
|
|
8
11
|
var node_crypto = require('node:crypto');
|
|
9
12
|
var path = require('node:path');
|
|
10
|
-
var
|
|
11
|
-
var
|
|
13
|
+
var api = require('./api-CgundNNX.cjs');
|
|
14
|
+
var registerKillSessionHandler = require('./registerKillSessionHandler-DZeLXWcB.cjs');
|
|
15
|
+
var deterministicJson = require('./deterministicJson-C5CYTVpm.cjs');
|
|
16
|
+
var persistence = require('./persistence-yKTH3-5X.cjs');
|
|
17
|
+
var machineMetadata = require('./machineMetadata-DyDbODYd.cjs');
|
|
18
|
+
var createSessionMetadata = require('./createSessionMetadata-BJxEnM-o.cjs');
|
|
19
|
+
var setupOfflineReconnection = require('./setupOfflineReconnection-ByElY60m.cjs');
|
|
20
|
+
var controlClient = require('./controlClient-Bcwv3D21.cjs');
|
|
21
|
+
var authRelay = require('./authRelay-BdYkC1Po.cjs');
|
|
22
|
+
var streamRelay = require('./streamRelay-BiKw59Cc.cjs');
|
|
23
|
+
var projectPath = require('./projectPath-ChLhdOyt.cjs');
|
|
24
|
+
var BasePermissionHandler = require('./BasePermissionHandler-CFHAxumV.cjs');
|
|
25
|
+
var titleGenerator = require('./titleGenerator-ChzMJsyg.cjs');
|
|
26
|
+
var sessionModeFile = require('./sessionModeFile-RSm0NQkH.cjs');
|
|
27
|
+
var editPaths = require('./editPaths-Bqp4OFPw.cjs');
|
|
12
28
|
require('node:child_process');
|
|
13
29
|
require('@agentclientprotocol/sdk');
|
|
14
|
-
require('
|
|
15
|
-
require('
|
|
16
|
-
require('
|
|
17
|
-
require('node:fs');
|
|
18
|
-
require('tweetnacl');
|
|
30
|
+
require('./time-DCuTyook.cjs');
|
|
31
|
+
require('./contentLogMetadata-ZSFk_NjQ.cjs');
|
|
32
|
+
require('./package-BwMrPwqH.cjs');
|
|
19
33
|
require('chalk');
|
|
20
34
|
require('node:util');
|
|
35
|
+
require('node:fs');
|
|
36
|
+
require('@paralleldrive/cuid2');
|
|
37
|
+
require('zod');
|
|
21
38
|
require('node:os');
|
|
22
|
-
require('
|
|
23
|
-
require('
|
|
24
|
-
require('./
|
|
39
|
+
require('node:fs/promises');
|
|
40
|
+
require('./attachmentLimits-CzVrqgLR.cjs');
|
|
41
|
+
require('./resources-JDPugcDq.cjs');
|
|
25
42
|
require('axios');
|
|
26
|
-
require('socket.io-client');
|
|
27
|
-
require('fs/promises');
|
|
28
|
-
require('ink');
|
|
29
|
-
require('react');
|
|
30
|
-
require('@anthropic-ai/claude-agent-sdk');
|
|
31
43
|
require('node:events');
|
|
44
|
+
require('socket.io-client');
|
|
45
|
+
require('./limits-C-a7gr04.cjs');
|
|
46
|
+
require('./lidState-BeDfxxEX.cjs');
|
|
32
47
|
require('os');
|
|
33
48
|
require('child_process');
|
|
34
|
-
require('
|
|
35
|
-
require('
|
|
36
|
-
require('
|
|
37
|
-
require('expo-server-sdk');
|
|
49
|
+
require('./registerCommonHandlers-DskirN-_.cjs');
|
|
50
|
+
require('util');
|
|
51
|
+
require('fs/promises');
|
|
38
52
|
require('crypto');
|
|
39
|
-
require('
|
|
40
|
-
require('
|
|
41
|
-
require('
|
|
42
|
-
require('
|
|
43
|
-
require('
|
|
44
|
-
require('
|
|
53
|
+
require('path');
|
|
54
|
+
require('cross-spawn');
|
|
55
|
+
require('./sync-DccIKZ5_.cjs');
|
|
56
|
+
require('./backgroundTaskActivity-CBvUdj39.cjs');
|
|
57
|
+
require('tweetnacl');
|
|
58
|
+
require('./types-CRS-srZK.cjs');
|
|
59
|
+
require('./client-3Ac-O4pw.cjs');
|
|
60
|
+
require('./context-DsDr6E2t.cjs');
|
|
61
|
+
require('./sessionOps-Dn8z85h_.cjs');
|
|
62
|
+
require('./tools-Be3AoAwu.cjs');
|
|
63
|
+
require('./tools-DQj0AeLk.cjs');
|
|
64
|
+
require('./client-BPNbmtvO.cjs');
|
|
65
|
+
require('./peerTools-BvKtHXj8.cjs');
|
|
66
|
+
require('./ids-B6ZC0HGt.cjs');
|
|
67
|
+
require('./remoteSessionClient-B0LraSB9.cjs');
|
|
45
68
|
require('@modelcontextprotocol/sdk/server/mcp.js');
|
|
46
69
|
require('node:http');
|
|
47
70
|
require('@modelcontextprotocol/sdk/server/streamableHttp.js');
|
|
48
|
-
require('
|
|
49
|
-
require('
|
|
50
|
-
require('
|
|
51
|
-
require('
|
|
52
|
-
require('
|
|
53
|
-
require('
|
|
71
|
+
require('./assistantTools-BTqPnlFl.cjs');
|
|
72
|
+
require('./terminals-B_bfC9c2.cjs');
|
|
73
|
+
require('./terminalTitleSuggest-DhvRFX3H.cjs');
|
|
74
|
+
require('./tmuxSocket-D-Xt6Vn-.cjs');
|
|
75
|
+
require('./bootstrap-B5G1TijC.cjs');
|
|
76
|
+
require('./agentGuidance-B5NATuFa.cjs');
|
|
77
|
+
require('./trimIdent-4gvk9Wk6.cjs');
|
|
78
|
+
require('./previewPath-B0rBdhy1.cjs');
|
|
79
|
+
require('./detectCLI-DR9ZaN6B.cjs');
|
|
80
|
+
require('fs');
|
|
81
|
+
require('./localHappyAgentAuth-D6rFhaoc.cjs');
|
|
54
82
|
require('url');
|
|
83
|
+
require('node:module');
|
|
84
|
+
require('./oneShotPrompts-CL0dip9C.cjs');
|
|
55
85
|
|
|
56
86
|
function createAcpBackend(options) {
|
|
57
87
|
const backendOptions = {
|
|
@@ -555,7 +585,7 @@ function resolveRequestedLegacyModelCode(models, requested) {
|
|
|
555
585
|
}
|
|
556
586
|
return null;
|
|
557
587
|
}
|
|
558
|
-
class GenericAcpPermissionHandler extends
|
|
588
|
+
class GenericAcpPermissionHandler extends BasePermissionHandler.BasePermissionHandler {
|
|
559
589
|
logPrefix;
|
|
560
590
|
constructor(session, agentName) {
|
|
561
591
|
super(session);
|
|
@@ -573,7 +603,7 @@ class GenericAcpPermissionHandler extends index$1.BasePermissionHandler {
|
|
|
573
603
|
input
|
|
574
604
|
});
|
|
575
605
|
this.addPendingRequestToState(toolCallId, toolName, input);
|
|
576
|
-
|
|
606
|
+
logger.logger.debug(`${this.logPrefix} Permission request sent for tool: ${toolName} (${toolCallId})`);
|
|
577
607
|
});
|
|
578
608
|
}
|
|
579
609
|
}
|
|
@@ -589,32 +619,33 @@ function resolveSessionFlavor(agentName) {
|
|
|
589
619
|
async function runAcp(opts) {
|
|
590
620
|
const verbose = opts.verbose === true;
|
|
591
621
|
const sessionTag = node_crypto.randomUUID();
|
|
592
|
-
|
|
593
|
-
const api = await
|
|
622
|
+
api.connectionState.setBackend(opts.agentName);
|
|
623
|
+
const api$1 = await api.ApiClient.create(opts.credentials);
|
|
594
624
|
const settings = await persistence.readSettings();
|
|
595
625
|
if (!settings?.machineId) {
|
|
596
626
|
throw new Error("No machine ID found in settings");
|
|
597
627
|
}
|
|
598
|
-
await api.getOrCreateMachine({
|
|
628
|
+
await api$1.getOrCreateMachine({
|
|
599
629
|
machineId: settings.machineId,
|
|
600
|
-
metadata:
|
|
630
|
+
metadata: machineMetadata.getInitialMachineMetadata()
|
|
601
631
|
});
|
|
602
|
-
const { state, metadata } =
|
|
632
|
+
const { state, metadata } = createSessionMetadata.createSessionMetadata({
|
|
603
633
|
flavor: resolveSessionFlavor(opts.agentName),
|
|
604
634
|
...process.env.VH_TEAM_OPERATION_ID ? { teamOperationId: process.env.VH_TEAM_OPERATION_ID } : {},
|
|
605
635
|
machineId: settings.machineId,
|
|
606
636
|
startedBy: opts.startedBy,
|
|
607
|
-
sandbox: settings.sandboxConfig
|
|
637
|
+
sandbox: settings.sandboxConfig,
|
|
638
|
+
capabilities: [index.PROMPT_QUEUE_CAPABILITY]
|
|
608
639
|
});
|
|
609
640
|
metadata.attachmentKinds = [];
|
|
610
|
-
const response = await api.getOrCreateSession({ tag: sessionTag, metadata, state });
|
|
641
|
+
const response = await api$1.getOrCreateSession({ tag: sessionTag, metadata, state });
|
|
611
642
|
if (response) {
|
|
612
643
|
logAcp("muted", `Happy Session ID: ${response.id}`);
|
|
613
644
|
}
|
|
614
645
|
let session;
|
|
615
646
|
let permissionHandler;
|
|
616
|
-
const { session: initialSession, reconnectionHandle } =
|
|
617
|
-
api,
|
|
647
|
+
const { session: initialSession, reconnectionHandle } = setupOfflineReconnection.setupOfflineReconnection({
|
|
648
|
+
api: api$1,
|
|
618
649
|
sessionTag,
|
|
619
650
|
metadata,
|
|
620
651
|
state,
|
|
@@ -624,30 +655,38 @@ async function runAcp(opts) {
|
|
|
624
655
|
if (permissionHandler) {
|
|
625
656
|
permissionHandler.updateSession(newSession);
|
|
626
657
|
}
|
|
658
|
+
attachPromptQueueDrain(newSession);
|
|
627
659
|
}
|
|
628
660
|
});
|
|
629
661
|
session = initialSession;
|
|
630
662
|
if (response) {
|
|
631
663
|
try {
|
|
632
|
-
await
|
|
633
|
-
encryptionKey:
|
|
664
|
+
await controlClient.notifyDaemonSessionStarted(response.id, metadata, {
|
|
665
|
+
encryptionKey: authRelay.encodeBase64(response.encryptionKey),
|
|
634
666
|
encryptionVariant: response.encryptionVariant,
|
|
635
667
|
seq: response.seq,
|
|
636
668
|
metadataVersion: response.metadataVersion,
|
|
637
669
|
agentStateVersion: response.agentStateVersion
|
|
638
670
|
});
|
|
639
671
|
} catch (error) {
|
|
640
|
-
|
|
672
|
+
logger.logger.debug("[acp] Failed to report session to daemon:", error);
|
|
641
673
|
}
|
|
642
674
|
}
|
|
643
675
|
permissionHandler = new GenericAcpPermissionHandler(session, opts.agentName);
|
|
644
676
|
permissionHandler.reset("Previous CLI process exited before responding");
|
|
645
677
|
const streamingEnabled = process.env.HAPPY_SESSION_STREAM_DISABLED !== "1";
|
|
646
|
-
const streamRelay = new
|
|
678
|
+
const streamRelay$1 = new streamRelay.StreamRelay({
|
|
647
679
|
send: (frame) => session.sendStreamFrame(frame)
|
|
648
680
|
});
|
|
649
|
-
const sessionManager = new AcpSessionManager.AcpSessionManager(streamingEnabled ? { stream: streamRelay } : {});
|
|
650
|
-
const messageQueue = new
|
|
681
|
+
const sessionManager = new AcpSessionManager.AcpSessionManager(streamingEnabled ? { stream: streamRelay$1 } : {});
|
|
682
|
+
const messageQueue = new registerKillSessionHandler.MessageQueue2((mode) => deterministicJson.hashObject(mode));
|
|
683
|
+
function attachPromptQueueDrain(client) {
|
|
684
|
+
const drain = client.attachPromptQueueDrain({
|
|
685
|
+
isIdle: () => messageQueue.size() === 0 && messageQueue.isWaiting()
|
|
686
|
+
});
|
|
687
|
+
messageQueue.setOnWait(() => drain.onIdle());
|
|
688
|
+
}
|
|
689
|
+
attachPromptQueueDrain(session);
|
|
651
690
|
let currentPermissionMode;
|
|
652
691
|
let currentModel;
|
|
653
692
|
let modeSelector = null;
|
|
@@ -668,18 +707,18 @@ async function runAcp(opts) {
|
|
|
668
707
|
return true;
|
|
669
708
|
}
|
|
670
709
|
try {
|
|
671
|
-
|
|
710
|
+
sessionModeFile.writeSessionModeFile(session.sessionId, mode);
|
|
672
711
|
} catch (error) {
|
|
673
|
-
|
|
712
|
+
logger.logger.debug(`[${opts.agentName}] Failed to write session mode file:`, error);
|
|
674
713
|
return false;
|
|
675
714
|
}
|
|
676
715
|
fileBackedPermissionMode = mode;
|
|
677
716
|
session.updateMetadata((currentMetadata) => ({ ...currentMetadata, permissionMode: mode }));
|
|
678
|
-
|
|
717
|
+
logger.logger.debug(`[${opts.agentName}] Published file-backed permission mode: ${mode}`);
|
|
679
718
|
return true;
|
|
680
719
|
};
|
|
681
720
|
const isAssistantVariant = process.env.HAPPY_SESSION_VARIANT === "assistant";
|
|
682
|
-
const happyServer = await
|
|
721
|
+
const happyServer = await deterministicJson.startHappyServer(session, {
|
|
683
722
|
assistant: isAssistantVariant,
|
|
684
723
|
...opts.agentName === "pi" ? { onContextUsage: (contextUsage) => {
|
|
685
724
|
session.updateAgentState((state2) => ({ ...state2, contextUsage }));
|
|
@@ -688,7 +727,7 @@ async function runAcp(opts) {
|
|
|
688
727
|
if (opts.agentName === "pi") session.updateAgentState((state2) => ({ ...state2, contextUsage: null }));
|
|
689
728
|
const mcpServers = {
|
|
690
729
|
happy: {
|
|
691
|
-
command: path.join(
|
|
730
|
+
command: path.join(projectPath.projectPath(), "bin", "very-happy-mcp.mjs"),
|
|
692
731
|
args: ["--url", happyServer.url]
|
|
693
732
|
}
|
|
694
733
|
};
|
|
@@ -747,7 +786,7 @@ async function runAcp(opts) {
|
|
|
747
786
|
});
|
|
748
787
|
const stopRunnerFromBackendStatus = (status, detail) => {
|
|
749
788
|
const reason = detail ? `${opts.agentName} backend ${status}: ${detail}` : `${opts.agentName} backend ${status}`;
|
|
750
|
-
|
|
789
|
+
logger.logger.debug(`[${opts.agentName}] ${reason}; stopping ACP runner`);
|
|
751
790
|
shouldExit = true;
|
|
752
791
|
messageQueue.close();
|
|
753
792
|
clearPendingTurn(new Error(reason));
|
|
@@ -769,9 +808,9 @@ async function runAcp(opts) {
|
|
|
769
808
|
return;
|
|
770
809
|
}
|
|
771
810
|
if (permissionModeIsFileBacked()) {
|
|
772
|
-
const mode =
|
|
811
|
+
const mode = sessionModeFile.normalizeAcpPermissionMode(requestedMode);
|
|
773
812
|
if (!mode) {
|
|
774
|
-
|
|
813
|
+
logger.logger.debug(`[${opts.agentName}] Ignoring unknown file-backed permission mode request: ${requestedMode}`);
|
|
775
814
|
return;
|
|
776
815
|
}
|
|
777
816
|
publishFileBackedPermissionMode(mode);
|
|
@@ -780,7 +819,7 @@ async function runAcp(opts) {
|
|
|
780
819
|
if (modeSelector) {
|
|
781
820
|
const resolved = resolveRequestedCode(modeSelector.options, requestedMode);
|
|
782
821
|
if (!resolved) {
|
|
783
|
-
|
|
822
|
+
logger.logger.debug(`[${opts.agentName}] Ignoring unknown ACP permission mode request: ${requestedMode}`);
|
|
784
823
|
return;
|
|
785
824
|
}
|
|
786
825
|
if (resolved === modeSelector.currentCode) {
|
|
@@ -797,7 +836,7 @@ async function runAcp(opts) {
|
|
|
797
836
|
}
|
|
798
837
|
const resolvedLegacyMode = resolveRequestedLegacyModeCode(legacyModes, requestedMode);
|
|
799
838
|
if (!resolvedLegacyMode) {
|
|
800
|
-
|
|
839
|
+
logger.logger.debug(`[${opts.agentName}] Ignoring unknown ACP legacy mode request: ${requestedMode}`);
|
|
801
840
|
return;
|
|
802
841
|
}
|
|
803
842
|
if (resolvedLegacyMode === legacyModes.currentModeId) {
|
|
@@ -861,7 +900,7 @@ async function runAcp(opts) {
|
|
|
861
900
|
if (modelSelector) {
|
|
862
901
|
const resolved = resolveRequestedCode(modelSelector.options, requestedModel);
|
|
863
902
|
if (!resolved) {
|
|
864
|
-
|
|
903
|
+
logger.logger.debug(`[${opts.agentName}] Ignoring unknown ACP model request: ${requestedModel}`);
|
|
865
904
|
return false;
|
|
866
905
|
}
|
|
867
906
|
if (resolved === modelSelector.currentCode) {
|
|
@@ -878,7 +917,7 @@ async function runAcp(opts) {
|
|
|
878
917
|
}
|
|
879
918
|
const resolvedLegacyModel = resolveRequestedLegacyModelCode(legacyModels, requestedModel);
|
|
880
919
|
if (!resolvedLegacyModel) {
|
|
881
|
-
|
|
920
|
+
logger.logger.debug(`[${opts.agentName}] Ignoring unknown ACP legacy model request: ${requestedModel}`);
|
|
882
921
|
return false;
|
|
883
922
|
}
|
|
884
923
|
if (resolvedLegacyModel === legacyModels.currentModelId) {
|
|
@@ -898,7 +937,7 @@ async function runAcp(opts) {
|
|
|
898
937
|
if (modelSelector) return resolveRequestedCode(modelSelector.options, requested) === modelSelector.currentCode;
|
|
899
938
|
return !!legacyModels && resolveRequestedLegacyModelCode(legacyModels, requested) === legacyModels.currentModelId;
|
|
900
939
|
};
|
|
901
|
-
const editThrottle = new
|
|
940
|
+
const editThrottle = new editPaths.EditReportThrottle();
|
|
902
941
|
const onBackendMessage = (msg) => {
|
|
903
942
|
if (verbose) {
|
|
904
943
|
logAcp("muted", `Outgoing raw backend message from ${opts.agentName}: ${formatUnknownForConsole(msg, ACP_RAW_PREVIEW_CHARS)}`);
|
|
@@ -1032,15 +1071,15 @@ async function runAcp(opts) {
|
|
|
1032
1071
|
session.sendAgentUsageSnapshot(resolveSessionFlavor(opts.agentName), msg);
|
|
1033
1072
|
}
|
|
1034
1073
|
if (msg.type === "tool-call") {
|
|
1035
|
-
for (const edit of editThrottle.take(
|
|
1036
|
-
|
|
1074
|
+
for (const edit of editThrottle.take(editPaths.extractAcpEditPaths(msg.toolName, msg.args))) {
|
|
1075
|
+
controlClient.reportSessionEditToDaemon({ sessionId: session.sessionId, path: edit.path, tool: edit.tool, cwd: process.cwd() });
|
|
1037
1076
|
}
|
|
1038
1077
|
}
|
|
1039
1078
|
sendEnvelopes(sessionManager.mapMessage(msg));
|
|
1040
1079
|
};
|
|
1041
1080
|
backend.onMessage(onBackendMessage);
|
|
1042
|
-
const titleGenerator = new
|
|
1043
|
-
|
|
1081
|
+
const titleGenerator$1 = new titleGenerator.TitleGenerator(session);
|
|
1082
|
+
agentAttachments.registerAgentAttachmentDownloads(session);
|
|
1044
1083
|
let userMessageDelivery = Promise.resolve();
|
|
1045
1084
|
session.onUserMessage((message) => {
|
|
1046
1085
|
const downloads = session.drainAttachmentsForUserMessage();
|
|
@@ -1049,14 +1088,14 @@ async function runAcp(opts) {
|
|
|
1049
1088
|
if (!message.content.text && !attachments?.length) {
|
|
1050
1089
|
return;
|
|
1051
1090
|
}
|
|
1052
|
-
titleGenerator.maybeGenerate(message.content.text);
|
|
1091
|
+
titleGenerator$1.maybeGenerate(message.content.text);
|
|
1053
1092
|
if (typeof message.meta?.permissionMode === "string") {
|
|
1054
1093
|
currentPermissionMode = message.meta.permissionMode;
|
|
1055
|
-
|
|
1094
|
+
logger.logger.debug(`[${opts.agentName}] Requested ACP permission mode: ${currentPermissionMode}`);
|
|
1056
1095
|
}
|
|
1057
1096
|
if (message.meta && Object.prototype.hasOwnProperty.call(message.meta, "model")) {
|
|
1058
1097
|
currentModel = message.meta.model ?? null;
|
|
1059
|
-
|
|
1098
|
+
logger.logger.debug(`[${opts.agentName}] Requested ACP model: ${currentModel ?? "null"}`);
|
|
1060
1099
|
}
|
|
1061
1100
|
if (message.meta && Object.prototype.hasOwnProperty.call(message.meta, "effort")) {
|
|
1062
1101
|
currentEffort = message.meta.effort ?? null;
|
|
@@ -1067,7 +1106,7 @@ async function runAcp(opts) {
|
|
|
1067
1106
|
effort: currentEffort
|
|
1068
1107
|
}, attachments, message.localKey);
|
|
1069
1108
|
}).catch(() => {
|
|
1070
|
-
|
|
1109
|
+
logger.logger.warn("[ACP] Failed to prepare user attachments");
|
|
1071
1110
|
session.sendSessionEvent({ type: "message", message: "Could not prepare this message. Please send it again." });
|
|
1072
1111
|
});
|
|
1073
1112
|
});
|
|
@@ -1084,7 +1123,7 @@ async function runAcp(opts) {
|
|
|
1084
1123
|
permissionHandler.reset();
|
|
1085
1124
|
abortController.abort();
|
|
1086
1125
|
} catch (error) {
|
|
1087
|
-
|
|
1126
|
+
logger.logger.debug(`[${opts.agentName}] Abort failed:`, error);
|
|
1088
1127
|
} finally {
|
|
1089
1128
|
abortController = new AbortController();
|
|
1090
1129
|
}
|
|
@@ -1096,7 +1135,7 @@ async function runAcp(opts) {
|
|
|
1096
1135
|
if (!fileBackedModeActive) {
|
|
1097
1136
|
throw new Error(`${opts.agentName} does not support live permission mode changes`);
|
|
1098
1137
|
}
|
|
1099
|
-
const mode = typeof request?.mode === "string" ?
|
|
1138
|
+
const mode = typeof request?.mode === "string" ? sessionModeFile.normalizeAcpPermissionMode(request.mode) : null;
|
|
1100
1139
|
if (!mode) {
|
|
1101
1140
|
throw new Error("Invalid permission mode");
|
|
1102
1141
|
}
|
|
@@ -1106,7 +1145,7 @@ async function runAcp(opts) {
|
|
|
1106
1145
|
return { mode };
|
|
1107
1146
|
}
|
|
1108
1147
|
);
|
|
1109
|
-
const disposeTermination =
|
|
1148
|
+
const disposeTermination = registerKillSessionHandler.registerKillSessionHandler(session.rpcHandlerManager, async () => {
|
|
1110
1149
|
shouldExit = true;
|
|
1111
1150
|
messageQueue.close();
|
|
1112
1151
|
clearPendingTurn(new Error("Session terminated"));
|
|
@@ -1122,7 +1161,7 @@ async function runAcp(opts) {
|
|
|
1122
1161
|
}
|
|
1123
1162
|
session.updateMetadata((current) => ({
|
|
1124
1163
|
...current,
|
|
1125
|
-
attachmentKinds: opts.agentName === "pi" && backend.supportsImageAttachments ? [...
|
|
1164
|
+
attachmentKinds: opts.agentName === "pi" && backend.supportsImageAttachments ? [...attachmentContent.CLAUDE_ATTACHMENT_KINDS] : []
|
|
1126
1165
|
}));
|
|
1127
1166
|
if (permissionModeIsFileBacked()) {
|
|
1128
1167
|
fileBackedModeActive = true;
|
|
@@ -1172,17 +1211,17 @@ async function runAcp(opts) {
|
|
|
1172
1211
|
}
|
|
1173
1212
|
const prompt = todoDiscoverySent ? batch.message : `${batch.message}
|
|
1174
1213
|
|
|
1175
|
-
${
|
|
1214
|
+
${index.BUILTIN_TODO_DISCOVERY}`;
|
|
1176
1215
|
const attachments = batch.attachments ?? [];
|
|
1177
|
-
const staged = attachments.length ? await
|
|
1178
|
-
happyHomeDir:
|
|
1216
|
+
const staged = attachments.length ? await attachmentContent.stageClaudeAttachments(attachments, {
|
|
1217
|
+
happyHomeDir: configuration.configuration.happyHomeDir,
|
|
1179
1218
|
sessionId: session.sessionId
|
|
1180
1219
|
}) : [];
|
|
1181
|
-
await backend.sendPrompt(acpSessionId,
|
|
1220
|
+
await backend.sendPrompt(acpSessionId, attachmentContent.appendStagedAttachmentsToPrompt(prompt, staged), attachments);
|
|
1182
1221
|
todoDiscoverySent = true;
|
|
1183
1222
|
await turnEnded;
|
|
1184
1223
|
sendEnvelopes(sessionManager.endTurn(turnCancelled ? "cancelled" : "completed"));
|
|
1185
|
-
streamRelay.endTurn();
|
|
1224
|
+
streamRelay$1.endTurn();
|
|
1186
1225
|
setThinking(false);
|
|
1187
1226
|
session.sendSessionEvent({ type: "ready" });
|
|
1188
1227
|
if (verbose) {
|
|
@@ -1191,7 +1230,7 @@ ${persistence.BUILTIN_TODO_DISCOVERY}`;
|
|
|
1191
1230
|
} catch (error) {
|
|
1192
1231
|
session.sendSessionEvent({ type: "message", message: "The agent could not process this message or its attachments. Please check the agent and try again." });
|
|
1193
1232
|
sendEnvelopes(sessionManager.endTurn("failed"));
|
|
1194
|
-
streamRelay.endTurn();
|
|
1233
|
+
streamRelay$1.endTurn();
|
|
1195
1234
|
setThinking(false);
|
|
1196
1235
|
session.sendSessionEvent({ type: "ready" });
|
|
1197
1236
|
logAcp("error", `Prompt error from ${opts.agentName}: ${error instanceof Error ? error.message : String(error)}`);
|
|
@@ -1203,30 +1242,31 @@ ${persistence.BUILTIN_TODO_DISCOVERY}`;
|
|
|
1203
1242
|
disposeTermination?.();
|
|
1204
1243
|
setThinking(false);
|
|
1205
1244
|
clearInterval(keepAliveInterval);
|
|
1206
|
-
streamRelay.endTurn();
|
|
1207
|
-
streamRelay.dispose();
|
|
1245
|
+
streamRelay$1.endTurn();
|
|
1246
|
+
streamRelay$1.dispose();
|
|
1208
1247
|
reconnectionHandle?.cancel();
|
|
1209
1248
|
clearPendingTurn(new Error("ACP runner shutting down"));
|
|
1210
1249
|
try {
|
|
1211
1250
|
permissionHandler.reset();
|
|
1212
1251
|
} catch (error) {
|
|
1213
|
-
|
|
1252
|
+
logger.logger.debug(`[${opts.agentName}] Failed to reset permission handler:`, error);
|
|
1214
1253
|
}
|
|
1215
1254
|
backend.offMessage?.(onBackendMessage);
|
|
1216
1255
|
await backend.dispose();
|
|
1217
1256
|
if (fileBackedPermissionMode) {
|
|
1218
1257
|
try {
|
|
1219
|
-
|
|
1258
|
+
sessionModeFile.removeSessionModeFile(session.sessionId);
|
|
1220
1259
|
} catch (error) {
|
|
1221
|
-
|
|
1260
|
+
logger.logger.debug(`[${opts.agentName}] Failed to remove session mode file:`, error);
|
|
1222
1261
|
}
|
|
1223
1262
|
}
|
|
1224
1263
|
try {
|
|
1225
1264
|
happyServer.stop();
|
|
1226
1265
|
} catch (error) {
|
|
1227
|
-
|
|
1266
|
+
logger.logger.debug(`[${opts.agentName}] Failed to stop Happy MCP server:`, error);
|
|
1228
1267
|
}
|
|
1229
1268
|
try {
|
|
1269
|
+
session.closePromptQueueDrain();
|
|
1230
1270
|
session.updateMetadata((currentMetadata) => ({
|
|
1231
1271
|
...currentMetadata,
|
|
1232
1272
|
lifecycleState: "archived",
|
|
@@ -1238,7 +1278,7 @@ ${persistence.BUILTIN_TODO_DISCOVERY}`;
|
|
|
1238
1278
|
await session.flush();
|
|
1239
1279
|
await session.close();
|
|
1240
1280
|
} catch (error) {
|
|
1241
|
-
|
|
1281
|
+
logger.logger.debug(`[${opts.agentName}] Session close failed:`, error);
|
|
1242
1282
|
}
|
|
1243
1283
|
}
|
|
1244
1284
|
}
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var node_fs = require('node:fs');
|
|
4
|
+
var os = require('node:os');
|
|
5
|
+
var logger = require('./logger-CS0mw3fa.cjs');
|
|
6
|
+
var persistence = require('./persistence-yKTH3-5X.cjs');
|
|
7
|
+
var loginShellEnv = require('./loginShellEnv-BkuYtExZ.cjs');
|
|
8
|
+
require('chalk');
|
|
9
|
+
require('node:util');
|
|
10
|
+
require('./configuration-BSYpcPwE.cjs');
|
|
11
|
+
require('node:path');
|
|
12
|
+
require('./package-BwMrPwqH.cjs');
|
|
13
|
+
require('node:fs/promises');
|
|
14
|
+
require('zod');
|
|
15
|
+
require('./authRelay-BdYkC1Po.cjs');
|
|
16
|
+
require('node:crypto');
|
|
17
|
+
require('tweetnacl');
|
|
18
|
+
require('node:child_process');
|
|
19
|
+
|
|
20
|
+
const AGENT_HOME_CACHE_MS = 6e4;
|
|
21
|
+
const AGENT_HOME_FAILURE_CACHE_MS = 5 * 6e4;
|
|
22
|
+
const AGENT_HOME_MAX_STALE_MS = 10 * 6e4;
|
|
23
|
+
function decideShellProbe(entry, now, allowStale) {
|
|
24
|
+
if (!entry) return "await-probe";
|
|
25
|
+
const age = now - entry.probedAt;
|
|
26
|
+
if (age < entry.ttlMs) return "use-cached";
|
|
27
|
+
if (allowStale && age < AGENT_HOME_MAX_STALE_MS) return "use-stale-and-revalidate";
|
|
28
|
+
return "await-probe";
|
|
29
|
+
}
|
|
30
|
+
let shellProbe = null;
|
|
31
|
+
let shellProbeInFlight = null;
|
|
32
|
+
let last = null;
|
|
33
|
+
let originalDaemonEnv = null;
|
|
34
|
+
function snapshotDaemonEnv() {
|
|
35
|
+
if (!originalDaemonEnv) {
|
|
36
|
+
originalDaemonEnv = {};
|
|
37
|
+
for (const name of loginShellEnv.AGENT_HOME_ENV_NAMES) originalDaemonEnv[name] = process.env[name];
|
|
38
|
+
}
|
|
39
|
+
return originalDaemonEnv;
|
|
40
|
+
}
|
|
41
|
+
function probeShell(now) {
|
|
42
|
+
if (!shellProbeInFlight) {
|
|
43
|
+
const run = loginShellEnv.probeLoginShellEnv(loginShellEnv.AGENT_HOME_ENV_NAMES).then((env) => {
|
|
44
|
+
const entry = { env, probedAt: now, ttlMs: env ? AGENT_HOME_CACHE_MS : AGENT_HOME_FAILURE_CACHE_MS };
|
|
45
|
+
shellProbe = entry;
|
|
46
|
+
return entry;
|
|
47
|
+
});
|
|
48
|
+
shellProbeInFlight = run;
|
|
49
|
+
void run.finally(() => {
|
|
50
|
+
if (shellProbeInFlight === run) shellProbeInFlight = null;
|
|
51
|
+
}).catch(() => {
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
return shellProbeInFlight;
|
|
55
|
+
}
|
|
56
|
+
async function loginShellEnvFor(now, allowStale) {
|
|
57
|
+
const decision = decideShellProbe(shellProbe, now, allowStale);
|
|
58
|
+
if (decision === "await-probe") return (await probeShell(now)).env;
|
|
59
|
+
if (decision === "use-stale-and-revalidate") {
|
|
60
|
+
probeShell(now).catch((error) => logger.logger.debug("[AGENT HOME] background login-shell probe failed", error));
|
|
61
|
+
}
|
|
62
|
+
return shellProbe.env;
|
|
63
|
+
}
|
|
64
|
+
async function refreshAgentHomes(now = Date.now(), opts = {}) {
|
|
65
|
+
let input;
|
|
66
|
+
let homes;
|
|
67
|
+
try {
|
|
68
|
+
const loginShellEnv$1 = await loginShellEnvFor(now, opts.allowStale === true);
|
|
69
|
+
const settings = await persistence.readSettings();
|
|
70
|
+
input = {
|
|
71
|
+
settings: { claudeConfigDir: settings.claudeConfigDir, codexHome: settings.codexHome },
|
|
72
|
+
daemonEnv: snapshotDaemonEnv(),
|
|
73
|
+
loginShellEnv: loginShellEnv$1,
|
|
74
|
+
homeDir: os.homedir()
|
|
75
|
+
};
|
|
76
|
+
homes = loginShellEnv.resolveAgentHomes(input);
|
|
77
|
+
} catch (error) {
|
|
78
|
+
logger.logger.debug("[AGENT HOME] resolve failed, falling back", error);
|
|
79
|
+
if (last) return last.homes;
|
|
80
|
+
return loginShellEnv.resolveAgentHomes({ settings: {}, daemonEnv: snapshotDaemonEnv(), loginShellEnv: null, homeDir: os.homedir() });
|
|
81
|
+
}
|
|
82
|
+
const previous = last?.homes;
|
|
83
|
+
last = { input, homes };
|
|
84
|
+
applyAgentHomesToProcessEnv(homes);
|
|
85
|
+
if (!previous || previous.claudeConfigDir.path !== homes.claudeConfigDir.path || previous.codexHome.path !== homes.codexHome.path) {
|
|
86
|
+
logger.logger.debug(`[AGENT HOME] Claude config dir: ${loginShellEnv.describeAgentHome(homes.claudeConfigDir)}; Codex home: ${loginShellEnv.describeAgentHome(homes.codexHome)}`);
|
|
87
|
+
}
|
|
88
|
+
return homes;
|
|
89
|
+
}
|
|
90
|
+
function currentAgentHomes() {
|
|
91
|
+
return last?.homes ?? null;
|
|
92
|
+
}
|
|
93
|
+
function resetAgentHomesCache() {
|
|
94
|
+
shellProbe = null;
|
|
95
|
+
shellProbeInFlight = null;
|
|
96
|
+
last = null;
|
|
97
|
+
originalDaemonEnv = null;
|
|
98
|
+
}
|
|
99
|
+
function applyAgentHomesToProcessEnv(homes) {
|
|
100
|
+
const overlay = loginShellEnv.agentHomeEnv(homes);
|
|
101
|
+
for (const name of loginShellEnv.AGENT_HOME_ENV_NAMES) {
|
|
102
|
+
const next = overlay[name];
|
|
103
|
+
if (next === void 0) {
|
|
104
|
+
const original = snapshotDaemonEnv()[name];
|
|
105
|
+
if (original === void 0) delete process.env[name];
|
|
106
|
+
else process.env[name] = original;
|
|
107
|
+
} else if (process.env[name] !== next) {
|
|
108
|
+
process.env[name] = next;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
function listDirSafe(path) {
|
|
113
|
+
try {
|
|
114
|
+
return node_fs.readdirSync(path);
|
|
115
|
+
} catch {
|
|
116
|
+
return [];
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
function fileSizeSafe(path) {
|
|
120
|
+
try {
|
|
121
|
+
const st = node_fs.statSync(path);
|
|
122
|
+
return st.isFile() ? st.size : null;
|
|
123
|
+
} catch {
|
|
124
|
+
return null;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
function locateClaudeConversation(workingDirectory, claudeSessionId) {
|
|
128
|
+
const entry = last;
|
|
129
|
+
if (!entry) {
|
|
130
|
+
const input = { settings: {}, daemonEnv: process.env, loginShellEnv: null, homeDir: os.homedir() };
|
|
131
|
+
return loginShellEnv.findClaudeConversation(claudeSessionId, workingDirectory, loginShellEnv.agentHomeCandidates("claude", input), fileSizeSafe);
|
|
132
|
+
}
|
|
133
|
+
return loginShellEnv.findClaudeConversation(claudeSessionId, workingDirectory, loginShellEnv.agentHomeCandidates("claude", entry.input, entry.homes), fileSizeSafe);
|
|
134
|
+
}
|
|
135
|
+
function locateCodexThread(codexThreadId) {
|
|
136
|
+
const entry = last;
|
|
137
|
+
const input = entry?.input ?? { settings: {}, daemonEnv: process.env, loginShellEnv: null, homeDir: os.homedir() };
|
|
138
|
+
return loginShellEnv.findCodexThread(codexThreadId, loginShellEnv.agentHomeCandidates("codex", input, entry?.homes), listDirSafe);
|
|
139
|
+
}
|
|
140
|
+
function agentHomeSpawnEnv(input) {
|
|
141
|
+
const env = {};
|
|
142
|
+
if (input.claudeSessionId) {
|
|
143
|
+
const hit = locateClaudeConversation(input.workingDirectory, input.claudeSessionId);
|
|
144
|
+
if (hit && !hit.resolved) {
|
|
145
|
+
env[loginShellEnv.CLAUDE_CONFIG_DIR_ENV] = hit.home;
|
|
146
|
+
logger.logger.debug(`[AGENT HOME] Claude conversation ${input.claudeSessionId} found under ${hit.home}; overriding ${loginShellEnv.CLAUDE_CONFIG_DIR_ENV} for this spawn`);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
if (input.codexThreadId) {
|
|
150
|
+
const hit = locateCodexThread(input.codexThreadId);
|
|
151
|
+
if (hit && !hit.resolved) {
|
|
152
|
+
env[loginShellEnv.CODEX_HOME_ENV] = hit.home;
|
|
153
|
+
logger.logger.debug(`[AGENT HOME] Codex thread ${input.codexThreadId} found under ${hit.home}; overriding ${loginShellEnv.CODEX_HOME_ENV} for this spawn`);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
return env;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
exports.AGENT_HOME_ENV_NAMES = loginShellEnv.AGENT_HOME_ENV_NAMES;
|
|
160
|
+
exports.CLAUDE_CONFIG_DIR_ENV = loginShellEnv.CLAUDE_CONFIG_DIR_ENV;
|
|
161
|
+
exports.CODEX_HOME_ENV = loginShellEnv.CODEX_HOME_ENV;
|
|
162
|
+
exports.agentHomeCandidates = loginShellEnv.agentHomeCandidates;
|
|
163
|
+
exports.agentHomeEnv = loginShellEnv.agentHomeEnv;
|
|
164
|
+
exports.claudeConversationPath = loginShellEnv.claudeConversationPath;
|
|
165
|
+
exports.claudeProjectDirName = loginShellEnv.claudeProjectDirName;
|
|
166
|
+
exports.codexRolloutFileMatches = loginShellEnv.codexRolloutFileMatches;
|
|
167
|
+
exports.describeAgentHome = loginShellEnv.describeAgentHome;
|
|
168
|
+
exports.expandHomePath = loginShellEnv.expandHomePath;
|
|
169
|
+
exports.findClaudeConversation = loginShellEnv.findClaudeConversation;
|
|
170
|
+
exports.findCodexThread = loginShellEnv.findCodexThread;
|
|
171
|
+
exports.probeLoginShellEnv = loginShellEnv.probeLoginShellEnv;
|
|
172
|
+
exports.resolveAgentHomes = loginShellEnv.resolveAgentHomes;
|
|
173
|
+
exports.AGENT_HOME_CACHE_MS = AGENT_HOME_CACHE_MS;
|
|
174
|
+
exports.AGENT_HOME_FAILURE_CACHE_MS = AGENT_HOME_FAILURE_CACHE_MS;
|
|
175
|
+
exports.AGENT_HOME_MAX_STALE_MS = AGENT_HOME_MAX_STALE_MS;
|
|
176
|
+
exports.agentHomeSpawnEnv = agentHomeSpawnEnv;
|
|
177
|
+
exports.currentAgentHomes = currentAgentHomes;
|
|
178
|
+
exports.decideShellProbe = decideShellProbe;
|
|
179
|
+
exports.locateClaudeConversation = locateClaudeConversation;
|
|
180
|
+
exports.locateCodexThread = locateCodexThread;
|
|
181
|
+
exports.refreshAgentHomes = refreshAgentHomes;
|
|
182
|
+
exports.resetAgentHomesCache = resetAgentHomesCache;
|