@symerian/symi 2.6.7 → 2.6.9

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 (117) hide show
  1. package/dist/{agents-DPdRUY_O.js → agents-yeSooTtP.js} +4 -4
  2. package/dist/{agents.config-DIumfxnN.js → agents.config-DoTRueo1.js} +1 -1
  3. package/dist/{agents.config-Cr6DcdaD.js → agents.config-XOcM83Bx.js} +1 -1
  4. package/dist/{audio-preflight-CPBOQV4I.js → audio-preflight-C40mKAp7.js} +4 -4
  5. package/dist/{audio-preflight-BVaaZWkg.js → audio-preflight-DHTaS5U1.js} +4 -4
  6. package/dist/{auth-choice-z3-Baeyd.js → auth-choice-6h5vk1cG.js} +1 -1
  7. package/dist/{auth-choice-C5etRQcH.js → auth-choice-CSfG00oW.js} +1 -1
  8. package/dist/{banner-om7BRUIc.js → banner-C2tjwP2M.js} +1 -1
  9. package/dist/build-info.json +3 -3
  10. package/dist/bundled/boot-md/handler.js +6 -6
  11. package/dist/bundled/session-memory/handler.js +6 -6
  12. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  13. package/dist/{channel-options-BqnokE7_.js → channel-options-5wdTOBFJ.js} +1 -1
  14. package/dist/{channel-options-Cb1PgfNV.js → channel-options-CHyjRl0C.js} +1 -1
  15. package/dist/{channel-web-DztB2W6w.js → channel-web-VYYpZqcw.js} +1 -1
  16. package/dist/{channels-cli-R2PHQWVd.js → channels-cli-CNS4BcpR.js} +4 -4
  17. package/dist/{channels-cli-xlZ2mjBu.js → channels-cli-Dm1d93Oy.js} +4 -4
  18. package/dist/{chrome-DkaXoP36.js → chrome-CDJYxX5a.js} +5 -5
  19. package/dist/{chrome-D2SKJnR7.js → chrome-DYZwl5Gv.js} +5 -5
  20. package/dist/{cli-DNGrFH7L.js → cli-D4MEJZ7W.js} +1 -1
  21. package/dist/{cli-DLly6H0w.js → cli-DqQ3teJy.js} +1 -1
  22. package/dist/{command-registry-DJbyskBr.js → command-registry-yzABgrim.js} +9 -9
  23. package/dist/{completion-cli-Dfw9JhkN.js → completion-cli-DDCDJyTb.js} +2 -2
  24. package/dist/{completion-cli-DosOadUD.js → completion-cli-zI_h8pr3.js} +1 -1
  25. package/dist/{config-cli-BaH8OVQ-.js → config-cli-Bth4qEO1.js} +1 -1
  26. package/dist/{config-cli-CbdeNt0M.js → config-cli-vqQE9gkx.js} +1 -1
  27. package/dist/{configure-BmNOfGox.js → configure-DU1IcIoq.js} +3 -3
  28. package/dist/{configure-D5dSJprr.js → configure-DyeOg2hp.js} +3 -3
  29. package/dist/{deliver-C-37cZUe.js → deliver-BH0l3UKW.js} +1 -1
  30. package/dist/{deliver-C46-vyqg.js → deliver-dODxSv3b.js} +1 -1
  31. package/dist/{doctor-completion-Xx92Sz9s.js → doctor-completion-BbWijhz0.js} +1 -1
  32. package/dist/{doctor-completion-DRucwWSo.js → doctor-completion-R-1oda1v.js} +1 -1
  33. package/dist/entry.js +1 -1
  34. package/dist/extensionAPI.js +6 -6
  35. package/dist/{gateway-cli-SlbXm0f7.js → gateway-cli-BFWLsB3b.js} +9 -9
  36. package/dist/{gateway-cli-D3kGHw5M.js → gateway-cli-DGKFkUrv.js} +9 -9
  37. package/dist/{glass-ui-ws-Cj9wbO1L.js → glass-ui-ws-DDgLRQXa.js} +7 -7
  38. package/dist/{glass-ui-ws-B7V2wHEu.js → glass-ui-ws-DFRu8a15.js} +7 -7
  39. package/dist/{health-DUKLANXu.js → health-BxPSqsO6.js} +1 -1
  40. package/dist/{health-BPOuBmYt.js → health-CJ7Y6Rln.js} +1 -1
  41. package/dist/{hooks-cli-BF0mbqlZ.js → hooks-cli-BAVmPXDl.js} +2 -2
  42. package/dist/{hooks-cli-BpfIySkB.js → hooks-cli-elIqdnzb.js} +2 -2
  43. package/dist/{image-DcpMiprB.js → image-CHzdaNJ4.js} +1 -1
  44. package/dist/{image-CuzFLQWC.js → image-CXu8W39c.js} +1 -1
  45. package/dist/index.js +6 -6
  46. package/dist/llm-slug-generator.js +6 -6
  47. package/dist/{models-Bt8lm_nD.js → models-CIUYv1__.js} +2 -2
  48. package/dist/{models-cli-bHYoiL5x.js → models-cli-DmffFgOZ.js} +2 -2
  49. package/dist/{models-cli-BmBmBUgl.js → models-cli-ydxkD2B-.js} +3 -3
  50. package/dist/{onboard-DFkXqe5P.js → onboard-BBZMfGdo.js} +2 -2
  51. package/dist/{onboard-DlY7trcj.js → onboard-DhJBvsPB.js} +2 -2
  52. package/dist/{onboard-channels-D0RHtaJE.js → onboard-channels-0wtc-NTC.js} +1 -1
  53. package/dist/{onboard-channels-DEFF3Rjo.js → onboard-channels-LCDTtAGK.js} +1 -1
  54. package/dist/{onboarding-mXPGwLNG.js → onboarding-Bm11jSTl.js} +3 -3
  55. package/dist/{onboarding-BEDqTyYQ.js → onboarding-Bs7a2RIn.js} +3 -3
  56. package/dist/{onboarding.finalize-DmeEphAd.js → onboarding.finalize-DOpAnwny.js} +5 -5
  57. package/dist/{onboarding.finalize-Ca-aQ6eE.js → onboarding.finalize-fdahnZvf.js} +6 -6
  58. package/dist/{pi-embedded-DPXbVwW0.js → pi-embedded-BwQa2XMa.js} +69 -68
  59. package/dist/{pi-embedded-helpers-B8kqLWns.js → pi-embedded-helpers-lgx_U5KS.js} +4 -4
  60. package/dist/{pi-embedded-helpers-CfqDGQ9J.js → pi-embedded-helpers-pubKo8HQ.js} +4 -4
  61. package/dist/{plugin-registry-CDIOKK_i.js → plugin-registry-CQCjMWVC.js} +1 -1
  62. package/dist/{plugin-registry-C1ghjhOE.js → plugin-registry-D3CP_n5q.js} +1 -1
  63. package/dist/plugin-sdk/agents/pi-tools.validate-wrapper.d.ts +8 -8
  64. package/dist/plugin-sdk/{channel-web-CxwLjrWk.js → channel-web-B76ttiD9.js} +1 -1
  65. package/dist/plugin-sdk/index.js +2 -2
  66. package/dist/plugin-sdk/{reply-CyZfsjrl.js → reply-CQPVXorK.js} +55 -54
  67. package/dist/plugin-sdk/{web-C2OyRvIo.js → web-DtkJFFr4.js} +2 -2
  68. package/dist/{plugins-cli-jv-Bqq1t.js → plugins-cli-D_r2gFIY.js} +2 -2
  69. package/dist/{plugins-cli-BFCJyRBX.js → plugins-cli-FUQHZ6tU.js} +2 -2
  70. package/dist/{program-T144qFaw.js → program-DwrSPQU4.js} +7 -7
  71. package/dist/{program-context-xpDrT9eG.js → program-context-CN4mNmYa.js} +17 -17
  72. package/dist/{prompt-select-styled-Bn4zyJmn.js → prompt-select-styled-BQW1Ropv.js} +4 -4
  73. package/dist/{prompt-select-styled-BN0aOmtR.js → prompt-select-styled-CK3VsV2a.js} +4 -4
  74. package/dist/{provider-auth-helpers-CqDTEFnD.js → provider-auth-helpers-Bg07iIOF.js} +1 -1
  75. package/dist/{provider-auth-helpers-CfBPNN7J.js → provider-auth-helpers-CY8preuC.js} +1 -1
  76. package/dist/{push-apns-CVRC-O3Q.js → push-apns-6u2NUzOH.js} +1 -1
  77. package/dist/{push-apns-CHIVwHRD.js → push-apns-D2hExRgY.js} +1 -1
  78. package/dist/{pw-ai-m0mj2KWK.js → pw-ai-B5asscAD.js} +1 -1
  79. package/dist/{pw-ai-1htA-NnS.js → pw-ai-De-KR9_s.js} +1 -1
  80. package/dist/{register.agent-DD2QErXm.js → register.agent-BhM4QQqa.js} +5 -5
  81. package/dist/{register.agent-B0ExzmtM.js → register.agent-BqRVkePg.js} +6 -6
  82. package/dist/{register.configure-DpHCcS5d.js → register.configure-0qzVn1Z5.js} +6 -6
  83. package/dist/{register.configure-ByNKeAo7.js → register.configure-BtnhfP3M.js} +6 -6
  84. package/dist/{register.maintenance-C9K829tk.js → register.maintenance-BNqMCfLm.js} +7 -7
  85. package/dist/{register.maintenance-Ck1jwY_N.js → register.maintenance-DrijKQoQ.js} +8 -8
  86. package/dist/{register.message-DZ45n1GX.js → register.message-2iSjsSI-.js} +2 -2
  87. package/dist/{register.message-BveFb6IW.js → register.message-CGexab2Y.js} +2 -2
  88. package/dist/{register.onboard-Byt2S-D0.js → register.onboard-D1b3xhDD.js} +4 -4
  89. package/dist/{register.onboard-BHUh0Xk1.js → register.onboard-DIAkE9FI.js} +4 -4
  90. package/dist/{register.setup-DCG9bst7.js → register.setup-Bvv5sUpg.js} +4 -4
  91. package/dist/{register.setup-BvB9oNh3.js → register.setup-Clq3FwZo.js} +4 -4
  92. package/dist/{register.status-health-sessions-CMJ_l4rs.js → register.status-health-sessions-IPxdVhoD.js} +3 -3
  93. package/dist/{register.status-health-sessions-DgNzHYE-.js → register.status-health-sessions-JHfNAhk3.js} +3 -3
  94. package/dist/{register.subclis-DnWR9l5V.js → register.subclis-C5wTDVDa.js} +9 -9
  95. package/dist/{reply-DcyKvFor.js → reply-dzRBlsmK.js} +55 -54
  96. package/dist/{run-main-B1aB8I5W.js → run-main-jPbs3Gm5.js} +14 -14
  97. package/dist/{runner-BcQ0sF9T.js → runner-DUBExAb5.js} +1 -1
  98. package/dist/{runner-CU9l0uJh.js → runner-WAG0M5s9.js} +1 -1
  99. package/dist/{server-methods-BdXCfO_O.js → server-methods-CJbZTdch.js} +7 -7
  100. package/dist/{server-methods-D1W-tViM.js → server-methods-DuaVOb2k.js} +7 -7
  101. package/dist/{server-node-events-DqVmWjof.js → server-node-events-BgFWyVCV.js} +2 -2
  102. package/dist/{server-node-events-BwGehjys.js → server-node-events-DesNIafd.js} +2 -2
  103. package/dist/{status-BvnWSBQl.js → status-BV22IA25.js} +1 -1
  104. package/dist/{status-BY4CnB2O.js → status-BxfE61b4.js} +2 -2
  105. package/dist/{status-kPaSg3RB.js → status-Bxkdy4Dq.js} +1 -1
  106. package/dist/{status-CfLq5R5j.js → status-DOB2UmDg.js} +2 -2
  107. package/dist/{subagent-registry-CVQOC9Jw.js → subagent-registry-DEdqc42m.js} +55 -54
  108. package/dist/{unified-runner-CxscxYKm.js → unified-runner-BIj2b1Y-.js} +69 -68
  109. package/dist/{update-cli-Bgrhor0g.js → update-cli-CNlljdlx.js} +8 -8
  110. package/dist/{update-cli-D5QWigS0.js → update-cli-D4OgWd1l.js} +7 -7
  111. package/dist/{update-runner-DdPdhkw5.js → update-runner-CZd6ajL6.js} +1 -1
  112. package/dist/{update-runner-CPOm0f_6.js → update-runner-Dtay-1lf.js} +1 -1
  113. package/dist/{web-DGLeD0Lo.js → web-B-E-mzTK.js} +6 -6
  114. package/dist/{web-DShKO-0L.js → web-DP9s1zzp.js} +6 -6
  115. package/dist/{web-ZnFT5LP9.js → web-DUi3cu-p.js} +1 -1
  116. package/dist/{web-DqjNQqGK.js → web-qJRZWEaD.js} +2 -2
  117. package/package.json +1 -1
@@ -13,7 +13,7 @@ import "./client-DMBZpU6X.js";
13
13
  import "./call-BcE47FtD.js";
14
14
  import "./message-channel-C9dERklz.js";
15
15
  import "./pairing-token-Byh6drgn.js";
16
- import "./subagent-registry-CVQOC9Jw.js";
16
+ import "./subagent-registry-DEdqc42m.js";
17
17
  import "./sessions-CJXnZVjR.js";
18
18
  import "./tokens-Csntmwwn.js";
19
19
  import "./plugins-CwSlLxM8.js";
@@ -101,9 +101,9 @@ import { t as ensureSymiCliOnPath } from "./path-env-Bic_wXs9.js";
101
101
  import "./catalog-DLQFKucJ.js";
102
102
  import "./note-DDecZomM.js";
103
103
  import "./plugin-auto-enable-D6ENR3Xg.js";
104
- import { t as ensurePluginRegistryLoaded } from "./plugin-registry-C1ghjhOE.js";
104
+ import { t as ensurePluginRegistryLoaded } from "./plugin-registry-D3CP_n5q.js";
105
105
  import { t as assertSupportedRuntime } from "./runtime-guard-D7waq_Ho.js";
106
- import { t as emitCliBanner } from "./banner-om7BRUIc.js";
106
+ import { t as emitCliBanner } from "./banner-C2tjwP2M.js";
107
107
  import "./doctor-config-flow-CA3eiKhd.js";
108
108
  import { n as ensureConfigReady } from "./config-guard-CPHvOzsC.js";
109
109
  import process$1 from "node:process";
@@ -118,7 +118,7 @@ const routeHealth = {
118
118
  const verbose = getVerboseFlag(argv, { includeDebug: true });
119
119
  const timeoutMs = getPositiveIntFlagValue(argv, "--timeout");
120
120
  if (timeoutMs === null) return false;
121
- const { healthCommand } = await import("./health-DUKLANXu.js").then((n) => n.i);
121
+ const { healthCommand } = await import("./health-BxPSqsO6.js").then((n) => n.i);
122
122
  await healthCommand({
123
123
  json,
124
124
  timeoutMs,
@@ -138,7 +138,7 @@ const routeStatus = {
138
138
  const verbose = getVerboseFlag(argv, { includeDebug: true });
139
139
  const timeoutMs = getPositiveIntFlagValue(argv, "--timeout");
140
140
  if (timeoutMs === null) return false;
141
- const { statusCommand } = await import("./status-CfLq5R5j.js").then((n) => n.t);
141
+ const { statusCommand } = await import("./status-DOB2UmDg.js").then((n) => n.t);
142
142
  await statusCommand({
143
143
  json,
144
144
  deep,
@@ -172,7 +172,7 @@ const routeAgentsList = {
172
172
  run: async (argv) => {
173
173
  const json = hasFlag(argv, "--json");
174
174
  const bindings = hasFlag(argv, "--bindings");
175
- const { agentsListCommand } = await import("./agents-DPdRUY_O.js").then((n) => n.t);
175
+ const { agentsListCommand } = await import("./agents-yeSooTtP.js").then((n) => n.t);
176
176
  await agentsListCommand({
177
177
  json,
178
178
  bindings
@@ -243,7 +243,7 @@ const routes = [
243
243
  const pathArg = getCommandPositionals(argv)[2];
244
244
  if (!pathArg) return false;
245
245
  const json = hasFlag(argv, "--json");
246
- const { runConfigGet } = await import("./config-cli-BaH8OVQ-.js");
246
+ const { runConfigGet } = await import("./config-cli-Bth4qEO1.js");
247
247
  await runConfigGet({
248
248
  path: pathArg,
249
249
  json
@@ -256,7 +256,7 @@ const routes = [
256
256
  run: async (argv) => {
257
257
  const pathArg = getCommandPositionals(argv)[2];
258
258
  if (!pathArg) return false;
259
- const { runConfigUnset } = await import("./config-cli-BaH8OVQ-.js");
259
+ const { runConfigUnset } = await import("./config-cli-Bth4qEO1.js");
260
260
  await runConfigUnset({ path: pathArg });
261
261
  return true;
262
262
  }
@@ -270,7 +270,7 @@ const routes = [
270
270
  const local = hasFlag(argv, "--local");
271
271
  const json = hasFlag(argv, "--json");
272
272
  const plain = hasFlag(argv, "--plain");
273
- const { modelsListCommand } = await import("./models-Bt8lm_nD.js").then((n) => n.t);
273
+ const { modelsListCommand } = await import("./models-CIUYv1__.js").then((n) => n.t);
274
274
  await modelsListCommand({
275
275
  all,
276
276
  local,
@@ -301,7 +301,7 @@ const routes = [
301
301
  const plain = hasFlag(argv, "--plain");
302
302
  const check = hasFlag(argv, "--check");
303
303
  const probe = hasFlag(argv, "--probe");
304
- const { modelsStatusCommand } = await import("./models-Bt8lm_nD.js").then((n) => n.t);
304
+ const { modelsStatusCommand } = await import("./models-CIUYv1__.js").then((n) => n.t);
305
305
  await modelsStatusCommand({
306
306
  json,
307
307
  plain,
@@ -379,7 +379,7 @@ async function runCli(argv = process$1.argv) {
379
379
  assertSupportedRuntime();
380
380
  if (await tryRouteCli(normalizedArgv)) return;
381
381
  enableConsoleCapture();
382
- const { buildProgram } = await import("./program-T144qFaw.js");
382
+ const { buildProgram } = await import("./program-DwrSPQU4.js");
383
383
  const program = buildProgram();
384
384
  installUnhandledRejectionHandler();
385
385
  process$1.on("uncaughtException", (error) => {
@@ -411,10 +411,10 @@ async function runCli(argv = process$1.argv) {
411
411
  const { getProgramContext } = await import("./program-context-CqzR_m-7.js").then((n) => n.n);
412
412
  const ctx = getProgramContext(program);
413
413
  if (ctx) {
414
- const { registerCoreCliByName } = await import("./command-registry-DJbyskBr.js").then((n) => n.t);
414
+ const { registerCoreCliByName } = await import("./command-registry-yzABgrim.js").then((n) => n.t);
415
415
  await registerCoreCliByName(program, ctx, primary, parseArgv);
416
416
  }
417
- const { registerSubCliByName } = await import("./register.subclis-DnWR9l5V.js").then((n) => n.a);
417
+ const { registerSubCliByName } = await import("./register.subclis-C5wTDVDa.js").then((n) => n.a);
418
418
  await registerSubCliByName(program, primary);
419
419
  }
420
420
  const hasBuiltinPrimary = primary !== null && program.commands.some((command) => command.name() === primary);
@@ -423,7 +423,7 @@ async function runCli(argv = process$1.argv) {
423
423
  primary,
424
424
  hasBuiltinPrimary
425
425
  })) {
426
- const { registerPluginCliCommands } = await import("./cli-DNGrFH7L.js");
426
+ const { registerPluginCliCommands } = await import("./cli-D4MEJZ7W.js");
427
427
  const { loadConfig } = await import("./config-DHBLS1Hl.js").then((n) => n.t);
428
428
  registerPluginCliCommands(program, loadConfig());
429
429
  }
@@ -4,7 +4,7 @@ import { G as resolveSymiAgentDir, T as resolveApiKeyForProvider, c as normalize
4
4
  import { t as normalizeChatType } from "./chat-type-DFDuk3FY.js";
5
5
  import { _ as kindFromMime, d as detectMime, h as isAudioFileName, p as getFileExtension } from "./image-ops-ByaQt43P.js";
6
6
  import { d as DEFAULT_IMESSAGE_ATTACHMENT_ROOTS, f as isInboundPathAllowed, m as resolveIMessageAttachmentRoots, n as loadConfig, p as mergeInboundPathRoots } from "./config-BmV60pPT.js";
7
- import { S as ensureSymiModelsJson, t as describeImageWithModel } from "./image-DcpMiprB.js";
7
+ import { S as ensureSymiModelsJson, t as describeImageWithModel } from "./image-CHzdaNJ4.js";
8
8
  import { n as collectProviderApiKeysForExecution, r as executeWithApiKeyRotation, t as parseGeminiAuth } from "./gemini-auth-CSlZZ1Pw.js";
9
9
  import { n as fetchWithTimeout } from "./fetch-timeout-BheTNyes.js";
10
10
  import { i as fetchRemoteMedia, n as getDefaultMediaLocalRoots, o as fetchWithSsrFGuard, r as MediaFetchError } from "./local-roots-CC8jiKDk.js";
@@ -4,7 +4,7 @@ import { $ as resolveSymiAgentDir, A as normalizeGoogleModelId, B as resolveApiK
4
4
  import { d as DEFAULT_IMESSAGE_ATTACHMENT_ROOTS, f as isInboundPathAllowed, m as resolveIMessageAttachmentRoots, n as loadConfig, p as mergeInboundPathRoots } from "./config-5SdHIcHU.js";
5
5
  import { c as detectMime, f as isAudioFileName, m as kindFromMime, u as getFileExtension } from "./image-ops-C7CauEK8.js";
6
6
  import { t as normalizeChatType } from "./chat-type-3FRbbjbq.js";
7
- import { S as ensureSymiModelsJson, t as describeImageWithModel } from "./image-CuzFLQWC.js";
7
+ import { S as ensureSymiModelsJson, t as describeImageWithModel } from "./image-CXu8W39c.js";
8
8
  import { n as collectProviderApiKeysForExecution, r as executeWithApiKeyRotation, t as parseGeminiAuth } from "./gemini-auth-Dy12ZAH3.js";
9
9
  import { n as fetchWithTimeout } from "./fetch-timeout-DL3f_O53.js";
10
10
  import { i as fetchRemoteMedia, n as getDefaultMediaLocalRoots, o as fetchWithSsrFGuard, r as MediaFetchError } from "./local-roots-DhZz0Ybs.js";
@@ -1,7 +1,7 @@
1
1
  import { g as resolveStateDir, t as CONFIG_PATH } from "./paths-Cqn-zk3M.js";
2
2
  import { D as isPlainObject, U as getResolvedLoggerSettings, r as clamp, y as resolveUserPath } from "./utils-B-0b9bGM.js";
3
3
  import { a as normalizeElevatedLevel, c as normalizeUsageDisplay, d as supportsXHighThinking, n as formatXHighModelHint, o as normalizeReasoningLevel, s as normalizeThinkLevel, t as formatThinkingLevels } from "./thinking-EAliFiVK.js";
4
- import { $n as OPENAI_TTS_MODELS, Bn as registerAgentRunContext, Bt as abortEmbeddedPiRun, C as ensureOutboundSessionEntry, Et as agentCommand, Ft as normalizeSendPolicy, G as normalizeCronJobPatch, Gn as resolveTtsApiKey, H as writeRestartSentinel, Hn as getTtsProvider, Ht as waitForEmbeddedPiRunEnd, It as resolveSendPolicy, Jn as resolveTtsPrefsPath, Kn as resolveTtsAutoMode, L as formatDoctorNonInteractiveHint, Mn as listSubagentRunsForRequester, Mt as resolveOutboundTarget, N as scheduleGatewaySigusr1Restart, Ot as resolveAgentDeliveryPlan, Pr as resolveAgentTimeoutMs, Qn as textToSpeech, Rt as createOutboundSendDeps, Sr as isSystemEventContextChanged, Tn as stopSubagentsForRequester, Un as isTtsEnabled, Vn as resolveUserTimezone, W as normalizeCronJobCreate, Wn as isTtsProviderConfigured, Xn as setTtsEnabled, Yn as resolveTtsProviderOrder, Zn as setTtsProvider, _ as loadCombinedSessionStoreForGateway, at as persistBrowserProxyFiles, b as resolveGatewaySessionStoreTarget, br as parseVerboseOverride, c as clearSessionQueues, er as OPENAI_TTS_VOICES, ft as loadSymiPlugins, g as listSessionsFromStore, gt as loadProviderUsageSummary, h as listAgentsForGateway, in as unbindThreadBindingsBySessionKey, it as applyBrowserProxyPaths, jn as listDescendantRunsForRequester, kt as resolveAgentOutboundTarget, mn as createReplyDispatcher, mt as normalizeGroupActivation, n as BARE_SESSION_RESET_PROMPT, p as canonicalizeSpawnedByForAgent, pn as dispatchInboundMessage, qn as resolveTtsConfig, v as loadSessionEntry, vr as applyModelOverrideToSessionEntry, w as resolveOutboundSessionRoute, wn as isAbortTrigger, x as resolveSessionModelRef, xn as formatZonedTimestamp, xr as enqueueSystemEvent, y as pruneLegacyStoreKeys, yr as applyVerboseOverride, zn as onAgentEvent } from "./reply-DcyKvFor.js";
4
+ import { $n as OPENAI_TTS_MODELS, Bn as registerAgentRunContext, Bt as abortEmbeddedPiRun, C as ensureOutboundSessionEntry, Et as agentCommand, Ft as normalizeSendPolicy, G as normalizeCronJobPatch, Gn as resolveTtsApiKey, H as writeRestartSentinel, Hn as getTtsProvider, Ht as waitForEmbeddedPiRunEnd, It as resolveSendPolicy, Jn as resolveTtsPrefsPath, Kn as resolveTtsAutoMode, L as formatDoctorNonInteractiveHint, Mn as listSubagentRunsForRequester, Mt as resolveOutboundTarget, N as scheduleGatewaySigusr1Restart, Ot as resolveAgentDeliveryPlan, Pr as resolveAgentTimeoutMs, Qn as textToSpeech, Rt as createOutboundSendDeps, Sr as isSystemEventContextChanged, Tn as stopSubagentsForRequester, Un as isTtsEnabled, Vn as resolveUserTimezone, W as normalizeCronJobCreate, Wn as isTtsProviderConfigured, Xn as setTtsEnabled, Yn as resolveTtsProviderOrder, Zn as setTtsProvider, _ as loadCombinedSessionStoreForGateway, at as persistBrowserProxyFiles, b as resolveGatewaySessionStoreTarget, br as parseVerboseOverride, c as clearSessionQueues, er as OPENAI_TTS_VOICES, ft as loadSymiPlugins, g as listSessionsFromStore, gt as loadProviderUsageSummary, h as listAgentsForGateway, in as unbindThreadBindingsBySessionKey, it as applyBrowserProxyPaths, jn as listDescendantRunsForRequester, kt as resolveAgentOutboundTarget, mn as createReplyDispatcher, mt as normalizeGroupActivation, n as BARE_SESSION_RESET_PROMPT, p as canonicalizeSpawnedByForAgent, pn as dispatchInboundMessage, qn as resolveTtsConfig, v as loadSessionEntry, vr as applyModelOverrideToSessionEntry, w as resolveOutboundSessionRoute, wn as isAbortTrigger, x as resolveSessionModelRef, xn as formatZonedTimestamp, xr as enqueueSystemEvent, y as pruneLegacyStoreKeys, yr as applyVerboseOverride, zn as onAgentEvent } from "./reply-dzRBlsmK.js";
5
5
  import { S as parseAgentSessionKey, l as resolveAgentIdFromSessionKey, m as DEFAULT_ACCOUNT_ID, o as classifySessionKeyShape, s as normalizeAgentId, t as DEFAULT_AGENT_ID, x as isSubagentSessionKey } from "./session-key-DCt45XZa.js";
6
6
  import { t as resolveSymiPackageRoot } from "./symi-root-CrGJbkzf.js";
7
7
  import { C as createInternalHookEvent, T as triggerInternalHook, d as getActivePluginRegistry, r as DEFAULT_CHAT_CHANNEL, t as CHANNEL_IDS } from "./registry-Cja8eT7G.js";
@@ -39,14 +39,14 @@ import { t as WizardCancelledError } from "./prompts-Xu2Sveka.js";
39
39
  import { t as resolveChannelDefaultAccountId } from "./helpers-BcGbMZD1.js";
40
40
  import { t as buildChannelAccountSnapshot } from "./status-BrV-afZE.js";
41
41
  import { o as isNodeCommandAllowed, s as resolveNodeCommandAllowlist } from "./audit-CrITRV6w.js";
42
- import { n as getStatusSummary } from "./status-BY4CnB2O.js";
43
- import { s as setHeartbeatsEnabled } from "./health-BPOuBmYt.js";
42
+ import { n as getStatusSummary } from "./status-BxfE61b4.js";
43
+ import { s as setHeartbeatsEnabled } from "./health-CJ7Y6Rln.js";
44
44
  import { m as normalizeUpdateChannel } from "./update-check-CtckACbb.js";
45
- import { a as sendApnsAlert, c as parseMessageWithAttachments, i as resolveApnsAuthConfigFromEnv, l as formatForLog, n as normalizeApnsEnvironment, o as sendApnsBackgroundWake, s as normalizeRpcAttachmentsToChatAttachments, t as loadApnsRegistration } from "./push-apns-CHIVwHRD.js";
46
- import { a as pruneAgentConfig, i as loadAgentIdentity, r as findAgentEntryIndex, t as applyAgentConfig } from "./agents.config-Cr6DcdaD.js";
45
+ import { a as sendApnsAlert, c as parseMessageWithAttachments, i as resolveApnsAuthConfigFromEnv, l as formatForLog, n as normalizeApnsEnvironment, o as sendApnsBackgroundWake, s as normalizeRpcAttachmentsToChatAttachments, t as loadApnsRegistration } from "./push-apns-D2hExRgY.js";
46
+ import { a as pruneAgentConfig, i as loadAgentIdentity, r as findAgentEntryIndex, t as applyAgentConfig } from "./agents.config-XOcM83Bx.js";
47
47
  import { t as resolveSystemRunCommand } from "./system-run-command-ByVa3txU.js";
48
48
  import { t as installSkill } from "./skills-install-D67isO1L.js";
49
- import { t as runGatewayUpdate } from "./update-runner-CPOm0f_6.js";
49
+ import { t as runGatewayUpdate } from "./update-runner-Dtay-1lf.js";
50
50
  import * as fs$2 from "node:fs";
51
51
  import fs from "node:fs";
52
52
  import * as os$1 from "node:os";
@@ -6853,7 +6853,7 @@ const nodeHandlers = {
6853
6853
  const p = params;
6854
6854
  const payloadJSON = typeof p.payloadJSON === "string" ? p.payloadJSON : p.payload !== void 0 ? JSON.stringify(p.payload) : null;
6855
6855
  await respondUnavailableOnThrow(respond, async () => {
6856
- const { handleNodeEvent } = await import("./server-node-events-DqVmWjof.js");
6856
+ const { handleNodeEvent } = await import("./server-node-events-BgFWyVCV.js");
6857
6857
  const nodeId = client?.connect?.device?.id ?? client?.connect?.client?.id ?? "node";
6858
6858
  await handleNodeEvent({
6859
6859
  deps: context.deps,
@@ -12,7 +12,7 @@ import { f as GATEWAY_CLIENT_CAPS, g as hasGatewayClientCap, i as isGatewayMessa
12
12
  import { c as writeJsonAtomic, o as createAsyncLock, s as readJsonFile } from "./pairing-token-Byh6drgn.js";
13
13
  import { s as pickPrimaryLanIPv4 } from "./net-DZ5Ayk-W.js";
14
14
  import { i as normalizeInputProvenance } from "./input-provenance-D0lNkCf6.js";
15
- import { $n as resolveTtsAutoMode, B as dispatchInboundMessage, C as resolveAgentDeliveryPlan, Cn as enqueueSystemEvent, Cr as onAgentEvent, D as createOutboundSendDeps, Dt as normalizeCronJobPatch, Et as normalizeCronJobCreate, G as BARE_SESSION_RESET_PROMPT, Gn as stopSubagentsForRequester, Gt as persistBrowserProxyFiles, In as resolveAgentTimeoutMs, Jn as resolveUserTimezone, Qn as resolveTtsApiKey, Sn as parseVerboseOverride, V as createReplyDispatcher, Vn as formatZonedTimestamp, Wn as isAbortTrigger, Wt as applyBrowserProxyPaths, Xn as isTtsEnabled, Y as abortEmbeddedPiRun, Yn as getTtsProvider, Z as waitForEmbeddedPiRunEnd, Zn as isTtsProviderConfigured, Zt as scheduleGatewaySigusr1Restart, a as listSubagentRunsForRequester, ar as textToSpeech, bn as applyModelOverrideToSessionEntry, c as clearSessionQueues, ct as resolveOutboundSessionRoute, dt as resolveOutboundTarget, en as unbindThreadBindingsBySessionKey, er as resolveTtsConfig, hn as resolveSendPolicy, i as listDescendantRunsForRequester, ir as setTtsProvider, m as loadSymiPlugins, mn as normalizeSendPolicy, nr as resolveTtsProviderOrder, or as OPENAI_TTS_MODELS, rn as loadProviderUsageSummary, rr as setTtsEnabled, sr as OPENAI_TTS_VOICES, st as ensureOutboundSessionEntry, tn as normalizeGroupActivation, tr as resolveTtsPrefsPath, w as resolveAgentOutboundTarget, wn as isSystemEventContextChanged, wr as registerAgentRunContext, wt as writeRestartSentinel, x as agentCommand, xn as applyVerboseOverride, yt as formatDoctorNonInteractiveHint } from "./subagent-registry-CVQOC9Jw.js";
15
+ import { $n as resolveTtsAutoMode, B as dispatchInboundMessage, C as resolveAgentDeliveryPlan, Cn as enqueueSystemEvent, Cr as onAgentEvent, D as createOutboundSendDeps, Dt as normalizeCronJobPatch, Et as normalizeCronJobCreate, G as BARE_SESSION_RESET_PROMPT, Gn as stopSubagentsForRequester, Gt as persistBrowserProxyFiles, In as resolveAgentTimeoutMs, Jn as resolveUserTimezone, Qn as resolveTtsApiKey, Sn as parseVerboseOverride, V as createReplyDispatcher, Vn as formatZonedTimestamp, Wn as isAbortTrigger, Wt as applyBrowserProxyPaths, Xn as isTtsEnabled, Y as abortEmbeddedPiRun, Yn as getTtsProvider, Z as waitForEmbeddedPiRunEnd, Zn as isTtsProviderConfigured, Zt as scheduleGatewaySigusr1Restart, a as listSubagentRunsForRequester, ar as textToSpeech, bn as applyModelOverrideToSessionEntry, c as clearSessionQueues, ct as resolveOutboundSessionRoute, dt as resolveOutboundTarget, en as unbindThreadBindingsBySessionKey, er as resolveTtsConfig, hn as resolveSendPolicy, i as listDescendantRunsForRequester, ir as setTtsProvider, m as loadSymiPlugins, mn as normalizeSendPolicy, nr as resolveTtsProviderOrder, or as OPENAI_TTS_MODELS, rn as loadProviderUsageSummary, rr as setTtsEnabled, sr as OPENAI_TTS_VOICES, st as ensureOutboundSessionEntry, tn as normalizeGroupActivation, tr as resolveTtsPrefsPath, w as resolveAgentOutboundTarget, wn as isSystemEventContextChanged, wr as registerAgentRunContext, wt as writeRestartSentinel, x as agentCommand, xn as applyVerboseOverride, yt as formatDoctorNonInteractiveHint } from "./subagent-registry-DEdqc42m.js";
16
16
  import { F as resolveMainSessionKey, I as resolveMainSessionKeyFromConfig, J as normalizeSessionDeliveryFields, N as resolveAgentMainSessionKey, P as resolveExplicitAgentSessionKey, R as snapshotSessionOrigin, S as stripEnvelopeFromMessages, _ as capArrayByJsonBytes, d as updateSessionStore, g as archiveSessionTranscripts, h as archiveFileOnDisk, o as loadSessionStore, t as extractDeliveryInfo, v as readSessionMessages, x as resolveSessionTranscriptCandidates, y as readSessionPreviewItemsFromTranscript } from "./sessions-CJXnZVjR.js";
17
17
  import { n as listChannelPlugins, r as normalizeChannelId, t as getChannelPlugin } from "./plugins-CwSlLxM8.js";
18
18
  import { n as createBrowserRouteDispatcher } from "./with-timeout-Di0nddLY.js";
@@ -37,14 +37,14 @@ import { t as WizardCancelledError } from "./prompts-m1IJwIAx.js";
37
37
  import { t as resolveChannelDefaultAccountId } from "./helpers-cLP5YLeQ.js";
38
38
  import { t as buildChannelAccountSnapshot } from "./status-BUedPCLb.js";
39
39
  import { o as isNodeCommandAllowed, s as resolveNodeCommandAllowlist } from "./audit-Byo5jCLN.js";
40
- import { r as getStatusSummary } from "./status-CfLq5R5j.js";
41
- import { c as setHeartbeatsEnabled } from "./health-DUKLANXu.js";
40
+ import { r as getStatusSummary } from "./status-DOB2UmDg.js";
41
+ import { c as setHeartbeatsEnabled } from "./health-BxPSqsO6.js";
42
42
  import { m as normalizeUpdateChannel } from "./update-check-ZdimP1aU.js";
43
- import { a as sendApnsAlert, c as parseMessageWithAttachments, i as resolveApnsAuthConfigFromEnv, l as formatForLog, n as normalizeApnsEnvironment, o as sendApnsBackgroundWake, s as normalizeRpcAttachmentsToChatAttachments, t as loadApnsRegistration } from "./push-apns-CVRC-O3Q.js";
44
- import { a as pruneAgentConfig, i as loadAgentIdentity, r as findAgentEntryIndex, t as applyAgentConfig } from "./agents.config-DIumfxnN.js";
43
+ import { a as sendApnsAlert, c as parseMessageWithAttachments, i as resolveApnsAuthConfigFromEnv, l as formatForLog, n as normalizeApnsEnvironment, o as sendApnsBackgroundWake, s as normalizeRpcAttachmentsToChatAttachments, t as loadApnsRegistration } from "./push-apns-6u2NUzOH.js";
44
+ import { a as pruneAgentConfig, i as loadAgentIdentity, r as findAgentEntryIndex, t as applyAgentConfig } from "./agents.config-DoTRueo1.js";
45
45
  import { t as resolveSystemRunCommand } from "./system-run-command-ByVa3txU.js";
46
46
  import { t as installSkill } from "./skills-install-1ZdwGTnh.js";
47
- import { t as runGatewayUpdate } from "./update-runner-DdPdhkw5.js";
47
+ import { t as runGatewayUpdate } from "./update-runner-CZd6ajL6.js";
48
48
  import { spawnSync } from "node:child_process";
49
49
  import * as os$1 from "node:os";
50
50
  import os from "node:os";
@@ -6851,7 +6851,7 @@ const nodeHandlers = {
6851
6851
  const p = params;
6852
6852
  const payloadJSON = typeof p.payloadJSON === "string" ? p.payloadJSON : p.payload !== void 0 ? JSON.stringify(p.payload) : null;
6853
6853
  await respondUnavailableOnThrow(respond, async () => {
6854
- const { handleNodeEvent } = await import("./server-node-events-BwGehjys.js");
6854
+ const { handleNodeEvent } = await import("./server-node-events-DesNIafd.js");
6855
6855
  const nodeId = client?.connect?.device?.id ?? client?.connect?.client?.id ?? "node";
6856
6856
  await handleNodeEvent({
6857
6857
  deps: context.deps,
@@ -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 { Et as agentCommand, Mt as resolveOutboundTarget, Pt as createOutboundSendDeps, b as resolveGatewaySessionStoreTarget, st as requestHeartbeatNow, v as loadSessionEntry, xr as enqueueSystemEvent, y as pruneLegacyStoreKeys } from "./reply-DcyKvFor.js";
4
+ import { Et as agentCommand, Mt as resolveOutboundTarget, Pt as createOutboundSendDeps, b as resolveGatewaySessionStoreTarget, st as requestHeartbeatNow, v as loadSessionEntry, xr as enqueueSystemEvent, y as pruneLegacyStoreKeys } from "./reply-dzRBlsmK.js";
5
5
  import { c as normalizeMainKey } from "./session-key-DCt45XZa.js";
6
6
  import "./registry-Cja8eT7G.js";
7
7
  import { f as defaultRuntime } from "./subsystem-D9vIQve0.js";
@@ -102,7 +102,7 @@ import "./pi-tools.policy-CIDBbw6x.js";
102
102
  import "./control-service-Bz7rxLWq.js";
103
103
  import "./stagger-BUClb97_.js";
104
104
  import "./channel-selection-DuWs0Aak.js";
105
- import { c as parseMessageWithAttachments, l as formatForLog, r as registerApnsToken, s as normalizeRpcAttachmentsToChatAttachments } from "./push-apns-CHIVwHRD.js";
105
+ import { c as parseMessageWithAttachments, l as formatForLog, r as registerApnsToken, s as normalizeRpcAttachmentsToChatAttachments } from "./push-apns-D2hExRgY.js";
106
106
  import { randomUUID } from "node:crypto";
107
107
 
108
108
  //#region src/gateway/server-node-events.ts
@@ -14,7 +14,7 @@ import "./client-DMBZpU6X.js";
14
14
  import "./call-BcE47FtD.js";
15
15
  import "./message-channel-C9dERklz.js";
16
16
  import "./pairing-token-Byh6drgn.js";
17
- import { Cn as enqueueSystemEvent, T as createOutboundSendDeps, dn as requestHeartbeatNow, dt as resolveOutboundTarget, x as agentCommand } from "./subagent-registry-CVQOC9Jw.js";
17
+ import { Cn as enqueueSystemEvent, T as createOutboundSendDeps, dn as requestHeartbeatNow, dt as resolveOutboundTarget, x as agentCommand } from "./subagent-registry-DEdqc42m.js";
18
18
  import { d as updateSessionStore } from "./sessions-CJXnZVjR.js";
19
19
  import "./tokens-Csntmwwn.js";
20
20
  import { r as normalizeChannelId } from "./plugins-CwSlLxM8.js";
@@ -98,7 +98,7 @@ import "./onboard-helpers-_pit1NZW.js";
98
98
  import "./prompt-style-DwCXob2h.js";
99
99
  import "./pairing-labels-D1HDboV2.js";
100
100
  import "./pi-tools.policy-De00gPXt.js";
101
- import { c as parseMessageWithAttachments, l as formatForLog, r as registerApnsToken, s as normalizeRpcAttachmentsToChatAttachments } from "./push-apns-CVRC-O3Q.js";
101
+ import { c as parseMessageWithAttachments, l as formatForLog, r as registerApnsToken, s as normalizeRpcAttachmentsToChatAttachments } from "./push-apns-6u2NUzOH.js";
102
102
  import { randomUUID } from "node:crypto";
103
103
 
104
104
  //#region src/gateway/server-node-events.ts
@@ -1,4 +1,4 @@
1
- import { dt as createPluginLoaderLogger, ft as loadSymiPlugins } from "./reply-DcyKvFor.js";
1
+ import { dt as createPluginLoaderLogger, ft as loadSymiPlugins } from "./reply-dzRBlsmK.js";
2
2
  import { t as createSubsystemLogger } from "./subsystem-D9vIQve0.js";
3
3
  import { D as resolveDefaultAgentWorkspaceDir, c as resolveAgentWorkspaceDir, l as resolveDefaultAgentId } from "./agent-scope-CgUHAtCo.js";
4
4
  import { i as loadConfig } from "./config-CHwyw6l5.js";
@@ -1,6 +1,6 @@
1
1
  import { u as resolveGatewayPort } from "./paths-Cqn-zk3M.js";
2
2
  import { B as theme, k as info, z as isRich } from "./utils-B-0b9bGM.js";
3
- import { B as summarizeRestartSentinel, Jt as sha256HexPrefix, _t as formatUsageReportLines, a as buildChannelSummary, gt as loadProviderUsageSummary, h as listAgentsForGateway, m as classifySessionKey, o as buildChannelAccountSnapshot, pr as lookupContextTokens, s as formatChannelAllowFrom, wr as peekSystemEvents, x as resolveSessionModelRef, z as readRestartSentinel } from "./reply-DcyKvFor.js";
3
+ import { B as summarizeRestartSentinel, Jt as sha256HexPrefix, _t as formatUsageReportLines, a as buildChannelSummary, gt as loadProviderUsageSummary, h as listAgentsForGateway, m as classifySessionKey, o as buildChannelAccountSnapshot, pr as lookupContextTokens, s as formatChannelAllowFrom, wr as peekSystemEvents, x as resolveSessionModelRef, z as readRestartSentinel } from "./reply-dzRBlsmK.js";
4
4
  import { S as parseAgentSessionKey } from "./session-key-DCt45XZa.js";
5
5
  import { t as resolveSymiPackageRoot } from "./symi-root-CrGJbkzf.js";
6
6
  import { n as runExec } from "./exec-CWkblSrI.js";
@@ -28,7 +28,7 @@ import { t as formatRuntimeStatusWithDetails } from "./runtime-status-CR9445g5.j
28
28
  import { t as readLastGatewayErrorLine } from "./diagnostics-BAMlsVVX.js";
29
29
  import { t as renderTable } from "./table-BTgkRafz.js";
30
30
  import { a as resolveGatewayProbeAuth$1, c as probeGateway, t as runSecurityAudit } from "./audit-CrITRV6w.js";
31
- import { a as resolveHeartbeatSummaryForAgent, t as formatHealthChannelLines } from "./health-BPOuBmYt.js";
31
+ import { a as resolveHeartbeatSummaryForAgent, t as formatHealthChannelLines } from "./health-CJ7Y6Rln.js";
32
32
  import { g as resolveUpdateChannelDisplay, i as formatGitInstallLabel, m as normalizeUpdateChannel, t as checkUpdateStatus } from "./update-check-CtckACbb.js";
33
33
  import { t as resolveNodeService } from "./node-service-Cxz4e-Qd.js";
34
34
  import { n as redactSecrets, t as formatGatewayAuthUsed } from "./format-yQZNwAF2.js";
@@ -1,7 +1,7 @@
1
1
  import { o as createSubsystemLogger } from "./entry.js";
2
2
  import { D as resolveDefaultAgentWorkspaceDir, c as resolveAgentWorkspaceDir, l as resolveDefaultAgentId } from "./agent-scope-D-jRCY0d.js";
3
3
  import { i as loadConfig } from "./config-DHBLS1Hl.js";
4
- import { m as loadSymiPlugins, p as createPluginLoaderLogger } from "./subagent-registry-CVQOC9Jw.js";
4
+ import { m as loadSymiPlugins, p as createPluginLoaderLogger } from "./subagent-registry-DEdqc42m.js";
5
5
 
6
6
  //#region src/plugins/status.ts
7
7
  const log = createSubsystemLogger("plugins");
@@ -9,7 +9,7 @@ import { c as resolveAgentWorkspaceDir } from "./agent-scope-D-jRCY0d.js";
9
9
  import { t as buildWorkspaceSkillStatus } from "./skills-status-DKXJ-tbi.js";
10
10
  import { H as VERSION, i as loadConfig, o as readConfigFileSnapshot } from "./config-DHBLS1Hl.js";
11
11
  import { n as callGateway, t as buildGatewayConnectionDetails } from "./call-BcE47FtD.js";
12
- import { En as peekSystemEvents, St as summarizeRestartSentinel, cn as buildChannelAccountSnapshot, in as formatUsageReportLines, ln as formatChannelAllowFrom, nt as sha256HexPrefix, rn as loadProviderUsageSummary, sn as buildChannelSummary, xt as readRestartSentinel } from "./subagent-registry-CVQOC9Jw.js";
12
+ import { En as peekSystemEvents, St as summarizeRestartSentinel, cn as buildChannelAccountSnapshot, in as formatUsageReportLines, ln as formatChannelAllowFrom, nt as sha256HexPrefix, rn as loadProviderUsageSummary, sn as buildChannelSummary, xt as readRestartSentinel } from "./subagent-registry-DEdqc42m.js";
13
13
  import { F as resolveMainSessionKey, j as resolveFreshSessionTotalTokens, o as loadSessionStore } from "./sessions-CJXnZVjR.js";
14
14
  import { n as listChannelPlugins } from "./plugins-CwSlLxM8.js";
15
15
  import { o as getTailnetHostname, s as readTailscaleStatusJson } from "./tailscale-CbbvYNVw.js";
@@ -29,7 +29,7 @@ import { t as formatRuntimeStatusWithDetails } from "./runtime-status-hFVEC3wO.j
29
29
  import { t as readLastGatewayErrorLine } from "./diagnostics-CS1ov_hH.js";
30
30
  import { t as renderTable } from "./table-D01d2GuY.js";
31
31
  import { a as resolveGatewayProbeAuth$1, c as probeGateway, t as runSecurityAudit } from "./audit-Byo5jCLN.js";
32
- import { o as resolveHeartbeatSummaryForAgent, t as formatHealthChannelLines } from "./health-DUKLANXu.js";
32
+ import { o as resolveHeartbeatSummaryForAgent, t as formatHealthChannelLines } from "./health-BxPSqsO6.js";
33
33
  import { g as resolveUpdateChannelDisplay, i as formatGitInstallLabel, m as normalizeUpdateChannel, t as checkUpdateStatus } from "./update-check-ZdimP1aU.js";
34
34
  import { t as resolveNodeService } from "./node-service-fcZExd22.js";
35
35
  import { n as redactSecrets, t as formatGatewayAuthUsed } from "./format-DVLB9DNB.js";
@@ -33137,13 +33137,19 @@ function normalizeEvent(event, normalizer) {
33137
33137
  const tc = event.toolCall;
33138
33138
  if (tc.arguments && typeof tc.arguments === "object") {
33139
33139
  const cleanedArgs = normalizer.normalizeToolArgs(tc.arguments);
33140
- return { event: {
33140
+ const patchedEvent = {
33141
33141
  ...event,
33142
33142
  toolCall: {
33143
33143
  ...tc,
33144
33144
  arguments: cleanedArgs
33145
33145
  }
33146
- } };
33146
+ };
33147
+ const partial = patchedEvent.partial;
33148
+ if (partial && typeof partial === "object" && Array.isArray(partial.content)) {
33149
+ const content = partial.content;
33150
+ for (const block of content) if (block.type === "toolCall" && block.id === tc.id) block.arguments = cleanedArgs;
33151
+ }
33152
+ return { event: patchedEvent };
33147
33153
  }
33148
33154
  return { event };
33149
33155
  }
@@ -35609,25 +35615,10 @@ function validateShellCommand(command) {
35609
35615
  //#region src/agents/pi-tools.validate-wrapper.ts
35610
35616
  const log$1 = createSubsystemLogger("agents/tool-validate");
35611
35617
  const EXEC_TOOL_NAMES = new Set(["exec", "bash"]);
35612
- const FILE_TOOL_NAMES = new Set([
35613
- "write",
35614
- "read",
35615
- "edit",
35616
- "patch",
35617
- "file_write",
35618
- "file_edit",
35619
- "write_file",
35620
- "edit_file",
35621
- "create_file"
35622
- ]);
35623
- const FILE_PATH_KEYS = [
35624
- "file_path",
35625
- "path",
35626
- "filePath"
35627
- ];
35618
+ const GEMMA_MODEL_ID = "gemma";
35628
35619
  /**
35629
- * Wrap tools with argument validation. Exec/bash commands and file paths
35630
- * are validated. Other tools pass through unchanged.
35620
+ * Wrap ALL tools with universal string argument sanitization.
35621
+ * Exec/bash tools get additional structural command validation.
35631
35622
  *
35632
35623
  * Call this AFTER tools are created and the model profile is resolved.
35633
35624
  */
@@ -35637,44 +35628,64 @@ function wrapToolsWithArgValidation(tools, profile) {
35637
35628
  return tools;
35638
35629
  }
35639
35630
  const wrapped = tools.map((tool) => wrapToolWithArgValidation(tool));
35640
- const wrappedNames = wrapped.filter((t, i) => t !== tools[i]).map((t) => t.name);
35641
- log$1.debug(`[validate] applied to ${wrappedNames.length} tools: ${wrappedNames.join(",") || "(none matched)"}`);
35631
+ log$1.debug(`[validate] universal sanitizer applied to ${wrapped.length} tools`);
35642
35632
  return wrapped;
35643
35633
  }
35644
35634
  /**
35645
- * Clean a file path by stripping control token fragments.
35646
- * Returns null if the path is irreparably corrupted (empty after cleanup).
35635
+ * Sanitize a single string value: strip control tokens + residual fragments.
35636
+ * Returns the cleaned string, or the original if no changes needed.
35647
35637
  */
35648
- function cleanFilePath(filePath) {
35649
- let cleaned = filePath.replace(/<\|[^|>]*(?:\|>)?/g, "");
35650
- cleaned = cleanResidualTokenFragments(cleaned);
35651
- cleaned = cleaned.trim();
35652
- if (!cleaned || !/[a-zA-Z0-9/._~-]/.test(cleaned)) return {
35653
- valid: false,
35654
- cleaned
35655
- };
35638
+ function sanitizeString(value) {
35639
+ return cleanResidualTokenFragments(stripModelTokensAggressive(value, GEMMA_MODEL_ID));
35640
+ }
35641
+ /**
35642
+ * Check if a string contains control token patterns that need sanitization.
35643
+ * Fast check to avoid unnecessary work on clean strings.
35644
+ */
35645
+ function needsSanitization(value) {
35646
+ return value.includes("<|") || value.includes("|>") || /^[<"|]/.test(value);
35647
+ }
35648
+ /**
35649
+ * Recursively sanitize all string values in a params object.
35650
+ * Returns a new object if any values were changed, or the original if clean.
35651
+ */
35652
+ function sanitizeParams(params) {
35653
+ let changed = false;
35654
+ const cleaned = {};
35655
+ for (const [key, value] of Object.entries(params)) {
35656
+ if (typeof value === "string" && needsSanitization(value)) {
35657
+ const sanitized = sanitizeString(value);
35658
+ if (sanitized !== value) {
35659
+ cleaned[key] = sanitized;
35660
+ changed = true;
35661
+ continue;
35662
+ }
35663
+ }
35664
+ cleaned[key] = value;
35665
+ }
35656
35666
  return {
35657
- valid: true,
35658
- cleaned
35667
+ cleaned,
35668
+ changed
35659
35669
  };
35660
35670
  }
35661
35671
  /**
35662
- * Wrap a single tool with argument validation.
35672
+ * Wrap a single tool with universal argument sanitization.
35663
35673
  */
35664
35674
  function wrapToolWithArgValidation(tool) {
35665
35675
  const toolName = (tool.name ?? "").toLowerCase().trim();
35666
35676
  const isExecTool = EXEC_TOOL_NAMES.has(toolName);
35667
- const isFileTool = FILE_TOOL_NAMES.has(toolName);
35668
- if (!isExecTool && !isFileTool) return tool;
35669
35677
  const originalExecute = tool.execute;
35670
35678
  return {
35671
35679
  ...tool,
35672
35680
  execute(toolCallId, params, ...rest) {
35681
+ const { cleaned, changed } = sanitizeParams(params);
35682
+ if (changed) log$1.debug(`[validate] sanitized args for ${toolName}: ${Object.keys(params).filter((k) => cleaned[k] !== params[k]).join(",")}`);
35683
+ const effectiveParams = changed ? cleaned : params;
35673
35684
  if (isExecTool) {
35674
- const command = params.command ?? params.cmd;
35685
+ const command = effectiveParams.command ?? effectiveParams.cmd;
35675
35686
  if (typeof command !== "string") {
35676
- log$1.debug(`[validate] exec called without string command: keys=${Object.keys(params).join(",")}`);
35677
- return originalExecute.call(tool, toolCallId, params, ...rest);
35687
+ log$1.debug(`[validate] exec called without string command: keys=${Object.keys(effectiveParams).join(",")}`);
35688
+ return originalExecute.call(tool, toolCallId, effectiveParams, ...rest);
35678
35689
  }
35679
35690
  const result = validateShellCommand(command);
35680
35691
  if (!result.valid) {
@@ -35684,22 +35695,12 @@ function wrapToolWithArgValidation(tool) {
35684
35695
  if (result.cleaned !== command) {
35685
35696
  log$1.debug(`[validate] exec command cleaned: raw=${command.slice(0, 80)} → cleaned=${result.cleaned.slice(0, 80)}`);
35686
35697
  return originalExecute.call(tool, toolCallId, {
35687
- ...params,
35698
+ ...effectiveParams,
35688
35699
  command: result.cleaned
35689
35700
  }, ...rest);
35690
35701
  }
35691
- return originalExecute.call(tool, toolCallId, params, ...rest);
35692
35702
  }
35693
- const pathKey = FILE_PATH_KEYS.find((k) => typeof params[k] === "string");
35694
- if (!pathKey) return originalExecute.call(tool, toolCallId, params, ...rest);
35695
- const rawPath = params[pathKey];
35696
- if (!rawPath.includes("<|") && !rawPath.includes("|>") && !/^[<"|]/.test(rawPath)) return originalExecute.call(tool, toolCallId, params, ...rest);
35697
- const pathResult = cleanFilePath(rawPath);
35698
- if (!pathResult.valid) return Promise.resolve({ output: `Error: file path "${rawPath}" contains model control tokens and could not be cleaned. Please provide a clean file path without any <|, |>, or XML-like tags.` });
35699
- return originalExecute.call(tool, toolCallId, {
35700
- ...params,
35701
- [pathKey]: pathResult.cleaned
35702
- }, ...rest);
35703
+ return originalExecute.call(tool, toolCallId, effectiveParams, ...rest);
35703
35704
  }
35704
35705
  };
35705
35706
  }
@@ -53025,7 +53026,7 @@ function isVoiceChannelType(type) {
53025
53026
  function createDefaultDeps() {
53026
53027
  return {
53027
53028
  sendMessageWhatsApp: async (...args) => {
53028
- const { sendMessageWhatsApp } = await import("./web-ZnFT5LP9.js");
53029
+ const { sendMessageWhatsApp } = await import("./web-DUi3cu-p.js");
53029
53030
  return await sendMessageWhatsApp(...args);
53030
53031
  },
53031
53032
  sendMessageTelegram: async (...args) => {
@@ -68339,7 +68340,7 @@ function loadWebLoginQr() {
68339
68340
  return webLoginQrPromise;
68340
68341
  }
68341
68342
  function loadWebChannel() {
68342
- webChannelPromise ??= import("./web-ZnFT5LP9.js");
68343
+ webChannelPromise ??= import("./web-DUi3cu-p.js");
68343
68344
  return webChannelPromise;
68344
68345
  }
68345
68346
  function loadWhatsAppActions() {