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,25 +1,25 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var mirrorProtocol = require('./mirrorProtocol-
|
|
4
|
-
var piRunnerArgs = require('./piRunnerArgs-
|
|
3
|
+
var mirrorProtocol = require('./mirrorProtocol-DEy2g1CB.cjs');
|
|
4
|
+
var piRunnerArgs = require('./piRunnerArgs-Cs-378Vz.cjs');
|
|
5
5
|
var fs = require('fs/promises');
|
|
6
6
|
var tmp = require('tmp');
|
|
7
7
|
var axios = require('axios');
|
|
8
|
-
var api = require('./api-
|
|
9
|
-
var spawnAgents = require('./spawnAgents-
|
|
10
|
-
var logger = require('./logger-
|
|
8
|
+
var api = require('./api-Cmjfr8Z7.cjs');
|
|
9
|
+
var spawnAgents = require('./spawnAgents-DsXgegHM.cjs');
|
|
10
|
+
var logger = require('./logger-C1GWx3gi.cjs');
|
|
11
11
|
var node_fs = require('node:fs');
|
|
12
12
|
var path = require('node:path');
|
|
13
|
-
var index$2 = require('./index-
|
|
14
|
-
var auth = require('./auth-
|
|
15
|
-
var configuration = require('./configuration-
|
|
13
|
+
var index$2 = require('./index-D09T1m8Y.cjs');
|
|
14
|
+
var auth = require('./auth-D6bBUwZa.cjs');
|
|
15
|
+
var configuration = require('./configuration-CMHZnp6G.cjs');
|
|
16
16
|
var child_process = require('child_process');
|
|
17
|
-
var _package = require('./package-
|
|
18
|
-
var doctor = require('./doctor-
|
|
19
|
-
var spawnHappyCLI = require('./spawnHappyCLI-
|
|
20
|
-
var persistence = require('./persistence-
|
|
21
|
-
var controlClient = require('./controlClient-
|
|
22
|
-
var sessionOps = require('./sessionOps-
|
|
17
|
+
var _package = require('./package-SgqTYsjn.cjs');
|
|
18
|
+
var doctor = require('./doctor-Br1Kcy2J.cjs');
|
|
19
|
+
var spawnHappyCLI = require('./spawnHappyCLI-Dywezwk6.cjs');
|
|
20
|
+
var persistence = require('./persistence-BegE7NPa.cjs');
|
|
21
|
+
var controlClient = require('./controlClient-C-5qCt8W.cjs');
|
|
22
|
+
var sessionOps = require('./sessionOps-S-qPBLFf.cjs');
|
|
23
23
|
var fastify = require('fastify');
|
|
24
24
|
var z = require('zod');
|
|
25
25
|
var fastifyTypeProviderZod = require('fastify-type-provider-zod');
|
|
@@ -27,59 +27,62 @@ var authRelay = require('./authRelay-Dy1qU9td.cjs');
|
|
|
27
27
|
var node_crypto = require('node:crypto');
|
|
28
28
|
var previewPath = require('./previewPath-B0rBdhy1.cjs');
|
|
29
29
|
var backgroundTaskActivity = require('./backgroundTaskActivity-CBvUdj39.cjs');
|
|
30
|
-
var rateLimitWindows = require('./rateLimitWindows-
|
|
31
|
-
var peerTools = require('./peerTools-
|
|
30
|
+
var rateLimitWindows = require('./rateLimitWindows-Dj_8voBK.cjs');
|
|
31
|
+
var peerTools = require('./peerTools-DRQETXaz.cjs');
|
|
32
32
|
var os = require('node:os');
|
|
33
|
-
var remoteSessionClient = require('./remoteSessionClient-
|
|
34
|
-
var bootstrap = require('./bootstrap-
|
|
35
|
-
var index$1 = require('./index-
|
|
33
|
+
var remoteSessionClient = require('./remoteSessionClient-B7i7MkYV.cjs');
|
|
34
|
+
var bootstrap = require('./bootstrap-exVucYav.cjs');
|
|
35
|
+
var index$1 = require('./index-B0UjHlAe.cjs');
|
|
36
36
|
var fs$1 = require('fs');
|
|
37
37
|
var path$2 = require('path');
|
|
38
38
|
var node_child_process = require('node:child_process');
|
|
39
39
|
var projectPath = require('./projectPath-ChLhdOyt.cjs');
|
|
40
40
|
var doctorReadiness = require('./doctorReadiness-BCZGcN0a.cjs');
|
|
41
|
-
var machineMetadata = require('./machineMetadata-
|
|
42
|
-
var handleResumeCommand = require('./handleResumeCommand-
|
|
43
|
-
var
|
|
41
|
+
var machineMetadata = require('./machineMetadata-CLHS9sv_.cjs');
|
|
42
|
+
var handleResumeCommand = require('./handleResumeCommand-tKD_Hpxc.cjs');
|
|
43
|
+
var webPanels = require('./webPanels-FCgFKvVe.cjs');
|
|
44
|
+
var index = require('./index-C6O2vVjm.cjs');
|
|
44
45
|
var promises = require('node:fs/promises');
|
|
45
46
|
var cliUpdate = require('./cliUpdate-DsKXPFYp.cjs');
|
|
46
|
-
var client = require('./client-
|
|
47
|
+
var client = require('./client-ZjOsn6nZ.cjs');
|
|
48
|
+
var client$1 = require('./client-CuVdN6PP.cjs');
|
|
47
49
|
var module$1 = require('node:module');
|
|
48
50
|
var path$1 = require('./path-B7zW-WwE.cjs');
|
|
49
51
|
var editPaths = require('./editPaths-Bqp4OFPw.cjs');
|
|
50
|
-
var startFileWatcher = require('./startFileWatcher-
|
|
51
|
-
var sync = require('./sync-
|
|
52
|
+
var startFileWatcher = require('./startFileWatcher-RECH5qY8.cjs');
|
|
53
|
+
var sync = require('./sync-D23jbqVa.cjs');
|
|
52
54
|
var types = require('./types-CRS-srZK.cjs');
|
|
53
55
|
var tmuxSocket = require('./tmuxSocket-D-Xt6Vn-.cjs');
|
|
54
|
-
var sessionLock = require('./sessionLock-
|
|
56
|
+
var sessionLock = require('./sessionLock-DokGab2R.cjs');
|
|
55
57
|
var doctor$1 = require('./doctor-u46qYYKX.cjs');
|
|
56
|
-
var resources = require('./resources-
|
|
58
|
+
var resources = require('./resources-CvIlkzpP.cjs');
|
|
57
59
|
var node_util = require('node:util');
|
|
58
60
|
var template = require('./template-BaHAmH2K.cjs');
|
|
59
61
|
var daemonSupervisor = require('./daemonSupervisor-B-SPSqhs.cjs');
|
|
60
62
|
var loginShellEnv = require('./loginShellEnv-BkuYtExZ.cjs');
|
|
61
|
-
require('./
|
|
62
|
-
require('./lidState-
|
|
63
|
+
require('./acpSessionResume-oiCBnAVA.cjs');
|
|
64
|
+
require('./lidState-Dv2wwFTj.cjs');
|
|
63
65
|
require('os');
|
|
64
66
|
require('node:events');
|
|
65
67
|
require('socket.io-client');
|
|
66
|
-
require('./
|
|
68
|
+
require('./pushNotifications-DaLQUyi0.cjs');
|
|
69
|
+
require('./contentLogMetadata-ZSFk_NjQ.cjs');
|
|
67
70
|
require('./limits-C-a7gr04.cjs');
|
|
68
|
-
require('./time-
|
|
69
|
-
require('./registerCommonHandlers-
|
|
71
|
+
require('./time-CrwIMHta.cjs');
|
|
72
|
+
require('./registerCommonHandlers-Cj084Sg7.cjs');
|
|
70
73
|
require('util');
|
|
71
74
|
require('crypto');
|
|
72
75
|
require('cross-spawn');
|
|
73
76
|
require('@paralleldrive/cuid2');
|
|
74
|
-
require('./contentLogMetadata-ZSFk_NjQ.cjs');
|
|
75
77
|
require('chalk');
|
|
76
78
|
require('tweetnacl');
|
|
77
|
-
require('./browser-
|
|
79
|
+
require('./browser-BohJK12g.cjs');
|
|
78
80
|
require('open');
|
|
79
81
|
require('./ids-B6ZC0HGt.cjs');
|
|
80
82
|
require('url');
|
|
81
83
|
require('./detectCLI-DR9ZaN6B.cjs');
|
|
82
|
-
require('./localHappyAgentAuth-
|
|
84
|
+
require('./localHappyAgentAuth-DjYvkXvV.cjs');
|
|
85
|
+
require('./processTreeSnapshot-mDbnuojn.cjs');
|
|
83
86
|
require('ps-list');
|
|
84
87
|
|
|
85
88
|
var _documentCurrentScript = typeof document !== 'undefined' ? document.currentScript : null;
|
|
@@ -187,7 +190,7 @@ function startCaffeinate() {
|
|
|
187
190
|
}
|
|
188
191
|
killOrphanedCaffeinateProcesses();
|
|
189
192
|
try {
|
|
190
|
-
caffeinateProcess = child_process.spawn("caffeinate",
|
|
193
|
+
caffeinateProcess = child_process.spawn("caffeinate", caffeinateArgs(process.pid), {
|
|
191
194
|
stdio: "ignore",
|
|
192
195
|
detached: false
|
|
193
196
|
});
|
|
@@ -254,12 +257,36 @@ function setupCleanupHandlers() {
|
|
|
254
257
|
cleanup();
|
|
255
258
|
});
|
|
256
259
|
}
|
|
260
|
+
function caffeinateArgs(daemonPid) {
|
|
261
|
+
return ["-im", "-w", String(daemonPid)];
|
|
262
|
+
}
|
|
263
|
+
function orphanedLegacyCaffeinatePids(psOutput) {
|
|
264
|
+
const pids = [];
|
|
265
|
+
for (const line of psOutput.split("\n")) {
|
|
266
|
+
const m = /^\s*(\d+)\s+(\d+)\s+(.*?)\s*$/.exec(line);
|
|
267
|
+
if (!m) continue;
|
|
268
|
+
const [, pid, ppid, command] = m;
|
|
269
|
+
if (ppid !== "1") continue;
|
|
270
|
+
if (!/^(?:\/usr\/bin\/)?caffeinate -im$/.test(command)) continue;
|
|
271
|
+
pids.push(Number(pid));
|
|
272
|
+
}
|
|
273
|
+
return pids;
|
|
274
|
+
}
|
|
257
275
|
function killOrphanedCaffeinateProcesses() {
|
|
258
276
|
if (process.platform !== "darwin") return;
|
|
277
|
+
let ps;
|
|
259
278
|
try {
|
|
260
|
-
child_process.execSync(
|
|
261
|
-
|
|
262
|
-
|
|
279
|
+
ps = child_process.execSync("ps -A -o pid=,ppid=,command=", { timeout: 5e3, encoding: "utf8" });
|
|
280
|
+
} catch (error) {
|
|
281
|
+
logger.logger.debug("[caffeinate] Could not list processes; skipping orphan cleanup:", error);
|
|
282
|
+
return;
|
|
283
|
+
}
|
|
284
|
+
for (const pid of orphanedLegacyCaffeinatePids(ps)) {
|
|
285
|
+
try {
|
|
286
|
+
process.kill(pid, "SIGTERM");
|
|
287
|
+
logger.logger.debug(`[caffeinate] Killed orphaned legacy caffeinate PID ${pid}`);
|
|
288
|
+
} catch {
|
|
289
|
+
}
|
|
263
290
|
}
|
|
264
291
|
}
|
|
265
292
|
|
|
@@ -369,6 +396,12 @@ function formatAssistantReportMessage(title, sessionId, event) {
|
|
|
369
396
|
|
|
370
397
|
function resumePrecheck(metadata, fs) {
|
|
371
398
|
const flavor = metadata.flavor ?? "claude";
|
|
399
|
+
if (flavor === "acp" && metadata.piSessionId) {
|
|
400
|
+
if (!metadata.path || !fs.cwdExists(metadata.path)) {
|
|
401
|
+
return { ok: false, reason: "missing-cwd", detail: `working directory ${metadata.path ?? "(none)"} does not exist` };
|
|
402
|
+
}
|
|
403
|
+
return { ok: true };
|
|
404
|
+
}
|
|
372
405
|
if (flavor !== "claude" && flavor !== "codex") {
|
|
373
406
|
return { ok: false, reason: "unsupported-flavor", detail: `flavor "${flavor}" cannot be resumed` };
|
|
374
407
|
}
|
|
@@ -2052,6 +2085,43 @@ function spawnAgentUnavailableError(agent, availability) {
|
|
|
2052
2085
|
return null;
|
|
2053
2086
|
}
|
|
2054
2087
|
|
|
2088
|
+
function startWebPanelsSync(deps) {
|
|
2089
|
+
let lastMtime;
|
|
2090
|
+
let lastProblems = "";
|
|
2091
|
+
let stopped = false;
|
|
2092
|
+
let inflight = null;
|
|
2093
|
+
const run = async () => {
|
|
2094
|
+
try {
|
|
2095
|
+
const mtime = await deps.statMtime();
|
|
2096
|
+
if (mtime === lastMtime) return;
|
|
2097
|
+
lastMtime = mtime;
|
|
2098
|
+
const { panels, problems } = webPanels.normalizeWebPanels(mtime === null ? void 0 : await deps.readRaw());
|
|
2099
|
+
const key = JSON.stringify(problems);
|
|
2100
|
+
if (problems.length > 0 && key !== lastProblems) deps.logProblems(problems);
|
|
2101
|
+
lastProblems = key;
|
|
2102
|
+
await deps.publish(panels);
|
|
2103
|
+
} catch {
|
|
2104
|
+
lastMtime = void 0;
|
|
2105
|
+
}
|
|
2106
|
+
};
|
|
2107
|
+
const tick = () => {
|
|
2108
|
+
if (stopped) return Promise.resolve();
|
|
2109
|
+
inflight ??= run().finally(() => {
|
|
2110
|
+
inflight = null;
|
|
2111
|
+
});
|
|
2112
|
+
return inflight;
|
|
2113
|
+
};
|
|
2114
|
+
void tick();
|
|
2115
|
+
const timer = setInterval(() => {
|
|
2116
|
+
void tick();
|
|
2117
|
+
}, deps.intervalMs ?? 2e3);
|
|
2118
|
+
timer.unref?.();
|
|
2119
|
+
return { stop: () => {
|
|
2120
|
+
stopped = true;
|
|
2121
|
+
clearInterval(timer);
|
|
2122
|
+
}, tick };
|
|
2123
|
+
}
|
|
2124
|
+
|
|
2055
2125
|
function isAcceptableRelayUrl(url) {
|
|
2056
2126
|
try {
|
|
2057
2127
|
const parsed = new URL(url);
|
|
@@ -2507,6 +2577,44 @@ function createUpdateController(deps) {
|
|
|
2507
2577
|
return { refresh, retry, request, tick, withHandover, holdHandover, isRunning: () => running };
|
|
2508
2578
|
}
|
|
2509
2579
|
|
|
2580
|
+
function buildPresenceBatch(live, previous) {
|
|
2581
|
+
const current = new Set(live.map((s) => s.sessionId));
|
|
2582
|
+
const sessions = live.slice(0, 200).map((s) => ({
|
|
2583
|
+
sessionId: s.sessionId,
|
|
2584
|
+
state: s.running ? "running" : "idle",
|
|
2585
|
+
...s.flavor ? { agent: s.flavor } : {},
|
|
2586
|
+
...s.branch ? { branch: s.branch.slice(0, 200) } : {}
|
|
2587
|
+
}));
|
|
2588
|
+
const gone = [...previous].filter((id) => !current.has(id)).slice(0, 200);
|
|
2589
|
+
return { sessions, gone, current };
|
|
2590
|
+
}
|
|
2591
|
+
function createProjectPresenceReporter(deps) {
|
|
2592
|
+
let previous = /* @__PURE__ */ new Set();
|
|
2593
|
+
let running = false;
|
|
2594
|
+
async function tick() {
|
|
2595
|
+
if (running || deps.client.isDisabled()) return;
|
|
2596
|
+
running = true;
|
|
2597
|
+
try {
|
|
2598
|
+
const batch = buildPresenceBatch(deps.live(), previous);
|
|
2599
|
+
if (batch.sessions.length === 0 && batch.gone.length === 0) {
|
|
2600
|
+
previous = batch.current;
|
|
2601
|
+
return;
|
|
2602
|
+
}
|
|
2603
|
+
await deps.client.presence(deps.machineId, batch.sessions, batch.gone);
|
|
2604
|
+
previous = batch.current;
|
|
2605
|
+
} catch (error) {
|
|
2606
|
+
if (!(error instanceof client.ProjectsUnsupportedError)) deps.log(`project presence tick failed: ${String(error)}`);
|
|
2607
|
+
} finally {
|
|
2608
|
+
running = false;
|
|
2609
|
+
}
|
|
2610
|
+
}
|
|
2611
|
+
const timer = setInterval(() => {
|
|
2612
|
+
void tick();
|
|
2613
|
+
}, deps.intervalMs ?? 6e4);
|
|
2614
|
+
timer.unref?.();
|
|
2615
|
+
return { tick, stop: () => clearInterval(timer) };
|
|
2616
|
+
}
|
|
2617
|
+
|
|
2510
2618
|
const AUTOMATION_BINDINGS_TTL_MS = 10 * 60 * 1e3;
|
|
2511
2619
|
const HIBERNATION_IN_FLIGHT_MS = 6e4;
|
|
2512
2620
|
const HIBERNATION_EXIT_WAIT_MS = 15e3;
|
|
@@ -2697,7 +2805,7 @@ function parseJsonObject(text) {
|
|
|
2697
2805
|
return null;
|
|
2698
2806
|
}
|
|
2699
2807
|
}
|
|
2700
|
-
function resolveSdkClaudeBinary(platform = process.platform, arch = process.arch, resolver = (s) => module$1.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('run-
|
|
2808
|
+
function resolveSdkClaudeBinary(platform = process.platform, arch = process.arch, resolver = (s) => module$1.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('run-CNXwIe0A.cjs', document.baseURI).href))).resolve(s)) {
|
|
2701
2809
|
const platformArch = `${platform}-${arch}`;
|
|
2702
2810
|
const candidates = [
|
|
2703
2811
|
`@anthropic-ai/claude-agent-sdk-${platformArch}/claude`,
|
|
@@ -4308,7 +4416,7 @@ function expandHome(path$1) {
|
|
|
4308
4416
|
return path$1;
|
|
4309
4417
|
}
|
|
4310
4418
|
function isSettledByServer(error) {
|
|
4311
|
-
if (!(error instanceof client.AutomationsRequestError)) return false;
|
|
4419
|
+
if (!(error instanceof client$1.AutomationsRequestError)) return false;
|
|
4312
4420
|
if (error.status === 409 && (error.code === "run_finished" || error.code === "claim_mismatch")) return true;
|
|
4313
4421
|
return error.status === 404 && error.code === "run_not_found";
|
|
4314
4422
|
}
|
|
@@ -4317,7 +4425,7 @@ function scriptAlive(item) {
|
|
|
4317
4425
|
}
|
|
4318
4426
|
function createAutomationRunner(deps) {
|
|
4319
4427
|
const home = deps.home ?? configuration.configuration.happyHomeDir;
|
|
4320
|
-
const client
|
|
4428
|
+
const client = deps.client ?? client$1.createAutomationsClient({ serverUrl: deps.serverUrl ?? configuration.configuration.serverUrl, token: deps.token, client: "daemon-auto" });
|
|
4321
4429
|
const runScript$1 = deps.runScript ?? runScript;
|
|
4322
4430
|
const runPrecheck$1 = deps.runPrecheck ?? runPrecheck;
|
|
4323
4431
|
const readTurn = deps.readTurn ?? defaultReadTurn;
|
|
@@ -4337,9 +4445,9 @@ function createAutomationRunner(deps) {
|
|
|
4337
4445
|
}
|
|
4338
4446
|
async function finish(item, report2) {
|
|
4339
4447
|
try {
|
|
4340
|
-
await client
|
|
4448
|
+
await client.report(item.runId, report2);
|
|
4341
4449
|
} catch (error) {
|
|
4342
|
-
if (report2.status === "skipped" && error instanceof client.AutomationsRequestError && error.status === 400) {
|
|
4450
|
+
if (report2.status === "skipped" && error instanceof client$1.AutomationsRequestError && error.status === 400) {
|
|
4343
4451
|
await finish(item, { ...report2, status: "failed" });
|
|
4344
4452
|
return;
|
|
4345
4453
|
}
|
|
@@ -4365,7 +4473,7 @@ function createAutomationRunner(deps) {
|
|
|
4365
4473
|
async function reportRunning(item, sessionId, stickyKey) {
|
|
4366
4474
|
const body = { claimId: item.claimId, status: "running", ...sessionId ? { sessionId } : {}, ...stickyKey ? { stickyKey } : {} };
|
|
4367
4475
|
try {
|
|
4368
|
-
await client
|
|
4476
|
+
await client.report(item.runId, body);
|
|
4369
4477
|
} catch (error) {
|
|
4370
4478
|
if (isSettledByServer(error)) {
|
|
4371
4479
|
settleExternally(item);
|
|
@@ -4550,7 +4658,7 @@ ${action.prompt}`, { localId: `automation-${run.id}` });
|
|
|
4550
4658
|
await reportRunning(track(claimed, "send", bound.sessionId), bound.sessionId, stickyKey);
|
|
4551
4659
|
return;
|
|
4552
4660
|
}
|
|
4553
|
-
if (bound) await client
|
|
4661
|
+
if (bound) await client.deleteSticky(automation.id, stickyKey).catch(() => deps.log(`Automation ${automation.name}: stale sticky ${stickyKey} not cleared`));
|
|
4554
4662
|
}
|
|
4555
4663
|
let directory = expandHome(action.directory);
|
|
4556
4664
|
if (!path.isAbsolute(directory)) {
|
|
@@ -4573,6 +4681,7 @@ ${action.prompt}`, { localId: `automation-${run.id}` });
|
|
|
4573
4681
|
}
|
|
4574
4682
|
persist({ runId: run.id, automationId: automation.id, kind: "spawn", phase: "running", claimId: run.claimId, sessionId: spawned.sessionId, stickyKey, ...action.worktree ? { directory } : {} });
|
|
4575
4683
|
const item = track(claimed, "spawn", spawned.sessionId);
|
|
4684
|
+
if (automation.projectId && deps.joinProject) await deps.joinProject(spawned.sessionId, automation.projectId).catch(() => void 0);
|
|
4576
4685
|
try {
|
|
4577
4686
|
const capabilities = persistence.readPersistedSessions()[spawned.sessionId]?.metadata?.capabilities ?? null;
|
|
4578
4687
|
const meta = spawnAgents.resolveFirstMessageMeta({ agent, permissionMode, explicitModel: action.model ?? void 0, capabilities });
|
|
@@ -4630,7 +4739,7 @@ ${action.prompt}`, { localId: `automation-${run.id}`, ...meta });
|
|
|
4630
4739
|
item.lastLeaseAt = at;
|
|
4631
4740
|
const body = { claimId: item.claimId, leaseMs: index.AUTOMATION_DEFAULT_LEASE_MS, ...item.pendingRunning ? { status: "running", ...item.pendingRunning } : {} };
|
|
4632
4741
|
try {
|
|
4633
|
-
const run = await client
|
|
4742
|
+
const run = await client.report(item.runId, body);
|
|
4634
4743
|
item.pendingRunning = void 0;
|
|
4635
4744
|
if (index.isAutomationRunTerminal(run.status)) settleExternally(item);
|
|
4636
4745
|
} catch (error) {
|
|
@@ -4676,10 +4785,10 @@ ${action.prompt}`, { localId: `automation-${run.id}`, ...meta });
|
|
|
4676
4785
|
const capacity = AUTOMATION_MAX_CONCURRENT - tracked.size;
|
|
4677
4786
|
if (now() >= disabledUntil && capacity > 0) {
|
|
4678
4787
|
try {
|
|
4679
|
-
const claimed = await client
|
|
4788
|
+
const claimed = await client.claim({ machineId: deps.machineId, limit: capacity, leaseMs: index.AUTOMATION_DEFAULT_LEASE_MS, capabilities: [index.AUTOMATION_DAEMON_CAPABILITY_PRECHECK] });
|
|
4680
4789
|
await Promise.all(claimed.runs.map((entry) => closed ? Promise.resolve() : execute(entry).catch((error) => deps.log(`Automation run ${entry.run.id} failed to start: ${error instanceof Error ? error.message : String(error)}`))));
|
|
4681
4790
|
} catch (error) {
|
|
4682
|
-
if (client.isAutomationsUnavailable(error)) {
|
|
4791
|
+
if (client$1.isAutomationsUnavailable(error)) {
|
|
4683
4792
|
disabledUntil = now() + 6e4;
|
|
4684
4793
|
if (now() - lastUnavailableLogAt >= AUTOMATION_UNAVAILABLE_LOG_MS) {
|
|
4685
4794
|
lastUnavailableLogAt = now();
|
|
@@ -4687,7 +4796,7 @@ ${action.prompt}`, { localId: `automation-${run.id}`, ...meta });
|
|
|
4687
4796
|
}
|
|
4688
4797
|
} else {
|
|
4689
4798
|
disabledUntil = now() + 1e4;
|
|
4690
|
-
deps.log(`Automation claim failed${error instanceof client.AutomationsRequestError ? ` (${error.status})` : ""}`);
|
|
4799
|
+
deps.log(`Automation claim failed${error instanceof client$1.AutomationsRequestError ? ` (${error.status})` : ""}`);
|
|
4691
4800
|
}
|
|
4692
4801
|
}
|
|
4693
4802
|
}
|
|
@@ -4702,7 +4811,7 @@ ${action.prompt}`, { localId: `automation-${run.id}`, ...meta });
|
|
|
4702
4811
|
if (event === "idle") item.attentionReported = false;
|
|
4703
4812
|
if (event === "blocked" && !item.attentionReported) {
|
|
4704
4813
|
item.attentionReported = true;
|
|
4705
|
-
void client
|
|
4814
|
+
void client.report(item.runId, { claimId: item.claimId, needsAttention: true, attentionReason: "needs_input" }).catch(() => deps.log(`Automation run ${item.runId} attention report failed`));
|
|
4706
4815
|
}
|
|
4707
4816
|
}
|
|
4708
4817
|
}
|
|
@@ -4896,7 +5005,7 @@ async function startDaemon() {
|
|
|
4896
5005
|
const turnActivity = new api.TurnActivityTracker();
|
|
4897
5006
|
const backgroundTasks = new backgroundTaskActivity.BackgroundTaskTracker();
|
|
4898
5007
|
const peerCoordinator = createPeerCoordinator({ getChildren: () => Array.from(pidToTrackedSession.values()) });
|
|
4899
|
-
const hibernationAutomations = client.createAutomationsClient({ serverUrl: configuration.configuration.serverUrl, token: credentials.token, client: "daemon-hibernate" });
|
|
5008
|
+
const hibernationAutomations = client$1.createAutomationsClient({ serverUrl: configuration.configuration.serverUrl, token: credentials.token, client: "daemon-hibernate" });
|
|
4900
5009
|
const daemonHibernation = createDaemonHibernation({
|
|
4901
5010
|
idleMs: () => persistence.resolveIdleMs(agentHibernationSetting),
|
|
4902
5011
|
checkMs: persistence.resolveCheckMs(),
|
|
@@ -4919,7 +5028,7 @@ async function startDaemon() {
|
|
|
4919
5028
|
try {
|
|
4920
5029
|
return await collectAutomationBindings(hibernationAutomations, machineId);
|
|
4921
5030
|
} catch (error) {
|
|
4922
|
-
if (client.isAutomationsUnavailable(error)) return [];
|
|
5031
|
+
if (client$1.isAutomationsUnavailable(error)) return [];
|
|
4923
5032
|
throw error;
|
|
4924
5033
|
}
|
|
4925
5034
|
},
|
|
@@ -4933,6 +5042,7 @@ async function startDaemon() {
|
|
|
4933
5042
|
const sessionIdToFinishedSession = /* @__PURE__ */ new Map();
|
|
4934
5043
|
let teamWorker;
|
|
4935
5044
|
let automationRunner;
|
|
5045
|
+
let projectPresence;
|
|
4936
5046
|
const persisted = persistence.readPersistedSessions();
|
|
4937
5047
|
const liveHappyProcesses = await doctor$1.findAllHappyProcesses();
|
|
4938
5048
|
for (const [id, s] of Object.entries(persisted)) {
|
|
@@ -5022,6 +5132,7 @@ async function startDaemon() {
|
|
|
5022
5132
|
}
|
|
5023
5133
|
};
|
|
5024
5134
|
const assistantSpawnGate = createSpawnGate();
|
|
5135
|
+
const projectsClient = client.createProjectsClient({ token: async () => credentials.token });
|
|
5025
5136
|
const spawnSession = async (options) => {
|
|
5026
5137
|
const timer = createSpawnTimer();
|
|
5027
5138
|
await index$1.refreshAgentHomes(Date.now(), { allowStale: true });
|
|
@@ -5033,6 +5144,10 @@ async function startDaemon() {
|
|
|
5033
5144
|
result = await (options.forceNew ? assistantSpawnGate.replace(() => spawnSessionImpl(options, timer)) : assistantSpawnGate.join(() => spawnSessionImpl(options, timer)));
|
|
5034
5145
|
}
|
|
5035
5146
|
logger.logger.debug(timer.format({ agent: options.agent ?? "claude", outcome: result.type }));
|
|
5147
|
+
if (result.type === "success" && options.parentSessionId) {
|
|
5148
|
+
const outcome = await spawnAgents.joinProject(projectsClient, result.sessionId, { kind: "lineage", parentSessionId: options.parentSessionId });
|
|
5149
|
+
if (outcome.joined) logger.logger.debug(`[DAEMON RUN] fork ${result.sessionId} joined project ${outcome.projectId} (lineage)`);
|
|
5150
|
+
}
|
|
5036
5151
|
return result;
|
|
5037
5152
|
};
|
|
5038
5153
|
const currentCliAvailability = () => apiMachineRef?.getCLIAvailability() ?? startupCliAvailability;
|
|
@@ -5663,7 +5778,7 @@ async function startDaemon() {
|
|
|
5663
5778
|
resolve();
|
|
5664
5779
|
}
|
|
5665
5780
|
};
|
|
5666
|
-
const requested = sessionLock.
|
|
5781
|
+
const requested = sessionLock.terminateProcessTree(pid, () => {
|
|
5667
5782
|
const tracked = pidToTrackedSession.get(pid);
|
|
5668
5783
|
if (tracked) {
|
|
5669
5784
|
if (tracked.happySessionId && tracked.encryption) {
|
|
@@ -5779,7 +5894,7 @@ async function startDaemon() {
|
|
|
5779
5894
|
logger.logger.debug(`[DAEMON RUN] Attempting to stop session ${sessionId}`);
|
|
5780
5895
|
for (const [pid, session] of pidToTrackedSession.entries()) {
|
|
5781
5896
|
if (session.happySessionId === sessionId || sessionId.startsWith("PID-") && pid === parseInt(sessionId.replace("PID-", ""))) {
|
|
5782
|
-
const requested = sessionLock.
|
|
5897
|
+
const requested = sessionLock.terminateProcessTree(pid, (stopped) => {
|
|
5783
5898
|
if (!stopped) {
|
|
5784
5899
|
logger.logger.debug(`[DAEMON RUN] Session ${sessionId} survived SIGTERM and SIGKILL attempts`);
|
|
5785
5900
|
return;
|
|
@@ -6042,6 +6157,12 @@ async function startDaemon() {
|
|
|
6042
6157
|
daemonHibernation.invalidateBindings();
|
|
6043
6158
|
return persistence.resolveIdleMs(agentHibernationSetting);
|
|
6044
6159
|
});
|
|
6160
|
+
const webPanelsSync = startWebPanelsSync({
|
|
6161
|
+
statMtime: async () => (await fs.stat(configuration.configuration.settingsFile).catch(() => null))?.mtimeMs ?? null,
|
|
6162
|
+
readRaw: async () => (await persistence.readSettings()).webPanels,
|
|
6163
|
+
publish: (panels) => apiMachine.setWebPanels(panels),
|
|
6164
|
+
logProblems: (problems) => logger.logger.warn(`[DAEMON RUN] settings.json webPanels: skipped ${problems.length} entr${problems.length === 1 ? "y" : "ies"}: ${problems.map((p) => `#${p.index}${p.id ? ` (${p.id})` : ""} ${p.reason}`).join("; ")}`)
|
|
6165
|
+
});
|
|
6045
6166
|
apiMachine.connect();
|
|
6046
6167
|
if (identityConflict?.confidence === "weak") {
|
|
6047
6168
|
void apiMachine.updateMachineMetadata((current) => ({
|
|
@@ -6149,6 +6270,7 @@ async function startDaemon() {
|
|
|
6149
6270
|
logger.logger.debug(relayMove ? `[DAEMON RUN] Relay moved to ${relayMove.serverUrl}; handing off to a new daemon on the new settings` : "[DAEMON RUN] Daemon bundle replaced on disk and verified, handing off to new daemon");
|
|
6150
6271
|
teamWorker?.stop();
|
|
6151
6272
|
automationRunner?.stop();
|
|
6273
|
+
projectPresence?.stop();
|
|
6152
6274
|
clearInterval(restartOnStaleVersionAndHeartbeat);
|
|
6153
6275
|
clearInterval(cliUpdateInterval);
|
|
6154
6276
|
stopAgentVersionChecks();
|
|
@@ -6222,6 +6344,18 @@ async function startDaemon() {
|
|
|
6222
6344
|
if (result.type !== "success") return false;
|
|
6223
6345
|
return waitForSessionLive(id, (sid) => [...pidToTrackedSession.values()].some((s) => s.happySessionId === sid && isPidAlive(s.pid)));
|
|
6224
6346
|
},
|
|
6347
|
+
joinProject: (sessionId, projectId) => spawnAgents.joinProject(projectsClient, sessionId, { kind: "explicit", projectId }, { via: "automation" }),
|
|
6348
|
+
log: (message) => logger.logger.debug(`[DAEMON RUN] ${message}`)
|
|
6349
|
+
});
|
|
6350
|
+
projectPresence = createProjectPresenceReporter({
|
|
6351
|
+
machineId,
|
|
6352
|
+
client: projectsClient,
|
|
6353
|
+
live: () => [...pidToTrackedSession.values()].filter((s) => s.happySessionId && isPidAlive(s.pid)).map((s) => ({
|
|
6354
|
+
sessionId: s.happySessionId,
|
|
6355
|
+
flavor: s.happySessionMetadataFromLocalWebhook?.flavor ?? null,
|
|
6356
|
+
branch: s.happySessionMetadataFromLocalWebhook?.worktree?.branch ?? null,
|
|
6357
|
+
running: turnActivity.activeSessions().includes(s.happySessionId)
|
|
6358
|
+
})),
|
|
6225
6359
|
log: (message) => logger.logger.debug(`[DAEMON RUN] ${message}`)
|
|
6226
6360
|
});
|
|
6227
6361
|
void apiMachine.updateMachineMetadata((current) => ({
|
|
@@ -6232,10 +6366,12 @@ async function startDaemon() {
|
|
|
6232
6366
|
worktreeVersion: mirrorProtocol.WORKTREE_CAPABILITY_VERSION
|
|
6233
6367
|
})).catch(() => logger.logger.debug("[DAEMON RUN] Teams capability publication will retry on reconnect"));
|
|
6234
6368
|
const cleanupAndShutdown = async (source, errorMessage) => {
|
|
6369
|
+
webPanelsSync.stop();
|
|
6235
6370
|
logger.logger.debug(`[DAEMON RUN] Starting proper cleanup (source: ${source}, errorMessage: ${errorMessage})...`);
|
|
6236
6371
|
const scrollbackFlush = apiMachine.flushTerminalScrollback();
|
|
6237
6372
|
teamWorker?.stop();
|
|
6238
6373
|
automationRunner?.stop({ killScripts: true });
|
|
6374
|
+
projectPresence?.stop();
|
|
6239
6375
|
mirrorProtocol.currentWorktreeService()?.stopAll();
|
|
6240
6376
|
if (restartOnStaleVersionAndHeartbeat) {
|
|
6241
6377
|
clearInterval(restartOnStaleVersionAndHeartbeat);
|
|
@@ -1,59 +1,61 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var os = require('node:os');
|
|
4
|
-
var sessionLock = require('./sessionLock-
|
|
5
|
-
var persistence = require('./persistence-
|
|
6
|
-
var defaultPermissionMode = require('./defaultPermissionMode-
|
|
4
|
+
var sessionLock = require('./sessionLock-DokGab2R.cjs');
|
|
5
|
+
var persistence = require('./persistence-BegE7NPa.cjs');
|
|
6
|
+
var defaultPermissionMode = require('./defaultPermissionMode-pS3vmiSg.cjs');
|
|
7
7
|
var node_crypto = require('node:crypto');
|
|
8
|
-
var api = require('./api-
|
|
9
|
-
var logger = require('./logger-
|
|
10
|
-
var createSessionMetadata = require('./createSessionMetadata-
|
|
11
|
-
var _package = require('./package-
|
|
12
|
-
var index = require('./index-
|
|
8
|
+
var api = require('./api-Cmjfr8Z7.cjs');
|
|
9
|
+
var logger = require('./logger-C1GWx3gi.cjs');
|
|
10
|
+
var createSessionMetadata = require('./createSessionMetadata-BkIzHALd.cjs');
|
|
11
|
+
var _package = require('./package-SgqTYsjn.cjs');
|
|
12
|
+
var index = require('./index-C6O2vVjm.cjs');
|
|
13
13
|
var forkBackfill = require('./forkBackfill-8eLDeS73.cjs');
|
|
14
|
-
var configuration = require('./configuration-
|
|
15
|
-
var controlClient = require('./controlClient-
|
|
16
|
-
var machineMetadata = require('./machineMetadata-
|
|
14
|
+
var configuration = require('./configuration-CMHZnp6G.cjs');
|
|
15
|
+
var controlClient = require('./controlClient-C-5qCt8W.cjs');
|
|
16
|
+
var machineMetadata = require('./machineMetadata-CLHS9sv_.cjs');
|
|
17
17
|
var projectPath = require('./projectPath-ChLhdOyt.cjs');
|
|
18
18
|
var path = require('node:path');
|
|
19
19
|
var permissionMode = require('./permissionMode-CrV-XuMs.cjs');
|
|
20
20
|
var authRelay = require('./authRelay-Dy1qU9td.cjs');
|
|
21
21
|
var promises = require('node:fs/promises');
|
|
22
|
-
var attachmentContent = require('./attachmentContent-
|
|
22
|
+
var attachmentContent = require('./attachmentContent-Bo0UAsSu.cjs');
|
|
23
23
|
var transcriptCursor = require('./transcriptCursor-DcXGLeSc.cjs');
|
|
24
24
|
var startupPlan = require('./startupPlan-BLMbfQIH.cjs');
|
|
25
25
|
require('node:fs');
|
|
26
|
+
require('./processTreeSnapshot-mDbnuojn.cjs');
|
|
27
|
+
require('node:child_process');
|
|
26
28
|
require('zod');
|
|
27
29
|
require('axios');
|
|
28
|
-
require('./lidState-
|
|
30
|
+
require('./lidState-Dv2wwFTj.cjs');
|
|
29
31
|
require('os');
|
|
30
32
|
require('child_process');
|
|
31
33
|
require('node:events');
|
|
32
34
|
require('socket.io-client');
|
|
33
|
-
require('./
|
|
35
|
+
require('./pushNotifications-DaLQUyi0.cjs');
|
|
36
|
+
require('./contentLogMetadata-ZSFk_NjQ.cjs');
|
|
34
37
|
require('./limits-C-a7gr04.cjs');
|
|
35
|
-
require('./time-
|
|
36
|
-
require('./registerCommonHandlers-
|
|
38
|
+
require('./time-CrwIMHta.cjs');
|
|
39
|
+
require('./registerCommonHandlers-Cj084Sg7.cjs');
|
|
37
40
|
require('util');
|
|
38
41
|
require('fs/promises');
|
|
39
42
|
require('crypto');
|
|
40
43
|
require('path');
|
|
41
44
|
require('cross-spawn');
|
|
42
45
|
require('@paralleldrive/cuid2');
|
|
43
|
-
require('./sync-
|
|
46
|
+
require('./sync-D23jbqVa.cjs');
|
|
44
47
|
require('./backgroundTaskActivity-CBvUdj39.cjs');
|
|
45
|
-
require('./contentLogMetadata-ZSFk_NjQ.cjs');
|
|
46
48
|
require('chalk');
|
|
47
49
|
require('node:util');
|
|
48
50
|
require('./detectCLI-DR9ZaN6B.cjs');
|
|
49
51
|
require('fs');
|
|
50
|
-
require('./localHappyAgentAuth-
|
|
52
|
+
require('./localHappyAgentAuth-DjYvkXvV.cjs');
|
|
51
53
|
require('tweetnacl');
|
|
52
54
|
require('url');
|
|
53
55
|
|
|
54
56
|
const DEFAULT_CLAUDE_MODEL = void 0;
|
|
55
57
|
const DEFAULT_CLAUDE_EFFORT = void 0;
|
|
56
|
-
const importRunClaudeDeps = () => Promise.resolve().then(function () { return require('./runClaudeDeps-
|
|
58
|
+
const importRunClaudeDeps = () => Promise.resolve().then(function () { return require('./runClaudeDeps-B81cOKnH.cjs'); });
|
|
57
59
|
async function runClaude(credentials, options = {}) {
|
|
58
60
|
logger.logger.debug(`[CLAUDE] ===== CLAUDE MODE STARTING =====`);
|
|
59
61
|
logger.logger.debug(`[CLAUDE] This is the Claude agent, NOT Gemini`);
|
|
@@ -67,7 +69,7 @@ async function runClaude(credentials, options = {}) {
|
|
|
67
69
|
const isAssistantVariant = process.env.HAPPY_SESSION_VARIANT === "assistant";
|
|
68
70
|
if (isAssistantVariant) {
|
|
69
71
|
try {
|
|
70
|
-
const { bootstrapAssistantHome } = await Promise.resolve().then(function () { return require('./bootstrap-
|
|
72
|
+
const { bootstrapAssistantHome } = await Promise.resolve().then(function () { return require('./bootstrap-exVucYav.cjs'); });
|
|
71
73
|
await bootstrapAssistantHome();
|
|
72
74
|
} catch (error) {
|
|
73
75
|
logger.logger.debug("[START] Assistant home bootstrap failed:", error);
|
|
@@ -142,7 +144,7 @@ async function runClaude(credentials, options = {}) {
|
|
|
142
144
|
// a brand-new session cannot pick a PDF until after sending once.
|
|
143
145
|
attachmentKinds: [...attachmentContent.CLAUDE_ATTACHMENT_KINDS],
|
|
144
146
|
queueCancellation: true,
|
|
145
|
-
capabilities: ["claude-steer-v1", "claude-live-permission-v1", "claude-live-permission-v2", "claude-btw-v1", "claude-runtime-controls-v1", "claude-opus-5-5-v1", index.PROMPT_QUEUE_CAPABILITY, forkBackfill.FORK_BACKFILL_CAPABILITY, persistence.HIBERNATION_CAPABILITY],
|
|
147
|
+
capabilities: ["claude-steer-v1", "claude-live-permission-v1", "claude-live-permission-v2", "claude-btw-v1", "claude-runtime-controls-v1", "claude-opus-5-5-v1", index.PROMPT_QUEUE_CAPABILITY, forkBackfill.FORK_BACKFILL_CAPABILITY, persistence.HIBERNATION_CAPABILITY, index.PROJECT_SESSION_CAPABILITY],
|
|
146
148
|
// Effective mode this process enforces. Kept current by
|
|
147
149
|
// publishPermissionMode below; the web renders it instead of guessing.
|
|
148
150
|
permissionMode: permissionMode.mapToClaudeMode(initialPermissionMode ?? "default"),
|
|
@@ -187,7 +189,7 @@ async function runClaude(credentials, options = {}) {
|
|
|
187
189
|
}
|
|
188
190
|
if (!response) {
|
|
189
191
|
let offlineSessionId = null;
|
|
190
|
-
const { claudeLocal } = await Promise.resolve().then(function () { return require('./claudeLocal-
|
|
192
|
+
const { claudeLocal } = await Promise.resolve().then(function () { return require('./claudeLocal-re4yjSTx.cjs'); });
|
|
191
193
|
const { createSessionScanner: createSessionScanner2 } = await loadDeps();
|
|
192
194
|
const reconnection = api.startOfflineReconnection({
|
|
193
195
|
serverUrl: configuration.configuration.serverUrl,
|
|
@@ -309,7 +311,9 @@ async function runClaude(credentials, options = {}) {
|
|
|
309
311
|
claudeCheckSession,
|
|
310
312
|
createSessionScanner,
|
|
311
313
|
getProjectPath,
|
|
312
|
-
|
|
314
|
+
replayClaudeForkJsonl,
|
|
315
|
+
snapshotTree,
|
|
316
|
+
terminateSurvivors,
|
|
313
317
|
TitleGenerator,
|
|
314
318
|
BoardAnalyzer,
|
|
315
319
|
FileRateLimiter,
|
|
@@ -351,21 +355,10 @@ async function runClaude(credentials, options = {}) {
|
|
|
351
355
|
const jsonlPath = path.join(getProjectPath(workingDirectory), `${forkClaudeSessionId}.jsonl`);
|
|
352
356
|
try {
|
|
353
357
|
const file = await promises.readFile(jsonlPath, "utf-8");
|
|
354
|
-
const
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
let parsed;
|
|
359
|
-
try {
|
|
360
|
-
parsed = JSON.parse(line);
|
|
361
|
-
} catch {
|
|
362
|
-
continue;
|
|
363
|
-
}
|
|
364
|
-
const result = RawJSONLinesSchema.safeParse(parsed);
|
|
365
|
-
if (!result.success) continue;
|
|
366
|
-
session.sendClaudeSessionMessage(result.data);
|
|
367
|
-
backfilled += 1;
|
|
368
|
-
}
|
|
358
|
+
const backfilled = replayClaudeForkJsonl(file, {
|
|
359
|
+
send: (line) => session.sendClaudeSessionMessage(line),
|
|
360
|
+
closeTurn: () => session.closeReplayedClaudeTurn()
|
|
361
|
+
});
|
|
369
362
|
logger.logger.debug(`[FORK BACKFILL] Replayed ${backfilled} historical messages from ${jsonlPath}`);
|
|
370
363
|
session.updateMetadata((meta) => ({ ...meta, claudeSessionId: forkClaudeSessionId }));
|
|
371
364
|
void forkBackfill.publishForkBackfillWhenCommitted(session, { count: backfilled }).then((published) => logger.logger.debug(`[FORK BACKFILL] ${published ? "Committed" : "Session closed before commit of"} ${backfilled} replayed messages`));
|
|
@@ -449,7 +442,7 @@ async function runClaude(credentials, options = {}) {
|
|
|
449
442
|
session.sendClaudeSessionMessage(raw);
|
|
450
443
|
}
|
|
451
444
|
});
|
|
452
|
-
const happyServer = await startHappyServer(session, { assistant: isAssistantVariant, selfReportState: boardSelfReport });
|
|
445
|
+
const happyServer = await startHappyServer(session, { assistant: isAssistantVariant, selfReportState: boardSelfReport, push: { sendAttention: (input) => api$1.push().sendAttention(input) } });
|
|
453
446
|
logger.logger.debug(`[START] Happy MCP server started at ${happyServer.url}`);
|
|
454
447
|
let currentSession = null;
|
|
455
448
|
const prewarmHookGate = new PrewarmHookGate();
|
|
@@ -803,6 +796,7 @@ async function runClaude(credentials, options = {}) {
|
|
|
803
796
|
logger.logger.debug(`[START] Received termination signal, cleaning up (archive=${intent === "archive"})...`);
|
|
804
797
|
promptQueueDrain.close();
|
|
805
798
|
cleanupPrewarm();
|
|
799
|
+
const wrapperTree = snapshotTree(process.pid);
|
|
806
800
|
try {
|
|
807
801
|
if (session) {
|
|
808
802
|
currentSession?.cleanup();
|
|
@@ -822,9 +816,11 @@ async function runClaude(credentials, options = {}) {
|
|
|
822
816
|
cleanupHookSettingsFile(hookSettingsPath);
|
|
823
817
|
await remoteScanner.cleanup();
|
|
824
818
|
logger.logger.debug("[START] Cleanup complete, exiting");
|
|
819
|
+
await terminateSurvivors(wrapperTree);
|
|
825
820
|
process.exit(0);
|
|
826
821
|
} catch (error) {
|
|
827
822
|
logger.logger.debug("[START] Error during cleanup:", error);
|
|
823
|
+
await terminateSurvivors(wrapperTree).catch(() => void 0);
|
|
828
824
|
process.exit(1);
|
|
829
825
|
}
|
|
830
826
|
};
|