@symerian/symi 3.0.1 → 3.0.2

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.
Files changed (166) hide show
  1. package/dist/{agents-D4F5bhNg.js → agents-DEYqmFEH.js} +4 -4
  2. package/dist/{agents.config-DS9Gbqqg.js → agents.config-ClI9Q05l.js} +1 -1
  3. package/dist/{agents.config-Czr0DbSr.js → agents.config-TArPtTFt.js} +1 -1
  4. package/dist/{audio-preflight-Cje-A0Fs.js → audio-preflight-BrKBM7JM.js} +4 -4
  5. package/dist/{auth-choice-BU6XwruP.js → auth-choice-bOht3his.js} +1 -1
  6. package/dist/{auth-choice-DU5o68ia.js → auth-choice-kJVkaHx6.js} +1 -1
  7. package/dist/{banner-qaKrETF8.js → banner--HSjGLhi.js} +1 -1
  8. package/dist/build-info.json +3 -3
  9. package/dist/bundled/boot-md/handler.js +2 -2
  10. package/dist/bundled/session-memory/handler.js +2 -2
  11. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  12. package/dist/{channel-options-Bkfyg4nZ.js → channel-options-C68HZtw7.js} +1 -1
  13. package/dist/{channel-options-DW3nWxkv.js → channel-options-Cj2ZMHvy.js} +1 -1
  14. package/dist/{channel-web-DoDJqXyN.js → channel-web-BGZxsb8l.js} +1 -1
  15. package/dist/{channels-cli-B9tesYLD.js → channels-cli-C775zJjx.js} +6 -6
  16. package/dist/{channels-cli-V7ii1g6k.js → channels-cli-CLkq2ISd.js} +6 -6
  17. package/dist/{chrome-DaduLVA1.js → chrome-WfENE6tB.js} +7 -7
  18. package/dist/{cli-0GHBNwqe.js → cli-8ibydSgl.js} +3 -3
  19. package/dist/{cli-CAhOnKQ3.js → cli-B2FVKvPQ.js} +3 -3
  20. package/dist/{command-registry-Phoz_hat.js → command-registry-C-c2RS-n.js} +10 -10
  21. package/dist/{completion-cli-BAebbT-g.js → completion-cli-BLO_wsYD.js} +2 -2
  22. package/dist/{completion-cli-FR_B0tX1.js → completion-cli-IKI4BpqL.js} +1 -1
  23. package/dist/{config-cli-BXus9Npr.js → config-cli-Bh8aPiiL.js} +1 -1
  24. package/dist/{config-cli-DLSg0aaH.js → config-cli-d4RU82ov.js} +1 -1
  25. package/dist/{configure-BsrDBB87.js → configure-DKmHXbug.js} +3 -3
  26. package/dist/{configure-CPweqV68.js → configure-jxJfT5_B.js} +3 -3
  27. package/dist/daemon-cli.js +6 -6
  28. package/dist/{deliver-B6vfVmif.js → deliver-DShQE_sq.js} +1 -1
  29. package/dist/{doctor-completion-D5BKaeyT.js → doctor-completion-C7SuoBlz.js} +1 -1
  30. package/dist/{doctor-completion-DBs809iZ.js → doctor-completion-VAGhCLD5.js} +1 -1
  31. package/dist/entry.js +1 -1
  32. package/dist/extensionAPI.js +7 -7
  33. package/dist/{gateway-cli-DDxIyaeu.js → gateway-cli-BELyZGAU.js} +12 -12
  34. package/dist/{gateway-cli-D7ppw9MR.js → gateway-cli-D_SJFv7K.js} +12 -12
  35. package/dist/{glass-ui-ws-DSCEyW9z.js → glass-ui-ws-0agRdhZD.js} +10 -10
  36. package/dist/{glass-ui-ws-BK6Ca98g.js → glass-ui-ws-qPJDDUD9.js} +10 -10
  37. package/dist/{health-ByAPhIlQ.js → health-BnGM6Yux.js} +69 -5
  38. package/dist/{health-VfVqsLcU.js → health-CCKCR4oM.js} +69 -5
  39. package/dist/{heartbeat-visibility-BdqXBLOd.js → heartbeat-visibility-C4Sg0QOd.js} +1 -1
  40. package/dist/{heartbeat-visibility-ol7hy6FB.js → heartbeat-visibility-CG080wT5.js} +1 -1
  41. package/dist/{hooks-cli-CA2ikPts.js → hooks-cli-B2WVvhgH.js} +4 -4
  42. package/dist/{hooks-cli-D8u-iqwZ.js → hooks-cli-CtuiPrKW.js} +4 -4
  43. package/dist/{image-C12-WOMI.js → image-DfzwGNoa.js} +1 -1
  44. package/dist/index.js +9 -9
  45. package/dist/llm-slug-generator.js +2 -2
  46. package/dist/{manager-DfZDS6-4.js → manager-B6EhIj3H.js} +1 -1
  47. package/dist/{manager-DPxj_q1-.js → manager-DKUOUCmo.js} +1 -1
  48. package/dist/{manager-C9NXB77i.js → manager-Mm_GQxOU.js} +1 -1
  49. package/dist/{manager-DxihqoWd.js → manager-zwcQLMln.js} +1 -1
  50. package/dist/{memory-cli-Bjj5cTuq.js → memory-cli-BEZM7jn9.js} +3 -3
  51. package/dist/{memory-cli-D_O5bN6m.js → memory-cli-D4lLSeA1.js} +3 -3
  52. package/dist/{models-CD7SOI3V.js → models-ElQijvpq.js} +2 -2
  53. package/dist/{models-cli-Wjh_xd50.js → models-cli-14U59ejI.js} +5 -5
  54. package/dist/{models-cli-Dj5BnQIi.js → models-cli-Dtf5Zpgd.js} +4 -4
  55. package/dist/{onboard-Bgl-nPXW.js → onboard-CaYQVQYI.js} +2 -2
  56. package/dist/{onboard-CCfkebWZ.js → onboard-DN2xgEv1.js} +2 -2
  57. package/dist/{onboard-channels-DKFmls3m.js → onboard-channels-B1fWI5k5.js} +1 -1
  58. package/dist/{onboard-channels-CHJjmcTz.js → onboard-channels-C5sKGabO.js} +1 -1
  59. package/dist/{onboarding-CtCbkyNo.js → onboarding-BngFnwT6.js} +3 -3
  60. package/dist/{onboarding-GXSRt2Z4.js → onboarding-DNIz481s.js} +3 -3
  61. package/dist/{onboarding.finalize-CTqy_Unj.js → onboarding.finalize-B-x_trN9.js} +8 -8
  62. package/dist/{onboarding.finalize-Cyo7tKOt.js → onboarding.finalize-BA8-Tnhc.js} +9 -9
  63. package/dist/{pi-embedded-gBOzgRYn.js → pi-embedded-DUJ9Ytfn.js} +67 -24
  64. package/dist/{pi-embedded-helpers-pMH6u36v.js → pi-embedded-helpers-B1k1RWqM.js} +4 -4
  65. package/dist/{plugin-registry-BMavDLfZ.js → plugin-registry-C1xFJkog.js} +1 -1
  66. package/dist/{plugin-registry-CO6iA1TE.js → plugin-registry-CZS8ioCg.js} +1 -1
  67. package/dist/plugin-sdk/agents/system-prompt.d.ts +8 -0
  68. package/dist/plugin-sdk/{channel-web--Ru_sFHM.js → channel-web-B_XlrV_E.js} +1 -1
  69. package/dist/plugin-sdk/index.js +3 -3
  70. package/dist/plugin-sdk/infra/active-heartbeat-runs.d.ts +34 -0
  71. package/dist/plugin-sdk/{manager-CDV3YWoX.js → manager-CJd0vK4S.js} +1 -1
  72. package/dist/plugin-sdk/{synthesis-Bojs0PJL.js → synthesis-Cre_3fLT.js} +2 -2
  73. package/dist/plugin-sdk/{unified-runner-D7m-WeUt.js → unified-runner-BNQKFoGX.js} +53 -10
  74. package/dist/plugin-sdk/{web-BoYy2HSO.js → web-CE-OsTKq.js} +3 -3
  75. package/dist/{plugins-cli-2A8lifj4.js → plugins-cli-BGccb2gT.js} +4 -4
  76. package/dist/{plugins-cli-DhQzD98q.js → plugins-cli-f_Ncophh.js} +4 -4
  77. package/dist/{program-DEaYsa-L.js → program-5Hto31sk.js} +9 -9
  78. package/dist/{program-context-rJ500lzQ.js → program-context-Baw4Oc1H.js} +18 -18
  79. package/dist/{prompt-select-styled-3tYztnc1.js → prompt-select-styled-Cm6mr7mH.js} +6 -6
  80. package/dist/{prompt-select-styled-BcJXLROq.js → prompt-select-styled-DHSySGF2.js} +6 -6
  81. package/dist/{provider-auth-helpers-COKxBW7N.js → provider-auth-helpers-FdlXX50k.js} +1 -1
  82. package/dist/{provider-auth-helpers-eQzmopYc.js → provider-auth-helpers-_aPYnJCR.js} +1 -1
  83. package/dist/{push-apns-CBPUnPja.js → push-apns-DnMyTqrU.js} +1 -1
  84. package/dist/{push-apns-kuIc4QSa.js → push-apns-Dusza10V.js} +1 -1
  85. package/dist/{pw-ai-D0CMQA23.js → pw-ai-Dd_QrTWR.js} +1 -1
  86. package/dist/{register.agent-CNpLOx-Y.js → register.agent-DibuuULq.js} +7 -7
  87. package/dist/{register.agent-Bj4dYxX1.js → register.agent-TI-lzUMT.js} +8 -8
  88. package/dist/{register.configure-BsXY0hbE.js → register.configure-BbBU2vzP.js} +9 -9
  89. package/dist/{register.configure-CM4isxt8.js → register.configure-CE6z4EEp.js} +9 -9
  90. package/dist/{register.maintenance-Dphm3utW.js → register.maintenance-D_cRwoi6.js} +11 -11
  91. package/dist/{register.maintenance-Bvt-fYOe.js → register.maintenance-Dsw96Q5M.js} +10 -10
  92. package/dist/{register.message-C4WU4qwG.js → register.message-7JdfRDPR.js} +4 -4
  93. package/dist/{register.message-CuJ6kd3Y.js → register.message-BqRfLqBs.js} +4 -4
  94. package/dist/{register.onboard-D_HBo-CG.js → register.onboard-7iv0kkQk.js} +7 -7
  95. package/dist/{register.onboard-4GJ7224e.js → register.onboard-Ca5HGO6E.js} +7 -7
  96. package/dist/{register.setup-Blb61XAC.js → register.setup-Cy3cIayc.js} +7 -7
  97. package/dist/{register.setup-BJ9kJazQ.js → register.setup-D7AKohSt.js} +7 -7
  98. package/dist/{register.status-health-sessions-CRAYzQLg.js → register.status-health-sessions-BW51mzBs.js} +6 -6
  99. package/dist/{register.status-health-sessions-B4hENuHX.js → register.status-health-sessions-DOkSVuJk.js} +6 -6
  100. package/dist/{register.subclis-CmDRn7Z2.js → register.subclis-p-z6ekaE.js} +9 -9
  101. package/dist/{run-main-CPcu8T5o.js → run-main-BhEacTM9.js} +17 -17
  102. package/dist/{runner-7XhJhCc0.js → runner-CaXOtv_D.js} +1 -1
  103. package/dist/{server-methods-DDbTMvnA.js → server-methods-Bcwa782q.js} +10 -9
  104. package/dist/{server-methods-CX3ldLPd.js → server-methods-C8ff27p5.js} +10 -9
  105. package/dist/{server-node-events-Bzoq_nfx.js → server-node-events-B85y_7eX.js} +4 -4
  106. package/dist/{server-node-events-Ccoeyw6p.js → server-node-events-h8Af4ZTV.js} +4 -4
  107. package/dist/{status-CyHHusPc.js → status-DFBG2hcx.js} +1 -1
  108. package/dist/{status-BEAngZOJ.js → status-DUGaRGN0.js} +3 -3
  109. package/dist/{status-OAdlubd0.js → status-DsaLdb09.js} +3 -3
  110. package/dist/{status-BdKI8eQ7.js → status-JL0CD-E1.js} +1 -1
  111. package/dist/{subagent-registry-UkXCmOLK.js → subagent-registry-DXCGIrYv.js} +53 -10
  112. package/dist/{synthesis-DnRaxWS6.js → synthesis-BUbH-4DA.js} +2 -2
  113. package/dist/{synthesis-BkOyAKJV.js → synthesis-BxwFFuqZ.js} +7 -7
  114. package/dist/{synthesis-DGBPTml_.js → synthesis-CLt-6Pzu.js} +3 -3
  115. package/dist/{synthesis-D_fSgB6z.js → synthesis-ekn511D_.js} +3 -3
  116. package/dist/{unified-runner-BNTy0IvK.js → unified-runner-CdBxbcO2.js} +53 -10
  117. package/dist/{unified-runner-BlsArDPO.js → unified-runner-DtJxJ016.js} +53 -10
  118. package/dist/{update-cli-DuALcXLb.js → update-cli-4OzLcQIF.js} +10 -10
  119. package/dist/{update-cli-Cwi3bnhh.js → update-cli-CQbvni-d.js} +11 -11
  120. package/dist/{update-runner-C3OhMuSJ.js → update-runner-CiYhkA5I.js} +1 -1
  121. package/dist/{update-runner-DkNNsx67.js → update-runner-DLCzD7sp.js} +1 -1
  122. package/dist/{web-arCxqOL_.js → web-COnC7jb4.js} +7 -7
  123. package/dist/{web-PndcPkY5.js → web-CSDi520u.js} +2 -2
  124. package/dist/{web-Cp_dpAof.js → web-DMFKXi8s.js} +5 -5
  125. package/dist/{web-DtgGgNSl.js → web-DiqLVzt7.js} +4 -4
  126. package/extensions/bluebubbles/package.json +1 -1
  127. package/extensions/copilot-proxy/package.json +1 -1
  128. package/extensions/diagnostics-otel/package.json +1 -1
  129. package/extensions/discord/package.json +1 -1
  130. package/extensions/feishu/package.json +1 -1
  131. package/extensions/google-antigravity-auth/package.json +1 -1
  132. package/extensions/google-gemini-cli-auth/package.json +1 -1
  133. package/extensions/googlechat/package.json +1 -1
  134. package/extensions/imessage/package.json +1 -1
  135. package/extensions/irc/package.json +1 -1
  136. package/extensions/learning-loop/package.json +1 -1
  137. package/extensions/line/package.json +1 -1
  138. package/extensions/llm-task/package.json +1 -1
  139. package/extensions/matrix/CHANGELOG.md +6 -0
  140. package/extensions/matrix/package.json +1 -1
  141. package/extensions/mattermost/package.json +1 -1
  142. package/extensions/memory-core/package.json +1 -1
  143. package/extensions/memory-lancedb/package.json +1 -1
  144. package/extensions/minimax-portal-auth/package.json +1 -1
  145. package/extensions/msteams/CHANGELOG.md +6 -0
  146. package/extensions/msteams/package.json +1 -1
  147. package/extensions/nextcloud-talk/package.json +1 -1
  148. package/extensions/nostr/CHANGELOG.md +6 -0
  149. package/extensions/nostr/package.json +1 -1
  150. package/extensions/open-prose/package.json +1 -1
  151. package/extensions/outlook/package.json +1 -1
  152. package/extensions/pipeline/package.json +1 -1
  153. package/extensions/signal/package.json +1 -1
  154. package/extensions/slack/package.json +1 -1
  155. package/extensions/telegram/package.json +1 -1
  156. package/extensions/tlon/package.json +1 -1
  157. package/extensions/twitch/CHANGELOG.md +6 -0
  158. package/extensions/twitch/package.json +1 -1
  159. package/extensions/voice-call/CHANGELOG.md +6 -0
  160. package/extensions/voice-call/package.json +1 -1
  161. package/extensions/whatsapp/package.json +1 -1
  162. package/extensions/zalo/CHANGELOG.md +6 -0
  163. package/extensions/zalo/package.json +1 -1
  164. package/extensions/zalouser/CHANGELOG.md +6 -0
  165. package/extensions/zalouser/package.json +1 -1
  166. package/package.json +1 -1
@@ -1,7 +1,7 @@
1
1
  import { r as resolveCliName } from "./command-format-CyXZlazG.js";
2
2
  import { t as resolveSymiPackageRoot } from "./symi-root-7ei1lwo0.js";
3
3
  import { t as note } from "./note-CYS1SoX6.js";
4
- import { a as resolveCompletionCachePath, i as isCompletionInstalled, o as resolveShellFromEnv, r as installCompletion, s as usesSlowDynamicCompletion, t as completionCacheExists } from "./completion-cli-FR_B0tX1.js";
4
+ import { a as resolveCompletionCachePath, i as isCompletionInstalled, o as resolveShellFromEnv, r as installCompletion, s as usesSlowDynamicCompletion, t as completionCacheExists } from "./completion-cli-IKI4BpqL.js";
5
5
  import path from "node:path";
6
6
  import { spawnSync } from "node:child_process";
7
7
 
package/dist/entry.js CHANGED
@@ -2500,7 +2500,7 @@ if (!ensureExperimentalWarningSuppressed()) {
2500
2500
  applyCliProfileEnv({ profile: parsed.profile });
2501
2501
  process$1.argv = parsed.argv;
2502
2502
  }
2503
- import("./run-main-CPcu8T5o.js").then(({ runCli }) => runCli(process$1.argv)).catch((error) => {
2503
+ import("./run-main-BhEacTM9.js").then(({ runCli }) => runCli(process$1.argv)).catch((error) => {
2504
2504
  console.error("[symi] Failed to start CLI:", error instanceof Error ? error.stack ?? error.message : error);
2505
2505
  process$1.exitCode = 1;
2506
2506
  });
@@ -7,13 +7,13 @@ import { a as resolveAgentIdentity } from "./reply-prefix-C7ZwCr7X.js";
7
7
  import "./github-copilot-token-BbsJ0Qbo.js";
8
8
  import "./env-CQ_DQOwT.js";
9
9
  import "./tokens-DRIIdGfF.js";
10
- import { D as resolveAgentTimeoutMs, p as runEmbeddedPiAgent } from "./pi-embedded-gBOzgRYn.js";
10
+ import { D as resolveAgentTimeoutMs, p as runEmbeddedPiAgent } from "./pi-embedded-DUJ9Ytfn.js";
11
11
  import "./plugins-CpxUKuIt.js";
12
12
  import "./accounts-DDEyGwby.js";
13
13
  import "./bindings-pK-Lzohb.js";
14
14
  import "./send-DMhDlUGJ.js";
15
15
  import "./send-ByAzOT7G.js";
16
- import "./deliver-B6vfVmif.js";
16
+ import "./deliver-DShQE_sq.js";
17
17
  import "./diagnostic-BVsSwe-J.js";
18
18
  import "./diagnostic-session-state-C1vRJs5w.js";
19
19
  import "./accounts-8zZqL37v.js";
@@ -21,10 +21,10 @@ import "./send-CFvpJQIE.js";
21
21
  import "./image-ops-BKUwjozo.js";
22
22
  import "./pi-model-discovery-j5tVLINv.js";
23
23
  import "./message-channel-BQINJQIT.js";
24
- import { V as loadSessionStore, W as saveSessionStore } from "./pi-embedded-helpers-pMH6u36v.js";
24
+ import { V as loadSessionStore, W as saveSessionStore } from "./pi-embedded-helpers-B1k1RWqM.js";
25
25
  import "./config-BOuq5KZE.js";
26
26
  import "./manifest-registry-DWdYdchb.js";
27
- import "./chrome-DaduLVA1.js";
27
+ import "./chrome-WfENE6tB.js";
28
28
  import "./skills-amp3F-om.js";
29
29
  import "./redact-1NGYV_8p.js";
30
30
  import "./errors-CPfngF0S.js";
@@ -34,8 +34,8 @@ import "./thinking-B8s2BpSx.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-CdTyeTEN.js";
37
- import "./image-C12-WOMI.js";
38
- import "./manager-C9NXB77i.js";
37
+ import "./image-DfzwGNoa.js";
38
+ import "./manager-Mm_GQxOU.js";
39
39
  import "./gemini-auth-D3D-a_lj.js";
40
40
  import "./retry-QGp0jvVi.js";
41
41
  import "./sqlite-Bo4pHfp8.js";
@@ -47,7 +47,7 @@ import "./ir-CDdlA9_f.js";
47
47
  import "./render-qcqmrHse.js";
48
48
  import "./commands-registry-iF38r_Xp.js";
49
49
  import "./skill-commands-c5Lly1_3.js";
50
- import "./runner-7XhJhCc0.js";
50
+ import "./runner-CaXOtv_D.js";
51
51
  import "./fetch-WLZaC77l.js";
52
52
  import "./channel-activity-C-6tM-GK.js";
53
53
  import "./tables-BuPzx5Wl.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 { $t as isGatewaySigusr1RestartExternallyAllowed, A as runCliAgent, Ar as getAgentRunContext, Bt as hasLegacyDeliveryHints, Cn as DEFAULT_INPUT_IMAGE_MIMES, Cr as DEFAULT_HEARTBEAT_ACK_MAX_CHARS, Dn as extractImageContentFromSource, Dr as stripHeartbeatToken, E as createDefaultDeps, En as extractFileContentFromSource, Et as summarizeRestartSentinel, Ft as normalizeOptionalText, Gt as detectSuspiciousPatterns, It as normalizePayloadToSystemText, Kt as getHookType, Lt as normalizeRequiredName, Mr as registerAgentRunContext, Mt as inferLegacyName, Nn as enqueueSystemEvent, Nt as normalizeOptionalAgentId, O as getCliSessionId, On as normalizeMimeList, Or as clearAgentRunContext, Pt as normalizeOptionalSessionKey, Q as getActiveEmbeddedRunCount, Qt as emitGatewayRestart, R as buildHistoryContextFromEntries, Rt as migrateLegacyCronPayload, Sn as DEFAULT_INPUT_IMAGE_MAX_BYTES, Sr as CommandLane, St as consumeRestartSentinel, T as createOutboundSendDeps, Tn as DEFAULT_INPUT_TIMEOUT_MS, Vt as stripLegacyDeliveryFields, W as getTotalPendingReplies, Wt as buildSafeExternalPrompt, X as runAgentTurn, Xt as consumeGatewaySigusr1RestartAuthorization, Zt as deferGatewayRestartUntilIdle, _ as readJsonBodyWithLimit, b as sleepWithAbort, br as setCommandLaneConcurrency, bt as runWithModelFallback, ct as readLatestAssistantReply, en as markGatewaySigusr1RestartHandled, f as getPluginToolMeta, ft as resolveOutboundSessionRoute, g as handleSlackHttpRequest, gr as getActiveTaskCount, gt as resolveSessionDeliveryTarget, ht as resolveOutboundTarget, i as listDescendantRunsForRequester, j as resolveAgentAvatar, jn as resolveAgentTimeoutMs, jr as onAgentEvent, k as setCliSessionId, kn as resolveInputFileLimits, kr as emitAgentEvent, kt as normalizeHttpWebhookUrl, l as applyToolPolicyPipeline, lt as resolveAnnounceTargetFromKey, m as loadSymiPlugins, n as countActiveRunsForSession, nn as setGatewaySigusr1RestartPolicy, nt as resolveModelProfile, ot as createSymiTools, qt as isExternalHookSession, r as initSubagentRegistry, rn as setPreRestartDeferralCheck, s as runSubagentAnnounceFlow, t as countActiveDescendantRuns, tt as classifyOutboundMessage, u as buildDefaultToolPolicyPipelineSteps, un as requestHeartbeatNow, v as requestBodyErrorToText, vr as getTotalQueueSize, vt as resetDirectoryCache, wn as DEFAULT_INPUT_MAX_REDIRECTS, wt as formatRestartSentinelMessage, x as agentCommand, xr as waitForActiveTasks, y as computeBackoff, yr as resetAllLanes, zt as buildDeliveryFromLegacyPayload } from "./subagent-registry-UkXCmOLK.js";
25
+ import { $t as emitGatewayRestart, A as runCliAgent, An as resolveInputFileLimits, Ar as emitAgentEvent, At as normalizeHttpWebhookUrl, Bt as buildDeliveryFromLegacyPayload, Cn as DEFAULT_INPUT_IMAGE_MAX_BYTES, Cr as CommandLane, Ct as consumeRestartSentinel, Dn as extractFileContentFromSource, Dt as summarizeRestartSentinel, E as createDefaultDeps, En as DEFAULT_INPUT_TIMEOUT_MS, Ft as normalizeOptionalSessionKey, Gt as buildSafeExternalPrompt, Ht as stripLegacyDeliveryFields, It as normalizeOptionalText, Jt as isExternalHookSession, Kt as detectSuspiciousPatterns, Lt as normalizePayloadToSystemText, Mn as resolveAgentTimeoutMs, Mr as onAgentEvent, Nr as registerAgentRunContext, Nt as inferLegacyName, O as getCliSessionId, On as extractImageContentFromSource, Or as stripHeartbeatToken, Pn as enqueueSystemEvent, Pt as normalizeOptionalAgentId, Q as getActiveEmbeddedRunCount, Qt as deferGatewayRestartUntilIdle, R as buildHistoryContextFromEntries, Rt as normalizeRequiredName, Sr as waitForActiveTasks, T as createOutboundSendDeps, Tn as DEFAULT_INPUT_MAX_REDIRECTS, Tt as formatRestartSentinelMessage, Vt as hasLegacyDeliveryHints, W as getTotalPendingReplies, X as runAgentTurn, Zt as consumeGatewaySigusr1RestartAuthorization, _ as readJsonBodyWithLimit, _r as getActiveTaskCount, _t as resolveSessionDeliveryTarget, b as sleepWithAbort, br as resetAllLanes, dn as requestHeartbeatNow, en as isGatewaySigusr1RestartExternallyAllowed, f as getPluginToolMeta, g as handleSlackHttpRequest, gt as resolveOutboundTarget, i as listDescendantRunsForRequester, in as setPreRestartDeferralCheck, j as resolveAgentAvatar, jr as getAgentRunContext, k as setCliSessionId, kn as normalizeMimeList, kr as clearAgentRunContext, l as applyToolPolicyPipeline, lt as readLatestAssistantReply, m as loadSymiPlugins, n as countActiveRunsForSession, nt as classifyOutboundMessage, pt as resolveOutboundSessionRoute, qt as getHookType, r as initSubagentRegistry, rn as setGatewaySigusr1RestartPolicy, rt as resolveModelProfile, s as runSubagentAnnounceFlow, st as createSymiTools, t as countActiveDescendantRuns, tn as markGatewaySigusr1RestartHandled, u as buildDefaultToolPolicyPipelineSteps, ut as resolveAnnounceTargetFromKey, v as requestBodyErrorToText, wn as DEFAULT_INPUT_IMAGE_MIMES, wr as DEFAULT_HEARTBEAT_ACK_MAX_CHARS, x as agentCommand, xr as setCommandLaneConcurrency, xt as runWithModelFallback, y as computeBackoff, yr as getTotalQueueSize, yt as resetDirectoryCache, zt as migrateLegacyCronPayload } from "./subagent-registry-DXCGIrYv.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-CBlCXpU2.js";
27
27
  import { i as isSilentReplyText, n as SILENT_REPLY_TOKEN } from "./tokens-BEvOiQ65.js";
28
28
  import { n as listChannelPlugins, o as normalizeWhatsAppTarget, r as normalizeChannelId, t as getChannelPlugin } from "./plugins-DTKQE9kt.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-BjWk_WQa.js";
62
62
  import { a as resolveAgentIdentity } from "./reply-prefix-Pz-5t5RS.js";
63
- import { i as resolveMemoryBackendConfig, r as getMemorySearchManager } from "./memory-cli-D_O5bN6m.js";
64
- import { i as resolveMemorySearchConfig } from "./manager-DfZDS6-4.js";
63
+ import { i as resolveMemoryBackendConfig, r as getMemorySearchManager } from "./memory-cli-D4lLSeA1.js";
64
+ import { i as resolveMemorySearchConfig } from "./manager-B6EhIj3H.js";
65
65
  import "./gemini-auth-CdtQ-GuM.js";
66
66
  import "./retry-C4Q_VPOo.js";
67
67
  import "./sqlite-BP8tiuca.js";
@@ -107,7 +107,7 @@ import { C as normalizeControlUiBasePath, S as buildControlUiAvatarUrl, c as han
107
107
  import "./prompt-style-BxVdnrLq.js";
108
108
  import "./pairing-labels-B6chnvfn.js";
109
109
  import { a as resolveSubagentToolPolicy, i as resolveGroupToolPolicy, r as resolveEffectiveToolPolicy } from "./pi-tools.policy-DcwVdzSK.js";
110
- import { i as onHeartbeatEvent, l as resolveCronStyleNow, t as resolveHeartbeatVisibility } from "./heartbeat-visibility-ol7hy6FB.js";
110
+ import { i as onHeartbeatEvent, l as resolveCronStyleNow, t as resolveHeartbeatVisibility } from "./heartbeat-visibility-CG080wT5.js";
111
111
  import { t as ensureSymiCliOnPath } from "./path-env-CaiY2aOj.js";
112
112
  import { n as DEFAULT_GATEWAY_HTTP_TOOL_DENY } from "./dangerous-tools-Cw6NBIXW.js";
113
113
  import { n as inheritOptionFromParent } from "./command-options-DbRrl8qF.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-CfXVd09Y.js";
133
133
  import { t as discoverGatewayBeacons } from "./bonjour-discovery-BWaTCKHh.js";
134
- import { i as pickGatewaySelfPresence } from "./status-BEAngZOJ.js";
135
- import { a as styleHealthChannelLine, l as startHeartbeatRunner, n as getHealthSnapshot, s as runHeartbeatOnce, t as formatHealthChannelLines } from "./health-ByAPhIlQ.js";
134
+ import { i as pickGatewaySelfPresence } from "./status-DUGaRGN0.js";
135
+ import { a as styleHealthChannelLine, l as startHeartbeatRunner, n as getHealthSnapshot, s as runHeartbeatOnce, t as formatHealthChannelLines } from "./health-BnGM6Yux.js";
136
136
  import { a as resolveControlUiRootSync, i as resolveControlUiRootOverrideSync, t as ensureControlUiAssetsBuilt } from "./control-ui-assets-DKcwWWGv.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-CtCbkyNo.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-DDbTMvnA.js";
140
- import { d as shouldLogWs, f as summarizeAgentEventForWsLog, l as formatForLog, p as setGatewayWsLogStyle, u as logWs } from "./push-apns-kuIc4QSa.js";
138
+ import { t as runOnboardingWizard } from "./onboarding-BngFnwT6.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-Bcwa782q.js";
140
+ import { d as shouldLogWs, f as summarizeAgentEventForWsLog, l as formatForLog, p as setGatewayWsLogStyle, u as logWs } from "./push-apns-Dusza10V.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-Czr0DbSr.js";
142
+ import "./agents.config-TArPtTFt.js";
143
143
  import "./dm-policy-shared-BSjL81w0.js";
144
144
  import "./node-service-B-qdOCNb.js";
145
145
  import "./status.update-DDeJEekl.js";
146
146
  import "./skills-install-DEq4Ey44.js";
147
- import "./update-runner-C3OhMuSJ.js";
147
+ import "./update-runner-CiYhkA5I.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";
@@ -12127,7 +12127,7 @@ async function startGatewayServer(port = 18789, opts = {}) {
12127
12127
  });
12128
12128
  let glassUiBridgeCleanup = null;
12129
12129
  if (!minimalTestGateway) {
12130
- const { createGlassUiBridge } = await import("./glass-ui-ws-DSCEyW9z.js");
12130
+ const { createGlassUiBridge } = await import("./glass-ui-ws-0agRdhZD.js");
12131
12131
  glassUiBridgeCleanup = createGlassUiBridge({
12132
12132
  wss: glassUiWss,
12133
12133
  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 { i as isSilentReplyText, n as SILENT_REPLY_TOKEN } from "./tokens-Cz6cgZ7r.js";
4
- import { $ as loadSessionEntry, $n as readLatestAssistantReply, Ar as getAgentRunContext, At as buildDeliveryFromLegacyPayload, C as runCliAgent, Cr as getTotalQueueSize, Ct as inferLegacyName, Dr as CommandLane, Dt as normalizePayloadToSystemText, Er as waitForActiveTasks, Et as normalizeOptionalText, Ft as buildSafeExternalPrompt, G as createSymiTools, Gn as countActiveDescendantRuns, Gt as markGatewaySigusr1RestartHandled, Hr as stripHeartbeatToken, Ht as deferGatewayRestartUntilIdle, Ir as runWithModelFallback, It as detectSuspiciousPatterns, Jn as listDescendantRunsForRequester, Jt as setPreRestartDeferralCheck, Kn as countActiveRunsForSession, L as getTotalPendingReplies, Lt as getHookType, Mr as registerAgentRunContext, Mt as stripLegacyDeliveryFields, Nr as classifyOutboundMessage, Or as clearAgentRunContext, Ot as normalizeRequiredName, Pr as resolveModelProfile, Q as loadCombinedSessionStoreForGateway, Qn as runSubagentAnnounceFlow, Rr as DEFAULT_HEARTBEAT_ACK_MAX_CHARS, Rt as isExternalHookSession, S as setCliSessionId, Tr as setCommandLaneConcurrency, Tt as normalizeOptionalSessionKey, Ut as emitGatewayRestart, Vt as consumeGatewaySigusr1RestartAuthorization, Wt as isGatewaySigusr1RestartExternallyAllowed, Z as listSessionsFromStore, Zn as resolveAgentTimeoutMs, _n as DEFAULT_INPUT_TIMEOUT_MS, _t as summarizeRestartSentinel, a as getPluginToolMeta, at as resolveOutboundSessionRoute, bn as normalizeMimeList, bt as normalizeHttpWebhookUrl, ct as resolveOutboundTarget, d as requestBodyErrorToText, dt as resetDirectoryCache, f as computeBackoff, gn as DEFAULT_INPUT_MAX_REDIRECTS, hn as DEFAULT_INPUT_IMAGE_MIMES, ht as formatRestartSentinelMessage, j as buildHistoryContextFromEntries, jr as onAgentEvent, jt as hasLegacyDeliveryHints, kr as emitAgentEvent, kt as migrateLegacyCronPayload, l as handleSlackHttpRequest, lt as resolveSessionDeliveryTarget, m as agentCommand, mn as DEFAULT_INPUT_IMAGE_MAX_BYTES, n as applyToolPolicyPipeline, nr as getActiveEmbeddedRunCount, on as lookupContextTokens, p as sleepWithAbort, pt as consumeRestartSentinel, q as resolveAnnounceTargetFromKey, qn as initSubagentRegistry, qt as setGatewaySigusr1RestartPolicy, r as buildDefaultToolPolicyPipelineSteps, s as loadSymiPlugins, t as runAgentTurn, tn as requestHeartbeatNow, u as readJsonBodyWithLimit, v as createOutboundSendDeps, vn as extractFileContentFromSource, w as resolveAgentAvatar, wn as enqueueSystemEvent, wr as resetAllLanes, wt as normalizeOptionalAgentId, x as getCliSessionId, xn as resolveInputFileLimits, xr as getActiveTaskCount, y as createDefaultDeps, yn as extractImageContentFromSource } from "./unified-runner-BNTy0IvK.js";
4
+ import { $ as loadSessionEntry, $n as readLatestAssistantReply, Ar as emitAgentEvent, At as buildDeliveryFromLegacyPayload, C as runCliAgent, Ct as inferLegacyName, Dr as waitForActiveTasks, Dt as normalizePayloadToSystemText, Er as setCommandLaneConcurrency, Et as normalizeOptionalText, Fr as resolveModelProfile, Ft as buildSafeExternalPrompt, G as createSymiTools, Gn as countActiveDescendantRuns, Gt as markGatewaySigusr1RestartHandled, Ht as deferGatewayRestartUntilIdle, It as detectSuspiciousPatterns, Jn as listDescendantRunsForRequester, Jt as setPreRestartDeferralCheck, Kn as countActiveRunsForSession, L as getTotalPendingReplies, Lr as runWithModelFallback, Lt as getHookType, Mr as onAgentEvent, Mt as stripLegacyDeliveryFields, Nr as registerAgentRunContext, Or as CommandLane, Ot as normalizeRequiredName, Pr as classifyOutboundMessage, Q as loadCombinedSessionStoreForGateway, Qn as runSubagentAnnounceFlow, Rt as isExternalHookSession, S as setCliSessionId, Sr as getActiveTaskCount, Tr as resetAllLanes, Tt as normalizeOptionalSessionKey, Ur as stripHeartbeatToken, Ut as emitGatewayRestart, Vt as consumeGatewaySigusr1RestartAuthorization, Wt as isGatewaySigusr1RestartExternallyAllowed, Z as listSessionsFromStore, Zn as resolveAgentTimeoutMs, _n as DEFAULT_INPUT_TIMEOUT_MS, _t as summarizeRestartSentinel, a as getPluginToolMeta, at as resolveOutboundSessionRoute, bn as normalizeMimeList, bt as normalizeHttpWebhookUrl, ct as resolveOutboundTarget, d as requestBodyErrorToText, dt as resetDirectoryCache, f as computeBackoff, gn as DEFAULT_INPUT_MAX_REDIRECTS, hn as DEFAULT_INPUT_IMAGE_MIMES, ht as formatRestartSentinelMessage, j as buildHistoryContextFromEntries, jr as getAgentRunContext, jt as hasLegacyDeliveryHints, kr as clearAgentRunContext, kt as migrateLegacyCronPayload, l as handleSlackHttpRequest, lt as resolveSessionDeliveryTarget, m as agentCommand, mn as DEFAULT_INPUT_IMAGE_MAX_BYTES, n as applyToolPolicyPipeline, nr as getActiveEmbeddedRunCount, on as lookupContextTokens, p as sleepWithAbort, pt as consumeRestartSentinel, q as resolveAnnounceTargetFromKey, qn as initSubagentRegistry, qt as setGatewaySigusr1RestartPolicy, r as buildDefaultToolPolicyPipelineSteps, s as loadSymiPlugins, t as runAgentTurn, tn as requestHeartbeatNow, u as readJsonBodyWithLimit, v as createOutboundSendDeps, vn as extractFileContentFromSource, w as resolveAgentAvatar, wn as enqueueSystemEvent, wr as getTotalQueueSize, wt as normalizeOptionalAgentId, x as getCliSessionId, xn as resolveInputFileLimits, y as createDefaultDeps, yn as extractImageContentFromSource, zr as DEFAULT_HEARTBEAT_ACK_MAX_CHARS } from "./unified-runner-CdBxbcO2.js";
5
5
  import { C as createInternalHookEvent, S as clearInternalHooks, T as triggerInternalHook, m as createEmptyPluginRegistry, r as DEFAULT_CHAT_CHANNEL, w as registerInternalHook } from "./registry-ClO_zVv-.js";
6
6
  import { a as setConsoleSubsystemFilter, f as defaultRuntime, n as runtimeForLogger, o as setConsoleTimestampPrefix, t as createSubsystemLogger } from "./subsystem-zqierDLj.js";
7
7
  import { Ht as DEFAULT_MODEL, N as getModelRefStatus, O as isPidAlive, P as isCliProvider, U as resolveHooksGmailModel, Ut as DEFAULT_PROVIDER, V as resolveConfiguredModelRef, Vt as DEFAULT_CONTEXT_TOKENS, q as resolveThinkingDefault, z as resolveAllowedModelRef } from "./auth-profiles-CtBXKml4.js";
@@ -62,8 +62,8 @@ import "./send-CrFVrFoV.js";
62
62
  import "./model-JOScPOPJ.js";
63
63
  import "./pi-model-discovery-CXXH7biP.js";
64
64
  import { a as resolveAgentIdentity } from "./reply-prefix-DnXliXio.js";
65
- import { i as resolveMemoryBackendConfig, r as getMemorySearchManager } from "./memory-cli-Bjj5cTuq.js";
66
- import { i as resolveMemorySearchConfig } from "./manager-DPxj_q1-.js";
65
+ import { i as resolveMemoryBackendConfig, r as getMemorySearchManager } from "./memory-cli-BEZM7jn9.js";
66
+ import { i as resolveMemorySearchConfig } from "./manager-DKUOUCmo.js";
67
67
  import "./gemini-auth-rYBkv11i.js";
68
68
  import "./retry-DYICeae5.js";
69
69
  import "./sqlite-CRogFEk1.js";
@@ -110,7 +110,7 @@ import { C as normalizeControlUiBasePath, S as buildControlUiAvatarUrl, c as han
110
110
  import "./prompt-style-CSNJI4MG.js";
111
111
  import "./pairing-labels-DJfFSZUS.js";
112
112
  import { a as resolveSubagentToolPolicy, i as resolveGroupToolPolicy, r as resolveEffectiveToolPolicy } from "./pi-tools.policy-D4i_i5CV.js";
113
- import { c as resolveCronStyleNow, i as onHeartbeatEvent, t as resolveHeartbeatVisibility } from "./heartbeat-visibility-BdqXBLOd.js";
113
+ import { c as resolveCronStyleNow, i as onHeartbeatEvent, t as resolveHeartbeatVisibility } from "./heartbeat-visibility-C4Sg0QOd.js";
114
114
  import { t as ensureSymiCliOnPath } from "./path-env-D3HgzjnU.js";
115
115
  import "./runtime-guard-dBbuLE2m.js";
116
116
  import { t as forceFreePortAndWait } from "./ports-6ULVruzH.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-DnATZix4.js";
137
137
  import { c as probeGateway, s as resolveNodeCommandAllowlist } from "./audit-BFAHZWI2.js";
138
138
  import { t as discoverGatewayBeacons } from "./bonjour-discovery-PnjDY_wY.js";
139
- import { r as pickGatewaySelfPresence } from "./status-OAdlubd0.js";
140
- import { c as startHeartbeatRunner, i as styleHealthChannelLine, n as getHealthSnapshot, o as runHeartbeatOnce, t as formatHealthChannelLines } from "./health-VfVqsLcU.js";
139
+ import { r as pickGatewaySelfPresence } from "./status-DsaLdb09.js";
140
+ import { c as startHeartbeatRunner, i as styleHealthChannelLine, n as getHealthSnapshot, o as runHeartbeatOnce, t as formatHealthChannelLines } from "./health-CCKCR4oM.js";
141
141
  import { a as resolveControlUiRootSync, i as resolveControlUiRootOverrideSync, t as ensureControlUiAssetsBuilt } from "./control-ui-assets-CtKVON4w.js";
142
142
  import { a as resolveNpmChannelTag, c as DEFAULT_PACKAGE_CHANNEL, m as normalizeUpdateChannel, n as compareSemverStrings, t as checkUpdateStatus } from "./update-check-BIE5FLmi.js";
143
- import { t as runOnboardingWizard } from "./onboarding-GXSRt2Z4.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-CX3ldLPd.js";
145
- import { d as shouldLogWs, f as summarizeAgentEventForWsLog, l as formatForLog, p as setGatewayWsLogStyle, u as logWs } from "./push-apns-CBPUnPja.js";
143
+ import { t as runOnboardingWizard } from "./onboarding-DNIz481s.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-C8ff27p5.js";
145
+ import { d as shouldLogWs, f as summarizeAgentEventForWsLog, l as formatForLog, p as setGatewayWsLogStyle, u as logWs } from "./push-apns-DnMyTqrU.js";
146
146
  import { T as resolveGmailHookRuntimeConfig, _ as buildGogWatchServeArgs, i as ensureTailscaleEndpoint, v as buildGogWatchStartArgs } from "./gmail-setup-utils-BV1BJYYk.js";
147
- import "./agents.config-DS9Gbqqg.js";
147
+ import "./agents.config-ClI9Q05l.js";
148
148
  import "./dm-policy-shared-Ca_yzxgO.js";
149
149
  import "./node-service-DiZDC-T7.js";
150
150
  import "./status.update-B7og6NgE.js";
151
151
  import "./skills-install-ClMBHyh2.js";
152
- import "./update-runner-DkNNsx67.js";
152
+ import "./update-runner-DLCzD7sp.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-YQdb3RE6.js";
155
155
  import { fileURLToPath, pathToFileURL } from "node:url";
@@ -12131,7 +12131,7 @@ async function startGatewayServer(port = 18789, opts = {}) {
12131
12131
  });
12132
12132
  let glassUiBridgeCleanup = null;
12133
12133
  if (!minimalTestGateway) {
12134
- const { createGlassUiBridge } = await import("./glass-ui-ws-BK6Ca98g.js");
12134
+ const { createGlassUiBridge } = await import("./glass-ui-ws-qPJDDUD9.js");
12135
12135
  glassUiBridgeCleanup = createGlassUiBridge({
12136
12136
  wss: glassUiWss,
12137
12137
  context: gatewayRequestContext,
@@ -14,7 +14,7 @@ import "./client-CJIMV1WD.js";
14
14
  import "./call-e869fla2.js";
15
15
  import "./message-channel-C9dERklz.js";
16
16
  import "./pairing-token-Byh6drgn.js";
17
- import { nt as resolveModelProfile } from "./subagent-registry-UkXCmOLK.js";
17
+ import { rt as resolveModelProfile } from "./subagent-registry-DXCGIrYv.js";
18
18
  import "./sessions-CBlCXpU2.js";
19
19
  import "./tokens-BEvOiQ65.js";
20
20
  import "./plugins-DTKQE9kt.js";
@@ -52,8 +52,8 @@ import "./tool-images-CVLISeRT.js";
52
52
  import "./thinking-8sKPnzpp.js";
53
53
  import "./models-config-BjWk_WQa.js";
54
54
  import "./reply-prefix-Pz-5t5RS.js";
55
- import "./memory-cli-D_O5bN6m.js";
56
- import "./manager-DfZDS6-4.js";
55
+ import "./memory-cli-D4lLSeA1.js";
56
+ import "./manager-B6EhIj3H.js";
57
57
  import "./gemini-auth-CdtQ-GuM.js";
58
58
  import "./retry-C4Q_VPOo.js";
59
59
  import "./sqlite-BP8tiuca.js";
@@ -98,7 +98,7 @@ import "./onboard-helpers-C_ASAAp0.js";
98
98
  import "./prompt-style-BxVdnrLq.js";
99
99
  import "./pairing-labels-B6chnvfn.js";
100
100
  import "./pi-tools.policy-DcwVdzSK.js";
101
- import "./heartbeat-visibility-ol7hy6FB.js";
101
+ import "./heartbeat-visibility-CG080wT5.js";
102
102
  import "./dangerous-tools-Cw6NBIXW.js";
103
103
  import "./catalog-KcLvtTfa.js";
104
104
  import "./install-safe-path-C__62m3G.js";
@@ -110,18 +110,18 @@ import "./service-RxN7lQKN.js";
110
110
  import "./diagnostics-C6xPE2ln.js";
111
111
  import "./table-Bka4fasy.js";
112
112
  import "./audit-CfXVd09Y.js";
113
- import "./status-BEAngZOJ.js";
114
- import "./health-ByAPhIlQ.js";
113
+ import "./status-DUGaRGN0.js";
114
+ import "./health-BnGM6Yux.js";
115
115
  import "./control-ui-assets-DKcwWWGv.js";
116
116
  import "./update-check-BNjupSIM.js";
117
- import { n as handleGatewayRequest } from "./server-methods-DDbTMvnA.js";
118
- import "./push-apns-kuIc4QSa.js";
119
- import "./agents.config-Czr0DbSr.js";
117
+ import { n as handleGatewayRequest } from "./server-methods-Bcwa782q.js";
118
+ import "./push-apns-Dusza10V.js";
119
+ import "./agents.config-TArPtTFt.js";
120
120
  import "./dm-policy-shared-BSjL81w0.js";
121
121
  import "./node-service-B-qdOCNb.js";
122
122
  import "./status.update-DDeJEekl.js";
123
123
  import "./skills-install-DEq4Ey44.js";
124
- import "./update-runner-C3OhMuSJ.js";
124
+ import "./update-runner-CiYhkA5I.js";
125
125
 
126
126
  //#region src/gateway/glass-ui-ws.ts
127
127
  const SESSION_KEY = "agent:main:main";
@@ -1,7 +1,7 @@
1
1
  import "./paths-Cqn-zk3M.js";
2
2
  import "./utils-B-0b9bGM.js";
3
3
  import "./tokens-Cz6cgZ7r.js";
4
- import { Pr as resolveModelProfile } from "./unified-runner-BNTy0IvK.js";
4
+ import { Fr as resolveModelProfile } from "./unified-runner-CdBxbcO2.js";
5
5
  import "./registry-ClO_zVv-.js";
6
6
  import "./subsystem-zqierDLj.js";
7
7
  import "./auth-profiles-CtBXKml4.js";
@@ -55,8 +55,8 @@ import "./send-CrFVrFoV.js";
55
55
  import "./model-JOScPOPJ.js";
56
56
  import "./pi-model-discovery-CXXH7biP.js";
57
57
  import "./reply-prefix-DnXliXio.js";
58
- import "./memory-cli-Bjj5cTuq.js";
59
- import "./manager-DPxj_q1-.js";
58
+ import "./memory-cli-BEZM7jn9.js";
59
+ import "./manager-DKUOUCmo.js";
60
60
  import "./gemini-auth-rYBkv11i.js";
61
61
  import "./retry-DYICeae5.js";
62
62
  import "./sqlite-CRogFEk1.js";
@@ -102,7 +102,7 @@ import "./onboard-helpers-ncV67aOo.js";
102
102
  import "./prompt-style-CSNJI4MG.js";
103
103
  import "./pairing-labels-DJfFSZUS.js";
104
104
  import "./pi-tools.policy-D4i_i5CV.js";
105
- import "./heartbeat-visibility-BdqXBLOd.js";
105
+ import "./heartbeat-visibility-C4Sg0QOd.js";
106
106
  import "./runtime-guard-dBbuLE2m.js";
107
107
  import "./catalog-pt1jhhyb.js";
108
108
  import "./skills-status-DzvtNke3.js";
@@ -115,18 +115,18 @@ import "./service-CW2RUNzh.js";
115
115
  import "./diagnostics-D40jPn_9.js";
116
116
  import "./table-Cg6YZXv9.js";
117
117
  import "./audit-BFAHZWI2.js";
118
- import "./status-OAdlubd0.js";
119
- import "./health-VfVqsLcU.js";
118
+ import "./status-DsaLdb09.js";
119
+ import "./health-CCKCR4oM.js";
120
120
  import "./control-ui-assets-CtKVON4w.js";
121
121
  import "./update-check-BIE5FLmi.js";
122
- import { n as handleGatewayRequest } from "./server-methods-CX3ldLPd.js";
123
- import "./push-apns-CBPUnPja.js";
124
- import "./agents.config-DS9Gbqqg.js";
122
+ import { n as handleGatewayRequest } from "./server-methods-C8ff27p5.js";
123
+ import "./push-apns-DnMyTqrU.js";
124
+ import "./agents.config-ClI9Q05l.js";
125
125
  import "./dm-policy-shared-Ca_yzxgO.js";
126
126
  import "./node-service-DiZDC-T7.js";
127
127
  import "./status.update-B7og6NgE.js";
128
128
  import "./skills-install-ClMBHyh2.js";
129
- import "./update-runner-DkNNsx67.js";
129
+ import "./update-runner-DLCzD7sp.js";
130
130
 
131
131
  //#region src/gateway/glass-ui-ws.ts
132
132
  const SESSION_KEY = "agent:main:main";
@@ -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-xM36I1Em.js";
5
5
  import { C as parseDurationMs, i as loadConfig } from "./config-BaxT9cN4.js";
6
6
  import { n as callGateway, t as buildGatewayConnectionDetails } from "./call-e869fla2.js";
7
- import { Cr as DEFAULT_HEARTBEAT_ACK_MAX_CHARS, Dr as stripHeartbeatToken, Er as resolveHeartbeatPrompt$1, Fn as peekSystemEventEntries, Sr as CommandLane, Tr as isHeartbeatContentEffectivelyEmpty, _r as getQueueSize, dn as setHeartbeatWakeHandler, fn as resolveHeartbeatReasonKind, mt as resolveHeartbeatSenderContext, nr as resolveUserTimezone, pt as resolveHeartbeatDeliveryTarget, un as requestHeartbeatNow, wr as DEFAULT_HEARTBEAT_EVERY } from "./subagent-registry-UkXCmOLK.js";
7
+ import { Cr as CommandLane, Dr as resolveHeartbeatPrompt$1, Er as isHeartbeatContentEffectivelyEmpty, In as peekSystemEventEntries, Or as stripHeartbeatToken, Tr as DEFAULT_HEARTBEAT_EVERY, dn as requestHeartbeatNow, et as resolveEmbeddedSessionLane, fn as setHeartbeatWakeHandler, ht as resolveHeartbeatSenderContext, mt as resolveHeartbeatDeliveryTarget, pn as resolveHeartbeatReasonKind, rr as resolveUserTimezone, vr as getQueueSize, wr as DEFAULT_HEARTBEAT_ACK_MAX_CHARS } from "./subagent-registry-DXCGIrYv.js";
8
8
  import { M as canonicalizeMainSessionAlias, N as resolveAgentMainSessionKey, d as updateSessionStore, l as saveSessionStore, o as loadSessionStore } from "./sessions-CBlCXpU2.js";
9
9
  import { r as SYMIPULSE_TOKEN } from "./tokens-BEvOiQ65.js";
10
10
  import { n as listChannelPlugins, t as getChannelPlugin } from "./plugins-DTKQE9kt.js";
@@ -14,11 +14,57 @@ import { i as hasErrnoCode, n as formatErrorMessage } from "./errors-Ba_ROWsq.js
14
14
  import { c as resolveStorePath, n as resolveSessionFilePath } from "./paths-DNdWAq7b.js";
15
15
  import { o as resolveEffectiveMessagesConfig } from "./reply-prefix-Pz-5t5RS.js";
16
16
  import { n as withProgress } from "./progress-HK2tT7Yf.js";
17
- import { a as resolveIndicatorType, c as appendCronStyleCurrentTimeLine, n as emitHeartbeatEvent, o as runReplyTurn, s as resolveHeartbeatReplyPayload, t as resolveHeartbeatVisibility } from "./heartbeat-visibility-ol7hy6FB.js";
17
+ import { a as resolveIndicatorType, c as appendCronStyleCurrentTimeLine, n as emitHeartbeatEvent, o as runReplyTurn, s as resolveHeartbeatReplyPayload, t as resolveHeartbeatVisibility } from "./heartbeat-visibility-CG080wT5.js";
18
18
  import { t as resolveChannelDefaultAccountId } from "./helpers-gWnZ9zWR.js";
19
19
  import path from "node:path";
20
20
  import fs from "node:fs/promises";
21
21
 
22
+ //#region src/infra/active-heartbeat-runs.ts
23
+ const activeHeartbeats = /* @__PURE__ */ new Map();
24
+ /**
25
+ * Register an AbortController as the controller for an in-flight
26
+ * heartbeat run on `sessionKey`. If a previous controller exists for
27
+ * the same key (shouldn't happen — heartbeats are serialized per
28
+ * session — but be defensive), abort it before replacing.
29
+ */
30
+ function registerHeartbeatRun(sessionKey, controller) {
31
+ if (!sessionKey) return;
32
+ const existing = activeHeartbeats.get(sessionKey);
33
+ if (existing && existing !== controller) try {
34
+ existing.abort();
35
+ } catch {}
36
+ activeHeartbeats.set(sessionKey, controller);
37
+ }
38
+ /**
39
+ * Drop the controller for `sessionKey` from the registry. Called from
40
+ * the heartbeat runner's finally block once the run has completed
41
+ * (successfully, with an error, or via abort).
42
+ */
43
+ function clearHeartbeatRun(sessionKey) {
44
+ if (!sessionKey) return;
45
+ activeHeartbeats.delete(sessionKey);
46
+ }
47
+ /**
48
+ * Abort the active heartbeat (if any) for `sessionKey`. Returns true
49
+ * when an abort was issued, false when no heartbeat was in flight.
50
+ *
51
+ * Called from the chat.send handler before it enqueues the user turn,
52
+ * so the user's message doesn't sit behind a heartbeat that may take
53
+ * 30s+ to finish. The aborted heartbeat will fire again on the next
54
+ * pulse interval — no state to recover.
55
+ */
56
+ function abortHeartbeatRunForSession(sessionKey) {
57
+ if (!sessionKey) return false;
58
+ const controller = activeHeartbeats.get(sessionKey);
59
+ if (!controller) return false;
60
+ try {
61
+ controller.abort();
62
+ } catch {}
63
+ activeHeartbeats.delete(sessionKey);
64
+ return true;
65
+ }
66
+
67
+ //#endregion
22
68
  //#region src/infra/heartbeat-active-hours.ts
23
69
  const ACTIVE_HOURS_TIME_PATTERN = /^(?:([01]\d|2[0-3]):([0-5]\d)|24:00)$/;
24
70
  function resolveActiveHoursTimezone(cfg, raw) {
@@ -444,6 +490,18 @@ async function runHeartbeatOnce(opts) {
444
490
  reason: "session-ended-overflow"
445
491
  };
446
492
  }
493
+ const sessionLane = resolveEmbeddedSessionLane(sessionKey);
494
+ if ((opts.deps?.getQueueSize ?? getQueueSize)(sessionLane) > 0) {
495
+ emitHeartbeatEvent({
496
+ status: "skipped",
497
+ reason: "user-active",
498
+ durationMs: Date.now() - startedAt
499
+ });
500
+ return {
501
+ status: "skipped",
502
+ reason: "user-active"
503
+ };
504
+ }
447
505
  const delivery = resolveHeartbeatDeliveryTarget({
448
506
  cfg,
449
507
  entry,
@@ -525,6 +583,8 @@ async function runHeartbeatOnce(opts) {
525
583
  });
526
584
  return true;
527
585
  };
586
+ const abortController = new AbortController();
587
+ registerHeartbeatRun(sessionKey, abortController);
528
588
  try {
529
589
  const transcriptState = await captureTranscriptState({
530
590
  storePath,
@@ -536,10 +596,12 @@ async function runHeartbeatOnce(opts) {
536
596
  const replyResult = await runReplyTurn(ctx, heartbeatModelOverride ? {
537
597
  isHeartbeat: true,
538
598
  heartbeatModelOverride,
539
- suppressToolErrorWarnings
599
+ suppressToolErrorWarnings,
600
+ abortSignal: abortController.signal
540
601
  } : {
541
602
  isHeartbeat: true,
542
- suppressToolErrorWarnings
603
+ suppressToolErrorWarnings,
604
+ abortSignal: abortController.signal
543
605
  }, cfg);
544
606
  const replyPayload = resolveHeartbeatReplyPayload(replyResult);
545
607
  const reasoningPayloads = heartbeat?.includeReasoning === true ? resolveHeartbeatReasoningPayloads(replyResult).filter((payload) => payload !== replyPayload) : [];
@@ -736,6 +798,8 @@ async function runHeartbeatOnce(opts) {
736
798
  status: "failed",
737
799
  reason
738
800
  };
801
+ } finally {
802
+ clearHeartbeatRun(sessionKey);
739
803
  }
740
804
  }
741
805
  function startHeartbeatRunner(opts) {
@@ -1416,4 +1480,4 @@ async function healthCommand(opts, runtime) {
1416
1480
  }
1417
1481
 
1418
1482
  //#endregion
1419
- export { styleHealthChannelLine as a, setHeartbeatsEnabled as c, health_exports as i, startHeartbeatRunner as l, getHealthSnapshot as n, resolveHeartbeatSummaryForAgent as o, healthCommand as r, runHeartbeatOnce as s, formatHealthChannelLines as t };
1483
+ export { styleHealthChannelLine as a, setHeartbeatsEnabled as c, health_exports as i, startHeartbeatRunner as l, getHealthSnapshot as n, resolveHeartbeatSummaryForAgent as o, healthCommand as r, runHeartbeatOnce as s, formatHealthChannelLines as t, abortHeartbeatRunForSession as u };
@@ -1,6 +1,6 @@
1
1
  import { B as theme, k as info, l as escapeRegExp, z as isRich } from "./utils-B-0b9bGM.js";
2
2
  import { r as SYMIPULSE_TOKEN } from "./tokens-Cz6cgZ7r.js";
3
- import { Br as isHeartbeatContentEffectivelyEmpty, Dr as CommandLane, En as peekSystemEventEntries, Hr as stripHeartbeatToken, Rr as DEFAULT_HEARTBEAT_ACK_MAX_CHARS, Sr as getQueueSize, Vr as resolveHeartbeatPrompt$1, nn as setHeartbeatWakeHandler, or as resolveUserTimezone, ot as resolveHeartbeatDeliveryTarget, rn as resolveHeartbeatReasonKind, st as resolveHeartbeatSenderContext, tn as requestHeartbeatNow, zr as DEFAULT_HEARTBEAT_EVERY } from "./unified-runner-BNTy0IvK.js";
3
+ import { Br as DEFAULT_HEARTBEAT_EVERY, Cr as getQueueSize, En as peekSystemEventEntries, Hr as resolveHeartbeatPrompt$1, Or as CommandLane, Ur as stripHeartbeatToken, Vr as isHeartbeatContentEffectivelyEmpty, ir as resolveEmbeddedSessionLane, nn as setHeartbeatWakeHandler, ot as resolveHeartbeatDeliveryTarget, rn as resolveHeartbeatReasonKind, sr as resolveUserTimezone, st as resolveHeartbeatSenderContext, tn as requestHeartbeatNow, zr as DEFAULT_HEARTBEAT_ACK_MAX_CHARS } from "./unified-runner-CdBxbcO2.js";
4
4
  import { f as defaultRuntime, t as createSubsystemLogger } from "./subsystem-zqierDLj.js";
5
5
  import { l as resolveAgentIdFromSessionKey, p as toAgentStoreSessionKey, s as normalizeAgentId } from "./session-key-oOB32jSB.js";
6
6
  import { b as DEFAULT_SYMIPULSE_FILENAME, c as resolveAgentWorkspaceDir, l as resolveDefaultAgentId, r as resolveAgentConfig } from "./agent-scope-BajBuriF.js";
@@ -15,11 +15,57 @@ import { t as deliverOutboundPayloads } from "./deliver-DdpsRFXi.js";
15
15
  import { o as resolveEffectiveMessagesConfig } from "./reply-prefix-DnXliXio.js";
16
16
  import { n as callGateway, t as buildGatewayConnectionDetails } from "./call-BT57Dzye.js";
17
17
  import { n as withProgress } from "./progress-Cx3xmP03.js";
18
- import { a as resolveIndicatorType, l as runReplyTurn, n as emitHeartbeatEvent, o as resolveHeartbeatReplyPayload, s as appendCronStyleCurrentTimeLine, t as resolveHeartbeatVisibility } from "./heartbeat-visibility-BdqXBLOd.js";
18
+ import { a as resolveIndicatorType, l as runReplyTurn, n as emitHeartbeatEvent, o as resolveHeartbeatReplyPayload, s as appendCronStyleCurrentTimeLine, t as resolveHeartbeatVisibility } from "./heartbeat-visibility-C4Sg0QOd.js";
19
19
  import { t as resolveChannelDefaultAccountId } from "./helpers-CYGbI-uz.js";
20
20
  import path from "node:path";
21
21
  import fs from "node:fs/promises";
22
22
 
23
+ //#region src/infra/active-heartbeat-runs.ts
24
+ const activeHeartbeats = /* @__PURE__ */ new Map();
25
+ /**
26
+ * Register an AbortController as the controller for an in-flight
27
+ * heartbeat run on `sessionKey`. If a previous controller exists for
28
+ * the same key (shouldn't happen — heartbeats are serialized per
29
+ * session — but be defensive), abort it before replacing.
30
+ */
31
+ function registerHeartbeatRun(sessionKey, controller) {
32
+ if (!sessionKey) return;
33
+ const existing = activeHeartbeats.get(sessionKey);
34
+ if (existing && existing !== controller) try {
35
+ existing.abort();
36
+ } catch {}
37
+ activeHeartbeats.set(sessionKey, controller);
38
+ }
39
+ /**
40
+ * Drop the controller for `sessionKey` from the registry. Called from
41
+ * the heartbeat runner's finally block once the run has completed
42
+ * (successfully, with an error, or via abort).
43
+ */
44
+ function clearHeartbeatRun(sessionKey) {
45
+ if (!sessionKey) return;
46
+ activeHeartbeats.delete(sessionKey);
47
+ }
48
+ /**
49
+ * Abort the active heartbeat (if any) for `sessionKey`. Returns true
50
+ * when an abort was issued, false when no heartbeat was in flight.
51
+ *
52
+ * Called from the chat.send handler before it enqueues the user turn,
53
+ * so the user's message doesn't sit behind a heartbeat that may take
54
+ * 30s+ to finish. The aborted heartbeat will fire again on the next
55
+ * pulse interval — no state to recover.
56
+ */
57
+ function abortHeartbeatRunForSession(sessionKey) {
58
+ if (!sessionKey) return false;
59
+ const controller = activeHeartbeats.get(sessionKey);
60
+ if (!controller) return false;
61
+ try {
62
+ controller.abort();
63
+ } catch {}
64
+ activeHeartbeats.delete(sessionKey);
65
+ return true;
66
+ }
67
+
68
+ //#endregion
23
69
  //#region src/infra/heartbeat-active-hours.ts
24
70
  const ACTIVE_HOURS_TIME_PATTERN = /^(?:([01]\d|2[0-3]):([0-5]\d)|24:00)$/;
25
71
  function resolveActiveHoursTimezone(cfg, raw) {
@@ -445,6 +491,18 @@ async function runHeartbeatOnce(opts) {
445
491
  reason: "session-ended-overflow"
446
492
  };
447
493
  }
494
+ const sessionLane = resolveEmbeddedSessionLane(sessionKey);
495
+ if ((opts.deps?.getQueueSize ?? getQueueSize)(sessionLane) > 0) {
496
+ emitHeartbeatEvent({
497
+ status: "skipped",
498
+ reason: "user-active",
499
+ durationMs: Date.now() - startedAt
500
+ });
501
+ return {
502
+ status: "skipped",
503
+ reason: "user-active"
504
+ };
505
+ }
448
506
  const delivery = resolveHeartbeatDeliveryTarget({
449
507
  cfg,
450
508
  entry,
@@ -526,6 +584,8 @@ async function runHeartbeatOnce(opts) {
526
584
  });
527
585
  return true;
528
586
  };
587
+ const abortController = new AbortController();
588
+ registerHeartbeatRun(sessionKey, abortController);
529
589
  try {
530
590
  const transcriptState = await captureTranscriptState({
531
591
  storePath,
@@ -537,10 +597,12 @@ async function runHeartbeatOnce(opts) {
537
597
  const replyResult = await runReplyTurn(ctx, heartbeatModelOverride ? {
538
598
  isHeartbeat: true,
539
599
  heartbeatModelOverride,
540
- suppressToolErrorWarnings
600
+ suppressToolErrorWarnings,
601
+ abortSignal: abortController.signal
541
602
  } : {
542
603
  isHeartbeat: true,
543
- suppressToolErrorWarnings
604
+ suppressToolErrorWarnings,
605
+ abortSignal: abortController.signal
544
606
  }, cfg);
545
607
  const replyPayload = resolveHeartbeatReplyPayload(replyResult);
546
608
  const reasoningPayloads = heartbeat?.includeReasoning === true ? resolveHeartbeatReasoningPayloads(replyResult).filter((payload) => payload !== replyPayload) : [];
@@ -737,6 +799,8 @@ async function runHeartbeatOnce(opts) {
737
799
  status: "failed",
738
800
  reason
739
801
  };
802
+ } finally {
803
+ clearHeartbeatRun(sessionKey);
740
804
  }
741
805
  }
742
806
  function startHeartbeatRunner(opts) {
@@ -1412,4 +1476,4 @@ async function healthCommand(opts, runtime) {
1412
1476
  }
1413
1477
 
1414
1478
  //#endregion
1415
- export { resolveHeartbeatSummaryForAgent as a, startHeartbeatRunner as c, styleHealthChannelLine as i, getHealthSnapshot as n, runHeartbeatOnce as o, healthCommand as r, setHeartbeatsEnabled as s, formatHealthChannelLines as t };
1479
+ export { resolveHeartbeatSummaryForAgent as a, startHeartbeatRunner as c, styleHealthChannelLine as i, abortHeartbeatRunForSession as l, getHealthSnapshot as n, runHeartbeatOnce as o, healthCommand as r, setHeartbeatsEnabled as s, formatHealthChannelLines as t };
@@ -1,4 +1,4 @@
1
- import { B as withContextUsageWarning, Cn as prepareAgentRun, Fr as composeTurnMiddleware, U as buildAgentTurnParams, V as withContextOverflowRecovery, W as prepareReplyTurn, ar as resolveUserTimeFormat, ir as formatUserTime, or as resolveUserTimezone, t as runAgentTurn } from "./unified-runner-BNTy0IvK.js";
1
+ import { B as withContextUsageWarning, Cn as prepareAgentRun, Ir as composeTurnMiddleware, U as buildAgentTurnParams, V as withContextOverflowRecovery, W as prepareReplyTurn, ar as formatUserTime, or as resolveUserTimeFormat, sr as resolveUserTimezone, t as runAgentTurn } from "./unified-runner-CdBxbcO2.js";
2
2
 
3
3
  //#region src/auto-reply/run-reply-turn.ts
4
4
  /**
@@ -1,4 +1,4 @@
1
- import { J as withContextOverflowRecovery, Mn as prepareAgentRun, X as runAgentTurn, at as prepareReplyTurn, er as formatUserTime, it as buildAgentTurnParams, nr as resolveUserTimezone, q as withContextUsageWarning, rt as composeTurnMiddleware, tr as resolveUserTimeFormat } from "./subagent-registry-UkXCmOLK.js";
1
+ import { J as withContextOverflowRecovery, Nn as prepareAgentRun, X as runAgentTurn, at as buildAgentTurnParams, it as composeTurnMiddleware, nr as resolveUserTimeFormat, ot as prepareReplyTurn, q as withContextUsageWarning, rr as resolveUserTimezone, tr as formatUserTime } from "./subagent-registry-DXCGIrYv.js";
2
2
 
3
3
  //#region src/agents/current-time.ts
4
4
  function resolveCronStyleNow(cfg, nowMs) {