very-happy-cli 0.2.205 → 0.2.207
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-BqkDMgcN.mjs → AcpBackend-Bl-oWkHt.mjs} +3 -3
- package/dist/{AcpBackend-Do37yiZg.cjs → AcpBackend-C4SaE4IN.cjs} +3 -3
- package/dist/{AcpSessionManager-BpQKu2_m.cjs → AcpSessionManager-CKSM-N3a.cjs} +1 -1
- package/dist/{AcpSessionManager-CvEO7Yex.mjs → AcpSessionManager-DqNWNKVy.mjs} +1 -1
- package/dist/{BasePermissionHandler-BpaIn9ko.mjs → BasePermissionHandler-BAfjjqWG.mjs} +1 -1
- package/dist/{BasePermissionHandler-CUXi-tq4.cjs → BasePermissionHandler-DffP0tjT.cjs} +1 -1
- package/dist/{account-C1nsl3ij.mjs → account-CneNvaLv.mjs} +5 -5
- package/dist/{account-SwG5Yefp.cjs → account-pH6JQJbQ.cjs} +5 -5
- package/dist/{acpSessionResume-DvDKsJTV.mjs → acpSessionResume-C6KuYvK8.mjs} +1 -1
- package/dist/{acpSessionResume-BCEol11N.cjs → acpSessionResume-Cp2majJ5.cjs} +1 -1
- package/dist/{agentHome-BuFxooEg.mjs → agentHome-BkiHrQwj.mjs} +4 -4
- package/dist/{agentHome-8wzmbm0H.cjs → agentHome-ZGpu5XKy.cjs} +4 -4
- package/dist/{api-20GbdpxY.mjs → api-D7EAwOT2.mjs} +9 -9
- package/dist/{api-BnTF8fkj.cjs → api-eXuwG3LS.cjs} +9 -9
- package/dist/{apiMachine-C8NGJHHd.mjs → apiMachine-B5c9zCjB.mjs} +56 -16
- package/dist/{apiMachine-cyDRM_S-.cjs → apiMachine-B8ZxgTx1.cjs} +56 -16
- package/dist/{attachmentContent-Coo9lUxK.mjs → attachmentContent-DV7W3vw7.mjs} +2 -2
- package/dist/{attachmentContent-B7zz_LPF.cjs → attachmentContent-DhTreh-W.cjs} +2 -2
- package/dist/{auth-By6u_iKB.cjs → auth-CFUuiMdV.cjs} +5 -5
- package/dist/{auth-75rP3vc0.mjs → auth-DX3_VbOL.mjs} +8 -8
- package/dist/{auth-w4UTRbIf.cjs → auth-DhZkCYgz.cjs} +8 -8
- package/dist/{auth-BX6xrdHv.mjs → auth-hEcrRFkt.mjs} +5 -5
- package/dist/{auto-BhmWtRvv.mjs → auto-BI4y9q_F.mjs} +14 -14
- package/dist/{auto-xr_gqUoy.cjs → auto-C4fniaPr.cjs} +14 -14
- package/dist/{bootstrap-Dn_VvHSt.mjs → bootstrap-CBoerZOm.mjs} +2 -2
- package/dist/{bootstrap-3ti7LXMz.cjs → bootstrap-DPbGC_1B.cjs} +2 -2
- package/dist/{browser-C4PVyjGe.cjs → browser-BRH_1Tgz.cjs} +1 -1
- package/dist/{browser-C4wWGXH7.mjs → browser-ilsUkzwR.mjs} +1 -1
- package/dist/{claudeLocal-B8rOA-EB.mjs → claudeLocal-CmRDtqcj.mjs} +4 -4
- package/dist/{claudeLocal-DZALKVVc.cjs → claudeLocal-D6-w4R7R.cjs} +4 -4
- package/dist/{claudeLocalLauncher-CJPRSv3z.mjs → claudeLocalLauncher-B9gzCvDn.mjs} +9 -9
- package/dist/{claudeLocalLauncher-Bf5uj0EA.cjs → claudeLocalLauncher-D93IuVcy.cjs} +9 -9
- package/dist/{claudeSessionFork-unEBLW0t.cjs → claudeSessionFork-Bo-LD1DH.cjs} +1 -1
- package/dist/{claudeSessionFork-BK4U655i.mjs → claudeSessionFork-ghL7gnlU.mjs} +1 -1
- package/dist/{client-Bh-y6cVc.cjs → client-5SAqN0dw.cjs} +4 -4
- package/dist/{client-BbYds4AV.mjs → client-BGLgYzYC.mjs} +4 -4
- package/dist/{client-DGsdLx8L.cjs → client-BcUWsWK-.cjs} +2 -2
- package/dist/{client-wMlUPnrV.cjs → client-CTsx4zlq.cjs} +2 -2
- package/dist/{client-BxtaglBR.mjs → client-DCFPJD00.mjs} +2 -2
- package/dist/{client-m-K1b6Qa.mjs → client-DTwpdW59.mjs} +2 -2
- package/dist/{client-CvLm25Wq.mjs → client-DhnaMxKS.mjs} +2 -2
- package/dist/{client-BKjBr6pc.cjs → client-N9svGBOP.cjs} +2 -2
- package/dist/codex/happyMcpStdioBridge.cjs +18 -18
- package/dist/codex/happyMcpStdioBridge.mjs +18 -18
- package/dist/{codexAppServerClient-6aQelpRl.cjs → codexAppServerClient-3mdddlO9.cjs} +3 -3
- package/dist/{codexAppServerClient-BeRimnu9.mjs → codexAppServerClient-CBVlr7hu.mjs} +3 -3
- package/dist/{codexCommand-CmGNDs45.mjs → codexCommand-BP88QTCU.mjs} +43 -43
- package/dist/{codexCommand-CYVaGmhh.cjs → codexCommand-Bps4LkvI.cjs} +43 -43
- package/dist/{codexTermination-B09HyYIB.cjs → codexTermination-C9CVmb9Q.cjs} +1 -1
- package/dist/{codexTermination-Z18pGkkl.mjs → codexTermination-CUPmLwbF.mjs} +1 -1
- package/dist/{config-Dq_N615Z.cjs → config-O4t1U8Bi.cjs} +3 -3
- package/dist/{config-4b-sF37g.mjs → config-eTAvnx-a.mjs} +3 -3
- package/dist/{configuration-Fx61b4MJ.cjs → configuration-B-smHMf7.cjs} +1 -1
- package/dist/{configuration-H8q1sMwk.mjs → configuration-C4w7_yT9.mjs} +1 -1
- package/dist/{connect-D54AnDIT.cjs → connect-BGZmkECR.cjs} +12 -12
- package/dist/{connect-BwSwKPzI.mjs → connect-BJT1vGf-.mjs} +12 -12
- package/dist/{context-CM1Xd_HO.mjs → context-Cy2pdGOi.mjs} +1 -1
- package/dist/{context-D-QOcYuX.cjs → context-Dfj4Pjqz.cjs} +1 -1
- package/dist/{controlClient-D9DYqW02.mjs → controlClient-CtBRHlbJ.mjs} +3 -3
- package/dist/{controlClient-D04wXKoQ.cjs → controlClient-Dlm7wz-k.cjs} +3 -3
- package/dist/{createSessionMetadata-Ce539QXK.cjs → createSessionMetadata-B1NbiqH5.cjs} +2 -2
- package/dist/{createSessionMetadata-CHa4pufa.mjs → createSessionMetadata-DqBHMEgs.mjs} +2 -2
- package/dist/{deterministicJson-BEeXnWCF.mjs → deterministicJson-B94VfD9g.mjs} +14 -14
- package/dist/{deterministicJson-D34CnNHO.cjs → deterministicJson-DGheByZm.cjs} +14 -14
- package/dist/{doctor-BX8oWKZq.cjs → doctor-CdXBxTms.cjs} +7 -7
- package/dist/{doctor-BI0Iywt_.mjs → doctor-D3Ph5EzU.mjs} +7 -7
- package/dist/{downloadTarget-TzXJEh6W.cjs → downloadTarget-BpToCct7.cjs} +6 -6
- package/dist/{downloadTarget-DX3m00OE.mjs → downloadTarget-DBDqU17k.mjs} +6 -6
- package/dist/{ensureDaemonRunning-BBBqZ6vQ.mjs → ensureDaemonRunning-7J9kb-Sj.mjs} +5 -5
- package/dist/{ensureDaemonRunning-Bvu-yyFn.cjs → ensureDaemonRunning-Balq1x5B.cjs} +5 -5
- package/dist/{exitNotice-M4UjtWkr.cjs → exitNotice-CTcWpCmg.cjs} +2 -2
- package/dist/{exitNotice-gOAdDcL3.mjs → exitNotice-DkJaD0I0.mjs} +2 -2
- package/dist/{format-BPAREVhi.mjs → format-0c3qb7FE.mjs} +1 -1
- package/dist/{format-BEktLc45.cjs → format-DoTTSy8C.cjs} +1 -1
- package/dist/{handleResumeCommand-DziiqogX.mjs → handleResumeCommand-BUIHxf87.mjs} +5 -5
- package/dist/{handleResumeCommand-6dYW_WOi.cjs → handleResumeCommand-Dp-rTs9Q.cjs} +5 -5
- package/dist/{index-UuWDafdi.mjs → index-B-hkUPYN.mjs} +41 -41
- package/dist/{index-CzBvl9py.mjs → index-BlUhrNAx.mjs} +3 -3
- package/dist/{index-Cawt-fgZ.cjs → index-CP6WBAk_.cjs} +4 -4
- package/dist/{index-BRq5iitn.mjs → index-D47YHzru.mjs} +4 -4
- package/dist/{index-DCvq8Cfw.mjs → index-DE5JMca_.mjs} +4 -4
- package/dist/{index-bVMcFi7v.cjs → index-DMhMr4cb.cjs} +4 -4
- package/dist/{index-BmacwzcK.cjs → index-DWtaNZd1.cjs} +40 -40
- package/dist/{index-CoW4RNEb.cjs → index-Du6DD3Re.cjs} +3 -3
- package/dist/index.cjs +2 -2
- package/dist/index.mjs +2 -2
- package/dist/{install-B4OVUIw5.mjs → install-CwQRBYJL.mjs} +3 -3
- package/dist/{install-BQc4Hwuo.cjs → install-Sr04Bhi-.cjs} +3 -3
- package/dist/{issue-h_BIrzLs.mjs → issue-D9rmZ2Im.mjs} +7 -7
- package/dist/{issue-WpLZYxUQ.cjs → issue-pnYFBO-F.cjs} +7 -7
- package/dist/lib.cjs +11 -11
- package/dist/lib.d.cts +65 -0
- package/dist/lib.d.mts +65 -0
- package/dist/lib.mjs +11 -11
- package/dist/{localHappyAgentAuth-DgLh3xzW.mjs → localHappyAgentAuth-Bc3bo0fI.mjs} +1 -1
- package/dist/{localHappyAgentAuth-DQRWBUxQ.cjs → localHappyAgentAuth-BpBQ_aFo.cjs} +1 -1
- package/dist/{logger-BKAKIZdy.mjs → logger-8f-WNgus.mjs} +2 -2
- package/dist/{logger-DP35yx-C.cjs → logger-HxTu5uFs.cjs} +2 -2
- package/dist/{machineMetadata-CZj0XwM_.cjs → machineMetadata-C7DEm41X.cjs} +3 -3
- package/dist/{machineMetadata-DTlMMhj_.mjs → machineMetadata-EyybyGYp.mjs} +3 -3
- package/dist/{main-l_nP9IQq.cjs → main-CW8xXpXM.cjs} +48 -48
- package/dist/{main-BIE1zeaH.mjs → main-Dmb6KKtB.mjs} +48 -48
- package/dist/{mcp-KQHODyR3.cjs → mcp-BHKpSJPk.cjs} +15 -15
- package/dist/{mcp-B5F6-_7o.mjs → mcp-DAuW3X2i.mjs} +15 -15
- package/dist/{mirrorProtocol-duXHJeBW.cjs → mirrorProtocol-Cmxr0YBU.cjs} +2 -2
- package/dist/{mirrorProtocol-DDOUSWqL.mjs → mirrorProtocol-kXv1EaAI.mjs} +2 -2
- package/dist/{package-BCJfNMlt.cjs → package-ChmhpzsE.cjs} +8 -8
- package/dist/{package-CMmhJwSf.mjs → package-Cp8RjVmm.mjs} +8 -8
- package/dist/{panels-CBlIJIu8.cjs → panels-iylFFXPZ.cjs} +5 -5
- package/dist/{panels-BWxZMb_x.mjs → panels-x99J6c1O.mjs} +5 -5
- package/dist/{peerTools-C6Y28jqG.cjs → peerTools-ZUDz2PCs.cjs} +5 -5
- package/dist/{peerTools-ZJzoM48N.mjs → peerTools-jWghbgAH.mjs} +5 -5
- package/dist/{persistence-dLgWDclq.mjs → persistence-D1E7jiV4.mjs} +2 -2
- package/dist/{persistence-iiVFxhbt.cjs → persistence-DxboRqwb.cjs} +2 -2
- package/dist/{piRunnerArgs-DuWYye4f.mjs → piRunnerArgs-BM9b8W_4.mjs} +1 -1
- package/dist/{piRunnerArgs-DxWxgOSZ.cjs → piRunnerArgs-gNYQH48T.cjs} +1 -1
- package/dist/{piRuntime-Cbwk6bN0.mjs → piRuntime-B6X6ax5K.mjs} +1 -1
- package/dist/{piRuntime-6UnkPaS1.cjs → piRuntime-mqdaYw91.cjs} +1 -1
- package/dist/{piTerminal-BaoUqlM0.cjs → piTerminal-D-bOYy3E.cjs} +17 -17
- package/dist/{piTerminal-Dn0qN9nb.mjs → piTerminal-DaoQF1Rn.mjs} +17 -17
- package/dist/{pushNotifications-gcQv61e6.cjs → pushNotifications-EJWZAYed.cjs} +19 -2
- package/dist/{pushNotifications-DD9Z0CoN.mjs → pushNotifications-WgO2p0eT.mjs} +19 -2
- package/dist/{query-CFdlRD7b.mjs → query-BGtAkN33.mjs} +1 -1
- package/dist/{query-12momZSq.cjs → query-ykhx5AZx.cjs} +1 -1
- package/dist/{rateLimitWindows-CVS-btq-.mjs → rateLimitWindows-BRImToc6.mjs} +1 -1
- package/dist/{rateLimitWindows-D2Gmg7jU.cjs → rateLimitWindows-Cfdnt4On.cjs} +1 -1
- package/dist/{reconnectGate-m81ySKhh.mjs → reconnectGate-B9iXSyiI.mjs} +1 -1
- package/dist/{reconnectGate-BkSaZdIx.cjs → reconnectGate-DY97bPDg.cjs} +1 -1
- package/dist/{registerCommonHandlers-CqLHkmG2.mjs → registerCommonHandlers-YbBzC20u.mjs} +2 -2
- package/dist/{registerCommonHandlers-B5p3ZZmp.cjs → registerCommonHandlers-YsrcwRo3.cjs} +2 -2
- package/dist/{registerKillSessionHandler-Bf_Q9yii.cjs → registerKillSessionHandler-ClPpvQnu.cjs} +5 -5
- package/dist/{registerKillSessionHandler-jYSuGIP1.mjs → registerKillSessionHandler-d3rziH37.mjs} +5 -5
- package/dist/{registerSideQuestionHandler-CPR29B9d.mjs → registerSideQuestionHandler-C3K33AGg.mjs} +4 -4
- package/dist/{registerSideQuestionHandler-DSIw3xPW.cjs → registerSideQuestionHandler-CMvcaD2A.cjs} +4 -4
- package/dist/{remoteSessionClient-CLuxs0_y.mjs → remoteSessionClient-B1C7gwqX.mjs} +5 -5
- package/dist/{remoteSessionClient-DX-60nto.cjs → remoteSessionClient-e9jDdGyc.cjs} +5 -5
- package/dist/{reportProgressTool-k3g3D6cX.mjs → reportProgressTool-67vB9Y7g.mjs} +4 -4
- package/dist/{reportProgressTool-D1XAxeY1.cjs → reportProgressTool-B3yNkD_S.cjs} +4 -4
- package/dist/{run-BBJqaIoY.mjs → run-BjpvcAAW.mjs} +269 -37
- package/dist/{run-DOb_agpA.cjs → run-c4votzBI.cjs} +269 -37
- package/dist/{runClaude-NTvReMNp.mjs → runClaude-B1NEkS3e.mjs} +20 -20
- package/dist/{runClaude-BU3Lrd5o.cjs → runClaude-DkaZHsDR.cjs} +20 -20
- package/dist/{runClaudeDeps-DQV-QdDi.cjs → runClaudeDeps-C8s0t81_.cjs} +38 -38
- package/dist/{runClaudeDeps-Dh2LVY2w.mjs → runClaudeDeps-JYJCSgT2.mjs} +44 -44
- package/dist/{runGemini-CGD4bqQ3.mjs → runGemini-Bgmlv2sP.mjs} +35 -35
- package/dist/{runGemini-dk877ztP.cjs → runGemini-m1e3OwXi.cjs} +35 -35
- package/dist/{runOpenClaw-CQakHPPq.cjs → runOpenClaw-B5iSbZvU.cjs} +17 -17
- package/dist/{runOpenClaw-6MAJ_tHi.mjs → runOpenClaw-BTry3E0Y.mjs} +17 -17
- package/dist/{sandbox-B3YMD9I6.mjs → sandbox-BPZsegqb.mjs} +4 -4
- package/dist/{sandbox-8DeDre0R.cjs → sandbox-D-irSe8t.cjs} +4 -4
- package/dist/{selfCheck-BpvUNBmv.cjs → selfCheck-08_EII_I.cjs} +39 -39
- package/dist/selfCheck-BPzN6ip2.mjs +89 -0
- package/dist/{send-DgrbVZzC.mjs → send-4esWxXzr.mjs} +8 -8
- package/dist/{send-Bym_IU4n.cjs → send-DUNnoCVK.cjs} +8 -8
- package/dist/{server-CmAgeEhS.mjs → server-Bn1QXAY4.mjs} +4 -4
- package/dist/{server-BY-FubRe.cjs → server-NG8ODDc_.cjs} +6 -6
- package/dist/{sessionLock-BMtAQ4bW.mjs → sessionLock-BKnXIWnQ.mjs} +9 -4
- package/dist/{sessionLock-WXtjQC9q.cjs → sessionLock-CW-P7VU9.cjs} +9 -3
- package/dist/{sessionOps-BEVzE38e.cjs → sessionOps-Cei-Q7OB.cjs} +4 -4
- package/dist/{sessionOps-BxLhHEhM.mjs → sessionOps-Ct7ayY1X.mjs} +4 -4
- package/dist/{sessionProvider-B1tL5K5f.mjs → sessionProvider-D8bZBiAX.mjs} +5 -5
- package/dist/{sessionProvider-DCnZFxwe.cjs → sessionProvider-DoXNlG4E.cjs} +5 -5
- package/dist/{sessionScanner-eX2f-j0u.cjs → sessionScanner-CGs_Lbq7.cjs} +3 -3
- package/dist/{sessionScanner-Ctm9w-AJ.mjs → sessionScanner-DivfvOis.mjs} +3 -3
- package/dist/{sessions-BuxOqRcc.mjs → sessions-DN47YSMs.mjs} +10 -10
- package/dist/{sessions-BG8r7uht.cjs → sessions-VYh46wvf.cjs} +10 -10
- package/dist/{setupOfflineReconnection-65k1yEFn.cjs → setupOfflineReconnection-DHBmg5_6.cjs} +2 -2
- package/dist/{setupOfflineReconnection-Dd4NCN9i.mjs → setupOfflineReconnection-DqeCU4SM.mjs} +2 -2
- package/dist/{spawn-wys_MPgK.mjs → spawn-ChyfhZlN.mjs} +12 -12
- package/dist/{spawn-0YaC-DQg.cjs → spawn-DQLUI6h9.cjs} +12 -12
- package/dist/{spawnHappyCLI-EvPb0jB3.mjs → spawnHappyCLI-D6R-aIkL.mjs} +1 -1
- package/dist/{spawnHappyCLI-Bf_N42fi.cjs → spawnHappyCLI-DIR-U_rK.cjs} +1 -1
- package/dist/{startFileWatcher-GF4BNFA1.mjs → startFileWatcher-CQCQrB3d.mjs} +1 -1
- package/dist/{startFileWatcher-ikipjpDk.cjs → startFileWatcher-Qy7f8U4k.cjs} +1 -1
- package/dist/{startupSessionCreate-Dp3_kvi_.mjs → startupSessionCreate-BgoNJdcx.mjs} +3 -3
- package/dist/{startupSessionCreate-CHU23k6u.cjs → startupSessionCreate-cInaqBEd.cjs} +3 -3
- package/dist/{sync-Dm6GaS8P.cjs → sync-DS_emV3g.cjs} +1 -1
- package/dist/{sync-Co0wRhGu.mjs → sync-DzKT0Ova.mjs} +1 -1
- package/dist/{systemPrompt-Ds7HcfDZ.cjs → systemPrompt-DVy690s2.cjs} +1 -1
- package/dist/{systemPrompt-5cZbY0sf.mjs → systemPrompt-rpf-Xff-.mjs} +1 -1
- package/dist/{teams-DBWFUOC3.mjs → teams-CbqS5j_2.mjs} +8 -8
- package/dist/{teams-nrcZL-1X.cjs → teams-DwBVRsbw.cjs} +8 -8
- package/dist/{time-NSglRbyr.cjs → time-i8fiLSHv.cjs} +1 -1
- package/dist/{time-Cn0mV-di.mjs → time-o_AW-82H.mjs} +1 -1
- package/dist/{titleGenerator-CMIUB04_.cjs → titleGenerator-EGdbOCLR.cjs} +2 -2
- package/dist/{titleGenerator-hmxUR3rU.mjs → titleGenerator-rKTQTQN7.mjs} +1 -1
- package/dist/{todo-CDdBityL.mjs → todo-CWyVxUyT.mjs} +7 -7
- package/dist/{todo-D5BoNMb7.cjs → todo-d8aPaBq_.cjs} +7 -7
- package/dist/{tools-BmQbzAfY.mjs → tools--22wuNI5.mjs} +1 -1
- package/dist/{tools-CLkNfafW.cjs → tools-DtSHBOmt.cjs} +1 -1
- package/dist/{uninstall-DCx_qNMZ.cjs → uninstall-BAaq0c10.cjs} +3 -3
- package/dist/{uninstall-DE0SH2qs.mjs → uninstall-CJqFoKZO.mjs} +3 -3
- package/package.json +8 -8
- package/dist/selfCheck-BCKIF6ST.mjs +0 -89
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var mirrorProtocol = require('./mirrorProtocol-
|
|
3
|
+
var mirrorProtocol = require('./mirrorProtocol-Cmxr0YBU.cjs');
|
|
4
4
|
var fsMkdir = require('./fsMkdir-0K3yENml.cjs');
|
|
5
|
-
var piRunnerArgs = require('./piRunnerArgs-
|
|
5
|
+
var piRunnerArgs = require('./piRunnerArgs-gNYQH48T.cjs');
|
|
6
6
|
var fs = require('fs/promises');
|
|
7
7
|
var os$1 = require('os');
|
|
8
8
|
var tmp = require('tmp');
|
|
@@ -10,20 +10,20 @@ var axios = require('axios');
|
|
|
10
10
|
var sessionMetadata = require('./sessionMetadata-B44cL4Xj.cjs');
|
|
11
11
|
var node_fs = require('node:fs');
|
|
12
12
|
var path = require('node:path');
|
|
13
|
-
var exitNotice = require('./exitNotice-
|
|
14
|
-
var configuration = require('./configuration-
|
|
15
|
-
var api = require('./api-
|
|
13
|
+
var exitNotice = require('./exitNotice-CTcWpCmg.cjs');
|
|
14
|
+
var configuration = require('./configuration-B-smHMf7.cjs');
|
|
15
|
+
var api = require('./api-eXuwG3LS.cjs');
|
|
16
16
|
var spawnAgents = require('./spawnAgents-D4lR468W.cjs');
|
|
17
|
-
var logger = require('./logger-
|
|
18
|
-
var index$2 = require('./index-
|
|
19
|
-
var auth = require('./auth-
|
|
17
|
+
var logger = require('./logger-HxTu5uFs.cjs');
|
|
18
|
+
var index$2 = require('./index-Du6DD3Re.cjs');
|
|
19
|
+
var auth = require('./auth-CFUuiMdV.cjs');
|
|
20
20
|
var child_process = require('child_process');
|
|
21
|
-
var _package = require('./package-
|
|
22
|
-
var doctor = require('./doctor-
|
|
23
|
-
var spawnHappyCLI = require('./spawnHappyCLI-
|
|
24
|
-
var persistence = require('./persistence-
|
|
25
|
-
var controlClient = require('./controlClient-
|
|
26
|
-
var sessionOps = require('./sessionOps-
|
|
21
|
+
var _package = require('./package-ChmhpzsE.cjs');
|
|
22
|
+
var doctor = require('./doctor-CdXBxTms.cjs');
|
|
23
|
+
var spawnHappyCLI = require('./spawnHappyCLI-DIR-U_rK.cjs');
|
|
24
|
+
var persistence = require('./persistence-DxboRqwb.cjs');
|
|
25
|
+
var controlClient = require('./controlClient-Dlm7wz-k.cjs');
|
|
26
|
+
var sessionOps = require('./sessionOps-Cei-Q7OB.cjs');
|
|
27
27
|
var index = require('./index-BYL_X3gP.cjs');
|
|
28
28
|
var fastify = require('fastify');
|
|
29
29
|
var z = require('zod');
|
|
@@ -32,37 +32,37 @@ var authRelay = require('./authRelay-Dy1qU9td.cjs');
|
|
|
32
32
|
var node_crypto = require('node:crypto');
|
|
33
33
|
var previewPath = require('./previewPath-B0rBdhy1.cjs');
|
|
34
34
|
var backgroundTaskActivity = require('./backgroundTaskActivity-CBvUdj39.cjs');
|
|
35
|
-
var rateLimitWindows = require('./rateLimitWindows-
|
|
36
|
-
var peerTools = require('./peerTools-
|
|
35
|
+
var rateLimitWindows = require('./rateLimitWindows-Cfdnt4On.cjs');
|
|
36
|
+
var peerTools = require('./peerTools-ZUDz2PCs.cjs');
|
|
37
37
|
var os = require('node:os');
|
|
38
|
-
var remoteSessionClient = require('./remoteSessionClient-
|
|
39
|
-
var bootstrap = require('./bootstrap-
|
|
40
|
-
var index$1 = require('./index-
|
|
38
|
+
var remoteSessionClient = require('./remoteSessionClient-e9jDdGyc.cjs');
|
|
39
|
+
var bootstrap = require('./bootstrap-DPbGC_1B.cjs');
|
|
40
|
+
var index$1 = require('./index-DMhMr4cb.cjs');
|
|
41
41
|
var require$$0 = require('fs');
|
|
42
42
|
var require$$1 = require('path');
|
|
43
43
|
var node_child_process = require('node:child_process');
|
|
44
44
|
var projectPath = require('./projectPath-C3ioB4Bu.cjs');
|
|
45
45
|
var doctorReadiness = require('./doctorReadiness-Dl6yRQCy.cjs');
|
|
46
|
-
var machineMetadata = require('./machineMetadata-
|
|
46
|
+
var machineMetadata = require('./machineMetadata-C7DEm41X.cjs');
|
|
47
47
|
var fileStore = require('./fileStore-7qhnbs6N.cjs');
|
|
48
48
|
var pi = require('./pi-DlsrPCTa.cjs');
|
|
49
49
|
var codexAccount = require('./codexAccount-BjaHvmKH.cjs');
|
|
50
50
|
var require$$3 = require('crypto');
|
|
51
51
|
var detectCLI = require('./detectCLI-BuYR_Qxe.cjs');
|
|
52
|
-
var handleResumeCommand = require('./handleResumeCommand-
|
|
52
|
+
var handleResumeCommand = require('./handleResumeCommand-Dp-rTs9Q.cjs');
|
|
53
53
|
var webPanels = require('./webPanels-FCgFKvVe.cjs');
|
|
54
54
|
var promises = require('node:fs/promises');
|
|
55
55
|
var cliUpdate = require('./cliUpdate-DsKXPFYp.cjs');
|
|
56
|
-
var client = require('./client-
|
|
57
|
-
var sessionLock = require('./sessionLock-
|
|
58
|
-
var client$1 = require('./client-
|
|
56
|
+
var client = require('./client-N9svGBOP.cjs');
|
|
57
|
+
var sessionLock = require('./sessionLock-CW-P7VU9.cjs');
|
|
58
|
+
var client$1 = require('./client-BcUWsWK-.cjs');
|
|
59
59
|
var daemonSupervisor = require('./daemonSupervisor-alqGPANc.cjs');
|
|
60
60
|
var accountService = require('./accountService-SOeB_21A.cjs');
|
|
61
61
|
var daemonAccounts = require('./daemonAccounts-BOoI7-sw.cjs');
|
|
62
62
|
var path$1 = require('./path-B7zW-WwE.cjs');
|
|
63
63
|
var editPaths = require('./editPaths-Bqp4OFPw.cjs');
|
|
64
|
-
var startFileWatcher = require('./startFileWatcher-
|
|
65
|
-
var sync = require('./sync-
|
|
64
|
+
var startFileWatcher = require('./startFileWatcher-Qy7f8U4k.cjs');
|
|
65
|
+
var sync = require('./sync-DS_emV3g.cjs');
|
|
66
66
|
var types = require('./types-CRS-srZK.cjs');
|
|
67
67
|
var tmuxSocket = require('./tmuxSocket-Dg11Olx0.cjs');
|
|
68
68
|
var processTermination = require('./processTermination-f17wxlMb.cjs');
|
|
@@ -70,31 +70,31 @@ var doctor$1 = require('./doctor-CJpFhHoK.cjs');
|
|
|
70
70
|
var resources = require('./resources-BZ_Be0qM.cjs');
|
|
71
71
|
var node_util = require('node:util');
|
|
72
72
|
var template = require('./template-ChUotPTL.cjs');
|
|
73
|
-
var client$2 = require('./client-
|
|
73
|
+
var client$2 = require('./client-CTsx4zlq.cjs');
|
|
74
74
|
var loginShellEnv = require('./loginShellEnv-BkuYtExZ.cjs');
|
|
75
75
|
var store = require('./store-DGMILdMn.cjs');
|
|
76
|
-
require('./acpSessionResume-
|
|
76
|
+
require('./acpSessionResume-Cp2majJ5.cjs');
|
|
77
77
|
require('./prompt-Bof2aQkI.cjs');
|
|
78
|
-
require('./pushNotifications-
|
|
78
|
+
require('./pushNotifications-EJWZAYed.cjs');
|
|
79
79
|
require('./contentLogMetadata-ZSFk_NjQ.cjs');
|
|
80
|
-
require('./reconnectGate-
|
|
80
|
+
require('./reconnectGate-DY97bPDg.cjs');
|
|
81
81
|
require('node:events');
|
|
82
82
|
require('socket.io-client');
|
|
83
83
|
require('./limits-C-a7gr04.cjs');
|
|
84
|
-
require('./time-
|
|
85
|
-
require('./registerCommonHandlers-
|
|
84
|
+
require('./time-i8fiLSHv.cjs');
|
|
85
|
+
require('./registerCommonHandlers-YsrcwRo3.cjs');
|
|
86
86
|
require('util');
|
|
87
87
|
require('cross-spawn');
|
|
88
88
|
require('@paralleldrive/cuid2');
|
|
89
89
|
require('chalk');
|
|
90
90
|
require('node:module');
|
|
91
91
|
require('tweetnacl');
|
|
92
|
-
require('./browser-
|
|
92
|
+
require('./browser-BRH_1Tgz.cjs');
|
|
93
93
|
require('open');
|
|
94
94
|
require('./specialCommands-J3JFOq0J.cjs');
|
|
95
95
|
require('./ids-B6ZC0HGt.cjs');
|
|
96
96
|
require('url');
|
|
97
|
-
require('./localHappyAgentAuth-
|
|
97
|
+
require('./localHappyAgentAuth-BpBQ_aFo.cjs');
|
|
98
98
|
require('./claudeAccountEnv-BTZjHTpF.cjs');
|
|
99
99
|
require('node:readline');
|
|
100
100
|
require('node-pty');
|
|
@@ -4645,7 +4645,8 @@ function createHarnessInstaller(deps) {
|
|
|
4645
4645
|
return {
|
|
4646
4646
|
/** True while npm may be writing the prefix — including after an unconfirmed kill. */
|
|
4647
4647
|
isRunning: () => running !== null || blocked,
|
|
4648
|
-
|
|
4648
|
+
/** `requester` is only for the log: the machine page (owner) or B-894's agent auto-update. */
|
|
4649
|
+
async request(params, requester = "owner") {
|
|
4649
4650
|
const harness = params && typeof params === "object" ? params.harness : void 0;
|
|
4650
4651
|
if (!index.isHarnessInstallId(harness)) {
|
|
4651
4652
|
deps.log(`[HARNESS] refused install request for an unknown harness`);
|
|
@@ -4667,7 +4668,7 @@ function createHarnessInstaller(deps) {
|
|
|
4667
4668
|
return location;
|
|
4668
4669
|
}
|
|
4669
4670
|
const startedAt = now();
|
|
4670
|
-
deps.log(`[HARNESS] owner requested ${harness} install`);
|
|
4671
|
+
deps.log(`[HARNESS] ${requester === "auto-update" ? "agent auto-update" : "owner"} requested ${harness} install`);
|
|
4671
4672
|
deps.publish({ harness, state: "installing", startedAt, at: startedAt });
|
|
4672
4673
|
void run(harness, location.prefix, startedAt);
|
|
4673
4674
|
return { accepted: true, harness };
|
|
@@ -4675,6 +4676,197 @@ function createHarnessInstaller(deps) {
|
|
|
4675
4676
|
};
|
|
4676
4677
|
}
|
|
4677
4678
|
|
|
4679
|
+
const AGENT_AUTO_UPDATE_HARNESSES = ["codex"];
|
|
4680
|
+
const AGENT_AUTO_UPDATE_MAX_ATTEMPTS = 2;
|
|
4681
|
+
const AGENT_AUTO_UPDATE_BACKOFF_MS = 30 * 60 * 1e3;
|
|
4682
|
+
const AGENT_AUTO_UPDATE_SNAPSHOT_MAX_AGE_MS = 12 * 60 * 60 * 1e3;
|
|
4683
|
+
const TRANSIENT_REFUSALS = /* @__PURE__ */ new Set(["install_in_progress", "cli_update_in_progress"]);
|
|
4684
|
+
function decideAgentAutoUpdate(input) {
|
|
4685
|
+
const { harness } = input;
|
|
4686
|
+
if (!input.enabled) return { action: "skip", harness, reason: "disabled" };
|
|
4687
|
+
const versions = input.versions;
|
|
4688
|
+
if (!versions || input.now - versions.checkedAt > AGENT_AUTO_UPDATE_SNAPSHOT_MAX_AGE_MS) return { action: "skip", harness, reason: "no-versions" };
|
|
4689
|
+
const agent = versions.agents.find((a) => a.id === harness);
|
|
4690
|
+
if (!agent || agent.status !== "update-available" || !agent.latest) return { action: "skip", harness, reason: "current" };
|
|
4691
|
+
const target = agent.latest;
|
|
4692
|
+
const attempt = input.attempt?.target === target ? input.attempt : void 0;
|
|
4693
|
+
if (attempt?.succeeded) return { action: "skip", harness, reason: "still-outdated", target };
|
|
4694
|
+
if (attempt && attempt.attempts >= AGENT_AUTO_UPDATE_MAX_ATTEMPTS) return { action: "skip", harness, reason: "gave-up", target };
|
|
4695
|
+
if (attempt && input.now - attempt.lastAt < AGENT_AUTO_UPDATE_BACKOFF_MS) return { action: "skip", harness, reason: "backoff", target };
|
|
4696
|
+
if (input.turnActive) return { action: "skip", harness, reason: "turn-active", target };
|
|
4697
|
+
if (input.installerBusy) return { action: "skip", harness, reason: "installer-busy", target };
|
|
4698
|
+
return { action: "install", harness, from: agent.installed, target };
|
|
4699
|
+
}
|
|
4700
|
+
function createAgentAutoUpdater(deps) {
|
|
4701
|
+
const now = deps.now ?? Date.now;
|
|
4702
|
+
const loaded = deps.store?.read() ?? { attempts: {}, statuses: {} };
|
|
4703
|
+
const attempts = new Map(
|
|
4704
|
+
Object.entries(loaded.attempts).map(([harness, attempt]) => [harness, attempt])
|
|
4705
|
+
);
|
|
4706
|
+
const statuses = { ...loaded.statuses };
|
|
4707
|
+
const save = () => {
|
|
4708
|
+
try {
|
|
4709
|
+
deps.store?.write({ attempts: Object.fromEntries(attempts), statuses: { ...statuses } });
|
|
4710
|
+
} catch (error) {
|
|
4711
|
+
deps.log(`[AGENT AUTO-UPDATE] could not save state: ${String(error)}`);
|
|
4712
|
+
}
|
|
4713
|
+
};
|
|
4714
|
+
for (const status of Object.values(statuses)) {
|
|
4715
|
+
if (status.state !== "installing") continue;
|
|
4716
|
+
const attempt = attempts.get(status.harness);
|
|
4717
|
+
if (attempt?.target === status.target) attempt.detail = "interrupted_by_daemon_restart";
|
|
4718
|
+
statuses[status.harness] = {
|
|
4719
|
+
...status,
|
|
4720
|
+
state: status.attempts >= AGENT_AUTO_UPDATE_MAX_ATTEMPTS ? "gave-up" : "failed",
|
|
4721
|
+
detail: "interrupted_by_daemon_restart"
|
|
4722
|
+
};
|
|
4723
|
+
}
|
|
4724
|
+
if (Object.keys(statuses).length > 0) {
|
|
4725
|
+
save();
|
|
4726
|
+
deps.publish({ ...statuses });
|
|
4727
|
+
}
|
|
4728
|
+
let pending = null;
|
|
4729
|
+
let ticking = false;
|
|
4730
|
+
const setStatus = (status) => {
|
|
4731
|
+
statuses[status.harness] = status;
|
|
4732
|
+
save();
|
|
4733
|
+
deps.publish({ ...statuses });
|
|
4734
|
+
};
|
|
4735
|
+
const fail = (harness, target, detail) => {
|
|
4736
|
+
const attempt = attempts.get(harness);
|
|
4737
|
+
attempt.detail = detail;
|
|
4738
|
+
const gaveUp = attempt.attempts >= AGENT_AUTO_UPDATE_MAX_ATTEMPTS;
|
|
4739
|
+
deps.log(`[AGENT AUTO-UPDATE] ${harness} \u2192 ${target} failed (attempt ${attempt.attempts}): ${detail}${gaveUp ? "; giving up on this version" : ""}`);
|
|
4740
|
+
setStatus({ harness, target, state: gaveUp ? "gave-up" : "failed", detail, attempts: attempt.attempts, at: now() });
|
|
4741
|
+
};
|
|
4742
|
+
async function tick() {
|
|
4743
|
+
if (ticking || pending) return;
|
|
4744
|
+
ticking = true;
|
|
4745
|
+
try {
|
|
4746
|
+
for (const harness of AGENT_AUTO_UPDATE_HARNESSES) {
|
|
4747
|
+
const decision = decideAgentAutoUpdate({
|
|
4748
|
+
harness,
|
|
4749
|
+
enabled: deps.enabled(),
|
|
4750
|
+
versions: deps.versions(),
|
|
4751
|
+
turnActive: deps.turnActive(harness),
|
|
4752
|
+
installerBusy: deps.installerBusy(),
|
|
4753
|
+
attempt: attempts.get(harness),
|
|
4754
|
+
now: now()
|
|
4755
|
+
});
|
|
4756
|
+
if (decision.action !== "install") {
|
|
4757
|
+
const status = statuses[harness];
|
|
4758
|
+
if (decision.reason === "still-outdated" && status?.state === "installed" && status.target === decision.target) {
|
|
4759
|
+
const attempt2 = attempts.get(harness);
|
|
4760
|
+
attempt2.attempts = AGENT_AUTO_UPDATE_MAX_ATTEMPTS;
|
|
4761
|
+
fail(harness, decision.target, "still_outdated_after_install");
|
|
4762
|
+
}
|
|
4763
|
+
continue;
|
|
4764
|
+
}
|
|
4765
|
+
const prior = attempts.get(harness);
|
|
4766
|
+
const attempt = prior?.target === decision.target ? { ...prior, attempts: prior.attempts + 1, lastAt: now() } : { target: decision.target, attempts: 1, lastAt: now() };
|
|
4767
|
+
attempts.set(harness, attempt);
|
|
4768
|
+
deps.log(`[AGENT AUTO-UPDATE] ${harness} ${decision.from ?? "?"} \u2192 ${decision.target} (attempt ${attempt.attempts})`);
|
|
4769
|
+
pending = { harness, target: decision.target };
|
|
4770
|
+
setStatus({ harness, target: decision.target, state: "installing", attempts: attempt.attempts, at: now() });
|
|
4771
|
+
const result = await deps.request(harness).catch((error) => ({ error: `request_failed: ${String(error)}` }));
|
|
4772
|
+
if ("accepted" in result) return;
|
|
4773
|
+
pending = null;
|
|
4774
|
+
if (TRANSIENT_REFUSALS.has(result.error)) {
|
|
4775
|
+
if (prior?.target === decision.target) attempts.set(harness, prior);
|
|
4776
|
+
else attempts.delete(harness);
|
|
4777
|
+
const before = statuses[harness];
|
|
4778
|
+
delete statuses[harness];
|
|
4779
|
+
save();
|
|
4780
|
+
if (before) deps.publish({ ...statuses });
|
|
4781
|
+
continue;
|
|
4782
|
+
}
|
|
4783
|
+
fail(harness, decision.target, result.error);
|
|
4784
|
+
}
|
|
4785
|
+
} finally {
|
|
4786
|
+
ticking = false;
|
|
4787
|
+
}
|
|
4788
|
+
}
|
|
4789
|
+
function onInstallState(state) {
|
|
4790
|
+
if (!pending || state.harness !== pending.harness || state.state === "installing") return;
|
|
4791
|
+
const { harness, target } = pending;
|
|
4792
|
+
pending = null;
|
|
4793
|
+
const attempt = attempts.get(harness);
|
|
4794
|
+
if (!attempt) return;
|
|
4795
|
+
if (state.state === "installed") {
|
|
4796
|
+
attempt.succeeded = true;
|
|
4797
|
+
deps.log(`[AGENT AUTO-UPDATE] ${harness} \u2192 ${target} installed`);
|
|
4798
|
+
setStatus({ harness, target, state: "installed", attempts: attempt.attempts, at: now() });
|
|
4799
|
+
} else {
|
|
4800
|
+
fail(harness, target, state.detail ?? "unknown");
|
|
4801
|
+
}
|
|
4802
|
+
}
|
|
4803
|
+
return { tick, onInstallState, statuses: () => ({ ...statuses }) };
|
|
4804
|
+
}
|
|
4805
|
+
const AGENT_AUTO_UPDATE_TICK_MS = 5 * 60 * 1e3;
|
|
4806
|
+
function resolveAgentAutoUpdateTickMs(raw) {
|
|
4807
|
+
const value = raw === void 0 ? NaN : Number(raw);
|
|
4808
|
+
return Number.isFinite(value) && value >= 1e3 ? value : AGENT_AUTO_UPDATE_TICK_MS;
|
|
4809
|
+
}
|
|
4810
|
+
|
|
4811
|
+
const STATES = /* @__PURE__ */ new Set(["installing", "installed", "failed", "gave-up"]);
|
|
4812
|
+
const isCount = (v) => typeof v === "number" && Number.isFinite(v) && v >= 0;
|
|
4813
|
+
function parseAttempt(raw) {
|
|
4814
|
+
if (!raw || typeof raw !== "object") return null;
|
|
4815
|
+
const { target, attempts, lastAt, succeeded, detail } = raw;
|
|
4816
|
+
if (typeof target !== "string" || !target || !isCount(attempts) || !isCount(lastAt)) return null;
|
|
4817
|
+
return {
|
|
4818
|
+
target,
|
|
4819
|
+
attempts,
|
|
4820
|
+
lastAt,
|
|
4821
|
+
...succeeded === true ? { succeeded: true } : {},
|
|
4822
|
+
...typeof detail === "string" ? { detail } : {}
|
|
4823
|
+
};
|
|
4824
|
+
}
|
|
4825
|
+
function parseStatus(harness, raw) {
|
|
4826
|
+
if (!raw || typeof raw !== "object") return null;
|
|
4827
|
+
const { target, state, detail, attempts, at } = raw;
|
|
4828
|
+
if (typeof target !== "string" || !target || typeof state !== "string" || !STATES.has(state) || !isCount(attempts) || !isCount(at)) return null;
|
|
4829
|
+
return {
|
|
4830
|
+
harness,
|
|
4831
|
+
target,
|
|
4832
|
+
state,
|
|
4833
|
+
attempts,
|
|
4834
|
+
at,
|
|
4835
|
+
...typeof detail === "string" ? { detail } : {}
|
|
4836
|
+
};
|
|
4837
|
+
}
|
|
4838
|
+
function parseAgentAutoUpdatePersisted(raw) {
|
|
4839
|
+
const out = { attempts: {}, statuses: {} };
|
|
4840
|
+
if (!raw || typeof raw !== "object") return out;
|
|
4841
|
+
const { attempts, statuses } = raw;
|
|
4842
|
+
for (const [harness, value] of Object.entries(attempts && typeof attempts === "object" ? attempts : {})) {
|
|
4843
|
+
const attempt = parseAttempt(value);
|
|
4844
|
+
if (attempt) out.attempts[harness] = attempt;
|
|
4845
|
+
}
|
|
4846
|
+
for (const [harness, value] of Object.entries(statuses && typeof statuses === "object" ? statuses : {})) {
|
|
4847
|
+
const status = parseStatus(harness, value);
|
|
4848
|
+
if (status) out.statuses[harness] = status;
|
|
4849
|
+
}
|
|
4850
|
+
return out;
|
|
4851
|
+
}
|
|
4852
|
+
function agentAutoUpdateStore(homeDir) {
|
|
4853
|
+
const file = path.join(homeDir, "agent-auto-update.json");
|
|
4854
|
+
return {
|
|
4855
|
+
read() {
|
|
4856
|
+
try {
|
|
4857
|
+
return parseAgentAutoUpdatePersisted(JSON.parse(node_fs.readFileSync(file, "utf8")));
|
|
4858
|
+
} catch {
|
|
4859
|
+
return { attempts: {}, statuses: {} };
|
|
4860
|
+
}
|
|
4861
|
+
},
|
|
4862
|
+
write(state) {
|
|
4863
|
+
const tmp = `${file}.${process.pid}.tmp`;
|
|
4864
|
+
node_fs.writeFileSync(tmp, JSON.stringify(state), { mode: 384 });
|
|
4865
|
+
node_fs.renameSync(tmp, file);
|
|
4866
|
+
}
|
|
4867
|
+
};
|
|
4868
|
+
}
|
|
4869
|
+
|
|
4678
4870
|
function buildPresenceBatch(live, previous) {
|
|
4679
4871
|
const current = new Set(live.map((s) => s.sessionId));
|
|
4680
4872
|
const sessions = live.slice(0, 200).map((s) => ({
|
|
@@ -7731,6 +7923,7 @@ async function startDaemon() {
|
|
|
7731
7923
|
let claudeCredentialStoreSetting = (await persistence.readSettings()).claudeCredentialStore === "file" ? "file" : "auto";
|
|
7732
7924
|
let agentHibernationSetting = (await persistence.readSettings()).agentHibernationIdleMs;
|
|
7733
7925
|
let autoRestartSetting = (await persistence.readSettings()).autoRestartSessions !== false;
|
|
7926
|
+
let agentAutoUpdateSetting = (await persistence.readSettings()).agentAutoUpdate === true;
|
|
7734
7927
|
try {
|
|
7735
7928
|
const homes = await index$1.refreshAgentHomes();
|
|
7736
7929
|
logger.logger.debug(`[DAEMON RUN] Claude config dir: ${loginShellEnv.describeAgentHome(homes.claudeConfigDir)}; Codex home: ${loginShellEnv.describeAgentHome(homes.codexHome)}`);
|
|
@@ -8431,6 +8624,7 @@ async function startDaemon() {
|
|
|
8431
8624
|
}
|
|
8432
8625
|
return sessionIdToFinishedSession.get(happySessionId);
|
|
8433
8626
|
};
|
|
8627
|
+
const trackedSessionFlavor = (happySessionId) => findTrackedSessionById(happySessionId)?.happySessionMetadataFromLocalWebhook?.flavor ?? "claude";
|
|
8434
8628
|
const persistRestoreRecord = (happySessionId, fallback, metadata) => {
|
|
8435
8629
|
const candidates = [...pidToTrackedSession.values()].filter((s) => s.happySessionId === happySessionId && isPidAlive(s.pid));
|
|
8436
8630
|
const live = candidates.find((s) => s.childProcess) ?? candidates[0];
|
|
@@ -8666,6 +8860,16 @@ async function startDaemon() {
|
|
|
8666
8860
|
};
|
|
8667
8861
|
const restartSessionImpl = async (happySessionId, options) => {
|
|
8668
8862
|
try {
|
|
8863
|
+
if (options?.ifIdle) {
|
|
8864
|
+
const busy = sessionLock.restartIdleRefusal({
|
|
8865
|
+
turnActive: turnActivity.activeSessions().includes(happySessionId),
|
|
8866
|
+
backgroundTasks: backgroundTasks.count(happySessionId)
|
|
8867
|
+
});
|
|
8868
|
+
if (busy) {
|
|
8869
|
+
logger.logger.debug(`[DAEMON RUN] restart-session ${happySessionId} refused (ifIdle): ${busy}`);
|
|
8870
|
+
return { type: "error", errorMessage: `busy:${busy}` };
|
|
8871
|
+
}
|
|
8872
|
+
}
|
|
8669
8873
|
const counts = options?.account ? accountRestartCounts : restartCounts;
|
|
8670
8874
|
const prior = counts.get(happySessionId) ?? 0;
|
|
8671
8875
|
const decision = options?.auto ? { allowed: true } : decideRestart(prior, options?.account ? DEFAULT_MAX_ACCOUNT_RESTARTS : DEFAULT_MAX_RESTARTS);
|
|
@@ -9154,6 +9358,13 @@ async function startDaemon() {
|
|
|
9154
9358
|
return autoRestartSetting;
|
|
9155
9359
|
});
|
|
9156
9360
|
setTimeout(() => autoRestartScheduler.sweep(), 5e3).unref?.();
|
|
9361
|
+
let agentAutoUpdater = null;
|
|
9362
|
+
apiMachine.setAgentAutoUpdateHandlers(agentAutoUpdateSetting, async (enabled) => {
|
|
9363
|
+
await persistence.updateSettings((current) => ({ ...current, agentAutoUpdate: enabled }));
|
|
9364
|
+
agentAutoUpdateSetting = enabled;
|
|
9365
|
+
void agentAutoUpdater?.tick();
|
|
9366
|
+
return agentAutoUpdateSetting;
|
|
9367
|
+
});
|
|
9157
9368
|
const accountService$1 = new accountService.AccountService({
|
|
9158
9369
|
home: configuration.configuration.happyHomeDir,
|
|
9159
9370
|
env: process.env,
|
|
@@ -9293,7 +9504,9 @@ async function startDaemon() {
|
|
|
9293
9504
|
const stopAgentVersionChecks = mirrorProtocol.startAgentVersionChecks(
|
|
9294
9505
|
(snapshot) => {
|
|
9295
9506
|
latestAgentVersions = snapshot;
|
|
9296
|
-
return apiMachine.updateDaemonState((state) => ({ ...state, status: state?.status ?? "running", agentVersions: snapshot }))
|
|
9507
|
+
return apiMachine.updateDaemonState((state) => ({ ...state, status: state?.status ?? "running", agentVersions: snapshot })).finally(() => {
|
|
9508
|
+
void agentAutoUpdater?.tick();
|
|
9509
|
+
});
|
|
9297
9510
|
},
|
|
9298
9511
|
(error) => logger.logger.debug("[DAEMON RUN] Agent version check failed", error)
|
|
9299
9512
|
);
|
|
@@ -9303,6 +9516,7 @@ async function startDaemon() {
|
|
|
9303
9516
|
commandOnPath: detectCLI.commandOnPath,
|
|
9304
9517
|
cliUpdateBusy: () => updateController.isRunning() || handoverInFlight,
|
|
9305
9518
|
publish: (state) => {
|
|
9519
|
+
agentAutoUpdater?.onInstallState(state);
|
|
9306
9520
|
void apiMachine.updateDaemonState((current) => ({ ...current, status: current?.status ?? "running", harnessInstall: state })).catch((error) => logger.logger.debug("[DAEMON RUN] harness install state publish failed", error));
|
|
9307
9521
|
},
|
|
9308
9522
|
afterInstall: async () => {
|
|
@@ -9312,6 +9526,22 @@ async function startDaemon() {
|
|
|
9312
9526
|
log: (message) => logger.logger.warn(`[DAEMON RUN] ${message}`)
|
|
9313
9527
|
});
|
|
9314
9528
|
apiMachine.setHarnessInstallHandler((params) => harnessInstaller.request(params));
|
|
9529
|
+
agentAutoUpdater = createAgentAutoUpdater({
|
|
9530
|
+
enabled: () => agentAutoUpdateSetting,
|
|
9531
|
+
versions: () => latestAgentVersions,
|
|
9532
|
+
turnActive: (harness) => turnActivity.activeSessions().some((id) => trackedSessionFlavor(id) === harness),
|
|
9533
|
+
installerBusy: () => !!harnessInstaller?.isRunning() || updateController.isRunning() || handoverInFlight,
|
|
9534
|
+
request: (harness) => harnessInstaller.request({ harness }, "auto-update"),
|
|
9535
|
+
publish: (status) => {
|
|
9536
|
+
void apiMachine.setAgentAutoUpdateStatus(status);
|
|
9537
|
+
},
|
|
9538
|
+
log: (message) => logger.logger.warn(`[DAEMON RUN] ${message}`),
|
|
9539
|
+
store: agentAutoUpdateStore(configuration.configuration.happyHomeDir)
|
|
9540
|
+
});
|
|
9541
|
+
const agentAutoUpdateInterval = setInterval(() => {
|
|
9542
|
+
void agentAutoUpdater?.tick();
|
|
9543
|
+
}, resolveAgentAutoUpdateTickMs(process.env.HAPPY_AGENT_AUTO_UPDATE_TICK_MS));
|
|
9544
|
+
agentAutoUpdateInterval.unref?.();
|
|
9315
9545
|
const heartbeatIntervalMs = parseInt(process.env.HAPPY_DAEMON_HEARTBEAT_INTERVAL || "60000");
|
|
9316
9546
|
const wakeDetector = createWakeDetector(heartbeatIntervalMs);
|
|
9317
9547
|
const restartOnStaleVersionAndHeartbeat = setInterval(serialTask(async () => {
|
|
@@ -9361,6 +9591,7 @@ async function startDaemon() {
|
|
|
9361
9591
|
projectPresence?.stop();
|
|
9362
9592
|
clearInterval(restartOnStaleVersionAndHeartbeat);
|
|
9363
9593
|
clearInterval(cliUpdateInterval);
|
|
9594
|
+
clearInterval(agentAutoUpdateInterval);
|
|
9364
9595
|
policyAnnouncements.stop();
|
|
9365
9596
|
policyRefresh.stop();
|
|
9366
9597
|
stopAgentVersionChecks();
|
|
@@ -9502,6 +9733,7 @@ async function startDaemon() {
|
|
|
9502
9733
|
logger.logger.debug("[DAEMON RUN] Health check interval cleared");
|
|
9503
9734
|
}
|
|
9504
9735
|
clearInterval(cliUpdateInterval);
|
|
9736
|
+
clearInterval(agentAutoUpdateInterval);
|
|
9505
9737
|
clearInterval(autoRestartSweep);
|
|
9506
9738
|
policyAnnouncements.stop();
|
|
9507
9739
|
policyRefresh.stop();
|
|
@@ -1,26 +1,26 @@
|
|
|
1
1
|
import os from 'node:os';
|
|
2
|
-
import { A as AUTO_RESTART_CAPABILITY, c as claimSessionOrExit, a as applyServerSnapshot, b as applyReconnectReplay, w as withoutServerSnapshot, m as mergeReconnectMetadata, t as takeAutoRestartedEvent, e as exitCursorStamp } from './sessionLock-
|
|
3
|
-
import { r as readSettings, H as HIBERNATION_CAPABILITY, a as resolveCheckMs, l as latchKeepAwake, e as evaluateWrapperIdle } from './persistence-
|
|
4
|
-
import { c as createSessionForStartup, H as HibernationProbe, a as commitHibernation } from './startupSessionCreate-
|
|
2
|
+
import { A as AUTO_RESTART_CAPABILITY, c as claimSessionOrExit, a as applyServerSnapshot, b as applyReconnectReplay, w as withoutServerSnapshot, m as mergeReconnectMetadata, t as takeAutoRestartedEvent, e as exitCursorStamp } from './sessionLock-BKnXIWnQ.mjs';
|
|
3
|
+
import { r as readSettings, H as HIBERNATION_CAPABILITY, a as resolveCheckMs, l as latchKeepAwake, e as evaluateWrapperIdle } from './persistence-D1E7jiV4.mjs';
|
|
4
|
+
import { c as createSessionForStartup, H as HibernationProbe, a as commitHibernation } from './startupSessionCreate-BgoNJdcx.mjs';
|
|
5
5
|
import { randomUUID } from 'node:crypto';
|
|
6
|
-
import { c as connectionState, A as ApiClient, s as startOfflineReconnection } from './api-
|
|
7
|
-
import { l as logger } from './logger-
|
|
8
|
-
import { s as spawnOriginTags, a as sessionWorktreeMetadata } from './createSessionMetadata-
|
|
9
|
-
import { p as packageJson } from './package-
|
|
6
|
+
import { c as connectionState, A as ApiClient, s as startOfflineReconnection } from './api-D7EAwOT2.mjs';
|
|
7
|
+
import { l as logger } from './logger-8f-WNgus.mjs';
|
|
8
|
+
import { s as spawnOriginTags, a as sessionWorktreeMetadata } from './createSessionMetadata-DqBHMEgs.mjs';
|
|
9
|
+
import { p as packageJson } from './package-Cp8RjVmm.mjs';
|
|
10
10
|
import { P as PROMPT_QUEUE_CAPABILITY, a as PROJECT_SESSION_CAPABILITY, R as RUN_INTENT_CAPABILITY, C as CLAUDE_CONFIG_MODEL_CAPABILITY, A as AGENT_PROFILE_SESSION_CAPABILITY, I as ISSUE_SESSION_CAPABILITY, r as restoredEffort, b as restoredModel } from './index-DWk-WTU-.mjs';
|
|
11
11
|
import { D as DEFAULT_CLAUDE_PERMISSION_MODE, r as registerRunIntentRpc, a as recordRunIntents, w as withoutEffort } from './defaultPermissionMode-CYQi7vqJ.mjs';
|
|
12
12
|
import { F as FORK_BACKFILL_CAPABILITY, a as announceForkBackfill, p as publishForkBackfillWhenCommitted } from './forkBackfill-C9EfJ64O.mjs';
|
|
13
|
-
import { c as configuration } from './configuration-
|
|
13
|
+
import { c as configuration } from './configuration-C4w7_yT9.mjs';
|
|
14
14
|
import { l as loadWrapperAccount } from './wrapperAccount-CwaA-n1S.mjs';
|
|
15
15
|
import { S as SPAWN_ACCOUNT_ENV } from './store-Fge1h9wy.mjs';
|
|
16
|
-
import { n as notifyDaemonSessionStarted, c as checkDaemonHibernation } from './controlClient-
|
|
17
|
-
import { g as getInitialMachineMetadata } from './machineMetadata-
|
|
16
|
+
import { n as notifyDaemonSessionStarted, c as checkDaemonHibernation } from './controlClient-CtBRHlbJ.mjs';
|
|
17
|
+
import { g as getInitialMachineMetadata } from './machineMetadata-EyybyGYp.mjs';
|
|
18
18
|
import { p as projectPath } from './projectPath-BTBIMB57.mjs';
|
|
19
19
|
import { resolve, join } from 'node:path';
|
|
20
20
|
import { a as applySandboxPermissionPolicy, r as resolveInitialClaudePermissionMode, l as longContextStorePath, b as longContextKey, c as readClaudeMergedSettings, d as readClaudeConfiguredModel, m as mapToClaudeMode, w as withoutRefusedLongContext, e as messageModelIntent, f as createLongContextPolicy, g as readLongContextVerdict, h as reconcilePublishedPermissionMode } from './claudeLongContext-CZ60xo5p.mjs';
|
|
21
21
|
import { d as decodeBase64, e as encodeBase64 } from './authRelay-DhQhkBvX.mjs';
|
|
22
22
|
import { readFile } from 'node:fs/promises';
|
|
23
|
-
import { C as CLAUDE_ATTACHMENT_KINDS, s as stripAttachmentManifest } from './attachmentContent-
|
|
23
|
+
import { C as CLAUDE_ATTACHMENT_KINDS, s as stripAttachmentManifest } from './attachmentContent-DV7W3vw7.mjs';
|
|
24
24
|
import { T as TranscriptPathHints } from './transcriptCursor-B7T_gkQ0.mjs';
|
|
25
25
|
import { p as planClaudeStartup } from './startupPlan-DFMyNgAs.mjs';
|
|
26
26
|
import { t as takeReconnectEnv } from './reconnectEnv-DeSvHl3q.mjs';
|
|
@@ -32,30 +32,30 @@ import 'node:child_process';
|
|
|
32
32
|
import './processTreeSnapshot-fuwxC0fr.mjs';
|
|
33
33
|
import 'zod';
|
|
34
34
|
import 'axios';
|
|
35
|
-
import './pushNotifications-
|
|
35
|
+
import './pushNotifications-WgO2p0eT.mjs';
|
|
36
36
|
import './contentLogMetadata-BlWI0egu.mjs';
|
|
37
|
-
import './reconnectGate-
|
|
37
|
+
import './reconnectGate-B9iXSyiI.mjs';
|
|
38
38
|
import 'os';
|
|
39
39
|
import 'child_process';
|
|
40
40
|
import 'node:events';
|
|
41
41
|
import 'socket.io-client';
|
|
42
42
|
import './limits-DIo7rEBR.mjs';
|
|
43
|
-
import './time-
|
|
44
|
-
import './registerCommonHandlers-
|
|
43
|
+
import './time-o_AW-82H.mjs';
|
|
44
|
+
import './registerCommonHandlers-YbBzC20u.mjs';
|
|
45
45
|
import 'util';
|
|
46
46
|
import 'fs/promises';
|
|
47
47
|
import 'crypto';
|
|
48
48
|
import 'path';
|
|
49
49
|
import 'cross-spawn';
|
|
50
50
|
import '@paralleldrive/cuid2';
|
|
51
|
-
import './sync-
|
|
51
|
+
import './sync-DzKT0Ova.mjs';
|
|
52
52
|
import './backgroundTaskActivity-8PdPxrvy.mjs';
|
|
53
53
|
import 'chalk';
|
|
54
54
|
import 'node:util';
|
|
55
55
|
import './claudeAccountEnv-C6Wl-ZbT.mjs';
|
|
56
56
|
import './detectCLI-CSGMlV51.mjs';
|
|
57
57
|
import 'fs';
|
|
58
|
-
import './localHappyAgentAuth-
|
|
58
|
+
import './localHappyAgentAuth-Bc3bo0fI.mjs';
|
|
59
59
|
import 'tweetnacl';
|
|
60
60
|
import './fsMkdir-DumgLTzR.mjs';
|
|
61
61
|
import 'url';
|
|
@@ -66,7 +66,7 @@ const CLAUDE_EFFORTS = ["low", "medium", "high", "xhigh", "max"];
|
|
|
66
66
|
function restoredClaudeEffort(effort) {
|
|
67
67
|
return CLAUDE_EFFORTS.includes(effort ?? "") ? effort : void 0;
|
|
68
68
|
}
|
|
69
|
-
const importRunClaudeDeps = () => import('./runClaudeDeps-
|
|
69
|
+
const importRunClaudeDeps = () => import('./runClaudeDeps-JYJCSgT2.mjs');
|
|
70
70
|
async function runClaude(credentials, options = {}) {
|
|
71
71
|
logger.debug(`[CLAUDE] ===== CLAUDE MODE STARTING =====`);
|
|
72
72
|
logger.debug(`[CLAUDE] This is the Claude agent, NOT Gemini`);
|
|
@@ -82,7 +82,7 @@ async function runClaude(credentials, options = {}) {
|
|
|
82
82
|
const isAssistantVariant = process.env.HAPPY_SESSION_VARIANT === "assistant";
|
|
83
83
|
if (isAssistantVariant) {
|
|
84
84
|
try {
|
|
85
|
-
const { bootstrapAssistantHome } = await import('./bootstrap-
|
|
85
|
+
const { bootstrapAssistantHome } = await import('./bootstrap-CBoerZOm.mjs');
|
|
86
86
|
await bootstrapAssistantHome();
|
|
87
87
|
} catch (error) {
|
|
88
88
|
logger.debug("[START] Assistant home bootstrap failed:", error);
|
|
@@ -217,7 +217,7 @@ async function runClaude(credentials, options = {}) {
|
|
|
217
217
|
}
|
|
218
218
|
if (!response) {
|
|
219
219
|
let offlineSessionId = null;
|
|
220
|
-
const { claudeLocal } = await import('./claudeLocal-
|
|
220
|
+
const { claudeLocal } = await import('./claudeLocal-CmRDtqcj.mjs');
|
|
221
221
|
const { createSessionScanner: createSessionScanner2 } = await loadDeps();
|
|
222
222
|
const reconnection = startOfflineReconnection({
|
|
223
223
|
serverUrl: configuration.serverUrl,
|
|
@@ -1,28 +1,28 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var os = require('node:os');
|
|
4
|
-
var sessionLock = require('./sessionLock-
|
|
5
|
-
var persistence = require('./persistence-
|
|
6
|
-
var startupSessionCreate = require('./startupSessionCreate-
|
|
4
|
+
var sessionLock = require('./sessionLock-CW-P7VU9.cjs');
|
|
5
|
+
var persistence = require('./persistence-DxboRqwb.cjs');
|
|
6
|
+
var startupSessionCreate = require('./startupSessionCreate-cInaqBEd.cjs');
|
|
7
7
|
var node_crypto = require('node:crypto');
|
|
8
|
-
var api = require('./api-
|
|
9
|
-
var logger = require('./logger-
|
|
10
|
-
var createSessionMetadata = require('./createSessionMetadata-
|
|
11
|
-
var _package = require('./package-
|
|
8
|
+
var api = require('./api-eXuwG3LS.cjs');
|
|
9
|
+
var logger = require('./logger-HxTu5uFs.cjs');
|
|
10
|
+
var createSessionMetadata = require('./createSessionMetadata-B1NbiqH5.cjs');
|
|
11
|
+
var _package = require('./package-ChmhpzsE.cjs');
|
|
12
12
|
var index = require('./index-BYL_X3gP.cjs');
|
|
13
13
|
var defaultPermissionMode = require('./defaultPermissionMode-DmLYaaL8.cjs');
|
|
14
14
|
var forkBackfill = require('./forkBackfill-D2WW91fz.cjs');
|
|
15
|
-
var configuration = require('./configuration-
|
|
15
|
+
var configuration = require('./configuration-B-smHMf7.cjs');
|
|
16
16
|
var wrapperAccount = require('./wrapperAccount-BHMM9I6g.cjs');
|
|
17
17
|
var store = require('./store-DGMILdMn.cjs');
|
|
18
|
-
var controlClient = require('./controlClient-
|
|
19
|
-
var machineMetadata = require('./machineMetadata-
|
|
18
|
+
var controlClient = require('./controlClient-Dlm7wz-k.cjs');
|
|
19
|
+
var machineMetadata = require('./machineMetadata-C7DEm41X.cjs');
|
|
20
20
|
var projectPath = require('./projectPath-C3ioB4Bu.cjs');
|
|
21
21
|
var path = require('node:path');
|
|
22
22
|
var claudeLongContext = require('./claudeLongContext-BR_zdjUp.cjs');
|
|
23
23
|
var authRelay = require('./authRelay-Dy1qU9td.cjs');
|
|
24
24
|
var promises = require('node:fs/promises');
|
|
25
|
-
var attachmentContent = require('./attachmentContent-
|
|
25
|
+
var attachmentContent = require('./attachmentContent-DhTreh-W.cjs');
|
|
26
26
|
var transcriptCursor = require('./transcriptCursor-DcXGLeSc.cjs');
|
|
27
27
|
var startupPlan = require('./startupPlan-BLMbfQIH.cjs');
|
|
28
28
|
var reconnectEnv = require('./reconnectEnv-B31lY4nR.cjs');
|
|
@@ -34,30 +34,30 @@ require('node:child_process');
|
|
|
34
34
|
require('./processTreeSnapshot-D5iNblp6.cjs');
|
|
35
35
|
require('zod');
|
|
36
36
|
require('axios');
|
|
37
|
-
require('./pushNotifications-
|
|
37
|
+
require('./pushNotifications-EJWZAYed.cjs');
|
|
38
38
|
require('./contentLogMetadata-ZSFk_NjQ.cjs');
|
|
39
|
-
require('./reconnectGate-
|
|
39
|
+
require('./reconnectGate-DY97bPDg.cjs');
|
|
40
40
|
require('os');
|
|
41
41
|
require('child_process');
|
|
42
42
|
require('node:events');
|
|
43
43
|
require('socket.io-client');
|
|
44
44
|
require('./limits-C-a7gr04.cjs');
|
|
45
|
-
require('./time-
|
|
46
|
-
require('./registerCommonHandlers-
|
|
45
|
+
require('./time-i8fiLSHv.cjs');
|
|
46
|
+
require('./registerCommonHandlers-YsrcwRo3.cjs');
|
|
47
47
|
require('util');
|
|
48
48
|
require('fs/promises');
|
|
49
49
|
require('crypto');
|
|
50
50
|
require('path');
|
|
51
51
|
require('cross-spawn');
|
|
52
52
|
require('@paralleldrive/cuid2');
|
|
53
|
-
require('./sync-
|
|
53
|
+
require('./sync-DS_emV3g.cjs');
|
|
54
54
|
require('./backgroundTaskActivity-CBvUdj39.cjs');
|
|
55
55
|
require('chalk');
|
|
56
56
|
require('node:util');
|
|
57
57
|
require('./claudeAccountEnv-BTZjHTpF.cjs');
|
|
58
58
|
require('./detectCLI-BuYR_Qxe.cjs');
|
|
59
59
|
require('fs');
|
|
60
|
-
require('./localHappyAgentAuth-
|
|
60
|
+
require('./localHappyAgentAuth-BpBQ_aFo.cjs');
|
|
61
61
|
require('tweetnacl');
|
|
62
62
|
require('./fsMkdir-0K3yENml.cjs');
|
|
63
63
|
require('url');
|
|
@@ -68,7 +68,7 @@ const CLAUDE_EFFORTS = ["low", "medium", "high", "xhigh", "max"];
|
|
|
68
68
|
function restoredClaudeEffort(effort) {
|
|
69
69
|
return CLAUDE_EFFORTS.includes(effort ?? "") ? effort : void 0;
|
|
70
70
|
}
|
|
71
|
-
const importRunClaudeDeps = () => Promise.resolve().then(function () { return require('./runClaudeDeps-
|
|
71
|
+
const importRunClaudeDeps = () => Promise.resolve().then(function () { return require('./runClaudeDeps-C8s0t81_.cjs'); });
|
|
72
72
|
async function runClaude(credentials, options = {}) {
|
|
73
73
|
logger.logger.debug(`[CLAUDE] ===== CLAUDE MODE STARTING =====`);
|
|
74
74
|
logger.logger.debug(`[CLAUDE] This is the Claude agent, NOT Gemini`);
|
|
@@ -84,7 +84,7 @@ async function runClaude(credentials, options = {}) {
|
|
|
84
84
|
const isAssistantVariant = process.env.HAPPY_SESSION_VARIANT === "assistant";
|
|
85
85
|
if (isAssistantVariant) {
|
|
86
86
|
try {
|
|
87
|
-
const { bootstrapAssistantHome } = await Promise.resolve().then(function () { return require('./bootstrap-
|
|
87
|
+
const { bootstrapAssistantHome } = await Promise.resolve().then(function () { return require('./bootstrap-DPbGC_1B.cjs'); });
|
|
88
88
|
await bootstrapAssistantHome();
|
|
89
89
|
} catch (error) {
|
|
90
90
|
logger.logger.debug("[START] Assistant home bootstrap failed:", error);
|
|
@@ -219,7 +219,7 @@ async function runClaude(credentials, options = {}) {
|
|
|
219
219
|
}
|
|
220
220
|
if (!response) {
|
|
221
221
|
let offlineSessionId = null;
|
|
222
|
-
const { claudeLocal } = await Promise.resolve().then(function () { return require('./claudeLocal-
|
|
222
|
+
const { claudeLocal } = await Promise.resolve().then(function () { return require('./claudeLocal-D6-w4R7R.cjs'); });
|
|
223
223
|
const { createSessionScanner: createSessionScanner2 } = await loadDeps();
|
|
224
224
|
const reconnection = api.startOfflineReconnection({
|
|
225
225
|
serverUrl: configuration.configuration.serverUrl,
|