very-happy-cli 0.2.159 → 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-DUYFlyfN.cjs → AcpBackend-Bm2rdke8.cjs} +78 -76
- package/dist/{AcpBackend-VsfkZiVF.mjs → AcpBackend-mzv8Dhba.mjs} +4 -2
- package/dist/{AcpSessionManager-Bdv8LWXh.cjs → AcpSessionManager-BAY1Pggx.cjs} +9 -9
- package/dist/{AcpSessionManager-rYtVb0kN.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-CHh4lmjM.cjs → agentHome-CboCeKWq.cjs} +14 -28
- package/dist/{agentHome-CvsJyeQB.mjs → agentHome-Dj1C43aJ.mjs} +8 -22
- package/dist/api-CLMUr-SX.mjs +3339 -0
- package/dist/api-CgundNNX.cjs +3346 -0
- package/dist/{types-Dh-s4Lqs.mjs → apiMachine-B9dLW_p5.mjs} +9116 -16205
- package/dist/{types-BbvK1Tr_.cjs → apiMachine-Bn8482VM.cjs} +9104 -16247
- 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-DKmEls8Z.cjs → auto-BOX_fgmR.cjs} +70 -79
- package/dist/{auto-nb8GhRRy.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-ClLtM6F3.mjs → config-CTx_jb-C.mjs} +7 -40
- package/dist/{config-DLx-vW3I.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-BEOMECtE.cjs → index-B6pAdvJx.cjs} +121 -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-2mCaeKyf.mjs → index-DMZqWwsP.mjs} +68 -38
- 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-BPhJppvd.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-BOHrUaFM.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-Cou3WUf3.cjs → installTerminalHooks-BQZbvxsZ.cjs} +5 -40
- package/dist/{installTerminalHooks-WeznjkuC.mjs → installTerminalHooks-By7gBMEF.mjs} +3 -38
- package/dist/lib.cjs +28 -19
- package/dist/lib.d.cts +12 -2
- package/dist/lib.d.mts +12 -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-Dy3f_K0h.mjs → mcp-B1A4I3TK.mjs} +27 -33
- package/dist/{mcp-CPYbtsYG.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-kLZNpAAl.mjs → piRuntime-CSGkwCKQ.mjs} +2 -2
- package/dist/{piRuntime-NtF0YqjH.cjs → piRuntime-C_H7MJCM.cjs} +4 -4
- package/dist/{piTerminal-B0fEOV_2.mjs → piTerminal-C8a1OrNQ.mjs} +32 -35
- package/dist/{piTerminal-9J0GAKzb.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-DV6Ouadt.mjs → runGemini-BGeTz57m.mjs} +58 -31
- package/dist/{runGemini-F-mqx3_K.cjs → runGemini-DSr9LIxL.cjs} +202 -175
- package/dist/{runOpenClaw-Qqo9j63M.cjs → runOpenClaw-B1mTxN35.cjs} +64 -65
- package/dist/{runOpenClaw-D7MlPS5n.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-4qJTCAYW.cjs → send-B7J_eaG3.cjs} +16 -9
- package/dist/{send-CLhYXNgy.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-CzIH2rGp.mjs → sessions-BEG_HTSi.mjs} +17 -8
- package/dist/{sessions-Bh1pyddi.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-CPIWlPOM.mjs → spawn-B7yro0b2.mjs} +26 -38
- package/dist/{spawn-CmFOSVdW.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-CEahj4cm.mjs → teams-C32F1hqd.mjs} +9 -40
- package/dist/{teams-CB1R9-Z9.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-DqyRI4wP.cjs → todo-BvUOTa8G.cjs} +15 -12
- package/dist/{todo-Cknp5D4U.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-BRDN1NoZ.cjs +0 -2217
- package/dist/agentGuidance-KgvYuF3R.mjs +0 -2145
- package/dist/index-BF6WfgV5.mjs +0 -19624
- package/dist/index-C-JazrMB.mjs +0 -52
- package/dist/index-blDSadUR.cjs +0 -58
- package/dist/index-rH3DrQ5B.cjs +0 -19688
- package/dist/limits-BH5CV5vR.cjs +0 -2683
- package/dist/limits-CjRj8IX5.mjs +0 -2558
|
@@ -3,8 +3,10 @@
|
|
|
3
3
|
var node_child_process = require('node:child_process');
|
|
4
4
|
var sdk = require('@agentclientprotocol/sdk');
|
|
5
5
|
var node_crypto = require('node:crypto');
|
|
6
|
-
var
|
|
7
|
-
var
|
|
6
|
+
var logger = require('./logger-CS0mw3fa.cjs');
|
|
7
|
+
var time = require('./time-DCuTyook.cjs');
|
|
8
|
+
var contentLogMetadata = require('./contentLogMetadata-ZSFk_NjQ.cjs');
|
|
9
|
+
var _package = require('./package-BwMrPwqH.cjs');
|
|
8
10
|
|
|
9
11
|
function acpImageBlocks(attachments, supportsImages) {
|
|
10
12
|
return attachments.filter((file) => ["image/jpeg", "image/png", "image/gif", "image/webp"].includes(file.mimeType)).map((file) => {
|
|
@@ -246,7 +248,7 @@ function handleAgentMessageChunk(update, ctx) {
|
|
|
246
248
|
payload: { text, streaming: true }
|
|
247
249
|
});
|
|
248
250
|
} else {
|
|
249
|
-
|
|
251
|
+
logger.logger.debug("[AcpBackend] Received message chunk:", contentLogMetadata.contentLogMetadata(text));
|
|
250
252
|
ctx.emit({
|
|
251
253
|
type: "model-output",
|
|
252
254
|
textDelta: text
|
|
@@ -255,10 +257,10 @@ function handleAgentMessageChunk(update, ctx) {
|
|
|
255
257
|
const idleTimeoutMs = ctx.transport.getIdleTimeout?.() ?? DEFAULT_IDLE_TIMEOUT_MS;
|
|
256
258
|
ctx.setIdleTimeout(() => {
|
|
257
259
|
if (ctx.activeToolCalls.size === 0) {
|
|
258
|
-
|
|
260
|
+
logger.logger.debug("[AcpBackend] No more chunks received, emitting idle status");
|
|
259
261
|
ctx.emitIdleStatus();
|
|
260
262
|
} else {
|
|
261
|
-
|
|
263
|
+
logger.logger.debug(`[AcpBackend] Delaying idle status - ${ctx.activeToolCalls.size} active tool calls`);
|
|
262
264
|
}
|
|
263
265
|
}, idleTimeoutMs);
|
|
264
266
|
}
|
|
@@ -274,8 +276,8 @@ function handleAgentThoughtChunk(update, ctx) {
|
|
|
274
276
|
return { handled: false };
|
|
275
277
|
}
|
|
276
278
|
if (ctx.activeToolCalls.size > 0) {
|
|
277
|
-
|
|
278
|
-
...
|
|
279
|
+
logger.logger.debug("[AcpBackend] Thinking chunk received during active tool calls:", {
|
|
280
|
+
...contentLogMetadata.contentLogMetadata(text),
|
|
279
281
|
activeToolCallCount: ctx.activeToolCalls.size
|
|
280
282
|
});
|
|
281
283
|
}
|
|
@@ -295,29 +297,29 @@ function startToolCall(toolCallId, toolKind, update, ctx, source) {
|
|
|
295
297
|
ctx.toolCallIdToNameMap.set(toolCallId, realToolName);
|
|
296
298
|
ctx.activeToolCalls.add(toolCallId);
|
|
297
299
|
ctx.toolCallStartTimes.set(toolCallId, startTime);
|
|
298
|
-
|
|
299
|
-
|
|
300
|
+
logger.logger.debug(`[AcpBackend] \u23F1\uFE0F Set startTime for ${toolCallId} at ${new Date(startTime).toISOString()} (from ${source})`);
|
|
301
|
+
logger.logger.debug(`[AcpBackend] Tool call START: ${toolCallId}${isInvestigation ? " [INVESTIGATION TOOL]" : ""}`);
|
|
300
302
|
if (isInvestigation) {
|
|
301
|
-
|
|
303
|
+
logger.logger.debug(`[AcpBackend] \u{1F50D} Investigation tool detected - extended timeout (10min) will be used`);
|
|
302
304
|
}
|
|
303
305
|
const timeoutMs = ctx.transport.getToolCallTimeout?.(toolCallId, toolKindStr) ?? DEFAULT_TOOL_CALL_TIMEOUT_MS;
|
|
304
306
|
if (!ctx.toolCallTimeouts.has(toolCallId)) {
|
|
305
307
|
const timeout = setTimeout(() => {
|
|
306
308
|
const duration = formatDuration(ctx.toolCallStartTimes.get(toolCallId));
|
|
307
|
-
|
|
309
|
+
logger.logger.debug(`[AcpBackend] Tool call TIMEOUT (from ${source}): ${toolCallId} after ${(timeoutMs / 1e3).toFixed(0)}s - Duration: ${duration}, removing from active set`);
|
|
308
310
|
ctx.activeToolCalls.delete(toolCallId);
|
|
309
311
|
ctx.toolCallStartTimes.delete(toolCallId);
|
|
310
312
|
ctx.toolCallTimeouts.delete(toolCallId);
|
|
311
313
|
ctx.toolCallOutputs.delete(toolCallId);
|
|
312
314
|
if (ctx.activeToolCalls.size === 0) {
|
|
313
|
-
|
|
315
|
+
logger.logger.debug("[AcpBackend] No more active tool calls after timeout, emitting idle status");
|
|
314
316
|
ctx.emitIdleStatus();
|
|
315
317
|
}
|
|
316
318
|
}, timeoutMs);
|
|
317
319
|
ctx.toolCallTimeouts.set(toolCallId, timeout);
|
|
318
|
-
|
|
320
|
+
logger.logger.debug(`[AcpBackend] \u23F1\uFE0F Set timeout for ${toolCallId}: ${(timeoutMs / 1e3).toFixed(0)}s${isInvestigation ? " (investigation tool)" : ""}`);
|
|
319
321
|
} else {
|
|
320
|
-
|
|
322
|
+
logger.logger.debug(`[AcpBackend] Timeout already set for ${toolCallId}, skipping`);
|
|
321
323
|
}
|
|
322
324
|
ctx.clearIdleTimeout();
|
|
323
325
|
ctx.emit({ type: "status", status: "running" });
|
|
@@ -344,7 +346,7 @@ function completeToolCall(toolCallId, toolKind, content, ctx, exitCode) {
|
|
|
344
346
|
clearTimeout(timeout);
|
|
345
347
|
ctx.toolCallTimeouts.delete(toolCallId);
|
|
346
348
|
}
|
|
347
|
-
|
|
349
|
+
logger.logger.debug(`[AcpBackend] Tool call COMPLETED: ${toolCallId} - Duration: ${duration}. Active tool calls: ${ctx.activeToolCalls.size}`);
|
|
348
350
|
const output = ctx.toolCallOutputs.get(toolCallId);
|
|
349
351
|
ctx.toolCallOutputs.delete(toolCallId);
|
|
350
352
|
const bashResult = buildAcpBashResult(output, exitCode);
|
|
@@ -356,7 +358,7 @@ function completeToolCall(toolCallId, toolKind, content, ctx, exitCode) {
|
|
|
356
358
|
});
|
|
357
359
|
if (ctx.activeToolCalls.size === 0) {
|
|
358
360
|
ctx.clearIdleTimeout();
|
|
359
|
-
|
|
361
|
+
logger.logger.debug("[AcpBackend] All tool calls completed, emitting idle status");
|
|
360
362
|
ctx.emitIdleStatus();
|
|
361
363
|
}
|
|
362
364
|
}
|
|
@@ -369,17 +371,17 @@ function failToolCall(toolCallId, status, toolKind, content, ctx) {
|
|
|
369
371
|
if (isInvestigation) {
|
|
370
372
|
const durationStr2 = formatDuration(startTime);
|
|
371
373
|
const durationMinutes = formatDurationMinutes(startTime);
|
|
372
|
-
|
|
374
|
+
logger.logger.debug(`[AcpBackend] \u{1F50D} Investigation tool ${status.toUpperCase()} after ${durationMinutes} minutes (${durationStr2})`);
|
|
373
375
|
if (duration) {
|
|
374
376
|
const threeMinutes = 3 * 60 * 1e3;
|
|
375
377
|
const tolerance = 5e3;
|
|
376
378
|
if (Math.abs(duration - threeMinutes) < tolerance) {
|
|
377
|
-
|
|
379
|
+
logger.logger.debug(`[AcpBackend] \u{1F50D} \u26A0\uFE0F Investigation tool failed at ~3 minutes - likely Gemini CLI timeout, not our timeout`);
|
|
378
380
|
}
|
|
379
381
|
}
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
382
|
+
logger.logger.debug("[AcpBackend] Investigation tool failed with content metadata:", contentLogMetadata.contentLogMetadata(content));
|
|
383
|
+
logger.logger.debug(`[AcpBackend] \u{1F50D} Investigation tool timeout status BEFORE cleanup: ${hadTimeout ? "timeout was set" : "no timeout was set"}`);
|
|
384
|
+
logger.logger.debug(`[AcpBackend] \u{1F50D} Investigation tool startTime status BEFORE cleanup: ${startTime ? `set at ${new Date(startTime).toISOString()}` : "not set"}`);
|
|
383
385
|
}
|
|
384
386
|
ctx.activeToolCalls.delete(toolCallId);
|
|
385
387
|
ctx.toolCallStartTimes.delete(toolCallId);
|
|
@@ -388,17 +390,17 @@ function failToolCall(toolCallId, status, toolKind, content, ctx) {
|
|
|
388
390
|
if (timeout) {
|
|
389
391
|
clearTimeout(timeout);
|
|
390
392
|
ctx.toolCallTimeouts.delete(toolCallId);
|
|
391
|
-
|
|
393
|
+
logger.logger.debug(`[AcpBackend] Cleared timeout for ${toolCallId} (tool call ${status})`);
|
|
392
394
|
} else {
|
|
393
|
-
|
|
395
|
+
logger.logger.debug(`[AcpBackend] No timeout found for ${toolCallId} (tool call ${status}) - timeout may not have been set`);
|
|
394
396
|
}
|
|
395
397
|
const durationStr = formatDuration(startTime);
|
|
396
|
-
|
|
398
|
+
logger.logger.debug(`[AcpBackend] Tool call ${status.toUpperCase()}: ${toolCallId} - Duration: ${durationStr}. Active tool calls: ${ctx.activeToolCalls.size}`);
|
|
397
399
|
const errorDetail = extractErrorDetail(content);
|
|
398
400
|
if (errorDetail) {
|
|
399
|
-
|
|
401
|
+
logger.logger.debug("[AcpBackend] Tool call error detail received:", contentLogMetadata.contentLogMetadata(errorDetail));
|
|
400
402
|
} else {
|
|
401
|
-
|
|
403
|
+
logger.logger.debug(`[AcpBackend] \u274C Tool call ${status} but no error details in content`);
|
|
402
404
|
}
|
|
403
405
|
ctx.emit({
|
|
404
406
|
type: "tool-result",
|
|
@@ -408,7 +410,7 @@ function failToolCall(toolCallId, status, toolKind, content, ctx) {
|
|
|
408
410
|
});
|
|
409
411
|
if (ctx.activeToolCalls.size === 0) {
|
|
410
412
|
ctx.clearIdleTimeout();
|
|
411
|
-
|
|
413
|
+
logger.logger.debug("[AcpBackend] All tool calls completed/failed, emitting idle status");
|
|
412
414
|
ctx.emitIdleStatus();
|
|
413
415
|
}
|
|
414
416
|
}
|
|
@@ -416,7 +418,7 @@ function handleToolCallUpdate(update, ctx) {
|
|
|
416
418
|
const status = update.status;
|
|
417
419
|
const toolCallId = update.toolCallId;
|
|
418
420
|
if (!toolCallId) {
|
|
419
|
-
|
|
421
|
+
logger.logger.debug("[AcpBackend] Tool call update without toolCallId:", contentLogMetadata.contentLogMetadata(update));
|
|
420
422
|
return { handled: false };
|
|
421
423
|
}
|
|
422
424
|
const toolKind = update.kind || "unknown";
|
|
@@ -433,7 +435,7 @@ function handleToolCallUpdate(update, ctx) {
|
|
|
433
435
|
toolCallCountSincePrompt++;
|
|
434
436
|
startToolCall(toolCallId, toolKind, update, ctx, "tool_call_update");
|
|
435
437
|
} else {
|
|
436
|
-
|
|
438
|
+
logger.logger.debug(`[AcpBackend] Tool call ${toolCallId} already tracked, status: ${status}`);
|
|
437
439
|
}
|
|
438
440
|
} else if (status === "completed") {
|
|
439
441
|
completeToolCall(toolCallId, toolKind, update.content, ctx, terminalMeta.exitCode);
|
|
@@ -445,14 +447,14 @@ function handleToolCallUpdate(update, ctx) {
|
|
|
445
447
|
function handleToolCall(update, ctx) {
|
|
446
448
|
const toolCallId = update.toolCallId;
|
|
447
449
|
const status = update.status;
|
|
448
|
-
|
|
450
|
+
logger.logger.debug(`[AcpBackend] Received tool_call: toolCallId=${toolCallId}, status=${status ?? "unknown"}`);
|
|
449
451
|
const isInProgress = !status || status === "in_progress" || status === "pending";
|
|
450
452
|
if (!toolCallId || !isInProgress) {
|
|
451
|
-
|
|
453
|
+
logger.logger.debug(`[AcpBackend] Tool call ${toolCallId} not in progress (status: ${status}), skipping`);
|
|
452
454
|
return { handled: false };
|
|
453
455
|
}
|
|
454
456
|
if (ctx.activeToolCalls.has(toolCallId)) {
|
|
455
|
-
|
|
457
|
+
logger.logger.debug(`[AcpBackend] Tool call ${toolCallId} already in active set, skipping`);
|
|
456
458
|
return { handled: true };
|
|
457
459
|
}
|
|
458
460
|
startToolCall(toolCallId, update.kind, update, ctx, "tool_call");
|
|
@@ -540,7 +542,7 @@ function nodeToWebStreams(stdin, stdout) {
|
|
|
540
542
|
return new Promise((resolve, reject) => {
|
|
541
543
|
const ok = stdin.write(chunk, (err) => {
|
|
542
544
|
if (err) {
|
|
543
|
-
|
|
545
|
+
logger.logger.debug("[AcpBackend] Error writing to stdin:", contentLogMetadata.errorLogMetadata(err));
|
|
544
546
|
reject(err);
|
|
545
547
|
}
|
|
546
548
|
});
|
|
@@ -569,7 +571,7 @@ function nodeToWebStreams(stdin, stdout) {
|
|
|
569
571
|
controller.close();
|
|
570
572
|
});
|
|
571
573
|
stdout.on("error", (err) => {
|
|
572
|
-
|
|
574
|
+
logger.logger.debug("[AcpBackend] Stdout error:", contentLogMetadata.errorLogMetadata(err));
|
|
573
575
|
controller.error(err);
|
|
574
576
|
});
|
|
575
577
|
},
|
|
@@ -592,9 +594,9 @@ async function withRetry(operation, options) {
|
|
|
592
594
|
options.baseDelayMs * Math.pow(2, attempt - 1),
|
|
593
595
|
options.maxDelayMs
|
|
594
596
|
);
|
|
595
|
-
|
|
597
|
+
logger.logger.debug(`[AcpBackend] ${options.operationName} failed (attempt ${attempt}/${options.maxAttempts}). Retrying in ${delayMs}ms...`, contentLogMetadata.errorLogMetadata(lastError));
|
|
596
598
|
options.onRetry?.(attempt, lastError);
|
|
597
|
-
await
|
|
599
|
+
await time.delay(delayMs);
|
|
598
600
|
} else {
|
|
599
601
|
break;
|
|
600
602
|
}
|
|
@@ -648,7 +650,7 @@ class AcpBackend {
|
|
|
648
650
|
try {
|
|
649
651
|
listener(msg);
|
|
650
652
|
} catch (error) {
|
|
651
|
-
|
|
653
|
+
logger.logger.warn("[AcpBackend] Error in message handler:", contentLogMetadata.errorLogMetadata(error));
|
|
652
654
|
}
|
|
653
655
|
}
|
|
654
656
|
}
|
|
@@ -660,7 +662,7 @@ class AcpBackend {
|
|
|
660
662
|
this.emit({ type: "status", status: "starting" });
|
|
661
663
|
let startupStatusErrorEmitted = false;
|
|
662
664
|
try {
|
|
663
|
-
|
|
665
|
+
logger.logger.debug(`[AcpBackend] Starting session: ${sessionId}`);
|
|
664
666
|
const args = this.options.args || [];
|
|
665
667
|
if (process.platform === "win32") {
|
|
666
668
|
const fullCommand = [this.options.command, ...args].join(" ");
|
|
@@ -708,9 +710,9 @@ class AcpBackend {
|
|
|
708
710
|
activeToolCalls: this.activeToolCalls,
|
|
709
711
|
hasActiveInvestigation
|
|
710
712
|
};
|
|
711
|
-
|
|
713
|
+
logger.logger.debug("[AcpBackend] Agent stderr received:", {
|
|
712
714
|
investigationActive: hasActiveInvestigation,
|
|
713
|
-
...
|
|
715
|
+
...contentLogMetadata.contentLogMetadata(text)
|
|
714
716
|
});
|
|
715
717
|
if (this.transport.handleStderr) {
|
|
716
718
|
const result = this.transport.handleStderr(text, context);
|
|
@@ -721,14 +723,14 @@ class AcpBackend {
|
|
|
721
723
|
});
|
|
722
724
|
this.process.on("error", (err) => {
|
|
723
725
|
signalStartupFailure(err);
|
|
724
|
-
|
|
726
|
+
logger.logger.debug("[AcpBackend] Process error:", contentLogMetadata.errorLogMetadata(err));
|
|
725
727
|
startupStatusErrorEmitted = true;
|
|
726
728
|
this.emit({ type: "status", status: "error", detail: err.message });
|
|
727
729
|
});
|
|
728
730
|
this.process.on("exit", (code, signal) => {
|
|
729
731
|
if (!this.disposed && code !== 0 && code !== null) {
|
|
730
732
|
signalStartupFailure(new Error(`Exit code: ${code}`));
|
|
731
|
-
|
|
733
|
+
logger.logger.debug(`[AcpBackend] Process exited with code ${code}, signal ${signal}`);
|
|
732
734
|
this.emit({ type: "status", status: "stopped", detail: `Exit code: ${code}` });
|
|
733
735
|
}
|
|
734
736
|
});
|
|
@@ -761,7 +763,7 @@ class AcpBackend {
|
|
|
761
763
|
}
|
|
762
764
|
}
|
|
763
765
|
if (filteredCount > 0) {
|
|
764
|
-
|
|
766
|
+
logger.logger.debug(`[AcpBackend] Filtered out ${filteredCount} non-JSON lines from ${transport.agentName} stdout`);
|
|
765
767
|
}
|
|
766
768
|
controller.close();
|
|
767
769
|
break;
|
|
@@ -782,7 +784,7 @@ class AcpBackend {
|
|
|
782
784
|
}
|
|
783
785
|
}
|
|
784
786
|
} catch (error) {
|
|
785
|
-
|
|
787
|
+
logger.logger.debug("[AcpBackend] Error filtering stdout stream:", contentLogMetadata.errorLogMetadata(error));
|
|
786
788
|
controller.error(error);
|
|
787
789
|
} finally {
|
|
788
790
|
reader.releaseLock();
|
|
@@ -808,15 +810,15 @@ class AcpBackend {
|
|
|
808
810
|
};
|
|
809
811
|
toolName = this.transport.determineToolName?.(toolName, toolCallId, input, context) ?? toolName;
|
|
810
812
|
if (toolName !== (toolCall?.kind || toolCall?.toolName || extendedParams.kind || "Unknown tool")) {
|
|
811
|
-
|
|
813
|
+
logger.logger.debug(`[AcpBackend] Inferred tool name for toolCallId: ${toolCallId}`);
|
|
812
814
|
}
|
|
813
815
|
this.toolCallCountSincePrompt++;
|
|
814
816
|
const options = extendedParams.options || [];
|
|
815
|
-
|
|
817
|
+
logger.logger.debug("[AcpBackend] Permission request metadata:", {
|
|
816
818
|
hasToolCall: !!toolCall,
|
|
817
819
|
toolCallId,
|
|
818
820
|
optionCount: options.length,
|
|
819
|
-
input:
|
|
821
|
+
input: contentLogMetadata.contentLogMetadata(input)
|
|
820
822
|
});
|
|
821
823
|
this.emit({
|
|
822
824
|
type: "permission-request",
|
|
@@ -879,7 +881,7 @@ class AcpBackend {
|
|
|
879
881
|
}
|
|
880
882
|
return { outcome: { outcome: "selected", optionId } };
|
|
881
883
|
} catch (error) {
|
|
882
|
-
|
|
884
|
+
logger.logger.debug("[AcpBackend] Error in permission handler:", contentLogMetadata.errorLogMetadata(error));
|
|
883
885
|
return { outcome: { outcome: "selected", optionId: "cancel" } };
|
|
884
886
|
}
|
|
885
887
|
}
|
|
@@ -904,11 +906,11 @@ class AcpBackend {
|
|
|
904
906
|
},
|
|
905
907
|
clientInfo: {
|
|
906
908
|
name: "happy-cli",
|
|
907
|
-
version:
|
|
909
|
+
version: _package.packageJson.version
|
|
908
910
|
}
|
|
909
911
|
};
|
|
910
912
|
const initTimeout = this.transport.getInitTimeout();
|
|
911
|
-
|
|
913
|
+
logger.logger.debug(`[AcpBackend] Initializing connection (timeout: ${initTimeout}ms)...`);
|
|
912
914
|
const isNonRetryableStartupError = (error) => {
|
|
913
915
|
const maybeErr = error;
|
|
914
916
|
if (startupFailure && error === startupFailure) {
|
|
@@ -951,7 +953,7 @@ class AcpBackend {
|
|
|
951
953
|
shouldRetry: (error) => !isNonRetryableStartupError(error)
|
|
952
954
|
}
|
|
953
955
|
);
|
|
954
|
-
|
|
956
|
+
logger.logger.debug(`[AcpBackend] Initialize completed`);
|
|
955
957
|
if (this.options.verbose) {
|
|
956
958
|
logAcpBackendMuted(
|
|
957
959
|
`Incoming initialize response from ${this.options.agentName}: ${summarizeSessionMetadataPayload(initializeResponse)}`
|
|
@@ -967,7 +969,7 @@ class AcpBackend {
|
|
|
967
969
|
cwd: this.options.cwd,
|
|
968
970
|
mcpServers
|
|
969
971
|
};
|
|
970
|
-
|
|
972
|
+
logger.logger.debug(`[AcpBackend] Creating new session...`);
|
|
971
973
|
const sessionResponse = await withRetry(
|
|
972
974
|
async () => {
|
|
973
975
|
let timeoutHandle = null;
|
|
@@ -1003,7 +1005,7 @@ class AcpBackend {
|
|
|
1003
1005
|
}
|
|
1004
1006
|
);
|
|
1005
1007
|
this.acpSessionId = sessionResponse.sessionId;
|
|
1006
|
-
|
|
1008
|
+
logger.logger.debug(`[AcpBackend] Session created: ${this.acpSessionId}`);
|
|
1007
1009
|
if (this.options.verbose) {
|
|
1008
1010
|
logAcpBackendMuted(
|
|
1009
1011
|
`Incoming newSession response from ${this.options.agentName}: ${summarizeSessionMetadataPayload(sessionResponse)}`
|
|
@@ -1013,13 +1015,13 @@ class AcpBackend {
|
|
|
1013
1015
|
this.emitIdleStatus();
|
|
1014
1016
|
if (initialPrompt) {
|
|
1015
1017
|
this.sendPrompt(sessionId, initialPrompt).catch((error) => {
|
|
1016
|
-
|
|
1018
|
+
logger.logger.debug("[AcpBackend] Error sending initial prompt:", contentLogMetadata.errorLogMetadata(error));
|
|
1017
1019
|
this.emit({ type: "status", status: "error", detail: String(error) });
|
|
1018
1020
|
});
|
|
1019
1021
|
}
|
|
1020
1022
|
return { sessionId };
|
|
1021
1023
|
} catch (error) {
|
|
1022
|
-
|
|
1024
|
+
logger.logger.debug("[AcpBackend] Error starting session:", contentLogMetadata.errorLogMetadata(error));
|
|
1023
1025
|
if (!startupStatusErrorEmitted) {
|
|
1024
1026
|
this.emit({
|
|
1025
1027
|
type: "status",
|
|
@@ -1091,13 +1093,13 @@ class AcpBackend {
|
|
|
1091
1093
|
const notification = params;
|
|
1092
1094
|
const update = notification.update;
|
|
1093
1095
|
if (!update) {
|
|
1094
|
-
|
|
1096
|
+
logger.logger.debug("[AcpBackend] Received session update without update field:", contentLogMetadata.contentLogMetadata(params));
|
|
1095
1097
|
return;
|
|
1096
1098
|
}
|
|
1097
1099
|
const sessionUpdateType = update.sessionUpdate;
|
|
1098
1100
|
const updateType = sessionUpdateType;
|
|
1099
|
-
const updateMetadata =
|
|
1100
|
-
|
|
1101
|
+
const updateMetadata = contentLogMetadata.contentLogMetadata(update);
|
|
1102
|
+
logger.logger.debug(`[AcpBackend] Received session update type: ${sessionUpdateType ?? "unknown"}`, updateMetadata);
|
|
1101
1103
|
if (this.options.verbose) {
|
|
1102
1104
|
logAcpBackendMuted(
|
|
1103
1105
|
`Incoming session update from ${this.options.agentName}: type=${sessionUpdateType ?? "unknown"} payloadBytes=${String(updateMetadata.payloadBytes ?? "unknown")}`
|
|
@@ -1170,7 +1172,7 @@ class AcpBackend {
|
|
|
1170
1172
|
"current_mode_update"
|
|
1171
1173
|
];
|
|
1172
1174
|
if (updateType && !handledTypes.includes(updateType) && !update.messageChunk && !update.plan && !update.thinking) {
|
|
1173
|
-
|
|
1175
|
+
logger.logger.debug(`[AcpBackend] Unhandled session update type: ${updateType}`, contentLogMetadata.contentLogMetadata(update));
|
|
1174
1176
|
}
|
|
1175
1177
|
}
|
|
1176
1178
|
// Promise resolver for waitForIdle - set when waiting for response to complete
|
|
@@ -1185,7 +1187,7 @@ class AcpBackend {
|
|
|
1185
1187
|
this.toolCallCountSincePrompt = 0;
|
|
1186
1188
|
this.recentPromptHadChangeTitle = promptHasChangeTitle;
|
|
1187
1189
|
if (promptHasChangeTitle) {
|
|
1188
|
-
|
|
1190
|
+
logger.logger.debug('[AcpBackend] Prompt contains change_title instruction - will auto-approve first "other" tool call if it matches pattern');
|
|
1189
1191
|
}
|
|
1190
1192
|
if (this.disposed) {
|
|
1191
1193
|
throw new Error("Backend has been disposed");
|
|
@@ -1196,9 +1198,9 @@ class AcpBackend {
|
|
|
1196
1198
|
this.emit({ type: "status", status: "running" });
|
|
1197
1199
|
this.waitingForResponse = true;
|
|
1198
1200
|
try {
|
|
1199
|
-
|
|
1201
|
+
logger.logger.debug("[AcpBackend] Sending prompt:", {
|
|
1200
1202
|
sessionId,
|
|
1201
|
-
...
|
|
1203
|
+
...contentLogMetadata.contentLogMetadata(prompt)
|
|
1202
1204
|
});
|
|
1203
1205
|
const contentBlock = {
|
|
1204
1206
|
type: "text",
|
|
@@ -1208,7 +1210,7 @@ class AcpBackend {
|
|
|
1208
1210
|
sessionId: this.acpSessionId,
|
|
1209
1211
|
prompt: [contentBlock, ...acpImageBlocks(attachments, this.supportsImagePrompt)]
|
|
1210
1212
|
};
|
|
1211
|
-
|
|
1213
|
+
logger.logger.debug("[AcpBackend] Prompt request prepared:", {
|
|
1212
1214
|
sessionId: this.acpSessionId,
|
|
1213
1215
|
blockCount: promptRequest.prompt.length
|
|
1214
1216
|
});
|
|
@@ -1216,9 +1218,9 @@ class AcpBackend {
|
|
|
1216
1218
|
if (response.usage) {
|
|
1217
1219
|
this.emit({ type: "token-count", ...response.usage });
|
|
1218
1220
|
}
|
|
1219
|
-
|
|
1221
|
+
logger.logger.debug("[AcpBackend] Prompt request sent to ACP connection");
|
|
1220
1222
|
} catch (error) {
|
|
1221
|
-
|
|
1223
|
+
logger.logger.debug("[AcpBackend] Error sending prompt:", contentLogMetadata.errorLogMetadata(error));
|
|
1222
1224
|
this.waitingForResponse = false;
|
|
1223
1225
|
let errorDetail;
|
|
1224
1226
|
if (error instanceof Error) {
|
|
@@ -1267,10 +1269,10 @@ class AcpBackend {
|
|
|
1267
1269
|
}
|
|
1268
1270
|
return true;
|
|
1269
1271
|
} catch (error) {
|
|
1270
|
-
|
|
1272
|
+
logger.logger.debug("[AcpBackend] Failed to set session config option:", {
|
|
1271
1273
|
configId,
|
|
1272
|
-
value:
|
|
1273
|
-
error:
|
|
1274
|
+
value: contentLogMetadata.contentLogMetadata(value),
|
|
1275
|
+
error: contentLogMetadata.errorLogMetadata(error)
|
|
1274
1276
|
});
|
|
1275
1277
|
return false;
|
|
1276
1278
|
}
|
|
@@ -1295,7 +1297,7 @@ class AcpBackend {
|
|
|
1295
1297
|
});
|
|
1296
1298
|
return true;
|
|
1297
1299
|
} catch (error) {
|
|
1298
|
-
|
|
1300
|
+
logger.logger.debug("[AcpBackend] Failed to set session mode:", { modeId, error: contentLogMetadata.errorLogMetadata(error) });
|
|
1299
1301
|
return false;
|
|
1300
1302
|
}
|
|
1301
1303
|
}
|
|
@@ -1317,7 +1319,7 @@ class AcpBackend {
|
|
|
1317
1319
|
});
|
|
1318
1320
|
return true;
|
|
1319
1321
|
} catch (error) {
|
|
1320
|
-
|
|
1322
|
+
logger.logger.debug("[AcpBackend] Failed to set session model:", { modelId, error: contentLogMetadata.errorLogMetadata(error) });
|
|
1321
1323
|
return false;
|
|
1322
1324
|
}
|
|
1323
1325
|
}
|
|
@@ -1349,7 +1351,7 @@ class AcpBackend {
|
|
|
1349
1351
|
emitIdleStatus() {
|
|
1350
1352
|
this.emit({ type: "status", status: "idle" });
|
|
1351
1353
|
if (this.idleResolver) {
|
|
1352
|
-
|
|
1354
|
+
logger.logger.debug("[AcpBackend] Resolving idle waiter");
|
|
1353
1355
|
this.idleResolver();
|
|
1354
1356
|
}
|
|
1355
1357
|
}
|
|
@@ -1361,7 +1363,7 @@ class AcpBackend {
|
|
|
1361
1363
|
await this.connection.cancel({ sessionId: this.acpSessionId });
|
|
1362
1364
|
this.emit({ type: "status", status: "idle", detail: "Cancelled by user" });
|
|
1363
1365
|
} catch (error) {
|
|
1364
|
-
|
|
1366
|
+
logger.logger.debug("[AcpBackend] Error cancelling:", contentLogMetadata.errorLogMetadata(error));
|
|
1365
1367
|
}
|
|
1366
1368
|
}
|
|
1367
1369
|
/**
|
|
@@ -1380,12 +1382,12 @@ class AcpBackend {
|
|
|
1380
1382
|
* @param approved - Whether the permission was granted
|
|
1381
1383
|
*/
|
|
1382
1384
|
async respondToPermission(requestId, approved) {
|
|
1383
|
-
|
|
1385
|
+
logger.logger.debug(`[AcpBackend] Permission response event (UI only): ${requestId} = ${approved}`);
|
|
1384
1386
|
this.emit({ type: "permission-response", id: requestId, approved });
|
|
1385
1387
|
}
|
|
1386
1388
|
async dispose() {
|
|
1387
1389
|
if (this.disposed) return;
|
|
1388
|
-
|
|
1390
|
+
logger.logger.debug("[AcpBackend] Disposing backend");
|
|
1389
1391
|
this.disposed = true;
|
|
1390
1392
|
if (this.connection && this.acpSessionId) {
|
|
1391
1393
|
try {
|
|
@@ -1395,7 +1397,7 @@ class AcpBackend {
|
|
|
1395
1397
|
// 2s timeout for graceful shutdown
|
|
1396
1398
|
]);
|
|
1397
1399
|
} catch (error) {
|
|
1398
|
-
|
|
1400
|
+
logger.logger.debug("[AcpBackend] Error during graceful shutdown:", contentLogMetadata.errorLogMetadata(error));
|
|
1399
1401
|
}
|
|
1400
1402
|
}
|
|
1401
1403
|
if (this.process) {
|
|
@@ -1403,7 +1405,7 @@ class AcpBackend {
|
|
|
1403
1405
|
await new Promise((resolve) => {
|
|
1404
1406
|
const timeout = setTimeout(() => {
|
|
1405
1407
|
if (this.process) {
|
|
1406
|
-
|
|
1408
|
+
logger.logger.debug("[AcpBackend] Force killing process");
|
|
1407
1409
|
this.process.kill("SIGKILL");
|
|
1408
1410
|
}
|
|
1409
1411
|
resolve();
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { spawn } from 'node:child_process';
|
|
2
2
|
import { ndJsonStream, ClientSideConnection } from '@agentclientprotocol/sdk';
|
|
3
3
|
import { randomUUID } from 'node:crypto';
|
|
4
|
-
import { l as logger
|
|
5
|
-
import {
|
|
4
|
+
import { l as logger } from './logger-6HYUEXNk.mjs';
|
|
5
|
+
import { d as delay } from './time-D0XyHOid.mjs';
|
|
6
|
+
import { c as contentLogMetadata, e as errorLogMetadata } from './contentLogMetadata-BlWI0egu.mjs';
|
|
7
|
+
import { p as packageJson } from './package-BhaKlnxz.mjs';
|
|
6
8
|
|
|
7
9
|
function acpImageBlocks(attachments, supportsImages) {
|
|
8
10
|
return attachments.filter((file) => ["image/jpeg", "image/png", "image/gif", "image/webp"].includes(file.mimeType)).map((file) => {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var cuid2 = require('@paralleldrive/cuid2');
|
|
4
|
-
var
|
|
4
|
+
var index = require('./index-DA7yINuk.cjs');
|
|
5
5
|
|
|
6
6
|
function turnOptions(turnId, time) {
|
|
7
7
|
return turnId ? { turn: turnId, time } : { time };
|
|
@@ -108,12 +108,12 @@ class AcpSessionManager {
|
|
|
108
108
|
}
|
|
109
109
|
const options = {
|
|
110
110
|
...turnOptions(this.currentTurnId, this.nextTime()),
|
|
111
|
-
...key ? { streamKey:
|
|
111
|
+
...key ? { streamKey: index.streamKeyOf(key.mid, key.idx) } : {}
|
|
112
112
|
};
|
|
113
113
|
if (type === "thinking") {
|
|
114
|
-
return [
|
|
114
|
+
return [index.createEnvelope("agent", { t: "text", text, thinking: true }, options)];
|
|
115
115
|
}
|
|
116
|
-
return [
|
|
116
|
+
return [index.createEnvelope("agent", { t: "text", text }, options)];
|
|
117
117
|
}
|
|
118
118
|
startTurn() {
|
|
119
119
|
if (this.currentTurnId) {
|
|
@@ -125,7 +125,7 @@ class AcpSessionManager {
|
|
|
125
125
|
this.blockCursor = 0;
|
|
126
126
|
return [
|
|
127
127
|
...flushed,
|
|
128
|
-
|
|
128
|
+
index.createEnvelope("agent", { t: "turn-start" }, { turn: this.currentTurnId, time: this.nextTime() })
|
|
129
129
|
];
|
|
130
130
|
}
|
|
131
131
|
endTurn(status) {
|
|
@@ -138,7 +138,7 @@ class AcpSessionManager {
|
|
|
138
138
|
this.acpCallToSessionCall.clear();
|
|
139
139
|
return [
|
|
140
140
|
...flushed,
|
|
141
|
-
|
|
141
|
+
index.createEnvelope("agent", { t: "turn-end", status }, { turn: turnId, time: this.nextTime() })
|
|
142
142
|
];
|
|
143
143
|
}
|
|
144
144
|
mapMessage(msg) {
|
|
@@ -156,7 +156,7 @@ class AcpSessionManager {
|
|
|
156
156
|
}
|
|
157
157
|
return [
|
|
158
158
|
...this.flush(),
|
|
159
|
-
|
|
159
|
+
index.createEnvelope("agent", { t: "text", text: trimmed, thinking: true }, turnOptions(this.currentTurnId, this.nextTime()))
|
|
160
160
|
];
|
|
161
161
|
}
|
|
162
162
|
if (msg.type === "status") {
|
|
@@ -174,7 +174,7 @@ class AcpSessionManager {
|
|
|
174
174
|
const call = this.ensureSessionCallId(msg.callId);
|
|
175
175
|
return [
|
|
176
176
|
...flushed,
|
|
177
|
-
|
|
177
|
+
index.createEnvelope("agent", {
|
|
178
178
|
t: "tool-call-start",
|
|
179
179
|
call,
|
|
180
180
|
name: msg.toolName,
|
|
@@ -190,7 +190,7 @@ class AcpSessionManager {
|
|
|
190
190
|
const result = toolCallEndResult(msg.result);
|
|
191
191
|
return [
|
|
192
192
|
...flushed,
|
|
193
|
-
|
|
193
|
+
index.createEnvelope("agent", { t: "tool-call-end", call, ...result ? { result } : {} }, turnOptions(this.currentTurnId, this.nextTime()))
|
|
194
194
|
];
|
|
195
195
|
}
|
|
196
196
|
return [];
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { createId } from '@paralleldrive/cuid2';
|
|
2
|
-
import { s as streamKeyOf, e as createEnvelope } from './
|
|
2
|
+
import { s as streamKeyOf, e as createEnvelope } from './index-qdS1friN.mjs';
|
|
3
3
|
|
|
4
4
|
function turnOptions(turnId, time) {
|
|
5
5
|
return turnId ? { turn: turnId, time } : { time };
|