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,27 +1,125 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var logger = require('./logger-CphW5nUE.cjs');
|
|
4
|
+
var prompt = require('./prompt-lgF9IE82.cjs');
|
|
5
|
+
var client = require('./client-DJplzPjD.cjs');
|
|
6
|
+
var reportProgressTool = require('./reportProgressTool-14AXr959.cjs');
|
|
7
|
+
var index = require('./index-Dv0Q48P3.cjs');
|
|
4
8
|
var promises = require('node:fs/promises');
|
|
5
9
|
var node_crypto = require('node:crypto');
|
|
6
10
|
var node_fs = require('node:fs');
|
|
7
11
|
var path = require('node:path');
|
|
8
12
|
var z = require('zod');
|
|
9
|
-
var client = require('./client-
|
|
10
|
-
var context = require('./context-
|
|
11
|
-
var sessionOps = require('./sessionOps-
|
|
12
|
-
var resources = require('./resources-
|
|
13
|
-
var tools = require('./tools-
|
|
14
|
-
var
|
|
15
|
-
var peerTools = require('./peerTools-iy3_6Yc5.cjs');
|
|
13
|
+
var client$1 = require('./client-D_loZ9IK.cjs');
|
|
14
|
+
var context = require('./context-6TP-iz_c.cjs');
|
|
15
|
+
var sessionOps = require('./sessionOps-BrGiU9-s.cjs');
|
|
16
|
+
var resources = require('./resources-CvIlkzpP.cjs');
|
|
17
|
+
var tools = require('./tools-BL7Byl_x.cjs');
|
|
18
|
+
var peerTools = require('./peerTools-DQNlrcqM.cjs');
|
|
16
19
|
var mcp_js = require('@modelcontextprotocol/sdk/server/mcp.js');
|
|
17
20
|
var node_http = require('node:http');
|
|
18
21
|
var streamableHttp_js = require('@modelcontextprotocol/sdk/server/streamableHttp.js');
|
|
19
|
-
var logger = require('./logger-DXTWlPzP.cjs');
|
|
20
22
|
var limits = require('./limits-C-a7gr04.cjs');
|
|
21
|
-
var downloadTarget = require('./downloadTarget-
|
|
23
|
+
var downloadTarget = require('./downloadTarget-CEb9che-.cjs');
|
|
22
24
|
var agentGuidance = require('./agentGuidance-BtBx2xxE.cjs');
|
|
25
|
+
var webPanels = require('./webPanels-FCgFKvVe.cjs');
|
|
26
|
+
var persistence = require('./persistence-9BMYspxG.cjs');
|
|
27
|
+
var pushNotifications = require('./pushNotifications-DI92havG.cjs');
|
|
23
28
|
var previewPath = require('./previewPath-B0rBdhy1.cjs');
|
|
24
|
-
var
|
|
29
|
+
var require$$3 = require('crypto');
|
|
30
|
+
|
|
31
|
+
function createProjectInjector(deps) {
|
|
32
|
+
const timeoutMs = deps.timeoutMs ?? 1500;
|
|
33
|
+
const now = deps.now ?? Date.now;
|
|
34
|
+
const presenceEvery = deps.presenceMinIntervalMs ?? 3e4;
|
|
35
|
+
const state = { projectId: null, prefixSent: false, cursor: 0, injectedVersion: null };
|
|
36
|
+
const titles = /* @__PURE__ */ new Map();
|
|
37
|
+
let lastPresenceAt = 0;
|
|
38
|
+
let lastPresenceVersion = null;
|
|
39
|
+
const label = (id) => titles.get(id) ?? id.slice(0, 8);
|
|
40
|
+
function withTimeout(p) {
|
|
41
|
+
return Promise.race([p, new Promise((_, reject) => setTimeout(() => reject(new Error("project injection timeout")), timeoutMs).unref?.())]);
|
|
42
|
+
}
|
|
43
|
+
function reportPresence(force) {
|
|
44
|
+
const sid = deps.sessionId();
|
|
45
|
+
const meta = deps.metadata?.() ?? null;
|
|
46
|
+
const machineId = typeof meta?.machineId === "string" ? meta.machineId : null;
|
|
47
|
+
if (!sid || !machineId || !state.projectId) return;
|
|
48
|
+
const t = now();
|
|
49
|
+
if (!force && state.injectedVersion === lastPresenceVersion && t - lastPresenceAt < presenceEvery) return;
|
|
50
|
+
lastPresenceAt = t;
|
|
51
|
+
lastPresenceVersion = state.injectedVersion;
|
|
52
|
+
const entry = {
|
|
53
|
+
sessionId: sid,
|
|
54
|
+
agent: deps.agent,
|
|
55
|
+
state: "running",
|
|
56
|
+
injectedInstructionsVersion: state.injectedVersion,
|
|
57
|
+
...typeof meta?.summary?.text === "string" ? { title: String(meta.summary.text).slice(0, 200) } : {},
|
|
58
|
+
...typeof meta?.board?.progress === "string" ? { doing: String(meta.board.progress).slice(0, 200) } : {},
|
|
59
|
+
...typeof meta?.worktree?.branch === "string" ? { branch: String(meta.worktree.branch).slice(0, 200) } : {},
|
|
60
|
+
...typeof meta?.host === "string" ? { machine: String(meta.host).slice(0, 200) } : {},
|
|
61
|
+
...Array.isArray(meta?.capabilities) ? { capabilities: meta.capabilities.filter((c) => typeof c === "string").slice(0, 32) } : {}
|
|
62
|
+
};
|
|
63
|
+
void deps.client.presence(machineId, [entry]).catch((error) => logger.logger.debug(`[projects] presence write skipped: ${String(error)}`));
|
|
64
|
+
}
|
|
65
|
+
function markDelivered(sid, ids) {
|
|
66
|
+
if (ids.length) void deps.client.delivered(sid, ids).catch((error) => logger.logger.debug(`[projects] delivered ack skipped: ${String(error)}`));
|
|
67
|
+
}
|
|
68
|
+
async function firstTurn(sid, message) {
|
|
69
|
+
const ctx = await withTimeout(deps.client.context(sid, {}, timeoutMs));
|
|
70
|
+
for (const s of ctx.sessions) if (s.title) titles.set(s.sessionId, s.title);
|
|
71
|
+
const built = prompt.buildFirstTurnPrefix(ctx, { label });
|
|
72
|
+
if (!built || !ctx.project) {
|
|
73
|
+
state.projectId = null;
|
|
74
|
+
return message;
|
|
75
|
+
}
|
|
76
|
+
state.projectId = ctx.project.id;
|
|
77
|
+
state.prefixSent = true;
|
|
78
|
+
state.cursor = ctx.asOf;
|
|
79
|
+
state.injectedVersion = built.instructionsVersion;
|
|
80
|
+
markDelivered(sid, ctx.unread.map((u) => u.id));
|
|
81
|
+
reportPresence(true);
|
|
82
|
+
return prompt.prependToMessage(message, built.prefix);
|
|
83
|
+
}
|
|
84
|
+
async function laterTurn(sid, message) {
|
|
85
|
+
const d = await withTimeout(deps.client.digest(sid, state.cursor, timeoutMs));
|
|
86
|
+
if (!d.projectId) {
|
|
87
|
+
state.projectId = null;
|
|
88
|
+
state.prefixSent = false;
|
|
89
|
+
state.injectedVersion = null;
|
|
90
|
+
return message;
|
|
91
|
+
}
|
|
92
|
+
if (d.projectId !== state.projectId) {
|
|
93
|
+
state.prefixSent = false;
|
|
94
|
+
return firstTurn(sid, message);
|
|
95
|
+
}
|
|
96
|
+
state.cursor = d.asOf;
|
|
97
|
+
if (d.instructions) state.injectedVersion = d.instructions.version;
|
|
98
|
+
markDelivered(sid, d.messages.map((m) => m.id));
|
|
99
|
+
reportPresence(!!d.instructions);
|
|
100
|
+
return prompt.prependToMessage(message, prompt.buildDigestLine(d, { label }));
|
|
101
|
+
}
|
|
102
|
+
return {
|
|
103
|
+
state: () => ({ ...state }),
|
|
104
|
+
/** A fresh agent with no memory of earlier turns (ACP backend restart, new Claude conversation) needs P again. */
|
|
105
|
+
reset() {
|
|
106
|
+
state.prefixSent = false;
|
|
107
|
+
state.cursor = 0;
|
|
108
|
+
},
|
|
109
|
+
async decorate(message) {
|
|
110
|
+
if (typeof message !== "string") return message;
|
|
111
|
+
const sid = deps.sessionId();
|
|
112
|
+
if (!sid || deps.client.isDisabled()) return message;
|
|
113
|
+
try {
|
|
114
|
+
const out = state.prefixSent ? await laterTurn(sid, message) : await firstTurn(sid, message);
|
|
115
|
+
return out;
|
|
116
|
+
} catch (error) {
|
|
117
|
+
if (!(error instanceof client.ProjectsUnsupportedError)) logger.logger.debug(`[projects] injection skipped: ${String(error)}`);
|
|
118
|
+
return message;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
};
|
|
122
|
+
}
|
|
25
123
|
|
|
26
124
|
const TEAMS_ADOPT_CAPABILITY = "teams-adopt-v1";
|
|
27
125
|
const TeamAdoptSchema = z.z.object({
|
|
@@ -78,7 +176,7 @@ async function retainTeam(path, input, resolvedTeamId, guidanceDelivered = false
|
|
|
78
176
|
}
|
|
79
177
|
}
|
|
80
178
|
function createTeamAdoption(sessionId) {
|
|
81
|
-
const client
|
|
179
|
+
const client = client$1.createTeamsClient(sessionId);
|
|
82
180
|
let current;
|
|
83
181
|
return (raw) => {
|
|
84
182
|
const parsed = TeamAdoptSchema.safeParse(raw);
|
|
@@ -107,7 +205,7 @@ function createTeamAdoption(sessionId) {
|
|
|
107
205
|
let intent;
|
|
108
206
|
try {
|
|
109
207
|
intent = await retainIntent(path, input);
|
|
110
|
-
const connected = await client
|
|
208
|
+
const connected = await client.initialize(input, { resumeAdoption: true, expectedTeamId: intent.resolvedTeamId, onTeamResolved: (teamId) => retainTeam(path, input, teamId, intent?.guidanceDelivered) });
|
|
111
209
|
const instructions = `${resources.TEAM_SKILL}
|
|
112
210
|
|
|
113
211
|
This session is now connected as the team lead. Call team_inspect to read the authoritative state before continuing the user's goal. Do not call team_create or team_join again.`;
|
|
@@ -118,7 +216,7 @@ This session is now connected as the team lead. Call team_inspect to read the au
|
|
|
118
216
|
}
|
|
119
217
|
operation.result = { status: "connected", teamId: connected.team.id, botId: connected.botId, instructions };
|
|
120
218
|
} catch (error) {
|
|
121
|
-
if (error instanceof client.TeamConnectionPreflightError && intent?.fresh && !intent.resolvedTeamId) {
|
|
219
|
+
if (error instanceof client$1.TeamConnectionPreflightError && intent?.fresh && !intent.resolvedTeamId) {
|
|
122
220
|
await promises.unlink(path).catch(() => {
|
|
123
221
|
});
|
|
124
222
|
operation.safeToChange = true;
|
|
@@ -130,6 +228,41 @@ This session is now connected as the team lead. Call team_inspect to read the au
|
|
|
130
228
|
};
|
|
131
229
|
}
|
|
132
230
|
|
|
231
|
+
const REQUEST_HUMAN_TOOL_NAME = "request_human";
|
|
232
|
+
const REQUEST_HUMAN_REASON_MAX = 200;
|
|
233
|
+
const REQUEST_HUMAN_DEDUPE_MS = 6e4;
|
|
234
|
+
const REQUEST_HUMAN_TOOL_DESCRIPTION = "Ask the user to step in when you cannot continue on your own: a captcha, 2FA code, QR scan, OAuth consent page, or a decision only they can make. Sends a push notification and marks the task board as blocked. Give a short reason (no secrets; the server can read it). If this machine declares a web panel showing what you are working in (e.g. a remote desktop or browser dashboard), pass its id as `panel` so the notification opens it. Afterwards, poll for your own completion condition (the page changed, the element disappeared) instead of waiting for a reply.";
|
|
235
|
+
function createRequestHuman(deps) {
|
|
236
|
+
const now = deps.now ?? Date.now;
|
|
237
|
+
let last = null;
|
|
238
|
+
return async (rawReason, panel) => {
|
|
239
|
+
const reason = rawReason.replace(/\s+/g, " ").trim().slice(0, REQUEST_HUMAN_REASON_MAX);
|
|
240
|
+
if (!reason) return { notified: false, error: "reason must be a non-empty string" };
|
|
241
|
+
await deps.reportBlocked(reason);
|
|
242
|
+
const at = now();
|
|
243
|
+
if (last && last.reason === reason && at - last.at < REQUEST_HUMAN_DEDUPE_MS) {
|
|
244
|
+
return { notified: true, deduped: true };
|
|
245
|
+
}
|
|
246
|
+
let url = `/session/${encodeURIComponent(deps.sessionId)}`;
|
|
247
|
+
let unknownPanel;
|
|
248
|
+
if (panel) {
|
|
249
|
+
const machineId = deps.machineId();
|
|
250
|
+
const { panels } = webPanels.normalizeWebPanels(await deps.readPanels().catch(() => void 0));
|
|
251
|
+
if (machineId && panels.some((p) => p.id === panel)) url = webPanels.webPanelPath(machineId, panel);
|
|
252
|
+
else unknownPanel = panel;
|
|
253
|
+
}
|
|
254
|
+
const sent = await deps.sendAttention({ sessionId: deps.sessionId, reason, url });
|
|
255
|
+
if (sent.sent) last = { reason, at };
|
|
256
|
+
return { notified: sent.sent, url, ...unknownPanel ? { unknownPanel } : {}, ...sent.error ? { error: sent.error } : {} };
|
|
257
|
+
};
|
|
258
|
+
}
|
|
259
|
+
function requestHumanResultText(r) {
|
|
260
|
+
if (r.deduped) return "Already asked for this in the last minute; the board still shows it. Keep polling your completion condition.";
|
|
261
|
+
if (!r.notified) return `Could not notify the user: ${r.error ?? "unknown error"}. The task board is marked blocked.`;
|
|
262
|
+
const panelNote = r.unknownPanel ? ` (panel "${r.unknownPanel}" is not declared on this machine, so the notification opens the session instead)` : "";
|
|
263
|
+
return `Notified the user${panelNote}. This does not mean they have seen it. Poll your own completion condition (URL changed, element gone) instead of waiting for a reply.`;
|
|
264
|
+
}
|
|
265
|
+
|
|
133
266
|
function createMcpServer(handlers, options, sessionId, client) {
|
|
134
267
|
const mcp = new mcp_js.McpServer({
|
|
135
268
|
name: "Very Happy Tools",
|
|
@@ -138,6 +271,7 @@ function createMcpServer(handlers, options, sessionId, client) {
|
|
|
138
271
|
tools.registerTeamsTools(mcp, sessionId);
|
|
139
272
|
reportProgressTool.registerAutomationTools(mcp);
|
|
140
273
|
if (client) peerTools.registerSessionPeerTools(mcp, peerTools.createSessionPeerToolExecutor(client));
|
|
274
|
+
if (client) reportProgressTool.registerProjectTools(mcp, reportProgressTool.createProjectToolExecutor(() => client.sessionId));
|
|
141
275
|
mcp.registerTool("change_title", {
|
|
142
276
|
description: "Change the title of the current chat session",
|
|
143
277
|
title: "Change Chat Title",
|
|
@@ -224,6 +358,18 @@ function createMcpServer(handlers, options, sessionId, client) {
|
|
|
224
358
|
isError: true
|
|
225
359
|
};
|
|
226
360
|
});
|
|
361
|
+
mcp.registerTool(REQUEST_HUMAN_TOOL_NAME, {
|
|
362
|
+
description: REQUEST_HUMAN_TOOL_DESCRIPTION,
|
|
363
|
+
title: "Ask the user to step in",
|
|
364
|
+
inputSchema: {
|
|
365
|
+
reason: z.z.string().describe("What you need from the user, one short line (no secrets)"),
|
|
366
|
+
panel: z.z.string().optional().describe("Id of this machine's web panel that shows what you are working in (from ~/.happy/settings.json webPanels)")
|
|
367
|
+
}
|
|
368
|
+
}, async (args) => {
|
|
369
|
+
const response = await handlers.requestHuman(String(args.reason ?? ""), args.panel);
|
|
370
|
+
logger.logger.debug("[happyMCP] request_human response:", response);
|
|
371
|
+
return { content: [{ type: "text", text: requestHumanResultText(response) }], isError: response.error === "reason must be a non-empty string" };
|
|
372
|
+
});
|
|
227
373
|
reportProgressTool.registerReportProgressTool(mcp, async (args) => {
|
|
228
374
|
const response = await handlers.reportProgress(String(args.progress ?? ""), reportProgressTool.normalizeAttention(args.attention), reportProgressTool.normalizePhase(args.phase));
|
|
229
375
|
logger.logger.debug("[happyMCP] report_progress response:", response);
|
|
@@ -321,10 +467,66 @@ async function startHappyServer(client, options) {
|
|
|
321
467
|
} catch (error) {
|
|
322
468
|
return { delivered: false, truncated: false, totalBytes: 0, error: String(error) };
|
|
323
469
|
}
|
|
324
|
-
}
|
|
470
|
+
},
|
|
471
|
+
requestHuman: createRequestHuman({
|
|
472
|
+
sessionId: client.sessionId,
|
|
473
|
+
machineId: () => client.getMetadata()?.machineId,
|
|
474
|
+
readPanels: async () => (await persistence.readSettings()).webPanels,
|
|
475
|
+
// Same board write (and attention-change throttle bypass) as report_progress.
|
|
476
|
+
reportBlocked: (reason) => handlers.reportProgress(reason, "blocked"),
|
|
477
|
+
sendAttention: (input) => options?.push ? options.push.sendAttention({ ...input, sessionTitle: pushNotifications.getSessionNotificationBody(client.getMetadata()) }) : Promise.resolve({ sent: false, error: "push is not available in this runner" })
|
|
478
|
+
})
|
|
325
479
|
};
|
|
326
480
|
const contextPath = "/runtime-context/" + node_crypto.randomUUID();
|
|
481
|
+
const steerPath = "/runtime-steer/" + node_crypto.randomUUID();
|
|
327
482
|
const server = node_http.createServer(async (req, res) => {
|
|
483
|
+
if (req.url?.startsWith("/runtime-steer/")) {
|
|
484
|
+
const steer = options?.piSteer;
|
|
485
|
+
if (!steer || req.headers.origin) {
|
|
486
|
+
res.writeHead(403).end();
|
|
487
|
+
return;
|
|
488
|
+
}
|
|
489
|
+
if (req.method === "GET" && req.url === steerPath) {
|
|
490
|
+
const gone = new AbortController();
|
|
491
|
+
res.on("close", () => gone.abort());
|
|
492
|
+
const item = await steer.take(25e3, gone.signal);
|
|
493
|
+
if (res.writableEnded || gone.signal.aborted) {
|
|
494
|
+
return;
|
|
495
|
+
}
|
|
496
|
+
if (!item) {
|
|
497
|
+
res.writeHead(204).end();
|
|
498
|
+
return;
|
|
499
|
+
}
|
|
500
|
+
res.writeHead(200, { "content-type": "application/json" }).end(JSON.stringify(item));
|
|
501
|
+
return;
|
|
502
|
+
}
|
|
503
|
+
if (req.method === "POST" && (req.url === steerPath + "/hello" || req.url === steerPath + "/ack")) {
|
|
504
|
+
let body = "";
|
|
505
|
+
for await (const chunk of req) {
|
|
506
|
+
body += chunk.toString();
|
|
507
|
+
if (Buffer.byteLength(body) > 1024) {
|
|
508
|
+
res.writeHead(413).end();
|
|
509
|
+
return;
|
|
510
|
+
}
|
|
511
|
+
}
|
|
512
|
+
if (req.url.endsWith("/hello")) {
|
|
513
|
+
steer.hello();
|
|
514
|
+
res.writeHead(204).end();
|
|
515
|
+
return;
|
|
516
|
+
}
|
|
517
|
+
try {
|
|
518
|
+
const ack = JSON.parse(body);
|
|
519
|
+
if (typeof ack.id !== "number") throw new Error("id");
|
|
520
|
+
steer.ack(ack.id, ack.delivered === true);
|
|
521
|
+
res.writeHead(204).end();
|
|
522
|
+
} catch {
|
|
523
|
+
res.writeHead(400).end();
|
|
524
|
+
}
|
|
525
|
+
return;
|
|
526
|
+
}
|
|
527
|
+
res.writeHead(403).end();
|
|
528
|
+
return;
|
|
529
|
+
}
|
|
328
530
|
if (req.url?.startsWith("/runtime-context/")) {
|
|
329
531
|
if (!options?.onContextUsage || req.url !== contextPath || req.method !== "POST" || req.headers.origin) {
|
|
330
532
|
res.writeHead(403).end();
|
|
@@ -381,14 +583,17 @@ async function startHappyServer(client, options) {
|
|
|
381
583
|
return {
|
|
382
584
|
url: baseUrl.toString(),
|
|
383
585
|
contextUsageUrl: options?.onContextUsage ? new URL(contextPath, baseUrl).toString() : void 0,
|
|
586
|
+
steerUrl: options?.piSteer ? new URL(steerPath, baseUrl).toString() : void 0,
|
|
384
587
|
toolNames: [
|
|
385
588
|
"change_title",
|
|
386
589
|
limits.CLIPBOARD_TOOL_NAME,
|
|
387
590
|
agentGuidance.PREVIEW_TOOL_NAME,
|
|
388
591
|
agentGuidance.REPORT_PROGRESS_TOOL_NAME,
|
|
592
|
+
REQUEST_HUMAN_TOOL_NAME,
|
|
389
593
|
...tools.TEAM_TOOL_NAMES,
|
|
390
594
|
...reportProgressTool.AUTOMATION_TOOL_NAMES,
|
|
391
595
|
...peerTools.SESSION_PEER_TOOL_NAMES,
|
|
596
|
+
...reportProgressTool.PROJECT_TOOL_NAMES,
|
|
392
597
|
...options?.assistant && !process.env.VH_TEAM_SCOPE_FILE ? downloadTarget.ASSISTANT_TOOL_NAMES : []
|
|
393
598
|
],
|
|
394
599
|
stop: () => {
|
|
@@ -482,8 +687,9 @@ function deterministicStringify(obj, options = {}) {
|
|
|
482
687
|
}
|
|
483
688
|
function hashObject(obj, options, encoding = "hex") {
|
|
484
689
|
const jsonString = deterministicStringify(obj, options);
|
|
485
|
-
return
|
|
690
|
+
return require$$3.createHash("sha256").update(jsonString).digest(encoding);
|
|
486
691
|
}
|
|
487
692
|
|
|
693
|
+
exports.createProjectInjector = createProjectInjector;
|
|
488
694
|
exports.hashObject = hashObject;
|
|
489
695
|
exports.startHappyServer = startHappyServer;
|
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var chalk = require('chalk');
|
|
4
|
-
var configuration = require('./configuration-
|
|
5
|
-
var persistence = require('./persistence-
|
|
6
|
-
var controlClient = require('./controlClient-
|
|
4
|
+
var configuration = require('./configuration-CYO-kPOS.cjs');
|
|
5
|
+
var persistence = require('./persistence-9BMYspxG.cjs');
|
|
6
|
+
var controlClient = require('./controlClient-Bqv5v5OM.cjs');
|
|
7
7
|
var doctor$1 = require('./doctor-u46qYYKX.cjs');
|
|
8
8
|
var node_fs = require('node:fs');
|
|
9
9
|
var path = require('node:path');
|
|
10
|
-
var projectPath = require('./projectPath-
|
|
11
|
-
var _package = require('./package-
|
|
12
|
-
var doctorReadiness = require('./doctorReadiness-
|
|
10
|
+
var projectPath = require('./projectPath-C3ioB4Bu.cjs');
|
|
11
|
+
var _package = require('./package-KhLqBDX9.cjs');
|
|
12
|
+
var doctorReadiness = require('./doctorReadiness-Dl6yRQCy.cjs');
|
|
13
13
|
var authRelay = require('./authRelay-Dy1qU9td.cjs');
|
|
14
14
|
var cliUpdate = require('./cliUpdate-DsKXPFYp.cjs');
|
|
15
15
|
var node_child_process = require('node:child_process');
|
|
16
|
-
var piRunnerArgs = require('./piRunnerArgs-
|
|
16
|
+
var piRunnerArgs = require('./piRunnerArgs-DGaq6VYM.cjs');
|
|
17
17
|
|
|
18
18
|
function shareSafeProcessLine(process2) {
|
|
19
19
|
return `PID ${process2.pid}: command arguments hidden for privacy`;
|
|
@@ -313,8 +313,8 @@ ${typeLabels[type] || type}:`));
|
|
|
313
313
|
}
|
|
314
314
|
console.log(chalk.gray(" An external claude command is only needed for native terminal/mirror use."));
|
|
315
315
|
try {
|
|
316
|
-
const { resolveAgentHomesForCli } = await Promise.resolve().then(function () { return require('./agentHome-
|
|
317
|
-
const { describeAgentHome } = await Promise.resolve().then(function () { return require('./index-
|
|
316
|
+
const { resolveAgentHomesForCli } = await Promise.resolve().then(function () { return require('./agentHome-C7Sb7-Tz.cjs'); });
|
|
317
|
+
const { describeAgentHome } = await Promise.resolve().then(function () { return require('./index-C64Ufj4D.cjs'); });
|
|
318
318
|
const homes = await resolveAgentHomesForCli();
|
|
319
319
|
console.log(chalk.green(`\u2713 Claude config dir: ${describeAgentHome(homes.claudeConfigDir)}`));
|
|
320
320
|
console.log(chalk.green(`\u2713 Codex home: ${describeAgentHome(homes.codexHome)}`));
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
import chalk from 'chalk';
|
|
2
|
-
import { c as configuration } from './configuration-
|
|
3
|
-
import { r as readSettings, g as readCredentials, d as readDaemonState } from './persistence-
|
|
4
|
-
import { a as checkIfDaemonRunningAndCleanupStaleState } from './controlClient-
|
|
2
|
+
import { c as configuration } from './configuration-PxzEJumr.mjs';
|
|
3
|
+
import { r as readSettings, g as readCredentials, d as readDaemonState } from './persistence-BFUOHW5h.mjs';
|
|
4
|
+
import { a as checkIfDaemonRunningAndCleanupStaleState } from './controlClient-DoeYovwP.mjs';
|
|
5
5
|
import { findAllHappyProcesses } from './doctor-BPkYWSuq.mjs';
|
|
6
6
|
import { statSync, realpathSync, existsSync, readdirSync } from 'node:fs';
|
|
7
7
|
import { isAbsolute, resolve, dirname, basename, delimiter, join } from 'node:path';
|
|
8
8
|
import { p as projectPath } from './projectPath-BTBIMB57.mjs';
|
|
9
|
-
import { p as packageJson } from './package-
|
|
9
|
+
import { p as packageJson } from './package-7Ld1YMhh.mjs';
|
|
10
10
|
import { s as shareableSettingsSummary, c as collectRuntimeReadiness, S as SUPPORTED_NODE_LABEL, r as resolveClaudeCredentialReadiness, a as toolProbeLabel, b as daemonReadiness, d as daemonEndpointsMatch } from './doctorReadiness-C208SMN9.mjs';
|
|
11
11
|
import { c as credentialRelayProblem } from './authRelay-DhQhkBvX.mjs';
|
|
12
12
|
import { d as deriveLocalCliUpdateSummary } from './cliUpdate-Y34VGe9Y.mjs';
|
|
13
13
|
import { spawnSync } from 'node:child_process';
|
|
14
|
-
import { c as piInstallCommand } from './piRunnerArgs-
|
|
14
|
+
import { c as piInstallCommand } from './piRunnerArgs-H2pgpA5z.mjs';
|
|
15
15
|
|
|
16
16
|
function shareSafeProcessLine(process2) {
|
|
17
17
|
return `PID ${process2.pid}: command arguments hidden for privacy`;
|
|
@@ -311,8 +311,8 @@ ${typeLabels[type] || type}:`));
|
|
|
311
311
|
}
|
|
312
312
|
console.log(chalk.gray(" An external claude command is only needed for native terminal/mirror use."));
|
|
313
313
|
try {
|
|
314
|
-
const { resolveAgentHomesForCli } = await import('./agentHome-
|
|
315
|
-
const { describeAgentHome } = await import('./index-
|
|
314
|
+
const { resolveAgentHomesForCli } = await import('./agentHome-CmGy0NWv.mjs');
|
|
315
|
+
const { describeAgentHome } = await import('./index-Bsvbgh9e.mjs');
|
|
316
316
|
const homes = await resolveAgentHomesForCli();
|
|
317
317
|
console.log(chalk.green(`\u2713 Claude config dir: ${describeAgentHome(homes.claudeConfigDir)}`));
|
|
318
318
|
console.log(chalk.green(`\u2713 Codex home: ${describeAgentHome(homes.codexHome)}`));
|
|
@@ -389,4 +389,4 @@ var doctor = /*#__PURE__*/Object.freeze({
|
|
|
389
389
|
runDoctorDaemon: runDoctorDaemon
|
|
390
390
|
});
|
|
391
391
|
|
|
392
|
-
export {
|
|
392
|
+
export { globalPrefixForPackage as a, doctor as d, getEnvironmentInfo as g };
|
|
@@ -4,7 +4,7 @@ var node_child_process = require('node:child_process');
|
|
|
4
4
|
var node_fs = require('node:fs');
|
|
5
5
|
var os = require('node:os');
|
|
6
6
|
var path = require('node:path');
|
|
7
|
-
var detectCLI = require('./detectCLI-
|
|
7
|
+
var detectCLI = require('./detectCLI-BuYR_Qxe.cjs');
|
|
8
8
|
|
|
9
9
|
const SUPPORTED_NODE_LABEL = "20.19+ within 20.x, 22.13+ within 22.x, or 24+";
|
|
10
10
|
const MIN_TMUX_ENV_MAJOR = 3;
|
|
@@ -3,14 +3,14 @@
|
|
|
3
3
|
var promises = require('node:fs/promises');
|
|
4
4
|
var os = require('node:os');
|
|
5
5
|
var z = require('zod');
|
|
6
|
-
var logger = require('./logger-
|
|
7
|
-
var persistence = require('./persistence-
|
|
8
|
-
var controlClient = require('./controlClient-
|
|
9
|
-
var sessionOps = require('./sessionOps-
|
|
10
|
-
var remoteSessionClient = require('./remoteSessionClient-
|
|
6
|
+
var logger = require('./logger-CphW5nUE.cjs');
|
|
7
|
+
var persistence = require('./persistence-9BMYspxG.cjs');
|
|
8
|
+
var controlClient = require('./controlClient-Bqv5v5OM.cjs');
|
|
9
|
+
var sessionOps = require('./sessionOps-BrGiU9-s.cjs');
|
|
10
|
+
var remoteSessionClient = require('./remoteSessionClient-D843fkzL.cjs');
|
|
11
11
|
var ids = require('./ids-B6ZC0HGt.cjs');
|
|
12
12
|
var terminals = require('./terminals-B_bfC9c2.cjs');
|
|
13
|
-
var bootstrap = require('./bootstrap-
|
|
13
|
+
var bootstrap = require('./bootstrap-DoA7okld.cjs');
|
|
14
14
|
var path = require('node:path');
|
|
15
15
|
|
|
16
16
|
const PERSONAL_MEMORY_SOFT_LIMIT_CHARS = 2e3;
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { readFile, writeFile, appendFile, stat } from 'node:fs/promises';
|
|
2
2
|
import os from 'node:os';
|
|
3
3
|
import { z } from 'zod';
|
|
4
|
-
import { l as logger } from './logger
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import { a as listSessions, r as readSessionTranscript, s as sessionWebUrl, g as waitForSessionKey, e as sendUserMessage, b as stopSession, d as archiveSession } from './sessionOps-
|
|
8
|
-
import { r as readRemoteTranscript, s as sendRemoteMessage, d as deliverToSession, R as RemoteSessionOpsError } from './remoteSessionClient-
|
|
4
|
+
import { l as logger } from './logger-BUngm5Xg.mjs';
|
|
5
|
+
import { c as readPersistedSessions } from './persistence-BFUOHW5h.mjs';
|
|
6
|
+
import { e as spawnDaemonSession } from './controlClient-DoeYovwP.mjs';
|
|
7
|
+
import { a as listSessions, r as readSessionTranscript, s as sessionWebUrl, g as waitForSessionKey, e as sendUserMessage, b as stopSession, d as archiveSession } from './sessionOps-C58iDeD5.mjs';
|
|
8
|
+
import { r as readRemoteTranscript, s as sendRemoteMessage, d as deliverToSession, R as RemoteSessionOpsError } from './remoteSessionClient-PP-mOKmw.mjs';
|
|
9
9
|
import { i as isValidSessionId, a as isValidTerminalId } from './ids-DU6sLx4C.mjs';
|
|
10
10
|
import { l as listVhTerminals, r as readVhTerminal, s as sendToVhTerminal } from './terminals-Dlg0x3nY.mjs';
|
|
11
|
-
import { bootstrapAssistantHome, assistantPersonalMemoryPath } from './bootstrap-
|
|
11
|
+
import { bootstrapAssistantHome, assistantPersonalMemoryPath } from './bootstrap-Dt5I1SOl.mjs';
|
|
12
12
|
import { join, isAbsolute, normalize } from 'node:path';
|
|
13
13
|
|
|
14
14
|
const PERSONAL_MEMORY_SOFT_LIMIT_CHARS = 2e3;
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var logger = require('./logger-
|
|
4
|
-
var controlClient = require('./controlClient-
|
|
5
|
-
var spawnHappyCLI = require('./spawnHappyCLI-
|
|
6
|
-
var persistence = require('./persistence-
|
|
7
|
-
var configuration = require('./configuration-
|
|
8
|
-
var doctorReadiness = require('./doctorReadiness-
|
|
3
|
+
var logger = require('./logger-CphW5nUE.cjs');
|
|
4
|
+
var controlClient = require('./controlClient-Bqv5v5OM.cjs');
|
|
5
|
+
var spawnHappyCLI = require('./spawnHappyCLI-DnUZv0X2.cjs');
|
|
6
|
+
var persistence = require('./persistence-9BMYspxG.cjs');
|
|
7
|
+
var configuration = require('./configuration-CYO-kPOS.cjs');
|
|
8
|
+
var doctorReadiness = require('./doctorReadiness-Dl6yRQCy.cjs');
|
|
9
9
|
|
|
10
10
|
function extractNoSandboxFlag(args) {
|
|
11
11
|
let noSandbox = false;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { l as logger } from './logger
|
|
2
|
-
import { i as isDaemonRunningCurrentlyInstalledHappyVersion, a as checkIfDaemonRunningAndCleanupStaleState,
|
|
3
|
-
import { s as spawnHappyCLI } from './spawnHappyCLI-
|
|
4
|
-
import { d as readDaemonState } from './persistence-
|
|
5
|
-
import { c as configuration } from './configuration-
|
|
1
|
+
import { l as logger } from './logger-BUngm5Xg.mjs';
|
|
2
|
+
import { i as isDaemonRunningCurrentlyInstalledHappyVersion, a as checkIfDaemonRunningAndCleanupStaleState, s as stopDaemon } from './controlClient-DoeYovwP.mjs';
|
|
3
|
+
import { s as spawnHappyCLI } from './spawnHappyCLI-BjFZc_7V.mjs';
|
|
4
|
+
import { d as readDaemonState } from './persistence-BFUOHW5h.mjs';
|
|
5
|
+
import { c as configuration } from './configuration-PxzEJumr.mjs';
|
|
6
6
|
import { d as daemonEndpointsMatch } from './doctorReadiness-C208SMN9.mjs';
|
|
7
7
|
|
|
8
8
|
function extractNoSandboxFlag(args) {
|
|
@@ -1,24 +1,24 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var node_fs = require('node:fs');
|
|
4
|
-
var spawnHappyCLI = require('./spawnHappyCLI-
|
|
4
|
+
var spawnHappyCLI = require('./spawnHappyCLI-DnUZv0X2.cjs');
|
|
5
5
|
var axios = require('axios');
|
|
6
6
|
var tweetnacl = require('tweetnacl');
|
|
7
7
|
var z = require('zod');
|
|
8
8
|
var authRelay = require('./authRelay-Dy1qU9td.cjs');
|
|
9
|
-
var configuration = require('./configuration-
|
|
10
|
-
var localHappyAgentAuth = require('./localHappyAgentAuth-
|
|
9
|
+
var configuration = require('./configuration-CYO-kPOS.cjs');
|
|
10
|
+
var localHappyAgentAuth = require('./localHappyAgentAuth-DZHQnIW9.cjs');
|
|
11
11
|
require('cross-spawn');
|
|
12
12
|
require('node:path');
|
|
13
|
-
require('./projectPath-
|
|
13
|
+
require('./projectPath-C3ioB4Bu.cjs');
|
|
14
14
|
require('path');
|
|
15
15
|
require('url');
|
|
16
|
-
require('./logger-
|
|
16
|
+
require('./logger-CphW5nUE.cjs');
|
|
17
17
|
require('chalk');
|
|
18
18
|
require('node:util');
|
|
19
19
|
require('node:crypto');
|
|
20
20
|
require('node:os');
|
|
21
|
-
require('./package-
|
|
21
|
+
require('./package-KhLqBDX9.cjs');
|
|
22
22
|
require('node:fs/promises');
|
|
23
23
|
|
|
24
24
|
const ResumableMetadataSchema = z.z.object({
|
|
@@ -142,10 +142,13 @@ function parseResumeCommandArgs(args) {
|
|
|
142
142
|
};
|
|
143
143
|
}
|
|
144
144
|
function resolveFlavor(metadata) {
|
|
145
|
+
if (metadata.flavor === "acp" && metadata.piSessionId) {
|
|
146
|
+
return "pi";
|
|
147
|
+
}
|
|
145
148
|
if (metadata.flavor === "codex" || metadata.codexThreadId) {
|
|
146
149
|
return "codex";
|
|
147
150
|
}
|
|
148
|
-
if (metadata.flavor === "claude" || metadata.claudeSessionId) {
|
|
151
|
+
if (metadata.flavor === "claude" || metadata.claudeSessionId || metadata.flavor === void 0) {
|
|
149
152
|
return "claude";
|
|
150
153
|
}
|
|
151
154
|
return null;
|
|
@@ -169,6 +172,19 @@ function buildResumeLaunch(session, options = {}) {
|
|
|
169
172
|
args
|
|
170
173
|
};
|
|
171
174
|
}
|
|
175
|
+
if (flavor === "pi") {
|
|
176
|
+
const args = ["pi"];
|
|
177
|
+
if (options.startedBy) {
|
|
178
|
+
args.push("--started-by", options.startedBy);
|
|
179
|
+
}
|
|
180
|
+
if (!options.freshConversation) {
|
|
181
|
+
args.push("--resume", metadata.piSessionId);
|
|
182
|
+
}
|
|
183
|
+
return {
|
|
184
|
+
cwd: metadata.path,
|
|
185
|
+
args
|
|
186
|
+
};
|
|
187
|
+
}
|
|
172
188
|
if (flavor === "claude") {
|
|
173
189
|
const args = ["claude"];
|
|
174
190
|
if (options.claudeStartingMode) {
|
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
import { existsSync } from 'node:fs';
|
|
2
|
-
import { s as spawnHappyCLI } from './spawnHappyCLI-
|
|
2
|
+
import { s as spawnHappyCLI } from './spawnHappyCLI-BjFZc_7V.mjs';
|
|
3
3
|
import axios, { AxiosError } from 'axios';
|
|
4
4
|
import tweetnacl from 'tweetnacl';
|
|
5
5
|
import { z } from 'zod';
|
|
6
6
|
import { d as decodeBase64, a as decryptWithDataKey, b as decryptLegacy } from './authRelay-DhQhkBvX.mjs';
|
|
7
|
-
import { c as configuration } from './configuration-
|
|
8
|
-
import { g as getLocalHappyAgentCredentialPath, r as readLocalHappyAgentCredentials } from './localHappyAgentAuth-
|
|
7
|
+
import { c as configuration } from './configuration-PxzEJumr.mjs';
|
|
8
|
+
import { g as getLocalHappyAgentCredentialPath, r as readLocalHappyAgentCredentials } from './localHappyAgentAuth-Dn1jYDpt.mjs';
|
|
9
9
|
import 'cross-spawn';
|
|
10
10
|
import 'node:path';
|
|
11
11
|
import './projectPath-BTBIMB57.mjs';
|
|
12
12
|
import 'path';
|
|
13
13
|
import 'url';
|
|
14
|
-
import './logger
|
|
14
|
+
import './logger-BUngm5Xg.mjs';
|
|
15
15
|
import 'chalk';
|
|
16
16
|
import 'node:util';
|
|
17
17
|
import 'node:crypto';
|
|
18
18
|
import 'node:os';
|
|
19
|
-
import './package-
|
|
19
|
+
import './package-7Ld1YMhh.mjs';
|
|
20
20
|
import 'node:fs/promises';
|
|
21
21
|
|
|
22
22
|
const ResumableMetadataSchema = z.object({
|
|
@@ -140,10 +140,13 @@ function parseResumeCommandArgs(args) {
|
|
|
140
140
|
};
|
|
141
141
|
}
|
|
142
142
|
function resolveFlavor(metadata) {
|
|
143
|
+
if (metadata.flavor === "acp" && metadata.piSessionId) {
|
|
144
|
+
return "pi";
|
|
145
|
+
}
|
|
143
146
|
if (metadata.flavor === "codex" || metadata.codexThreadId) {
|
|
144
147
|
return "codex";
|
|
145
148
|
}
|
|
146
|
-
if (metadata.flavor === "claude" || metadata.claudeSessionId) {
|
|
149
|
+
if (metadata.flavor === "claude" || metadata.claudeSessionId || metadata.flavor === void 0) {
|
|
147
150
|
return "claude";
|
|
148
151
|
}
|
|
149
152
|
return null;
|
|
@@ -167,6 +170,19 @@ function buildResumeLaunch(session, options = {}) {
|
|
|
167
170
|
args
|
|
168
171
|
};
|
|
169
172
|
}
|
|
173
|
+
if (flavor === "pi") {
|
|
174
|
+
const args = ["pi"];
|
|
175
|
+
if (options.startedBy) {
|
|
176
|
+
args.push("--started-by", options.startedBy);
|
|
177
|
+
}
|
|
178
|
+
if (!options.freshConversation) {
|
|
179
|
+
args.push("--resume", metadata.piSessionId);
|
|
180
|
+
}
|
|
181
|
+
return {
|
|
182
|
+
cwd: metadata.path,
|
|
183
|
+
args
|
|
184
|
+
};
|
|
185
|
+
}
|
|
170
186
|
if (flavor === "claude") {
|
|
171
187
|
const args = ["claude"];
|
|
172
188
|
if (options.claudeStartingMode) {
|