very-happy-cli 0.2.180 → 0.2.181
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-DfRDtMcG.cjs → AcpBackend-CgHb_ya5.cjs} +3 -3
- package/dist/{AcpBackend-B8Zi30Zh.mjs → AcpBackend-DZGCSuXF.mjs} +3 -3
- package/dist/{AcpSessionManager-CASKOnOj.cjs → AcpSessionManager-CacC2EVn.cjs} +1 -1
- package/dist/{AcpSessionManager-i8Rab0xT.mjs → AcpSessionManager-DwuPzWBh.mjs} +1 -1
- package/dist/{BasePermissionHandler-BlM_tfej.cjs → BasePermissionHandler-DCP8ZEB4.cjs} +1 -1
- package/dist/{BasePermissionHandler-26fKbRCm.mjs → BasePermissionHandler-Uo-GUjbb.mjs} +1 -1
- package/dist/{acpSessionResume-B9l54P-X.mjs → acpSessionResume-9OLTD6kT.mjs} +1 -1
- package/dist/{acpSessionResume-CR5pmgVo.cjs → acpSessionResume-BaVMD80f.cjs} +1 -1
- package/dist/{agentHome-CmGy0NWv.mjs → agentHome-B1BsKeqD.mjs} +4 -4
- package/dist/{agentHome-C7Sb7-Tz.cjs → agentHome-BtUmGcPX.cjs} +4 -4
- package/dist/{api-DM7b1OKj.cjs → api-COHFAkb_.cjs} +10 -10
- package/dist/{api-Hov8p7CA.mjs → api-Dr3wXL_7.mjs} +10 -10
- package/dist/{apiMachine-CwGEhQDT.mjs → apiMachine-CHEzPQdS.mjs} +54 -32
- package/dist/{apiMachine-DkGRj-Ai.cjs → apiMachine-D8H7CXaz.cjs} +55 -33
- package/dist/{attachmentContent-CIn4iPEk.mjs → attachmentContent-1YwtKgWl.mjs} +2 -2
- package/dist/{attachmentContent-CEm13_gF.cjs → attachmentContent-mIhbtRKl.cjs} +2 -2
- package/dist/{auth-rggxMpEE.mjs → auth-CbZkcMAb.mjs} +8 -8
- package/dist/{auth-CBXnm-Mj.cjs → auth-CgQP7d0q.cjs} +5 -5
- package/dist/{auth-BG1DY0gj.mjs → auth-DZsthtSk.mjs} +5 -5
- package/dist/{auth-Dawj7pP5.cjs → auth-Fg8fLadK.cjs} +8 -8
- package/dist/{auto-CbYOfoPS.cjs → auto-BB7kqSh5.cjs} +18 -18
- package/dist/{auto-CXXLXGeL.mjs → auto-_T-Ud-z5.mjs} +18 -18
- package/dist/{bootstrap-Dt5I1SOl.mjs → bootstrap-B6EkZh4u.mjs} +2 -2
- package/dist/{bootstrap-DoA7okld.cjs → bootstrap-CYtOtbi7.cjs} +2 -2
- package/dist/{browser-DUNetFT4.mjs → browser-C2qhUHSE.mjs} +1 -1
- package/dist/{browser-DZ6qRtfH.cjs → browser-DjNNQQk2.cjs} +1 -1
- package/dist/{claudeLocal-OHWQigCl.mjs → claudeLocal-BAFjWhZ8.mjs} +6 -6
- package/dist/{claudeLocal--DNyMOSv.cjs → claudeLocal-O_w7-fBh.cjs} +6 -6
- package/dist/{claudeLocalLauncher-BStvfa7M.mjs → claudeLocalLauncher-CWn30LZR.mjs} +11 -11
- package/dist/{claudeLocalLauncher-BhvPbcyH.cjs → claudeLocalLauncher-Df3zg1q0.cjs} +11 -11
- package/dist/{claudeSessionFork-GAVWhiKG.mjs → claudeSessionFork-2ZkSTOGn.mjs} +1 -1
- package/dist/{claudeSessionFork-Be16vzGc.cjs → claudeSessionFork-pwcKqB-e.cjs} +1 -1
- package/dist/{client-Ca5Pcgy_.mjs → client-BKyU66lg.mjs} +2 -2
- package/dist/{client-D_loZ9IK.cjs → client-CUO3ItoB.cjs} +34 -8
- package/dist/{client-CnB7kRCT.mjs → client-CXOnzuOy.mjs} +2 -2
- package/dist/{client-DJplzPjD.cjs → client-DWs6k041.cjs} +2 -2
- package/dist/{client-BWjaHKtj.cjs → client-D_U2VjO3.cjs} +2 -2
- package/dist/{client-D4uPb1uu.mjs → client-DsQcxVUV.mjs} +34 -9
- package/dist/codex/happyMcpStdioBridge.cjs +17 -17
- package/dist/codex/happyMcpStdioBridge.mjs +17 -17
- package/dist/{codexAppServerClient-PE-12AsW.cjs → codexAppServerClient-BRX3JZ_5.cjs} +3 -3
- package/dist/{codexAppServerClient-CO4G6OS4.mjs → codexAppServerClient-C3JO3pwM.mjs} +3 -3
- package/dist/{codexCommand-B_xUH79E.mjs → codexCommand-BZIAAqKS.mjs} +47 -45
- package/dist/{codexCommand-BNoD1t1C.cjs → codexCommand-dKOc5iQl.cjs} +47 -45
- package/dist/{codexTermination-BmBbizFK.cjs → codexTermination-BVR9HeVI.cjs} +1 -1
- package/dist/{codexTermination-Dx48ma6e.mjs → codexTermination-ztFkwHrG.mjs} +1 -1
- package/dist/{config-DSu0Blos.mjs → config-NbHjx8ge.mjs} +3 -3
- package/dist/{config-CtwEUxUP.cjs → config-cftYxLC7.cjs} +3 -3
- package/dist/{configuration-PxzEJumr.mjs → configuration-BPrfb17M.mjs} +1 -1
- package/dist/{configuration-CYO-kPOS.cjs → configuration-C8JgseHy.cjs} +1 -1
- package/dist/{connect-Dq7wndzR.cjs → connect-Br8VMrK1.cjs} +13 -13
- package/dist/{connect-BQrg3TB6.mjs → connect-CLD1ai0k.mjs} +13 -13
- package/dist/{context-6TP-iz_c.cjs → context-D1lgQTJC.cjs} +1 -1
- package/dist/{context-CJGRRGWW.mjs → context-_YGq8xdH.mjs} +1 -1
- package/dist/{controlClient-DoeYovwP.mjs → controlClient-CkNpT5zS.mjs} +3 -3
- package/dist/{controlClient-Bqv5v5OM.cjs → controlClient-D68Zj7Q-.cjs} +3 -3
- package/dist/{createSessionMetadata-DDIChCx8.mjs → createSessionMetadata-3WAj3_xl.mjs} +2 -2
- package/dist/{createSessionMetadata-xz767pcG.cjs → createSessionMetadata-DNIbKLHg.cjs} +2 -2
- package/dist/{defaultPermissionMode-PkZGsQDk.cjs → defaultPermissionMode-BmvjP32v.cjs} +2 -2
- package/dist/{defaultPermissionMode-i5KzdK09.mjs → defaultPermissionMode-DXMznl8v.mjs} +2 -2
- package/dist/{deterministicJson-xqA6DaOm.cjs → deterministicJson-BS7D7URE.cjs} +87 -22
- package/dist/{deterministicJson-CTEJDqtS.mjs → deterministicJson-BcBIKKf1.mjs} +87 -24
- package/dist/{doctor-BrgSlfXn.cjs → doctor-Be7zC0AF.cjs} +8 -7
- package/dist/{doctor-IctjVh9T.mjs → doctor-CoOaPq6w.mjs} +8 -8
- package/dist/{downloadTarget-jbOz1egC.mjs → downloadTarget-CeaAXdJj.mjs} +6 -6
- package/dist/{downloadTarget-CEb9che-.cjs → downloadTarget-LyOiucn_.cjs} +6 -6
- package/dist/{ensureDaemonRunning-b1e8LCSM.mjs → ensureDaemonRunning--98j7-17.mjs} +5 -5
- package/dist/{ensureDaemonRunning-D-HyjGIX.cjs → ensureDaemonRunning-B8z37VKD.cjs} +5 -5
- package/dist/fileStore-5qpetZS0.mjs +146 -0
- package/dist/fileStore-7qhnbs6N.cjs +152 -0
- package/dist/{handleResumeCommand-BvWVuRwH.cjs → handleResumeCommand-BFZlrFVH.cjs} +5 -5
- package/dist/{handleResumeCommand-DpaZvm2c.mjs → handleResumeCommand-gO8I4keP.mjs} +5 -5
- package/dist/{index-B2p2Mut7.cjs → index-B5PXbZjW.cjs} +77 -60
- package/dist/{index-F2UejqYs.cjs → index-BRMq9gOe.cjs} +3 -3
- package/dist/{index-C64Ufj4D.cjs → index-BkluinoS.cjs} +4 -4
- package/dist/{index-Bsvbgh9e.mjs → index-CO0n9ue6.mjs} +4 -4
- package/dist/{index-C6Vn5Eac.mjs → index-CeRXrGnH.mjs} +39 -6
- package/dist/{index-Dv0Q48P3.cjs → index-Df2eHm3O.cjs} +40 -6
- package/dist/{index-BUNnpGFF.mjs → index-DneHoQXf.mjs} +78 -61
- package/dist/{index-CMf5VbzG.mjs → index-WUj3954m.mjs} +4 -4
- package/dist/{index-wCbtF4BK.mjs → index-hQ8LP1C2.mjs} +3 -3
- package/dist/{index-DmTlDRSL.cjs → index-jF2t3ACW.cjs} +4 -4
- package/dist/index.cjs +2 -2
- package/dist/index.mjs +2 -2
- package/dist/{install-BX3lv3NO.mjs → install-D0inLCv-.mjs} +1 -1
- package/dist/{install-BXvf2E3o.cjs → install-D2NCbeJ-.cjs} +1 -1
- package/dist/{install-CdzSV7qO.mjs → install-DkYFiVK4.mjs} +3 -3
- package/dist/{install-C0ANcEAW.cjs → install-FqkSUjPC.cjs} +3 -3
- package/dist/lib.cjs +12 -12
- package/dist/lib.d.cts +39 -1
- package/dist/lib.d.mts +39 -1
- package/dist/lib.mjs +12 -12
- package/dist/{lidState-bBrmaQd2.mjs → lidState-DghbfRbr.mjs} +1 -1
- package/dist/{lidState-DWGnm2H4.cjs → lidState-x8cJ8J_9.cjs} +1 -1
- package/dist/{localHappyAgentAuth-DZHQnIW9.cjs → localHappyAgentAuth-DZ2kb9uq.cjs} +1 -1
- package/dist/{localHappyAgentAuth-Dn1jYDpt.mjs → localHappyAgentAuth-IKmeRpuQ.mjs} +1 -1
- package/dist/{logger-CphW5nUE.cjs → logger-DgBwUSgS.cjs} +2 -2
- package/dist/{logger-BUngm5Xg.mjs → logger-LFr8iPgl.mjs} +2 -2
- package/dist/{machineMetadata-BXN_bKU3.mjs → machineMetadata-BglCsfvf.mjs} +11 -4
- package/dist/{machineMetadata-BQm9YTcI.cjs → machineMetadata-DB03ez4K.cjs} +11 -3
- package/dist/{main-B2UV51nK.cjs → main-YQ-Vkakw.cjs} +45 -45
- package/dist/{main-DGkdYfEq.mjs → main-_1LSzlLv.mjs} +45 -45
- package/dist/{mcp-BFvAEIRz.cjs → mcp-BIY80jSc.cjs} +14 -14
- package/dist/{mcp-CbTtbs0f.mjs → mcp-Csj-mT5Y.mjs} +14 -14
- package/dist/{mirrorProtocol-HKPivs5o.cjs → mirrorProtocol-BphKIAK9.cjs} +16 -153
- package/dist/{mirrorProtocol-BR4luBC0.mjs → mirrorProtocol-CAxOMBkb.mjs} +19 -151
- package/dist/{package-7Ld1YMhh.mjs → package-DYGwlmXl.mjs} +8 -8
- package/dist/{package-KhLqBDX9.cjs → package-NoD8QOOM.cjs} +8 -8
- package/dist/{panels-C7IVqpJk.mjs → panels-B8zRm7_d.mjs} +5 -5
- package/dist/{panels-Njf6GelF.cjs → panels-DYEc1NyQ.cjs} +5 -5
- package/dist/{peerTools-BOlDRyhi.mjs → peerTools-CK3JYu1k.mjs} +5 -5
- package/dist/{peerTools-DQNlrcqM.cjs → peerTools-CP-x-Peu.cjs} +5 -5
- package/dist/{persistence-9BMYspxG.cjs → persistence-BY-D00wT.cjs} +2 -2
- package/dist/{persistence-BFUOHW5h.mjs → persistence-D2Djrf7t.mjs} +2 -2
- package/dist/pi-CqyoZMjI.mjs +380 -0
- package/dist/pi-DlsrPCTa.cjs +400 -0
- package/dist/{piRunnerArgs-H2pgpA5z.mjs → piRunnerArgs-IZLoL7TG.mjs} +1 -1
- package/dist/{piRunnerArgs-DGaq6VYM.cjs → piRunnerArgs-gxLYIZH4.cjs} +1 -1
- package/dist/{piRuntime-CdN0JAsa.mjs → piRuntime-D7Y4oHVL.mjs} +2 -2
- package/dist/{piRuntime-CT5xv_3h.cjs → piRuntime-o5L8uX-W.cjs} +2 -2
- package/dist/{piTerminal-0FBtXTHK.cjs → piTerminal-C_-JDkLN.cjs} +17 -17
- package/dist/{piTerminal-C4m9YXAV.mjs → piTerminal-Kphx8Uhw.mjs} +17 -17
- package/dist/{prompt-lgF9IE82.cjs → prompt-Bof2aQkI.cjs} +7 -2
- package/dist/{prompt-BOouDaTM.mjs → prompt-QHuFx9j6.mjs} +7 -2
- package/dist/{pushNotifications-DI92havG.cjs → pushNotifications-BXoOSq_G.cjs} +10 -4
- package/dist/{pushNotifications-DCiBEVeC.mjs → pushNotifications-DXGIhE-A.mjs} +10 -4
- package/dist/{query-ywZbQUzR.mjs → query-CcA6DVZK.mjs} +1 -1
- package/dist/{query-BETKBrnz.cjs → query-CdCxzuaB.cjs} +1 -1
- package/dist/{rateLimitWindows-YRIYVdo4.cjs → rateLimitWindows-OpAmdOtC.cjs} +1 -1
- package/dist/{rateLimitWindows-BkfuUB1a.mjs → rateLimitWindows-ZtHZHe-l.mjs} +1 -1
- package/dist/{registerCommonHandlers-C7a_dUWs.cjs → registerCommonHandlers-CRjBoJLK.cjs} +2 -2
- package/dist/{registerCommonHandlers-CTkCvjxt.mjs → registerCommonHandlers-DF6bdDtd.mjs} +2 -2
- package/dist/{registerKillSessionHandler-CIsvBrVe.cjs → registerKillSessionHandler-7fOm6ooh.cjs} +6 -6
- package/dist/{registerKillSessionHandler-CaqqRYq6.mjs → registerKillSessionHandler-DDCKL3wf.mjs} +6 -6
- package/dist/{remoteSessionClient-PP-mOKmw.mjs → remoteSessionClient-B2POSKFT.mjs} +5 -5
- package/dist/{remoteSessionClient-D843fkzL.cjs → remoteSessionClient-CFCn42bs.cjs} +5 -5
- package/dist/{reportProgressTool-ZOCNjWHr.mjs → reportProgressTool-tPxEvh6x.mjs} +4 -4
- package/dist/{reportProgressTool-14AXr959.cjs → reportProgressTool-th4trcET.cjs} +4 -4
- package/dist/{resources-CvIlkzpP.cjs → resources-BPyN59Iv.cjs} +23 -2
- package/dist/{resources-y9jfyO-_.mjs → resources-CH1iP6Cv.mjs} +22 -3
- package/dist/{run-CAOCYYfT.cjs → run-C_FumCQk.cjs} +618 -594
- package/dist/{run-Dajw2E5j.mjs → run-cKQBbVi4.mjs} +554 -530
- package/dist/{runClaude-C6oxWYbp.mjs → runClaude-CYnM6krL.mjs} +22 -22
- package/dist/{runClaude-CRRKt-tm.cjs → runClaude-z_2YC_aa.cjs} +22 -22
- package/dist/{runClaudeDeps-B1ysqTvx.cjs → runClaudeDeps-CLubzWnA.cjs} +43 -41
- package/dist/{runClaudeDeps-BcZ68cX3.mjs → runClaudeDeps-duS06Pb4.mjs} +48 -46
- package/dist/{runGemini-D7yKc4wD.mjs → runGemini-C_Pc2EhH.mjs} +37 -35
- package/dist/{runGemini-DtKFXqf-.cjs → runGemini-vEoXV6qT.cjs} +37 -35
- package/dist/{runOpenClaw-Cq29mryb.cjs → runOpenClaw-CXJCtMgB.cjs} +18 -18
- package/dist/{runOpenClaw-C8ilyLP9.mjs → runOpenClaw-Cxun1qLC.mjs} +18 -18
- package/dist/{sandbox-gIj-EuF4.cjs → sandbox-CO46H2tK.cjs} +4 -4
- package/dist/{sandbox-CbCutma4.mjs → sandbox-CsvPnTmz.mjs} +4 -4
- package/dist/{selfCheck-BTGBVthv.cjs → selfCheck-DIr7Gc0i.cjs} +36 -36
- package/dist/selfCheck-NamtBHVB.mjs +85 -0
- package/dist/{send-YZRMQvMJ.mjs → send-DMoFg6F1.mjs} +8 -8
- package/dist/{send-CZf5lLw_.cjs → send-X2mfVEyr.cjs} +8 -8
- package/dist/{server-CknFq6xG.cjs → server-BwTEdbkr.cjs} +6 -6
- package/dist/{server-BqwXRzFZ.mjs → server-CkqQ0sRH.mjs} +4 -4
- package/dist/{sessionLock-DRZUcKHT.cjs → sessionLock-CdIRJlHH.cjs} +3 -3
- package/dist/{sessionLock-nBXdJxJm.mjs → sessionLock-JIfwCqMk.mjs} +3 -3
- package/dist/{sessionOps-BrGiU9-s.cjs → sessionOps-DVA-00nR.cjs} +4 -4
- package/dist/{sessionOps-C58iDeD5.mjs → sessionOps-DqlftXxe.mjs} +4 -4
- package/dist/{sessionScanner-Bm57LEXe.mjs → sessionScanner-BI0Vo1xT.mjs} +3 -3
- package/dist/{sessionScanner-CaO8bLaG.cjs → sessionScanner-BMwgGAhY.cjs} +3 -3
- package/dist/{sessions-BXyBHo8n.mjs → sessions-D6IimX7b.mjs} +10 -10
- package/dist/{sessions-uzqPCc37.cjs → sessions-DjgEcHaT.cjs} +10 -10
- package/dist/{setupOfflineReconnection-DvvVX3TB.cjs → setupOfflineReconnection-CjuCiKY3.cjs} +2 -2
- package/dist/{setupOfflineReconnection-1Qlek3wl.mjs → setupOfflineReconnection-DgJK_4m1.mjs} +2 -2
- package/dist/{spawn-vn93PhYL.mjs → spawn-Dvzy-tzc.mjs} +14 -14
- package/dist/{spawn-DBkodJEO.cjs → spawn-rhF28shY.cjs} +14 -14
- package/dist/{spawnAgents-CgPMWexP.mjs → spawnAgents-CCnlq-FI.mjs} +1 -1
- package/dist/{spawnAgents-DLNMlhWJ.cjs → spawnAgents-iwuqrgR9.cjs} +1 -1
- package/dist/{spawnHappyCLI-DnUZv0X2.cjs → spawnHappyCLI-DnKmIsEt.cjs} +1 -1
- package/dist/{spawnHappyCLI-BjFZc_7V.mjs → spawnHappyCLI-Dq3LLXLb.mjs} +1 -1
- package/dist/{specialCommands-D3ND9bdg.mjs → specialCommands-CcyZ1hGA.mjs} +3 -3
- package/dist/{specialCommands-BRufxlqe.cjs → specialCommands-Zwr2C6A2.cjs} +3 -3
- package/dist/{startFileWatcher-DXJ7yB5v.mjs → startFileWatcher-4thXDK9d.mjs} +1 -1
- package/dist/{startFileWatcher-D9cYzZOq.cjs → startFileWatcher-K6hJSyiR.cjs} +1 -1
- package/dist/{startupSessionCreate-uZ6BM0ty.mjs → startupSessionCreate-BfByJ16A.mjs} +1 -1
- package/dist/{startupSessionCreate-kdr3m1uX.cjs → startupSessionCreate-CKEbq0tL.cjs} +1 -1
- package/dist/{streamRelay-Dy6amlzx.cjs → streamRelay-Gy8Xfnon.cjs} +1 -1
- package/dist/{streamRelay-DnMCMMfV.mjs → streamRelay-LcDvyEjK.mjs} +1 -1
- package/dist/{sync-Bn-idAoy.cjs → sync-1hQ5KHpL.cjs} +1 -1
- package/dist/{sync-BvVhDO40.mjs → sync-DO-2PU45.mjs} +1 -1
- package/dist/{systemPrompt-CIZcJuJF.mjs → systemPrompt-BctLfMZs.mjs} +3 -3
- package/dist/{systemPrompt-DlyEk35T.cjs → systemPrompt-Dj7pgkMK.cjs} +3 -3
- package/dist/{teams-DLY3B5yi.mjs → teams-Bu8YeOoF.mjs} +8 -8
- package/dist/{teams-BLeRpDxv.cjs → teams-uQxUlyyz.cjs} +8 -8
- package/dist/{time-D3ETL7Jb.mjs → time-BcoJaG8E.mjs} +1 -1
- package/dist/{time-Cjv0zxQO.cjs → time-nqa9shu8.cjs} +1 -1
- package/dist/{titleGenerator-Cgp5ihFb.cjs → titleGenerator-D09XyYYG.cjs} +2 -2
- package/dist/{titleGenerator-Uzbd4utr.mjs → titleGenerator-D5r06bhf.mjs} +1 -1
- package/dist/{todo-pOMcEECE.cjs → todo-CCOnL7pT.cjs} +6 -6
- package/dist/{todo-C9Ga-oEM.mjs → todo-D1q8146q.mjs} +6 -6
- package/dist/{tools-Cho7iIWf.mjs → tools-D2E--n1x.mjs} +3 -3
- package/dist/{tools-BL7Byl_x.cjs → tools-DiCXnAC5.cjs} +3 -3
- package/dist/{uninstall-CbayEVoV.cjs → uninstall-BrNwwwSD.cjs} +3 -3
- package/dist/{uninstall-CvZHVY9C.mjs → uninstall-CtwXi1Rt.mjs} +3 -3
- package/package.json +8 -8
- package/dist/selfCheck-Smt-5Xiq.mjs +0 -85
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var tools = require('./tools-
|
|
3
|
+
var tools = require('./tools-DiCXnAC5.cjs');
|
|
4
4
|
var mcp_js = require('@modelcontextprotocol/sdk/server/mcp.js');
|
|
5
5
|
var stdio_js = require('@modelcontextprotocol/sdk/server/stdio.js');
|
|
6
6
|
var z = require('zod');
|
|
7
|
-
var controlClient = require('./controlClient-
|
|
7
|
+
var controlClient = require('./controlClient-D68Zj7Q-.cjs');
|
|
8
8
|
var limits = require('./limits-C-a7gr04.cjs');
|
|
9
|
-
var downloadTarget = require('./downloadTarget-
|
|
10
|
-
var logger = require('./logger-
|
|
9
|
+
var downloadTarget = require('./downloadTarget-LyOiucn_.cjs');
|
|
10
|
+
var logger = require('./logger-DgBwUSgS.cjs');
|
|
11
11
|
var previewPath = require('./previewPath-B0rBdhy1.cjs');
|
|
12
12
|
var agentGuidance = require('./agentGuidance-BtBx2xxE.cjs');
|
|
13
13
|
require('node:fs/promises');
|
|
14
14
|
require('node:os');
|
|
15
|
-
require('./persistence-
|
|
16
|
-
require('./configuration-
|
|
15
|
+
require('./persistence-BY-D00wT.cjs');
|
|
16
|
+
require('./configuration-C8JgseHy.cjs');
|
|
17
17
|
require('node:crypto');
|
|
18
18
|
require('axios');
|
|
19
19
|
require('tweetnacl');
|
|
@@ -23,21 +23,21 @@ require('./terminals-B_bfC9c2.cjs');
|
|
|
23
23
|
require('node:fs');
|
|
24
24
|
require('node:path');
|
|
25
25
|
var terminalTitleSuggest = require('./terminalTitleSuggest-DhvRFX3H.cjs');
|
|
26
|
-
var titleGenerator = require('./titleGenerator-
|
|
26
|
+
var titleGenerator = require('./titleGenerator-D09XyYYG.cjs');
|
|
27
27
|
var terminalToolContext = require('./terminalToolContext-DoV9Gs7K.cjs');
|
|
28
|
-
require('./client-
|
|
29
|
-
require('./context-
|
|
30
|
-
require('./sessionOps-
|
|
28
|
+
require('./client-CUO3ItoB.cjs');
|
|
29
|
+
require('./context-D1lgQTJC.cjs');
|
|
30
|
+
require('./sessionOps-DVA-00nR.cjs');
|
|
31
31
|
require('./authRelay-Dy1qU9td.cjs');
|
|
32
|
-
require('./time-
|
|
32
|
+
require('./time-nqa9shu8.cjs');
|
|
33
33
|
require('./backgroundTaskActivity-CBvUdj39.cjs');
|
|
34
|
-
require('./remoteSessionClient-
|
|
34
|
+
require('./remoteSessionClient-CFCn42bs.cjs');
|
|
35
35
|
require('./ids-B6ZC0HGt.cjs');
|
|
36
|
-
require('./bootstrap-
|
|
36
|
+
require('./bootstrap-CYtOtbi7.cjs');
|
|
37
37
|
require('chalk');
|
|
38
38
|
require('node:util');
|
|
39
39
|
require('./trimIdent-4gvk9Wk6.cjs');
|
|
40
|
-
require('./package-
|
|
40
|
+
require('./package-NoD8QOOM.cjs');
|
|
41
41
|
require('./tmuxSocket-D-Xt6Vn-.cjs');
|
|
42
42
|
require('node:module');
|
|
43
43
|
require('./oneShotPrompts-CL0dip9C.cjs');
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
import { r as registerTeamsTools } from './tools-
|
|
1
|
+
import { r as registerTeamsTools } from './tools-D2E--n1x.mjs';
|
|
2
2
|
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
3
3
|
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
4
4
|
import { z } from 'zod';
|
|
5
|
-
import { p as pushClipboardViaDaemon, b as pushFilePreviewViaDaemon, d as setTerminalTitleViaDaemon } from './controlClient-
|
|
5
|
+
import { p as pushClipboardViaDaemon, b as pushFilePreviewViaDaemon, d as setTerminalTitleViaDaemon } from './controlClient-CkNpT5zS.mjs';
|
|
6
6
|
import { C as CLIPBOARD_TOOL_NAME, a as CLIPBOARD_TOOL_TITLE, b as CLIPBOARD_TOOL_DESCRIPTION, c as CLIPBOARD_MAX_BYTES } from './limits-DIo7rEBR.mjs';
|
|
7
|
-
import { c as checkDownloadTarget, r as registerAssistantSessionTools } from './downloadTarget-
|
|
8
|
-
import { l as logger } from './logger-
|
|
7
|
+
import { c as checkDownloadTarget, r as registerAssistantSessionTools } from './downloadTarget-CeaAXdJj.mjs';
|
|
8
|
+
import { l as logger } from './logger-LFr8iPgl.mjs';
|
|
9
9
|
import { c as checkPreviewPath } from './previewPath-CXN4Vag0.mjs';
|
|
10
10
|
import { P as PREVIEW_TOOL_NAME, a as PREVIEW_TOOL_TITLE, b as PREVIEW_TOOL_DESCRIPTION, c as PREVIEW_DOWNLOAD_PARAM_DESCRIPTION } from './agentGuidance-BDYt2Qy2.mjs';
|
|
11
11
|
import 'node:fs/promises';
|
|
12
12
|
import 'node:os';
|
|
13
|
-
import './persistence-
|
|
14
|
-
import './configuration-
|
|
13
|
+
import './persistence-D2Djrf7t.mjs';
|
|
14
|
+
import './configuration-BPrfb17M.mjs';
|
|
15
15
|
import 'node:crypto';
|
|
16
16
|
import 'axios';
|
|
17
17
|
import 'tweetnacl';
|
|
@@ -21,21 +21,21 @@ import './terminals-Dlg0x3nY.mjs';
|
|
|
21
21
|
import 'node:fs';
|
|
22
22
|
import 'node:path';
|
|
23
23
|
import { b as TerminalTitleSuggestRequestSchema } from './terminalTitleSuggest-CeKsX_V6.mjs';
|
|
24
|
-
import { s as suggestTitleForPrompt } from './titleGenerator-
|
|
24
|
+
import { s as suggestTitleForPrompt } from './titleGenerator-D5r06bhf.mjs';
|
|
25
25
|
import { r as resolveMcpTerminalId } from './terminalToolContext-CFeGeaNm.mjs';
|
|
26
|
-
import './client-
|
|
27
|
-
import './context-
|
|
28
|
-
import './sessionOps-
|
|
26
|
+
import './client-DsQcxVUV.mjs';
|
|
27
|
+
import './context-_YGq8xdH.mjs';
|
|
28
|
+
import './sessionOps-DqlftXxe.mjs';
|
|
29
29
|
import './authRelay-DhQhkBvX.mjs';
|
|
30
|
-
import './time-
|
|
30
|
+
import './time-BcoJaG8E.mjs';
|
|
31
31
|
import './backgroundTaskActivity-8PdPxrvy.mjs';
|
|
32
|
-
import './remoteSessionClient-
|
|
32
|
+
import './remoteSessionClient-B2POSKFT.mjs';
|
|
33
33
|
import './ids-DU6sLx4C.mjs';
|
|
34
|
-
import './bootstrap-
|
|
34
|
+
import './bootstrap-B6EkZh4u.mjs';
|
|
35
35
|
import 'chalk';
|
|
36
36
|
import 'node:util';
|
|
37
37
|
import './trimIdent-BAjmv_TG.mjs';
|
|
38
|
-
import './package-
|
|
38
|
+
import './package-DYGwlmXl.mjs';
|
|
39
39
|
import './tmuxSocket-B8Yx20sT.mjs';
|
|
40
40
|
import 'node:module';
|
|
41
41
|
import './oneShotPrompts-DT4p6RNd.mjs';
|
|
@@ -1,14 +1,22 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
var node_child_process = require('node:child_process');
|
|
3
4
|
var node_crypto = require('node:crypto');
|
|
4
5
|
var node_fs = require('node:fs');
|
|
5
6
|
var path = require('node:path');
|
|
6
|
-
var node_child_process = require('node:child_process');
|
|
7
7
|
var promises = require('node:fs/promises');
|
|
8
|
-
var configuration = require('./configuration-
|
|
9
|
-
var index = require('./index-
|
|
10
|
-
var _package = require('./package-
|
|
8
|
+
var configuration = require('./configuration-C8JgseHy.cjs');
|
|
9
|
+
var index = require('./index-Df2eHm3O.cjs');
|
|
10
|
+
var _package = require('./package-NoD8QOOM.cjs');
|
|
11
11
|
|
|
12
|
+
function spawnOriginForLog(value) {
|
|
13
|
+
if (!value || typeof value !== "object") return void 0;
|
|
14
|
+
const input = value;
|
|
15
|
+
const source = typeof input.source === "string" && /^[a-z][a-z-]{0,23}$/.test(input.source) ? input.source : "invalid";
|
|
16
|
+
const route = typeof input.route === "string" && /^[A-Za-z0-9/:._-]{1,64}$/.test(input.route) ? input.route : "invalid";
|
|
17
|
+
const flag = (v) => typeof v === "boolean" ? v : null;
|
|
18
|
+
return { source, route, visible: flag(input.visible), gesture: flag(input.gesture) };
|
|
19
|
+
}
|
|
12
20
|
function summarizeSpawnSessionForLog(value) {
|
|
13
21
|
const input = value && typeof value === "object" ? value : {};
|
|
14
22
|
const environmentVariables = input.environmentVariables && typeof input.environmentVariables === "object" ? input.environmentVariables : {};
|
|
@@ -23,7 +31,8 @@ function summarizeSpawnSessionForLog(value) {
|
|
|
23
31
|
resumesCodex: typeof input.resumeCodexThreadId === "string" && input.resumeCodexThreadId.length > 0,
|
|
24
32
|
importsClaude: typeof input.importedFromClaudeSessionId === "string" && input.importedFromClaudeSessionId.length > 0,
|
|
25
33
|
forceNew: input.forceNew === true,
|
|
26
|
-
...typeof input.permissionMode === "string" ? { permissionMode: input.permissionMode } : {}
|
|
34
|
+
...typeof input.permissionMode === "string" ? { permissionMode: input.permissionMode } : {},
|
|
35
|
+
...input.origin !== void 0 ? { origin: spawnOriginForLog(input.origin) } : {}
|
|
27
36
|
};
|
|
28
37
|
}
|
|
29
38
|
|
|
@@ -43,147 +52,6 @@ function registerWorktreeHandlers(rpc, service) {
|
|
|
43
52
|
rpc.registerHandler("worktree-remove", async (params) => service.remove(obj(params).path, obj(params).discardChanges, obj(params).expectedFingerprint));
|
|
44
53
|
}
|
|
45
54
|
|
|
46
|
-
const MAX_CONFIG_BYTES = 1024 * 1024;
|
|
47
|
-
const MAX_BACKUPS_PER_HARNESS = 20;
|
|
48
|
-
class ModelConfigError extends Error {
|
|
49
|
-
constructor(code, message) {
|
|
50
|
-
super(message);
|
|
51
|
-
this.code = code;
|
|
52
|
-
this.name = "ModelConfigError";
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
function sha256(text) {
|
|
56
|
-
return node_crypto.createHash("sha256").update(text).digest("hex");
|
|
57
|
-
}
|
|
58
|
-
async function readConfigFile(path) {
|
|
59
|
-
let stat;
|
|
60
|
-
try {
|
|
61
|
-
stat = await node_fs.promises.stat(path);
|
|
62
|
-
} catch (error) {
|
|
63
|
-
if (error.code === "ENOENT") {
|
|
64
|
-
return { path, exists: false, content: "", hash: sha256(""), mode: null };
|
|
65
|
-
}
|
|
66
|
-
throw new ModelConfigError("read-failed", `Cannot read ${path}: ${error.message}`);
|
|
67
|
-
}
|
|
68
|
-
if (!stat.isFile()) throw new ModelConfigError("not-a-file", `${path} is not a regular file`);
|
|
69
|
-
if (stat.size > MAX_CONFIG_BYTES) throw new ModelConfigError("file-too-large", `${path} is larger than ${MAX_CONFIG_BYTES} bytes`);
|
|
70
|
-
const content = await node_fs.promises.readFile(path, "utf8");
|
|
71
|
-
return { path, exists: true, content, hash: sha256(content), mode: stat.mode & 511 };
|
|
72
|
-
}
|
|
73
|
-
async function resolveWriteTarget(path$1) {
|
|
74
|
-
try {
|
|
75
|
-
return await node_fs.promises.realpath(path$1);
|
|
76
|
-
} catch (error) {
|
|
77
|
-
if (error.code === "ENOENT") {
|
|
78
|
-
try {
|
|
79
|
-
const link = await node_fs.promises.readlink(path$1);
|
|
80
|
-
return link.startsWith("/") ? link : path.join(path.dirname(path$1), link);
|
|
81
|
-
} catch {
|
|
82
|
-
return path$1;
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
throw error;
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
async function atomicWriteFile(path$1, content, mode) {
|
|
89
|
-
const target = await resolveWriteTarget(path$1);
|
|
90
|
-
const dir = path.dirname(target);
|
|
91
|
-
await node_fs.promises.mkdir(dir, { recursive: true, mode: 448 });
|
|
92
|
-
const tmp = path.join(dir, `.${path.basename(target)}.vh-tmp-${process.pid}-${node_crypto.randomBytes(4).toString("hex")}`);
|
|
93
|
-
const handle = await node_fs.promises.open(tmp, node_fs.constants.O_WRONLY | node_fs.constants.O_CREAT | node_fs.constants.O_EXCL, mode ?? 384);
|
|
94
|
-
try {
|
|
95
|
-
await handle.writeFile(content, "utf8");
|
|
96
|
-
await handle.sync();
|
|
97
|
-
} catch (error) {
|
|
98
|
-
await handle.close().catch(() => {
|
|
99
|
-
});
|
|
100
|
-
await node_fs.promises.unlink(tmp).catch(() => {
|
|
101
|
-
});
|
|
102
|
-
throw error;
|
|
103
|
-
}
|
|
104
|
-
await handle.close();
|
|
105
|
-
try {
|
|
106
|
-
if (mode !== null) await node_fs.promises.chmod(tmp, mode);
|
|
107
|
-
await node_fs.promises.rename(tmp, target);
|
|
108
|
-
} catch (error) {
|
|
109
|
-
await node_fs.promises.unlink(tmp).catch(() => {
|
|
110
|
-
});
|
|
111
|
-
throw error;
|
|
112
|
-
}
|
|
113
|
-
try {
|
|
114
|
-
const dirHandle = await node_fs.promises.open(dir, "r");
|
|
115
|
-
await dirHandle.sync().catch(() => {
|
|
116
|
-
});
|
|
117
|
-
await dirHandle.close();
|
|
118
|
-
} catch {
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
const BACKUP_ID = /^\d{13}-[0-9a-f]{8}$/;
|
|
122
|
-
const HARNESS_DIR = /^[a-z][a-z0-9-]{0,31}$/;
|
|
123
|
-
class BackupStore {
|
|
124
|
-
constructor(root) {
|
|
125
|
-
this.root = root;
|
|
126
|
-
}
|
|
127
|
-
harnessDir(harness) {
|
|
128
|
-
if (!HARNESS_DIR.test(harness)) throw new ModelConfigError("invalid-harness", "Invalid harness");
|
|
129
|
-
return path.join(this.root, harness);
|
|
130
|
-
}
|
|
131
|
-
async create(harness, reason, files, now = Date.now()) {
|
|
132
|
-
const id = `${now}-${node_crypto.randomBytes(4).toString("hex")}`;
|
|
133
|
-
const dir = path.join(this.harnessDir(harness), id);
|
|
134
|
-
await node_fs.promises.mkdir(dir, { recursive: true, mode: 448 });
|
|
135
|
-
const manifest = { id, createdAt: now, reason, files: files.map((f, i) => ({ path: f.path, blob: f.content === null ? null : `f${i}`, mode: f.mode })) };
|
|
136
|
-
for (const [i, file] of files.entries()) {
|
|
137
|
-
if (file.content !== null) await node_fs.promises.writeFile(path.join(dir, `f${i}`), file.content, { encoding: "utf8", mode: 384 });
|
|
138
|
-
}
|
|
139
|
-
await node_fs.promises.writeFile(path.join(dir, "manifest.json"), JSON.stringify(manifest, null, 2), { encoding: "utf8", mode: 384 });
|
|
140
|
-
await this.prune(harness);
|
|
141
|
-
return { id, createdAt: now, reason, files: files.map((f) => f.path) };
|
|
142
|
-
}
|
|
143
|
-
async list(harness) {
|
|
144
|
-
let names;
|
|
145
|
-
try {
|
|
146
|
-
names = await node_fs.promises.readdir(this.harnessDir(harness));
|
|
147
|
-
} catch {
|
|
148
|
-
return [];
|
|
149
|
-
}
|
|
150
|
-
const entries = [];
|
|
151
|
-
for (const name of names.filter((n) => BACKUP_ID.test(n))) {
|
|
152
|
-
try {
|
|
153
|
-
const manifest = JSON.parse(await node_fs.promises.readFile(path.join(this.harnessDir(harness), name, "manifest.json"), "utf8"));
|
|
154
|
-
entries.push({ id: name, createdAt: Number(manifest.createdAt) || 0, reason: String(manifest.reason ?? ""), files: (manifest.files ?? []).map((f) => f.path) });
|
|
155
|
-
} catch {
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
return entries.sort((a, b) => b.createdAt - a.createdAt);
|
|
159
|
-
}
|
|
160
|
-
async read(harness, id) {
|
|
161
|
-
if (!BACKUP_ID.test(id)) throw new ModelConfigError("invalid-backup", "Invalid backup id");
|
|
162
|
-
const dir = path.join(this.harnessDir(harness), id);
|
|
163
|
-
let manifest;
|
|
164
|
-
try {
|
|
165
|
-
manifest = JSON.parse(await node_fs.promises.readFile(path.join(dir, "manifest.json"), "utf8"));
|
|
166
|
-
} catch {
|
|
167
|
-
throw new ModelConfigError("backup-not-found", "Backup not found");
|
|
168
|
-
}
|
|
169
|
-
const out = [];
|
|
170
|
-
for (const file of manifest.files) {
|
|
171
|
-
out.push({
|
|
172
|
-
path: file.path,
|
|
173
|
-
content: file.blob === null ? null : await node_fs.promises.readFile(path.join(dir, file.blob), "utf8"),
|
|
174
|
-
mode: typeof file.mode === "number" ? file.mode : null
|
|
175
|
-
});
|
|
176
|
-
}
|
|
177
|
-
return out;
|
|
178
|
-
}
|
|
179
|
-
async prune(harness) {
|
|
180
|
-
const entries = await this.list(harness);
|
|
181
|
-
for (const stale of entries.slice(MAX_BACKUPS_PER_HARNESS)) {
|
|
182
|
-
await node_fs.promises.rm(path.join(this.harnessDir(harness), stale.id), { recursive: true, force: true });
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
|
|
187
55
|
const CONFIG_RELATIVE_PATH = ".veryhappy/worktree.json";
|
|
188
56
|
const CONFIG_MAX_BYTES = 64 * 1024;
|
|
189
57
|
const SCRIPT_MAX_BYTES = 32 * 1024;
|
|
@@ -1311,10 +1179,10 @@ function startAgentVersionChecks(publish, onError, detect = detectAgentVersions)
|
|
|
1311
1179
|
void refresh();
|
|
1312
1180
|
const timer = setInterval(() => void refresh(), AGENT_CHECK_INTERVAL);
|
|
1313
1181
|
timer.unref();
|
|
1314
|
-
return () => {
|
|
1182
|
+
return Object.assign(() => {
|
|
1315
1183
|
stopped = true;
|
|
1316
1184
|
clearInterval(timer);
|
|
1317
|
-
};
|
|
1185
|
+
}, { refresh });
|
|
1318
1186
|
}
|
|
1319
1187
|
|
|
1320
1188
|
function parseTerminalHookPayload(body) {
|
|
@@ -1387,11 +1255,8 @@ function decideBackfill(messages, maxLines) {
|
|
|
1387
1255
|
return { replay: messages.slice(messages.length - cap), truncated: true };
|
|
1388
1256
|
}
|
|
1389
1257
|
|
|
1390
|
-
exports.BackupStore = BackupStore;
|
|
1391
1258
|
exports.MIRROR_BACKFILL_LINES_DEFAULT = MIRROR_BACKFILL_LINES_DEFAULT;
|
|
1392
|
-
exports.ModelConfigError = ModelConfigError;
|
|
1393
1259
|
exports.WORKTREE_CAPABILITY_VERSION = WORKTREE_CAPABILITY_VERSION;
|
|
1394
|
-
exports.atomicWriteFile = atomicWriteFile;
|
|
1395
1260
|
exports.configureWorktreeService = configureWorktreeService;
|
|
1396
1261
|
exports.currentWorktreeService = currentWorktreeService;
|
|
1397
1262
|
exports.decideBackfill = decideBackfill;
|
|
@@ -1405,12 +1270,10 @@ exports.mirrorLocalId = mirrorLocalId;
|
|
|
1405
1270
|
exports.parseMirrorSendParams = parseMirrorSendParams;
|
|
1406
1271
|
exports.parseTerminalHookPayload = parseTerminalHookPayload;
|
|
1407
1272
|
exports.pickMirrorForTerminal = pickMirrorForTerminal;
|
|
1408
|
-
exports.readConfigFile = readConfigFile;
|
|
1409
1273
|
exports.registerWorktreeHandlers = registerWorktreeHandlers;
|
|
1410
1274
|
exports.sanitizeLiveSnapshot = sanitizeLiveSnapshot;
|
|
1411
1275
|
exports.sanitizeTagList = sanitizeTagList;
|
|
1412
1276
|
exports.serializeLiveSnapshot = serializeLiveSnapshot;
|
|
1413
|
-
exports.sha256 = sha256;
|
|
1414
1277
|
exports.stableVersion = stableVersion;
|
|
1415
1278
|
exports.startAgentVersionChecks = startAgentVersionChecks;
|
|
1416
1279
|
exports.summarizeSpawnSessionForLog = summarizeSpawnSessionForLog;
|
|
@@ -1,12 +1,20 @@
|
|
|
1
|
-
import { randomBytes, createHash, randomUUID } from 'node:crypto';
|
|
2
|
-
import { promises, constants, writeFileSync, chmodSync, openSync, fstatSync, closeSync, existsSync, readFileSync, renameSync, readdirSync, rmSync, lstatSync, realpathSync, statSync, mkdirSync, readSync, unlinkSync, rmdirSync } from 'node:fs';
|
|
3
|
-
import { join, dirname, basename, relative, isAbsolute, sep, resolve } from 'node:path';
|
|
4
1
|
import { spawn, execFileSync, execFile } from 'node:child_process';
|
|
2
|
+
import { createHash, randomUUID } from 'node:crypto';
|
|
3
|
+
import { constants, writeFileSync, chmodSync, openSync, fstatSync, closeSync, existsSync, readFileSync, renameSync, readdirSync, rmSync, lstatSync, realpathSync, statSync, mkdirSync, readSync, unlinkSync, rmdirSync } from 'node:fs';
|
|
4
|
+
import { relative, isAbsolute, sep, join, dirname, basename, resolve } from 'node:path';
|
|
5
5
|
import { realpath, lstat, stat, mkdir, copyFile, symlink, readdir } from 'node:fs/promises';
|
|
6
|
-
import { f as ensurePrivateDirectorySync, w as writePrivateFileSync } from './configuration-
|
|
7
|
-
import { r as AGENT_VERSION_SOURCES } from './index-
|
|
8
|
-
import { p as packageJson } from './package-
|
|
6
|
+
import { f as ensurePrivateDirectorySync, w as writePrivateFileSync } from './configuration-BPrfb17M.mjs';
|
|
7
|
+
import { r as AGENT_VERSION_SOURCES } from './index-CeRXrGnH.mjs';
|
|
8
|
+
import { p as packageJson } from './package-DYGwlmXl.mjs';
|
|
9
9
|
|
|
10
|
+
function spawnOriginForLog(value) {
|
|
11
|
+
if (!value || typeof value !== "object") return void 0;
|
|
12
|
+
const input = value;
|
|
13
|
+
const source = typeof input.source === "string" && /^[a-z][a-z-]{0,23}$/.test(input.source) ? input.source : "invalid";
|
|
14
|
+
const route = typeof input.route === "string" && /^[A-Za-z0-9/:._-]{1,64}$/.test(input.route) ? input.route : "invalid";
|
|
15
|
+
const flag = (v) => typeof v === "boolean" ? v : null;
|
|
16
|
+
return { source, route, visible: flag(input.visible), gesture: flag(input.gesture) };
|
|
17
|
+
}
|
|
10
18
|
function summarizeSpawnSessionForLog(value) {
|
|
11
19
|
const input = value && typeof value === "object" ? value : {};
|
|
12
20
|
const environmentVariables = input.environmentVariables && typeof input.environmentVariables === "object" ? input.environmentVariables : {};
|
|
@@ -21,7 +29,8 @@ function summarizeSpawnSessionForLog(value) {
|
|
|
21
29
|
resumesCodex: typeof input.resumeCodexThreadId === "string" && input.resumeCodexThreadId.length > 0,
|
|
22
30
|
importsClaude: typeof input.importedFromClaudeSessionId === "string" && input.importedFromClaudeSessionId.length > 0,
|
|
23
31
|
forceNew: input.forceNew === true,
|
|
24
|
-
...typeof input.permissionMode === "string" ? { permissionMode: input.permissionMode } : {}
|
|
32
|
+
...typeof input.permissionMode === "string" ? { permissionMode: input.permissionMode } : {},
|
|
33
|
+
...input.origin !== void 0 ? { origin: spawnOriginForLog(input.origin) } : {}
|
|
25
34
|
};
|
|
26
35
|
}
|
|
27
36
|
|
|
@@ -41,147 +50,6 @@ function registerWorktreeHandlers(rpc, service) {
|
|
|
41
50
|
rpc.registerHandler("worktree-remove", async (params) => service.remove(obj(params).path, obj(params).discardChanges, obj(params).expectedFingerprint));
|
|
42
51
|
}
|
|
43
52
|
|
|
44
|
-
const MAX_CONFIG_BYTES = 1024 * 1024;
|
|
45
|
-
const MAX_BACKUPS_PER_HARNESS = 20;
|
|
46
|
-
class ModelConfigError extends Error {
|
|
47
|
-
constructor(code, message) {
|
|
48
|
-
super(message);
|
|
49
|
-
this.code = code;
|
|
50
|
-
this.name = "ModelConfigError";
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
function sha256(text) {
|
|
54
|
-
return createHash("sha256").update(text).digest("hex");
|
|
55
|
-
}
|
|
56
|
-
async function readConfigFile(path) {
|
|
57
|
-
let stat;
|
|
58
|
-
try {
|
|
59
|
-
stat = await promises.stat(path);
|
|
60
|
-
} catch (error) {
|
|
61
|
-
if (error.code === "ENOENT") {
|
|
62
|
-
return { path, exists: false, content: "", hash: sha256(""), mode: null };
|
|
63
|
-
}
|
|
64
|
-
throw new ModelConfigError("read-failed", `Cannot read ${path}: ${error.message}`);
|
|
65
|
-
}
|
|
66
|
-
if (!stat.isFile()) throw new ModelConfigError("not-a-file", `${path} is not a regular file`);
|
|
67
|
-
if (stat.size > MAX_CONFIG_BYTES) throw new ModelConfigError("file-too-large", `${path} is larger than ${MAX_CONFIG_BYTES} bytes`);
|
|
68
|
-
const content = await promises.readFile(path, "utf8");
|
|
69
|
-
return { path, exists: true, content, hash: sha256(content), mode: stat.mode & 511 };
|
|
70
|
-
}
|
|
71
|
-
async function resolveWriteTarget(path) {
|
|
72
|
-
try {
|
|
73
|
-
return await promises.realpath(path);
|
|
74
|
-
} catch (error) {
|
|
75
|
-
if (error.code === "ENOENT") {
|
|
76
|
-
try {
|
|
77
|
-
const link = await promises.readlink(path);
|
|
78
|
-
return link.startsWith("/") ? link : join(dirname(path), link);
|
|
79
|
-
} catch {
|
|
80
|
-
return path;
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
throw error;
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
async function atomicWriteFile(path, content, mode) {
|
|
87
|
-
const target = await resolveWriteTarget(path);
|
|
88
|
-
const dir = dirname(target);
|
|
89
|
-
await promises.mkdir(dir, { recursive: true, mode: 448 });
|
|
90
|
-
const tmp = join(dir, `.${basename(target)}.vh-tmp-${process.pid}-${randomBytes(4).toString("hex")}`);
|
|
91
|
-
const handle = await promises.open(tmp, constants.O_WRONLY | constants.O_CREAT | constants.O_EXCL, mode ?? 384);
|
|
92
|
-
try {
|
|
93
|
-
await handle.writeFile(content, "utf8");
|
|
94
|
-
await handle.sync();
|
|
95
|
-
} catch (error) {
|
|
96
|
-
await handle.close().catch(() => {
|
|
97
|
-
});
|
|
98
|
-
await promises.unlink(tmp).catch(() => {
|
|
99
|
-
});
|
|
100
|
-
throw error;
|
|
101
|
-
}
|
|
102
|
-
await handle.close();
|
|
103
|
-
try {
|
|
104
|
-
if (mode !== null) await promises.chmod(tmp, mode);
|
|
105
|
-
await promises.rename(tmp, target);
|
|
106
|
-
} catch (error) {
|
|
107
|
-
await promises.unlink(tmp).catch(() => {
|
|
108
|
-
});
|
|
109
|
-
throw error;
|
|
110
|
-
}
|
|
111
|
-
try {
|
|
112
|
-
const dirHandle = await promises.open(dir, "r");
|
|
113
|
-
await dirHandle.sync().catch(() => {
|
|
114
|
-
});
|
|
115
|
-
await dirHandle.close();
|
|
116
|
-
} catch {
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
const BACKUP_ID = /^\d{13}-[0-9a-f]{8}$/;
|
|
120
|
-
const HARNESS_DIR = /^[a-z][a-z0-9-]{0,31}$/;
|
|
121
|
-
class BackupStore {
|
|
122
|
-
constructor(root) {
|
|
123
|
-
this.root = root;
|
|
124
|
-
}
|
|
125
|
-
harnessDir(harness) {
|
|
126
|
-
if (!HARNESS_DIR.test(harness)) throw new ModelConfigError("invalid-harness", "Invalid harness");
|
|
127
|
-
return join(this.root, harness);
|
|
128
|
-
}
|
|
129
|
-
async create(harness, reason, files, now = Date.now()) {
|
|
130
|
-
const id = `${now}-${randomBytes(4).toString("hex")}`;
|
|
131
|
-
const dir = join(this.harnessDir(harness), id);
|
|
132
|
-
await promises.mkdir(dir, { recursive: true, mode: 448 });
|
|
133
|
-
const manifest = { id, createdAt: now, reason, files: files.map((f, i) => ({ path: f.path, blob: f.content === null ? null : `f${i}`, mode: f.mode })) };
|
|
134
|
-
for (const [i, file] of files.entries()) {
|
|
135
|
-
if (file.content !== null) await promises.writeFile(join(dir, `f${i}`), file.content, { encoding: "utf8", mode: 384 });
|
|
136
|
-
}
|
|
137
|
-
await promises.writeFile(join(dir, "manifest.json"), JSON.stringify(manifest, null, 2), { encoding: "utf8", mode: 384 });
|
|
138
|
-
await this.prune(harness);
|
|
139
|
-
return { id, createdAt: now, reason, files: files.map((f) => f.path) };
|
|
140
|
-
}
|
|
141
|
-
async list(harness) {
|
|
142
|
-
let names;
|
|
143
|
-
try {
|
|
144
|
-
names = await promises.readdir(this.harnessDir(harness));
|
|
145
|
-
} catch {
|
|
146
|
-
return [];
|
|
147
|
-
}
|
|
148
|
-
const entries = [];
|
|
149
|
-
for (const name of names.filter((n) => BACKUP_ID.test(n))) {
|
|
150
|
-
try {
|
|
151
|
-
const manifest = JSON.parse(await promises.readFile(join(this.harnessDir(harness), name, "manifest.json"), "utf8"));
|
|
152
|
-
entries.push({ id: name, createdAt: Number(manifest.createdAt) || 0, reason: String(manifest.reason ?? ""), files: (manifest.files ?? []).map((f) => f.path) });
|
|
153
|
-
} catch {
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
return entries.sort((a, b) => b.createdAt - a.createdAt);
|
|
157
|
-
}
|
|
158
|
-
async read(harness, id) {
|
|
159
|
-
if (!BACKUP_ID.test(id)) throw new ModelConfigError("invalid-backup", "Invalid backup id");
|
|
160
|
-
const dir = join(this.harnessDir(harness), id);
|
|
161
|
-
let manifest;
|
|
162
|
-
try {
|
|
163
|
-
manifest = JSON.parse(await promises.readFile(join(dir, "manifest.json"), "utf8"));
|
|
164
|
-
} catch {
|
|
165
|
-
throw new ModelConfigError("backup-not-found", "Backup not found");
|
|
166
|
-
}
|
|
167
|
-
const out = [];
|
|
168
|
-
for (const file of manifest.files) {
|
|
169
|
-
out.push({
|
|
170
|
-
path: file.path,
|
|
171
|
-
content: file.blob === null ? null : await promises.readFile(join(dir, file.blob), "utf8"),
|
|
172
|
-
mode: typeof file.mode === "number" ? file.mode : null
|
|
173
|
-
});
|
|
174
|
-
}
|
|
175
|
-
return out;
|
|
176
|
-
}
|
|
177
|
-
async prune(harness) {
|
|
178
|
-
const entries = await this.list(harness);
|
|
179
|
-
for (const stale of entries.slice(MAX_BACKUPS_PER_HARNESS)) {
|
|
180
|
-
await promises.rm(join(this.harnessDir(harness), stale.id), { recursive: true, force: true });
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
|
|
185
53
|
const CONFIG_RELATIVE_PATH = ".veryhappy/worktree.json";
|
|
186
54
|
const CONFIG_MAX_BYTES = 64 * 1024;
|
|
187
55
|
const SCRIPT_MAX_BYTES = 32 * 1024;
|
|
@@ -1309,10 +1177,10 @@ function startAgentVersionChecks(publish, onError, detect = detectAgentVersions)
|
|
|
1309
1177
|
void refresh();
|
|
1310
1178
|
const timer = setInterval(() => void refresh(), AGENT_CHECK_INTERVAL);
|
|
1311
1179
|
timer.unref();
|
|
1312
|
-
return () => {
|
|
1180
|
+
return Object.assign(() => {
|
|
1313
1181
|
stopped = true;
|
|
1314
1182
|
clearInterval(timer);
|
|
1315
|
-
};
|
|
1183
|
+
}, { refresh });
|
|
1316
1184
|
}
|
|
1317
1185
|
|
|
1318
1186
|
function parseTerminalHookPayload(body) {
|
|
@@ -1385,4 +1253,4 @@ function decideBackfill(messages, maxLines) {
|
|
|
1385
1253
|
return { replay: messages.slice(messages.length - cap), truncated: true };
|
|
1386
1254
|
}
|
|
1387
1255
|
|
|
1388
|
-
export {
|
|
1256
|
+
export { MIRROR_BACKFILL_LINES_DEFAULT as M, WORKTREE_CAPABILITY_VERSION as W, sanitizeTagList as a, sanitizeLiveSnapshot as b, serializeLiveSnapshot as c, configureWorktreeService as d, summarizeSpawnSessionForLog as e, parseMirrorSendParams as f, extractCompleteLines as g, decideBackfill as h, isClaudeSessionId as i, parseTerminalHookPayload as j, decideMirrorBinding as k, liveSnapshotChanged as l, mirrorLineKey as m, mirrorLocalId as n, initializeOwnedWorktree as o, pickMirrorForTerminal as p, startAgentVersionChecks as q, registerWorktreeHandlers as r, stableVersion as s, currentWorktreeService as t };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
var name = "very-happy-cli";
|
|
2
|
-
var version = "0.2.
|
|
2
|
+
var version = "0.2.181";
|
|
3
3
|
var description = "Remote multi-agent workspace CLI with deep Claude integration, native terminal streaming, and self-hosting.";
|
|
4
4
|
var author = "Kirill Dubovitskiy";
|
|
5
5
|
var contributors = [
|
|
@@ -82,7 +82,7 @@ var scripts = {
|
|
|
82
82
|
};
|
|
83
83
|
var dependencies = {
|
|
84
84
|
"@agentclientprotocol/sdk": "^0.14.1",
|
|
85
|
-
"@anthropic-ai/claude-agent-sdk": "0.3.
|
|
85
|
+
"@anthropic-ai/claude-agent-sdk": "0.3.306",
|
|
86
86
|
"@anthropic-ai/sandbox-runtime": "^0.0.37",
|
|
87
87
|
"@modelcontextprotocol/sdk": "1.30.0",
|
|
88
88
|
"@noble/ed25519": "^3.0.0",
|
|
@@ -116,12 +116,12 @@ var dependencies = {
|
|
|
116
116
|
zod: "^4.0.0"
|
|
117
117
|
};
|
|
118
118
|
var optionalDependencies = {
|
|
119
|
-
"very-happy-tools-arm64-darwin": "0.2.
|
|
120
|
-
"very-happy-tools-x64-darwin": "0.2.
|
|
121
|
-
"very-happy-tools-arm64-linux": "0.2.
|
|
122
|
-
"very-happy-tools-x64-linux": "0.2.
|
|
123
|
-
"very-happy-tools-arm64-win32": "0.2.
|
|
124
|
-
"very-happy-tools-x64-win32": "0.2.
|
|
119
|
+
"very-happy-tools-arm64-darwin": "0.2.181",
|
|
120
|
+
"very-happy-tools-x64-darwin": "0.2.181",
|
|
121
|
+
"very-happy-tools-arm64-linux": "0.2.181",
|
|
122
|
+
"very-happy-tools-x64-linux": "0.2.181",
|
|
123
|
+
"very-happy-tools-arm64-win32": "0.2.181",
|
|
124
|
+
"very-happy-tools-x64-win32": "0.2.181"
|
|
125
125
|
};
|
|
126
126
|
var devDependencies = {
|
|
127
127
|
"@slopus/happy-wire": "workspace:*",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var name = "very-happy-cli";
|
|
4
|
-
var version = "0.2.
|
|
4
|
+
var version = "0.2.181";
|
|
5
5
|
var description = "Remote multi-agent workspace CLI with deep Claude integration, native terminal streaming, and self-hosting.";
|
|
6
6
|
var author = "Kirill Dubovitskiy";
|
|
7
7
|
var contributors = [
|
|
@@ -84,7 +84,7 @@ var scripts = {
|
|
|
84
84
|
};
|
|
85
85
|
var dependencies = {
|
|
86
86
|
"@agentclientprotocol/sdk": "^0.14.1",
|
|
87
|
-
"@anthropic-ai/claude-agent-sdk": "0.3.
|
|
87
|
+
"@anthropic-ai/claude-agent-sdk": "0.3.306",
|
|
88
88
|
"@anthropic-ai/sandbox-runtime": "^0.0.37",
|
|
89
89
|
"@modelcontextprotocol/sdk": "1.30.0",
|
|
90
90
|
"@noble/ed25519": "^3.0.0",
|
|
@@ -118,12 +118,12 @@ var dependencies = {
|
|
|
118
118
|
zod: "^4.0.0"
|
|
119
119
|
};
|
|
120
120
|
var optionalDependencies = {
|
|
121
|
-
"very-happy-tools-arm64-darwin": "0.2.
|
|
122
|
-
"very-happy-tools-x64-darwin": "0.2.
|
|
123
|
-
"very-happy-tools-arm64-linux": "0.2.
|
|
124
|
-
"very-happy-tools-x64-linux": "0.2.
|
|
125
|
-
"very-happy-tools-arm64-win32": "0.2.
|
|
126
|
-
"very-happy-tools-x64-win32": "0.2.
|
|
121
|
+
"very-happy-tools-arm64-darwin": "0.2.181",
|
|
122
|
+
"very-happy-tools-x64-darwin": "0.2.181",
|
|
123
|
+
"very-happy-tools-arm64-linux": "0.2.181",
|
|
124
|
+
"very-happy-tools-x64-linux": "0.2.181",
|
|
125
|
+
"very-happy-tools-arm64-win32": "0.2.181",
|
|
126
|
+
"very-happy-tools-x64-win32": "0.2.181"
|
|
127
127
|
};
|
|
128
128
|
var devDependencies = {
|
|
129
129
|
"@slopus/happy-wire": "workspace:*",
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
import axios from 'axios';
|
|
2
2
|
import chalk from 'chalk';
|
|
3
|
-
import { c as configuration } from './configuration-
|
|
4
|
-
import { b as readCredentialsForConfiguredRelay, r as readSettings } from './persistence-
|
|
3
|
+
import { c as configuration } from './configuration-BPrfb17M.mjs';
|
|
4
|
+
import { b as readCredentialsForConfiguredRelay, r as readSettings } from './persistence-D2Djrf7t.mjs';
|
|
5
5
|
import { n as normalizeWebPanels, w as webPanelPath } from './webPanels-B2_C2-3g.mjs';
|
|
6
6
|
import 'node:fs';
|
|
7
7
|
import 'node:os';
|
|
8
8
|
import 'node:path';
|
|
9
|
-
import './package-
|
|
9
|
+
import './package-DYGwlmXl.mjs';
|
|
10
10
|
import 'node:fs/promises';
|
|
11
11
|
import 'zod';
|
|
12
12
|
import './authRelay-DhQhkBvX.mjs';
|
|
13
13
|
import 'node:crypto';
|
|
14
14
|
import 'tweetnacl';
|
|
15
|
-
import './logger-
|
|
15
|
+
import './logger-LFr8iPgl.mjs';
|
|
16
16
|
import 'node:util';
|
|
17
17
|
|
|
18
18
|
function frameVerdict(headers) {
|
|
@@ -106,7 +106,7 @@ async function handleAttentionCommand(args) {
|
|
|
106
106
|
else console.error(chalk.yellow(`panel "${parsed.panel}" is not declared in ${configuration.settingsFile}; the notification will not deep-link`));
|
|
107
107
|
}
|
|
108
108
|
if (parsed.session) {
|
|
109
|
-
const { ApiClient } = await import('./api-
|
|
109
|
+
const { ApiClient } = await import('./api-Dr3wXL_7.mjs').then(function (n) { return n.b; });
|
|
110
110
|
const api = await ApiClient.create(credentials);
|
|
111
111
|
const r = await api.push().sendAttention({ sessionId: parsed.session, reason: parsed.reason, url: link ?? `/session/${encodeURIComponent(parsed.session)}` });
|
|
112
112
|
if (!r.sent) {
|