@symerian/symi 2.8.12 → 2.8.13
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/{agents-OAonMxYV.js → agents-CgCg4syn.js} +4 -4
- package/dist/{agents.config-BIhaDwT2.js → agents.config-BnPC7uct.js} +1 -1
- package/dist/{agents.config-DGu_K5xz.js → agents.config-DqWxpgkX.js} +1 -1
- package/dist/{audio-preflight-C6vpFnOG.js → audio-preflight-NdNUAZ0y.js} +4 -4
- package/dist/{auth-choice-DDzWns1k.js → auth-choice-BIlBt2d0.js} +1 -1
- package/dist/{auth-choice-BvPX7B4c.js → auth-choice-BKwypsnS.js} +1 -1
- package/dist/{banner-BFdiq-O5.js → banner-CX5CuLWQ.js} +1 -1
- package/dist/build-info.json +3 -3
- package/dist/bundled/boot-md/handler.js +2 -2
- package/dist/bundled/session-memory/handler.js +2 -2
- package/dist/canvas-host/a2ui/.bundle.hash +1 -1
- package/dist/{channel-options-tfnOGSNF.js → channel-options-7y9EuPLO.js} +1 -1
- package/dist/{channel-options-DTqUB0OP.js → channel-options-mUKQVJQl.js} +1 -1
- package/dist/{channel-web-CcUXobcu.js → channel-web-Dldh4zVI.js} +1 -1
- package/dist/{channels-cli-CmShA-wJ.js → channels-cli-Dz9vV1KL.js} +6 -6
- package/dist/{channels-cli-BcE5tHIr.js → channels-cli-Q6Q8LokG.js} +6 -6
- package/dist/{chrome-B14NNyfm.js → chrome-BUT--ob3.js} +7 -7
- package/dist/{cli-CKG2iAr3.js → cli-D4WYEtu4.js} +3 -3
- package/dist/{cli-BxoD2wzk.js → cli-DMsLCQbO.js} +3 -3
- package/dist/{command-registry-D1Le-Fmh.js → command-registry-cEqGIx4b.js} +10 -10
- package/dist/{completion-cli-DgiFjSGS.js → completion-cli-Bw0jbNaG.js} +1 -1
- package/dist/{completion-cli-D9pC-ttw.js → completion-cli-C5GCKfKT.js} +2 -2
- package/dist/{config-cli-C_uZQsTl.js → config-cli-DP0hP7WR.js} +1 -1
- package/dist/{config-cli-5mFA0UDP.js → config-cli-DgHooQ4_.js} +1 -1
- package/dist/{configure-DuRTFCuW.js → configure-BQUkaPdS.js} +3 -3
- package/dist/{configure-BJcy7wXm.js → configure-OUiXvgMg.js} +3 -3
- package/dist/{deliver-D0bWiRCg.js → deliver-B_Q_nWJV.js} +1 -1
- package/dist/{doctor-completion-DCRTHpiY.js → doctor-completion-BSMAyCq_.js} +1 -1
- package/dist/{doctor-completion-sQVhKKei.js → doctor-completion-DlKvncR9.js} +1 -1
- package/dist/entry.js +1 -1
- package/dist/extensionAPI.js +7 -7
- package/dist/{gateway-cli-C3ujhxO0.js → gateway-cli-BlRNLVfU.js} +180 -11
- package/dist/{gateway-cli-C_MT4JFm.js → gateway-cli-NI7W2QxR.js} +180 -11
- package/dist/{glass-ui-ws-ColAiWUr.js → glass-ui-ws-BBkFBsKB.js} +9 -9
- package/dist/{glass-ui-ws-B7zRY2BL.js → glass-ui-ws-DxrESDzy.js} +9 -9
- package/dist/{health-vKJZ7iJR.js → health-D4vU-wV-.js} +1 -1
- package/dist/{health-C12hy3Ao.js → health-fOu0S75U.js} +1 -1
- package/dist/{hooks-cli-CdUQvj8s.js → hooks-cli-BdgnXYmw.js} +4 -4
- package/dist/{hooks-cli-fCPl5hur.js → hooks-cli-DdSggQYs.js} +4 -4
- package/dist/{image-MNvheU8U.js → image-tzIqIuKx.js} +1 -1
- package/dist/index.js +8 -8
- package/dist/llm-slug-generator.js +2 -2
- package/dist/{manager-DHRBy5oR.js → manager-DRrGn88w.js} +1 -1
- package/dist/{manager-BJvYQ7xP.js → manager-TOeH0D8K.js} +1 -1
- package/dist/{manager-Df_ZdrNG.js → manager-_RGWWymD.js} +1 -1
- package/dist/{manager-CLrJn9l-.js → manager-syNf_ZrI.js} +1 -1
- package/dist/{memory-cli-T-a5-lqZ.js → memory-cli-0jm-n36m.js} +3 -3
- package/dist/{memory-cli-BgJciaHC.js → memory-cli-BSOOwpt1.js} +3 -3
- package/dist/{models-cli-BI-DyItH.js → models-cli-CtkoEyh3.js} +4 -4
- package/dist/{models-cli-Bs6JAGq-.js → models-cli-DV-J1cm0.js} +5 -5
- package/dist/{models-BXXV_sZU.js → models-sGeWQOmg.js} +2 -2
- package/dist/{onboard-DKDCWveE.js → onboard-CWBYuaCm.js} +2 -2
- package/dist/{onboard-Czi_FRdi.js → onboard-FeTHeA1y.js} +2 -2
- package/dist/{onboard-channels-BUCYZF02.js → onboard-channels-D8bDJYPc.js} +1 -1
- package/dist/{onboard-channels-sTuhQBVu.js → onboard-channels-DpZkjldS.js} +1 -1
- package/dist/{onboarding-Bgx0qZhA.js → onboarding-BsPnnH5g.js} +3 -3
- package/dist/{onboarding-CokRRVEi.js → onboarding-c2qhwP0x.js} +3 -3
- package/dist/{onboarding.finalize-BCv5jB0d.js → onboarding.finalize-7St3fmk2.js} +8 -8
- package/dist/{onboarding.finalize-BzEKyraI.js → onboarding.finalize-id9EHg1P.js} +7 -7
- package/dist/{pi-embedded-DXY7TLac.js → pi-embedded-DCBB1_SC.js} +20 -23
- package/dist/{pi-embedded-helpers-TcYQOZAY.js → pi-embedded-helpers-DjSdA5BG.js} +4 -4
- package/dist/{plugin-registry-CyrsJDyE.js → plugin-registry-BJSfTT8c.js} +1 -1
- package/dist/{plugin-registry-B2cpTmJz.js → plugin-registry-Cy1kfzAy.js} +1 -1
- package/dist/plugin-sdk/{accounts-BToL3HlP.js → accounts-BtaOa4z_.js} +1 -1
- package/dist/plugin-sdk/{accounts-D9zGZU5t.js → accounts-Ddm33hQm.js} +3 -3
- package/dist/plugin-sdk/{accounts-Dtszw3Zn.js → accounts-s-AdhXVR.js} +1 -1
- package/dist/plugin-sdk/{active-listener-CJuvR4C2.js → active-listener-DYjn3fML.js} +1 -1
- package/dist/plugin-sdk/{agent-scope-C3gMMKCU.js → agent-scope-CYYpcO9W.js} +2 -2
- package/dist/plugin-sdk/{api-key-rotation-CBsLb_4V.js → api-key-rotation-DGJZ8SVa.js} +1 -1
- package/dist/plugin-sdk/{audio-preflight-DucGa8w7.js → audio-preflight-CiVw8470.js} +24 -24
- package/dist/plugin-sdk/{bindings-BbwoUGPx.js → bindings-C7hRtgYW.js} +2 -2
- package/dist/plugin-sdk/{channel-activity-Ji7f0gqq.js → channel-activity-DoC1xtDu.js} +1 -1
- package/dist/plugin-sdk/{channel-web-t6enTxNE.js → channel-web-BSDjZSwm.js} +22 -22
- package/dist/plugin-sdk/{chrome-D9kN9org.js → chrome-CEqfiEs0.js} +3 -3
- package/dist/plugin-sdk/{chunk-jvk9axTQ.js → chunk-Dw2XBYXv.js} +1 -1
- package/dist/plugin-sdk/{command-format-DSdvQ_M5.js → command-format-GKSevep4.js} +1 -1
- package/dist/plugin-sdk/{commands-registry-BuYpmEx-.js → commands-registry-BhW_oGNt.js} +4 -4
- package/dist/plugin-sdk/{config-BzupW6LN.js → config-Ckum15iC.js} +9 -9
- package/dist/plugin-sdk/{consolidate-CafShdsH.js → consolidate-COuTEt4Z.js} +2 -2
- package/dist/plugin-sdk/{deliver-CKgFosI5.js → deliver-B8Y2t-RH.js} +10 -10
- package/dist/plugin-sdk/{diagnostic-_oc91gNi.js → diagnostic-BR07buTm.js} +1 -1
- package/dist/plugin-sdk/{image-DFyINnvE.js → image-CCmNHDV0.js} +4 -4
- package/dist/plugin-sdk/{image-ops-Bnp6LXEx.js → image-ops-BlQR__MN.js} +1 -1
- package/dist/plugin-sdk/index.js +54 -54
- package/dist/plugin-sdk/{ir-Fb3qpcis.js → ir-BJ6BHE5b.js} +4 -4
- package/dist/plugin-sdk/{local-roots-Ckk1QfzI.js → local-roots-BHLNSI8U.js} +3 -3
- package/dist/plugin-sdk/{login-K1YB_7-t.js → login-g_rQAcuM.js} +7 -7
- package/dist/plugin-sdk/{login-qr-lMl_OqDj.js → login-qr-BOUmLSY3.js} +9 -9
- package/dist/plugin-sdk/{manager-LRE7zEk2.js → manager-B9GigLWj.js} +9 -9
- package/dist/plugin-sdk/{manifest-registry-hy3Bn-r9.js → manifest-registry-BRx4JDK0.js} +1 -1
- package/dist/plugin-sdk/{markdown-tables-Dfaqilz6.js → markdown-tables-BoYFajMu.js} +1 -1
- package/dist/plugin-sdk/{message-channel-BdI5Ra9S.js → message-channel-COTAJzHd.js} +1 -1
- package/dist/plugin-sdk/{model-selection-CtVwtb6y.js → model-selection-Bbs4XGPG.js} +4 -4
- package/dist/plugin-sdk/{outbound-DW3cqlQW.js → outbound-BVhSNFy0.js} +7 -7
- package/dist/plugin-sdk/{outbound-attachment-D7ME_Kib.js → outbound-attachment-B56R1Wi4.js} +2 -2
- package/dist/plugin-sdk/{pi-auth-json-DiyK6bgV.js → pi-auth-json-CB2bV0Jd.js} +1 -1
- package/dist/plugin-sdk/{pi-embedded-helpers-BL7ZRhGv.js → pi-embedded-helpers-dd3G9Hfi.js} +17 -17
- package/dist/plugin-sdk/{plugins-BbAvhC25.js → plugins-BNByVCIH.js} +4 -4
- package/dist/plugin-sdk/{pw-ai-B3T0mTHr.js → pw-ai-BXeOYCz_.js} +8 -8
- package/dist/plugin-sdk/{qmd-manager-BlUikj9s.js → qmd-manager-wIr8qz2n.js} +4 -4
- package/dist/plugin-sdk/{registry--_pGht6S.js → registry-D0xTnUWt.js} +2 -2
- package/dist/plugin-sdk/{replies-BR2TPTVW.js → replies-CQ4szNhV.js} +3 -3
- package/dist/plugin-sdk/{reply-JypoGhql.js → reply-DD8z_dUW.js} +79 -82
- package/dist/plugin-sdk/{reply-prefix-BHuV5t70.js → reply-prefix-uxfMZW4p.js} +1 -1
- package/dist/plugin-sdk/{resolve-outbound-target-BkCUbYGV.js → resolve-outbound-target-BiyAyTWz.js} +2 -2
- package/dist/plugin-sdk/{resolve-route-CHQ7BTlU.js → resolve-route-CWfcnhza.js} +3 -3
- package/dist/plugin-sdk/{retry-ilSJqnz9.js → retry-CwQ_iIj8.js} +1 -1
- package/dist/plugin-sdk/{runner-BhifC1J_.js → runner-BuxCHv_O.js} +9 -9
- package/dist/plugin-sdk/{send-CGhw9mO3.js → send-BtO-7fHs.js} +6 -6
- package/dist/plugin-sdk/{send-DLO_yV5_.js → send-CKXzQuXo.js} +10 -10
- package/dist/plugin-sdk/{send-ZhAe1nXO.js → send-Djq5IPRa.js} +10 -10
- package/dist/plugin-sdk/{send-jsofmTfJ.js → send-XSuwT1PC.js} +7 -7
- package/dist/plugin-sdk/{send-BP5pSPaZ.js → send-fNRDT21N.js} +6 -6
- package/dist/plugin-sdk/{session-BfyK_04G.js → session-ARbcLHE9.js} +4 -4
- package/dist/plugin-sdk/{skill-commands-DEfqC_kJ.js → skill-commands-yzJVuTIW.js} +5 -5
- package/dist/plugin-sdk/{skills-C9DbB-Kp.js → skills-BfsaS1F9.js} +7 -7
- package/dist/plugin-sdk/{sqlite-CmVrFEYD.js → sqlite-A3wGzttn.js} +1 -1
- package/dist/plugin-sdk/{store-Do3t33-c.js → store-BdrNabcU.js} +2 -2
- package/dist/plugin-sdk/{subsystem-Coz2AgU8.js → subsystem-B2uDN3TV.js} +1 -1
- package/dist/plugin-sdk/{synthesis-_WpVyZKx.js → synthesis-Dv5GwSky.js} +49 -49
- package/dist/plugin-sdk/{tables-DR0NmBeH.js → tables-DNwXwNFa.js} +1 -1
- package/dist/plugin-sdk/{target-errors-B7YyMnIi.js → target-errors-Paro1BjP.js} +2 -2
- package/dist/plugin-sdk/{thinking-DCNUIAHY.js → thinking-CXqf7WTe.js} +5 -5
- package/dist/plugin-sdk/{tokens-CWMflosr.js → tokens-bC3UVmVH.js} +1 -1
- package/dist/plugin-sdk/{tool-images-D7Lno-TE.js → tool-images-HJ2sfZDV.js} +2 -2
- package/dist/plugin-sdk/{tool-loop-detection-DseOlBug.js → tool-loop-detection-gmtzSlNZ.js} +2 -2
- package/dist/plugin-sdk/web-CmKqZEsX.js +66 -0
- package/dist/plugin-sdk/{whatsapp-actions-eTefsWhW.js → whatsapp-actions-B_1l8JMU.js} +21 -21
- package/dist/{plugins-cli-B-zoQyqU.js → plugins-cli-6UYkZBH0.js} +4 -4
- package/dist/{plugins-cli-DJwRd3EZ.js → plugins-cli-DPetEhfv.js} +4 -4
- package/dist/{program-H7h6Iqrq.js → program-CVy9LVoS.js} +9 -9
- package/dist/{program-context-BgecQAHU.js → program-context-CBI6gIf-.js} +18 -18
- package/dist/{prompt-select-styled-BglmD29e.js → prompt-select-styled-BlXl_Qf7.js} +6 -6
- package/dist/{prompt-select-styled-BDN2o35i.js → prompt-select-styled-Bv675D48.js} +6 -6
- package/dist/{provider-auth-helpers-MfKmTeLY.js → provider-auth-helpers-BB1lhCy5.js} +1 -1
- package/dist/{provider-auth-helpers-BGIgr7xM.js → provider-auth-helpers-RUQD5XAm.js} +1 -1
- package/dist/{push-apns-b6bH1EBC.js → push-apns-Cr-a1KBt.js} +1 -1
- package/dist/{push-apns-IcfSTzfr.js → push-apns-rPetW5cI.js} +1 -1
- package/dist/{pw-ai-40Jf9QIb.js → pw-ai-CQtaPvM8.js} +1 -1
- package/dist/{register.agent-ChwMSIC4.js → register.agent-DKDwNHQi.js} +8 -8
- package/dist/{register.agent-BgyETrrj.js → register.agent-j6OlKEU-.js} +7 -7
- package/dist/{register.configure-Bm4CvoLF.js → register.configure-BgIXIq9d.js} +8 -8
- package/dist/{register.configure-DH3L2tqW.js → register.configure-CopgSygi.js} +8 -8
- package/dist/{register.maintenance-CAyHUEzP.js → register.maintenance-BKsCM6NG.js} +10 -10
- package/dist/{register.maintenance-BbOBw1eI.js → register.maintenance-DjaGkVtr.js} +9 -9
- package/dist/{register.message-DheqsiR0.js → register.message-C3oHvmdl.js} +4 -4
- package/dist/{register.message-DQ3MOWFE.js → register.message-bxhUcSyj.js} +4 -4
- package/dist/{register.onboard-CxqR4S1C.js → register.onboard-D0DHcb20.js} +6 -6
- package/dist/{register.onboard-DOJkUhoY.js → register.onboard-DijWH8Vd.js} +6 -6
- package/dist/{register.setup-48YBHzMZ.js → register.setup-CrFzd94c.js} +6 -6
- package/dist/{register.setup-zdrIJA2P.js → register.setup-XlCTnTm_.js} +6 -6
- package/dist/{register.status-health-sessions-CimrhScH.js → register.status-health-sessions-AWCg_uLf.js} +5 -5
- package/dist/{register.status-health-sessions-CeT5pVXb.js → register.status-health-sessions-VwvDWUxZ.js} +5 -5
- package/dist/{register.subclis-B-zh940S.js → register.subclis-Bw8k5Z5C.js} +9 -9
- package/dist/{reply-CUR4xpYM.js → reply-D7_t00Jt.js} +5 -8
- package/dist/{run-main-CW_kj5Lj.js → run-main-7BEaNeDG.js} +17 -17
- package/dist/{runner-DFuAePEr.js → runner-Dpjulwnm.js} +1 -1
- package/dist/{server-methods-C1h0A5n0.js → server-methods-CTeJHJSZ.js} +7 -7
- package/dist/{server-methods-C4id-H_X.js → server-methods-FQ-PqiVC.js} +7 -7
- package/dist/{server-node-events-CD2yDaEj.js → server-node-events-BqvcHbuK.js} +4 -4
- package/dist/{server-node-events-BPZEGV_N.js → server-node-events-Z7epDloV.js} +4 -4
- package/dist/{status-_xBnHTlx.js → status-CKROJwI2.js} +1 -1
- package/dist/{status-DCeW2a07.js → status-DLFbpd9v.js} +3 -3
- package/dist/{status-Cb932Vl4.js → status-DMigoL7q.js} +3 -3
- package/dist/{status-DvHD1cnq.js → status-x7WCSVhG.js} +1 -1
- package/dist/{subagent-registry-BKuL9PdW.js → subagent-registry-BvP8AGdE.js} +5 -8
- package/dist/{synthesis-Ia9egx87.js → synthesis-By7KPUAm.js} +3 -3
- package/dist/{synthesis-C9RputIi.js → synthesis-DDId6n26.js} +3 -3
- package/dist/{synthesis-DOiTUsXQ.js → synthesis-DgQz6kPf.js} +7 -7
- package/dist/{synthesis-BUqDGjlc.js → synthesis-E4flT91F.js} +2 -2
- package/dist/{unified-runner-CVItnwwP.js → unified-runner-DaSb-TsZ.js} +6 -9
- package/dist/{update-cli-D6ax3jSX.js → update-cli-C5H6DkNM.js} +9 -9
- package/dist/{update-cli-ChEABesZ.js → update-cli-D0relAZw.js} +10 -10
- package/dist/{update-runner-CWG6GxKs.js → update-runner-B_yVOk8Z.js} +1 -1
- package/dist/{update-runner-B2EY9BWM.js → update-runner-D99V_zHX.js} +1 -1
- package/dist/{web-z-yQ8riS.js → web-BBz1kF_9.js} +2 -2
- package/dist/{web-D6PPeyG7.js → web-BQh2S6oq.js} +3 -3
- package/dist/{web-CpSE67Jp.js → web-Bdebat5l.js} +4 -4
- package/dist/{web-DMdb2p-h.js → web-CiYoJfrl.js} +7 -7
- package/extensions/bluebubbles/package.json +1 -1
- package/extensions/copilot-proxy/package.json +1 -1
- package/extensions/diagnostics-otel/package.json +1 -1
- package/extensions/discord/package.json +1 -1
- package/extensions/feishu/package.json +1 -1
- package/extensions/google-antigravity-auth/package.json +1 -1
- package/extensions/google-gemini-cli-auth/package.json +1 -1
- package/extensions/googlechat/package.json +1 -1
- package/extensions/imessage/package.json +1 -1
- package/extensions/irc/package.json +1 -1
- package/extensions/learning-loop/package.json +1 -1
- package/extensions/line/package.json +1 -1
- package/extensions/llm-task/package.json +1 -1
- package/extensions/matrix/CHANGELOG.md +6 -0
- package/extensions/matrix/package.json +1 -1
- package/extensions/mattermost/package.json +1 -1
- package/extensions/memory-core/package.json +1 -1
- package/extensions/memory-lancedb/package.json +1 -1
- package/extensions/minimax-portal-auth/package.json +1 -1
- package/extensions/msteams/CHANGELOG.md +6 -0
- package/extensions/msteams/package.json +1 -1
- package/extensions/nextcloud-talk/package.json +1 -1
- package/extensions/nostr/CHANGELOG.md +6 -0
- package/extensions/nostr/package.json +1 -1
- package/extensions/open-prose/package.json +1 -1
- package/extensions/outlook/package.json +1 -1
- package/extensions/pipeline/package.json +1 -1
- package/extensions/signal/package.json +1 -1
- package/extensions/slack/package.json +1 -1
- package/extensions/telegram/package.json +1 -1
- package/extensions/tlon/package.json +1 -1
- package/extensions/twitch/CHANGELOG.md +6 -0
- package/extensions/twitch/package.json +1 -1
- package/extensions/voice-call/CHANGELOG.md +6 -0
- package/extensions/voice-call/package.json +1 -1
- package/extensions/whatsapp/package.json +1 -1
- package/extensions/zalo/CHANGELOG.md +6 -0
- package/extensions/zalo/package.json +1 -1
- package/extensions/zalouser/CHANGELOG.md +6 -0
- package/extensions/zalouser/package.json +1 -1
- package/package.json +1 -1
- package/skills/long-task/scripts/detach-task.sh +57 -5
- package/dist/plugin-sdk/web-BTVj4kiQ.js +0 -66
package/dist/extensionAPI.js
CHANGED
|
@@ -7,13 +7,13 @@ import { a as resolveAgentIdentity } from "./reply-prefix-K_J_nfgx.js";
|
|
|
7
7
|
import "./github-copilot-token-BbsJ0Qbo.js";
|
|
8
8
|
import "./env-CQ_DQOwT.js";
|
|
9
9
|
import "./tokens-Cn6drXx2.js";
|
|
10
|
-
import { O as resolveAgentTimeoutMs, m as runEmbeddedPiAgent } from "./pi-embedded-
|
|
10
|
+
import { O as resolveAgentTimeoutMs, m as runEmbeddedPiAgent } from "./pi-embedded-DCBB1_SC.js";
|
|
11
11
|
import "./plugins-71oIavrF.js";
|
|
12
12
|
import "./accounts-DDEyGwby.js";
|
|
13
13
|
import "./bindings-DYVakimr.js";
|
|
14
14
|
import "./send-BaBv1rAU.js";
|
|
15
15
|
import "./send-DLVrnezL.js";
|
|
16
|
-
import "./deliver-
|
|
16
|
+
import "./deliver-B_Q_nWJV.js";
|
|
17
17
|
import "./diagnostic-Kbl70eCP.js";
|
|
18
18
|
import "./diagnostic-session-state-C1vRJs5w.js";
|
|
19
19
|
import "./accounts-8zZqL37v.js";
|
|
@@ -21,10 +21,10 @@ import "./send-B5kAnKqP.js";
|
|
|
21
21
|
import "./image-ops-ByaQt43P.js";
|
|
22
22
|
import "./pi-model-discovery-j5tVLINv.js";
|
|
23
23
|
import "./message-channel-BQINJQIT.js";
|
|
24
|
-
import { G as saveSessionStore, H as loadSessionStore } from "./pi-embedded-helpers-
|
|
24
|
+
import { G as saveSessionStore, H as loadSessionStore } from "./pi-embedded-helpers-DjSdA5BG.js";
|
|
25
25
|
import "./config-BAVNLbja.js";
|
|
26
26
|
import "./manifest-registry-DWdYdchb.js";
|
|
27
|
-
import "./chrome-
|
|
27
|
+
import "./chrome-BUT--ob3.js";
|
|
28
28
|
import "./skills-XEbTRNYL.js";
|
|
29
29
|
import "./redact-1NGYV_8p.js";
|
|
30
30
|
import "./errors-CPfngF0S.js";
|
|
@@ -34,8 +34,8 @@ import "./thinking-W85Rb32m.js";
|
|
|
34
34
|
import "./accounts-DImOt9jX.js";
|
|
35
35
|
import { n as resolveSessionFilePath, s as resolveStorePath } from "./paths-DkMamAQ-.js";
|
|
36
36
|
import "./tool-images-ChC2CXaN.js";
|
|
37
|
-
import "./image-
|
|
38
|
-
import "./manager-
|
|
37
|
+
import "./image-tzIqIuKx.js";
|
|
38
|
+
import "./manager-DRrGn88w.js";
|
|
39
39
|
import "./gemini-auth-DVcG-42i.js";
|
|
40
40
|
import "./retry-QGp0jvVi.js";
|
|
41
41
|
import "./sqlite-Bo4pHfp8.js";
|
|
@@ -47,7 +47,7 @@ import "./ir-0kwEfxD4.js";
|
|
|
47
47
|
import "./render-qcqmrHse.js";
|
|
48
48
|
import "./commands-registry-ke7KirEH.js";
|
|
49
49
|
import "./skill-commands-CSF7Poen.js";
|
|
50
|
-
import "./runner-
|
|
50
|
+
import "./runner-Dpjulwnm.js";
|
|
51
51
|
import "./fetch-WLZaC77l.js";
|
|
52
52
|
import "./channel-activity-C-6tM-GK.js";
|
|
53
53
|
import "./tables-BE0lT1IV.js";
|
|
@@ -22,7 +22,7 @@ import "./pairing-token-Byh6drgn.js";
|
|
|
22
22
|
import { t as safeEqualSecret } from "./secret-equal-CbntzRkh.js";
|
|
23
23
|
import { a as isValidIPv4, c as resolveClientIp, d as resolveHostName, f as rawDataToString, i as isTrustedProxyAddress, l as resolveGatewayBindHost, n as isLoopbackHost, o as normalizeHostHeader, t as isLoopbackAddress, u as resolveGatewayListenHosts } from "./net-DZ5Ayk-W.js";
|
|
24
24
|
import { n as pickPrimaryTailnetIPv4, r as pickPrimaryTailnetIPv6 } from "./tailnet-Cmumpn76.js";
|
|
25
|
-
import { $ as getCliSessionId, $t as setPreRestartDeferralCheck, An as DEFAULT_INPUT_TIMEOUT_MS, At as normalizeOptionalSessionKey, Bt as buildSafeExternalPrompt, Cn as enqueueSystemEvent, Cr as onAgentEvent, Dn as DEFAULT_INPUT_IMAGE_MAX_BYTES, E as createDefaultDeps, F as buildHistoryContextFromEntries, Ft as buildDeliveryFromLegacyPayload, H as getTotalPendingReplies, Ht as getHookType, In as resolveAgentTimeoutMs, It as hasLegacyDeliveryHints, J as runAgentTurn, Jt as emitGatewayRestart, Kt as consumeGatewaySigusr1RestartAuthorization, Lt as stripLegacyDeliveryFields, Mn as extractImageContentFromSource, Mt as normalizePayloadToSystemText, Nn as normalizeMimeList, Nt as normalizeRequiredName, O as resolveAgentAvatar, On as DEFAULT_INPUT_IMAGE_MIMES, Ot as inferLegacyName, Pn as resolveInputFileLimits, Pt as migrateLegacyCronPayload, Q as resolveModelProfile, Qt as setGatewaySigusr1RestartPolicy, Sr as getAgentRunContext, St as summarizeRestartSentinel, T as createOutboundSendDeps, Tt as normalizeHttpWebhookUrl, Ut as isExternalHookSession, Vt as detectSuspiciousPatterns, X as getActiveEmbeddedRunCount, Xt as markGatewaySigusr1RestartHandled, Yt as isGatewaySigusr1RestartExternallyAllowed, _ as readJsonBodyWithLimit, at as resolveAnnounceTargetFromKey, b as sleepWithAbort, br as clearAgentRunContext, bt as formatRestartSentinelMessage, cr as getActiveTaskCount, ct as resolveOutboundSessionRoute, dn as requestHeartbeatNow, dr as resetAllLanes, dt as resolveOutboundTarget, et as setCliSessionId, f as getPluginToolMeta, fr as setCommandLaneConcurrency, ft as resolveSessionDeliveryTarget, g as handleSlackHttpRequest, gt as runWithModelFallback, hr as DEFAULT_HEARTBEAT_ACK_MAX_CHARS, i as listDescendantRunsForRequester, it as readLatestAssistantReply, jn as extractFileContentFromSource, jt as normalizeOptionalText, kn as DEFAULT_INPUT_MAX_REDIRECTS, kt as normalizeOptionalAgentId, l as applyToolPolicyPipeline, m as loadSymiPlugins, mr as CommandLane, mt as resetDirectoryCache, n as countActiveRunsForSession, pr as waitForActiveTasks, q as resolveCronStyleNow, qt as deferGatewayRestartUntilIdle, r as initSubagentRegistry, rt as createSymiTools, s as runSubagentAnnounceFlow, t as countActiveDescendantRuns, tt as runCliAgent, u as buildDefaultToolPolicyPipelineSteps, ur as getTotalQueueSize, v as requestBodyErrorToText, vt as consumeRestartSentinel, wr as registerAgentRunContext, x as agentCommand, xr as emitAgentEvent, y as computeBackoff, yr as stripHeartbeatToken } from "./subagent-registry-
|
|
25
|
+
import { $ as getCliSessionId, $t as setPreRestartDeferralCheck, An as DEFAULT_INPUT_TIMEOUT_MS, At as normalizeOptionalSessionKey, Bt as buildSafeExternalPrompt, Cn as enqueueSystemEvent, Cr as onAgentEvent, Dn as DEFAULT_INPUT_IMAGE_MAX_BYTES, E as createDefaultDeps, F as buildHistoryContextFromEntries, Ft as buildDeliveryFromLegacyPayload, H as getTotalPendingReplies, Ht as getHookType, In as resolveAgentTimeoutMs, It as hasLegacyDeliveryHints, J as runAgentTurn, Jt as emitGatewayRestart, Kt as consumeGatewaySigusr1RestartAuthorization, Lt as stripLegacyDeliveryFields, Mn as extractImageContentFromSource, Mt as normalizePayloadToSystemText, Nn as normalizeMimeList, Nt as normalizeRequiredName, O as resolveAgentAvatar, On as DEFAULT_INPUT_IMAGE_MIMES, Ot as inferLegacyName, Pn as resolveInputFileLimits, Pt as migrateLegacyCronPayload, Q as resolveModelProfile, Qt as setGatewaySigusr1RestartPolicy, Sr as getAgentRunContext, St as summarizeRestartSentinel, T as createOutboundSendDeps, Tt as normalizeHttpWebhookUrl, Ut as isExternalHookSession, Vt as detectSuspiciousPatterns, X as getActiveEmbeddedRunCount, Xt as markGatewaySigusr1RestartHandled, Yt as isGatewaySigusr1RestartExternallyAllowed, _ as readJsonBodyWithLimit, at as resolveAnnounceTargetFromKey, b as sleepWithAbort, br as clearAgentRunContext, bt as formatRestartSentinelMessage, cr as getActiveTaskCount, ct as resolveOutboundSessionRoute, dn as requestHeartbeatNow, dr as resetAllLanes, dt as resolveOutboundTarget, et as setCliSessionId, f as getPluginToolMeta, fr as setCommandLaneConcurrency, ft as resolveSessionDeliveryTarget, g as handleSlackHttpRequest, gt as runWithModelFallback, hr as DEFAULT_HEARTBEAT_ACK_MAX_CHARS, i as listDescendantRunsForRequester, it as readLatestAssistantReply, jn as extractFileContentFromSource, jt as normalizeOptionalText, kn as DEFAULT_INPUT_MAX_REDIRECTS, kt as normalizeOptionalAgentId, l as applyToolPolicyPipeline, m as loadSymiPlugins, mr as CommandLane, mt as resetDirectoryCache, n as countActiveRunsForSession, pr as waitForActiveTasks, q as resolveCronStyleNow, qt as deferGatewayRestartUntilIdle, r as initSubagentRegistry, rt as createSymiTools, s as runSubagentAnnounceFlow, t as countActiveDescendantRuns, tt as runCliAgent, u as buildDefaultToolPolicyPipelineSteps, ur as getTotalQueueSize, v as requestBodyErrorToText, vt as consumeRestartSentinel, wr as registerAgentRunContext, x as agentCommand, xr as emitAgentEvent, y as computeBackoff, yr as stripHeartbeatToken } from "./subagent-registry-BvP8AGdE.js";
|
|
26
26
|
import { D as resolveSessionResetPolicy, F as resolveMainSessionKey, H as cleanStaleLockFiles, I as resolveMainSessionKeyFromConfig, K as mergeDeliveryContext, M as canonicalizeMainSessionAlias, N as resolveAgentMainSessionKey, T as evaluateSessionFreshness, W as deliveryContextFromSession, d as updateSessionStore, n as parseSessionThreadInfo, o as loadSessionStore } from "./sessions-BPD85pWA.js";
|
|
27
27
|
import { a as isSilentReplyText, n as SILENT_REPLY_TOKEN } from "./tokens-Csntmwwn.js";
|
|
28
28
|
import { n as listChannelPlugins, o as normalizeWhatsAppTarget, r as normalizeChannelId, t as getChannelPlugin } from "./plugins-CwSlLxM8.js";
|
|
@@ -60,8 +60,8 @@ import "./tool-images-CVLISeRT.js";
|
|
|
60
60
|
import { d as supportsXHighThinking, l as normalizeVerboseLevel, s as normalizeThinkLevel } from "./thinking-8sKPnzpp.js";
|
|
61
61
|
import "./models-config-J1x_DaPn.js";
|
|
62
62
|
import { a as resolveAgentIdentity } from "./reply-prefix-BUN71nd5.js";
|
|
63
|
-
import { i as resolveMemoryBackendConfig, r as getMemorySearchManager } from "./memory-cli-
|
|
64
|
-
import { a as resolveMemorySearchConfig } from "./manager-
|
|
63
|
+
import { i as resolveMemoryBackendConfig, r as getMemorySearchManager } from "./memory-cli-BSOOwpt1.js";
|
|
64
|
+
import { a as resolveMemorySearchConfig } from "./manager-syNf_ZrI.js";
|
|
65
65
|
import "./gemini-auth-DEakvf-D.js";
|
|
66
66
|
import "./retry-C4Q_VPOo.js";
|
|
67
67
|
import "./sqlite-BP8tiuca.js";
|
|
@@ -131,20 +131,20 @@ import { n as resolveWideAreaDiscoveryDomain, r as writeWideAreaGatewayZone } fr
|
|
|
131
131
|
import { i as toOptionString, n as extractGatewayMiskeys, r as maybeExplainGatewayServiceStop, t as describeUnknownError } from "./shared-vevi4OAS.js";
|
|
132
132
|
import { c as probeGateway, s as resolveNodeCommandAllowlist } from "./audit-Oa5dsn5p.js";
|
|
133
133
|
import { t as discoverGatewayBeacons } from "./bonjour-discovery-BWaTCKHh.js";
|
|
134
|
-
import { i as pickGatewaySelfPresence } from "./status-
|
|
135
|
-
import { a as styleHealthChannelLine, l as startHeartbeatRunner, n as getHealthSnapshot, s as runHeartbeatOnce, t as formatHealthChannelLines } from "./health-
|
|
134
|
+
import { i as pickGatewaySelfPresence } from "./status-DMigoL7q.js";
|
|
135
|
+
import { a as styleHealthChannelLine, l as startHeartbeatRunner, n as getHealthSnapshot, s as runHeartbeatOnce, t as formatHealthChannelLines } from "./health-fOu0S75U.js";
|
|
136
136
|
import { a as resolveControlUiRootSync, i as resolveControlUiRootOverrideSync, t as ensureControlUiAssetsBuilt } from "./control-ui-assets-Clf7H-Sm.js";
|
|
137
137
|
import { a as resolveNpmChannelTag, c as DEFAULT_PACKAGE_CHANNEL, m as normalizeUpdateChannel, n as compareSemverStrings, t as checkUpdateStatus } from "./update-check-BNjupSIM.js";
|
|
138
|
-
import { t as runOnboardingWizard } from "./onboarding-
|
|
139
|
-
import { C as startGatewayConfigReloader, S as resolveCronRunLogPath, _ as MAX_PAYLOAD_BYTES, a as loadFavoritesSet, b as abortChatRunById, c as resolveAssistantIdentity, d as formatError, f as loadVoiceWakeConfig, g as MAX_BUFFERED_BYTES, h as HEALTH_REFRESH_INTERVAL_MS, i as safeParseJson, l as listSystemPresence, m as DEDUPE_TTL_MS, n as handleGatewayRequest, o as reconcileFavorites, p as DEDUPE_MAX, r as broadcastPresenceSnapshot, s as DEFAULT_ASSISTANT_IDENTITY, t as coreGatewayHandlers, u as upsertPresence, v as TICK_INTERVAL_MS, x as appendCronRunLog, y as getHandshakeTimeoutMs } from "./server-methods-
|
|
140
|
-
import { d as shouldLogWs, f as summarizeAgentEventForWsLog, l as formatForLog, p as setGatewayWsLogStyle, u as logWs } from "./push-apns-
|
|
138
|
+
import { t as runOnboardingWizard } from "./onboarding-BsPnnH5g.js";
|
|
139
|
+
import { C as startGatewayConfigReloader, S as resolveCronRunLogPath, _ as MAX_PAYLOAD_BYTES, a as loadFavoritesSet, b as abortChatRunById, c as resolveAssistantIdentity, d as formatError, f as loadVoiceWakeConfig, g as MAX_BUFFERED_BYTES, h as HEALTH_REFRESH_INTERVAL_MS, i as safeParseJson, l as listSystemPresence, m as DEDUPE_TTL_MS, n as handleGatewayRequest, o as reconcileFavorites, p as DEDUPE_MAX, r as broadcastPresenceSnapshot, s as DEFAULT_ASSISTANT_IDENTITY, t as coreGatewayHandlers, u as upsertPresence, v as TICK_INTERVAL_MS, x as appendCronRunLog, y as getHandshakeTimeoutMs } from "./server-methods-CTeJHJSZ.js";
|
|
140
|
+
import { d as shouldLogWs, f as summarizeAgentEventForWsLog, l as formatForLog, p as setGatewayWsLogStyle, u as logWs } from "./push-apns-rPetW5cI.js";
|
|
141
141
|
import { T as resolveGmailHookRuntimeConfig, _ as buildGogWatchServeArgs, i as ensureTailscaleEndpoint, v as buildGogWatchStartArgs } from "./gmail-setup-utils-YTXXLbHH.js";
|
|
142
|
-
import "./agents.config-
|
|
142
|
+
import "./agents.config-BnPC7uct.js";
|
|
143
143
|
import "./dm-policy-shared-JiSNSaKz.js";
|
|
144
144
|
import "./node-service-B-qdOCNb.js";
|
|
145
145
|
import "./status.update-B5zI1_Id.js";
|
|
146
146
|
import "./skills-install-BnEN_qla.js";
|
|
147
|
-
import "./update-runner-
|
|
147
|
+
import "./update-runner-B_yVOk8Z.js";
|
|
148
148
|
import { t as resolveAgentSessionDirs } from "./session-dirs-Dgz7kkUM.js";
|
|
149
149
|
import { i as shouldIncludeHook, r as resolveHookConfig, t as loadWorkspaceHookEntries } from "./workspace-mCPSj6kV.js";
|
|
150
150
|
import { n as forceFreePortAndWait } from "./ports-DQg7kV5s.js";
|
|
@@ -5405,6 +5405,174 @@ function applyGatewayLaneConcurrency(cfg) {
|
|
|
5405
5405
|
setCommandLaneConcurrency(CommandLane.Subagent, resolveSubagentMaxConcurrent(cfg));
|
|
5406
5406
|
}
|
|
5407
5407
|
|
|
5408
|
+
//#endregion
|
|
5409
|
+
//#region src/infra/long-task-janitor.ts
|
|
5410
|
+
const TASK_FILE_SUFFIXES = [
|
|
5411
|
+
".pid",
|
|
5412
|
+
".cmd",
|
|
5413
|
+
".started",
|
|
5414
|
+
".log",
|
|
5415
|
+
".status"
|
|
5416
|
+
];
|
|
5417
|
+
const TASK_FILE_PREFIX = "task-";
|
|
5418
|
+
const DEFAULT_TASK_FILE_AGE_MS = 10080 * 60 * 1e3;
|
|
5419
|
+
const DEFAULT_SWEEP_INTERVAL_MS = 1440 * 60 * 1e3;
|
|
5420
|
+
function defaultIsPidAlive(pid) {
|
|
5421
|
+
try {
|
|
5422
|
+
process.kill(pid, 0);
|
|
5423
|
+
return true;
|
|
5424
|
+
} catch (err) {
|
|
5425
|
+
if (err.code === "EPERM") return true;
|
|
5426
|
+
return false;
|
|
5427
|
+
}
|
|
5428
|
+
}
|
|
5429
|
+
/**
|
|
5430
|
+
* Sweep dead-task state files from a single workspace directory.
|
|
5431
|
+
*
|
|
5432
|
+
* A task-id is eligible for sweep when its recorded PID is no longer alive
|
|
5433
|
+
* AND the oldest of its state files is older than ageMs. Conservative on
|
|
5434
|
+
* purpose: leaving a stale set for one extra cycle is harmless; deleting
|
|
5435
|
+
* the state of a live task is not.
|
|
5436
|
+
*
|
|
5437
|
+
* Orphans without a `.pid` file (parent crashed before line 180) are also
|
|
5438
|
+
* caught — we key on any task-<id>.<suffix> match.
|
|
5439
|
+
*/
|
|
5440
|
+
async function sweepLongTaskFiles(workdir, options = {}) {
|
|
5441
|
+
const result = {
|
|
5442
|
+
scanned: 0,
|
|
5443
|
+
swept: 0,
|
|
5444
|
+
errors: 0,
|
|
5445
|
+
sweptIds: []
|
|
5446
|
+
};
|
|
5447
|
+
const now = options.now ?? Date.now();
|
|
5448
|
+
const ageMs = options.ageMs ?? DEFAULT_TASK_FILE_AGE_MS;
|
|
5449
|
+
const isPidAlive = options.isPidAlive ?? defaultIsPidAlive;
|
|
5450
|
+
let entries;
|
|
5451
|
+
try {
|
|
5452
|
+
entries = await fs.promises.readdir(workdir);
|
|
5453
|
+
} catch {
|
|
5454
|
+
return result;
|
|
5455
|
+
}
|
|
5456
|
+
const taskIds = /* @__PURE__ */ new Set();
|
|
5457
|
+
for (const entry of entries) {
|
|
5458
|
+
if (!entry.startsWith(TASK_FILE_PREFIX)) continue;
|
|
5459
|
+
for (const suffix of TASK_FILE_SUFFIXES) if (entry.endsWith(suffix)) {
|
|
5460
|
+
const id = entry.slice(5, -suffix.length);
|
|
5461
|
+
if (id.length > 0) taskIds.add(id);
|
|
5462
|
+
break;
|
|
5463
|
+
}
|
|
5464
|
+
}
|
|
5465
|
+
for (const taskId of taskIds) {
|
|
5466
|
+
result.scanned++;
|
|
5467
|
+
const pidPath = path.join(workdir, `${TASK_FILE_PREFIX}${taskId}.pid`);
|
|
5468
|
+
let pid = 0;
|
|
5469
|
+
let pidStatMs = null;
|
|
5470
|
+
try {
|
|
5471
|
+
const pidText = await fs.promises.readFile(pidPath, "utf8");
|
|
5472
|
+
pid = Number.parseInt(pidText.trim(), 10);
|
|
5473
|
+
pidStatMs = (await fs.promises.stat(pidPath)).mtimeMs;
|
|
5474
|
+
} catch (err) {
|
|
5475
|
+
if (err.code !== "ENOENT") {
|
|
5476
|
+
result.errors++;
|
|
5477
|
+
continue;
|
|
5478
|
+
}
|
|
5479
|
+
}
|
|
5480
|
+
if (pid > 0 && Number.isFinite(pid) && isPidAlive(pid)) continue;
|
|
5481
|
+
let oldestMs = pidStatMs ?? Number.POSITIVE_INFINITY;
|
|
5482
|
+
for (const suffix of TASK_FILE_SUFFIXES) {
|
|
5483
|
+
if (suffix === ".pid" && pidStatMs !== null) continue;
|
|
5484
|
+
try {
|
|
5485
|
+
const stat = await fs.promises.stat(path.join(workdir, `${TASK_FILE_PREFIX}${taskId}${suffix}`));
|
|
5486
|
+
if (stat.mtimeMs < oldestMs) oldestMs = stat.mtimeMs;
|
|
5487
|
+
} catch {}
|
|
5488
|
+
}
|
|
5489
|
+
if (!Number.isFinite(oldestMs)) continue;
|
|
5490
|
+
if (now - oldestMs < ageMs) continue;
|
|
5491
|
+
let unlinkErrors = 0;
|
|
5492
|
+
for (const suffix of TASK_FILE_SUFFIXES) try {
|
|
5493
|
+
await fs.promises.unlink(path.join(workdir, `${TASK_FILE_PREFIX}${taskId}${suffix}`));
|
|
5494
|
+
} catch (err) {
|
|
5495
|
+
if (err.code !== "ENOENT") unlinkErrors++;
|
|
5496
|
+
}
|
|
5497
|
+
if (unlinkErrors > 0) result.errors++;
|
|
5498
|
+
else {
|
|
5499
|
+
result.swept++;
|
|
5500
|
+
result.sweptIds.push(taskId);
|
|
5501
|
+
}
|
|
5502
|
+
}
|
|
5503
|
+
return result;
|
|
5504
|
+
}
|
|
5505
|
+
async function collectAgentWorkspaces(cfg) {
|
|
5506
|
+
const config = cfg ?? loadConfig();
|
|
5507
|
+
const seen = /* @__PURE__ */ new Set();
|
|
5508
|
+
for (const agentId of listAgentIds(config)) try {
|
|
5509
|
+
const ws = resolveAgentWorkspaceDir(config, agentId);
|
|
5510
|
+
if (ws) seen.add(ws);
|
|
5511
|
+
} catch {}
|
|
5512
|
+
return [...seen];
|
|
5513
|
+
}
|
|
5514
|
+
let janitorTimer = null;
|
|
5515
|
+
let janitorBootKick = null;
|
|
5516
|
+
function startLongTaskJanitor(options = {}) {
|
|
5517
|
+
if (janitorTimer) return () => stopLongTaskJanitor();
|
|
5518
|
+
const log = getChildLogger({ module: "long-task-janitor" });
|
|
5519
|
+
const intervalMs = options.intervalMs ?? DEFAULT_SWEEP_INTERVAL_MS;
|
|
5520
|
+
const ageMs = options.ageMs ?? DEFAULT_TASK_FILE_AGE_MS;
|
|
5521
|
+
const getWorkspaces = options.getWorkspaces ?? (() => collectAgentWorkspaces());
|
|
5522
|
+
const nowFn = options.now ?? Date.now;
|
|
5523
|
+
const sweep = async () => {
|
|
5524
|
+
let workspaces = [];
|
|
5525
|
+
try {
|
|
5526
|
+
workspaces = await getWorkspaces();
|
|
5527
|
+
} catch (err) {
|
|
5528
|
+
log.warn({ err: String(err) }, "long-task-janitor: collect workspaces failed");
|
|
5529
|
+
return;
|
|
5530
|
+
}
|
|
5531
|
+
let scanned = 0;
|
|
5532
|
+
let swept = 0;
|
|
5533
|
+
let errors = 0;
|
|
5534
|
+
for (const ws of workspaces) try {
|
|
5535
|
+
const r = await sweepLongTaskFiles(ws, {
|
|
5536
|
+
now: nowFn(),
|
|
5537
|
+
ageMs
|
|
5538
|
+
});
|
|
5539
|
+
scanned += r.scanned;
|
|
5540
|
+
swept += r.swept;
|
|
5541
|
+
errors += r.errors;
|
|
5542
|
+
} catch (err) {
|
|
5543
|
+
errors++;
|
|
5544
|
+
log.warn({
|
|
5545
|
+
err: String(err),
|
|
5546
|
+
workdir: ws
|
|
5547
|
+
}, "long-task-janitor: sweep failed");
|
|
5548
|
+
}
|
|
5549
|
+
if (swept > 0 || errors > 0) log.info({
|
|
5550
|
+
scanned,
|
|
5551
|
+
swept,
|
|
5552
|
+
errors
|
|
5553
|
+
}, "long-task-janitor: sweep complete");
|
|
5554
|
+
};
|
|
5555
|
+
janitorBootKick = setTimeout(() => {
|
|
5556
|
+
sweep();
|
|
5557
|
+
}, 6e4);
|
|
5558
|
+
janitorBootKick.unref?.();
|
|
5559
|
+
janitorTimer = setInterval(() => {
|
|
5560
|
+
sweep();
|
|
5561
|
+
}, intervalMs);
|
|
5562
|
+
janitorTimer.unref?.();
|
|
5563
|
+
return () => stopLongTaskJanitor();
|
|
5564
|
+
}
|
|
5565
|
+
function stopLongTaskJanitor() {
|
|
5566
|
+
if (janitorTimer) {
|
|
5567
|
+
clearInterval(janitorTimer);
|
|
5568
|
+
janitorTimer = null;
|
|
5569
|
+
}
|
|
5570
|
+
if (janitorBootKick) {
|
|
5571
|
+
clearTimeout(janitorBootKick);
|
|
5572
|
+
janitorBootKick = null;
|
|
5573
|
+
}
|
|
5574
|
+
}
|
|
5575
|
+
|
|
5408
5576
|
//#endregion
|
|
5409
5577
|
//#region src/gateway/server/health-state.ts
|
|
5410
5578
|
let presenceVersion = 1;
|
|
@@ -5493,6 +5661,7 @@ function startGatewayMaintenanceTimers(params) {
|
|
|
5493
5661
|
params.refreshGatewayHealthSnapshot({ probe: true }).catch((err) => params.logHealth.error(`refresh failed: ${formatError(err)}`));
|
|
5494
5662
|
}, HEALTH_REFRESH_INTERVAL_MS);
|
|
5495
5663
|
params.refreshGatewayHealthSnapshot({ probe: true }).catch((err) => params.logHealth.error(`initial refresh failed: ${formatError(err)}`));
|
|
5664
|
+
startLongTaskJanitor();
|
|
5496
5665
|
return {
|
|
5497
5666
|
tickInterval,
|
|
5498
5667
|
healthInterval,
|
|
@@ -11955,7 +12124,7 @@ async function startGatewayServer(port = 18789, opts = {}) {
|
|
|
11955
12124
|
});
|
|
11956
12125
|
let glassUiBridgeCleanup = null;
|
|
11957
12126
|
if (!minimalTestGateway) {
|
|
11958
|
-
const { createGlassUiBridge } = await import("./glass-ui-ws-
|
|
12127
|
+
const { createGlassUiBridge } = await import("./glass-ui-ws-DxrESDzy.js");
|
|
11959
12128
|
glassUiBridgeCleanup = createGlassUiBridge({
|
|
11960
12129
|
wss: glassUiWss,
|
|
11961
12130
|
context: gatewayRequestContext,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { _ as expandHomePrefix, g as resolveStateDir, i as isNixMode, l as resolveGatewayLockDir, o as resolveConfigPath, r as STATE_DIR, t as CONFIG_PATH, u as resolveGatewayPort } from "./paths-Cqn-zk3M.js";
|
|
2
2
|
import { B as theme, E as truncateUtf16Safe, H as getLogger, P as setVerbose, R as colorize, S as shortenHomePath, U as getResolvedLoggerSettings, V as getChildLogger, c as ensureDir, t as CONFIG_DIR, y as resolveUserPath, z as isRich } from "./utils-B-0b9bGM.js";
|
|
3
3
|
import { d as supportsXHighThinking, l as normalizeVerboseLevel, s as normalizeThinkLevel } from "./thinking-EAliFiVK.js";
|
|
4
|
-
import { $ as buildDeliveryFromLegacyPayload, A as emitGatewayRestart, An as initSubagentRegistry, Ar as extractImageContentFromSource, B as summarizeRestartSentinel, Bn as registerAgentRunContext, Ct as requestBodyErrorToText, Dr as DEFAULT_INPUT_MAX_REDIRECTS, E as resetDirectoryCache, Er as DEFAULT_INPUT_IMAGE_MIMES, Et as agentCommand, F as setPreRestartDeferralCheck, Fn as readLatestAssistantReply, Gt as getCliSessionId, I as consumeRestartSentinel, In as clearAgentRunContext, J as normalizeOptionalSessionKey, K as inferLegacyName, Kt as setCliSessionId, Ln as emitAgentEvent, Lt as createDefaultDeps, M as markGatewaySigusr1RestartHandled, Mr as resolveInputFileLimits, Mt as resolveOutboundTarget, Nt as resolveSessionDeliveryTarget, O as consumeGatewaySigusr1RestartAuthorization, On as countActiveDescendantRuns, Or as DEFAULT_INPUT_TIMEOUT_MS, P as setGatewaySigusr1RestartPolicy, Pn as runSubagentAnnounceFlow, Pr as resolveAgentTimeoutMs, Pt as createOutboundSendDeps, Q as migrateLegacyCronPayload, R as formatRestartSentinelMessage, Rn as getAgentRunContext, St as readJsonBodyWithLimit, Tr as DEFAULT_INPUT_IMAGE_MAX_BYTES, Tt as sleepWithAbort, U as normalizeHttpWebhookUrl, Ut as resolveModelProfile, Vt as getActiveEmbeddedRunCount, Wt as runWithModelFallback, X as normalizePayloadToSystemText, Xt as resolveAgentAvatar, Y as normalizeOptionalText, Z as normalizeRequiredName, _ as loadCombinedSessionStoreForGateway, ar as setCommandLaneConcurrency, cn as buildHistoryContextFromEntries, cr as DEFAULT_HEARTBEAT_ACK_MAX_CHARS, d as createSymiTools, en as buildSafeExternalPrompt, et as hasLegacyDeliveryHints, f as resolveAnnounceTargetFromKey, fr as stripHeartbeatToken, ft as loadSymiPlugins, g as listSessionsFromStore, hn as getTotalPendingReplies, i as resolveCronStyleNow, ir as resetAllLanes, j as isGatewaySigusr1RestartExternallyAllowed, jn as listDescendantRunsForRequester, jr as normalizeMimeList, k as deferGatewayRestartUntilIdle, kn as countActiveRunsForSession, kr as extractFileContentFromSource, l as applyToolPolicyPipeline, nn as getHookType, or as waitForActiveTasks, pr as lookupContextTokens, q as normalizeOptionalAgentId, qt as runCliAgent, rn as isExternalHookSession, rr as getTotalQueueSize, sr as CommandLane, st as requestHeartbeatNow, tn as detectSuspiciousPatterns, tr as getActiveTaskCount, tt as stripLegacyDeliveryFields, u as buildDefaultToolPolicyPipelineSteps, ut as getPluginToolMeta, v as loadSessionEntry, w as resolveOutboundSessionRoute, wt as computeBackoff, xr as enqueueSystemEvent, xt as handleSlackHttpRequest, zn as onAgentEvent, zt as runAgentTurn } from "./reply-
|
|
4
|
+
import { $ as buildDeliveryFromLegacyPayload, A as emitGatewayRestart, An as initSubagentRegistry, Ar as extractImageContentFromSource, B as summarizeRestartSentinel, Bn as registerAgentRunContext, Ct as requestBodyErrorToText, Dr as DEFAULT_INPUT_MAX_REDIRECTS, E as resetDirectoryCache, Er as DEFAULT_INPUT_IMAGE_MIMES, Et as agentCommand, F as setPreRestartDeferralCheck, Fn as readLatestAssistantReply, Gt as getCliSessionId, I as consumeRestartSentinel, In as clearAgentRunContext, J as normalizeOptionalSessionKey, K as inferLegacyName, Kt as setCliSessionId, Ln as emitAgentEvent, Lt as createDefaultDeps, M as markGatewaySigusr1RestartHandled, Mr as resolveInputFileLimits, Mt as resolveOutboundTarget, Nt as resolveSessionDeliveryTarget, O as consumeGatewaySigusr1RestartAuthorization, On as countActiveDescendantRuns, Or as DEFAULT_INPUT_TIMEOUT_MS, P as setGatewaySigusr1RestartPolicy, Pn as runSubagentAnnounceFlow, Pr as resolveAgentTimeoutMs, Pt as createOutboundSendDeps, Q as migrateLegacyCronPayload, R as formatRestartSentinelMessage, Rn as getAgentRunContext, St as readJsonBodyWithLimit, Tr as DEFAULT_INPUT_IMAGE_MAX_BYTES, Tt as sleepWithAbort, U as normalizeHttpWebhookUrl, Ut as resolveModelProfile, Vt as getActiveEmbeddedRunCount, Wt as runWithModelFallback, X as normalizePayloadToSystemText, Xt as resolveAgentAvatar, Y as normalizeOptionalText, Z as normalizeRequiredName, _ as loadCombinedSessionStoreForGateway, ar as setCommandLaneConcurrency, cn as buildHistoryContextFromEntries, cr as DEFAULT_HEARTBEAT_ACK_MAX_CHARS, d as createSymiTools, en as buildSafeExternalPrompt, et as hasLegacyDeliveryHints, f as resolveAnnounceTargetFromKey, fr as stripHeartbeatToken, ft as loadSymiPlugins, g as listSessionsFromStore, hn as getTotalPendingReplies, i as resolveCronStyleNow, ir as resetAllLanes, j as isGatewaySigusr1RestartExternallyAllowed, jn as listDescendantRunsForRequester, jr as normalizeMimeList, k as deferGatewayRestartUntilIdle, kn as countActiveRunsForSession, kr as extractFileContentFromSource, l as applyToolPolicyPipeline, nn as getHookType, or as waitForActiveTasks, pr as lookupContextTokens, q as normalizeOptionalAgentId, qt as runCliAgent, rn as isExternalHookSession, rr as getTotalQueueSize, sr as CommandLane, st as requestHeartbeatNow, tn as detectSuspiciousPatterns, tr as getActiveTaskCount, tt as stripLegacyDeliveryFields, u as buildDefaultToolPolicyPipelineSteps, ut as getPluginToolMeta, v as loadSessionEntry, w as resolveOutboundSessionRoute, wt as computeBackoff, xr as enqueueSystemEvent, xt as handleSlackHttpRequest, zn as onAgentEvent, zt as runAgentTurn } from "./reply-D7_t00Jt.js";
|
|
5
5
|
import { S as parseAgentSessionKey, c as normalizeMainKey, f as toAgentRequestSessionKey, l as resolveAgentIdFromSessionKey, m as DEFAULT_ACCOUNT_ID, p as toAgentStoreSessionKey, r as buildAgentMainSessionKey, s as normalizeAgentId, t as DEFAULT_AGENT_ID, x as isSubagentSessionKey, y as isCronRunSessionKey } from "./session-key-DCt45XZa.js";
|
|
6
6
|
import { r as matchesSkillFilter, t as resolveSymiPackageRoot } from "./symi-root-CrGJbkzf.js";
|
|
7
7
|
import { C as createInternalHookEvent, S as clearInternalHooks, T as triggerInternalHook, m as createEmptyPluginRegistry, r as DEFAULT_CHAT_CHANNEL, w as registerInternalHook } from "./registry-Cja8eT7G.js";
|
|
@@ -67,8 +67,8 @@ import "./diagnostic-session-state-CUslJyKP.js";
|
|
|
67
67
|
import "./send-DpMnSIi5.js";
|
|
68
68
|
import "./model-ECsJuJew.js";
|
|
69
69
|
import { a as resolveAgentIdentity } from "./reply-prefix-CE2YmmsD.js";
|
|
70
|
-
import { i as resolveMemoryBackendConfig, r as getMemorySearchManager } from "./memory-cli-
|
|
71
|
-
import { a as resolveMemorySearchConfig } from "./manager-
|
|
70
|
+
import { i as resolveMemoryBackendConfig, r as getMemorySearchManager } from "./memory-cli-0jm-n36m.js";
|
|
71
|
+
import { a as resolveMemorySearchConfig } from "./manager-TOeH0D8K.js";
|
|
72
72
|
import "./retry-BoS4e4X_.js";
|
|
73
73
|
import "./sqlite-D55gRQbH.js";
|
|
74
74
|
import { a as ToolInputError } from "./target-errors-C9e6dMU_.js";
|
|
@@ -136,20 +136,20 @@ import { n as resolveWideAreaDiscoveryDomain, r as writeWideAreaGatewayZone } fr
|
|
|
136
136
|
import { i as toOptionString, n as extractGatewayMiskeys, r as maybeExplainGatewayServiceStop, t as describeUnknownError } from "./shared-pJIdlnB5.js";
|
|
137
137
|
import { c as probeGateway, s as resolveNodeCommandAllowlist } from "./audit-Bi9Je9FZ.js";
|
|
138
138
|
import { t as discoverGatewayBeacons } from "./bonjour-discovery-CDkyebpA.js";
|
|
139
|
-
import { r as pickGatewaySelfPresence } from "./status-
|
|
140
|
-
import { c as startHeartbeatRunner, i as styleHealthChannelLine, n as getHealthSnapshot, o as runHeartbeatOnce, t as formatHealthChannelLines } from "./health-
|
|
139
|
+
import { r as pickGatewaySelfPresence } from "./status-DLFbpd9v.js";
|
|
140
|
+
import { c as startHeartbeatRunner, i as styleHealthChannelLine, n as getHealthSnapshot, o as runHeartbeatOnce, t as formatHealthChannelLines } from "./health-D4vU-wV-.js";
|
|
141
141
|
import { a as resolveControlUiRootSync, i as resolveControlUiRootOverrideSync, t as ensureControlUiAssetsBuilt } from "./control-ui-assets-BrP31IQR.js";
|
|
142
142
|
import { a as resolveNpmChannelTag, c as DEFAULT_PACKAGE_CHANNEL, m as normalizeUpdateChannel, n as compareSemverStrings, t as checkUpdateStatus } from "./update-check-Bbvpax6u.js";
|
|
143
|
-
import { t as runOnboardingWizard } from "./onboarding-
|
|
144
|
-
import { C as startGatewayConfigReloader, S as resolveCronRunLogPath, _ as MAX_PAYLOAD_BYTES, a as loadFavoritesSet, b as abortChatRunById, c as resolveAssistantIdentity, d as formatError, f as loadVoiceWakeConfig, g as MAX_BUFFERED_BYTES, h as HEALTH_REFRESH_INTERVAL_MS, i as safeParseJson, l as listSystemPresence, m as DEDUPE_TTL_MS, n as handleGatewayRequest, o as reconcileFavorites, p as DEDUPE_MAX, r as broadcastPresenceSnapshot, s as DEFAULT_ASSISTANT_IDENTITY, t as coreGatewayHandlers, u as upsertPresence, v as TICK_INTERVAL_MS, x as appendCronRunLog, y as getHandshakeTimeoutMs } from "./server-methods-
|
|
145
|
-
import { d as shouldLogWs, f as summarizeAgentEventForWsLog, l as formatForLog, p as setGatewayWsLogStyle, u as logWs } from "./push-apns-
|
|
143
|
+
import { t as runOnboardingWizard } from "./onboarding-c2qhwP0x.js";
|
|
144
|
+
import { C as startGatewayConfigReloader, S as resolveCronRunLogPath, _ as MAX_PAYLOAD_BYTES, a as loadFavoritesSet, b as abortChatRunById, c as resolveAssistantIdentity, d as formatError, f as loadVoiceWakeConfig, g as MAX_BUFFERED_BYTES, h as HEALTH_REFRESH_INTERVAL_MS, i as safeParseJson, l as listSystemPresence, m as DEDUPE_TTL_MS, n as handleGatewayRequest, o as reconcileFavorites, p as DEDUPE_MAX, r as broadcastPresenceSnapshot, s as DEFAULT_ASSISTANT_IDENTITY, t as coreGatewayHandlers, u as upsertPresence, v as TICK_INTERVAL_MS, x as appendCronRunLog, y as getHandshakeTimeoutMs } from "./server-methods-FQ-PqiVC.js";
|
|
145
|
+
import { d as shouldLogWs, f as summarizeAgentEventForWsLog, l as formatForLog, p as setGatewayWsLogStyle, u as logWs } from "./push-apns-Cr-a1KBt.js";
|
|
146
146
|
import { T as resolveGmailHookRuntimeConfig, _ as buildGogWatchServeArgs, i as ensureTailscaleEndpoint, v as buildGogWatchStartArgs } from "./gmail-setup-utils-CjltkjCx.js";
|
|
147
|
-
import "./agents.config-
|
|
147
|
+
import "./agents.config-DqWxpgkX.js";
|
|
148
148
|
import "./dm-policy-shared-KlzpDeT_.js";
|
|
149
149
|
import "./node-service-DxPZ_ZFk.js";
|
|
150
150
|
import "./status.update-8HXdAdwz.js";
|
|
151
151
|
import "./skills-install-B8r7cGKR.js";
|
|
152
|
-
import "./update-runner-
|
|
152
|
+
import "./update-runner-D99V_zHX.js";
|
|
153
153
|
import { t as resolveAgentSessionDirs } from "./session-dirs-CBqamQff.js";
|
|
154
154
|
import { i as shouldIncludeHook, r as resolveHookConfig, t as loadWorkspaceHookEntries } from "./workspace-D2fHsr-Z.js";
|
|
155
155
|
import { fileURLToPath, pathToFileURL } from "node:url";
|
|
@@ -5409,6 +5409,174 @@ function applyGatewayLaneConcurrency(cfg) {
|
|
|
5409
5409
|
setCommandLaneConcurrency(CommandLane.Subagent, resolveSubagentMaxConcurrent(cfg));
|
|
5410
5410
|
}
|
|
5411
5411
|
|
|
5412
|
+
//#endregion
|
|
5413
|
+
//#region src/infra/long-task-janitor.ts
|
|
5414
|
+
const TASK_FILE_SUFFIXES = [
|
|
5415
|
+
".pid",
|
|
5416
|
+
".cmd",
|
|
5417
|
+
".started",
|
|
5418
|
+
".log",
|
|
5419
|
+
".status"
|
|
5420
|
+
];
|
|
5421
|
+
const TASK_FILE_PREFIX = "task-";
|
|
5422
|
+
const DEFAULT_TASK_FILE_AGE_MS = 10080 * 60 * 1e3;
|
|
5423
|
+
const DEFAULT_SWEEP_INTERVAL_MS = 1440 * 60 * 1e3;
|
|
5424
|
+
function defaultIsPidAlive(pid) {
|
|
5425
|
+
try {
|
|
5426
|
+
process.kill(pid, 0);
|
|
5427
|
+
return true;
|
|
5428
|
+
} catch (err) {
|
|
5429
|
+
if (err.code === "EPERM") return true;
|
|
5430
|
+
return false;
|
|
5431
|
+
}
|
|
5432
|
+
}
|
|
5433
|
+
/**
|
|
5434
|
+
* Sweep dead-task state files from a single workspace directory.
|
|
5435
|
+
*
|
|
5436
|
+
* A task-id is eligible for sweep when its recorded PID is no longer alive
|
|
5437
|
+
* AND the oldest of its state files is older than ageMs. Conservative on
|
|
5438
|
+
* purpose: leaving a stale set for one extra cycle is harmless; deleting
|
|
5439
|
+
* the state of a live task is not.
|
|
5440
|
+
*
|
|
5441
|
+
* Orphans without a `.pid` file (parent crashed before line 180) are also
|
|
5442
|
+
* caught — we key on any task-<id>.<suffix> match.
|
|
5443
|
+
*/
|
|
5444
|
+
async function sweepLongTaskFiles(workdir, options = {}) {
|
|
5445
|
+
const result = {
|
|
5446
|
+
scanned: 0,
|
|
5447
|
+
swept: 0,
|
|
5448
|
+
errors: 0,
|
|
5449
|
+
sweptIds: []
|
|
5450
|
+
};
|
|
5451
|
+
const now = options.now ?? Date.now();
|
|
5452
|
+
const ageMs = options.ageMs ?? DEFAULT_TASK_FILE_AGE_MS;
|
|
5453
|
+
const isPidAlive = options.isPidAlive ?? defaultIsPidAlive;
|
|
5454
|
+
let entries;
|
|
5455
|
+
try {
|
|
5456
|
+
entries = await fs.promises.readdir(workdir);
|
|
5457
|
+
} catch {
|
|
5458
|
+
return result;
|
|
5459
|
+
}
|
|
5460
|
+
const taskIds = /* @__PURE__ */ new Set();
|
|
5461
|
+
for (const entry of entries) {
|
|
5462
|
+
if (!entry.startsWith(TASK_FILE_PREFIX)) continue;
|
|
5463
|
+
for (const suffix of TASK_FILE_SUFFIXES) if (entry.endsWith(suffix)) {
|
|
5464
|
+
const id = entry.slice(5, -suffix.length);
|
|
5465
|
+
if (id.length > 0) taskIds.add(id);
|
|
5466
|
+
break;
|
|
5467
|
+
}
|
|
5468
|
+
}
|
|
5469
|
+
for (const taskId of taskIds) {
|
|
5470
|
+
result.scanned++;
|
|
5471
|
+
const pidPath = path.join(workdir, `${TASK_FILE_PREFIX}${taskId}.pid`);
|
|
5472
|
+
let pid = 0;
|
|
5473
|
+
let pidStatMs = null;
|
|
5474
|
+
try {
|
|
5475
|
+
const pidText = await fs.promises.readFile(pidPath, "utf8");
|
|
5476
|
+
pid = Number.parseInt(pidText.trim(), 10);
|
|
5477
|
+
pidStatMs = (await fs.promises.stat(pidPath)).mtimeMs;
|
|
5478
|
+
} catch (err) {
|
|
5479
|
+
if (err.code !== "ENOENT") {
|
|
5480
|
+
result.errors++;
|
|
5481
|
+
continue;
|
|
5482
|
+
}
|
|
5483
|
+
}
|
|
5484
|
+
if (pid > 0 && Number.isFinite(pid) && isPidAlive(pid)) continue;
|
|
5485
|
+
let oldestMs = pidStatMs ?? Number.POSITIVE_INFINITY;
|
|
5486
|
+
for (const suffix of TASK_FILE_SUFFIXES) {
|
|
5487
|
+
if (suffix === ".pid" && pidStatMs !== null) continue;
|
|
5488
|
+
try {
|
|
5489
|
+
const stat = await fs.promises.stat(path.join(workdir, `${TASK_FILE_PREFIX}${taskId}${suffix}`));
|
|
5490
|
+
if (stat.mtimeMs < oldestMs) oldestMs = stat.mtimeMs;
|
|
5491
|
+
} catch {}
|
|
5492
|
+
}
|
|
5493
|
+
if (!Number.isFinite(oldestMs)) continue;
|
|
5494
|
+
if (now - oldestMs < ageMs) continue;
|
|
5495
|
+
let unlinkErrors = 0;
|
|
5496
|
+
for (const suffix of TASK_FILE_SUFFIXES) try {
|
|
5497
|
+
await fs.promises.unlink(path.join(workdir, `${TASK_FILE_PREFIX}${taskId}${suffix}`));
|
|
5498
|
+
} catch (err) {
|
|
5499
|
+
if (err.code !== "ENOENT") unlinkErrors++;
|
|
5500
|
+
}
|
|
5501
|
+
if (unlinkErrors > 0) result.errors++;
|
|
5502
|
+
else {
|
|
5503
|
+
result.swept++;
|
|
5504
|
+
result.sweptIds.push(taskId);
|
|
5505
|
+
}
|
|
5506
|
+
}
|
|
5507
|
+
return result;
|
|
5508
|
+
}
|
|
5509
|
+
async function collectAgentWorkspaces(cfg) {
|
|
5510
|
+
const config = cfg ?? loadConfig();
|
|
5511
|
+
const seen = /* @__PURE__ */ new Set();
|
|
5512
|
+
for (const agentId of listAgentIds(config)) try {
|
|
5513
|
+
const ws = resolveAgentWorkspaceDir(config, agentId);
|
|
5514
|
+
if (ws) seen.add(ws);
|
|
5515
|
+
} catch {}
|
|
5516
|
+
return [...seen];
|
|
5517
|
+
}
|
|
5518
|
+
let janitorTimer = null;
|
|
5519
|
+
let janitorBootKick = null;
|
|
5520
|
+
function startLongTaskJanitor(options = {}) {
|
|
5521
|
+
if (janitorTimer) return () => stopLongTaskJanitor();
|
|
5522
|
+
const log = getChildLogger({ module: "long-task-janitor" });
|
|
5523
|
+
const intervalMs = options.intervalMs ?? DEFAULT_SWEEP_INTERVAL_MS;
|
|
5524
|
+
const ageMs = options.ageMs ?? DEFAULT_TASK_FILE_AGE_MS;
|
|
5525
|
+
const getWorkspaces = options.getWorkspaces ?? (() => collectAgentWorkspaces());
|
|
5526
|
+
const nowFn = options.now ?? Date.now;
|
|
5527
|
+
const sweep = async () => {
|
|
5528
|
+
let workspaces = [];
|
|
5529
|
+
try {
|
|
5530
|
+
workspaces = await getWorkspaces();
|
|
5531
|
+
} catch (err) {
|
|
5532
|
+
log.warn({ err: String(err) }, "long-task-janitor: collect workspaces failed");
|
|
5533
|
+
return;
|
|
5534
|
+
}
|
|
5535
|
+
let scanned = 0;
|
|
5536
|
+
let swept = 0;
|
|
5537
|
+
let errors = 0;
|
|
5538
|
+
for (const ws of workspaces) try {
|
|
5539
|
+
const r = await sweepLongTaskFiles(ws, {
|
|
5540
|
+
now: nowFn(),
|
|
5541
|
+
ageMs
|
|
5542
|
+
});
|
|
5543
|
+
scanned += r.scanned;
|
|
5544
|
+
swept += r.swept;
|
|
5545
|
+
errors += r.errors;
|
|
5546
|
+
} catch (err) {
|
|
5547
|
+
errors++;
|
|
5548
|
+
log.warn({
|
|
5549
|
+
err: String(err),
|
|
5550
|
+
workdir: ws
|
|
5551
|
+
}, "long-task-janitor: sweep failed");
|
|
5552
|
+
}
|
|
5553
|
+
if (swept > 0 || errors > 0) log.info({
|
|
5554
|
+
scanned,
|
|
5555
|
+
swept,
|
|
5556
|
+
errors
|
|
5557
|
+
}, "long-task-janitor: sweep complete");
|
|
5558
|
+
};
|
|
5559
|
+
janitorBootKick = setTimeout(() => {
|
|
5560
|
+
sweep();
|
|
5561
|
+
}, 6e4);
|
|
5562
|
+
janitorBootKick.unref?.();
|
|
5563
|
+
janitorTimer = setInterval(() => {
|
|
5564
|
+
sweep();
|
|
5565
|
+
}, intervalMs);
|
|
5566
|
+
janitorTimer.unref?.();
|
|
5567
|
+
return () => stopLongTaskJanitor();
|
|
5568
|
+
}
|
|
5569
|
+
function stopLongTaskJanitor() {
|
|
5570
|
+
if (janitorTimer) {
|
|
5571
|
+
clearInterval(janitorTimer);
|
|
5572
|
+
janitorTimer = null;
|
|
5573
|
+
}
|
|
5574
|
+
if (janitorBootKick) {
|
|
5575
|
+
clearTimeout(janitorBootKick);
|
|
5576
|
+
janitorBootKick = null;
|
|
5577
|
+
}
|
|
5578
|
+
}
|
|
5579
|
+
|
|
5412
5580
|
//#endregion
|
|
5413
5581
|
//#region src/gateway/server/health-state.ts
|
|
5414
5582
|
let presenceVersion = 1;
|
|
@@ -5497,6 +5665,7 @@ function startGatewayMaintenanceTimers(params) {
|
|
|
5497
5665
|
params.refreshGatewayHealthSnapshot({ probe: true }).catch((err) => params.logHealth.error(`refresh failed: ${formatError(err)}`));
|
|
5498
5666
|
}, HEALTH_REFRESH_INTERVAL_MS);
|
|
5499
5667
|
params.refreshGatewayHealthSnapshot({ probe: true }).catch((err) => params.logHealth.error(`initial refresh failed: ${formatError(err)}`));
|
|
5668
|
+
startLongTaskJanitor();
|
|
5500
5669
|
return {
|
|
5501
5670
|
tickInterval,
|
|
5502
5671
|
healthInterval,
|
|
@@ -11959,7 +12128,7 @@ async function startGatewayServer(port = 18789, opts = {}) {
|
|
|
11959
12128
|
});
|
|
11960
12129
|
let glassUiBridgeCleanup = null;
|
|
11961
12130
|
if (!minimalTestGateway) {
|
|
11962
|
-
const { createGlassUiBridge } = await import("./glass-ui-ws-
|
|
12131
|
+
const { createGlassUiBridge } = await import("./glass-ui-ws-BBkFBsKB.js");
|
|
11963
12132
|
glassUiBridgeCleanup = createGlassUiBridge({
|
|
11964
12133
|
wss: glassUiWss,
|
|
11965
12134
|
context: gatewayRequestContext,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import "./paths-Cqn-zk3M.js";
|
|
2
2
|
import "./utils-B-0b9bGM.js";
|
|
3
3
|
import "./thinking-EAliFiVK.js";
|
|
4
|
-
import { Ut as resolveModelProfile } from "./reply-
|
|
4
|
+
import { Ut as resolveModelProfile } from "./reply-D7_t00Jt.js";
|
|
5
5
|
import "./registry-Cja8eT7G.js";
|
|
6
6
|
import "./subsystem-D9vIQve0.js";
|
|
7
7
|
import "./exec-CWkblSrI.js";
|
|
@@ -60,8 +60,8 @@ import "./diagnostic-session-state-CUslJyKP.js";
|
|
|
60
60
|
import "./send-DpMnSIi5.js";
|
|
61
61
|
import "./model-ECsJuJew.js";
|
|
62
62
|
import "./reply-prefix-CE2YmmsD.js";
|
|
63
|
-
import "./memory-cli-
|
|
64
|
-
import "./manager-
|
|
63
|
+
import "./memory-cli-0jm-n36m.js";
|
|
64
|
+
import "./manager-TOeH0D8K.js";
|
|
65
65
|
import "./retry-BoS4e4X_.js";
|
|
66
66
|
import "./sqlite-D55gRQbH.js";
|
|
67
67
|
import "./target-errors-C9e6dMU_.js";
|
|
@@ -114,18 +114,18 @@ import "./service-DzLem5vL.js";
|
|
|
114
114
|
import "./diagnostics-1uBuB9IE.js";
|
|
115
115
|
import "./table-BWuvjnmY.js";
|
|
116
116
|
import "./audit-Bi9Je9FZ.js";
|
|
117
|
-
import "./status-
|
|
118
|
-
import "./health-
|
|
117
|
+
import "./status-DLFbpd9v.js";
|
|
118
|
+
import "./health-D4vU-wV-.js";
|
|
119
119
|
import "./control-ui-assets-BrP31IQR.js";
|
|
120
120
|
import "./update-check-Bbvpax6u.js";
|
|
121
|
-
import { n as handleGatewayRequest } from "./server-methods-
|
|
122
|
-
import "./push-apns-
|
|
123
|
-
import "./agents.config-
|
|
121
|
+
import { n as handleGatewayRequest } from "./server-methods-FQ-PqiVC.js";
|
|
122
|
+
import "./push-apns-Cr-a1KBt.js";
|
|
123
|
+
import "./agents.config-DqWxpgkX.js";
|
|
124
124
|
import "./dm-policy-shared-KlzpDeT_.js";
|
|
125
125
|
import "./node-service-DxPZ_ZFk.js";
|
|
126
126
|
import "./status.update-8HXdAdwz.js";
|
|
127
127
|
import "./skills-install-B8r7cGKR.js";
|
|
128
|
-
import "./update-runner-
|
|
128
|
+
import "./update-runner-D99V_zHX.js";
|
|
129
129
|
|
|
130
130
|
//#region src/gateway/glass-ui-ws.ts
|
|
131
131
|
const SESSION_KEY = "agent:main:main";
|
|
@@ -14,7 +14,7 @@ import "./client-qUlxXXVJ.js";
|
|
|
14
14
|
import "./call-BrRWr7Lj.js";
|
|
15
15
|
import "./message-channel-C9dERklz.js";
|
|
16
16
|
import "./pairing-token-Byh6drgn.js";
|
|
17
|
-
import { Q as resolveModelProfile } from "./subagent-registry-
|
|
17
|
+
import { Q as resolveModelProfile } from "./subagent-registry-BvP8AGdE.js";
|
|
18
18
|
import "./sessions-BPD85pWA.js";
|
|
19
19
|
import "./tokens-Csntmwwn.js";
|
|
20
20
|
import "./plugins-CwSlLxM8.js";
|
|
@@ -52,8 +52,8 @@ import "./tool-images-CVLISeRT.js";
|
|
|
52
52
|
import "./thinking-8sKPnzpp.js";
|
|
53
53
|
import "./models-config-J1x_DaPn.js";
|
|
54
54
|
import "./reply-prefix-BUN71nd5.js";
|
|
55
|
-
import "./memory-cli-
|
|
56
|
-
import "./manager-
|
|
55
|
+
import "./memory-cli-BSOOwpt1.js";
|
|
56
|
+
import "./manager-syNf_ZrI.js";
|
|
57
57
|
import "./gemini-auth-DEakvf-D.js";
|
|
58
58
|
import "./retry-C4Q_VPOo.js";
|
|
59
59
|
import "./sqlite-BP8tiuca.js";
|
|
@@ -109,18 +109,18 @@ import "./service-RxN7lQKN.js";
|
|
|
109
109
|
import "./diagnostics-C6xPE2ln.js";
|
|
110
110
|
import "./table-Bka4fasy.js";
|
|
111
111
|
import "./audit-Oa5dsn5p.js";
|
|
112
|
-
import "./status-
|
|
113
|
-
import "./health-
|
|
112
|
+
import "./status-DMigoL7q.js";
|
|
113
|
+
import "./health-fOu0S75U.js";
|
|
114
114
|
import "./control-ui-assets-Clf7H-Sm.js";
|
|
115
115
|
import "./update-check-BNjupSIM.js";
|
|
116
|
-
import { n as handleGatewayRequest } from "./server-methods-
|
|
117
|
-
import "./push-apns-
|
|
118
|
-
import "./agents.config-
|
|
116
|
+
import { n as handleGatewayRequest } from "./server-methods-CTeJHJSZ.js";
|
|
117
|
+
import "./push-apns-rPetW5cI.js";
|
|
118
|
+
import "./agents.config-BnPC7uct.js";
|
|
119
119
|
import "./dm-policy-shared-JiSNSaKz.js";
|
|
120
120
|
import "./node-service-B-qdOCNb.js";
|
|
121
121
|
import "./status.update-B5zI1_Id.js";
|
|
122
122
|
import "./skills-install-BnEN_qla.js";
|
|
123
|
-
import "./update-runner-
|
|
123
|
+
import "./update-runner-B_yVOk8Z.js";
|
|
124
124
|
|
|
125
125
|
//#region src/gateway/glass-ui-ws.ts
|
|
126
126
|
const SESSION_KEY = "agent:main:main";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { B as theme, k as info, l as escapeRegExp, z as isRich } from "./utils-B-0b9bGM.js";
|
|
2
|
-
import { At as resolveHeartbeatDeliveryTarget, Cr as peekSystemEventEntries, Vn as resolveUserTimezone, cr as DEFAULT_HEARTBEAT_ACK_MAX_CHARS, ct as setHeartbeatWakeHandler, dr as resolveHeartbeatPrompt$1, fr as stripHeartbeatToken, jt as resolveHeartbeatSenderContext, lr as DEFAULT_HEARTBEAT_EVERY, lt as resolveHeartbeatReasonKind, nr as getQueueSize, r as appendCronStyleCurrentTimeLine, sr as CommandLane, st as requestHeartbeatNow, t as getReplyFromConfig, ur as isHeartbeatContentEffectivelyEmpty } from "./reply-
|
|
2
|
+
import { At as resolveHeartbeatDeliveryTarget, Cr as peekSystemEventEntries, Vn as resolveUserTimezone, cr as DEFAULT_HEARTBEAT_ACK_MAX_CHARS, ct as setHeartbeatWakeHandler, dr as resolveHeartbeatPrompt$1, fr as stripHeartbeatToken, jt as resolveHeartbeatSenderContext, lr as DEFAULT_HEARTBEAT_EVERY, lt as resolveHeartbeatReasonKind, nr as getQueueSize, r as appendCronStyleCurrentTimeLine, sr as CommandLane, st as requestHeartbeatNow, t as getReplyFromConfig, ur as isHeartbeatContentEffectivelyEmpty } from "./reply-D7_t00Jt.js";
|
|
3
3
|
import { l as resolveAgentIdFromSessionKey, p as toAgentStoreSessionKey, s as normalizeAgentId } from "./session-key-DCt45XZa.js";
|
|
4
4
|
import { f as defaultRuntime, t as createSubsystemLogger } from "./subsystem-D9vIQve0.js";
|
|
5
5
|
import { b as DEFAULT_SYMIPULSE_FILENAME, c as resolveAgentWorkspaceDir, l as resolveDefaultAgentId, r as resolveAgentConfig } from "./agent-scope-CgUHAtCo.js";
|
|
@@ -4,7 +4,7 @@ import { l as resolveAgentIdFromSessionKey, p as toAgentStoreSessionKey, s as no
|
|
|
4
4
|
import { b as DEFAULT_SYMIPULSE_FILENAME, c as resolveAgentWorkspaceDir, l as resolveDefaultAgentId, r as resolveAgentConfig } from "./agent-scope-D-jRCY0d.js";
|
|
5
5
|
import { C as parseDurationMs, i as loadConfig } from "./config-DXt3pc08.js";
|
|
6
6
|
import { n as callGateway, t as buildGatewayConnectionDetails } from "./call-BrRWr7Lj.js";
|
|
7
|
-
import { Jn as resolveUserTimezone, K as appendCronStyleCurrentTimeLine, Tn as peekSystemEventEntries, W as getReplyFromConfig, _r as isHeartbeatContentEffectivelyEmpty, dn as requestHeartbeatNow, fn as setHeartbeatWakeHandler, gr as DEFAULT_HEARTBEAT_EVERY, hr as DEFAULT_HEARTBEAT_ACK_MAX_CHARS, lr as getQueueSize, lt as resolveHeartbeatDeliveryTarget, mr as CommandLane, pn as resolveHeartbeatReasonKind, ut as resolveHeartbeatSenderContext, vr as resolveHeartbeatPrompt$1, yr as stripHeartbeatToken } from "./subagent-registry-
|
|
7
|
+
import { Jn as resolveUserTimezone, K as appendCronStyleCurrentTimeLine, Tn as peekSystemEventEntries, W as getReplyFromConfig, _r as isHeartbeatContentEffectivelyEmpty, dn as requestHeartbeatNow, fn as setHeartbeatWakeHandler, gr as DEFAULT_HEARTBEAT_EVERY, hr as DEFAULT_HEARTBEAT_ACK_MAX_CHARS, lr as getQueueSize, lt as resolveHeartbeatDeliveryTarget, mr as CommandLane, pn as resolveHeartbeatReasonKind, ut as resolveHeartbeatSenderContext, vr as resolveHeartbeatPrompt$1, yr as stripHeartbeatToken } from "./subagent-registry-BvP8AGdE.js";
|
|
8
8
|
import { M as canonicalizeMainSessionAlias, N as resolveAgentMainSessionKey, d as updateSessionStore, l as saveSessionStore, o as loadSessionStore } from "./sessions-BPD85pWA.js";
|
|
9
9
|
import { r as SYMIPULSE_TOKEN } from "./tokens-Csntmwwn.js";
|
|
10
10
|
import { n as listChannelPlugins, t as getChannelPlugin } from "./plugins-CwSlLxM8.js";
|