very-happy-cli 0.2.160 → 0.2.161
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-mzv8Dhba.mjs → AcpBackend-6U6pQgx1.mjs} +3 -3
- package/dist/{AcpBackend-Bm2rdke8.cjs → AcpBackend-Ba98QDif.cjs} +3 -3
- package/dist/{BasePermissionHandler-CFHAxumV.cjs → BasePermissionHandler-2R0uH2CI.cjs} +1 -1
- package/dist/{BasePermissionHandler-m3WVholL.mjs → BasePermissionHandler-BvvhBTja.mjs} +1 -1
- package/dist/{BaseReasoningProcessor-CYrKBXGm.mjs → BaseReasoningProcessor-DyhO1uoU.mjs} +1 -1
- package/dist/{BaseReasoningProcessor-BFa9_rZA.cjs → BaseReasoningProcessor-fsVNmCEF.cjs} +1 -1
- package/dist/{agentHome-Dj1C43aJ.mjs → agentHome-Ck1i1TQB.mjs} +4 -4
- package/dist/{agentHome-CboCeKWq.cjs → agentHome-DvNnGphb.cjs} +4 -4
- package/dist/{api-CgundNNX.cjs → api-B2vLMS-z.cjs} +8 -8
- package/dist/{api-CLMUr-SX.mjs → api-SffjRQ1b.mjs} +8 -8
- package/dist/{apiMachine-B9dLW_p5.mjs → apiMachine-BpW9t8MO.mjs} +11 -11
- package/dist/{apiMachine-Bn8482VM.cjs → apiMachine-gFA54X7y.cjs} +11 -11
- package/dist/{assistantTools-BTqPnlFl.cjs → assistantTools-BfA0R3_m.cjs} +6 -6
- package/dist/{assistantTools-D6tuc6o4.mjs → assistantTools-CgiTbnWb.mjs} +6 -6
- package/dist/{attachmentContent-_kxRznNf.mjs → attachmentContent-CSGxr71v.mjs} +1 -1
- package/dist/{attachmentContent-DpiTJZb4.cjs → attachmentContent-DMMZzevR.cjs} +1 -1
- package/dist/{auth-ba4WMYrN.cjs → auth-Bt4ceBBy.cjs} +5 -5
- package/dist/{auth-Cwutmdsa.mjs → auth-CYHjQ8oQ.mjs} +5 -5
- package/dist/{auth-PYHZQNPp.mjs → auth-DdyVZSo6.mjs} +8 -8
- package/dist/{auth-BDOVh5h5.cjs → auth-x4CEoysH.cjs} +8 -8
- package/dist/{auto-BOX_fgmR.cjs → auto-BDXDUnjB.cjs} +12 -12
- package/dist/{auto-BXu14yP_.mjs → auto-CXLlRi3a.mjs} +12 -12
- package/dist/{bootstrap-hxXPCFMx.mjs → bootstrap-BNQq05jR.mjs} +2 -2
- package/dist/{bootstrap-B5G1TijC.cjs → bootstrap-CkgIq8N3.cjs} +2 -2
- package/dist/{browser-jh2P0UVZ.mjs → browser-9pyhQr1R.mjs} +1 -1
- package/dist/{browser-Y6Bl8L_O.cjs → browser-BDOlKWYe.cjs} +1 -1
- package/dist/{claudeLocal-CRGG4Pea.cjs → claudeLocal-BDuGFnjJ.cjs} +4 -4
- package/dist/{claudeLocal-BaY4fZKi.mjs → claudeLocal-CQa8qnwq.mjs} +4 -4
- package/dist/{claudeLocalLauncher-DyEbVzUN.cjs → claudeLocalLauncher-Bd5I2-j6.cjs} +9 -9
- package/dist/{claudeLocalLauncher-D4T7MTqd.mjs → claudeLocalLauncher-CDqQI9ak.mjs} +9 -9
- package/dist/{client-CeGKqqcJ.mjs → client-Brn-UwVk.mjs} +3 -3
- package/dist/{client-ClR0K8zX.mjs → client-CXb1VJui.mjs} +2 -2
- package/dist/{client-3Ac-O4pw.cjs → client-C_axwRry.cjs} +3 -3
- package/dist/{client-BPNbmtvO.cjs → client-DOBWJL3u.cjs} +2 -2
- package/dist/codex/happyMcpStdioBridge.cjs +14 -14
- package/dist/codex/happyMcpStdioBridge.mjs +14 -14
- package/dist/{codexAppServerClient-q2FjnRcK.cjs → codexAppServerClient-ZzhUTWPo.cjs} +2 -2
- package/dist/{codexAppServerClient-I3teiV-N.mjs → codexAppServerClient-oeQKD6Qf.mjs} +2 -2
- package/dist/{codexCommand-4zcccIoq.cjs → codexCommand-C7H0NpBe.cjs} +35 -35
- package/dist/{codexCommand-Cc9gcbdX.mjs → codexCommand-CJ82bl3l.mjs} +35 -35
- package/dist/{codexThreadFork-slzAseLx.mjs → codexThreadFork-BCaEMBiM.mjs} +1 -1
- package/dist/{codexThreadFork-BH9IZPqD.cjs → codexThreadFork-BZqF-9bX.cjs} +1 -1
- package/dist/{config-CTx_jb-C.mjs → config-BglnktIo.mjs} +3 -3
- package/dist/{config-Ci9Kpgwa.cjs → config-CYpL1Ahd.cjs} +3 -3
- package/dist/{configuration-RfeNjFmd.mjs → configuration-DoWFJUPm.mjs} +1 -1
- package/dist/{configuration-BSYpcPwE.cjs → configuration-v9f8LM9T.cjs} +1 -1
- package/dist/{connect-BpOdzNbE.mjs → connect-hgcNjyAB.mjs} +11 -11
- package/dist/{connect-C2CiOUFs.cjs → connect-yEvjdRvx.cjs} +11 -11
- package/dist/{context-DsDr6E2t.cjs → context-B45vMtSZ.cjs} +1 -1
- package/dist/{context-H0Bcb9S_.mjs → context-C9GHPLEm.mjs} +1 -1
- package/dist/{controlClient-BGbDcgWS.mjs → controlClient-DjoKTtgK.mjs} +3 -3
- package/dist/{controlClient-Bcwv3D21.cjs → controlClient-fEHE85bH.cjs} +3 -3
- package/dist/{createSessionMetadata-BJxEnM-o.cjs → createSessionMetadata-BRLB9CNO.cjs} +2 -2
- package/dist/{createSessionMetadata-CVVkGjxV.mjs → createSessionMetadata-mIeehclp.mjs} +2 -2
- package/dist/{deterministicJson-C5CYTVpm.cjs → deterministicJson-DKDP_mM-.cjs} +8 -8
- package/dist/{deterministicJson-CzkFJWw1.mjs → deterministicJson-p835AdAU.mjs} +8 -8
- package/dist/{doctor-DOvByjbk.mjs → doctor-BeUuQXFs.mjs} +6 -6
- package/dist/{doctor-D2YJ-Yn2.cjs → doctor-hVNnSZJn.cjs} +6 -6
- package/dist/{ensureDaemonRunning-Dqa2pOjY.mjs → ensureDaemonRunning-CO7d1gOC.mjs} +5 -5
- package/dist/{ensureDaemonRunning-BCwNrMyv.cjs → ensureDaemonRunning-Dg9aZfjs.cjs} +5 -5
- package/dist/{handleResumeCommand-BvXYf5El.mjs → handleResumeCommand-BiTPK0qd.mjs} +5 -5
- package/dist/{handleResumeCommand-C2cKchpX.cjs → handleResumeCommand-DnVmy7a3.cjs} +5 -5
- package/dist/{index-DMZqWwsP.mjs → index-CAFwetLk.mjs} +33 -33
- package/dist/{index-DVkMGPyS.mjs → index-Cqx-Raq6.mjs} +3 -3
- package/dist/{index-B6pAdvJx.cjs → index-LIn6nCcq.cjs} +32 -32
- package/dist/{index-Bu5Zi_a9.cjs → index-Pf2cV9cn.cjs} +4 -4
- package/dist/{index-DKLU_fD0.mjs → index-SPGPenK5.mjs} +4 -4
- package/dist/{index-DDeHXrIX.cjs → index-gNTWtSKN.cjs} +3 -3
- package/dist/index.cjs +2 -2
- package/dist/index.mjs +2 -2
- package/dist/{install-BgoC2e_2.cjs → install-Bu85vlHD.cjs} +3 -3
- package/dist/{install-CFY3tYtJ.mjs → install-ClUUl3yp.mjs} +3 -3
- package/dist/lib.cjs +10 -10
- package/dist/lib.mjs +10 -10
- package/dist/{lidState-CeEt442o.mjs → lidState-C2dI0FAN.mjs} +1 -1
- package/dist/{lidState-BeDfxxEX.cjs → lidState-KHHu1015.cjs} +1 -1
- package/dist/{localHappyAgentAuth-D6rFhaoc.cjs → localHappyAgentAuth-BXiHPXdC.cjs} +1 -1
- package/dist/{localHappyAgentAuth-C-HQyiv6.mjs → localHappyAgentAuth-DCsetiyG.mjs} +1 -1
- package/dist/{logger-CS0mw3fa.cjs → logger-Bc8-u1w0.cjs} +2 -2
- package/dist/{logger-6HYUEXNk.mjs → logger-fXoNzNuB.mjs} +2 -2
- package/dist/{machineMetadata-oOzBfDfs.mjs → machineMetadata-BHjehxJY.mjs} +3 -3
- package/dist/{machineMetadata-DyDbODYd.cjs → machineMetadata-BibDMFVx.cjs} +3 -3
- package/dist/{main-BwNIAI1A.mjs → main-BktM4A1K.mjs} +44 -44
- package/dist/{main-BkxJP6JQ.cjs → main-CLaX-t-b.cjs} +44 -44
- package/dist/{mcp-B1A4I3TK.mjs → mcp-CeUd9KDr.mjs} +14 -14
- package/dist/{mcp-Hszd7qpS.cjs → mcp-GBfE70nk.cjs} +14 -14
- package/dist/{package-BwMrPwqH.cjs → package-Cl5BEP5x.cjs} +7 -7
- package/dist/{package-BhaKlnxz.mjs → package-uOg9SCKi.mjs} +7 -7
- package/dist/{peerTools-BvKtHXj8.cjs → peerTools-CIeiy9wn.cjs} +4 -4
- package/dist/{peerTools-BTqw97Gb.mjs → peerTools-Dz3_7Bkk.mjs} +4 -4
- package/dist/{permissionMode-Cr5JCbB7.mjs → permissionMode-CH4FoZfU.mjs} +1 -1
- package/dist/{persistence-yKTH3-5X.cjs → persistence-CBNMzSa8.cjs} +3 -3
- package/dist/{persistence-HGW_ZVs9.mjs → persistence-oET5n61f.mjs} +3 -3
- package/dist/{piRunnerArgs-BNloJCCg.cjs → piRunnerArgs-Bf7RUF__.cjs} +1 -1
- package/dist/{piRunnerArgs-BuX1UFWy.mjs → piRunnerArgs-Dk1ncwHF.mjs} +1 -1
- package/dist/{piRuntime-C_H7MJCM.cjs → piRuntime-B_6TE9Eb.cjs} +1 -1
- package/dist/{piRuntime-CSGkwCKQ.mjs → piRuntime-BwRdhK_N.mjs} +1 -1
- package/dist/{piTerminal-C8a1OrNQ.mjs → piTerminal-Bap3R8Re.mjs} +16 -16
- package/dist/{piTerminal-DNCZ6yTM.cjs → piTerminal-CagmEoez.cjs} +16 -16
- package/dist/{registerCommonHandlers-DskirN-_.cjs → registerCommonHandlers-BjSV2Skz.cjs} +2 -2
- package/dist/{registerCommonHandlers-Ccvsz7Ou.mjs → registerCommonHandlers-CrgvJsOy.mjs} +2 -2
- package/dist/{registerKillSessionHandler-DZeLXWcB.cjs → registerKillSessionHandler-6TC2S3lf.cjs} +13 -8
- package/dist/{registerKillSessionHandler-GYvHdipX.mjs → registerKillSessionHandler-Cbc8Rgtd.mjs} +13 -8
- package/dist/{remoteSessionClient-B0LraSB9.cjs → remoteSessionClient-BNx78NLb.cjs} +5 -5
- package/dist/{remoteSessionClient-CYnXRynE.mjs → remoteSessionClient-CO7qOjR0.mjs} +5 -5
- package/dist/{run-D3ifupU3.mjs → run-2l5vSt2h.mjs} +32 -28
- package/dist/{run-CJzxoHVh.cjs → run-D5xAEWSB.cjs} +33 -29
- package/dist/{runClaude-Da3RirzE.cjs → runClaude-BX6ixjtW.cjs} +182 -138
- package/dist/{runClaude-Ba01qT-u.mjs → runClaude-BgN6xo05.mjs} +183 -139
- package/dist/{runClaudeDeps-DOzEBMls.cjs → runClaudeDeps-Bp20MScE.cjs} +638 -119
- package/dist/{runClaudeDeps-DOt79DjU.mjs → runClaudeDeps-COBBhD9o.mjs} +628 -123
- package/dist/{runGemini-DSr9LIxL.cjs → runGemini-CSMPkt0p.cjs} +30 -30
- package/dist/{runGemini-BGeTz57m.mjs → runGemini-Cc2jq-uh.mjs} +30 -30
- package/dist/{runOpenClaw-CogSedIc.mjs → runOpenClaw-CIlCwdW2.mjs} +15 -15
- package/dist/{runOpenClaw-B1mTxN35.cjs → runOpenClaw-YBwua4Rf.cjs} +15 -15
- package/dist/{sandbox-CG7IyDTU.cjs → sandbox-C4gXLP1p.cjs} +4 -4
- package/dist/{sandbox-DTe6d54R.mjs → sandbox-CNkwOtHI.mjs} +4 -4
- package/dist/{selfCheck-Dc-mNSLb.cjs → selfCheck-CU8xSDsl.cjs} +34 -34
- package/dist/selfCheck-hJ6PCh7v.mjs +84 -0
- package/dist/{send-CBXJKc6O.mjs → send-CGHcKZ-w.mjs} +8 -8
- package/dist/{send-B7J_eaG3.cjs → send-DY9Nr-x4.cjs} +8 -8
- package/dist/{server-CZTP_iOn.cjs → server-II51Mimf.cjs} +6 -6
- package/dist/{server-DcVBv04l.mjs → server-m2b5pamZ.mjs} +4 -4
- package/dist/{sessionLock-Bys1PNSo.cjs → sessionLock-7ePAYDOg.cjs} +2 -2
- package/dist/{sessionLock-D-EG2CfG.mjs → sessionLock-Cw6FmbMv.mjs} +2 -2
- package/dist/{sessionModeFile-RSm0NQkH.cjs → sessionModeFile-BVCV5f7E.cjs} +1 -1
- package/dist/{sessionModeFile-DMl3dw3r.mjs → sessionModeFile-CDmDyRkD.mjs} +1 -1
- package/dist/{sessionOps-SuHW8Dfe.mjs → sessionOps-C_f1wKOr.mjs} +4 -4
- package/dist/{sessionOps-Dn8z85h_.cjs → sessionOps-DJdExmBy.cjs} +4 -4
- package/dist/{sessionScanner-CX3onqXh.mjs → sessionScanner-CaAHLyNV.mjs} +3 -3
- package/dist/{sessionScanner-BOrGjMXL.cjs → sessionScanner-D1goKdd3.cjs} +3 -3
- package/dist/{sessions-D74aJbhL.cjs → sessions-DGs6ALNo.cjs} +9 -9
- package/dist/{sessions-BEG_HTSi.mjs → sessions-DnvmWUel.mjs} +9 -9
- package/dist/{setupOfflineReconnection-DpvWTt69.mjs → setupOfflineReconnection-CVViqZft.mjs} +2 -2
- package/dist/{setupOfflineReconnection-ByElY60m.cjs → setupOfflineReconnection-R7XuR_sj.cjs} +2 -2
- package/dist/{spawn-DgR0RKRs.cjs → spawn-CXTH7qg1.cjs} +19 -11
- package/dist/{spawn-B7yro0b2.mjs → spawn-DNYSvFtC.mjs} +19 -12
- package/dist/{spawnHappyCLI-DBhwZT7O.cjs → spawnHappyCLI-BhYj84rv.cjs} +1 -1
- package/dist/{spawnHappyCLI-B2H5s4B_.mjs → spawnHappyCLI-cqWQbwsb.mjs} +1 -1
- package/dist/{startFileWatcher-B4VsLgjD.cjs → startFileWatcher-CKKx-8ZO.cjs} +1 -1
- package/dist/{startFileWatcher-DErVWZE4.mjs → startFileWatcher-CdegMbJj.mjs} +1 -1
- package/dist/{sync-DccIKZ5_.cjs → sync-CVk4QERO.cjs} +1 -1
- package/dist/{sync-C8gyQFMc.mjs → sync-CxD-w_40.mjs} +1 -1
- package/dist/{systemPrompt-BwTPWfMu.cjs → systemPrompt-BygJcmbi.cjs} +1 -1
- package/dist/{systemPrompt-DX521JJz.mjs → systemPrompt-DmtypUc7.mjs} +1 -1
- package/dist/{teams-C32F1hqd.mjs → teams-BOC6nIPL.mjs} +6 -6
- package/dist/{teams-Dl8g8kTI.cjs → teams-BsvpOBfn.cjs} +6 -6
- package/dist/{time-D0XyHOid.mjs → time-BZNdNiIV.mjs} +1 -1
- package/dist/{time-DCuTyook.cjs → time-CNRE4ChD.cjs} +1 -1
- package/dist/{titleGenerator-ChzMJsyg.cjs → titleGenerator-CFRhU-xq.cjs} +2 -2
- package/dist/{titleGenerator-CQ8CoGhg.mjs → titleGenerator-ox6ptCsp.mjs} +1 -1
- package/dist/{todo-BvUOTa8G.cjs → todo-B-KB7oAB.cjs} +5 -5
- package/dist/{todo-CZ6cFrrn.mjs → todo-C5KBVbUw.mjs} +5 -5
- package/dist/{tools-BZtHF_qQ.mjs → tools-BZabNIid.mjs} +1 -1
- package/dist/{tools-DkluDcG4.mjs → tools-BmQQUATY.mjs} +1 -1
- package/dist/{tools-DQj0AeLk.cjs → tools-CsSovyNp.cjs} +1 -1
- package/dist/{tools-Be3AoAwu.cjs → tools-lMDra4Pv.cjs} +1 -1
- package/dist/{uninstall-BkLzaJ6I.mjs → uninstall-B1WLtC1d.mjs} +3 -3
- package/dist/{uninstall-x-TUtf5H.cjs → uninstall-fvA5aWpU.cjs} +3 -3
- package/package.json +7 -7
- package/scripts/session_hook_forwarder.cjs +9 -2
- package/dist/selfCheck-C9mVrQwf.mjs +0 -84
|
@@ -1,24 +1,24 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var os = require('node:os');
|
|
4
|
-
var sessionLock = require('./sessionLock-
|
|
4
|
+
var sessionLock = require('./sessionLock-7ePAYDOg.cjs');
|
|
5
5
|
var node_crypto = require('node:crypto');
|
|
6
|
-
var api = require('./api-
|
|
7
|
-
var logger = require('./logger-
|
|
8
|
-
var _package = require('./package-
|
|
9
|
-
var persistence = require('./persistence-
|
|
10
|
-
var createSessionMetadata = require('./createSessionMetadata-
|
|
6
|
+
var api = require('./api-B2vLMS-z.cjs');
|
|
7
|
+
var logger = require('./logger-Bc8-u1w0.cjs');
|
|
8
|
+
var _package = require('./package-Cl5BEP5x.cjs');
|
|
9
|
+
var persistence = require('./persistence-CBNMzSa8.cjs');
|
|
10
|
+
var createSessionMetadata = require('./createSessionMetadata-BRLB9CNO.cjs');
|
|
11
11
|
var index = require('./index-DA7yINuk.cjs');
|
|
12
|
-
var configuration = require('./configuration-
|
|
13
|
-
var controlClient = require('./controlClient-
|
|
14
|
-
var machineMetadata = require('./machineMetadata-
|
|
12
|
+
var configuration = require('./configuration-v9f8LM9T.cjs');
|
|
13
|
+
var controlClient = require('./controlClient-fEHE85bH.cjs');
|
|
14
|
+
var machineMetadata = require('./machineMetadata-BibDMFVx.cjs');
|
|
15
15
|
var projectPath = require('./projectPath-ChLhdOyt.cjs');
|
|
16
16
|
var path = require('node:path');
|
|
17
17
|
var permissionMode = require('./permissionMode-CrV-XuMs.cjs');
|
|
18
18
|
var authRelay = require('./authRelay-BdYkC1Po.cjs');
|
|
19
19
|
var promises = require('node:fs/promises');
|
|
20
20
|
var defaultPermissionMode = require('./defaultPermissionMode-CxmTXUQR.cjs');
|
|
21
|
-
var attachmentContent = require('./attachmentContent-
|
|
21
|
+
var attachmentContent = require('./attachmentContent-DMMZzevR.cjs');
|
|
22
22
|
var startupPlan = require('./startupPlan-BLMbfQIH.cjs');
|
|
23
23
|
require('node:fs');
|
|
24
24
|
require('axios');
|
|
@@ -27,39 +27,45 @@ require('socket.io-client');
|
|
|
27
27
|
require('./attachmentLimits-CzVrqgLR.cjs');
|
|
28
28
|
require('zod');
|
|
29
29
|
require('./limits-C-a7gr04.cjs');
|
|
30
|
-
require('./time-
|
|
31
|
-
require('./lidState-
|
|
30
|
+
require('./time-CNRE4ChD.cjs');
|
|
31
|
+
require('./lidState-KHHu1015.cjs');
|
|
32
32
|
require('os');
|
|
33
33
|
require('child_process');
|
|
34
|
-
require('./registerCommonHandlers-
|
|
34
|
+
require('./registerCommonHandlers-BjSV2Skz.cjs');
|
|
35
35
|
require('util');
|
|
36
36
|
require('fs/promises');
|
|
37
37
|
require('crypto');
|
|
38
38
|
require('path');
|
|
39
39
|
require('cross-spawn');
|
|
40
40
|
require('@paralleldrive/cuid2');
|
|
41
|
-
require('./sync-
|
|
41
|
+
require('./sync-CVk4QERO.cjs');
|
|
42
42
|
require('./backgroundTaskActivity-CBvUdj39.cjs');
|
|
43
43
|
require('./contentLogMetadata-ZSFk_NjQ.cjs');
|
|
44
44
|
require('chalk');
|
|
45
45
|
require('node:util');
|
|
46
46
|
require('./detectCLI-DR9ZaN6B.cjs');
|
|
47
47
|
require('fs');
|
|
48
|
-
require('./localHappyAgentAuth-
|
|
48
|
+
require('./localHappyAgentAuth-BXiHPXdC.cjs');
|
|
49
49
|
require('tweetnacl');
|
|
50
50
|
require('url');
|
|
51
51
|
|
|
52
52
|
const DEFAULT_CLAUDE_MODEL = void 0;
|
|
53
53
|
const DEFAULT_CLAUDE_EFFORT = void 0;
|
|
54
|
+
const importRunClaudeDeps = () => Promise.resolve().then(function () { return require('./runClaudeDeps-Bp20MScE.cjs'); });
|
|
54
55
|
async function runClaude(credentials, options = {}) {
|
|
55
56
|
logger.logger.debug(`[CLAUDE] ===== CLAUDE MODE STARTING =====`);
|
|
56
57
|
logger.logger.debug(`[CLAUDE] This is the Claude agent, NOT Gemini`);
|
|
57
58
|
options = { ...options, claudeEnvVars: { ...options.claudeEnvVars, HAPPY_MANAGED: "1" } };
|
|
59
|
+
const prewarmSpawnEnv = {};
|
|
60
|
+
for (const key of ["HAPPY_CLAUDE_AUTH_STATUS", "HAPPY_FIRST_MESSAGE_FROM_CLI"]) {
|
|
61
|
+
prewarmSpawnEnv[key] = process.env[key];
|
|
62
|
+
delete process.env[key];
|
|
63
|
+
}
|
|
58
64
|
const workingDirectory = process.cwd();
|
|
59
65
|
const isAssistantVariant = process.env.HAPPY_SESSION_VARIANT === "assistant";
|
|
60
66
|
if (isAssistantVariant) {
|
|
61
67
|
try {
|
|
62
|
-
const { bootstrapAssistantHome } = await Promise.resolve().then(function () { return require('./bootstrap-
|
|
68
|
+
const { bootstrapAssistantHome } = await Promise.resolve().then(function () { return require('./bootstrap-CkgIq8N3.cjs'); });
|
|
63
69
|
await bootstrapAssistantHome();
|
|
64
70
|
} catch (error) {
|
|
65
71
|
logger.logger.debug("[START] Assistant home bootstrap failed:", error);
|
|
@@ -70,9 +76,15 @@ async function runClaude(credentials, options = {}) {
|
|
|
70
76
|
if (options.startedBy === "daemon" && options.startingMode === "local") {
|
|
71
77
|
throw new Error("Daemon-spawned sessions cannot use local/interactive mode. Use --happy-starting-mode remote or spawn sessions directly from terminal.");
|
|
72
78
|
}
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
79
|
+
let depsLoadPromise = null;
|
|
80
|
+
const loadDeps = () => {
|
|
81
|
+
if (!depsLoadPromise) {
|
|
82
|
+
depsLoadPromise = importRunClaudeDeps();
|
|
83
|
+
depsLoadPromise.catch(() => {
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
return depsLoadPromise;
|
|
87
|
+
};
|
|
76
88
|
const reconnectRequested = Boolean(
|
|
77
89
|
process.env.HAPPY_RECONNECT_SESSION_ID && process.env.HAPPY_RECONNECT_ENCRYPTION_KEY && process.env.HAPPY_RECONNECT_ENCRYPTION_VARIANT
|
|
78
90
|
);
|
|
@@ -171,8 +183,8 @@ async function runClaude(credentials, options = {}) {
|
|
|
171
183
|
}
|
|
172
184
|
if (!response) {
|
|
173
185
|
let offlineSessionId = null;
|
|
174
|
-
const { claudeLocal } = await Promise.resolve().then(function () { return require('./claudeLocal-
|
|
175
|
-
const { createSessionScanner: createSessionScanner2 } = await
|
|
186
|
+
const { claudeLocal } = await Promise.resolve().then(function () { return require('./claudeLocal-BDuGFnjJ.cjs'); });
|
|
187
|
+
const { createSessionScanner: createSessionScanner2 } = await loadDeps();
|
|
176
188
|
const reconnection = api.startOfflineReconnection({
|
|
177
189
|
serverUrl: configuration.configuration.serverUrl,
|
|
178
190
|
onReconnected: async () => {
|
|
@@ -247,12 +259,13 @@ async function runClaude(credentials, options = {}) {
|
|
|
247
259
|
} catch (error) {
|
|
248
260
|
logger.logger.debug("[START] Failed to report to daemon (may not be running):", error);
|
|
249
261
|
}
|
|
262
|
+
loadDeps();
|
|
250
263
|
if (!startupPlan$1.registerMachine) {
|
|
251
264
|
void Promise.resolve().then(() => api$1.getOrCreateMachine({ machineId, metadata: machineMetadata.getInitialMachineMetadata() })).catch((error) => logger.logger.debug("[START] Background machine registration failed:", error));
|
|
252
265
|
}
|
|
253
266
|
let deps;
|
|
254
267
|
try {
|
|
255
|
-
deps = await
|
|
268
|
+
deps = await loadDeps();
|
|
256
269
|
} catch (error) {
|
|
257
270
|
logger.logger.warn(`[START] Failed to load the Claude runner modules for session ${response.id}; marking it offline and exiting: ${error instanceof Error ? error.message : String(error)}`);
|
|
258
271
|
try {
|
|
@@ -293,7 +306,21 @@ async function runClaude(credentials, options = {}) {
|
|
|
293
306
|
FileRateLimiter,
|
|
294
307
|
createSelfReportState,
|
|
295
308
|
withAssistantDenylist,
|
|
296
|
-
contentLogMetadata
|
|
309
|
+
contentLogMetadata,
|
|
310
|
+
resolveMessageMode,
|
|
311
|
+
claudePrewarmEligibility,
|
|
312
|
+
claudePrewarmSessionEligibility,
|
|
313
|
+
prewarmCacheFile,
|
|
314
|
+
readPrewarmCache,
|
|
315
|
+
writePrewarmCache,
|
|
316
|
+
prewarmPredictionMeta,
|
|
317
|
+
evaluatePrewarmPrediction,
|
|
318
|
+
acquirePrewarmSlot,
|
|
319
|
+
prewarmSlotDir,
|
|
320
|
+
PrewarmHookGate,
|
|
321
|
+
createClaudePrewarmLease,
|
|
322
|
+
disposeAllClaudePrewarms,
|
|
323
|
+
formatPrewarmLine
|
|
297
324
|
} = deps;
|
|
298
325
|
logger.logger.debugLargeJson("[START] Happy process started", getEnvironmentInfo());
|
|
299
326
|
const session = earlySession ?? api$1.sessionSyncClient(response, reconnectSeeded ? { initialSeq: response.seq } : void 0);
|
|
@@ -412,10 +439,21 @@ async function runClaude(credentials, options = {}) {
|
|
|
412
439
|
const happyServer = await startHappyServer(session, { assistant: isAssistantVariant, selfReportState: boardSelfReport });
|
|
413
440
|
logger.logger.debug(`[START] Happy MCP server started at ${happyServer.url}`);
|
|
414
441
|
let currentSession = null;
|
|
442
|
+
const prewarmHookGate = new PrewarmHookGate();
|
|
443
|
+
let scannerAnnouncedSessionId = null;
|
|
444
|
+
const announceSessionToScanner = (sessionId) => {
|
|
445
|
+
if (sessionId === scannerAnnouncedSessionId) return;
|
|
446
|
+
scannerAnnouncedSessionId = sessionId;
|
|
447
|
+
void Promise.resolve(remoteScanner.onNewSession(sessionId, { treatExistingAsProcessed: true })).catch((error) => logger.logger.debug("[START] remote scanner onNewSession failed:", error));
|
|
448
|
+
};
|
|
415
449
|
const hookServer = await startHookServer({
|
|
416
|
-
onSessionHook: (sessionId, data) => {
|
|
450
|
+
onSessionHook: (sessionId, data, hookMeta) => {
|
|
451
|
+
if (!prewarmHookGate.accepts(hookMeta?.source)) {
|
|
452
|
+
logger.logger.debug(`[START] Session hook from an unadopted warm Claude process ignored (${hookMeta?.source})`);
|
|
453
|
+
return;
|
|
454
|
+
}
|
|
417
455
|
logger.logger.debug(`[START] Session hook received: ${sessionId}`, contentLogMetadata(data));
|
|
418
|
-
|
|
456
|
+
announceSessionToScanner(sessionId);
|
|
419
457
|
if (currentSession) {
|
|
420
458
|
const previousSessionId = currentSession.sessionId;
|
|
421
459
|
if (previousSessionId !== sessionId) {
|
|
@@ -511,6 +549,94 @@ async function runClaude(credentials, options = {}) {
|
|
|
511
549
|
currentEffort = DEFAULT_CLAUDE_EFFORT;
|
|
512
550
|
logger.logger.debug("[loop] Reset current mode defaults after abort");
|
|
513
551
|
};
|
|
552
|
+
const currentModeState = () => ({
|
|
553
|
+
permissionMode: currentPermissionMode,
|
|
554
|
+
model: currentModel,
|
|
555
|
+
fallbackModel: currentFallbackModel,
|
|
556
|
+
customSystemPrompt: currentCustomSystemPrompt,
|
|
557
|
+
appendSystemPrompt: currentAppendSystemPrompt,
|
|
558
|
+
allowedTools: currentAllowedTools,
|
|
559
|
+
disallowedTools: currentDisallowedTools,
|
|
560
|
+
effort: currentEffort
|
|
561
|
+
});
|
|
562
|
+
const prewarmCachePath = prewarmCacheFile(configuration.configuration.happyHomeDir);
|
|
563
|
+
let prewarmCache = readPrewarmCache(prewarmCachePath);
|
|
564
|
+
const prewarmSessionInput = {
|
|
565
|
+
env: { ...process.env, ...prewarmSpawnEnv },
|
|
566
|
+
startedBy: options.startedBy,
|
|
567
|
+
startingMode: options.startingMode,
|
|
568
|
+
claudeArgs: options.claudeArgs,
|
|
569
|
+
setting: settings?.claudePrewarm
|
|
570
|
+
};
|
|
571
|
+
const prewarmCtx = () => ({ sandboxEnabled, isAssistantVariant, staleModeSnapshot: false });
|
|
572
|
+
const predictFirstMessageMode = () => prewarmCache ? resolveMessageMode(currentModeState(), prewarmPredictionMeta(prewarmCache), prewarmCtx()).mode : null;
|
|
573
|
+
let firstMessageScored = false;
|
|
574
|
+
const scoreFirstMessage = (meta, predicted, actual) => {
|
|
575
|
+
if (firstMessageScored) return;
|
|
576
|
+
firstMessageScored = true;
|
|
577
|
+
if (meta?.sentFrom !== "web") return;
|
|
578
|
+
if (!claudePrewarmSessionEligibility({ ...prewarmSessionInput, env: { ...process.env, ...prewarmSpawnEnv } }).eligible) return;
|
|
579
|
+
const { outcome, next } = evaluatePrewarmPrediction({ predicted, actual, meta, previous: prewarmCache });
|
|
580
|
+
logger.logger.debug(`[CLAUDE PREWARM] prediction ${outcome}${next ? ` consecutiveMisses=${next.consecutiveMisses}` : ""}`);
|
|
581
|
+
if (next && writePrewarmCache(prewarmCachePath, next)) prewarmCache = next;
|
|
582
|
+
};
|
|
583
|
+
let userMessageSeen = false;
|
|
584
|
+
const prewarmTagFiles = /* @__PURE__ */ new Set();
|
|
585
|
+
const createPrewarm = () => {
|
|
586
|
+
const eligibility = claudePrewarmEligibility({
|
|
587
|
+
...prewarmSessionInput,
|
|
588
|
+
env: { ...process.env, ...prewarmSpawnEnv },
|
|
589
|
+
cache: prewarmCache
|
|
590
|
+
});
|
|
591
|
+
if (!eligibility.eligible) {
|
|
592
|
+
logger.logger.debug(formatPrewarmLine("skipped", eligibility.reason));
|
|
593
|
+
return null;
|
|
594
|
+
}
|
|
595
|
+
if (userMessageSeen) {
|
|
596
|
+
logger.logger.debug(formatPrewarmLine("skipped", "message-already-received"));
|
|
597
|
+
return null;
|
|
598
|
+
}
|
|
599
|
+
const slot = acquirePrewarmSlot(prewarmSlotDir(configuration.configuration.happyHomeDir));
|
|
600
|
+
if (!slot) {
|
|
601
|
+
logger.logger.debug(formatPrewarmLine("skipped", "concurrency-limit"));
|
|
602
|
+
return null;
|
|
603
|
+
}
|
|
604
|
+
const predicted = predictFirstMessageMode();
|
|
605
|
+
if (!predicted) {
|
|
606
|
+
slot.release();
|
|
607
|
+
return null;
|
|
608
|
+
}
|
|
609
|
+
const tag = prewarmHookGate.newTag();
|
|
610
|
+
let tagHookSettingsPath;
|
|
611
|
+
try {
|
|
612
|
+
tagHookSettingsPath = generateHookSettingsFile(hookServer.port, tag);
|
|
613
|
+
} catch (error) {
|
|
614
|
+
slot.release();
|
|
615
|
+
logger.logger.debug(formatPrewarmLine("skipped", "hook-settings"));
|
|
616
|
+
return null;
|
|
617
|
+
}
|
|
618
|
+
prewarmTagFiles.add(tagHookSettingsPath);
|
|
619
|
+
return createClaudePrewarmLease({
|
|
620
|
+
mode: predicted,
|
|
621
|
+
hookSettingsPath: tagHookSettingsPath,
|
|
622
|
+
tag,
|
|
623
|
+
gate: prewarmHookGate,
|
|
624
|
+
slot,
|
|
625
|
+
// Only removed on discard: an adopted process keeps reading its
|
|
626
|
+
// settings file (later SessionStart events, e.g. /compact); it goes
|
|
627
|
+
// with the other hook files at exit.
|
|
628
|
+
cleanupHookSettings: () => {
|
|
629
|
+
cleanupHookSettingsFile(tagHookSettingsPath);
|
|
630
|
+
prewarmTagFiles.delete(tagHookSettingsPath);
|
|
631
|
+
},
|
|
632
|
+
log: (line) => logger.logger.debug(line)
|
|
633
|
+
});
|
|
634
|
+
};
|
|
635
|
+
const cleanupPrewarm = () => {
|
|
636
|
+
disposeAllClaudePrewarms("shutdown");
|
|
637
|
+
for (const file of prewarmTagFiles) cleanupHookSettingsFile(file);
|
|
638
|
+
prewarmTagFiles.clear();
|
|
639
|
+
};
|
|
514
640
|
session.onFileEvent((fileEvent) => {
|
|
515
641
|
const ev = fileEvent.content.data.ev;
|
|
516
642
|
logger.logger.debug(`[loop] File event received: ${ev.name} (${ev.size} bytes, ref: ${ev.ref})`);
|
|
@@ -531,112 +657,42 @@ async function runClaude(credentials, options = {}) {
|
|
|
531
657
|
session.trackAttachmentDownload(downloadPromise);
|
|
532
658
|
});
|
|
533
659
|
session.onUserMessage(async (message) => {
|
|
660
|
+
userMessageSeen = true;
|
|
534
661
|
if (message?.content?.text) {
|
|
535
662
|
titleGenerator.maybeGenerate(message.content.text);
|
|
536
663
|
boardAnalyzer.noteUserMessage(message.content.text);
|
|
537
664
|
}
|
|
538
665
|
const attachmentsForThisMessage = await session.drainAttachmentsForUserMessage();
|
|
539
|
-
let messagePermissionMode = currentPermissionMode;
|
|
540
666
|
const messageCreatedAt = message.createdAt;
|
|
541
667
|
const staleModeSnapshot = message.meta?.permissionMode !== void 0 && typeof messageCreatedAt === "number" && messageCreatedAt < lastExplicitModeSwitchAt;
|
|
542
668
|
if (staleModeSnapshot) {
|
|
543
669
|
logger.logger.debug(`[loop] Ignoring stale meta.permissionMode=${message.meta?.permissionMode} (message ${messageCreatedAt} predates explicit switch ${lastExplicitModeSwitchAt}); keeping ${currentPermissionMode}`);
|
|
544
|
-
} else if (message.meta?.permissionMode) {
|
|
545
|
-
const previousPermissionMode = currentPermissionMode;
|
|
546
|
-
messagePermissionMode = permissionMode.resolveRemoteClaudePermissionMode(
|
|
547
|
-
currentPermissionMode,
|
|
548
|
-
message.meta.permissionMode,
|
|
549
|
-
sandboxEnabled
|
|
550
|
-
);
|
|
551
|
-
publishPermissionMode(messagePermissionMode);
|
|
552
|
-
const ignoredDefaultDowngrade = (previousPermissionMode === "bypassPermissions" || previousPermissionMode === "yolo") && message.meta.permissionMode === "default" && currentPermissionMode === previousPermissionMode;
|
|
553
|
-
if (ignoredDefaultDowngrade) {
|
|
554
|
-
logger.logger.debug(`[loop] Ignoring permission mode downgrade from ${previousPermissionMode} to default`);
|
|
555
|
-
} else {
|
|
556
|
-
logger.logger.debug(`[loop] Permission mode updated from user message to: ${currentPermissionMode}`);
|
|
557
|
-
}
|
|
558
|
-
} else {
|
|
559
|
-
logger.logger.debug(`[loop] User message received with no permission mode override, using current: ${currentPermissionMode}`);
|
|
560
|
-
}
|
|
561
|
-
let messageModel = currentModel;
|
|
562
|
-
if (message.meta?.hasOwnProperty("model")) {
|
|
563
|
-
messageModel = message.meta.model || void 0;
|
|
564
|
-
currentModel = messageModel;
|
|
565
|
-
logger.logger.debug(`[loop] Model updated from user message: ${messageModel || "reset to default"}`);
|
|
566
|
-
} else {
|
|
567
|
-
logger.logger.debug(`[loop] User message received with no model override, using current: ${currentModel || "default"}`);
|
|
568
|
-
}
|
|
569
|
-
let messageCustomSystemPrompt = currentCustomSystemPrompt;
|
|
570
|
-
if (message.meta?.hasOwnProperty("customSystemPrompt")) {
|
|
571
|
-
messageCustomSystemPrompt = message.meta.customSystemPrompt || void 0;
|
|
572
|
-
currentCustomSystemPrompt = messageCustomSystemPrompt;
|
|
573
|
-
logger.logger.debug(`[loop] Custom system prompt updated from user message: ${messageCustomSystemPrompt ? "set" : "reset to none"}`);
|
|
574
|
-
} else {
|
|
575
|
-
logger.logger.debug(`[loop] User message received with no custom system prompt override, using current: ${currentCustomSystemPrompt ? "set" : "none"}`);
|
|
576
|
-
}
|
|
577
|
-
let messageFallbackModel = currentFallbackModel;
|
|
578
|
-
if (message.meta?.hasOwnProperty("fallbackModel")) {
|
|
579
|
-
messageFallbackModel = message.meta.fallbackModel || void 0;
|
|
580
|
-
currentFallbackModel = messageFallbackModel;
|
|
581
|
-
logger.logger.debug(`[loop] Fallback model updated from user message: ${messageFallbackModel || "reset to none"}`);
|
|
582
|
-
} else {
|
|
583
|
-
logger.logger.debug(`[loop] User message received with no fallback model override, using current: ${currentFallbackModel || "none"}`);
|
|
584
|
-
}
|
|
585
|
-
let messageAppendSystemPrompt = currentAppendSystemPrompt;
|
|
586
|
-
if (message.meta?.hasOwnProperty("appendSystemPrompt")) {
|
|
587
|
-
messageAppendSystemPrompt = message.meta.appendSystemPrompt || void 0;
|
|
588
|
-
currentAppendSystemPrompt = messageAppendSystemPrompt;
|
|
589
|
-
logger.logger.debug(`[loop] Append system prompt updated from user message: ${messageAppendSystemPrompt ? "set" : "reset to none"}`);
|
|
590
|
-
} else {
|
|
591
|
-
logger.logger.debug(`[loop] User message received with no append system prompt override, using current: ${currentAppendSystemPrompt ? "set" : "none"}`);
|
|
592
|
-
}
|
|
593
|
-
let messageAllowedTools = currentAllowedTools;
|
|
594
|
-
if (message.meta?.hasOwnProperty("allowedTools")) {
|
|
595
|
-
messageAllowedTools = message.meta.allowedTools || void 0;
|
|
596
|
-
currentAllowedTools = messageAllowedTools;
|
|
597
|
-
logger.logger.debug(`[loop] Allowed tools updated from user message: ${messageAllowedTools ? messageAllowedTools.join(", ") : "reset to none"}`);
|
|
598
|
-
} else {
|
|
599
|
-
logger.logger.debug(`[loop] User message received with no allowed tools override, using current: ${currentAllowedTools ? currentAllowedTools.join(", ") : "none"}`);
|
|
600
|
-
}
|
|
601
|
-
let messageDisallowedTools = currentDisallowedTools;
|
|
602
|
-
if (message.meta?.hasOwnProperty("disallowedTools")) {
|
|
603
|
-
messageDisallowedTools = withAssistantDenylist(message.meta.disallowedTools || void 0, isAssistantVariant);
|
|
604
|
-
currentDisallowedTools = messageDisallowedTools;
|
|
605
|
-
logger.logger.debug(`[loop] Disallowed tools updated from user message: ${messageDisallowedTools ? messageDisallowedTools.join(", ") : "reset to none"}`);
|
|
606
|
-
} else {
|
|
607
|
-
logger.logger.debug(`[loop] User message received with no disallowed tools override, using current: ${currentDisallowedTools ? currentDisallowedTools.join(", ") : "none"}`);
|
|
608
|
-
}
|
|
609
|
-
let messageEffort = currentEffort;
|
|
610
|
-
const VALID_EFFORTS = /* @__PURE__ */ new Set(["low", "medium", "high", "xhigh", "max"]);
|
|
611
|
-
if (message.meta?.hasOwnProperty("effort")) {
|
|
612
|
-
const incoming = message.meta.effort;
|
|
613
|
-
if (incoming === null || incoming === void 0) {
|
|
614
|
-
messageEffort = void 0;
|
|
615
|
-
currentEffort = void 0;
|
|
616
|
-
logger.logger.debug(`[loop] Effort reset to default`);
|
|
617
|
-
} else if (typeof incoming === "string" && VALID_EFFORTS.has(incoming)) {
|
|
618
|
-
messageEffort = incoming;
|
|
619
|
-
currentEffort = messageEffort;
|
|
620
|
-
logger.logger.debug(`[loop] Effort updated from user message: ${messageEffort}`);
|
|
621
|
-
} else {
|
|
622
|
-
logger.logger.debug(`[loop] Ignoring invalid effort from user message: ${String(incoming)}`);
|
|
623
|
-
}
|
|
624
|
-
} else {
|
|
625
|
-
logger.logger.debug(`[loop] User message received with no effort override, using current: ${currentEffort ?? "default"}`);
|
|
626
670
|
}
|
|
671
|
+
const previousPermissionMode = currentPermissionMode;
|
|
672
|
+
const predictedFirstMode = firstMessageScored ? null : predictFirstMessageMode();
|
|
673
|
+
const resolved = resolveMessageMode(currentModeState(), message.meta, { sandboxEnabled, isAssistantVariant, staleModeSnapshot });
|
|
674
|
+
if ("publishPermissionMode" in resolved) {
|
|
675
|
+
publishPermissionMode(resolved.publishPermissionMode);
|
|
676
|
+
const ignoredDefaultDowngrade = (previousPermissionMode === "bypassPermissions" || previousPermissionMode === "yolo") && message.meta?.permissionMode === "default" && currentPermissionMode === previousPermissionMode;
|
|
677
|
+
logger.logger.debug(ignoredDefaultDowngrade ? `[loop] Ignoring permission mode downgrade from ${previousPermissionMode} to default` : `[loop] Permission mode updated from user message to: ${currentPermissionMode}`);
|
|
678
|
+
}
|
|
679
|
+
currentModel = resolved.next.model;
|
|
680
|
+
currentFallbackModel = resolved.next.fallbackModel;
|
|
681
|
+
currentCustomSystemPrompt = resolved.next.customSystemPrompt;
|
|
682
|
+
currentAppendSystemPrompt = resolved.next.appendSystemPrompt;
|
|
683
|
+
currentAllowedTools = resolved.next.allowedTools;
|
|
684
|
+
currentDisallowedTools = resolved.next.disallowedTools;
|
|
685
|
+
currentEffort = resolved.next.effort;
|
|
686
|
+
if (resolved.ignoredEffort !== void 0) {
|
|
687
|
+
logger.logger.debug(`[loop] Ignoring invalid effort from user message: ${resolved.ignoredEffort}`);
|
|
688
|
+
}
|
|
689
|
+
logger.logger.debug(`[loop] Message mode: permission=${resolved.mode.permissionMode} model=${resolved.mode.model || "default"} effort=${resolved.mode.effort ?? "default"} appendSystemPrompt=${resolved.mode.appendSystemPrompt ? "set" : "none"} customSystemPrompt=${resolved.mode.customSystemPrompt ? "set" : "none"}`);
|
|
690
|
+
scoreFirstMessage(message.meta, predictedFirstMode, resolved.mode);
|
|
691
|
+
const resolvedMode = resolved.mode;
|
|
627
692
|
const specialCommand = parseSpecialCommand(message.content.text);
|
|
628
693
|
if (specialCommand.type === "compact") {
|
|
629
694
|
logger.logger.debug("[start] Detected /compact command");
|
|
630
|
-
const enhancedMode2 =
|
|
631
|
-
permissionMode: messagePermissionMode || "default",
|
|
632
|
-
model: messageModel,
|
|
633
|
-
fallbackModel: messageFallbackModel,
|
|
634
|
-
customSystemPrompt: messageCustomSystemPrompt,
|
|
635
|
-
appendSystemPrompt: messageAppendSystemPrompt,
|
|
636
|
-
allowedTools: messageAllowedTools,
|
|
637
|
-
disallowedTools: messageDisallowedTools,
|
|
638
|
-
effort: messageEffort
|
|
639
|
-
};
|
|
695
|
+
const enhancedMode2 = resolvedMode;
|
|
640
696
|
messageQueue.pushIsolateAndClear(specialCommand.originalMessage || message.content.text, enhancedMode2, attachmentsForThisMessage, message.localKey);
|
|
641
697
|
logger.logger.debug("[start] /compact command pushed to queue:", {
|
|
642
698
|
...contentLogMetadata(message.content.text),
|
|
@@ -647,16 +703,7 @@ async function runClaude(credentials, options = {}) {
|
|
|
647
703
|
}
|
|
648
704
|
if (specialCommand.type === "clear") {
|
|
649
705
|
logger.logger.debug("[start] Detected /clear command");
|
|
650
|
-
const enhancedMode2 =
|
|
651
|
-
permissionMode: messagePermissionMode || "default",
|
|
652
|
-
model: messageModel,
|
|
653
|
-
fallbackModel: messageFallbackModel,
|
|
654
|
-
customSystemPrompt: messageCustomSystemPrompt,
|
|
655
|
-
appendSystemPrompt: messageAppendSystemPrompt,
|
|
656
|
-
allowedTools: messageAllowedTools,
|
|
657
|
-
disallowedTools: messageDisallowedTools,
|
|
658
|
-
effort: messageEffort
|
|
659
|
-
};
|
|
706
|
+
const enhancedMode2 = resolvedMode;
|
|
660
707
|
messageQueue.pushIsolateAndClear(specialCommand.originalMessage || message.content.text, enhancedMode2, attachmentsForThisMessage, message.localKey);
|
|
661
708
|
logger.logger.debug("[start] /clear command pushed to queue:", {
|
|
662
709
|
...contentLogMetadata(message.content.text),
|
|
@@ -703,16 +750,7 @@ async function runClaude(credentials, options = {}) {
|
|
|
703
750
|
return;
|
|
704
751
|
}
|
|
705
752
|
}
|
|
706
|
-
const enhancedMode =
|
|
707
|
-
permissionMode: messagePermissionMode || "default",
|
|
708
|
-
model: messageModel,
|
|
709
|
-
fallbackModel: messageFallbackModel,
|
|
710
|
-
customSystemPrompt: messageCustomSystemPrompt,
|
|
711
|
-
appendSystemPrompt: messageAppendSystemPrompt,
|
|
712
|
-
allowedTools: messageAllowedTools,
|
|
713
|
-
disallowedTools: messageDisallowedTools,
|
|
714
|
-
effort: messageEffort
|
|
715
|
-
};
|
|
753
|
+
const enhancedMode = resolvedMode;
|
|
716
754
|
if (message.meta?.delivery === "steer" && currentRunMode === "remote") {
|
|
717
755
|
const accepted = await currentSession?.trySteer({
|
|
718
756
|
message: message.content.text,
|
|
@@ -744,6 +782,7 @@ async function runClaude(credentials, options = {}) {
|
|
|
744
782
|
}
|
|
745
783
|
logger.logger.debug(`[START] Received termination signal, cleaning up (archive=${intent === "archive"})...`);
|
|
746
784
|
promptQueueDrain.close();
|
|
785
|
+
cleanupPrewarm();
|
|
747
786
|
try {
|
|
748
787
|
if (session) {
|
|
749
788
|
currentSession?.cleanup();
|
|
@@ -809,7 +848,11 @@ async function runClaude(credentials, options = {}) {
|
|
|
809
848
|
},
|
|
810
849
|
onSessionReady: (sessionInstance) => {
|
|
811
850
|
currentSession = sessionInstance;
|
|
851
|
+
sessionInstance.addSessionFoundCallback?.(announceSessionToScanner);
|
|
812
852
|
},
|
|
853
|
+
// B-515: lease for a warm Claude process, taken once by the first
|
|
854
|
+
// remote launch (null when not eligible).
|
|
855
|
+
claudePrewarm: createPrewarm,
|
|
813
856
|
// B-355: remember exactly what the SDK is about to write to the Claude
|
|
814
857
|
// transcript, so the JSONL scanner below recognises it as ours.
|
|
815
858
|
onPromptFinalized: recordAppPrompt,
|
|
@@ -834,6 +877,7 @@ async function runClaude(credentials, options = {}) {
|
|
|
834
877
|
jsRuntime: options.jsRuntime
|
|
835
878
|
});
|
|
836
879
|
currentSession?.cleanup();
|
|
880
|
+
cleanupPrewarm();
|
|
837
881
|
session.sendSessionDeath();
|
|
838
882
|
logger.logger.debug("Waiting for socket to flush...");
|
|
839
883
|
await session.flush();
|