very-happy-cli 0.2.160 → 0.2.162
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--TmFHgRH.mjs} +3 -3
- package/dist/{AcpBackend-Bm2rdke8.cjs → AcpBackend-9asD_DL7.cjs} +3 -3
- package/dist/{AcpSessionManager-CoMWFVw3.mjs → AcpSessionManager-BSIBnWUb.mjs} +1 -1
- package/dist/{AcpSessionManager-BAY1Pggx.cjs → AcpSessionManager-BvIuBzoO.cjs} +1 -1
- package/dist/{BasePermissionHandler-CFHAxumV.cjs → BasePermissionHandler-D4B-NNu2.cjs} +1 -1
- package/dist/{BasePermissionHandler-m3WVholL.mjs → BasePermissionHandler-DUBySe0f.mjs} +1 -1
- package/dist/{BaseReasoningProcessor-CYrKBXGm.mjs → BaseReasoningProcessor-9TybUGTq.mjs} +1 -1
- package/dist/{BaseReasoningProcessor-BFa9_rZA.cjs → BaseReasoningProcessor-CqLl-ikP.cjs} +1 -1
- package/dist/{agentHome-CboCeKWq.cjs → agentHome-BohNUYnE.cjs} +4 -4
- package/dist/{agentHome-Dj1C43aJ.mjs → agentHome-DQrq_FG1.mjs} +4 -4
- package/dist/{api-CgundNNX.cjs → api-CQnLOqRS.cjs} +10 -10
- package/dist/{api-CLMUr-SX.mjs → api-D57dsd6_.mjs} +10 -10
- package/dist/{apiMachine-B9dLW_p5.mjs → apiMachine-78Aqzg--.mjs} +21 -14
- package/dist/{apiMachine-Bn8482VM.cjs → apiMachine-fFFaWxYy.cjs} +33 -26
- package/dist/{assistantTools-BTqPnlFl.cjs → assistantTools-CwESq24n.cjs} +6 -6
- package/dist/{assistantTools-D6tuc6o4.mjs → assistantTools-mEz6uNqL.mjs} +6 -6
- package/dist/{attachmentContent-DpiTJZb4.cjs → attachmentContent-GHOk6Muq.cjs} +2 -2
- package/dist/{attachmentContent-_kxRznNf.mjs → attachmentContent-s1xPha4Q.mjs} +2 -2
- package/dist/{attachmentLimits-yba1uHFO.mjs → attachmentLimits-D5pgmASK.mjs} +1 -1
- package/dist/{attachmentLimits-CzVrqgLR.cjs → attachmentLimits-DzlBPyJP.cjs} +1 -1
- package/dist/{auth-BDOVh5h5.cjs → auth-B8EagV6G.cjs} +8 -8
- package/dist/{auth-PYHZQNPp.mjs → auth-BOaHWquu.mjs} +8 -8
- package/dist/{auth-ba4WMYrN.cjs → auth-BbSdXMQ_.cjs} +5 -5
- package/dist/{auth-Cwutmdsa.mjs → auth-C8V7-oUT.mjs} +5 -5
- package/dist/{auto-BOX_fgmR.cjs → auto-Bw_h0yVc.cjs} +15 -14
- package/dist/{auto-BXu14yP_.mjs → auto-CWDOX35m.mjs} +15 -14
- package/dist/{bootstrap-hxXPCFMx.mjs → bootstrap-BKmsYSwh.mjs} +2 -2
- package/dist/{bootstrap-B5G1TijC.cjs → bootstrap-DvZjEa9_.cjs} +2 -2
- package/dist/{browser-Y6Bl8L_O.cjs → browser-CBZj-1Wx.cjs} +1 -1
- package/dist/{browser-jh2P0UVZ.mjs → browser-CrMAr5fI.mjs} +1 -1
- package/dist/{claudeLocal-CRGG4Pea.cjs → claudeLocal-Bpw-u9et.cjs} +5 -5
- package/dist/{claudeLocal-BaY4fZKi.mjs → claudeLocal-dhdlcQ6F.mjs} +5 -5
- package/dist/{claudeLocalLauncher-D4T7MTqd.mjs → claudeLocalLauncher-BFfGT4eY.mjs} +10 -10
- package/dist/{claudeLocalLauncher-DyEbVzUN.cjs → claudeLocalLauncher-DWFWuLhY.cjs} +10 -10
- package/dist/{codexThreadFork-BH9IZPqD.cjs → claudeSessionFork-D9-mANmu.cjs} +1 -137
- package/dist/{codexThreadFork-slzAseLx.mjs → claudeSessionFork-_DUrXaqd.mjs} +2 -134
- package/dist/{client-BPNbmtvO.cjs → client-CVQJWqjx.cjs} +2 -2
- package/dist/{client-3Ac-O4pw.cjs → client-DiBTHWNU.cjs} +3 -3
- package/dist/{client-CeGKqqcJ.mjs → client-Dk7x-s-O.mjs} +3 -3
- package/dist/{client-ClR0K8zX.mjs → client-DwqHDsLb.mjs} +2 -2
- package/dist/codex/happyMcpStdioBridge.cjs +15 -15
- package/dist/codex/happyMcpStdioBridge.mjs +15 -15
- package/dist/{codexAppServerClient-I3teiV-N.mjs → codexAppServerClient-C2ybs2mZ.mjs} +2 -2
- package/dist/{codexAppServerClient-q2FjnRcK.cjs → codexAppServerClient-DlKv5TjG.cjs} +2 -2
- package/dist/{codexCommand-4zcccIoq.cjs → codexCommand-4vLE31fj.cjs} +45 -40
- package/dist/{codexCommand-Cc9gcbdX.mjs → codexCommand-DnmFr9Qx.mjs} +45 -40
- package/dist/codexThreadFork-DNekT4nQ.cjs +138 -0
- package/dist/codexThreadFork-R76RU5H0.mjs +133 -0
- package/dist/{config-Ci9Kpgwa.cjs → config-Btd4B05_.cjs} +3 -3
- package/dist/{config-CTx_jb-C.mjs → config-CSOG_ZcP.mjs} +3 -3
- package/dist/{configuration-RfeNjFmd.mjs → configuration-A5gW_0GE.mjs} +1 -1
- package/dist/{configuration-BSYpcPwE.cjs → configuration-UsI0sxEv.cjs} +1 -1
- package/dist/{connect-C2CiOUFs.cjs → connect-C9yxp8Om.cjs} +13 -13
- package/dist/{connect-BpOdzNbE.mjs → connect-DWYj8LP_.mjs} +13 -13
- package/dist/{context-DsDr6E2t.cjs → context-0FjjA4vJ.cjs} +1 -1
- package/dist/{context-H0Bcb9S_.mjs → context-BXnxalWW.mjs} +1 -1
- package/dist/{controlClient-Bcwv3D21.cjs → controlClient-BXktrQ4z.cjs} +3 -3
- package/dist/{controlClient-BGbDcgWS.mjs → controlClient-CYzHrh3e.mjs} +3 -3
- package/dist/{createSessionMetadata-CVVkGjxV.mjs → createSessionMetadata-Dyg33ZlU.mjs} +2 -2
- package/dist/{createSessionMetadata-BJxEnM-o.cjs → createSessionMetadata-EX1eAlHx.cjs} +2 -2
- package/dist/{deterministicJson-CzkFJWw1.mjs → deterministicJson-DiR7EOMO.mjs} +9 -9
- package/dist/{deterministicJson-C5CYTVpm.cjs → deterministicJson-eha_oMZ2.cjs} +9 -9
- package/dist/{doctor-D2YJ-Yn2.cjs → doctor-DunLBgVi.cjs} +6 -6
- package/dist/{doctor-DOvByjbk.mjs → doctor-FuCvKdRa.mjs} +6 -6
- package/dist/{ensureDaemonRunning-BCwNrMyv.cjs → ensureDaemonRunning-B4dZFmUy.cjs} +5 -5
- package/dist/{ensureDaemonRunning-Dqa2pOjY.mjs → ensureDaemonRunning-EZkb-CAF.mjs} +5 -5
- package/dist/{handleResumeCommand-C2cKchpX.cjs → handleResumeCommand-CKMIw4pE.cjs} +5 -5
- package/dist/{handleResumeCommand-BvXYf5El.mjs → handleResumeCommand-CsXendKb.mjs} +5 -5
- package/dist/{index-DMZqWwsP.mjs → index-9L39wqYR.mjs} +37 -37
- package/dist/{index-qdS1friN.mjs → index-BBg9j0XK.mjs} +8 -1
- package/dist/{index-B6pAdvJx.cjs → index-BOhgL3rh.cjs} +36 -36
- package/dist/{index-Bu5Zi_a9.cjs → index-CZWAiydF.cjs} +4 -4
- package/dist/{index-DVkMGPyS.mjs → index-CvXcVQ06.mjs} +3 -3
- package/dist/{index-DA7yINuk.cjs → index-DJ-oV52i.cjs} +8 -1
- package/dist/{index-DKLU_fD0.mjs → index-DK2JpTJf.mjs} +4 -4
- package/dist/{index-DDeHXrIX.cjs → index-DRhWHEuW.cjs} +3 -3
- package/dist/index.cjs +2 -2
- package/dist/index.mjs +2 -2
- package/dist/{install-CFY3tYtJ.mjs → install-B2duVo9a.mjs} +3 -3
- package/dist/{install-BgoC2e_2.cjs → install-C8WyZI9K.cjs} +3 -3
- package/dist/lib.cjs +12 -12
- package/dist/lib.d.cts +5 -0
- package/dist/lib.d.mts +5 -0
- package/dist/lib.mjs +12 -12
- package/dist/{lidState-CeEt442o.mjs → lidState-CigXWxhe.mjs} +1 -1
- package/dist/{lidState-BeDfxxEX.cjs → lidState-Ds-6ytZV.cjs} +1 -1
- package/dist/{localHappyAgentAuth-C-HQyiv6.mjs → localHappyAgentAuth-CaCyKzYp.mjs} +1 -1
- package/dist/{localHappyAgentAuth-D6rFhaoc.cjs → localHappyAgentAuth-l0Na-5Ys.cjs} +1 -1
- package/dist/{logger-CS0mw3fa.cjs → logger-7ucWm9wp.cjs} +2 -2
- package/dist/{logger-6HYUEXNk.mjs → logger-CGE4C8ho.mjs} +2 -2
- package/dist/{machineMetadata-DyDbODYd.cjs → machineMetadata-lMPtpF16.cjs} +3 -3
- package/dist/{machineMetadata-oOzBfDfs.mjs → machineMetadata-ue1nkowa.mjs} +3 -3
- package/dist/{main-BwNIAI1A.mjs → main-3fIFXD-t.mjs} +44 -44
- package/dist/{main-BkxJP6JQ.cjs → main-CFI0datL.cjs} +44 -44
- package/dist/{mcp-B1A4I3TK.mjs → mcp-DARQBZ7l.mjs} +14 -14
- package/dist/{mcp-Hszd7qpS.cjs → mcp-DfxLAc1G.cjs} +14 -14
- package/dist/{package-BwMrPwqH.cjs → package-D1A-8ZJy.cjs} +7 -7
- package/dist/{package-BhaKlnxz.mjs → package-DQsvY1XN.mjs} +7 -7
- package/dist/{peerTools-BTqw97Gb.mjs → peerTools-D19hhSQF.mjs} +4 -4
- package/dist/{peerTools-BvKtHXj8.cjs → peerTools-DLwNaEEV.cjs} +4 -4
- package/dist/{permissionMode-Cr5JCbB7.mjs → permissionMode-CH4FoZfU.mjs} +1 -1
- package/dist/{persistence-HGW_ZVs9.mjs → persistence-Cw8aLoyL.mjs} +3 -3
- package/dist/{persistence-yKTH3-5X.cjs → persistence-i0nQMLlk.cjs} +3 -3
- package/dist/{piRunnerArgs-BuX1UFWy.mjs → piRunnerArgs-58t454gw.mjs} +1 -1
- package/dist/{piRunnerArgs-BNloJCCg.cjs → piRunnerArgs-BUyxPxjZ.cjs} +1 -1
- package/dist/{piRuntime-CSGkwCKQ.mjs → piRuntime-DVPixFjl.mjs} +1 -1
- package/dist/{piRuntime-C_H7MJCM.cjs → piRuntime-Dff73XCb.cjs} +1 -1
- package/dist/{piTerminal-DNCZ6yTM.cjs → piTerminal-Dz1RrO70.cjs} +16 -16
- package/dist/{piTerminal-C8a1OrNQ.mjs → piTerminal-gHWFAyzq.mjs} +16 -16
- package/dist/{registerCommonHandlers-DskirN-_.cjs → registerCommonHandlers-CMROPdJz.cjs} +2 -2
- package/dist/{registerCommonHandlers-Ccvsz7Ou.mjs → registerCommonHandlers-Ckv5boQI.mjs} +2 -2
- package/dist/{registerKillSessionHandler-DZeLXWcB.cjs → registerKillSessionHandler-CA9-oelM.cjs} +19 -10
- package/dist/{registerKillSessionHandler-GYvHdipX.mjs → registerKillSessionHandler-Cll4-o8Y.mjs} +19 -10
- package/dist/{remoteSessionClient-CYnXRynE.mjs → remoteSessionClient-BMjsbuBh.mjs} +5 -5
- package/dist/{remoteSessionClient-B0LraSB9.cjs → remoteSessionClient-DX9jHLeW.cjs} +5 -5
- package/dist/{run-CJzxoHVh.cjs → run-CjbGo2wb.cjs} +36 -32
- package/dist/{run-D3ifupU3.mjs → run-CrunzDlt.mjs} +35 -31
- package/dist/{runClaude-Da3RirzE.cjs → runClaude-KN-4Y4LH.cjs} +184 -140
- package/dist/{runClaude-Ba01qT-u.mjs → runClaude-WDBWRtnF.mjs} +185 -141
- package/dist/{runClaudeDeps-DOzEBMls.cjs → runClaudeDeps-DW-8lnHv.cjs} +821 -125
- package/dist/{runClaudeDeps-DOt79DjU.mjs → runClaudeDeps-QaEx8y5r.mjs} +811 -129
- package/dist/{runGemini-DSr9LIxL.cjs → runGemini-Djmwjdv1.cjs} +32 -32
- package/dist/{runGemini-BGeTz57m.mjs → runGemini-Nf6SKBpw.mjs} +32 -32
- package/dist/{runOpenClaw-CogSedIc.mjs → runOpenClaw-9nHtmYbN.mjs} +18 -18
- package/dist/{runOpenClaw-B1mTxN35.cjs → runOpenClaw-CAqP5KFH.cjs} +18 -18
- package/dist/{sandbox-CG7IyDTU.cjs → sandbox-C8Dd8GPM.cjs} +4 -4
- package/dist/{sandbox-DTe6d54R.mjs → sandbox-SP0THMt0.mjs} +4 -4
- package/dist/selfCheck-7FaZtVu2.mjs +84 -0
- package/dist/{selfCheck-Dc-mNSLb.cjs → selfCheck-D9ZXrK7h.cjs} +34 -34
- package/dist/{send-CBXJKc6O.mjs → send-DOx9aQsx.mjs} +8 -8
- package/dist/{send-B7J_eaG3.cjs → send-LPk6Q5HI.cjs} +8 -8
- package/dist/{server-DcVBv04l.mjs → server-BZNi8Hq_.mjs} +4 -4
- package/dist/{server-CZTP_iOn.cjs → server-CxT8jNyn.cjs} +6 -6
- package/dist/{sessionLock-D-EG2CfG.mjs → sessionLock-CfLqJfeI.mjs} +2 -2
- package/dist/{sessionLock-Bys1PNSo.cjs → sessionLock-y9rnA4LK.cjs} +2 -2
- package/dist/{sessionModeFile-RSm0NQkH.cjs → sessionModeFile-B5YeoQJh.cjs} +1 -1
- package/dist/{sessionModeFile-DMl3dw3r.mjs → sessionModeFile-BKxgNH3P.mjs} +1 -1
- package/dist/{sessionOps-SuHW8Dfe.mjs → sessionOps-CdwVPSZz.mjs} +4 -4
- package/dist/{sessionOps-Dn8z85h_.cjs → sessionOps-GsELm2PZ.cjs} +4 -4
- package/dist/{sessionScanner-CX3onqXh.mjs → sessionScanner-Cdukzo70.mjs} +3 -3
- package/dist/{sessionScanner-BOrGjMXL.cjs → sessionScanner-aLEv7mD3.cjs} +3 -3
- package/dist/{sessions-D74aJbhL.cjs → sessions-CfG4WGN0.cjs} +9 -9
- package/dist/{sessions-BEG_HTSi.mjs → sessions-Dne-OiRL.mjs} +9 -9
- package/dist/{setupOfflineReconnection-ByElY60m.cjs → setupOfflineReconnection-CFwltTcP.cjs} +2 -2
- package/dist/{setupOfflineReconnection-DpvWTt69.mjs → setupOfflineReconnection-DiQma2Cc.mjs} +2 -2
- package/dist/{spawn-DgR0RKRs.cjs → spawn-BI_sdgWs.cjs} +24 -15
- package/dist/{spawn-B7yro0b2.mjs → spawn-DkgP2BGF.mjs} +22 -14
- package/dist/{spawnAgents-DZzZ9jMI.mjs → spawnAgents-Y1LjnCt9.mjs} +1 -1
- package/dist/{spawnAgents-BGQiEF-w.cjs → spawnAgents-iSu1Xzs5.cjs} +1 -1
- package/dist/{spawnHappyCLI-B2H5s4B_.mjs → spawnHappyCLI-9mx4lPxh.mjs} +1 -1
- package/dist/{spawnHappyCLI-DBhwZT7O.cjs → spawnHappyCLI-BRdx0sAX.cjs} +1 -1
- package/dist/{startFileWatcher-B4VsLgjD.cjs → startFileWatcher-C2HC2_Dg.cjs} +1 -1
- package/dist/{startFileWatcher-DErVWZE4.mjs → startFileWatcher-COD5UKNs.mjs} +1 -1
- package/dist/{streamRelay-FPVbHpbM.mjs → streamRelay-BLgU9X3R.mjs} +1 -1
- package/dist/{streamRelay-BiKw59Cc.cjs → streamRelay-DnObXZZj.cjs} +1 -1
- package/dist/{sync-C8gyQFMc.mjs → sync-BpLasLu2.mjs} +1 -1
- package/dist/{sync-DccIKZ5_.cjs → sync-Dj92ZJ8Y.cjs} +1 -1
- package/dist/{systemPrompt-BwTPWfMu.cjs → systemPrompt-CyEz_IfR.cjs} +2 -2
- package/dist/{systemPrompt-DX521JJz.mjs → systemPrompt-DsQoUgQw.mjs} +2 -2
- package/dist/{teams-C32F1hqd.mjs → teams-BETNMjpZ.mjs} +6 -6
- package/dist/{teams-Dl8g8kTI.cjs → teams-Ctx9zXn4.cjs} +6 -6
- package/dist/{time-DCuTyook.cjs → time-CLwVAz6s.cjs} +1 -1
- package/dist/{time-D0XyHOid.mjs → time-CVvxdEDh.mjs} +1 -1
- package/dist/{titleGenerator-CQ8CoGhg.mjs → titleGenerator-B4AW3dLr.mjs} +12 -2
- package/dist/{titleGenerator-ChzMJsyg.cjs → titleGenerator-FDpdizn7.cjs} +13 -3
- package/dist/{todo-BvUOTa8G.cjs → todo-C3tyFeq1.cjs} +6 -6
- package/dist/{todo-CZ6cFrrn.mjs → todo-Jk4Vs7hP.mjs} +6 -6
- package/dist/{tools-BZtHF_qQ.mjs → tools-BA1qkiV1.mjs} +2 -2
- package/dist/{tools-DQj0AeLk.cjs → tools-CGxq3I52.cjs} +2 -2
- package/dist/{tools-Be3AoAwu.cjs → tools-O5beDK-s.cjs} +1 -1
- package/dist/{tools-DkluDcG4.mjs → tools-_kFe4m_l.mjs} +1 -1
- package/dist/{uninstall-BkLzaJ6I.mjs → uninstall-C_mdAZlm.mjs} +3 -3
- package/dist/{uninstall-x-TUtf5H.cjs → uninstall-DHKF90lo.cjs} +3 -3
- package/package.json +7 -7
- package/scripts/session_hook_forwarder.cjs +9 -2
- package/dist/selfCheck-C9mVrQwf.mjs +0 -84
|
@@ -1,63 +1,69 @@
|
|
|
1
1
|
import os from 'node:os';
|
|
2
|
-
import { c as claimSessionOrExit, a as applyServerSnapshot, w as withoutServerSnapshot, m as mergeReconnectMetadata } from './sessionLock-
|
|
2
|
+
import { c as claimSessionOrExit, a as applyServerSnapshot, w as withoutServerSnapshot, m as mergeReconnectMetadata } from './sessionLock-CfLqJfeI.mjs';
|
|
3
3
|
import { randomUUID } from 'node:crypto';
|
|
4
|
-
import { c as connectionState, A as ApiClient, s as startOfflineReconnection } from './api-
|
|
5
|
-
import { l as logger } from './logger-
|
|
6
|
-
import { p as packageJson } from './package-
|
|
7
|
-
import { readSettings } from './persistence-
|
|
8
|
-
import { s as spawnOriginTags } from './createSessionMetadata-
|
|
9
|
-
import { P as PROMPT_QUEUE_CAPABILITY } from './index-
|
|
10
|
-
import { c as configuration } from './configuration-
|
|
11
|
-
import { n as notifyDaemonSessionStarted } from './controlClient-
|
|
12
|
-
import { g as getInitialMachineMetadata } from './machineMetadata-
|
|
4
|
+
import { c as connectionState, A as ApiClient, s as startOfflineReconnection } from './api-D57dsd6_.mjs';
|
|
5
|
+
import { l as logger } from './logger-CGE4C8ho.mjs';
|
|
6
|
+
import { p as packageJson } from './package-DQsvY1XN.mjs';
|
|
7
|
+
import { readSettings } from './persistence-Cw8aLoyL.mjs';
|
|
8
|
+
import { s as spawnOriginTags } from './createSessionMetadata-Dyg33ZlU.mjs';
|
|
9
|
+
import { P as PROMPT_QUEUE_CAPABILITY } from './index-BBg9j0XK.mjs';
|
|
10
|
+
import { c as configuration } from './configuration-A5gW_0GE.mjs';
|
|
11
|
+
import { n as notifyDaemonSessionStarted } from './controlClient-CYzHrh3e.mjs';
|
|
12
|
+
import { g as getInitialMachineMetadata } from './machineMetadata-ue1nkowa.mjs';
|
|
13
13
|
import { p as projectPath } from './projectPath-BTBIMB57.mjs';
|
|
14
14
|
import { resolve, join } from 'node:path';
|
|
15
|
-
import { a as applySandboxPermissionPolicy, r as resolveInitialClaudePermissionMode, m as mapToClaudeMode, b as
|
|
15
|
+
import { a as applySandboxPermissionPolicy, r as resolveInitialClaudePermissionMode, m as mapToClaudeMode, b as reconcilePublishedPermissionMode } from './permissionMode-CH4FoZfU.mjs';
|
|
16
16
|
import { d as decodeBase64, e as encodeBase64 } from './authRelay-DSAvg1uv.mjs';
|
|
17
17
|
import { readFile } from 'node:fs/promises';
|
|
18
18
|
import { D as DEFAULT_CLAUDE_PERMISSION_MODE } from './defaultPermissionMode-BnxJPVHT.mjs';
|
|
19
|
-
import { C as CLAUDE_ATTACHMENT_KINDS, s as stripAttachmentManifest } from './attachmentContent-
|
|
19
|
+
import { C as CLAUDE_ATTACHMENT_KINDS, s as stripAttachmentManifest } from './attachmentContent-s1xPha4Q.mjs';
|
|
20
20
|
import { p as planClaudeStartup } from './startupPlan-DFMyNgAs.mjs';
|
|
21
21
|
import 'node:fs';
|
|
22
22
|
import 'axios';
|
|
23
23
|
import 'node:events';
|
|
24
24
|
import 'socket.io-client';
|
|
25
|
-
import './attachmentLimits-
|
|
25
|
+
import './attachmentLimits-D5pgmASK.mjs';
|
|
26
26
|
import 'zod';
|
|
27
27
|
import './limits-DIo7rEBR.mjs';
|
|
28
|
-
import './time-
|
|
29
|
-
import './lidState-
|
|
28
|
+
import './time-CVvxdEDh.mjs';
|
|
29
|
+
import './lidState-CigXWxhe.mjs';
|
|
30
30
|
import 'os';
|
|
31
31
|
import 'child_process';
|
|
32
|
-
import './registerCommonHandlers-
|
|
32
|
+
import './registerCommonHandlers-Ckv5boQI.mjs';
|
|
33
33
|
import 'util';
|
|
34
34
|
import 'fs/promises';
|
|
35
35
|
import 'crypto';
|
|
36
36
|
import 'path';
|
|
37
37
|
import 'cross-spawn';
|
|
38
38
|
import '@paralleldrive/cuid2';
|
|
39
|
-
import './sync-
|
|
39
|
+
import './sync-BpLasLu2.mjs';
|
|
40
40
|
import './backgroundTaskActivity-8PdPxrvy.mjs';
|
|
41
41
|
import './contentLogMetadata-BlWI0egu.mjs';
|
|
42
42
|
import 'chalk';
|
|
43
43
|
import 'node:util';
|
|
44
44
|
import './detectCLI-CSGMlV51.mjs';
|
|
45
45
|
import 'fs';
|
|
46
|
-
import './localHappyAgentAuth-
|
|
46
|
+
import './localHappyAgentAuth-CaCyKzYp.mjs';
|
|
47
47
|
import 'tweetnacl';
|
|
48
48
|
import 'url';
|
|
49
49
|
|
|
50
50
|
const DEFAULT_CLAUDE_MODEL = void 0;
|
|
51
51
|
const DEFAULT_CLAUDE_EFFORT = void 0;
|
|
52
|
+
const importRunClaudeDeps = () => import('./runClaudeDeps-QaEx8y5r.mjs');
|
|
52
53
|
async function runClaude(credentials, options = {}) {
|
|
53
54
|
logger.debug(`[CLAUDE] ===== CLAUDE MODE STARTING =====`);
|
|
54
55
|
logger.debug(`[CLAUDE] This is the Claude agent, NOT Gemini`);
|
|
55
56
|
options = { ...options, claudeEnvVars: { ...options.claudeEnvVars, HAPPY_MANAGED: "1" } };
|
|
57
|
+
const prewarmSpawnEnv = {};
|
|
58
|
+
for (const key of ["HAPPY_CLAUDE_AUTH_STATUS", "HAPPY_FIRST_MESSAGE_FROM_CLI"]) {
|
|
59
|
+
prewarmSpawnEnv[key] = process.env[key];
|
|
60
|
+
delete process.env[key];
|
|
61
|
+
}
|
|
56
62
|
const workingDirectory = process.cwd();
|
|
57
63
|
const isAssistantVariant = process.env.HAPPY_SESSION_VARIANT === "assistant";
|
|
58
64
|
if (isAssistantVariant) {
|
|
59
65
|
try {
|
|
60
|
-
const { bootstrapAssistantHome } = await import('./bootstrap-
|
|
66
|
+
const { bootstrapAssistantHome } = await import('./bootstrap-BKmsYSwh.mjs');
|
|
61
67
|
await bootstrapAssistantHome();
|
|
62
68
|
} catch (error) {
|
|
63
69
|
logger.debug("[START] Assistant home bootstrap failed:", error);
|
|
@@ -68,9 +74,15 @@ async function runClaude(credentials, options = {}) {
|
|
|
68
74
|
if (options.startedBy === "daemon" && options.startingMode === "local") {
|
|
69
75
|
throw new Error("Daemon-spawned sessions cannot use local/interactive mode. Use --happy-starting-mode remote or spawn sessions directly from terminal.");
|
|
70
76
|
}
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
77
|
+
let depsLoadPromise = null;
|
|
78
|
+
const loadDeps = () => {
|
|
79
|
+
if (!depsLoadPromise) {
|
|
80
|
+
depsLoadPromise = importRunClaudeDeps();
|
|
81
|
+
depsLoadPromise.catch(() => {
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
return depsLoadPromise;
|
|
85
|
+
};
|
|
74
86
|
const reconnectRequested = Boolean(
|
|
75
87
|
process.env.HAPPY_RECONNECT_SESSION_ID && process.env.HAPPY_RECONNECT_ENCRYPTION_KEY && process.env.HAPPY_RECONNECT_ENCRYPTION_VARIANT
|
|
76
88
|
);
|
|
@@ -169,8 +181,8 @@ async function runClaude(credentials, options = {}) {
|
|
|
169
181
|
}
|
|
170
182
|
if (!response) {
|
|
171
183
|
let offlineSessionId = null;
|
|
172
|
-
const { claudeLocal } = await import('./claudeLocal-
|
|
173
|
-
const { createSessionScanner: createSessionScanner2 } = await
|
|
184
|
+
const { claudeLocal } = await import('./claudeLocal-dhdlcQ6F.mjs');
|
|
185
|
+
const { createSessionScanner: createSessionScanner2 } = await loadDeps();
|
|
174
186
|
const reconnection = startOfflineReconnection({
|
|
175
187
|
serverUrl: configuration.serverUrl,
|
|
176
188
|
onReconnected: async () => {
|
|
@@ -245,12 +257,13 @@ async function runClaude(credentials, options = {}) {
|
|
|
245
257
|
} catch (error) {
|
|
246
258
|
logger.debug("[START] Failed to report to daemon (may not be running):", error);
|
|
247
259
|
}
|
|
260
|
+
loadDeps();
|
|
248
261
|
if (!startupPlan.registerMachine) {
|
|
249
262
|
void Promise.resolve().then(() => api.getOrCreateMachine({ machineId, metadata: getInitialMachineMetadata() })).catch((error) => logger.debug("[START] Background machine registration failed:", error));
|
|
250
263
|
}
|
|
251
264
|
let deps;
|
|
252
265
|
try {
|
|
253
|
-
deps = await
|
|
266
|
+
deps = await loadDeps();
|
|
254
267
|
} catch (error) {
|
|
255
268
|
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)}`);
|
|
256
269
|
try {
|
|
@@ -291,7 +304,21 @@ async function runClaude(credentials, options = {}) {
|
|
|
291
304
|
FileRateLimiter,
|
|
292
305
|
createSelfReportState,
|
|
293
306
|
withAssistantDenylist,
|
|
294
|
-
contentLogMetadata
|
|
307
|
+
contentLogMetadata,
|
|
308
|
+
resolveMessageMode,
|
|
309
|
+
claudePrewarmEligibility,
|
|
310
|
+
claudePrewarmSessionEligibility,
|
|
311
|
+
prewarmCacheFile,
|
|
312
|
+
readPrewarmCache,
|
|
313
|
+
writePrewarmCache,
|
|
314
|
+
prewarmPredictionMeta,
|
|
315
|
+
evaluatePrewarmPrediction,
|
|
316
|
+
acquirePrewarmSlot,
|
|
317
|
+
prewarmSlotDir,
|
|
318
|
+
PrewarmHookGate,
|
|
319
|
+
createClaudePrewarmLease,
|
|
320
|
+
disposeAllClaudePrewarms,
|
|
321
|
+
formatPrewarmLine
|
|
295
322
|
} = deps;
|
|
296
323
|
logger.debugLargeJson("[START] Happy process started", getEnvironmentInfo());
|
|
297
324
|
const session = earlySession ?? api.sessionSyncClient(response, reconnectSeeded ? { initialSeq: response.seq } : void 0);
|
|
@@ -410,10 +437,21 @@ async function runClaude(credentials, options = {}) {
|
|
|
410
437
|
const happyServer = await startHappyServer(session, { assistant: isAssistantVariant, selfReportState: boardSelfReport });
|
|
411
438
|
logger.debug(`[START] Happy MCP server started at ${happyServer.url}`);
|
|
412
439
|
let currentSession = null;
|
|
440
|
+
const prewarmHookGate = new PrewarmHookGate();
|
|
441
|
+
let scannerAnnouncedSessionId = null;
|
|
442
|
+
const announceSessionToScanner = (sessionId) => {
|
|
443
|
+
if (sessionId === scannerAnnouncedSessionId) return;
|
|
444
|
+
scannerAnnouncedSessionId = sessionId;
|
|
445
|
+
void Promise.resolve(remoteScanner.onNewSession(sessionId, { treatExistingAsProcessed: true })).catch((error) => logger.debug("[START] remote scanner onNewSession failed:", error));
|
|
446
|
+
};
|
|
413
447
|
const hookServer = await startHookServer({
|
|
414
|
-
onSessionHook: (sessionId, data) => {
|
|
448
|
+
onSessionHook: (sessionId, data, hookMeta) => {
|
|
449
|
+
if (!prewarmHookGate.accepts(hookMeta?.source)) {
|
|
450
|
+
logger.debug(`[START] Session hook from an unadopted warm Claude process ignored (${hookMeta?.source})`);
|
|
451
|
+
return;
|
|
452
|
+
}
|
|
415
453
|
logger.debug(`[START] Session hook received: ${sessionId}`, contentLogMetadata(data));
|
|
416
|
-
|
|
454
|
+
announceSessionToScanner(sessionId);
|
|
417
455
|
if (currentSession) {
|
|
418
456
|
const previousSessionId = currentSession.sessionId;
|
|
419
457
|
if (previousSessionId !== sessionId) {
|
|
@@ -509,6 +547,94 @@ async function runClaude(credentials, options = {}) {
|
|
|
509
547
|
currentEffort = DEFAULT_CLAUDE_EFFORT;
|
|
510
548
|
logger.debug("[loop] Reset current mode defaults after abort");
|
|
511
549
|
};
|
|
550
|
+
const currentModeState = () => ({
|
|
551
|
+
permissionMode: currentPermissionMode,
|
|
552
|
+
model: currentModel,
|
|
553
|
+
fallbackModel: currentFallbackModel,
|
|
554
|
+
customSystemPrompt: currentCustomSystemPrompt,
|
|
555
|
+
appendSystemPrompt: currentAppendSystemPrompt,
|
|
556
|
+
allowedTools: currentAllowedTools,
|
|
557
|
+
disallowedTools: currentDisallowedTools,
|
|
558
|
+
effort: currentEffort
|
|
559
|
+
});
|
|
560
|
+
const prewarmCachePath = prewarmCacheFile(configuration.happyHomeDir);
|
|
561
|
+
let prewarmCache = readPrewarmCache(prewarmCachePath);
|
|
562
|
+
const prewarmSessionInput = {
|
|
563
|
+
env: { ...process.env, ...prewarmSpawnEnv },
|
|
564
|
+
startedBy: options.startedBy,
|
|
565
|
+
startingMode: options.startingMode,
|
|
566
|
+
claudeArgs: options.claudeArgs,
|
|
567
|
+
setting: settings?.claudePrewarm
|
|
568
|
+
};
|
|
569
|
+
const prewarmCtx = () => ({ sandboxEnabled, isAssistantVariant, staleModeSnapshot: false });
|
|
570
|
+
const predictFirstMessageMode = () => prewarmCache ? resolveMessageMode(currentModeState(), prewarmPredictionMeta(prewarmCache), prewarmCtx()).mode : null;
|
|
571
|
+
let firstMessageScored = false;
|
|
572
|
+
const scoreFirstMessage = (meta, predicted, actual) => {
|
|
573
|
+
if (firstMessageScored) return;
|
|
574
|
+
firstMessageScored = true;
|
|
575
|
+
if (meta?.sentFrom !== "web") return;
|
|
576
|
+
if (!claudePrewarmSessionEligibility({ ...prewarmSessionInput, env: { ...process.env, ...prewarmSpawnEnv } }).eligible) return;
|
|
577
|
+
const { outcome, next } = evaluatePrewarmPrediction({ predicted, actual, meta, previous: prewarmCache });
|
|
578
|
+
logger.debug(`[CLAUDE PREWARM] prediction ${outcome}${next ? ` consecutiveMisses=${next.consecutiveMisses}` : ""}`);
|
|
579
|
+
if (next && writePrewarmCache(prewarmCachePath, next)) prewarmCache = next;
|
|
580
|
+
};
|
|
581
|
+
let userMessageSeen = false;
|
|
582
|
+
const prewarmTagFiles = /* @__PURE__ */ new Set();
|
|
583
|
+
const createPrewarm = () => {
|
|
584
|
+
const eligibility = claudePrewarmEligibility({
|
|
585
|
+
...prewarmSessionInput,
|
|
586
|
+
env: { ...process.env, ...prewarmSpawnEnv },
|
|
587
|
+
cache: prewarmCache
|
|
588
|
+
});
|
|
589
|
+
if (!eligibility.eligible) {
|
|
590
|
+
logger.debug(formatPrewarmLine("skipped", eligibility.reason));
|
|
591
|
+
return null;
|
|
592
|
+
}
|
|
593
|
+
if (userMessageSeen) {
|
|
594
|
+
logger.debug(formatPrewarmLine("skipped", "message-already-received"));
|
|
595
|
+
return null;
|
|
596
|
+
}
|
|
597
|
+
const slot = acquirePrewarmSlot(prewarmSlotDir(configuration.happyHomeDir));
|
|
598
|
+
if (!slot) {
|
|
599
|
+
logger.debug(formatPrewarmLine("skipped", "concurrency-limit"));
|
|
600
|
+
return null;
|
|
601
|
+
}
|
|
602
|
+
const predicted = predictFirstMessageMode();
|
|
603
|
+
if (!predicted) {
|
|
604
|
+
slot.release();
|
|
605
|
+
return null;
|
|
606
|
+
}
|
|
607
|
+
const tag = prewarmHookGate.newTag();
|
|
608
|
+
let tagHookSettingsPath;
|
|
609
|
+
try {
|
|
610
|
+
tagHookSettingsPath = generateHookSettingsFile(hookServer.port, tag);
|
|
611
|
+
} catch (error) {
|
|
612
|
+
slot.release();
|
|
613
|
+
logger.debug(formatPrewarmLine("skipped", "hook-settings"));
|
|
614
|
+
return null;
|
|
615
|
+
}
|
|
616
|
+
prewarmTagFiles.add(tagHookSettingsPath);
|
|
617
|
+
return createClaudePrewarmLease({
|
|
618
|
+
mode: predicted,
|
|
619
|
+
hookSettingsPath: tagHookSettingsPath,
|
|
620
|
+
tag,
|
|
621
|
+
gate: prewarmHookGate,
|
|
622
|
+
slot,
|
|
623
|
+
// Only removed on discard: an adopted process keeps reading its
|
|
624
|
+
// settings file (later SessionStart events, e.g. /compact); it goes
|
|
625
|
+
// with the other hook files at exit.
|
|
626
|
+
cleanupHookSettings: () => {
|
|
627
|
+
cleanupHookSettingsFile(tagHookSettingsPath);
|
|
628
|
+
prewarmTagFiles.delete(tagHookSettingsPath);
|
|
629
|
+
},
|
|
630
|
+
log: (line) => logger.debug(line)
|
|
631
|
+
});
|
|
632
|
+
};
|
|
633
|
+
const cleanupPrewarm = () => {
|
|
634
|
+
disposeAllClaudePrewarms("shutdown");
|
|
635
|
+
for (const file of prewarmTagFiles) cleanupHookSettingsFile(file);
|
|
636
|
+
prewarmTagFiles.clear();
|
|
637
|
+
};
|
|
512
638
|
session.onFileEvent((fileEvent) => {
|
|
513
639
|
const ev = fileEvent.content.data.ev;
|
|
514
640
|
logger.debug(`[loop] File event received: ${ev.name} (${ev.size} bytes, ref: ${ev.ref})`);
|
|
@@ -529,112 +655,42 @@ async function runClaude(credentials, options = {}) {
|
|
|
529
655
|
session.trackAttachmentDownload(downloadPromise);
|
|
530
656
|
});
|
|
531
657
|
session.onUserMessage(async (message) => {
|
|
658
|
+
userMessageSeen = true;
|
|
532
659
|
if (message?.content?.text) {
|
|
533
660
|
titleGenerator.maybeGenerate(message.content.text);
|
|
534
661
|
boardAnalyzer.noteUserMessage(message.content.text);
|
|
535
662
|
}
|
|
536
663
|
const attachmentsForThisMessage = await session.drainAttachmentsForUserMessage();
|
|
537
|
-
let messagePermissionMode = currentPermissionMode;
|
|
538
664
|
const messageCreatedAt = message.createdAt;
|
|
539
665
|
const staleModeSnapshot = message.meta?.permissionMode !== void 0 && typeof messageCreatedAt === "number" && messageCreatedAt < lastExplicitModeSwitchAt;
|
|
540
666
|
if (staleModeSnapshot) {
|
|
541
667
|
logger.debug(`[loop] Ignoring stale meta.permissionMode=${message.meta?.permissionMode} (message ${messageCreatedAt} predates explicit switch ${lastExplicitModeSwitchAt}); keeping ${currentPermissionMode}`);
|
|
542
|
-
} else if (message.meta?.permissionMode) {
|
|
543
|
-
const previousPermissionMode = currentPermissionMode;
|
|
544
|
-
messagePermissionMode = resolveRemoteClaudePermissionMode(
|
|
545
|
-
currentPermissionMode,
|
|
546
|
-
message.meta.permissionMode,
|
|
547
|
-
sandboxEnabled
|
|
548
|
-
);
|
|
549
|
-
publishPermissionMode(messagePermissionMode);
|
|
550
|
-
const ignoredDefaultDowngrade = (previousPermissionMode === "bypassPermissions" || previousPermissionMode === "yolo") && message.meta.permissionMode === "default" && currentPermissionMode === previousPermissionMode;
|
|
551
|
-
if (ignoredDefaultDowngrade) {
|
|
552
|
-
logger.debug(`[loop] Ignoring permission mode downgrade from ${previousPermissionMode} to default`);
|
|
553
|
-
} else {
|
|
554
|
-
logger.debug(`[loop] Permission mode updated from user message to: ${currentPermissionMode}`);
|
|
555
|
-
}
|
|
556
|
-
} else {
|
|
557
|
-
logger.debug(`[loop] User message received with no permission mode override, using current: ${currentPermissionMode}`);
|
|
558
|
-
}
|
|
559
|
-
let messageModel = currentModel;
|
|
560
|
-
if (message.meta?.hasOwnProperty("model")) {
|
|
561
|
-
messageModel = message.meta.model || void 0;
|
|
562
|
-
currentModel = messageModel;
|
|
563
|
-
logger.debug(`[loop] Model updated from user message: ${messageModel || "reset to default"}`);
|
|
564
|
-
} else {
|
|
565
|
-
logger.debug(`[loop] User message received with no model override, using current: ${currentModel || "default"}`);
|
|
566
|
-
}
|
|
567
|
-
let messageCustomSystemPrompt = currentCustomSystemPrompt;
|
|
568
|
-
if (message.meta?.hasOwnProperty("customSystemPrompt")) {
|
|
569
|
-
messageCustomSystemPrompt = message.meta.customSystemPrompt || void 0;
|
|
570
|
-
currentCustomSystemPrompt = messageCustomSystemPrompt;
|
|
571
|
-
logger.debug(`[loop] Custom system prompt updated from user message: ${messageCustomSystemPrompt ? "set" : "reset to none"}`);
|
|
572
|
-
} else {
|
|
573
|
-
logger.debug(`[loop] User message received with no custom system prompt override, using current: ${currentCustomSystemPrompt ? "set" : "none"}`);
|
|
574
|
-
}
|
|
575
|
-
let messageFallbackModel = currentFallbackModel;
|
|
576
|
-
if (message.meta?.hasOwnProperty("fallbackModel")) {
|
|
577
|
-
messageFallbackModel = message.meta.fallbackModel || void 0;
|
|
578
|
-
currentFallbackModel = messageFallbackModel;
|
|
579
|
-
logger.debug(`[loop] Fallback model updated from user message: ${messageFallbackModel || "reset to none"}`);
|
|
580
|
-
} else {
|
|
581
|
-
logger.debug(`[loop] User message received with no fallback model override, using current: ${currentFallbackModel || "none"}`);
|
|
582
|
-
}
|
|
583
|
-
let messageAppendSystemPrompt = currentAppendSystemPrompt;
|
|
584
|
-
if (message.meta?.hasOwnProperty("appendSystemPrompt")) {
|
|
585
|
-
messageAppendSystemPrompt = message.meta.appendSystemPrompt || void 0;
|
|
586
|
-
currentAppendSystemPrompt = messageAppendSystemPrompt;
|
|
587
|
-
logger.debug(`[loop] Append system prompt updated from user message: ${messageAppendSystemPrompt ? "set" : "reset to none"}`);
|
|
588
|
-
} else {
|
|
589
|
-
logger.debug(`[loop] User message received with no append system prompt override, using current: ${currentAppendSystemPrompt ? "set" : "none"}`);
|
|
590
|
-
}
|
|
591
|
-
let messageAllowedTools = currentAllowedTools;
|
|
592
|
-
if (message.meta?.hasOwnProperty("allowedTools")) {
|
|
593
|
-
messageAllowedTools = message.meta.allowedTools || void 0;
|
|
594
|
-
currentAllowedTools = messageAllowedTools;
|
|
595
|
-
logger.debug(`[loop] Allowed tools updated from user message: ${messageAllowedTools ? messageAllowedTools.join(", ") : "reset to none"}`);
|
|
596
|
-
} else {
|
|
597
|
-
logger.debug(`[loop] User message received with no allowed tools override, using current: ${currentAllowedTools ? currentAllowedTools.join(", ") : "none"}`);
|
|
598
|
-
}
|
|
599
|
-
let messageDisallowedTools = currentDisallowedTools;
|
|
600
|
-
if (message.meta?.hasOwnProperty("disallowedTools")) {
|
|
601
|
-
messageDisallowedTools = withAssistantDenylist(message.meta.disallowedTools || void 0, isAssistantVariant);
|
|
602
|
-
currentDisallowedTools = messageDisallowedTools;
|
|
603
|
-
logger.debug(`[loop] Disallowed tools updated from user message: ${messageDisallowedTools ? messageDisallowedTools.join(", ") : "reset to none"}`);
|
|
604
|
-
} else {
|
|
605
|
-
logger.debug(`[loop] User message received with no disallowed tools override, using current: ${currentDisallowedTools ? currentDisallowedTools.join(", ") : "none"}`);
|
|
606
|
-
}
|
|
607
|
-
let messageEffort = currentEffort;
|
|
608
|
-
const VALID_EFFORTS = /* @__PURE__ */ new Set(["low", "medium", "high", "xhigh", "max"]);
|
|
609
|
-
if (message.meta?.hasOwnProperty("effort")) {
|
|
610
|
-
const incoming = message.meta.effort;
|
|
611
|
-
if (incoming === null || incoming === void 0) {
|
|
612
|
-
messageEffort = void 0;
|
|
613
|
-
currentEffort = void 0;
|
|
614
|
-
logger.debug(`[loop] Effort reset to default`);
|
|
615
|
-
} else if (typeof incoming === "string" && VALID_EFFORTS.has(incoming)) {
|
|
616
|
-
messageEffort = incoming;
|
|
617
|
-
currentEffort = messageEffort;
|
|
618
|
-
logger.debug(`[loop] Effort updated from user message: ${messageEffort}`);
|
|
619
|
-
} else {
|
|
620
|
-
logger.debug(`[loop] Ignoring invalid effort from user message: ${String(incoming)}`);
|
|
621
|
-
}
|
|
622
|
-
} else {
|
|
623
|
-
logger.debug(`[loop] User message received with no effort override, using current: ${currentEffort ?? "default"}`);
|
|
624
668
|
}
|
|
669
|
+
const previousPermissionMode = currentPermissionMode;
|
|
670
|
+
const predictedFirstMode = firstMessageScored ? null : predictFirstMessageMode();
|
|
671
|
+
const resolved = resolveMessageMode(currentModeState(), message.meta, { sandboxEnabled, isAssistantVariant, staleModeSnapshot });
|
|
672
|
+
if ("publishPermissionMode" in resolved) {
|
|
673
|
+
publishPermissionMode(resolved.publishPermissionMode);
|
|
674
|
+
const ignoredDefaultDowngrade = (previousPermissionMode === "bypassPermissions" || previousPermissionMode === "yolo") && message.meta?.permissionMode === "default" && currentPermissionMode === previousPermissionMode;
|
|
675
|
+
logger.debug(ignoredDefaultDowngrade ? `[loop] Ignoring permission mode downgrade from ${previousPermissionMode} to default` : `[loop] Permission mode updated from user message to: ${currentPermissionMode}`);
|
|
676
|
+
}
|
|
677
|
+
currentModel = resolved.next.model;
|
|
678
|
+
currentFallbackModel = resolved.next.fallbackModel;
|
|
679
|
+
currentCustomSystemPrompt = resolved.next.customSystemPrompt;
|
|
680
|
+
currentAppendSystemPrompt = resolved.next.appendSystemPrompt;
|
|
681
|
+
currentAllowedTools = resolved.next.allowedTools;
|
|
682
|
+
currentDisallowedTools = resolved.next.disallowedTools;
|
|
683
|
+
currentEffort = resolved.next.effort;
|
|
684
|
+
if (resolved.ignoredEffort !== void 0) {
|
|
685
|
+
logger.debug(`[loop] Ignoring invalid effort from user message: ${resolved.ignoredEffort}`);
|
|
686
|
+
}
|
|
687
|
+
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"}`);
|
|
688
|
+
scoreFirstMessage(message.meta, predictedFirstMode, resolved.mode);
|
|
689
|
+
const resolvedMode = resolved.mode;
|
|
625
690
|
const specialCommand = parseSpecialCommand(message.content.text);
|
|
626
691
|
if (specialCommand.type === "compact") {
|
|
627
692
|
logger.debug("[start] Detected /compact command");
|
|
628
|
-
const enhancedMode2 =
|
|
629
|
-
permissionMode: messagePermissionMode || "default",
|
|
630
|
-
model: messageModel,
|
|
631
|
-
fallbackModel: messageFallbackModel,
|
|
632
|
-
customSystemPrompt: messageCustomSystemPrompt,
|
|
633
|
-
appendSystemPrompt: messageAppendSystemPrompt,
|
|
634
|
-
allowedTools: messageAllowedTools,
|
|
635
|
-
disallowedTools: messageDisallowedTools,
|
|
636
|
-
effort: messageEffort
|
|
637
|
-
};
|
|
693
|
+
const enhancedMode2 = resolvedMode;
|
|
638
694
|
messageQueue.pushIsolateAndClear(specialCommand.originalMessage || message.content.text, enhancedMode2, attachmentsForThisMessage, message.localKey);
|
|
639
695
|
logger.debug("[start] /compact command pushed to queue:", {
|
|
640
696
|
...contentLogMetadata(message.content.text),
|
|
@@ -645,16 +701,7 @@ async function runClaude(credentials, options = {}) {
|
|
|
645
701
|
}
|
|
646
702
|
if (specialCommand.type === "clear") {
|
|
647
703
|
logger.debug("[start] Detected /clear command");
|
|
648
|
-
const enhancedMode2 =
|
|
649
|
-
permissionMode: messagePermissionMode || "default",
|
|
650
|
-
model: messageModel,
|
|
651
|
-
fallbackModel: messageFallbackModel,
|
|
652
|
-
customSystemPrompt: messageCustomSystemPrompt,
|
|
653
|
-
appendSystemPrompt: messageAppendSystemPrompt,
|
|
654
|
-
allowedTools: messageAllowedTools,
|
|
655
|
-
disallowedTools: messageDisallowedTools,
|
|
656
|
-
effort: messageEffort
|
|
657
|
-
};
|
|
704
|
+
const enhancedMode2 = resolvedMode;
|
|
658
705
|
messageQueue.pushIsolateAndClear(specialCommand.originalMessage || message.content.text, enhancedMode2, attachmentsForThisMessage, message.localKey);
|
|
659
706
|
logger.debug("[start] /clear command pushed to queue:", {
|
|
660
707
|
...contentLogMetadata(message.content.text),
|
|
@@ -701,16 +748,7 @@ async function runClaude(credentials, options = {}) {
|
|
|
701
748
|
return;
|
|
702
749
|
}
|
|
703
750
|
}
|
|
704
|
-
const enhancedMode =
|
|
705
|
-
permissionMode: messagePermissionMode || "default",
|
|
706
|
-
model: messageModel,
|
|
707
|
-
fallbackModel: messageFallbackModel,
|
|
708
|
-
customSystemPrompt: messageCustomSystemPrompt,
|
|
709
|
-
appendSystemPrompt: messageAppendSystemPrompt,
|
|
710
|
-
allowedTools: messageAllowedTools,
|
|
711
|
-
disallowedTools: messageDisallowedTools,
|
|
712
|
-
effort: messageEffort
|
|
713
|
-
};
|
|
751
|
+
const enhancedMode = resolvedMode;
|
|
714
752
|
if (message.meta?.delivery === "steer" && currentRunMode === "remote") {
|
|
715
753
|
const accepted = await currentSession?.trySteer({
|
|
716
754
|
message: message.content.text,
|
|
@@ -742,6 +780,7 @@ async function runClaude(credentials, options = {}) {
|
|
|
742
780
|
}
|
|
743
781
|
logger.debug(`[START] Received termination signal, cleaning up (archive=${intent === "archive"})...`);
|
|
744
782
|
promptQueueDrain.close();
|
|
783
|
+
cleanupPrewarm();
|
|
745
784
|
try {
|
|
746
785
|
if (session) {
|
|
747
786
|
currentSession?.cleanup();
|
|
@@ -807,7 +846,11 @@ async function runClaude(credentials, options = {}) {
|
|
|
807
846
|
},
|
|
808
847
|
onSessionReady: (sessionInstance) => {
|
|
809
848
|
currentSession = sessionInstance;
|
|
849
|
+
sessionInstance.addSessionFoundCallback?.(announceSessionToScanner);
|
|
810
850
|
},
|
|
851
|
+
// B-515: lease for a warm Claude process, taken once by the first
|
|
852
|
+
// remote launch (null when not eligible).
|
|
853
|
+
claudePrewarm: createPrewarm,
|
|
811
854
|
// B-355: remember exactly what the SDK is about to write to the Claude
|
|
812
855
|
// transcript, so the JSONL scanner below recognises it as ours.
|
|
813
856
|
onPromptFinalized: recordAppPrompt,
|
|
@@ -832,6 +875,7 @@ async function runClaude(credentials, options = {}) {
|
|
|
832
875
|
jsRuntime: options.jsRuntime
|
|
833
876
|
});
|
|
834
877
|
currentSession?.cleanup();
|
|
878
|
+
cleanupPrewarm();
|
|
835
879
|
session.sendSessionDeath();
|
|
836
880
|
logger.debug("Waiting for socket to flush...");
|
|
837
881
|
await session.flush();
|