very-happy-cli 0.2.185 → 0.2.186
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-DkoqWhTa.mjs → AcpBackend-ConXUH67.mjs} +3 -3
- package/dist/{AcpBackend-CCqL9mP1.cjs → AcpBackend-aVv-_nH_.cjs} +3 -3
- package/dist/{AcpSessionManager-BNPex8tJ.mjs → AcpSessionManager-BxD1AQ8L.mjs} +2 -2
- package/dist/{AcpSessionManager-DrtAJQUH.cjs → AcpSessionManager-aRdzf_6R.cjs} +2 -2
- package/dist/{BasePermissionHandler-DJZITwmL.cjs → BasePermissionHandler-BsOLZCNB.cjs} +1 -1
- package/dist/{BasePermissionHandler-Dd4oGPDg.mjs → BasePermissionHandler-Hj7Qregq.mjs} +1 -1
- package/dist/{acpSessionResume-_2NtETqb.mjs → acpSessionResume-CKacrrHV.mjs} +1 -1
- package/dist/{acpSessionResume-umHzSMbQ.cjs → acpSessionResume-CpPNoxaW.cjs} +1 -1
- package/dist/{agentHome-Dv_hRIt7.mjs → agentHome-CawmLuWV.mjs} +4 -4
- package/dist/{agentHome-CmIMqMWy.cjs → agentHome-VS7FrFQZ.cjs} +4 -4
- package/dist/{api-BTS8mqLy.mjs → api-DUFy21Nf.mjs} +10 -10
- package/dist/{api-BSz8MYte.cjs → api-DjqQTT16.cjs} +10 -10
- package/dist/{apiMachine-BcjccOmd.mjs → apiMachine-B0sBCHNZ.mjs} +14 -14
- package/dist/{apiMachine-utCDabnO.cjs → apiMachine-D2BrVBYu.cjs} +14 -14
- package/dist/{attachmentContent-hkdGP2NV.cjs → attachmentContent-2kInPZrP.cjs} +2 -2
- package/dist/{attachmentContent-DpOzgDTw.mjs → attachmentContent-D01-pLOB.mjs} +2 -2
- package/dist/{auth-CpbTj74y.mjs → auth-B-CqTcVh.mjs} +8 -8
- package/dist/{auth-B8nCUEiK.cjs → auth-CImUXAjH.cjs} +5 -5
- package/dist/{auth-DzXdF08E.cjs → auth-CujfCIv-.cjs} +8 -8
- package/dist/{auth-BKD2U9S2.mjs → auth-DP3eN2Fv.mjs} +5 -5
- package/dist/{auto-C-NK2JS8.mjs → auto-D4KRQIBu.mjs} +17 -17
- package/dist/{auto-E3ouHO37.cjs → auto-oWgZl7mM.cjs} +17 -17
- package/dist/{bootstrap-DIMkxIbR.cjs → bootstrap-B7YvJcVK.cjs} +2 -2
- package/dist/{bootstrap-DV4dqeCe.mjs → bootstrap-MFmMruyB.mjs} +2 -2
- package/dist/{browser-Ch50ZchJ.cjs → browser-C19iD31j.cjs} +1 -1
- package/dist/{browser-C0xt1NE-.mjs → browser-CfFbN1Us.mjs} +1 -1
- package/dist/{claudeLocal-Curd8-dn.cjs → claudeLocal-C4A7-BmS.cjs} +5 -5
- package/dist/{claudeLocal-D-U3fIdS.mjs → claudeLocal-C6wNx9qH.mjs} +5 -5
- package/dist/{claudeLocalLauncher-BEJ9Wad_.cjs → claudeLocalLauncher-BfCKs7Le.cjs} +10 -10
- package/dist/{claudeLocalLauncher-BTNUVzRK.mjs → claudeLocalLauncher-DdPfufcS.mjs} +10 -10
- package/dist/{claudeSessionFork-DMdeScGk.cjs → claudeSessionFork-B8NjdHYD.cjs} +1 -1
- package/dist/{claudeSessionFork-JPEHVbfR.mjs → claudeSessionFork-D8XT48Lf.mjs} +1 -1
- package/dist/{client-Ct1rnpJw.mjs → client-BfGuTBMO.mjs} +2 -2
- package/dist/{client-D1rJt15-.mjs → client-CKM07bJH.mjs} +4 -4
- package/dist/{client-qgKef7S6.cjs → client-CMIhQ32m.cjs} +2 -2
- package/dist/{client-C54hMWx6.cjs → client-CTNxuHVc.cjs} +2 -2
- package/dist/{client-D2lOnvzs.mjs → client-DAnQqPmc.mjs} +2 -2
- package/dist/{client-dpo5EbS9.cjs → client-jAdkYZRf.cjs} +4 -4
- package/dist/codex/happyMcpStdioBridge.cjs +16 -16
- package/dist/codex/happyMcpStdioBridge.mjs +16 -16
- package/dist/{codexAppServerClient-CM3O0zHW.mjs → codexAppServerClient-DhOC61k9.mjs} +3 -3
- package/dist/{codexAppServerClient-DGeqZViU.cjs → codexAppServerClient-Dv1Mh3MS.cjs} +3 -3
- package/dist/{codexCommand-D_8fbJEk.cjs → codexCommand-CWrFt3Ne.cjs} +42 -42
- package/dist/{codexCommand-CkdopWS7.mjs → codexCommand-D3_i93Rm.mjs} +42 -42
- package/dist/{codexTermination-FO52Ahcx.mjs → codexTermination-B08GgahL.mjs} +1 -1
- package/dist/{codexTermination-MG2j2DDX.cjs → codexTermination-DErS0cGt.cjs} +1 -1
- package/dist/{config-CppOKnWe.mjs → config-D3OBduhj.mjs} +3 -3
- package/dist/{config-IDbpY1Am.cjs → config-D_aj3xgw.cjs} +3 -3
- package/dist/{configuration-CwfmwaLU.cjs → configuration-CI0GWwaT.cjs} +1 -1
- package/dist/{configuration-HPdj5Til.mjs → configuration-DbCHeEeP.mjs} +1 -1
- package/dist/{connect-BNlBIAM8.cjs → connect-839tEkPN.cjs} +13 -13
- package/dist/{connect-1YK7vPbW.mjs → connect-BuwVpjkZ.mjs} +13 -13
- package/dist/{context-DetK5c-x.mjs → context-D2Y_qLs0.mjs} +1 -1
- package/dist/{context-D3vDWjiI.cjs → context-zhirgqSw.cjs} +1 -1
- package/dist/{controlClient-DTMI1aTp.cjs → controlClient-BIi1tzEo.cjs} +3 -3
- package/dist/{controlClient-DBylxaEh.mjs → controlClient-Dv80mB_j.mjs} +3 -3
- package/dist/{createSessionMetadata-D2Ll7PlQ.cjs → createSessionMetadata-DT24NjY2.cjs} +2 -2
- package/dist/{createSessionMetadata-D8pfpX4V.mjs → createSessionMetadata-Dqy_DfoF.mjs} +2 -2
- package/dist/{daemonSupervisor-DfzrtNhM.mjs → daemonSupervisor-BxohggqN.mjs} +40 -1
- package/dist/{daemonSupervisor-57JYYzMf.cjs → daemonSupervisor-alqGPANc.cjs} +43 -1
- package/dist/{defaultPermissionMode-DVXkcryy.cjs → defaultPermissionMode-BYqJbPhc.cjs} +2 -2
- package/dist/{defaultPermissionMode-Bkhj_DwT.mjs → defaultPermissionMode-yR27mevc.mjs} +2 -2
- package/dist/{deterministicJson-cEWItQun.mjs → deterministicJson-COiJcmUR.mjs} +13 -13
- package/dist/{deterministicJson-DUCYjhHe.cjs → deterministicJson-CoWlyn_X.cjs} +13 -13
- package/dist/{doctor-tLRILlmz.cjs → doctor-DI6aIOne.cjs} +7 -7
- package/dist/{doctor-DpWtxNeT.mjs → doctor-Ymj096qP.mjs} +7 -7
- package/dist/{downloadTarget-Ci5wcYC2.cjs → downloadTarget-BOXHrxbm.cjs} +6 -6
- package/dist/{downloadTarget-B5b5BHb2.mjs → downloadTarget-DRXCRDub.mjs} +6 -6
- package/dist/{ensureDaemonRunning-Dsv8UPwx.cjs → ensureDaemonRunning-BqNjYnar.cjs} +5 -5
- package/dist/{ensureDaemonRunning-GDGwNDGF.mjs → ensureDaemonRunning-DTrrXAdz.mjs} +5 -5
- package/dist/{handleResumeCommand-CncudrQd.cjs → handleResumeCommand-BBKUGhCv.cjs} +5 -5
- package/dist/{handleResumeCommand-DW7Ml1u5.mjs → handleResumeCommand-DW_MRgtz.mjs} +5 -5
- package/dist/{index-Wf6mKJq9.mjs → index-04pYyzsJ.mjs} +4 -4
- package/dist/{index-DisBaRvM.mjs → index-B9f1vKcC.mjs} +96 -0
- package/dist/{index-Dzb_Bsfu.cjs → index-Bq6VHNdk.cjs} +4 -4
- package/dist/{index-Ub-5xbcU.cjs → index-BumVulwx.cjs} +96 -0
- package/dist/{index-Vx4EQ6wI.cjs → index-CY573fnz.cjs} +4 -4
- package/dist/{index-bT1X9Brv.mjs → index-CmlAXizv.mjs} +4 -4
- package/dist/{index-DRWlaLbe.mjs → index-Cyu_8WAd.mjs} +3 -3
- package/dist/{index-BEHzEYP0.cjs → index-D9lJhXUk.cjs} +39 -39
- package/dist/{index-Bh806Q-1.cjs → index-W8wlfp57.cjs} +3 -3
- package/dist/{index-C1qLnBOk.mjs → index-WW17yjQO.mjs} +40 -40
- package/dist/index.cjs +2 -2
- package/dist/index.mjs +2 -2
- package/dist/{install-CRs4tGBa.cjs → install-C1y_g7kj.cjs} +3 -3
- package/dist/{install-DmF9wfwV.mjs → install-C5XCDwgD.mjs} +3 -3
- package/dist/lib.cjs +12 -12
- package/dist/lib.mjs +12 -12
- package/dist/{lidState-wwiu6M3p.cjs → lidState-BxHu6dus.cjs} +1 -1
- package/dist/{lidState-CG9jFcML.mjs → lidState-CZ1ggYiB.mjs} +1 -1
- package/dist/{localHappyAgentAuth-UoytSUX0.cjs → localHappyAgentAuth-BHklNDKQ.cjs} +1 -1
- package/dist/{localHappyAgentAuth-CWha8BiX.mjs → localHappyAgentAuth-OJk4xDwg.mjs} +1 -1
- package/dist/{logger-BjXkscIr.mjs → logger-CpaeM90D.mjs} +2 -2
- package/dist/{logger-CIUMiSLo.cjs → logger-L0pLBOLK.cjs} +2 -2
- package/dist/{machineMetadata-BPlyxzxb.cjs → machineMetadata-YeHF4gSY.cjs} +3 -3
- package/dist/{machineMetadata-Ca4Dpy6s.mjs → machineMetadata-ukaYmmlK.mjs} +3 -3
- package/dist/{main-FD8mmcsK.cjs → main-VyiAJXfb.cjs} +47 -47
- package/dist/{main-CS1U9i4s.mjs → main-pkH_VRP-.mjs} +47 -47
- package/dist/{mcp-BS6rdR8p.mjs → mcp-BwoAhEnN.mjs} +15 -15
- package/dist/{mcp-C7Rm1dTM.cjs → mcp-Y8Xsr2Xh.cjs} +15 -15
- package/dist/{mirrorProtocol-CMJ2HOZF.cjs → mirrorProtocol-Did0-1jn.cjs} +3 -3
- package/dist/{mirrorProtocol-C3Anki4S.mjs → mirrorProtocol-DukUp2Bj.mjs} +3 -3
- package/dist/{package-CRDjc5vK.cjs → package-BuATIMpK.cjs} +7 -7
- package/dist/{package-Do0Y9bGA.mjs → package-DagIeOhi.mjs} +7 -7
- package/dist/{panels-C-jss7nF.mjs → panels-C3dUoUbA.mjs} +5 -5
- package/dist/{panels-DwTHrZuo.cjs → panels-CZ_CRUbM.cjs} +5 -5
- package/dist/{peerTools-CL7zBxlC.mjs → peerTools-CUCqJ83-.mjs} +5 -5
- package/dist/{peerTools-SLRntgX6.cjs → peerTools-Cs3Ln6d0.cjs} +5 -5
- package/dist/{persistence-CNWBdUH2.cjs → persistence-CIzOAWK6.cjs} +2 -2
- package/dist/{persistence-CmVwM5uq.mjs → persistence-FgtDuVAP.mjs} +2 -2
- package/dist/{piRunnerArgs-CXJx3PPx.cjs → piRunnerArgs-CJhXFPM9.cjs} +1 -1
- package/dist/{piRunnerArgs-K0K9Y0Yq.mjs → piRunnerArgs-YbYkfixz.mjs} +1 -1
- package/dist/{piRuntime-Bv41vG05.cjs → piRuntime-CEzoAYHe.cjs} +1 -1
- package/dist/{piRuntime-BSoHy-QJ.mjs → piRuntime-CShuw-1A.mjs} +1 -1
- package/dist/{piTerminal-B8acGxsm.mjs → piTerminal-BvvcgVoW.mjs} +17 -17
- package/dist/{piTerminal-DSs-fnps.cjs → piTerminal-DVr2W6bI.cjs} +17 -17
- package/dist/{pushNotifications-DnpJJ7VR.mjs → pushNotifications-2CyhYAte.mjs} +3 -3
- package/dist/{pushNotifications-C651e0ZZ.cjs → pushNotifications-OtQY-Mfa.cjs} +3 -3
- package/dist/{query-rxLftxvh.mjs → query-B7DvMlYM.mjs} +1 -1
- package/dist/{query-DXFx2VZY.cjs → query-DimRl61I.cjs} +1 -1
- package/dist/{rateLimitWindows-D9mQRGHv.mjs → rateLimitWindows-C0zbGT7K.mjs} +1 -1
- package/dist/{rateLimitWindows-1WoBs8ln.cjs → rateLimitWindows-DwhrA5wy.cjs} +1 -1
- package/dist/{registerCommonHandlers-K-BTp2iR.cjs → registerCommonHandlers-De54jKz8.cjs} +2 -2
- package/dist/{registerCommonHandlers-DpBxSCBi.mjs → registerCommonHandlers-X9lnO2TF.mjs} +2 -2
- package/dist/{registerKillSessionHandler-DwPEAS2G.cjs → registerKillSessionHandler-CAif4Uz4.cjs} +6 -6
- package/dist/{registerKillSessionHandler-BDxd20fg.mjs → registerKillSessionHandler-CrLsN5m3.mjs} +6 -6
- package/dist/{remoteSessionClient-DnFblfFz.cjs → remoteSessionClient-9j3N_bzV.cjs} +5 -5
- package/dist/{remoteSessionClient-DHWfDMHA.mjs → remoteSessionClient-BApor-c2.mjs} +5 -5
- package/dist/{reportProgressTool-DJXfK6rp.mjs → reportProgressTool-6mDoxKuq.mjs} +3 -3
- package/dist/{reportProgressTool-CYgnezAO.cjs → reportProgressTool-RR5VkbDf.cjs} +3 -3
- package/dist/{run-BChqUxs6.cjs → run-B2ZorDI7.cjs} +216 -44
- package/dist/{run-BkixRBWm.mjs → run-CmA3cPD_.mjs} +219 -47
- package/dist/{runClaude-Bdw9vTgv.cjs → runClaude-Dk73bQ0n.cjs} +22 -22
- package/dist/{runClaude-FWTCLnVq.mjs → runClaude-bxwea9mX.mjs} +22 -22
- package/dist/{runClaudeDeps-C6mCzhtO.mjs → runClaudeDeps-DoaYM017.mjs} +43 -43
- package/dist/{runClaudeDeps-CN_moqup.cjs → runClaudeDeps-dVfReVd4.cjs} +38 -38
- package/dist/{runGemini-CzPwEltY.cjs → runGemini-BD-wQe5q.cjs} +33 -33
- package/dist/{runGemini-CI7ut_ng.mjs → runGemini-Dq2iv4UF.mjs} +33 -33
- package/dist/{runOpenClaw-CLw64Nmq.cjs → runOpenClaw-BXLv_bvU.cjs} +18 -18
- package/dist/{runOpenClaw-8V2K_-lg.mjs → runOpenClaw-C1NB1aLx.mjs} +18 -18
- package/dist/{sandbox-DD2oQTt3.cjs → sandbox-9MIBf8kS.cjs} +4 -4
- package/dist/{sandbox-BMkBdvHW.mjs → sandbox-Dqs_T8Jw.mjs} +4 -4
- package/dist/{selfCheck-0jELpLE9.cjs → selfCheck-CkUezhrg.cjs} +37 -37
- package/dist/selfCheck-Dz_Sm7w8.mjs +86 -0
- package/dist/{send-BNjwFaVp.mjs → send-4q066vij.mjs} +8 -8
- package/dist/{send-BoLglO1t.cjs → send-rdhpycNB.cjs} +8 -8
- package/dist/{server-C5wOp8jw.mjs → server-DN6TvjhP.mjs} +4 -4
- package/dist/{server-Uw82k7zD.cjs → server-DxTjt1mK.cjs} +6 -6
- package/dist/{sessionLock-YMRCi-Ec.mjs → sessionLock-DOsE5UUf.mjs} +3 -3
- package/dist/{sessionLock-BTo7Cdbi.cjs → sessionLock-h4162Jrf.cjs} +3 -3
- package/dist/{sessionOps-BO6AesNJ.mjs → sessionOps--9p2IzVA.mjs} +4 -4
- package/dist/{sessionOps-BDHEzyAY.cjs → sessionOps-tmBKG5qg.cjs} +4 -4
- package/dist/{sessionProvider-DLdJJV6A.cjs → sessionProvider-B9w7rFDR.cjs} +5 -5
- package/dist/{sessionProvider-CB9lGJdF.mjs → sessionProvider-C6MHJZ9Z.mjs} +5 -5
- package/dist/{sessionScanner-BkukogZy.mjs → sessionScanner-B6hzp5R9.mjs} +3 -3
- package/dist/{sessionScanner-3TevonZd.cjs → sessionScanner-Bgvz8Uiy.cjs} +3 -3
- package/dist/{sessions-BkBcZSj7.cjs → sessions-DJMVXKRz.cjs} +10 -10
- package/dist/{sessions-Bx-6fXTL.mjs → sessions-iItaUQAF.mjs} +10 -10
- package/dist/{setupOfflineReconnection-DYzysFFJ.mjs → setupOfflineReconnection-DF78nz1N.mjs} +2 -2
- package/dist/{setupOfflineReconnection-DMfoVL-0.cjs → setupOfflineReconnection-DL4HUMDJ.cjs} +2 -2
- package/dist/{spawn-DvyBhowH.cjs → spawn-CL9A8dBJ.cjs} +14 -14
- package/dist/{spawn-CHC32rLr.mjs → spawn-CoYfACsc.mjs} +14 -14
- package/dist/{spawnAgents-D15n6tAj.cjs → spawnAgents-DsJSyLDl.cjs} +1 -1
- package/dist/{spawnAgents-jXo9jIYo.mjs → spawnAgents-f2q31uUV.mjs} +1 -1
- package/dist/{spawnHappyCLI-WYJCvAWD.cjs → spawnHappyCLI-BWOub_Uf.cjs} +1 -1
- package/dist/{spawnHappyCLI-e9MaJWB0.mjs → spawnHappyCLI-BcSO1rF6.mjs} +1 -1
- package/dist/{specialCommands-D00VrQ09.mjs → specialCommands-B-DAeFrU.mjs} +3 -3
- package/dist/{specialCommands-DqrQnKHC.cjs → specialCommands-ByrcSYSh.cjs} +3 -3
- package/dist/{startFileWatcher-VFZ-Bpwa.cjs → startFileWatcher-BZrpUz7_.cjs} +1 -1
- package/dist/{startFileWatcher-CvUUesns.mjs → startFileWatcher-DVia64Vg.mjs} +1 -1
- package/dist/{startupSessionCreate-B25xTUJ4.cjs → startupSessionCreate-63ABDnfJ.cjs} +1 -1
- package/dist/{startupSessionCreate-B6HNLg0g.mjs → startupSessionCreate-CY4tPjlZ.mjs} +1 -1
- package/dist/{streamRelay-GzHxvMem.mjs → streamRelay-B3FloUTT.mjs} +1 -1
- package/dist/{streamRelay-CtTpf-Li.cjs → streamRelay-Cn_uGG6m.cjs} +1 -1
- package/dist/{sync-DliZ1zZh.cjs → sync-CKSmwxec.cjs} +1 -1
- package/dist/{sync-HPnxI4fz.mjs → sync-CZjyTC4v.mjs} +1 -1
- package/dist/{systemPrompt-D9JJpzl_.mjs → systemPrompt-BKUVX-fd.mjs} +2 -2
- package/dist/{systemPrompt-CYvRvanR.cjs → systemPrompt-BPzhf5d5.cjs} +2 -2
- package/dist/{teams-C0PJlIMz.mjs → teams-B2-KPjRg.mjs} +7 -7
- package/dist/{teams-D7Ad6YSf.cjs → teams-CHBszdmc.cjs} +7 -7
- package/dist/{template-BLJxflCH.cjs → template-DPsqlHJQ.cjs} +1 -1
- package/dist/{template-YlpbYGeQ.mjs → template-DuKZw-Sz.mjs} +1 -1
- package/dist/{time-BbJ-NWcl.mjs → time-BsNUVcKH.mjs} +1 -1
- package/dist/{time-BCGGrWp4.cjs → time-DcICfW0N.cjs} +1 -1
- package/dist/{titleGenerator-03Y2uoZW.mjs → titleGenerator-B4b4ah--.mjs} +1 -1
- package/dist/{titleGenerator-IrI84kqh.cjs → titleGenerator-Bvk1mx7G.cjs} +2 -2
- package/dist/{todo-DdV9_uEu.cjs → todo-BN4hhun6.cjs} +6 -6
- package/dist/{todo-DOh8KaxD.mjs → todo-C7--CBge.mjs} +6 -6
- package/dist/{tools-WXF7ApAe.mjs → tools-BILbS8Hh.mjs} +1 -1
- package/dist/{tools-DeoxWyQ0.cjs → tools-Bl5Q_6Nr.cjs} +1 -1
- package/dist/{uninstall-BVYlC0jw.mjs → uninstall-Bjwl9bqK.mjs} +3 -3
- package/dist/{uninstall-oGvAKOlN.cjs → uninstall-_qDbgdxh.cjs} +3 -3
- package/package.json +7 -7
- package/dist/selfCheck-DgWZfw5E.mjs +0 -86
package/dist/{registerKillSessionHandler-DwPEAS2G.cjs → registerKillSessionHandler-CAif4Uz4.cjs}
RENAMED
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var logger = require('./logger-
|
|
3
|
+
var logger = require('./logger-L0pLBOLK.cjs');
|
|
4
4
|
require('axios');
|
|
5
5
|
require('node:events');
|
|
6
6
|
require('socket.io-client');
|
|
7
|
-
require('./pushNotifications-
|
|
7
|
+
require('./pushNotifications-OtQY-Mfa.cjs');
|
|
8
8
|
require('node:crypto');
|
|
9
9
|
require('tweetnacl');
|
|
10
|
-
require('./configuration-
|
|
11
|
-
require('./index-
|
|
12
|
-
require('./registerCommonHandlers-
|
|
10
|
+
require('./configuration-CI0GWwaT.cjs');
|
|
11
|
+
require('./index-BumVulwx.cjs');
|
|
12
|
+
require('./registerCommonHandlers-De54jKz8.cjs');
|
|
13
13
|
require('os');
|
|
14
14
|
require('child_process');
|
|
15
15
|
require('@paralleldrive/cuid2');
|
|
16
|
-
require('./persistence-
|
|
16
|
+
require('./persistence-CIzOAWK6.cjs');
|
|
17
17
|
require('chalk');
|
|
18
18
|
require('./types-CRS-srZK.cjs');
|
|
19
19
|
|
package/dist/{registerKillSessionHandler-BDxd20fg.mjs → registerKillSessionHandler-CrLsN5m3.mjs}
RENAMED
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
import { l as logger } from './logger-
|
|
1
|
+
import { l as logger } from './logger-CpaeM90D.mjs';
|
|
2
2
|
import 'axios';
|
|
3
3
|
import 'node:events';
|
|
4
4
|
import 'socket.io-client';
|
|
5
|
-
import './pushNotifications-
|
|
5
|
+
import './pushNotifications-2CyhYAte.mjs';
|
|
6
6
|
import 'node:crypto';
|
|
7
7
|
import 'tweetnacl';
|
|
8
|
-
import './configuration-
|
|
9
|
-
import './index-
|
|
10
|
-
import './registerCommonHandlers-
|
|
8
|
+
import './configuration-DbCHeEeP.mjs';
|
|
9
|
+
import './index-B9f1vKcC.mjs';
|
|
10
|
+
import './registerCommonHandlers-X9lnO2TF.mjs';
|
|
11
11
|
import 'os';
|
|
12
12
|
import 'child_process';
|
|
13
13
|
import '@paralleldrive/cuid2';
|
|
14
|
-
import './persistence-
|
|
14
|
+
import './persistence-FgtDuVAP.mjs';
|
|
15
15
|
import 'chalk';
|
|
16
16
|
import './types-CkqAACXx.mjs';
|
|
17
17
|
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var controlClient = require('./controlClient-
|
|
4
|
-
var sessionOps = require('./sessionOps-
|
|
5
|
-
var time = require('./time-
|
|
3
|
+
var controlClient = require('./controlClient-BIi1tzEo.cjs');
|
|
4
|
+
var sessionOps = require('./sessionOps-tmBKG5qg.cjs');
|
|
5
|
+
var time = require('./time-DcICfW0N.cjs');
|
|
6
6
|
var axios = require('axios');
|
|
7
7
|
var os = require('node:os');
|
|
8
|
-
var configuration = require('./configuration-
|
|
9
|
-
var persistence = require('./persistence-
|
|
8
|
+
var configuration = require('./configuration-CI0GWwaT.cjs');
|
|
9
|
+
var persistence = require('./persistence-CIzOAWK6.cjs');
|
|
10
10
|
var node_crypto = require('node:crypto');
|
|
11
11
|
|
|
12
12
|
const ACTIVE_FRESH_WINDOW_MS = 15 * 60 * 1e3;
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { j as resumeDaemonSession, l as listDaemonSessions } from './controlClient-
|
|
2
|
-
import { d as archiveSession, u as unarchiveSession, h as sessionLiveness, e as sendUserMessage, i as readSessionState, o as openUserScopedSocket } from './sessionOps
|
|
3
|
-
import { d as delay } from './time-
|
|
1
|
+
import { j as resumeDaemonSession, l as listDaemonSessions } from './controlClient-Dv80mB_j.mjs';
|
|
2
|
+
import { d as archiveSession, u as unarchiveSession, h as sessionLiveness, e as sendUserMessage, i as readSessionState, o as openUserScopedSocket } from './sessionOps--9p2IzVA.mjs';
|
|
3
|
+
import { d as delay } from './time-BsNUVcKH.mjs';
|
|
4
4
|
import axios from 'axios';
|
|
5
5
|
import { hostname } from 'node:os';
|
|
6
|
-
import { c as configuration } from './configuration-
|
|
7
|
-
import { r as readSettings, b as readCredentialsForConfiguredRelay } from './persistence-
|
|
6
|
+
import { c as configuration } from './configuration-DbCHeEeP.mjs';
|
|
7
|
+
import { r as readSettings, b as readCredentialsForConfiguredRelay } from './persistence-FgtDuVAP.mjs';
|
|
8
8
|
import { randomUUID } from 'node:crypto';
|
|
9
9
|
|
|
10
10
|
const ACTIVE_FRESH_WINDOW_MS = 15 * 60 * 1e3;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
-
import { o as AutomationNameSchema, d as AUTOMATION_ATTENTION_REASON_MAX_CHARS, e as AUTOMATION_SUMMARY_MAX_CHARS, c as AutomationPrecheckSchema, p as AutomationConcurrencySchema, q as AutomationActionSchema, t as AutomationTriggerSchema } from './index-
|
|
3
|
-
import { a as authenticatedAutomationsClient, b as automationRunIdFromEnv } from './client-
|
|
2
|
+
import { o as AutomationNameSchema, d as AUTOMATION_ATTENTION_REASON_MAX_CHARS, e as AUTOMATION_SUMMARY_MAX_CHARS, c as AutomationPrecheckSchema, p as AutomationConcurrencySchema, q as AutomationActionSchema, t as AutomationTriggerSchema } from './index-B9f1vKcC.mjs';
|
|
3
|
+
import { a as authenticatedAutomationsClient, b as automationRunIdFromEnv } from './client-BfGuTBMO.mjs';
|
|
4
4
|
import { u as updateAutomationChecked, c as createAutomationChecked } from './precheckCompat-DeEbilbr.mjs';
|
|
5
|
-
import { P as ProjectsUnsupportedError, a as ProjectRequestError, s as sharedProjectsClient } from './client-
|
|
5
|
+
import { P as ProjectsUnsupportedError, a as ProjectRequestError, s as sharedProjectsClient } from './client-DAnQqPmc.mjs';
|
|
6
6
|
import { f as formatContextForTool } from './prompt-QHuFx9j6.mjs';
|
|
7
7
|
import { R as REPORT_PROGRESS_TOOL_NAME, d as REPORT_PROGRESS_TOOL_TITLE, e as REPORT_PROGRESS_TOOL_DESCRIPTION } from './agentGuidance-BDYt2Qy2.mjs';
|
|
8
8
|
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var z = require('zod');
|
|
4
|
-
var index = require('./index-
|
|
5
|
-
var client = require('./client-
|
|
4
|
+
var index = require('./index-BumVulwx.cjs');
|
|
5
|
+
var client = require('./client-CMIhQ32m.cjs');
|
|
6
6
|
var precheckCompat = require('./precheckCompat-CWOi5c9L.cjs');
|
|
7
|
-
var client$1 = require('./client-
|
|
7
|
+
var client$1 = require('./client-CTNxuHVc.cjs');
|
|
8
8
|
var prompt = require('./prompt-Bof2aQkI.cjs');
|
|
9
9
|
var agentGuidance = require('./agentGuidance-BtBx2xxE.cjs');
|
|
10
10
|
|
|
@@ -1,27 +1,27 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var mirrorProtocol = require('./mirrorProtocol-
|
|
3
|
+
var mirrorProtocol = require('./mirrorProtocol-Did0-1jn.cjs');
|
|
4
4
|
var fsMkdir = require('./fsMkdir-0K3yENml.cjs');
|
|
5
|
-
var piRunnerArgs = require('./piRunnerArgs-
|
|
5
|
+
var piRunnerArgs = require('./piRunnerArgs-CJhXFPM9.cjs');
|
|
6
6
|
var fs = require('fs/promises');
|
|
7
7
|
var os$1 = require('os');
|
|
8
8
|
var tmp = require('tmp');
|
|
9
9
|
var axios = require('axios');
|
|
10
10
|
var node_fs = require('node:fs');
|
|
11
11
|
var path = require('node:path');
|
|
12
|
-
var configuration = require('./configuration-
|
|
13
|
-
var api = require('./api-
|
|
14
|
-
var spawnAgents = require('./spawnAgents-
|
|
15
|
-
var logger = require('./logger-
|
|
16
|
-
var index$2 = require('./index-
|
|
17
|
-
var auth = require('./auth-
|
|
12
|
+
var configuration = require('./configuration-CI0GWwaT.cjs');
|
|
13
|
+
var api = require('./api-DjqQTT16.cjs');
|
|
14
|
+
var spawnAgents = require('./spawnAgents-DsJSyLDl.cjs');
|
|
15
|
+
var logger = require('./logger-L0pLBOLK.cjs');
|
|
16
|
+
var index$2 = require('./index-W8wlfp57.cjs');
|
|
17
|
+
var auth = require('./auth-CImUXAjH.cjs');
|
|
18
18
|
var child_process = require('child_process');
|
|
19
|
-
var _package = require('./package-
|
|
20
|
-
var doctor = require('./doctor-
|
|
21
|
-
var spawnHappyCLI = require('./spawnHappyCLI-
|
|
22
|
-
var persistence = require('./persistence-
|
|
23
|
-
var controlClient = require('./controlClient-
|
|
24
|
-
var sessionOps = require('./sessionOps-
|
|
19
|
+
var _package = require('./package-BuATIMpK.cjs');
|
|
20
|
+
var doctor = require('./doctor-DI6aIOne.cjs');
|
|
21
|
+
var spawnHappyCLI = require('./spawnHappyCLI-BWOub_Uf.cjs');
|
|
22
|
+
var persistence = require('./persistence-CIzOAWK6.cjs');
|
|
23
|
+
var controlClient = require('./controlClient-BIi1tzEo.cjs');
|
|
24
|
+
var sessionOps = require('./sessionOps-tmBKG5qg.cjs');
|
|
25
25
|
var fastify = require('fastify');
|
|
26
26
|
var z = require('zod');
|
|
27
27
|
var fastifyTypeProviderZod = require('fastify-type-provider-zod');
|
|
@@ -29,62 +29,62 @@ var authRelay = require('./authRelay-Dy1qU9td.cjs');
|
|
|
29
29
|
var node_crypto = require('node:crypto');
|
|
30
30
|
var previewPath = require('./previewPath-B0rBdhy1.cjs');
|
|
31
31
|
var backgroundTaskActivity = require('./backgroundTaskActivity-CBvUdj39.cjs');
|
|
32
|
-
var rateLimitWindows = require('./rateLimitWindows-
|
|
33
|
-
var peerTools = require('./peerTools-
|
|
32
|
+
var rateLimitWindows = require('./rateLimitWindows-DwhrA5wy.cjs');
|
|
33
|
+
var peerTools = require('./peerTools-Cs3Ln6d0.cjs');
|
|
34
34
|
var os = require('node:os');
|
|
35
|
-
var remoteSessionClient = require('./remoteSessionClient-
|
|
36
|
-
var bootstrap = require('./bootstrap-
|
|
37
|
-
var index$1 = require('./index-
|
|
35
|
+
var remoteSessionClient = require('./remoteSessionClient-9j3N_bzV.cjs');
|
|
36
|
+
var bootstrap = require('./bootstrap-B7YvJcVK.cjs');
|
|
37
|
+
var index$1 = require('./index-Bq6VHNdk.cjs');
|
|
38
38
|
var require$$0 = require('fs');
|
|
39
39
|
var require$$1 = require('path');
|
|
40
40
|
var node_child_process = require('node:child_process');
|
|
41
41
|
var projectPath = require('./projectPath-C3ioB4Bu.cjs');
|
|
42
42
|
var doctorReadiness = require('./doctorReadiness-Dl6yRQCy.cjs');
|
|
43
|
-
var machineMetadata = require('./machineMetadata-
|
|
43
|
+
var machineMetadata = require('./machineMetadata-YeHF4gSY.cjs');
|
|
44
44
|
var fileStore = require('./fileStore-7qhnbs6N.cjs');
|
|
45
45
|
var pi = require('./pi-DlsrPCTa.cjs');
|
|
46
46
|
var require$$3 = require('crypto');
|
|
47
47
|
var detectCLI = require('./detectCLI-BuYR_Qxe.cjs');
|
|
48
|
-
var handleResumeCommand = require('./handleResumeCommand-
|
|
48
|
+
var handleResumeCommand = require('./handleResumeCommand-BBKUGhCv.cjs');
|
|
49
49
|
var webPanels = require('./webPanels-FCgFKvVe.cjs');
|
|
50
|
-
var index = require('./index-
|
|
50
|
+
var index = require('./index-BumVulwx.cjs');
|
|
51
51
|
var promises = require('node:fs/promises');
|
|
52
52
|
var cliUpdate = require('./cliUpdate-DsKXPFYp.cjs');
|
|
53
|
-
var client = require('./client-
|
|
54
|
-
var client$1 = require('./client-
|
|
55
|
-
var daemonSupervisor = require('./daemonSupervisor-
|
|
53
|
+
var client = require('./client-CTNxuHVc.cjs');
|
|
54
|
+
var client$1 = require('./client-CMIhQ32m.cjs');
|
|
55
|
+
var daemonSupervisor = require('./daemonSupervisor-alqGPANc.cjs');
|
|
56
56
|
var path$1 = require('./path-B7zW-WwE.cjs');
|
|
57
57
|
var editPaths = require('./editPaths-Bqp4OFPw.cjs');
|
|
58
|
-
var startFileWatcher = require('./startFileWatcher-
|
|
59
|
-
var sync = require('./sync-
|
|
58
|
+
var startFileWatcher = require('./startFileWatcher-BZrpUz7_.cjs');
|
|
59
|
+
var sync = require('./sync-CKSmwxec.cjs');
|
|
60
60
|
var types = require('./types-CRS-srZK.cjs');
|
|
61
61
|
var tmuxSocket = require('./tmuxSocket-D-Xt6Vn-.cjs');
|
|
62
|
-
var sessionLock = require('./sessionLock-
|
|
62
|
+
var sessionLock = require('./sessionLock-h4162Jrf.cjs');
|
|
63
63
|
var doctor$1 = require('./doctor-u46qYYKX.cjs');
|
|
64
64
|
var resources = require('./resources-CqwHPhdK.cjs');
|
|
65
65
|
var node_util = require('node:util');
|
|
66
|
-
var template = require('./template-
|
|
66
|
+
var template = require('./template-DPsqlHJQ.cjs');
|
|
67
67
|
var loginShellEnv = require('./loginShellEnv-BkuYtExZ.cjs');
|
|
68
|
-
require('./acpSessionResume-
|
|
69
|
-
require('./lidState-
|
|
68
|
+
require('./acpSessionResume-CpPNoxaW.cjs');
|
|
69
|
+
require('./lidState-BxHu6dus.cjs');
|
|
70
70
|
require('node:events');
|
|
71
71
|
require('socket.io-client');
|
|
72
|
-
require('./pushNotifications-
|
|
72
|
+
require('./pushNotifications-OtQY-Mfa.cjs');
|
|
73
73
|
require('./contentLogMetadata-ZSFk_NjQ.cjs');
|
|
74
74
|
require('./limits-C-a7gr04.cjs');
|
|
75
|
-
require('./time-
|
|
76
|
-
require('./registerCommonHandlers-
|
|
75
|
+
require('./time-DcICfW0N.cjs');
|
|
76
|
+
require('./registerCommonHandlers-De54jKz8.cjs');
|
|
77
77
|
require('util');
|
|
78
78
|
require('cross-spawn');
|
|
79
79
|
require('@paralleldrive/cuid2');
|
|
80
80
|
require('chalk');
|
|
81
81
|
require('node:module');
|
|
82
82
|
require('tweetnacl');
|
|
83
|
-
require('./browser-
|
|
83
|
+
require('./browser-C19iD31j.cjs');
|
|
84
84
|
require('open');
|
|
85
85
|
require('./ids-B6ZC0HGt.cjs');
|
|
86
86
|
require('url');
|
|
87
|
-
require('./localHappyAgentAuth-
|
|
87
|
+
require('./localHappyAgentAuth-BHklNDKQ.cjs');
|
|
88
88
|
require('./processTreeSnapshot-mDbnuojn.cjs');
|
|
89
89
|
require('ps-list');
|
|
90
90
|
|
|
@@ -4431,7 +4431,7 @@ const runNpmProcess = (args, deps = processDefaults) => new Promise((resolveResu
|
|
|
4431
4431
|
child.on("close", (code) => done({ code: timedOut ? null : code, stdout, stderr, terminationConfirmed: !timedOut || treeKilled }));
|
|
4432
4432
|
});
|
|
4433
4433
|
const runNpm = (args) => runNpmProcess(args);
|
|
4434
|
-
const defaults = {
|
|
4434
|
+
const defaults$1 = {
|
|
4435
4435
|
npm: runNpm,
|
|
4436
4436
|
fs: { lstat: promises.lstat, readlink: promises.readlink, unlink: promises.unlink, rm: promises.rm, readFile: promises.readFile, symlink: promises.symlink, access: promises.access },
|
|
4437
4437
|
platform: process.platform,
|
|
@@ -4463,7 +4463,7 @@ function ownedCliLink(link, target, packageDir) {
|
|
|
4463
4463
|
const resolved = path.resolve(path.dirname(link), target);
|
|
4464
4464
|
return resolved.startsWith(path.join(packageDir, "bin") + path.sep);
|
|
4465
4465
|
}
|
|
4466
|
-
async function installCliSafely(version, deps = defaults) {
|
|
4466
|
+
async function installCliSafely(version, deps = defaults$1) {
|
|
4467
4467
|
const parsed = cliUpdate.parseExactVersion(version);
|
|
4468
4468
|
if (!parsed) throw new Error("Invalid exact CLI version");
|
|
4469
4469
|
if (deps.platform === "win32") {
|
|
@@ -4560,6 +4560,12 @@ async function installCliSafely(version, deps = defaults) {
|
|
|
4560
4560
|
}
|
|
4561
4561
|
}
|
|
4562
4562
|
|
|
4563
|
+
const DEFAULT_BUSY_INSTALL_GRACE_MS = 15 * 6e4;
|
|
4564
|
+
function resolveBusyInstallGrace(raw) {
|
|
4565
|
+
if (raw === void 0 || raw.trim() === "") return DEFAULT_BUSY_INSTALL_GRACE_MS;
|
|
4566
|
+
const value = Number(raw);
|
|
4567
|
+
return Number.isInteger(value) && value >= 0 && value <= 24 * 60 * 6e4 ? value : DEFAULT_BUSY_INSTALL_GRACE_MS;
|
|
4568
|
+
}
|
|
4563
4569
|
function createUpdateController(deps) {
|
|
4564
4570
|
let policy = null;
|
|
4565
4571
|
let outcome = null;
|
|
@@ -4570,6 +4576,8 @@ function createUpdateController(deps) {
|
|
|
4570
4576
|
let handoverHold;
|
|
4571
4577
|
let lastPublished = "";
|
|
4572
4578
|
let autoUpdateEnabled;
|
|
4579
|
+
let busySince = null;
|
|
4580
|
+
let busyDeferred = null;
|
|
4573
4581
|
let lastInstall = (() => {
|
|
4574
4582
|
try {
|
|
4575
4583
|
return deps.lastInstall?.read() ?? null;
|
|
@@ -4636,14 +4644,29 @@ function createUpdateController(deps) {
|
|
|
4636
4644
|
publish(order === null ? "policy_stale" : "current", target);
|
|
4637
4645
|
return;
|
|
4638
4646
|
}
|
|
4647
|
+
let whileBusy = false;
|
|
4639
4648
|
if (!deps.idle()) {
|
|
4640
|
-
|
|
4641
|
-
|
|
4649
|
+
if (busySince?.version !== target) busySince = { version: target, at: now() };
|
|
4650
|
+
whileBusy = !!deps.installWhileBusy && busyDeferred?.version !== target && !deps.installFenced?.() && now() - busySince.at >= (deps.busyGraceMs ?? DEFAULT_BUSY_INSTALL_GRACE_MS);
|
|
4651
|
+
if (!whileBusy) {
|
|
4652
|
+
publish("waiting_idle", target, busyDeferred?.version === target ? busyDeferred.reason : void 0);
|
|
4653
|
+
return;
|
|
4654
|
+
}
|
|
4642
4655
|
}
|
|
4643
4656
|
running = true;
|
|
4644
|
-
publish("installing", target);
|
|
4657
|
+
publish("installing", target, whileBusy ? "while_busy" : void 0);
|
|
4645
4658
|
try {
|
|
4646
|
-
const code = await deps.install(target);
|
|
4659
|
+
const code = whileBusy ? await deps.installWhileBusy(target) : await deps.install(target);
|
|
4660
|
+
if (code && typeof code === "object" && "deferred" in code) {
|
|
4661
|
+
busyDeferred = { version: target, reason: code.deferred };
|
|
4662
|
+
publish("waiting_idle", target, code.deferred);
|
|
4663
|
+
return;
|
|
4664
|
+
}
|
|
4665
|
+
if (code && typeof code === "object" && "blocked" in code) {
|
|
4666
|
+
blocked = true;
|
|
4667
|
+
publish("manual_required", target, code.blocked);
|
|
4668
|
+
return;
|
|
4669
|
+
}
|
|
4647
4670
|
if (code && typeof code === "object") {
|
|
4648
4671
|
if ("manual" in code) publish("manual_required", target, code.manual);
|
|
4649
4672
|
else publish("failed", target, code.failed);
|
|
@@ -4761,6 +4784,134 @@ function createUpdateController(deps) {
|
|
|
4761
4784
|
return { refresh, retry, request, tick, withHandover, holdHandover, isRunning: () => running, currentTarget: () => policy?.autoUpdateVersion ?? null };
|
|
4762
4785
|
}
|
|
4763
4786
|
|
|
4787
|
+
const defaults = {
|
|
4788
|
+
npm: runNpm,
|
|
4789
|
+
fs: { lstat: promises.lstat, readlink: promises.readlink, readFile: promises.readFile, readdir: promises.readdir, copyFile: promises.copyFile, mkdir: promises.mkdir, rename: promises.rename, rm: promises.rm, access: promises.access },
|
|
4790
|
+
platform: process.platform,
|
|
4791
|
+
runningPackageDir: projectPath.projectPath(),
|
|
4792
|
+
now: Date.now
|
|
4793
|
+
};
|
|
4794
|
+
const MANAGED_BINS = ["very-happy", "very-happy-mcp"];
|
|
4795
|
+
async function manifest(dir, deps) {
|
|
4796
|
+
try {
|
|
4797
|
+
return JSON.parse(await deps.fs.readFile(path.join(dir, "package.json"), "utf8"));
|
|
4798
|
+
} catch {
|
|
4799
|
+
return null;
|
|
4800
|
+
}
|
|
4801
|
+
}
|
|
4802
|
+
async function isFile(path, deps) {
|
|
4803
|
+
const stat = await deps.fs.lstat(path).catch(() => null);
|
|
4804
|
+
return !!stat?.isFile();
|
|
4805
|
+
}
|
|
4806
|
+
function packageRelative(path$1) {
|
|
4807
|
+
const normalized = path.relative("/pkg", path.resolve("/pkg", path$1));
|
|
4808
|
+
return normalized && !normalized.startsWith("..") && !normalized.startsWith(path.sep) ? normalized : null;
|
|
4809
|
+
}
|
|
4810
|
+
async function binsUnchanged(stagedDir, liveDir, prefix, deps) {
|
|
4811
|
+
const staged = await manifest(stagedDir, deps);
|
|
4812
|
+
const bin = staged?.bin;
|
|
4813
|
+
if (!bin || typeof bin !== "object") return "staged_bin_map_unreadable";
|
|
4814
|
+
const names = Object.keys(bin).sort();
|
|
4815
|
+
if (names.join(",") !== [...MANAGED_BINS].sort().join(",")) return "staged_bin_map_changed";
|
|
4816
|
+
for (const name of MANAGED_BINS) {
|
|
4817
|
+
const target = packageRelative(String(bin[name]));
|
|
4818
|
+
if (!target || !await isFile(path.join(stagedDir, target), deps)) return "staged_bin_missing";
|
|
4819
|
+
const link = path.join(prefix, "bin", name);
|
|
4820
|
+
const stat = await deps.fs.lstat(link).catch(() => null);
|
|
4821
|
+
if (!stat?.isSymbolicLink()) return "live_bin_not_linked";
|
|
4822
|
+
const linkTarget = await deps.fs.readlink(link);
|
|
4823
|
+
if (!ownedCliLink(link, linkTarget, liveDir)) return "live_bin_not_owned";
|
|
4824
|
+
if (path.relative(liveDir, path.resolve(path.dirname(link), linkTarget)) !== target) return "staged_bin_map_changed";
|
|
4825
|
+
}
|
|
4826
|
+
return null;
|
|
4827
|
+
}
|
|
4828
|
+
async function keepOldChunks(liveDir, stagedDir, deps, sub = "dist") {
|
|
4829
|
+
const live = await deps.fs.readdir(path.join(liveDir, sub)).catch(() => []);
|
|
4830
|
+
const staged = new Set(await deps.fs.readdir(path.join(stagedDir, sub)).catch(() => []));
|
|
4831
|
+
let kept = 0;
|
|
4832
|
+
for (const name of live) {
|
|
4833
|
+
if (path.basename(name) !== name) continue;
|
|
4834
|
+
const from = path.join(liveDir, sub, name);
|
|
4835
|
+
const stat = await deps.fs.lstat(from).catch(() => null);
|
|
4836
|
+
if (stat?.isDirectory()) {
|
|
4837
|
+
if (!staged.has(name)) await deps.fs.mkdir(path.join(stagedDir, sub, name));
|
|
4838
|
+
kept += await keepOldChunks(liveDir, stagedDir, deps, path.join(sub, name));
|
|
4839
|
+
continue;
|
|
4840
|
+
}
|
|
4841
|
+
if (staged.has(name) || !stat?.isFile()) continue;
|
|
4842
|
+
await deps.fs.copyFile(from, path.join(stagedDir, sub, name), node_fs.constants.COPYFILE_EXCL);
|
|
4843
|
+
kept++;
|
|
4844
|
+
}
|
|
4845
|
+
return kept;
|
|
4846
|
+
}
|
|
4847
|
+
async function installCliStaged(version, deps = defaults) {
|
|
4848
|
+
const parsed = cliUpdate.parseExactVersion(version);
|
|
4849
|
+
if (!parsed) throw new Error("Invalid exact CLI version");
|
|
4850
|
+
if (deps.platform === "win32") return { outcome: { deferred: "staged_install_unsupported" } };
|
|
4851
|
+
const liveDir = deps.runningPackageDir;
|
|
4852
|
+
const prefix = liveDir ? doctor.globalPrefixForPackage(liveDir) : null;
|
|
4853
|
+
if (!liveDir || !prefix) return { outcome: { manual: "install_location_unverified" } };
|
|
4854
|
+
const liveStat = await deps.fs.lstat(liveDir).catch(() => null);
|
|
4855
|
+
const live = await manifest(liveDir, deps);
|
|
4856
|
+
if (!liveStat?.isDirectory() || liveStat.isSymbolicLink() || live?.name !== "very-happy-cli" || typeof live.version !== "string") {
|
|
4857
|
+
return { outcome: { manual: "install_location_unverified" } };
|
|
4858
|
+
}
|
|
4859
|
+
const root = path.dirname(liveDir);
|
|
4860
|
+
try {
|
|
4861
|
+
await deps.fs.access(root, node_fs.constants.W_OK);
|
|
4862
|
+
await deps.fs.access(liveDir, node_fs.constants.W_OK);
|
|
4863
|
+
} catch {
|
|
4864
|
+
return { outcome: { manual: "install_location_not_writable" } };
|
|
4865
|
+
}
|
|
4866
|
+
const stagePrefix = path.join(root, `.very-happy-cli-stage-${parsed.exact}`);
|
|
4867
|
+
const stagedDir = path.join(stagePrefix, "lib", "node_modules", "very-happy-cli");
|
|
4868
|
+
const retiredDir = path.join(root, `.very-happy-cli-retired-${live.version}-${deps.now()}`);
|
|
4869
|
+
const cleanup = async (path) => {
|
|
4870
|
+
await deps.fs.rm(path, { recursive: true, force: true }).catch(() => void 0);
|
|
4871
|
+
};
|
|
4872
|
+
await cleanup(stagePrefix);
|
|
4873
|
+
let swapped = false;
|
|
4874
|
+
try {
|
|
4875
|
+
const result = await deps.npm(autoUpdateInstallArgs(parsed.exact, stagePrefix));
|
|
4876
|
+
if (result.terminationConfirmed === false) return { outcome: "blocked" };
|
|
4877
|
+
if (result.code !== 0) return { outcome: result.code };
|
|
4878
|
+
const staged = await manifest(stagedDir, deps);
|
|
4879
|
+
if (staged?.name !== "very-happy-cli" || staged.version !== parsed.exact) return { outcome: { deferred: "staged_package_unverified" } };
|
|
4880
|
+
const binProblem = await binsUnchanged(stagedDir, liveDir, prefix, deps);
|
|
4881
|
+
if (binProblem) return { outcome: { deferred: binProblem } };
|
|
4882
|
+
let keptChunks;
|
|
4883
|
+
try {
|
|
4884
|
+
keptChunks = await keepOldChunks(liveDir, stagedDir, deps);
|
|
4885
|
+
} catch {
|
|
4886
|
+
return { outcome: { deferred: "staged_copy_failed" } };
|
|
4887
|
+
}
|
|
4888
|
+
try {
|
|
4889
|
+
await deps.fs.rename(liveDir, retiredDir);
|
|
4890
|
+
} catch {
|
|
4891
|
+
return { outcome: { deferred: "staged_retire_failed" } };
|
|
4892
|
+
}
|
|
4893
|
+
try {
|
|
4894
|
+
await deps.fs.rename(stagedDir, liveDir);
|
|
4895
|
+
} catch {
|
|
4896
|
+
try {
|
|
4897
|
+
await deps.fs.rename(retiredDir, liveDir);
|
|
4898
|
+
} catch {
|
|
4899
|
+
return { outcome: { blocked: "staged_rollback_failed", retiredDir }, keptChunks };
|
|
4900
|
+
}
|
|
4901
|
+
return { outcome: { deferred: "staged_swap_failed" } };
|
|
4902
|
+
}
|
|
4903
|
+
swapped = true;
|
|
4904
|
+
const installed = await manifest(liveDir, deps);
|
|
4905
|
+
return { outcome: installed?.version === parsed.exact ? 0 : { failed: "installed_elsewhere" }, keptChunks };
|
|
4906
|
+
} finally {
|
|
4907
|
+
await cleanup(stagePrefix);
|
|
4908
|
+
if (swapped) {
|
|
4909
|
+
await cleanup(retiredDir);
|
|
4910
|
+
await cleanup(path.join(root, ".package-lock.json"));
|
|
4911
|
+
}
|
|
4912
|
+
}
|
|
4913
|
+
}
|
|
4914
|
+
|
|
4764
4915
|
function parseLastInstall(raw) {
|
|
4765
4916
|
if (!raw || typeof raw !== "object") return null;
|
|
4766
4917
|
const { from, to, at, source } = raw;
|
|
@@ -8446,6 +8597,17 @@ async function startDaemon() {
|
|
|
8446
8597
|
const daemonSupervisor$1 = daemonSupervisor.detectDaemonSupervisor(process.env, process.platform, launchdJob);
|
|
8447
8598
|
const lineage = daemonSupervisor.daemonLineage(daemonSupervisor$1, process.env, process.platform, launchdJob);
|
|
8448
8599
|
logger.logger.debug(`[DAEMON RUN] Supervisor: ${daemonSupervisor$1} (lineage ${lineage}${launchdJob ? `, launchd job pid ${launchdJob.jobPid ?? "-"}` : ""})`);
|
|
8600
|
+
const systemdKillMode = daemonSupervisor$1 === "systemd" ? await daemonSupervisor.probeSystemdKillMode() : null;
|
|
8601
|
+
const handoverSparesWrappers = daemonSupervisor.wrappersSurviveHandover({
|
|
8602
|
+
supervisor: daemonSupervisor$1,
|
|
8603
|
+
env: process.env,
|
|
8604
|
+
platform: process.platform,
|
|
8605
|
+
pid: process.pid,
|
|
8606
|
+
ppid: process.ppid,
|
|
8607
|
+
inContainer: require$$0.existsSync("/.dockerenv") || require$$0.existsSync("/run/.containerenv"),
|
|
8608
|
+
systemdKillMode
|
|
8609
|
+
});
|
|
8610
|
+
logger.logger.debug(`[DAEMON RUN] Handover spares wrappers: ${handoverSparesWrappers}${daemonSupervisor$1 === "systemd" ? ` (KillMode ${systemdKillMode ?? "unknown"})` : ""}`);
|
|
8449
8611
|
let fileState = {
|
|
8450
8612
|
pid: process.pid,
|
|
8451
8613
|
httpPort: controlPort,
|
|
@@ -8579,6 +8741,15 @@ async function startDaemon() {
|
|
|
8579
8741
|
// whose turn ended but still has background tasks is busy too.
|
|
8580
8742
|
idle: () => !turnActivity.hasActiveTurn() && !backgroundTasks.hasAny() && !harnessInstaller?.isRunning(),
|
|
8581
8743
|
install: installCliSafely,
|
|
8744
|
+
// B-817: a machine that is never idle installs after the grace period
|
|
8745
|
+
// through the staged path, which never leaves the live tree incomplete.
|
|
8746
|
+
installWhileBusy: async (version) => {
|
|
8747
|
+
const report = await installCliStaged(version);
|
|
8748
|
+
logger.logger.warn(`[DAEMON RUN] CLI update: staged install while busy -> ${JSON.stringify(report.outcome)} keptChunks=${report.keptChunks ?? 0}`);
|
|
8749
|
+
return report.outcome;
|
|
8750
|
+
},
|
|
8751
|
+
installFenced: () => !!harnessInstaller?.isRunning(),
|
|
8752
|
+
busyGraceMs: resolveBusyInstallGrace(process.env.HAPPY_CLI_UPDATE_BUSY_GRACE_MS),
|
|
8582
8753
|
lastInstall: lastInstallStore(configuration.configuration.happyHomeDir),
|
|
8583
8754
|
publish: (state) => {
|
|
8584
8755
|
cliUpdateStateRef = state;
|
|
@@ -8680,7 +8851,8 @@ async function startDaemon() {
|
|
|
8680
8851
|
}
|
|
8681
8852
|
}
|
|
8682
8853
|
const relayMove = pendingRelayMove;
|
|
8683
|
-
|
|
8854
|
+
const sessionsHold = () => daemonSupervisor.handoverWaitsForSessions({ bundleReplaced, relayMove: !!relayMove, sparesWrappers: handoverSparesWrappers }) && (turnActivity.hasActiveTurn() || backgroundTasks.hasAny());
|
|
8855
|
+
if ((bundleReplaced || relayMove) && !teamWorker?.busy && !automationRunner?.busy && !updateController.isRunning() && !harnessInstaller?.isRunning() && !sessionsHold()) {
|
|
8684
8856
|
const preflight = bundleReplaced ? await preflightNewBundle(bundlePath) : { action: "proceed" };
|
|
8685
8857
|
if (preflight.action === "hold") {
|
|
8686
8858
|
if (lastHandoverHold !== preflight.reason) {
|
|
@@ -8690,7 +8862,7 @@ async function startDaemon() {
|
|
|
8690
8862
|
updateController.holdHandover(preflight.reason);
|
|
8691
8863
|
return;
|
|
8692
8864
|
}
|
|
8693
|
-
if (teamWorker?.busy || automationRunner?.busy || updateController.isRunning() || harnessInstaller?.isRunning() ||
|
|
8865
|
+
if (teamWorker?.busy || automationRunner?.busy || updateController.isRunning() || harnessInstaller?.isRunning() || sessionsHold()) return;
|
|
8694
8866
|
lastHandoverHold = null;
|
|
8695
8867
|
logger.logger.debug(relayMove ? `[DAEMON RUN] Relay moved to ${relayMove.serverUrl}; handing off to a new daemon on the new settings` : "[DAEMON RUN] Daemon bundle replaced on disk and verified, handing off to new daemon");
|
|
8696
8868
|
teamWorker?.stop();
|