very-happy-cli 0.2.178 → 0.2.179
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-DCQXHRzT.mjs → AcpBackend-CHp3y7cb.mjs} +135 -16
- package/dist/{AcpBackend-CDkAQXYf.cjs → AcpBackend-DFipFF7-.cjs} +135 -16
- package/dist/{AcpSessionManager-DckmUZza.cjs → AcpSessionManager-0zpvRJXc.cjs} +38 -4
- package/dist/{AcpSessionManager-BXrQcqwC.mjs → AcpSessionManager-d2-rKWWa.mjs} +38 -4
- package/dist/{BasePermissionHandler-DyLmKKtO.cjs → BasePermissionHandler-CH3zuEkA.cjs} +5 -2
- package/dist/{BasePermissionHandler-BVlrEhIi.mjs → BasePermissionHandler-DdZBYIR4.mjs} +5 -2
- package/dist/acpSessionResume-DTGmAPLt.mjs +67 -0
- package/dist/acpSessionResume-oiCBnAVA.cjs +74 -0
- package/dist/{agentHome-CEp9RMyK.cjs → agentHome-BWcz8mz0.cjs} +4 -4
- package/dist/{agentHome-C1xi37as.mjs → agentHome-CghLvL_1.mjs} +4 -4
- package/dist/{api-JANhFdZV.cjs → api-Cmjfr8Z7.cjs} +28 -260
- package/dist/{api-Dib0dmqC.mjs → api-CzwFpJQc.mjs} +21 -253
- package/dist/{apiMachine-DNTJidYH.mjs → apiMachine-DJkTEiqy.mjs} +43 -15
- package/dist/{apiMachine-QhK-sKcr.cjs → apiMachine-G6OogT08.cjs} +43 -15
- package/dist/{attachmentContent-DkkdpSSJ.mjs → attachmentContent-B2os4HbA.mjs} +2 -2
- package/dist/{attachmentContent-bpQTBJ0y.cjs → attachmentContent-Bo0UAsSu.cjs} +4 -4
- package/dist/{auth-BRjd2esb.mjs → auth-BS6PaOOG.mjs} +5 -5
- package/dist/{auth-DgIV0Cvt.cjs → auth-D6bBUwZa.cjs} +5 -5
- package/dist/{auth-DNct7VUi.mjs → auth-DMX0xPNK.mjs} +8 -8
- package/dist/{auth-omWDtgR8.cjs → auth-HEhRaNgL.cjs} +8 -8
- package/dist/{auto-CI16FZmX.cjs → auto-C6I55iOh.cjs} +18 -17
- package/dist/{auto-DKGFOJBo.mjs → auto-Cl1SEDcD.mjs} +18 -17
- package/dist/{bootstrap-DCQ87Aan.cjs → bootstrap-exVucYav.cjs} +2 -2
- package/dist/{bootstrap-BUagGC_-.mjs → bootstrap-iuyufnp3.mjs} +2 -2
- package/dist/{browser-CSKhc0Bl.cjs → browser-BohJK12g.cjs} +1 -1
- package/dist/{browser-Dj_DYQEh.mjs → browser-CSYum7xH.mjs} +1 -1
- package/dist/{claudeLocal-CCCvAeMd.mjs → claudeLocal-Dq_R3Ax_.mjs} +6 -5
- package/dist/{claudeLocal-CdIVnOZp.cjs → claudeLocal-re4yjSTx.cjs} +6 -5
- package/dist/{claudeLocalLauncher-21-xh5gc.cjs → claudeLocalLauncher-B4hJHpCA.cjs} +11 -10
- package/dist/{claudeLocalLauncher-BmrpaRYJ.mjs → claudeLocalLauncher-CN67lN7-.mjs} +11 -10
- package/dist/{claudeSessionFork-DvxMKAmY.mjs → claudeSessionFork-BihfD0Ik.mjs} +1 -1
- package/dist/{claudeSessionFork-kYCP1IJB.cjs → claudeSessionFork-DiSMYerV.cjs} +1 -1
- package/dist/{client-Dnza1hgN.cjs → client-BKcK1Bi-.cjs} +3 -3
- package/dist/client-BhoEBnuN.mjs +71 -0
- package/dist/{client-C4zKGjiJ.cjs → client-CuVdN6PP.cjs} +2 -2
- package/dist/{client-BTX9hsbr.mjs → client-DuTDwWSQ.mjs} +3 -3
- package/dist/client-ZjOsn6nZ.cjs +76 -0
- package/dist/{client-CnlkkrZO.mjs → client-wo9nbxuf.mjs} +2 -2
- package/dist/codex/happyMcpStdioBridge.cjs +24 -15
- package/dist/codex/happyMcpStdioBridge.mjs +24 -15
- package/dist/{codexAppServerClient-DvkpQgyv.mjs → codexAppServerClient-BK3zra_1.mjs} +3 -3
- package/dist/{codexAppServerClient-CRlBWGn3.cjs → codexAppServerClient-Dt5zxrun.cjs} +3 -3
- package/dist/{codexCommand-BxjogBzU.mjs → codexCommand-B6pY7CMh.mjs} +65 -60
- package/dist/{codexCommand-DzxIWXIT.cjs → codexCommand-CAZ1SLjg.cjs} +88 -83
- package/dist/{codexTermination-ySDNMEhd.mjs → codexTermination-Cd1Eon_4.mjs} +1 -1
- package/dist/{codexTermination-C28FzlLb.cjs → codexTermination-DmGbHxcD.cjs} +1 -1
- package/dist/{config-DwfEpFr3.mjs → config-2oMG_fEI.mjs} +3 -3
- package/dist/{config-BFB5uJ4t.cjs → config-B0uK6K7n.cjs} +3 -3
- package/dist/{configuration-4TGMrjul.cjs → configuration-CMHZnp6G.cjs} +1 -1
- package/dist/{configuration-DVrb61aY.mjs → configuration-WMi4idBB.mjs} +1 -1
- package/dist/{connect-C7FPY0PI.mjs → connect-BLVHhHzA.mjs} +14 -14
- package/dist/{connect-QH2VJGBG.cjs → connect-uaglGrde.cjs} +14 -14
- package/dist/{context-JoKu0V54.cjs → context-DXzU5bFM.cjs} +1 -1
- package/dist/{context-B3XPVJlj.mjs → context-DploEcoN.mjs} +1 -1
- package/dist/{controlClient-BYKyGyxj.mjs → controlClient-BWUJrj3t.mjs} +3 -3
- package/dist/{controlClient-BTaZlbC6.cjs → controlClient-C-5qCt8W.cjs} +3 -3
- package/dist/{createSessionMetadata-8Fuj2-IV.mjs → createSessionMetadata-3uXrJgOW.mjs} +2 -2
- package/dist/{createSessionMetadata-B2NynaWZ.cjs → createSessionMetadata-BkIzHALd.cjs} +2 -2
- package/dist/{defaultPermissionMode-B8kJG9uI.mjs → defaultPermissionMode-BzxLh20a.mjs} +2 -2
- package/dist/{defaultPermissionMode-BEWCqJU-.cjs → defaultPermissionMode-pS3vmiSg.cjs} +2 -2
- package/dist/{deterministicJson-BjNQsAjO.cjs → deterministicJson-B8z2GPi9.cjs} +220 -14
- package/dist/{deterministicJson-C5ZwZ7hu.mjs → deterministicJson-D_whDMFd.mjs} +217 -12
- package/dist/{doctor-BshRnjLi.cjs → doctor-Br1Kcy2J.cjs} +7 -7
- package/dist/{doctor-0BiGwJXk.mjs → doctor-CmtSsR2-.mjs} +7 -7
- package/dist/{downloadTarget-BN5vZt3K.cjs → downloadTarget-BQJK_6oH.cjs} +6 -6
- package/dist/{downloadTarget-DJPwAZlu.mjs → downloadTarget-BoNwTIH_.mjs} +6 -6
- package/dist/{ensureDaemonRunning-C5QfToCe.cjs → ensureDaemonRunning-BRUmsq6J.cjs} +5 -5
- package/dist/{ensureDaemonRunning-CSmb_mqt.mjs → ensureDaemonRunning-Czo9IHJQ.mjs} +5 -5
- package/dist/{handleResumeCommand-CgjpsdDe.mjs → handleResumeCommand-C8thKjqf.mjs} +21 -5
- package/dist/{handleResumeCommand-BwnUZmbo.cjs → handleResumeCommand-tKD_Hpxc.cjs} +21 -5
- package/dist/{index-BYOZ_8WZ.cjs → index-B0UjHlAe.cjs} +4 -4
- package/dist/{index-BehVbAsA.mjs → index-BTxHphpV.mjs} +254 -49
- package/dist/index-BiyC7cZ3.mjs +18 -0
- package/dist/{index-_l1Sdmbi.cjs → index-C6O2vVjm.cjs} +154 -33
- package/dist/index-CUuc6iCn.cjs +24 -0
- package/dist/{index-Bvldtdny.mjs → index-CdQI0C9p.mjs} +4 -4
- package/dist/{index-BRClDe07.cjs → index-D09T1m8Y.cjs} +3 -3
- package/dist/{index-BYgfern_.mjs → index-D3bidoG8.mjs} +3 -3
- package/dist/{index-piJPsTsm.cjs → index-DMqDMT1Q.cjs} +256 -51
- package/dist/{index-Clqlu17M.mjs → index-DPOa4NhL.mjs} +153 -34
- package/dist/index.cjs +2 -2
- package/dist/index.mjs +2 -2
- package/dist/{install-BdvKiOQw.mjs → install-BX3lv3NO.mjs} +1 -1
- package/dist/{install-Cf6AFSWC.cjs → install-BXvf2E3o.cjs} +1 -1
- package/dist/{install-TO4taKW7.cjs → install-CYRZxS87.cjs} +3 -3
- package/dist/{install-fYWHrPcC.mjs → install-hnve_9vq.mjs} +3 -3
- package/dist/lib.cjs +13 -13
- package/dist/lib.d.cts +62 -1
- package/dist/lib.d.mts +62 -1
- package/dist/lib.mjs +13 -13
- package/dist/{lidState-DNMlIhX0.mjs → lidState-Bb8fgXg3.mjs} +1 -1
- package/dist/{lidState-BeOwj6eW.cjs → lidState-Dv2wwFTj.cjs} +1 -1
- package/dist/{localHappyAgentAuth-Br-mgogg.cjs → localHappyAgentAuth-DjYvkXvV.cjs} +1 -1
- package/dist/{localHappyAgentAuth-BezKSFDi.mjs → localHappyAgentAuth-NEU7fax7.mjs} +1 -1
- package/dist/{logger--vAVtXB_.mjs → logger-BtVhHnD8.mjs} +2 -2
- package/dist/{logger-DXTWlPzP.cjs → logger-C1GWx3gi.cjs} +2 -2
- package/dist/{machineMetadata-DcUupMje.cjs → machineMetadata-CLHS9sv_.cjs} +3 -3
- package/dist/{machineMetadata-B1H9gNbN.mjs → machineMetadata-D-g--oU_.mjs} +3 -3
- package/dist/{main-CshDb5-1.mjs → main-B2LWV8DI.mjs} +58 -45
- package/dist/{main-DoMFJ2Cl.cjs → main-CWhSsbtU.cjs} +58 -45
- package/dist/{mcp-pNc1EbQf.cjs → mcp-CARUsXHV.cjs} +14 -14
- package/dist/{mcp-DKT_lrvQ.mjs → mcp-ext92q3Y.mjs} +14 -14
- package/dist/{mirrorProtocol-6IFGPpjJ.mjs → mirrorProtocol-BwYibqry.mjs} +3 -3
- package/dist/{mirrorProtocol-qKflWTX_.cjs → mirrorProtocol-DEy2g1CB.cjs} +3 -3
- package/dist/{package-B7B03ejW.mjs → package-BPPebGQF.mjs} +7 -7
- package/dist/{package-DY4zTbKS.cjs → package-SgqTYsjn.cjs} +7 -7
- package/dist/panels-BZ0_Tt7B.mjs +137 -0
- package/dist/panels-D1c7q2dD.cjs +142 -0
- package/dist/{peerTools-3R9RUARX.mjs → peerTools-CWKzcQ7u.mjs} +60 -10
- package/dist/{peerTools-iy3_6Yc5.cjs → peerTools-DRQETXaz.cjs} +60 -9
- package/dist/{persistence-BfX72dne.cjs → persistence-BegE7NPa.cjs} +2 -2
- package/dist/{persistence-DTk4sNpd.mjs → persistence-Cr-wutZ4.mjs} +3 -3
- package/dist/{piRunnerArgs-CRQVR9o-.cjs → piRunnerArgs-Cs-378Vz.cjs} +8 -2
- package/dist/{piRunnerArgs-AT8QJY7x.mjs → piRunnerArgs-DwvM_yWA.mjs} +7 -1
- package/dist/{piRuntime-BHRT5MKO.cjs → piRuntime-BG-1td_n.cjs} +2 -2
- package/dist/{piRuntime-E44qTVQ4.mjs → piRuntime-Bue5mnlc.mjs} +2 -2
- package/dist/{piTerminal-De8nbciM.mjs → piTerminal-B5x9X5yV.mjs} +17 -17
- package/dist/{piTerminal-hI4WFdWm.cjs → piTerminal-G4z-xVyy.cjs} +17 -17
- package/dist/processTreeSnapshot-CuLJDNC-.mjs +101 -0
- package/dist/processTreeSnapshot-mDbnuojn.cjs +105 -0
- package/dist/prompt-BOouDaTM.mjs +99 -0
- package/dist/prompt-lgF9IE82.cjs +105 -0
- package/dist/{attachmentLimits-UyFn8fkQ.mjs → pushNotifications-BdFjDjQe.mjs} +303 -3
- package/dist/{attachmentLimits-SqeAHrVC.cjs → pushNotifications-DaLQUyi0.cjs} +304 -2
- package/dist/{index-DFPT4HOO.cjs → query-Ctfg-5gy.cjs} +25 -5
- package/dist/{index-CEjJnq05.mjs → query-DYP_W1wp.mjs} +26 -3
- package/dist/{rateLimitWindows-XrJiiBpU.mjs → rateLimitWindows-CuEqk_0g.mjs} +1 -1
- package/dist/{rateLimitWindows-Czb7_7cK.cjs → rateLimitWindows-Dj_8voBK.cjs} +1 -1
- package/dist/{registerCommonHandlers-CvIedVRf.mjs → registerCommonHandlers-BAlP7SGc.mjs} +2 -2
- package/dist/{registerCommonHandlers-C0_fyBQ0.cjs → registerCommonHandlers-Cj084Sg7.cjs} +2 -2
- package/dist/{registerKillSessionHandler-gwJ5lTf0.mjs → registerKillSessionHandler-PD0jWtQo.mjs} +6 -6
- package/dist/{registerKillSessionHandler-DYl7l4Ts.cjs → registerKillSessionHandler-qMju0ZfF.cjs} +6 -6
- package/dist/{remoteSessionClient-BRTIOX5b.cjs → remoteSessionClient-B7i7MkYV.cjs} +5 -5
- package/dist/{remoteSessionClient-DRb2Jr5s.mjs → remoteSessionClient-Bn2qu5C5.mjs} +5 -5
- package/dist/{reportProgressTool-B9nCzbkL.cjs → reportProgressTool-CM1JFAHg.cjs} +84 -2
- package/dist/{reportProgressTool-D5tEoXMW.mjs → reportProgressTool-gHItlSzz.mjs} +82 -3
- package/dist/{resources-JDPugcDq.cjs → resources-CvIlkzpP.cjs} +30 -0
- package/dist/{resources-BdFBQi8r.mjs → resources-y9jfyO-_.mjs} +30 -0
- package/dist/{run-BQ_FGaOL.mjs → run-BM4TxiyN.mjs} +177 -41
- package/dist/{run-CKe_WeLW.cjs → run-CNXwIe0A.cjs} +191 -55
- package/dist/{runClaude-MHI5IKM-.cjs → runClaude-CWhj2V4Q.cjs} +36 -40
- package/dist/{runClaude-zrrNcQC_.mjs → runClaude-C_3I8hvR.mjs} +36 -40
- package/dist/{runClaudeDeps-RRw-Nusc.cjs → runClaudeDeps-B81cOKnH.cjs} +294 -156
- package/dist/{runClaudeDeps-CVBCokOS.mjs → runClaudeDeps-QGrOeDe2.mjs} +294 -159
- package/dist/{runGemini-kipag2ag.mjs → runGemini-BEdWEZLR.mjs} +60 -54
- package/dist/{runGemini-D7Lg9yCr.cjs → runGemini-CgRLYbt5.cjs} +60 -54
- package/dist/{runOpenClaw-DCcQ0L2N.cjs → runOpenClaw-C1NVmzOL.cjs} +18 -18
- package/dist/{runOpenClaw-C_lRY3Do.mjs → runOpenClaw-DdQZAYj1.mjs} +18 -18
- package/dist/{sandbox-BSyXFVFp.mjs → sandbox-DjQUdCMG.mjs} +4 -4
- package/dist/{sandbox-dMwPTmjm.cjs → sandbox-nocIjliq.cjs} +4 -4
- package/dist/selfCheck-CjCF4C3v.mjs +85 -0
- package/dist/{selfCheck-DkzDDUsE.cjs → selfCheck-DCt4Uzbq.cjs} +36 -35
- package/dist/{send-C-k9nsd3.mjs → send-Ct7X4pPU.mjs} +8 -8
- package/dist/{send-dxC0miIA.cjs → send-Dydf_hwZ.cjs} +8 -8
- package/dist/{server-B-W6P7Qr.cjs → server-CosABFbd.cjs} +6 -6
- package/dist/{server-DxoTYNlw.mjs → server-DTQGZMxh.mjs} +4 -4
- package/dist/{sessionLock-DWX6BbiU.cjs → sessionLock-DokGab2R.cjs} +16 -3
- package/dist/{sessionLock-DBdtZGOL.mjs → sessionLock-WYIyaVO4.mjs} +16 -4
- package/dist/{sessionOps-BVoXe12O.mjs → sessionOps-BIGgRube.mjs} +10 -5
- package/dist/{sessionOps-BAnr7n8t.cjs → sessionOps-S-qPBLFf.cjs} +10 -5
- package/dist/{sessionScanner-CDOYsEUD.cjs → sessionScanner-CIMM2hvZ.cjs} +3 -3
- package/dist/{sessionScanner-BtxoeluY.mjs → sessionScanner-o5hnMi5e.mjs} +3 -3
- package/dist/{sessions-C3sZJkzI.mjs → sessions-BJHEZpi2.mjs} +39 -17
- package/dist/{sessions-hAitoN-m.cjs → sessions-JchI1w3z.cjs} +39 -16
- package/dist/{setupOfflineReconnection-C2EeYTFH.cjs → setupOfflineReconnection-CNiAt5ZP.cjs} +2 -2
- package/dist/{setupOfflineReconnection-_eD4cuUT.mjs → setupOfflineReconnection-DMiBO2y9.mjs} +2 -2
- package/dist/{spawn-Bc9v7pIf.cjs → spawn-6PD7nnoC.cjs} +48 -17
- package/dist/{spawn-qNrB2CD_.mjs → spawn-DgvUNYEo.mjs} +48 -17
- package/dist/{spawnAgents-BVEaz35W.cjs → spawnAgents-DsXgegHM.cjs} +37 -1
- package/dist/spawnAgents-P006Hqio.mjs +79 -0
- package/dist/{spawnHappyCLI-C2stUioM.mjs → spawnHappyCLI-CCOrEtf9.mjs} +1 -1
- package/dist/{spawnHappyCLI-fzUagkKV.cjs → spawnHappyCLI-Dywezwk6.cjs} +1 -1
- package/dist/{specialCommands-C6W-rVyh.mjs → specialCommands-DPcd9edP.mjs} +3 -3
- package/dist/{specialCommands-BJ-nqY4s.cjs → specialCommands-QxPpkGKf.cjs} +3 -3
- package/dist/{startFileWatcher-CR09Snmz.mjs → startFileWatcher-DghDOCO4.mjs} +1 -1
- package/dist/{startFileWatcher-Bqlqjt93.cjs → startFileWatcher-RECH5qY8.cjs} +1 -1
- package/dist/{streamRelay-CJoMk_d2.mjs → streamRelay-DMV_TXfS.mjs} +1 -1
- package/dist/{streamRelay-9kBPpbvU.cjs → streamRelay-DlUWKUpo.cjs} +1 -1
- package/dist/{sync-DbW07iQS.mjs → sync-CSe0Rf45.mjs} +1 -1
- package/dist/{sync-Dhmtk66S.cjs → sync-D23jbqVa.cjs} +1 -1
- package/dist/{systemPrompt-3PYi3EUY.cjs → systemPrompt-BOy4kU4P.cjs} +4 -3
- package/dist/{systemPrompt-CQcuUmVp.mjs → systemPrompt-CFNKnh65.mjs} +4 -3
- package/dist/{teams-CwF4Z2fA.mjs → teams-DyY669f0.mjs} +8 -8
- package/dist/{teams-DpxLcUU_.cjs → teams-Ov2BDT-A.cjs} +8 -8
- package/dist/{time-BuGWTVP6.mjs → time-65DcU6Jx.mjs} +1 -1
- package/dist/{time-A6zR3Iy6.cjs → time-CrwIMHta.cjs} +1 -1
- package/dist/{titleGenerator-D26gvNaS.cjs → titleGenerator-CS_rh2_J.cjs} +9 -8
- package/dist/{titleGenerator-BGEzNWC9.mjs → titleGenerator-CiAMxf7s.mjs} +9 -8
- package/dist/{todo-DrZc76H5.mjs → todo-BDONw0sK.mjs} +6 -6
- package/dist/{todo-73g3NCIO.cjs → todo-KY-okGii.cjs} +6 -6
- package/dist/{tools-BtsrQnNS.mjs → tools-D8-PnZEG.mjs} +1 -1
- package/dist/{tools-CxJp4T1T.cjs → tools-_w52DZG6.cjs} +1 -1
- package/dist/{uninstall-DWNYvewQ.cjs → uninstall-8vnLN-IE.cjs} +3 -3
- package/dist/{uninstall-DOb2mTwV.mjs → uninstall-_fjGRP9b.mjs} +3 -3
- package/dist/webPanels-B2_C2-3g.mjs +49 -0
- package/dist/webPanels-FCgFKvVe.cjs +53 -0
- package/package.json +7 -7
- package/dist/selfCheck-CF7XGJPb.mjs +0 -84
- package/dist/sessionModeFile-ByLbXTbg.mjs +0 -32
- package/dist/sessionModeFile-CLLdidiJ.cjs +0 -36
- package/dist/spawnAgents-Bw6j4tqz.mjs +0 -45
|
@@ -1,36 +1,38 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var AcpBackend = require('./AcpBackend-
|
|
4
|
-
var logger = require('./logger-
|
|
5
|
-
var AcpSessionManager = require('./AcpSessionManager-
|
|
6
|
-
var index = require('./index-
|
|
3
|
+
var AcpBackend = require('./AcpBackend-DFipFF7-.cjs');
|
|
4
|
+
var logger = require('./logger-C1GWx3gi.cjs');
|
|
5
|
+
var AcpSessionManager = require('./AcpSessionManager-0zpvRJXc.cjs');
|
|
6
|
+
var index = require('./index-C6O2vVjm.cjs');
|
|
7
7
|
var agentAttachments = require('./agentAttachments-Dbw8iMCZ.cjs');
|
|
8
|
-
var configuration = require('./configuration-
|
|
9
|
-
var attachmentContent = require('./attachmentContent-
|
|
10
|
-
var piRuntime = require('./piRuntime-
|
|
8
|
+
var configuration = require('./configuration-CMHZnp6G.cjs');
|
|
9
|
+
var attachmentContent = require('./attachmentContent-Bo0UAsSu.cjs');
|
|
10
|
+
var piRuntime = require('./piRuntime-BG-1td_n.cjs');
|
|
11
11
|
var node_crypto = require('node:crypto');
|
|
12
12
|
var path = require('node:path');
|
|
13
|
-
var api = require('./api-
|
|
14
|
-
var
|
|
15
|
-
var
|
|
16
|
-
var
|
|
17
|
-
var
|
|
18
|
-
var
|
|
19
|
-
var
|
|
20
|
-
var
|
|
13
|
+
var api = require('./api-Cmjfr8Z7.cjs');
|
|
14
|
+
var deterministicJson = require('./deterministicJson-B8z2GPi9.cjs');
|
|
15
|
+
var client = require('./client-ZjOsn6nZ.cjs');
|
|
16
|
+
var registerKillSessionHandler = require('./registerKillSessionHandler-qMju0ZfF.cjs');
|
|
17
|
+
var persistence = require('./persistence-BegE7NPa.cjs');
|
|
18
|
+
var machineMetadata = require('./machineMetadata-CLHS9sv_.cjs');
|
|
19
|
+
var createSessionMetadata = require('./createSessionMetadata-BkIzHALd.cjs');
|
|
20
|
+
var setupOfflineReconnection = require('./setupOfflineReconnection-CNiAt5ZP.cjs');
|
|
21
|
+
var controlClient = require('./controlClient-C-5qCt8W.cjs');
|
|
21
22
|
var authRelay = require('./authRelay-Dy1qU9td.cjs');
|
|
22
|
-
var
|
|
23
|
+
var sessionLock = require('./sessionLock-DokGab2R.cjs');
|
|
24
|
+
var acpSessionResume = require('./acpSessionResume-oiCBnAVA.cjs');
|
|
25
|
+
var streamRelay = require('./streamRelay-DlUWKUpo.cjs');
|
|
23
26
|
var projectPath = require('./projectPath-ChLhdOyt.cjs');
|
|
24
|
-
var BasePermissionHandler = require('./BasePermissionHandler-
|
|
25
|
-
var titleGenerator = require('./titleGenerator-
|
|
26
|
-
var sessionModeFile = require('./sessionModeFile-CLLdidiJ.cjs');
|
|
27
|
+
var BasePermissionHandler = require('./BasePermissionHandler-CH3zuEkA.cjs');
|
|
28
|
+
var titleGenerator = require('./titleGenerator-CS_rh2_J.cjs');
|
|
27
29
|
var editPaths = require('./editPaths-Bqp4OFPw.cjs');
|
|
28
30
|
require('node:child_process');
|
|
29
31
|
require('@agentclientprotocol/sdk');
|
|
30
|
-
require('./time-
|
|
32
|
+
require('./time-CrwIMHta.cjs');
|
|
31
33
|
require('./contentLogMetadata-ZSFk_NjQ.cjs');
|
|
32
34
|
require('./processTree-CMHWlVse.cjs');
|
|
33
|
-
require('./package-
|
|
35
|
+
require('./package-SgqTYsjn.cjs');
|
|
34
36
|
require('chalk');
|
|
35
37
|
require('node:util');
|
|
36
38
|
require('node:fs');
|
|
@@ -38,49 +40,52 @@ require('@paralleldrive/cuid2');
|
|
|
38
40
|
require('zod');
|
|
39
41
|
require('node:os');
|
|
40
42
|
require('node:fs/promises');
|
|
41
|
-
require('./
|
|
42
|
-
require('./resources-JDPugcDq.cjs');
|
|
43
|
+
require('./pushNotifications-DaLQUyi0.cjs');
|
|
43
44
|
require('axios');
|
|
44
|
-
require('./
|
|
45
|
+
require('./resources-CvIlkzpP.cjs');
|
|
46
|
+
require('./lidState-Dv2wwFTj.cjs');
|
|
45
47
|
require('os');
|
|
46
48
|
require('child_process');
|
|
47
49
|
require('node:events');
|
|
48
50
|
require('socket.io-client');
|
|
49
51
|
require('./limits-C-a7gr04.cjs');
|
|
50
|
-
require('./registerCommonHandlers-
|
|
52
|
+
require('./registerCommonHandlers-Cj084Sg7.cjs');
|
|
51
53
|
require('util');
|
|
52
54
|
require('fs/promises');
|
|
53
55
|
require('crypto');
|
|
54
56
|
require('path');
|
|
55
57
|
require('cross-spawn');
|
|
56
|
-
require('./sync-
|
|
58
|
+
require('./sync-D23jbqVa.cjs');
|
|
57
59
|
require('./backgroundTaskActivity-CBvUdj39.cjs');
|
|
58
|
-
require('
|
|
59
|
-
require('./
|
|
60
|
-
require('./client-
|
|
61
|
-
require('./context-JoKu0V54.cjs');
|
|
62
|
-
require('./sessionOps-BAnr7n8t.cjs');
|
|
63
|
-
require('./tools-CxJp4T1T.cjs');
|
|
64
|
-
require('./reportProgressTool-B9nCzbkL.cjs');
|
|
65
|
-
require('./client-C4zKGjiJ.cjs');
|
|
60
|
+
require('./prompt-lgF9IE82.cjs');
|
|
61
|
+
require('./reportProgressTool-CM1JFAHg.cjs');
|
|
62
|
+
require('./client-CuVdN6PP.cjs');
|
|
66
63
|
require('./precheckCompat-CWOi5c9L.cjs');
|
|
67
64
|
require('./agentGuidance-BtBx2xxE.cjs');
|
|
68
65
|
require('./trimIdent-4gvk9Wk6.cjs');
|
|
69
|
-
require('./
|
|
66
|
+
require('./client-BKcK1Bi-.cjs');
|
|
67
|
+
require('./context-DXzU5bFM.cjs');
|
|
68
|
+
require('./sessionOps-S-qPBLFf.cjs');
|
|
69
|
+
require('./tools-_w52DZG6.cjs');
|
|
70
|
+
require('./peerTools-DRQETXaz.cjs');
|
|
70
71
|
require('./ids-B6ZC0HGt.cjs');
|
|
71
|
-
require('./remoteSessionClient-
|
|
72
|
+
require('./remoteSessionClient-B7i7MkYV.cjs');
|
|
72
73
|
require('@modelcontextprotocol/sdk/server/mcp.js');
|
|
73
74
|
require('node:http');
|
|
74
75
|
require('@modelcontextprotocol/sdk/server/streamableHttp.js');
|
|
75
|
-
require('./downloadTarget-
|
|
76
|
+
require('./downloadTarget-BQJK_6oH.cjs');
|
|
76
77
|
require('./terminals-B_bfC9c2.cjs');
|
|
77
78
|
require('./terminalTitleSuggest-DhvRFX3H.cjs');
|
|
78
79
|
require('./tmuxSocket-D-Xt6Vn-.cjs');
|
|
79
|
-
require('./bootstrap-
|
|
80
|
+
require('./bootstrap-exVucYav.cjs');
|
|
81
|
+
require('./webPanels-FCgFKvVe.cjs');
|
|
80
82
|
require('./previewPath-B0rBdhy1.cjs');
|
|
83
|
+
require('tweetnacl');
|
|
84
|
+
require('./types-CRS-srZK.cjs');
|
|
81
85
|
require('./detectCLI-DR9ZaN6B.cjs');
|
|
82
86
|
require('fs');
|
|
83
|
-
require('./localHappyAgentAuth-
|
|
87
|
+
require('./localHappyAgentAuth-DjYvkXvV.cjs');
|
|
88
|
+
require('./processTreeSnapshot-mDbnuojn.cjs');
|
|
84
89
|
require('url');
|
|
85
90
|
require('node:module');
|
|
86
91
|
require('./oneShotPrompts-CL0dip9C.cjs');
|
|
@@ -128,6 +133,113 @@ function describeAcpTurnFailure(agentName, error) {
|
|
|
128
133
|
return { message: `${agentName} error: ${oneLine(detailOf(error))}`, exited: false };
|
|
129
134
|
}
|
|
130
135
|
|
|
136
|
+
const OUT_OF_TURN_QUIET_MS = 6e4;
|
|
137
|
+
function isAcpTurnContent(msg) {
|
|
138
|
+
if (msg.type === "model-output") return typeof msg.textDelta === "string" && msg.textDelta.length > 0;
|
|
139
|
+
if (msg.type === "tool-call" || msg.type === "tool-result") return true;
|
|
140
|
+
return msg.type === "event" && msg.name === "thinking";
|
|
141
|
+
}
|
|
142
|
+
function outOfTurnAction(msg, state) {
|
|
143
|
+
if (state.inPromptTurn || !state.backendStarted) return null;
|
|
144
|
+
if (msg.type === "status" && msg.status === "idle") return state.open ? "end" : null;
|
|
145
|
+
if (!isAcpTurnContent(msg)) return null;
|
|
146
|
+
return state.open ? "touch" : "start";
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
function createPiSteerChannel() {
|
|
150
|
+
let nextId = 0;
|
|
151
|
+
const pending = [];
|
|
152
|
+
const waiters = /* @__PURE__ */ new Set();
|
|
153
|
+
const offers = /* @__PURE__ */ new Map();
|
|
154
|
+
let ready = false;
|
|
155
|
+
const readyListeners = [];
|
|
156
|
+
const hand = () => {
|
|
157
|
+
while (pending.length > 0 && waiters.size > 0) {
|
|
158
|
+
const waiter = waiters.values().next().value;
|
|
159
|
+
waiters.delete(waiter);
|
|
160
|
+
const item = pending.shift();
|
|
161
|
+
const offer = offers.get(item.id);
|
|
162
|
+
if (offer) offer.taken = true;
|
|
163
|
+
waiter(item);
|
|
164
|
+
}
|
|
165
|
+
};
|
|
166
|
+
return {
|
|
167
|
+
get ready() {
|
|
168
|
+
return ready;
|
|
169
|
+
},
|
|
170
|
+
/** The extension announced itself (first contact). */
|
|
171
|
+
hello() {
|
|
172
|
+
if (ready) return;
|
|
173
|
+
ready = true;
|
|
174
|
+
for (const listener of readyListeners.splice(0)) listener();
|
|
175
|
+
},
|
|
176
|
+
onReady(listener) {
|
|
177
|
+
if (ready) listener();
|
|
178
|
+
else readyListeners.push(listener);
|
|
179
|
+
},
|
|
180
|
+
/** Wrapper side: hand `text` to the running turn; true = pi took it. */
|
|
181
|
+
offer(text, timeoutMs) {
|
|
182
|
+
const item = { id: ++nextId, text };
|
|
183
|
+
return new Promise((resolve) => {
|
|
184
|
+
const timer = setTimeout(() => {
|
|
185
|
+
const offer = offers.get(item.id);
|
|
186
|
+
offers.delete(item.id);
|
|
187
|
+
const index = pending.findIndex((p) => p.id === item.id);
|
|
188
|
+
if (index >= 0) pending.splice(index, 1);
|
|
189
|
+
resolve(offer?.taken === true);
|
|
190
|
+
}, timeoutMs);
|
|
191
|
+
timer.unref?.();
|
|
192
|
+
offers.set(item.id, {
|
|
193
|
+
taken: false,
|
|
194
|
+
settle: (delivered) => {
|
|
195
|
+
clearTimeout(timer);
|
|
196
|
+
offers.delete(item.id);
|
|
197
|
+
resolve(delivered);
|
|
198
|
+
}
|
|
199
|
+
});
|
|
200
|
+
pending.push(item);
|
|
201
|
+
hand();
|
|
202
|
+
});
|
|
203
|
+
},
|
|
204
|
+
/** Extension side (long poll): the next message, or null after `waitMs`. */
|
|
205
|
+
take(waitMs, signal) {
|
|
206
|
+
return new Promise((resolve) => {
|
|
207
|
+
const done = () => {
|
|
208
|
+
clearTimeout(timer);
|
|
209
|
+
signal?.removeEventListener("abort", onAbort);
|
|
210
|
+
};
|
|
211
|
+
const waiter = (item) => {
|
|
212
|
+
done();
|
|
213
|
+
resolve(item);
|
|
214
|
+
};
|
|
215
|
+
const onAbort = () => {
|
|
216
|
+
waiters.delete(waiter);
|
|
217
|
+
done();
|
|
218
|
+
resolve(null);
|
|
219
|
+
};
|
|
220
|
+
const timer = setTimeout(() => {
|
|
221
|
+
waiters.delete(waiter);
|
|
222
|
+
done();
|
|
223
|
+
resolve(null);
|
|
224
|
+
}, waitMs);
|
|
225
|
+
timer.unref?.();
|
|
226
|
+
if (signal?.aborted) {
|
|
227
|
+
resolve(null);
|
|
228
|
+
clearTimeout(timer);
|
|
229
|
+
return;
|
|
230
|
+
}
|
|
231
|
+
signal?.addEventListener("abort", onAbort, { once: true });
|
|
232
|
+
waiters.add(waiter);
|
|
233
|
+
hand();
|
|
234
|
+
});
|
|
235
|
+
},
|
|
236
|
+
/** Extension side: what happened to a taken message (false: pi was no longer running). */
|
|
237
|
+
ack(id, delivered) {
|
|
238
|
+
offers.get(id)?.settle(delivered);
|
|
239
|
+
}
|
|
240
|
+
};
|
|
241
|
+
}
|
|
242
|
+
|
|
131
243
|
const SUPPORTED_CATEGORIES = /* @__PURE__ */ new Set(["mode", "model", "thought_level"]);
|
|
132
244
|
function isRecord$1(value) {
|
|
133
245
|
return !!value && typeof value === "object";
|
|
@@ -637,6 +749,7 @@ class GenericAcpPermissionHandler extends BasePermissionHandler.BasePermissionHa
|
|
|
637
749
|
});
|
|
638
750
|
}
|
|
639
751
|
}
|
|
752
|
+
const PI_STEER_OFFER_TIMEOUT_MS = 5e3;
|
|
640
753
|
function resolveSessionFlavor(agentName) {
|
|
641
754
|
if (agentName === "gemini") {
|
|
642
755
|
return "gemini";
|
|
@@ -665,12 +778,45 @@ async function runAcp(opts) {
|
|
|
665
778
|
machineId: settings.machineId,
|
|
666
779
|
startedBy: opts.startedBy,
|
|
667
780
|
sandbox: settings.sandboxConfig,
|
|
668
|
-
capabilities: [index.PROMPT_QUEUE_CAPABILITY]
|
|
781
|
+
capabilities: [index.PROMPT_QUEUE_CAPABILITY, index.PROJECT_SESSION_CAPABILITY]
|
|
669
782
|
});
|
|
670
783
|
metadata.attachmentKinds = [];
|
|
671
|
-
const
|
|
784
|
+
const reconnect = acpSessionResume.readAcpReconnectEnv(process.env);
|
|
785
|
+
let response;
|
|
786
|
+
if (reconnect) {
|
|
787
|
+
logger.logger.debug(`[acp] Reconnecting to existing session ${reconnect.sessionId}`);
|
|
788
|
+
response = {
|
|
789
|
+
id: reconnect.sessionId,
|
|
790
|
+
seq: reconnect.seq,
|
|
791
|
+
encryptionKey: authRelay.decodeBase64(reconnect.encryptionKey),
|
|
792
|
+
encryptionVariant: reconnect.encryptionVariant,
|
|
793
|
+
metadata,
|
|
794
|
+
metadataVersion: reconnect.metadataVersion,
|
|
795
|
+
agentState: state,
|
|
796
|
+
agentStateVersion: reconnect.agentStateVersion
|
|
797
|
+
};
|
|
798
|
+
} else {
|
|
799
|
+
response = await api$1.getOrCreateSession({ tag: sessionTag, metadata, state });
|
|
800
|
+
}
|
|
672
801
|
if (response) {
|
|
673
802
|
logAcp("muted", `Happy Session ID: ${response.id}`);
|
|
803
|
+
await sessionLock.claimSessionOrExit(response.id, { takeover: !!reconnect, flavor: resolveSessionFlavor(opts.agentName) });
|
|
804
|
+
}
|
|
805
|
+
if (reconnect && response && !await api$1.reactivateSession(response.id)) {
|
|
806
|
+
throw new Error(`Failed to reactivate archived session ${response.id}`);
|
|
807
|
+
}
|
|
808
|
+
let reconnectSeeded = false;
|
|
809
|
+
let resumedPermissionMode = null;
|
|
810
|
+
if (reconnect && response) {
|
|
811
|
+
const snapshot = await api$1.getSession(response.id, response.encryptionKey, response.encryptionVariant);
|
|
812
|
+
if (snapshot.ok) {
|
|
813
|
+
response = sessionLock.applyServerSnapshot(response, snapshot.session);
|
|
814
|
+
reconnectSeeded = true;
|
|
815
|
+
resumedPermissionMode = acpSessionResume.normalizeAcpPermissionMode(snapshot.session.metadata?.permissionMode) ?? null;
|
|
816
|
+
} else {
|
|
817
|
+
response = sessionLock.withoutServerSnapshot(response);
|
|
818
|
+
logger.logger.debug(`[acp] Reconnect without server snapshot (${snapshot.reason}); skipping existing messages`);
|
|
819
|
+
}
|
|
674
820
|
}
|
|
675
821
|
let session;
|
|
676
822
|
let permissionHandler;
|
|
@@ -680,6 +826,7 @@ async function runAcp(opts) {
|
|
|
680
826
|
metadata,
|
|
681
827
|
state,
|
|
682
828
|
response,
|
|
829
|
+
sessionClientOptions: reconnectSeeded && response ? { initialSeq: response.seq } : void 0,
|
|
683
830
|
onSessionSwap: (newSession) => {
|
|
684
831
|
session = newSession;
|
|
685
832
|
if (permissionHandler) {
|
|
@@ -689,6 +836,12 @@ async function runAcp(opts) {
|
|
|
689
836
|
}
|
|
690
837
|
});
|
|
691
838
|
session = initialSession;
|
|
839
|
+
if (reconnect) {
|
|
840
|
+
session.suppressNextArchiveSignal();
|
|
841
|
+
if (!reconnectSeeded) session.skipExistingMessages();
|
|
842
|
+
void session.cancelUndeliveredQueuedInputs();
|
|
843
|
+
session.updateMetadata((meta) => sessionLock.mergeReconnectMetadata(meta, metadata, Date.now()));
|
|
844
|
+
}
|
|
692
845
|
if (response) {
|
|
693
846
|
try {
|
|
694
847
|
await controlClient.notifyDaemonSessionStarted(response.id, metadata, {
|
|
@@ -728,7 +881,7 @@ async function runAcp(opts) {
|
|
|
728
881
|
let sawSlashCommands = false;
|
|
729
882
|
let sawModes = false;
|
|
730
883
|
let sawModels = false;
|
|
731
|
-
const initialPermissionMode = opts.permissionMode ?? "default";
|
|
884
|
+
const initialPermissionMode = opts.permissionMode ?? resumedPermissionMode ?? "default";
|
|
732
885
|
let fileBackedModeActive = false;
|
|
733
886
|
const permissionModeIsFileBacked = () => opts.agentName === "pi" || !modeSelector && !legacyModes;
|
|
734
887
|
let fileBackedPermissionMode = null;
|
|
@@ -737,7 +890,7 @@ async function runAcp(opts) {
|
|
|
737
890
|
return true;
|
|
738
891
|
}
|
|
739
892
|
try {
|
|
740
|
-
|
|
893
|
+
acpSessionResume.writeSessionModeFile(session.sessionId, mode);
|
|
741
894
|
} catch (error) {
|
|
742
895
|
logger.logger.debug(`[${opts.agentName}] Failed to write session mode file:`, error);
|
|
743
896
|
return false;
|
|
@@ -748,8 +901,15 @@ async function runAcp(opts) {
|
|
|
748
901
|
return true;
|
|
749
902
|
};
|
|
750
903
|
const isAssistantVariant = process.env.HAPPY_SESSION_VARIANT === "assistant";
|
|
904
|
+
const piSteer = opts.agentName === "pi" ? createPiSteerChannel() : null;
|
|
905
|
+
piSteer?.onReady(() => {
|
|
906
|
+
logger.logger.debug(`[${opts.agentName}] pi extension connected to the steer channel`);
|
|
907
|
+
session.updateMetadata((current) => ({ ...current, capabilities: [.../* @__PURE__ */ new Set([...current.capabilities ?? [], index.PI_STEER_CAPABILITY])] }));
|
|
908
|
+
});
|
|
751
909
|
const happyServer = await deterministicJson.startHappyServer(session, {
|
|
752
910
|
assistant: isAssistantVariant,
|
|
911
|
+
...piSteer ? { piSteer } : {},
|
|
912
|
+
push: { sendAttention: (input) => api$1.push().sendAttention(input) },
|
|
753
913
|
...opts.agentName === "pi" ? { onContextUsage: (contextUsage) => {
|
|
754
914
|
session.updateAgentState((state2) => ({ ...state2, contextUsage }));
|
|
755
915
|
} } : {}
|
|
@@ -771,6 +931,7 @@ async function runAcp(opts) {
|
|
|
771
931
|
...teamsPiEnv,
|
|
772
932
|
HAPPY_MCP_URL: happyServer.url,
|
|
773
933
|
...happyServer.contextUsageUrl ? { HAPPY_CONTEXT_USAGE_URL: happyServer.contextUsageUrl } : {},
|
|
934
|
+
...happyServer.steerUrl ? { HAPPY_PI_STEER_URL: happyServer.steerUrl } : {},
|
|
774
935
|
HAPPY_SESSION_ID: session.sessionId,
|
|
775
936
|
// B-497: sender identity for `very-happy sessions message|peers` in this shell.
|
|
776
937
|
VH_PEER_SESSION_ID: session.sessionId,
|
|
@@ -783,6 +944,15 @@ async function runAcp(opts) {
|
|
|
783
944
|
});
|
|
784
945
|
let backend = createBackend();
|
|
785
946
|
let thinking = false;
|
|
947
|
+
let outOfTurnTimer = null;
|
|
948
|
+
const endOutOfTurn = (reason) => {
|
|
949
|
+
if (!outOfTurnTimer) return;
|
|
950
|
+
clearTimeout(outOfTurnTimer);
|
|
951
|
+
outOfTurnTimer = null;
|
|
952
|
+
logger.logger.debug(`[${opts.agentName}] Out-of-turn output ended (${reason})`);
|
|
953
|
+
sendEnvelopes(sessionManager.endTurn("completed"));
|
|
954
|
+
setThinking(false);
|
|
955
|
+
};
|
|
786
956
|
const setThinking = (next) => {
|
|
787
957
|
if (thinking === next) {
|
|
788
958
|
return;
|
|
@@ -797,6 +967,7 @@ async function runAcp(opts) {
|
|
|
797
967
|
let backendStarted = false;
|
|
798
968
|
let backendGone = null;
|
|
799
969
|
let todoDiscoverySent = false;
|
|
970
|
+
const projectInjector = deterministicJson.createProjectInjector({ client: client.sharedProjectsClient(), sessionId: () => session?.sessionId, metadata: () => session?.getMetadata?.() ?? null, agent: opts.agentName });
|
|
800
971
|
const stopRunnerFromBackendStatus = (status, detail) => {
|
|
801
972
|
const reason = detail ? `${opts.agentName} backend ${status}: ${detail}` : `${opts.agentName} backend ${status}`;
|
|
802
973
|
logger.logger.debug(`[${opts.agentName}] ${reason}; stopping ACP runner`);
|
|
@@ -820,7 +991,7 @@ async function runAcp(opts) {
|
|
|
820
991
|
return;
|
|
821
992
|
}
|
|
822
993
|
if (permissionModeIsFileBacked()) {
|
|
823
|
-
const mode =
|
|
994
|
+
const mode = acpSessionResume.normalizeAcpPermissionMode(requestedMode);
|
|
824
995
|
if (!mode) {
|
|
825
996
|
logger.logger.debug(`[${opts.agentName}] Ignoring unknown file-backed permission mode request: ${requestedMode}`);
|
|
826
997
|
return;
|
|
@@ -1094,7 +1265,18 @@ async function runAcp(opts) {
|
|
|
1094
1265
|
controlClient.reportSessionEditToDaemon({ sessionId: session.sessionId, path: edit.path, tool: edit.tool, cwd: process.cwd() });
|
|
1095
1266
|
}
|
|
1096
1267
|
}
|
|
1268
|
+
const action = outOfTurnAction(msg, { open: outOfTurnTimer !== null, inPromptTurn: thinking && outOfTurnTimer === null, backendStarted });
|
|
1269
|
+
if (action === "start") {
|
|
1270
|
+
sendEnvelopes(sessionManager.startTurn());
|
|
1271
|
+
setThinking(true);
|
|
1272
|
+
}
|
|
1273
|
+
if (action === "start" || action === "touch") {
|
|
1274
|
+
if (outOfTurnTimer) clearTimeout(outOfTurnTimer);
|
|
1275
|
+
outOfTurnTimer = setTimeout(() => endOutOfTurn("quiet"), OUT_OF_TURN_QUIET_MS);
|
|
1276
|
+
outOfTurnTimer.unref?.();
|
|
1277
|
+
}
|
|
1097
1278
|
sendEnvelopes(sessionManager.mapMessage(msg));
|
|
1279
|
+
if (action === "end") endOutOfTurn("idle");
|
|
1098
1280
|
};
|
|
1099
1281
|
backend.onMessage(onBackendMessage);
|
|
1100
1282
|
const titleGenerator$1 = new titleGenerator.TitleGenerator(session);
|
|
@@ -1119,6 +1301,13 @@ async function runAcp(opts) {
|
|
|
1119
1301
|
if (message.meta && Object.prototype.hasOwnProperty.call(message.meta, "effort")) {
|
|
1120
1302
|
currentEffort = message.meta.effort ?? null;
|
|
1121
1303
|
}
|
|
1304
|
+
if (message.meta?.delivery === "steer" && piSteer?.ready && thinking && !attachments?.length) {
|
|
1305
|
+
if (await piSteer.offer(message.content.text, PI_STEER_OFFER_TIMEOUT_MS)) {
|
|
1306
|
+
logger.logger.debug(`[${opts.agentName}] User message steered into the running turn`);
|
|
1307
|
+
return;
|
|
1308
|
+
}
|
|
1309
|
+
logger.logger.debug(`[${opts.agentName}] Steer not taken; queued for the next turn`);
|
|
1310
|
+
}
|
|
1122
1311
|
messageQueue.push(message.content.text, {
|
|
1123
1312
|
permissionMode: currentPermissionMode,
|
|
1124
1313
|
model: currentModel,
|
|
@@ -1155,7 +1344,7 @@ async function runAcp(opts) {
|
|
|
1155
1344
|
if (!fileBackedModeActive) {
|
|
1156
1345
|
throw new Error(`${opts.agentName} does not support live permission mode changes`);
|
|
1157
1346
|
}
|
|
1158
|
-
const mode = typeof request?.mode === "string" ?
|
|
1347
|
+
const mode = typeof request?.mode === "string" ? acpSessionResume.normalizeAcpPermissionMode(request.mode) : null;
|
|
1159
1348
|
if (!mode) {
|
|
1160
1349
|
throw new Error("Invalid permission mode");
|
|
1161
1350
|
}
|
|
@@ -1185,6 +1374,12 @@ async function runAcp(opts) {
|
|
|
1185
1374
|
publishFileBackedPermissionMode(fileBackedPermissionMode ?? initialPermissionMode);
|
|
1186
1375
|
}
|
|
1187
1376
|
};
|
|
1377
|
+
let agentSessionId = opts.resumeAgentSessionId ?? null;
|
|
1378
|
+
const rememberAgentSession = (id) => {
|
|
1379
|
+
if (!id || opts.agentName !== "pi") return;
|
|
1380
|
+
agentSessionId = id;
|
|
1381
|
+
session.updateMetadata((current) => current.piSessionId === id ? current : { ...current, piSessionId: id });
|
|
1382
|
+
};
|
|
1188
1383
|
const restartBackend = async () => {
|
|
1189
1384
|
const gone = backendGone;
|
|
1190
1385
|
backend.offMessage?.(onBackendMessage);
|
|
@@ -1196,19 +1391,27 @@ async function runAcp(opts) {
|
|
|
1196
1391
|
}
|
|
1197
1392
|
backend = createBackend();
|
|
1198
1393
|
backend.onMessage(onBackendMessage);
|
|
1199
|
-
const started = await backend.startSession();
|
|
1394
|
+
const started = await backend.startSession(void 0, agentSessionId ? { loadSessionId: agentSessionId } : {});
|
|
1200
1395
|
acpSessionId = started.sessionId;
|
|
1396
|
+
rememberAgentSession(started.agentSessionId);
|
|
1201
1397
|
backendGone = null;
|
|
1202
1398
|
todoDiscoverySent = false;
|
|
1399
|
+
projectInjector.reset();
|
|
1203
1400
|
await afterSessionStarted(currentModel ?? opts.model);
|
|
1204
|
-
logger.logger.debug(`[${opts.agentName}] Restarted the agent after it exited: ${gone?.message ?? "unknown"}`);
|
|
1205
|
-
session.sendSessionEvent({ type: "message", message:
|
|
1401
|
+
logger.logger.debug(`[${opts.agentName}] Restarted the agent after it exited: ${gone?.message ?? "unknown"} (conversation: ${started.resumed ?? "new"}${started.loadFailure ? `, ${started.loadFailure}` : ""})`);
|
|
1402
|
+
session.sendSessionEvent({ type: "message", message: acpSessionResume.piRestartNotice(opts.agentName, "agent-exit", started) });
|
|
1206
1403
|
};
|
|
1207
1404
|
try {
|
|
1208
|
-
const
|
|
1405
|
+
const resumeId = opts.resumeAgentSessionId;
|
|
1406
|
+
const started = await backend.startSession(void 0, resumeId ? { loadSessionId: resumeId } : {});
|
|
1209
1407
|
acpSessionId = started.sessionId;
|
|
1408
|
+
rememberAgentSession(started.agentSessionId);
|
|
1210
1409
|
backendStarted = true;
|
|
1211
1410
|
await afterSessionStarted(opts.model);
|
|
1411
|
+
if (resumeId) {
|
|
1412
|
+
logger.logger.debug(`[${opts.agentName}] Resume of agent session ${resumeId}: ${started.resumed ?? "new"}${started.loadFailure ? ` (${started.loadFailure})` : ""}`);
|
|
1413
|
+
if (started.resumed !== "loaded") session.sendSessionEvent({ type: "message", message: acpSessionResume.piRestartNotice(opts.agentName, "resume", started) });
|
|
1414
|
+
}
|
|
1212
1415
|
if (verbose) {
|
|
1213
1416
|
if (!sawSlashCommands) {
|
|
1214
1417
|
logAcp("muted", `Outgoing slash commands from ${opts.agentName}: not reported yet`);
|
|
@@ -1233,6 +1436,7 @@ async function runAcp(opts) {
|
|
|
1233
1436
|
break;
|
|
1234
1437
|
}
|
|
1235
1438
|
logAcp("incoming", `Incoming prompt: ${formatUnknownForConsole(batch.message, ACP_EVENT_PREVIEW_CHARS)}`);
|
|
1439
|
+
endOutOfTurn("prompt");
|
|
1236
1440
|
sendEnvelopes(sessionManager.startTurn());
|
|
1237
1441
|
turnCancelled = false;
|
|
1238
1442
|
setThinking(true);
|
|
@@ -1250,7 +1454,8 @@ async function runAcp(opts) {
|
|
|
1250
1454
|
if (typeof batch.mode.effort === "string") {
|
|
1251
1455
|
await switchEffortIfRequested(batch.mode.effort, modelChanged);
|
|
1252
1456
|
}
|
|
1253
|
-
const
|
|
1457
|
+
const projected = await projectInjector.decorate(batch.message);
|
|
1458
|
+
const prompt = todoDiscoverySent ? projected : `${projected}
|
|
1254
1459
|
|
|
1255
1460
|
${index.BUILTIN_TODO_DISCOVERY}`;
|
|
1256
1461
|
const attachments = batch.attachments ?? [];
|
|
@@ -1310,7 +1515,7 @@ ${index.BUILTIN_TODO_DISCOVERY}`;
|
|
|
1310
1515
|
await backend.dispose();
|
|
1311
1516
|
if (fileBackedPermissionMode) {
|
|
1312
1517
|
try {
|
|
1313
|
-
|
|
1518
|
+
acpSessionResume.removeSessionModeFile(session.sessionId);
|
|
1314
1519
|
} catch (error) {
|
|
1315
1520
|
logger.logger.debug(`[${opts.agentName}] Failed to remove session mode file:`, error);
|
|
1316
1521
|
}
|