very-happy-cli 0.2.178 → 0.2.180
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-B8Zi30Zh.mjs} +135 -16
- package/dist/{AcpBackend-CDkAQXYf.cjs → AcpBackend-DfRDtMcG.cjs} +135 -16
- package/dist/{AcpSessionManager-DckmUZza.cjs → AcpSessionManager-CASKOnOj.cjs} +38 -4
- package/dist/{AcpSessionManager-BXrQcqwC.mjs → AcpSessionManager-i8Rab0xT.mjs} +38 -4
- package/dist/{BasePermissionHandler-BVlrEhIi.mjs → BasePermissionHandler-26fKbRCm.mjs} +5 -2
- package/dist/{BasePermissionHandler-DyLmKKtO.cjs → BasePermissionHandler-BlM_tfej.cjs} +5 -2
- package/dist/acpSessionResume-B9l54P-X.mjs +67 -0
- package/dist/acpSessionResume-CR5pmgVo.cjs +74 -0
- package/dist/{agentHome-CEp9RMyK.cjs → agentHome-C7Sb7-Tz.cjs} +4 -4
- package/dist/{agentHome-C1xi37as.mjs → agentHome-CmGy0NWv.mjs} +4 -4
- package/dist/{api-JANhFdZV.cjs → api-DM7b1OKj.cjs} +38 -262
- package/dist/{api-Dib0dmqC.mjs → api-Hov8p7CA.mjs} +32 -256
- package/dist/{apiMachine-DNTJidYH.mjs → apiMachine-CwGEhQDT.mjs} +62 -15
- package/dist/{apiMachine-QhK-sKcr.cjs → apiMachine-DkGRj-Ai.cjs} +64 -17
- package/dist/{attachmentContent-bpQTBJ0y.cjs → attachmentContent-CEm13_gF.cjs} +4 -4
- package/dist/{attachmentContent-DkkdpSSJ.mjs → attachmentContent-CIn4iPEk.mjs} +2 -2
- package/dist/{auth-BRjd2esb.mjs → auth-BG1DY0gj.mjs} +5 -5
- package/dist/{auth-DgIV0Cvt.cjs → auth-CBXnm-Mj.cjs} +5 -5
- package/dist/{auth-omWDtgR8.cjs → auth-Dawj7pP5.cjs} +8 -8
- package/dist/{auth-DNct7VUi.mjs → auth-rggxMpEE.mjs} +8 -8
- package/dist/{auto-DKGFOJBo.mjs → auto-CXXLXGeL.mjs} +19 -18
- package/dist/{auto-CI16FZmX.cjs → auto-CbYOfoPS.cjs} +19 -18
- package/dist/{backgroundTaskActivity-BVwJBl02.mjs → backgroundTaskActivity-8PdPxrvy.mjs} +1 -1
- package/dist/{bootstrap-DCQ87Aan.cjs → bootstrap-DoA7okld.cjs} +2 -2
- package/dist/{bootstrap-BUagGC_-.mjs → bootstrap-Dt5I1SOl.mjs} +2 -2
- package/dist/{browser-Dj_DYQEh.mjs → browser-DUNetFT4.mjs} +1 -1
- package/dist/{browser-CSKhc0Bl.cjs → browser-DZ6qRtfH.cjs} +1 -1
- package/dist/{claudeCliPath-U4HHmV4r.cjs → claudeCliPath-GaP3UUz1.cjs} +1 -1
- package/dist/{claudeLocal-CdIVnOZp.cjs → claudeLocal--DNyMOSv.cjs} +8 -7
- package/dist/{claudeLocal-CCCvAeMd.mjs → claudeLocal-OHWQigCl.mjs} +6 -5
- package/dist/{claudeLocalLauncher-BmrpaRYJ.mjs → claudeLocalLauncher-BStvfa7M.mjs} +11 -10
- package/dist/{claudeLocalLauncher-21-xh5gc.cjs → claudeLocalLauncher-BhvPbcyH.cjs} +13 -12
- package/dist/{claudeSessionFork-kYCP1IJB.cjs → claudeSessionFork-Be16vzGc.cjs} +1 -1
- package/dist/{claudeSessionFork-DvxMKAmY.mjs → claudeSessionFork-GAVWhiKG.mjs} +1 -1
- package/dist/{client-C4zKGjiJ.cjs → client-BWjaHKtj.cjs} +2 -2
- package/dist/client-Ca5Pcgy_.mjs +71 -0
- package/dist/{client-CnlkkrZO.mjs → client-CnB7kRCT.mjs} +2 -2
- package/dist/{client-BTX9hsbr.mjs → client-D4uPb1uu.mjs} +3 -3
- package/dist/client-DJplzPjD.cjs +76 -0
- package/dist/{client-Dnza1hgN.cjs → client-D_loZ9IK.cjs} +3 -3
- package/dist/codex/happyMcpStdioBridge.cjs +24 -15
- package/dist/codex/happyMcpStdioBridge.mjs +25 -16
- package/dist/{codexAppServerClient-DvkpQgyv.mjs → codexAppServerClient-CO4G6OS4.mjs} +3 -3
- package/dist/{codexAppServerClient-CRlBWGn3.cjs → codexAppServerClient-PE-12AsW.cjs} +3 -3
- package/dist/{codexCommand-DzxIWXIT.cjs → codexCommand-BNoD1t1C.cjs} +127 -116
- package/dist/{codexCommand-BxjogBzU.mjs → codexCommand-B_xUH79E.mjs} +77 -66
- package/dist/{codexTermination-C28FzlLb.cjs → codexTermination-BmBbizFK.cjs} +7 -2
- package/dist/{codexTermination-ySDNMEhd.mjs → codexTermination-Dx48ma6e.mjs} +7 -2
- package/dist/{config-BFB5uJ4t.cjs → config-CtwEUxUP.cjs} +26 -26
- package/dist/{config-DwfEpFr3.mjs → config-DSu0Blos.mjs} +3 -3
- package/dist/{configuration-4TGMrjul.cjs → configuration-CYO-kPOS.cjs} +1 -1
- package/dist/{configuration-DVrb61aY.mjs → configuration-PxzEJumr.mjs} +1 -1
- package/dist/{connect-C7FPY0PI.mjs → connect-BQrg3TB6.mjs} +15 -15
- package/dist/{connect-QH2VJGBG.cjs → connect-Dq7wndzR.cjs} +28 -28
- package/dist/{context-JoKu0V54.cjs → context-6TP-iz_c.cjs} +1 -1
- package/dist/{context-B3XPVJlj.mjs → context-CJGRRGWW.mjs} +1 -1
- package/dist/{controlClient-BTaZlbC6.cjs → controlClient-Bqv5v5OM.cjs} +3 -3
- package/dist/{controlClient-BYKyGyxj.mjs → controlClient-DoeYovwP.mjs} +4 -4
- package/dist/{createSessionMetadata-8Fuj2-IV.mjs → createSessionMetadata-DDIChCx8.mjs} +2 -2
- package/dist/{createSessionMetadata-B2NynaWZ.cjs → createSessionMetadata-xz767pcG.cjs} +3 -3
- package/dist/{defaultPermissionMode-BEWCqJU-.cjs → defaultPermissionMode-PkZGsQDk.cjs} +2 -2
- package/dist/{defaultPermissionMode-B8kJG9uI.mjs → defaultPermissionMode-i5KzdK09.mjs} +2 -2
- package/dist/{detectCLI-DR9ZaN6B.cjs → detectCLI-BuYR_Qxe.cjs} +4 -4
- package/dist/{deterministicJson-C5ZwZ7hu.mjs → deterministicJson-CTEJDqtS.mjs} +217 -12
- package/dist/{deterministicJson-BjNQsAjO.cjs → deterministicJson-xqA6DaOm.cjs} +222 -16
- package/dist/{doctor-BshRnjLi.cjs → doctor-BrgSlfXn.cjs} +9 -9
- package/dist/{doctor-0BiGwJXk.mjs → doctor-IctjVh9T.mjs} +8 -8
- package/dist/{doctorReadiness-BCZGcN0a.cjs → doctorReadiness-Dl6yRQCy.cjs} +1 -1
- package/dist/{downloadTarget-BN5vZt3K.cjs → downloadTarget-CEb9che-.cjs} +6 -6
- package/dist/{downloadTarget-DJPwAZlu.mjs → downloadTarget-jbOz1egC.mjs} +6 -6
- package/dist/{ensureDaemonRunning-C5QfToCe.cjs → ensureDaemonRunning-D-HyjGIX.cjs} +6 -6
- package/dist/{ensureDaemonRunning-CSmb_mqt.mjs → ensureDaemonRunning-b1e8LCSM.mjs} +5 -5
- package/dist/{handleResumeCommand-BwnUZmbo.cjs → handleResumeCommand-BvWVuRwH.cjs} +23 -7
- package/dist/{handleResumeCommand-CgjpsdDe.mjs → handleResumeCommand-DpaZvm2c.mjs} +22 -6
- package/dist/{index-piJPsTsm.cjs → index-B2p2Mut7.cjs} +259 -53
- package/dist/{index-BehVbAsA.mjs → index-BUNnpGFF.mjs} +256 -50
- package/dist/{index-Bvldtdny.mjs → index-Bsvbgh9e.mjs} +4 -4
- package/dist/{index-BYOZ_8WZ.cjs → index-C64Ufj4D.cjs} +4 -4
- package/dist/{index-Clqlu17M.mjs → index-C6Vn5Eac.mjs} +155 -34
- package/dist/index-CMf5VbzG.mjs +18 -0
- package/dist/index-DmTlDRSL.cjs +24 -0
- package/dist/{index-_l1Sdmbi.cjs → index-Dv0Q48P3.cjs} +156 -33
- package/dist/{index-BRClDe07.cjs → index-F2UejqYs.cjs} +3 -3
- package/dist/{index-BYgfern_.mjs → index-wCbtF4BK.mjs} +3 -3
- 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-C0ANcEAW.cjs} +7 -7
- package/dist/{install-fYWHrPcC.mjs → install-CdzSV7qO.mjs} +3 -3
- package/dist/{installPiTools-BKnXjrVu.cjs → installPiTools-CL_axh_6.cjs} +1 -1
- package/dist/{installTerminalHooks-BQZbvxsZ.cjs → installTerminalHooks-BETLKAtd.cjs} +3 -3
- package/dist/lib.cjs +14 -14
- package/dist/lib.d.cts +239 -2
- package/dist/lib.d.mts +239 -2
- package/dist/lib.mjs +14 -14
- package/dist/{lidState-BeOwj6eW.cjs → lidState-DWGnm2H4.cjs} +1 -1
- package/dist/{lidState-DNMlIhX0.mjs → lidState-bBrmaQd2.mjs} +1 -1
- package/dist/{localHappyAgentAuth-Br-mgogg.cjs → localHappyAgentAuth-DZHQnIW9.cjs} +1 -1
- package/dist/{localHappyAgentAuth-BezKSFDi.mjs → localHappyAgentAuth-Dn1jYDpt.mjs} +1 -1
- package/dist/{logger--vAVtXB_.mjs → logger-BUngm5Xg.mjs} +2 -2
- package/dist/{logger-DXTWlPzP.cjs → logger-CphW5nUE.cjs} +2 -2
- package/dist/machineMetadata-BQm9YTcI.cjs +79 -0
- package/dist/machineMetadata-BXN_bKU3.mjs +68 -0
- package/dist/{main-DoMFJ2Cl.cjs → main-B2UV51nK.cjs} +112 -132
- package/dist/{main-CshDb5-1.mjs → main-DGkdYfEq.mjs} +106 -126
- package/dist/{mcp-pNc1EbQf.cjs → mcp-BFvAEIRz.cjs} +15 -15
- package/dist/{mcp-DKT_lrvQ.mjs → mcp-CbTtbs0f.mjs} +15 -15
- package/dist/{mirrorProtocol-6IFGPpjJ.mjs → mirrorProtocol-BR4luBC0.mjs} +148 -7
- package/dist/{mirrorProtocol-qKflWTX_.cjs → mirrorProtocol-HKPivs5o.cjs} +150 -4
- package/dist/{package-B7B03ejW.mjs → package-7Ld1YMhh.mjs} +8 -7
- package/dist/{package-DY4zTbKS.cjs → package-KhLqBDX9.cjs} +8 -7
- package/dist/panels-C7IVqpJk.mjs +137 -0
- package/dist/panels-Njf6GelF.cjs +142 -0
- package/dist/{peerTools-3R9RUARX.mjs → peerTools-BOlDRyhi.mjs} +60 -10
- package/dist/{peerTools-iy3_6Yc5.cjs → peerTools-DQNlrcqM.cjs} +60 -9
- package/dist/{persistence-BfX72dne.cjs → persistence-9BMYspxG.cjs} +2 -2
- package/dist/{persistence-DTk4sNpd.mjs → persistence-BFUOHW5h.mjs} +3 -3
- package/dist/{piRunnerArgs-CRQVR9o-.cjs → piRunnerArgs-DGaq6VYM.cjs} +8 -2
- package/dist/{piRunnerArgs-AT8QJY7x.mjs → piRunnerArgs-H2pgpA5z.mjs} +7 -1
- package/dist/{piRuntime-BHRT5MKO.cjs → piRuntime-CT5xv_3h.cjs} +2 -2
- package/dist/{piRuntime-E44qTVQ4.mjs → piRuntime-CdN0JAsa.mjs} +2 -2
- package/dist/{piTerminal-hI4WFdWm.cjs → piTerminal-0FBtXTHK.cjs} +18 -18
- package/dist/{piTerminal-De8nbciM.mjs → piTerminal-C4m9YXAV.mjs} +18 -18
- package/dist/processTreeSnapshot-CuLJDNC-.mjs +101 -0
- package/dist/processTreeSnapshot-mDbnuojn.cjs +105 -0
- package/dist/projectPath-C3ioB4Bu.cjs +13 -0
- package/dist/prompt-BOouDaTM.mjs +99 -0
- package/dist/prompt-lgF9IE82.cjs +105 -0
- package/dist/{attachmentLimits-UyFn8fkQ.mjs → pushNotifications-DCiBEVeC.mjs} +307 -3
- package/dist/{attachmentLimits-SqeAHrVC.cjs → pushNotifications-DI92havG.cjs} +308 -2
- package/dist/{index-DFPT4HOO.cjs → query-BETKBrnz.cjs} +25 -5
- package/dist/{index-CEjJnq05.mjs → query-ywZbQUzR.mjs} +26 -3
- package/dist/{rateLimitWindows-XrJiiBpU.mjs → rateLimitWindows-BkfuUB1a.mjs} +1 -1
- package/dist/{rateLimitWindows-Czb7_7cK.cjs → rateLimitWindows-YRIYVdo4.cjs} +1 -1
- package/dist/{registerCommonHandlers-C0_fyBQ0.cjs → registerCommonHandlers-C7a_dUWs.cjs} +30 -30
- package/dist/{registerCommonHandlers-CvIedVRf.mjs → registerCommonHandlers-CTkCvjxt.mjs} +2 -2
- package/dist/{registerKillSessionHandler-DYl7l4Ts.cjs → registerKillSessionHandler-CIsvBrVe.cjs} +6 -6
- package/dist/{registerKillSessionHandler-gwJ5lTf0.mjs → registerKillSessionHandler-CaqqRYq6.mjs} +6 -6
- package/dist/{remoteSessionClient-BRTIOX5b.cjs → remoteSessionClient-D843fkzL.cjs} +5 -5
- package/dist/{remoteSessionClient-DRb2Jr5s.mjs → remoteSessionClient-PP-mOKmw.mjs} +5 -5
- package/dist/{reportProgressTool-B9nCzbkL.cjs → reportProgressTool-14AXr959.cjs} +84 -2
- package/dist/{reportProgressTool-D5tEoXMW.mjs → reportProgressTool-ZOCNjWHr.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-CKe_WeLW.cjs → run-CAOCYYfT.cjs} +2806 -110
- package/dist/{run-BQ_FGaOL.mjs → run-Dajw2E5j.mjs} +2787 -91
- package/dist/{runClaude-zrrNcQC_.mjs → runClaude-C6oxWYbp.mjs} +49 -47
- package/dist/{runClaude-MHI5IKM-.cjs → runClaude-CRRKt-tm.cjs} +50 -48
- package/dist/{runClaudeDeps-RRw-Nusc.cjs → runClaudeDeps-B1ysqTvx.cjs} +310 -237
- package/dist/{runClaudeDeps-CVBCokOS.mjs → runClaudeDeps-BcZ68cX3.mjs} +297 -226
- package/dist/{runGemini-kipag2ag.mjs → runGemini-D7yKc4wD.mjs} +61 -55
- package/dist/{runGemini-D7Lg9yCr.cjs → runGemini-DtKFXqf-.cjs} +89 -83
- package/dist/{runOpenClaw-C_lRY3Do.mjs → runOpenClaw-C8ilyLP9.mjs} +19 -19
- package/dist/{runOpenClaw-DCcQ0L2N.cjs → runOpenClaw-Cq29mryb.cjs} +20 -20
- package/dist/{sandbox-BSyXFVFp.mjs → sandbox-CbCutma4.mjs} +4 -4
- package/dist/{sandbox-dMwPTmjm.cjs → sandbox-gIj-EuF4.cjs} +4 -4
- package/dist/{selfCheck-DkzDDUsE.cjs → selfCheck-BTGBVthv.cjs} +39 -38
- package/dist/selfCheck-Smt-5Xiq.mjs +85 -0
- package/dist/{send-dxC0miIA.cjs → send-CZf5lLw_.cjs} +8 -8
- package/dist/{send-C-k9nsd3.mjs → send-YZRMQvMJ.mjs} +9 -9
- package/dist/{server-DxoTYNlw.mjs → server-BqwXRzFZ.mjs} +4 -4
- package/dist/{server-B-W6P7Qr.cjs → server-CknFq6xG.cjs} +6 -6
- package/dist/sessionExitLifecycle-CzkLIgNZ.mjs +142 -0
- package/dist/sessionExitLifecycle-DFltxXU8.cjs +148 -0
- package/dist/{sessionLock-DWX6BbiU.cjs → sessionLock-DRZUcKHT.cjs} +38 -5
- package/dist/{sessionLock-DBdtZGOL.mjs → sessionLock-nBXdJxJm.mjs} +36 -5
- package/dist/{sessionOps-BAnr7n8t.cjs → sessionOps-BrGiU9-s.cjs} +10 -5
- package/dist/{sessionOps-BVoXe12O.mjs → sessionOps-C58iDeD5.mjs} +11 -6
- package/dist/{sessionScanner-BtxoeluY.mjs → sessionScanner-Bm57LEXe.mjs} +3 -3
- package/dist/{sessionScanner-CDOYsEUD.cjs → sessionScanner-CaO8bLaG.cjs} +3 -3
- package/dist/{sessions-C3sZJkzI.mjs → sessions-BXyBHo8n.mjs} +40 -18
- package/dist/{sessions-hAitoN-m.cjs → sessions-uzqPCc37.cjs} +39 -16
- package/dist/{setupOfflineReconnection-_eD4cuUT.mjs → setupOfflineReconnection-1Qlek3wl.mjs} +2 -2
- package/dist/{setupOfflineReconnection-C2EeYTFH.cjs → setupOfflineReconnection-DvvVX3TB.cjs} +2 -2
- package/dist/{spawn-Bc9v7pIf.cjs → spawn-DBkodJEO.cjs} +49 -18
- package/dist/{spawn-qNrB2CD_.mjs → spawn-vn93PhYL.mjs} +49 -18
- package/dist/spawnAgents-CgPMWexP.mjs +79 -0
- package/dist/{spawnAgents-BVEaz35W.cjs → spawnAgents-DLNMlhWJ.cjs} +37 -1
- package/dist/{spawnHappyCLI-C2stUioM.mjs → spawnHappyCLI-BjFZc_7V.mjs} +1 -1
- package/dist/{spawnHappyCLI-fzUagkKV.cjs → spawnHappyCLI-DnUZv0X2.cjs} +2 -2
- package/dist/{specialCommands-BJ-nqY4s.cjs → specialCommands-BRufxlqe.cjs} +3 -3
- package/dist/{specialCommands-C6W-rVyh.mjs → specialCommands-D3ND9bdg.mjs} +3 -3
- package/dist/{startFileWatcher-Bqlqjt93.cjs → startFileWatcher-D9cYzZOq.cjs} +1 -1
- package/dist/{startFileWatcher-CR09Snmz.mjs → startFileWatcher-DXJ7yB5v.mjs} +1 -1
- package/dist/startupSessionCreate-kdr3m1uX.cjs +26 -0
- package/dist/startupSessionCreate-uZ6BM0ty.mjs +24 -0
- package/dist/{streamRelay-CJoMk_d2.mjs → streamRelay-DnMCMMfV.mjs} +1 -1
- package/dist/{streamRelay-9kBPpbvU.cjs → streamRelay-Dy6amlzx.cjs} +1 -1
- package/dist/{sync-Dhmtk66S.cjs → sync-Bn-idAoy.cjs} +1 -1
- package/dist/{sync-DbW07iQS.mjs → sync-BvVhDO40.mjs} +1 -1
- package/dist/{systemPrompt-CQcuUmVp.mjs → systemPrompt-CIZcJuJF.mjs} +4 -3
- package/dist/{systemPrompt-3PYi3EUY.cjs → systemPrompt-DlyEk35T.cjs} +4 -3
- package/dist/{teams-DpxLcUU_.cjs → teams-BLeRpDxv.cjs} +8 -8
- package/dist/{teams-CwF4Z2fA.mjs → teams-DLY3B5yi.mjs} +8 -8
- package/dist/{time-A6zR3Iy6.cjs → time-Cjv0zxQO.cjs} +1 -1
- package/dist/{time-BuGWTVP6.mjs → time-D3ETL7Jb.mjs} +1 -1
- package/dist/{titleGenerator-D26gvNaS.cjs → titleGenerator-Cgp5ihFb.cjs} +10 -9
- package/dist/{titleGenerator-BGEzNWC9.mjs → titleGenerator-Uzbd4utr.mjs} +9 -8
- package/dist/{todo-DrZc76H5.mjs → todo-C9Ga-oEM.mjs} +6 -6
- package/dist/{todo-73g3NCIO.cjs → todo-pOMcEECE.cjs} +6 -6
- package/dist/{tools-CxJp4T1T.cjs → tools-BL7Byl_x.cjs} +1 -1
- package/dist/{tools-BtsrQnNS.mjs → tools-Cho7iIWf.mjs} +1 -1
- package/dist/{uninstall-DWNYvewQ.cjs → uninstall-CbayEVoV.cjs} +6 -6
- package/dist/{uninstall-DOb2mTwV.mjs → uninstall-CvZHVY9C.mjs} +3 -3
- package/dist/webPanels-B2_C2-3g.mjs +49 -0
- package/dist/webPanels-FCgFKvVe.cjs +53 -0
- package/package.json +8 -7
- package/dist/machineMetadata-B1H9gNbN.mjs +0 -39
- package/dist/machineMetadata-DcUupMje.cjs +0 -42
- package/dist/messageBuffer-BWlGgR3A.mjs +0 -71
- package/dist/messageBuffer-fJMH6uY8.cjs +0 -73
- package/dist/projectPath-ChLhdOyt.cjs +0 -13
- 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,39 @@
|
|
|
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-DfRDtMcG.cjs');
|
|
4
|
+
var logger = require('./logger-CphW5nUE.cjs');
|
|
5
|
+
var AcpSessionManager = require('./AcpSessionManager-CASKOnOj.cjs');
|
|
6
|
+
var index = require('./index-Dv0Q48P3.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-CYO-kPOS.cjs');
|
|
9
|
+
var attachmentContent = require('./attachmentContent-CEm13_gF.cjs');
|
|
10
|
+
var piRuntime = require('./piRuntime-CT5xv_3h.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-DM7b1OKj.cjs');
|
|
14
|
+
var deterministicJson = require('./deterministicJson-xqA6DaOm.cjs');
|
|
15
|
+
var client = require('./client-DJplzPjD.cjs');
|
|
16
|
+
var registerKillSessionHandler = require('./registerKillSessionHandler-CIsvBrVe.cjs');
|
|
17
|
+
var persistence = require('./persistence-9BMYspxG.cjs');
|
|
18
|
+
var machineMetadata = require('./machineMetadata-BQm9YTcI.cjs');
|
|
19
|
+
var createSessionMetadata = require('./createSessionMetadata-xz767pcG.cjs');
|
|
20
|
+
var setupOfflineReconnection = require('./setupOfflineReconnection-DvvVX3TB.cjs');
|
|
21
|
+
var startupSessionCreate = require('./startupSessionCreate-kdr3m1uX.cjs');
|
|
22
|
+
var controlClient = require('./controlClient-Bqv5v5OM.cjs');
|
|
21
23
|
var authRelay = require('./authRelay-Dy1qU9td.cjs');
|
|
22
|
-
var
|
|
23
|
-
var
|
|
24
|
-
var
|
|
25
|
-
var
|
|
26
|
-
var
|
|
24
|
+
var sessionLock = require('./sessionLock-DRZUcKHT.cjs');
|
|
25
|
+
var acpSessionResume = require('./acpSessionResume-CR5pmgVo.cjs');
|
|
26
|
+
var streamRelay = require('./streamRelay-Dy6amlzx.cjs');
|
|
27
|
+
var projectPath = require('./projectPath-C3ioB4Bu.cjs');
|
|
28
|
+
var BasePermissionHandler = require('./BasePermissionHandler-BlM_tfej.cjs');
|
|
29
|
+
var titleGenerator = require('./titleGenerator-Cgp5ihFb.cjs');
|
|
27
30
|
var editPaths = require('./editPaths-Bqp4OFPw.cjs');
|
|
28
31
|
require('node:child_process');
|
|
29
32
|
require('@agentclientprotocol/sdk');
|
|
30
|
-
require('./time-
|
|
33
|
+
require('./time-Cjv0zxQO.cjs');
|
|
31
34
|
require('./contentLogMetadata-ZSFk_NjQ.cjs');
|
|
32
35
|
require('./processTree-CMHWlVse.cjs');
|
|
33
|
-
require('./package-
|
|
36
|
+
require('./package-KhLqBDX9.cjs');
|
|
34
37
|
require('chalk');
|
|
35
38
|
require('node:util');
|
|
36
39
|
require('node:fs');
|
|
@@ -38,49 +41,52 @@ require('@paralleldrive/cuid2');
|
|
|
38
41
|
require('zod');
|
|
39
42
|
require('node:os');
|
|
40
43
|
require('node:fs/promises');
|
|
41
|
-
require('./
|
|
42
|
-
require('./resources-JDPugcDq.cjs');
|
|
44
|
+
require('./pushNotifications-DI92havG.cjs');
|
|
43
45
|
require('axios');
|
|
44
|
-
require('./
|
|
46
|
+
require('./resources-CvIlkzpP.cjs');
|
|
47
|
+
require('./lidState-DWGnm2H4.cjs');
|
|
45
48
|
require('os');
|
|
46
49
|
require('child_process');
|
|
47
50
|
require('node:events');
|
|
48
51
|
require('socket.io-client');
|
|
49
52
|
require('./limits-C-a7gr04.cjs');
|
|
50
|
-
require('./registerCommonHandlers-
|
|
53
|
+
require('./registerCommonHandlers-C7a_dUWs.cjs');
|
|
51
54
|
require('util');
|
|
52
55
|
require('fs/promises');
|
|
53
56
|
require('crypto');
|
|
54
57
|
require('path');
|
|
55
58
|
require('cross-spawn');
|
|
56
|
-
require('./sync-
|
|
59
|
+
require('./sync-Bn-idAoy.cjs');
|
|
57
60
|
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');
|
|
61
|
+
require('./prompt-lgF9IE82.cjs');
|
|
62
|
+
require('./reportProgressTool-14AXr959.cjs');
|
|
63
|
+
require('./client-BWjaHKtj.cjs');
|
|
66
64
|
require('./precheckCompat-CWOi5c9L.cjs');
|
|
67
65
|
require('./agentGuidance-BtBx2xxE.cjs');
|
|
68
66
|
require('./trimIdent-4gvk9Wk6.cjs');
|
|
69
|
-
require('./
|
|
67
|
+
require('./client-D_loZ9IK.cjs');
|
|
68
|
+
require('./context-6TP-iz_c.cjs');
|
|
69
|
+
require('./sessionOps-BrGiU9-s.cjs');
|
|
70
|
+
require('./tools-BL7Byl_x.cjs');
|
|
71
|
+
require('./peerTools-DQNlrcqM.cjs');
|
|
70
72
|
require('./ids-B6ZC0HGt.cjs');
|
|
71
|
-
require('./remoteSessionClient-
|
|
73
|
+
require('./remoteSessionClient-D843fkzL.cjs');
|
|
72
74
|
require('@modelcontextprotocol/sdk/server/mcp.js');
|
|
73
75
|
require('node:http');
|
|
74
76
|
require('@modelcontextprotocol/sdk/server/streamableHttp.js');
|
|
75
|
-
require('./downloadTarget-
|
|
77
|
+
require('./downloadTarget-CEb9che-.cjs');
|
|
76
78
|
require('./terminals-B_bfC9c2.cjs');
|
|
77
79
|
require('./terminalTitleSuggest-DhvRFX3H.cjs');
|
|
78
80
|
require('./tmuxSocket-D-Xt6Vn-.cjs');
|
|
79
|
-
require('./bootstrap-
|
|
81
|
+
require('./bootstrap-DoA7okld.cjs');
|
|
82
|
+
require('./webPanels-FCgFKvVe.cjs');
|
|
80
83
|
require('./previewPath-B0rBdhy1.cjs');
|
|
81
|
-
require('
|
|
84
|
+
require('tweetnacl');
|
|
85
|
+
require('./types-CRS-srZK.cjs');
|
|
86
|
+
require('./detectCLI-BuYR_Qxe.cjs');
|
|
82
87
|
require('fs');
|
|
83
|
-
require('./localHappyAgentAuth-
|
|
88
|
+
require('./localHappyAgentAuth-DZHQnIW9.cjs');
|
|
89
|
+
require('./processTreeSnapshot-mDbnuojn.cjs');
|
|
84
90
|
require('url');
|
|
85
91
|
require('node:module');
|
|
86
92
|
require('./oneShotPrompts-CL0dip9C.cjs');
|
|
@@ -128,6 +134,113 @@ function describeAcpTurnFailure(agentName, error) {
|
|
|
128
134
|
return { message: `${agentName} error: ${oneLine(detailOf(error))}`, exited: false };
|
|
129
135
|
}
|
|
130
136
|
|
|
137
|
+
const OUT_OF_TURN_QUIET_MS = 6e4;
|
|
138
|
+
function isAcpTurnContent(msg) {
|
|
139
|
+
if (msg.type === "model-output") return typeof msg.textDelta === "string" && msg.textDelta.length > 0;
|
|
140
|
+
if (msg.type === "tool-call" || msg.type === "tool-result") return true;
|
|
141
|
+
return msg.type === "event" && msg.name === "thinking";
|
|
142
|
+
}
|
|
143
|
+
function outOfTurnAction(msg, state) {
|
|
144
|
+
if (state.inPromptTurn || !state.backendStarted) return null;
|
|
145
|
+
if (msg.type === "status" && msg.status === "idle") return state.open ? "end" : null;
|
|
146
|
+
if (!isAcpTurnContent(msg)) return null;
|
|
147
|
+
return state.open ? "touch" : "start";
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
function createPiSteerChannel() {
|
|
151
|
+
let nextId = 0;
|
|
152
|
+
const pending = [];
|
|
153
|
+
const waiters = /* @__PURE__ */ new Set();
|
|
154
|
+
const offers = /* @__PURE__ */ new Map();
|
|
155
|
+
let ready = false;
|
|
156
|
+
const readyListeners = [];
|
|
157
|
+
const hand = () => {
|
|
158
|
+
while (pending.length > 0 && waiters.size > 0) {
|
|
159
|
+
const waiter = waiters.values().next().value;
|
|
160
|
+
waiters.delete(waiter);
|
|
161
|
+
const item = pending.shift();
|
|
162
|
+
const offer = offers.get(item.id);
|
|
163
|
+
if (offer) offer.taken = true;
|
|
164
|
+
waiter(item);
|
|
165
|
+
}
|
|
166
|
+
};
|
|
167
|
+
return {
|
|
168
|
+
get ready() {
|
|
169
|
+
return ready;
|
|
170
|
+
},
|
|
171
|
+
/** The extension announced itself (first contact). */
|
|
172
|
+
hello() {
|
|
173
|
+
if (ready) return;
|
|
174
|
+
ready = true;
|
|
175
|
+
for (const listener of readyListeners.splice(0)) listener();
|
|
176
|
+
},
|
|
177
|
+
onReady(listener) {
|
|
178
|
+
if (ready) listener();
|
|
179
|
+
else readyListeners.push(listener);
|
|
180
|
+
},
|
|
181
|
+
/** Wrapper side: hand `text` to the running turn; true = pi took it. */
|
|
182
|
+
offer(text, timeoutMs) {
|
|
183
|
+
const item = { id: ++nextId, text };
|
|
184
|
+
return new Promise((resolve) => {
|
|
185
|
+
const timer = setTimeout(() => {
|
|
186
|
+
const offer = offers.get(item.id);
|
|
187
|
+
offers.delete(item.id);
|
|
188
|
+
const index = pending.findIndex((p) => p.id === item.id);
|
|
189
|
+
if (index >= 0) pending.splice(index, 1);
|
|
190
|
+
resolve(offer?.taken === true);
|
|
191
|
+
}, timeoutMs);
|
|
192
|
+
timer.unref?.();
|
|
193
|
+
offers.set(item.id, {
|
|
194
|
+
taken: false,
|
|
195
|
+
settle: (delivered) => {
|
|
196
|
+
clearTimeout(timer);
|
|
197
|
+
offers.delete(item.id);
|
|
198
|
+
resolve(delivered);
|
|
199
|
+
}
|
|
200
|
+
});
|
|
201
|
+
pending.push(item);
|
|
202
|
+
hand();
|
|
203
|
+
});
|
|
204
|
+
},
|
|
205
|
+
/** Extension side (long poll): the next message, or null after `waitMs`. */
|
|
206
|
+
take(waitMs, signal) {
|
|
207
|
+
return new Promise((resolve) => {
|
|
208
|
+
const done = () => {
|
|
209
|
+
clearTimeout(timer);
|
|
210
|
+
signal?.removeEventListener("abort", onAbort);
|
|
211
|
+
};
|
|
212
|
+
const waiter = (item) => {
|
|
213
|
+
done();
|
|
214
|
+
resolve(item);
|
|
215
|
+
};
|
|
216
|
+
const onAbort = () => {
|
|
217
|
+
waiters.delete(waiter);
|
|
218
|
+
done();
|
|
219
|
+
resolve(null);
|
|
220
|
+
};
|
|
221
|
+
const timer = setTimeout(() => {
|
|
222
|
+
waiters.delete(waiter);
|
|
223
|
+
done();
|
|
224
|
+
resolve(null);
|
|
225
|
+
}, waitMs);
|
|
226
|
+
timer.unref?.();
|
|
227
|
+
if (signal?.aborted) {
|
|
228
|
+
resolve(null);
|
|
229
|
+
clearTimeout(timer);
|
|
230
|
+
return;
|
|
231
|
+
}
|
|
232
|
+
signal?.addEventListener("abort", onAbort, { once: true });
|
|
233
|
+
waiters.add(waiter);
|
|
234
|
+
hand();
|
|
235
|
+
});
|
|
236
|
+
},
|
|
237
|
+
/** Extension side: what happened to a taken message (false: pi was no longer running). */
|
|
238
|
+
ack(id, delivered) {
|
|
239
|
+
offers.get(id)?.settle(delivered);
|
|
240
|
+
}
|
|
241
|
+
};
|
|
242
|
+
}
|
|
243
|
+
|
|
131
244
|
const SUPPORTED_CATEGORIES = /* @__PURE__ */ new Set(["mode", "model", "thought_level"]);
|
|
132
245
|
function isRecord$1(value) {
|
|
133
246
|
return !!value && typeof value === "object";
|
|
@@ -637,6 +750,7 @@ class GenericAcpPermissionHandler extends BasePermissionHandler.BasePermissionHa
|
|
|
637
750
|
});
|
|
638
751
|
}
|
|
639
752
|
}
|
|
753
|
+
const PI_STEER_OFFER_TIMEOUT_MS = 5e3;
|
|
640
754
|
function resolveSessionFlavor(agentName) {
|
|
641
755
|
if (agentName === "gemini") {
|
|
642
756
|
return "gemini";
|
|
@@ -665,12 +779,45 @@ async function runAcp(opts) {
|
|
|
665
779
|
machineId: settings.machineId,
|
|
666
780
|
startedBy: opts.startedBy,
|
|
667
781
|
sandbox: settings.sandboxConfig,
|
|
668
|
-
capabilities: [index.PROMPT_QUEUE_CAPABILITY]
|
|
782
|
+
capabilities: [index.PROMPT_QUEUE_CAPABILITY, index.PROJECT_SESSION_CAPABILITY]
|
|
669
783
|
});
|
|
670
784
|
metadata.attachmentKinds = [];
|
|
671
|
-
const
|
|
785
|
+
const reconnect = acpSessionResume.readAcpReconnectEnv(process.env);
|
|
786
|
+
let response;
|
|
787
|
+
if (reconnect) {
|
|
788
|
+
logger.logger.debug(`[acp] Reconnecting to existing session ${reconnect.sessionId}`);
|
|
789
|
+
response = {
|
|
790
|
+
id: reconnect.sessionId,
|
|
791
|
+
seq: reconnect.seq,
|
|
792
|
+
encryptionKey: authRelay.decodeBase64(reconnect.encryptionKey),
|
|
793
|
+
encryptionVariant: reconnect.encryptionVariant,
|
|
794
|
+
metadata,
|
|
795
|
+
metadataVersion: reconnect.metadataVersion,
|
|
796
|
+
agentState: state,
|
|
797
|
+
agentStateVersion: reconnect.agentStateVersion
|
|
798
|
+
};
|
|
799
|
+
} else {
|
|
800
|
+
response = await startupSessionCreate.createSessionForStartup(() => api$1.getOrCreateSession({ tag: sessionTag, metadata, state }), { startedBy: opts.startedBy, log: (m) => logger.logger.debug(m) });
|
|
801
|
+
}
|
|
672
802
|
if (response) {
|
|
673
803
|
logAcp("muted", `Happy Session ID: ${response.id}`);
|
|
804
|
+
await sessionLock.claimSessionOrExit(response.id, { takeover: !!reconnect, flavor: resolveSessionFlavor(opts.agentName) });
|
|
805
|
+
}
|
|
806
|
+
if (reconnect && response && !await api$1.reactivateSession(response.id)) {
|
|
807
|
+
throw new Error(`Failed to reactivate archived session ${response.id}`);
|
|
808
|
+
}
|
|
809
|
+
let reconnectSeeded = false;
|
|
810
|
+
let resumedPermissionMode = null;
|
|
811
|
+
if (reconnect && response) {
|
|
812
|
+
const snapshot = await api$1.getSession(response.id, response.encryptionKey, response.encryptionVariant);
|
|
813
|
+
if (snapshot.ok) {
|
|
814
|
+
response = sessionLock.applyServerSnapshot(response, snapshot.session);
|
|
815
|
+
reconnectSeeded = true;
|
|
816
|
+
resumedPermissionMode = acpSessionResume.normalizeAcpPermissionMode(snapshot.session.metadata?.permissionMode) ?? null;
|
|
817
|
+
} else {
|
|
818
|
+
response = sessionLock.withoutServerSnapshot(response);
|
|
819
|
+
logger.logger.debug(`[acp] Reconnect without server snapshot (${snapshot.reason}); skipping existing messages`);
|
|
820
|
+
}
|
|
674
821
|
}
|
|
675
822
|
let session;
|
|
676
823
|
let permissionHandler;
|
|
@@ -680,6 +827,7 @@ async function runAcp(opts) {
|
|
|
680
827
|
metadata,
|
|
681
828
|
state,
|
|
682
829
|
response,
|
|
830
|
+
sessionClientOptions: reconnectSeeded && response ? { initialSeq: response.seq } : void 0,
|
|
683
831
|
onSessionSwap: (newSession) => {
|
|
684
832
|
session = newSession;
|
|
685
833
|
if (permissionHandler) {
|
|
@@ -689,6 +837,12 @@ async function runAcp(opts) {
|
|
|
689
837
|
}
|
|
690
838
|
});
|
|
691
839
|
session = initialSession;
|
|
840
|
+
if (reconnect) {
|
|
841
|
+
session.suppressNextArchiveSignal();
|
|
842
|
+
if (!reconnectSeeded) session.skipExistingMessages();
|
|
843
|
+
void session.cancelUndeliveredQueuedInputs();
|
|
844
|
+
session.updateMetadata((meta) => sessionLock.mergeReconnectMetadata(meta, metadata, Date.now()));
|
|
845
|
+
}
|
|
692
846
|
if (response) {
|
|
693
847
|
try {
|
|
694
848
|
await controlClient.notifyDaemonSessionStarted(response.id, metadata, {
|
|
@@ -728,7 +882,7 @@ async function runAcp(opts) {
|
|
|
728
882
|
let sawSlashCommands = false;
|
|
729
883
|
let sawModes = false;
|
|
730
884
|
let sawModels = false;
|
|
731
|
-
const initialPermissionMode = opts.permissionMode ?? "default";
|
|
885
|
+
const initialPermissionMode = opts.permissionMode ?? resumedPermissionMode ?? "default";
|
|
732
886
|
let fileBackedModeActive = false;
|
|
733
887
|
const permissionModeIsFileBacked = () => opts.agentName === "pi" || !modeSelector && !legacyModes;
|
|
734
888
|
let fileBackedPermissionMode = null;
|
|
@@ -737,7 +891,7 @@ async function runAcp(opts) {
|
|
|
737
891
|
return true;
|
|
738
892
|
}
|
|
739
893
|
try {
|
|
740
|
-
|
|
894
|
+
acpSessionResume.writeSessionModeFile(session.sessionId, mode);
|
|
741
895
|
} catch (error) {
|
|
742
896
|
logger.logger.debug(`[${opts.agentName}] Failed to write session mode file:`, error);
|
|
743
897
|
return false;
|
|
@@ -748,8 +902,15 @@ async function runAcp(opts) {
|
|
|
748
902
|
return true;
|
|
749
903
|
};
|
|
750
904
|
const isAssistantVariant = process.env.HAPPY_SESSION_VARIANT === "assistant";
|
|
905
|
+
const piSteer = opts.agentName === "pi" ? createPiSteerChannel() : null;
|
|
906
|
+
piSteer?.onReady(() => {
|
|
907
|
+
logger.logger.debug(`[${opts.agentName}] pi extension connected to the steer channel`);
|
|
908
|
+
session.updateMetadata((current) => ({ ...current, capabilities: [.../* @__PURE__ */ new Set([...current.capabilities ?? [], index.PI_STEER_CAPABILITY])] }));
|
|
909
|
+
});
|
|
751
910
|
const happyServer = await deterministicJson.startHappyServer(session, {
|
|
752
911
|
assistant: isAssistantVariant,
|
|
912
|
+
...piSteer ? { piSteer } : {},
|
|
913
|
+
push: { sendAttention: (input) => api$1.push().sendAttention(input) },
|
|
753
914
|
...opts.agentName === "pi" ? { onContextUsage: (contextUsage) => {
|
|
754
915
|
session.updateAgentState((state2) => ({ ...state2, contextUsage }));
|
|
755
916
|
} } : {}
|
|
@@ -771,6 +932,7 @@ async function runAcp(opts) {
|
|
|
771
932
|
...teamsPiEnv,
|
|
772
933
|
HAPPY_MCP_URL: happyServer.url,
|
|
773
934
|
...happyServer.contextUsageUrl ? { HAPPY_CONTEXT_USAGE_URL: happyServer.contextUsageUrl } : {},
|
|
935
|
+
...happyServer.steerUrl ? { HAPPY_PI_STEER_URL: happyServer.steerUrl } : {},
|
|
774
936
|
HAPPY_SESSION_ID: session.sessionId,
|
|
775
937
|
// B-497: sender identity for `very-happy sessions message|peers` in this shell.
|
|
776
938
|
VH_PEER_SESSION_ID: session.sessionId,
|
|
@@ -783,6 +945,15 @@ async function runAcp(opts) {
|
|
|
783
945
|
});
|
|
784
946
|
let backend = createBackend();
|
|
785
947
|
let thinking = false;
|
|
948
|
+
let outOfTurnTimer = null;
|
|
949
|
+
const endOutOfTurn = (reason) => {
|
|
950
|
+
if (!outOfTurnTimer) return;
|
|
951
|
+
clearTimeout(outOfTurnTimer);
|
|
952
|
+
outOfTurnTimer = null;
|
|
953
|
+
logger.logger.debug(`[${opts.agentName}] Out-of-turn output ended (${reason})`);
|
|
954
|
+
sendEnvelopes(sessionManager.endTurn("completed"));
|
|
955
|
+
setThinking(false);
|
|
956
|
+
};
|
|
786
957
|
const setThinking = (next) => {
|
|
787
958
|
if (thinking === next) {
|
|
788
959
|
return;
|
|
@@ -797,6 +968,7 @@ async function runAcp(opts) {
|
|
|
797
968
|
let backendStarted = false;
|
|
798
969
|
let backendGone = null;
|
|
799
970
|
let todoDiscoverySent = false;
|
|
971
|
+
const projectInjector = deterministicJson.createProjectInjector({ client: client.sharedProjectsClient(), sessionId: () => session?.sessionId, metadata: () => session?.getMetadata?.() ?? null, agent: opts.agentName });
|
|
800
972
|
const stopRunnerFromBackendStatus = (status, detail) => {
|
|
801
973
|
const reason = detail ? `${opts.agentName} backend ${status}: ${detail}` : `${opts.agentName} backend ${status}`;
|
|
802
974
|
logger.logger.debug(`[${opts.agentName}] ${reason}; stopping ACP runner`);
|
|
@@ -820,7 +992,7 @@ async function runAcp(opts) {
|
|
|
820
992
|
return;
|
|
821
993
|
}
|
|
822
994
|
if (permissionModeIsFileBacked()) {
|
|
823
|
-
const mode =
|
|
995
|
+
const mode = acpSessionResume.normalizeAcpPermissionMode(requestedMode);
|
|
824
996
|
if (!mode) {
|
|
825
997
|
logger.logger.debug(`[${opts.agentName}] Ignoring unknown file-backed permission mode request: ${requestedMode}`);
|
|
826
998
|
return;
|
|
@@ -1094,7 +1266,18 @@ async function runAcp(opts) {
|
|
|
1094
1266
|
controlClient.reportSessionEditToDaemon({ sessionId: session.sessionId, path: edit.path, tool: edit.tool, cwd: process.cwd() });
|
|
1095
1267
|
}
|
|
1096
1268
|
}
|
|
1269
|
+
const action = outOfTurnAction(msg, { open: outOfTurnTimer !== null, inPromptTurn: thinking && outOfTurnTimer === null, backendStarted });
|
|
1270
|
+
if (action === "start") {
|
|
1271
|
+
sendEnvelopes(sessionManager.startTurn());
|
|
1272
|
+
setThinking(true);
|
|
1273
|
+
}
|
|
1274
|
+
if (action === "start" || action === "touch") {
|
|
1275
|
+
if (outOfTurnTimer) clearTimeout(outOfTurnTimer);
|
|
1276
|
+
outOfTurnTimer = setTimeout(() => endOutOfTurn("quiet"), OUT_OF_TURN_QUIET_MS);
|
|
1277
|
+
outOfTurnTimer.unref?.();
|
|
1278
|
+
}
|
|
1097
1279
|
sendEnvelopes(sessionManager.mapMessage(msg));
|
|
1280
|
+
if (action === "end") endOutOfTurn("idle");
|
|
1098
1281
|
};
|
|
1099
1282
|
backend.onMessage(onBackendMessage);
|
|
1100
1283
|
const titleGenerator$1 = new titleGenerator.TitleGenerator(session);
|
|
@@ -1119,6 +1302,13 @@ async function runAcp(opts) {
|
|
|
1119
1302
|
if (message.meta && Object.prototype.hasOwnProperty.call(message.meta, "effort")) {
|
|
1120
1303
|
currentEffort = message.meta.effort ?? null;
|
|
1121
1304
|
}
|
|
1305
|
+
if (message.meta?.delivery === "steer" && piSteer?.ready && thinking && !attachments?.length) {
|
|
1306
|
+
if (await piSteer.offer(message.content.text, PI_STEER_OFFER_TIMEOUT_MS)) {
|
|
1307
|
+
logger.logger.debug(`[${opts.agentName}] User message steered into the running turn`);
|
|
1308
|
+
return;
|
|
1309
|
+
}
|
|
1310
|
+
logger.logger.debug(`[${opts.agentName}] Steer not taken; queued for the next turn`);
|
|
1311
|
+
}
|
|
1122
1312
|
messageQueue.push(message.content.text, {
|
|
1123
1313
|
permissionMode: currentPermissionMode,
|
|
1124
1314
|
model: currentModel,
|
|
@@ -1155,7 +1345,7 @@ async function runAcp(opts) {
|
|
|
1155
1345
|
if (!fileBackedModeActive) {
|
|
1156
1346
|
throw new Error(`${opts.agentName} does not support live permission mode changes`);
|
|
1157
1347
|
}
|
|
1158
|
-
const mode = typeof request?.mode === "string" ?
|
|
1348
|
+
const mode = typeof request?.mode === "string" ? acpSessionResume.normalizeAcpPermissionMode(request.mode) : null;
|
|
1159
1349
|
if (!mode) {
|
|
1160
1350
|
throw new Error("Invalid permission mode");
|
|
1161
1351
|
}
|
|
@@ -1185,6 +1375,12 @@ async function runAcp(opts) {
|
|
|
1185
1375
|
publishFileBackedPermissionMode(fileBackedPermissionMode ?? initialPermissionMode);
|
|
1186
1376
|
}
|
|
1187
1377
|
};
|
|
1378
|
+
let agentSessionId = opts.resumeAgentSessionId ?? null;
|
|
1379
|
+
const rememberAgentSession = (id) => {
|
|
1380
|
+
if (!id || opts.agentName !== "pi") return;
|
|
1381
|
+
agentSessionId = id;
|
|
1382
|
+
session.updateMetadata((current) => current.piSessionId === id ? current : { ...current, piSessionId: id });
|
|
1383
|
+
};
|
|
1188
1384
|
const restartBackend = async () => {
|
|
1189
1385
|
const gone = backendGone;
|
|
1190
1386
|
backend.offMessage?.(onBackendMessage);
|
|
@@ -1196,19 +1392,27 @@ async function runAcp(opts) {
|
|
|
1196
1392
|
}
|
|
1197
1393
|
backend = createBackend();
|
|
1198
1394
|
backend.onMessage(onBackendMessage);
|
|
1199
|
-
const started = await backend.startSession();
|
|
1395
|
+
const started = await backend.startSession(void 0, agentSessionId ? { loadSessionId: agentSessionId } : {});
|
|
1200
1396
|
acpSessionId = started.sessionId;
|
|
1397
|
+
rememberAgentSession(started.agentSessionId);
|
|
1201
1398
|
backendGone = null;
|
|
1202
1399
|
todoDiscoverySent = false;
|
|
1400
|
+
projectInjector.reset();
|
|
1203
1401
|
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:
|
|
1402
|
+
logger.logger.debug(`[${opts.agentName}] Restarted the agent after it exited: ${gone?.message ?? "unknown"} (conversation: ${started.resumed ?? "new"}${started.loadFailure ? `, ${started.loadFailure}` : ""})`);
|
|
1403
|
+
session.sendSessionEvent({ type: "message", message: acpSessionResume.piRestartNotice(opts.agentName, "agent-exit", started) });
|
|
1206
1404
|
};
|
|
1207
1405
|
try {
|
|
1208
|
-
const
|
|
1406
|
+
const resumeId = opts.resumeAgentSessionId;
|
|
1407
|
+
const started = await backend.startSession(void 0, resumeId ? { loadSessionId: resumeId } : {});
|
|
1209
1408
|
acpSessionId = started.sessionId;
|
|
1409
|
+
rememberAgentSession(started.agentSessionId);
|
|
1210
1410
|
backendStarted = true;
|
|
1211
1411
|
await afterSessionStarted(opts.model);
|
|
1412
|
+
if (resumeId) {
|
|
1413
|
+
logger.logger.debug(`[${opts.agentName}] Resume of agent session ${resumeId}: ${started.resumed ?? "new"}${started.loadFailure ? ` (${started.loadFailure})` : ""}`);
|
|
1414
|
+
if (started.resumed !== "loaded") session.sendSessionEvent({ type: "message", message: acpSessionResume.piRestartNotice(opts.agentName, "resume", started) });
|
|
1415
|
+
}
|
|
1212
1416
|
if (verbose) {
|
|
1213
1417
|
if (!sawSlashCommands) {
|
|
1214
1418
|
logAcp("muted", `Outgoing slash commands from ${opts.agentName}: not reported yet`);
|
|
@@ -1233,6 +1437,7 @@ async function runAcp(opts) {
|
|
|
1233
1437
|
break;
|
|
1234
1438
|
}
|
|
1235
1439
|
logAcp("incoming", `Incoming prompt: ${formatUnknownForConsole(batch.message, ACP_EVENT_PREVIEW_CHARS)}`);
|
|
1440
|
+
endOutOfTurn("prompt");
|
|
1236
1441
|
sendEnvelopes(sessionManager.startTurn());
|
|
1237
1442
|
turnCancelled = false;
|
|
1238
1443
|
setThinking(true);
|
|
@@ -1250,7 +1455,8 @@ async function runAcp(opts) {
|
|
|
1250
1455
|
if (typeof batch.mode.effort === "string") {
|
|
1251
1456
|
await switchEffortIfRequested(batch.mode.effort, modelChanged);
|
|
1252
1457
|
}
|
|
1253
|
-
const
|
|
1458
|
+
const projected = await projectInjector.decorate(batch.message);
|
|
1459
|
+
const prompt = todoDiscoverySent ? projected : `${projected}
|
|
1254
1460
|
|
|
1255
1461
|
${index.BUILTIN_TODO_DISCOVERY}`;
|
|
1256
1462
|
const attachments = batch.attachments ?? [];
|
|
@@ -1310,7 +1516,7 @@ ${index.BUILTIN_TODO_DISCOVERY}`;
|
|
|
1310
1516
|
await backend.dispose();
|
|
1311
1517
|
if (fileBackedPermissionMode) {
|
|
1312
1518
|
try {
|
|
1313
|
-
|
|
1519
|
+
acpSessionResume.removeSessionModeFile(session.sessionId);
|
|
1314
1520
|
} catch (error) {
|
|
1315
1521
|
logger.logger.debug(`[${opts.agentName}] Failed to remove session mode file:`, error);
|
|
1316
1522
|
}
|