@symerian/symi 2.6.41 → 2.6.42

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 (152) hide show
  1. package/dist/{agents-B4RNdKQ3.js → agents-DDRDszOI.js} +4 -4
  2. package/dist/{agents.config-CG2klYOg.js → agents.config-BEVb1Pyx.js} +1 -1
  3. package/dist/{agents.config-CA31c0kN.js → agents.config-BKCY6F2A.js} +1 -1
  4. package/dist/{audio-preflight-K-s65jbB.js → audio-preflight-COaFw917.js} +4 -4
  5. package/dist/{auth-choice-CCGIgXvF.js → auth-choice-BbzReh6k.js} +1 -1
  6. package/dist/{auth-choice-CiMf3Pjp.js → auth-choice-D2xXwBeN.js} +1 -1
  7. package/dist/{banner-BNsB_A87.js → banner-DqqRwplt.js} +1 -1
  8. package/dist/build-info.json +3 -3
  9. package/dist/bundled/boot-md/handler.js +6 -6
  10. package/dist/bundled/session-memory/handler.js +6 -6
  11. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  12. package/dist/{channel-options-BMQlkUDX.js → channel-options-DQcpDVCx.js} +1 -1
  13. package/dist/{channel-options-pAH4A-xX.js → channel-options-DcazVJQf.js} +1 -1
  14. package/dist/{channel-web-Dwuj48T5.js → channel-web-u5yMYO4j.js} +1 -1
  15. package/dist/{channels-cli-rmDzxb0W.js → channels-cli-Bog4Kn3X.js} +4 -4
  16. package/dist/{channels-cli-CuExxB0U.js → channels-cli-C3iJE8eg.js} +4 -4
  17. package/dist/{chrome-BYOhnxTr.js → chrome-CbA-qnhp.js} +7 -7
  18. package/dist/{cli-BPGZalMg.js → cli-QybdZdE7.js} +1 -1
  19. package/dist/{cli-Mcq2pPI0.js → cli-eBtEEHLK.js} +1 -1
  20. package/dist/{command-registry-BoEw2RzH.js → command-registry-BWnZSpbL.js} +9 -9
  21. package/dist/{completion-cli-CE9Xqlyx.js → completion-cli-BhJFXaVU.js} +1 -1
  22. package/dist/{completion-cli-CQVZGJPg.js → completion-cli-CUKm7Hb6.js} +2 -2
  23. package/dist/{config-cli-BucNvr-c.js → config-cli-B796xZBe.js} +1 -1
  24. package/dist/{config-cli-mU_ckD4l.js → config-cli-CjnQyv45.js} +1 -1
  25. package/dist/{configure-CDOF87Fk.js → configure-D3wIQ0yI.js} +3 -3
  26. package/dist/{configure-CxnBcN95.js → configure-DUqT7Dyn.js} +3 -3
  27. package/dist/{deliver-C1HRkzPJ.js → deliver-C7NePF9Z.js} +1 -1
  28. package/dist/{doctor-completion-CoftKlUX.js → doctor-completion-D3oUNFQM.js} +1 -1
  29. package/dist/{doctor-completion-CHF_TwGQ.js → doctor-completion-DBE1IVKj.js} +1 -1
  30. package/dist/entry.js +1 -1
  31. package/dist/extensionAPI.js +1 -1
  32. package/dist/{gateway-cli-SNaqDM7f.js → gateway-cli-BguO9yV4.js} +11 -10
  33. package/dist/{gateway-cli-G7fiXsQ6.js → gateway-cli-Dc1RT_b9.js} +11 -10
  34. package/dist/{glass-ui-ws-CF0__vuO.js → glass-ui-ws-D0UYleBF.js} +7 -7
  35. package/dist/{glass-ui-ws-he25wGFt.js → glass-ui-ws-DoIZyE9O.js} +7 -7
  36. package/dist/{health-en2N_Kqc.js → health-D3w4YMlC.js} +1 -1
  37. package/dist/{health-q7706M36.js → health-cVvZdeDu.js} +1 -1
  38. package/dist/{hooks-cli-ChQbBpyb.js → hooks-cli-DZIbjfOA.js} +2 -2
  39. package/dist/{hooks-cli-C4rVaLzZ.js → hooks-cli-te5hzOAB.js} +2 -2
  40. package/dist/{image-CbyTdMd5.js → image-C3ugMkb5.js} +1 -1
  41. package/dist/index.js +6 -6
  42. package/dist/llm-slug-generator.js +6 -6
  43. package/dist/{models-DOTpfa7b.js → models-BCfPhQ4m.js} +2 -2
  44. package/dist/{models-cli-CBl45f7R.js → models-cli-BFAtjNIF.js} +2 -2
  45. package/dist/{models-cli-MJAY_Wg4.js → models-cli-Cj2CwbPw.js} +3 -3
  46. package/dist/{onboard-Bx02XPb1.js → onboard-BMq8qc1m.js} +2 -2
  47. package/dist/{onboard-DQdGJ1lE.js → onboard-VcdBF5TB.js} +2 -2
  48. package/dist/{onboard-channels-Ct2eNYUC.js → onboard-channels-B5wgcffj.js} +1 -1
  49. package/dist/{onboard-channels-Bp89ZT6Q.js → onboard-channels-CiOun4k1.js} +1 -1
  50. package/dist/{onboarding-DxUcsrKV.js → onboarding-CGNpTyg2.js} +3 -3
  51. package/dist/{onboarding-Dnn_0VTy.js → onboarding-Dp7p6zKa.js} +3 -3
  52. package/dist/{onboarding.finalize-Dwr-jEtL.js → onboarding.finalize-B6DOu8vp.js} +5 -5
  53. package/dist/{onboarding.finalize-1kzzMLFM.js → onboarding.finalize-CrsE5P43.js} +6 -6
  54. package/dist/{pi-embedded-BfEg6Wwb.js → pi-embedded-DQe8vBwU.js} +40 -3
  55. package/dist/{pi-embedded-helpers-GaCyI2oH.js → pi-embedded-helpers-BgRcgoC9.js} +4 -4
  56. package/dist/{plugin-registry-BMFEJ4FA.js → plugin-registry-BzIbwU3K.js} +1 -1
  57. package/dist/{plugin-registry-wAQeBSeD.js → plugin-registry-D3TUplW8.js} +1 -1
  58. package/dist/plugin-sdk/agents/pi-embedded-runner/long-task-prompt.d.ts +5 -0
  59. package/dist/plugin-sdk/{channel-web-Ba27v-Om.js → channel-web-B6m8UOCl.js} +1 -1
  60. package/dist/plugin-sdk/index.js +2 -2
  61. package/dist/plugin-sdk/{reply-Bok_WQGW.js → reply-CGoJQT_s.js} +40 -3
  62. package/dist/plugin-sdk/{web-BoOAa0Xn.js → web-CJjSOTnI.js} +2 -2
  63. package/dist/{plugins-cli-DoJbbST7.js → plugins-cli-BD1Jb2Ml.js} +2 -2
  64. package/dist/{plugins-cli-B36YKKla.js → plugins-cli-DFyRjAtJ.js} +2 -2
  65. package/dist/{program-context-Y4KnAKNT.js → program-context-45vPEw2G.js} +17 -17
  66. package/dist/{program-4f7W2RMs.js → program-qGm2M9PG.js} +7 -7
  67. package/dist/{prompt-select-styled-D0sLJ4TD.js → prompt-select-styled-DRIS9jSv.js} +4 -4
  68. package/dist/{prompt-select-styled-Dql_0SI0.js → prompt-select-styled-DRraJGwA.js} +4 -4
  69. package/dist/{provider-auth-helpers-GSv3namf.js → provider-auth-helpers-BNOWsjW5.js} +1 -1
  70. package/dist/{provider-auth-helpers-CJbHC_mv.js → provider-auth-helpers-BREVjR7R.js} +1 -1
  71. package/dist/{push-apns-sxB8QxSj.js → push-apns-CObVeJLC.js} +1 -1
  72. package/dist/{push-apns-giplY7u-.js → push-apns-CYC70eKy.js} +1 -1
  73. package/dist/{pw-ai-pQoxTh-a.js → pw-ai--LDjnyuN.js} +1 -1
  74. package/dist/{register.agent-vd2BSsyE.js → register.agent-DRrHvYcz.js} +5 -5
  75. package/dist/{register.agent-_2tVQLMK.js → register.agent-DzzY8jON.js} +6 -6
  76. package/dist/{register.configure-D-XV6_Nb.js → register.configure-BxtTIFTa.js} +6 -6
  77. package/dist/{register.configure-BVKwTrz8.js → register.configure-DlXkwkNR.js} +6 -6
  78. package/dist/{register.maintenance-XySU31jf.js → register.maintenance-CXLXouZV.js} +7 -7
  79. package/dist/{register.maintenance-BqYR2fop.js → register.maintenance-LEf8Q_5p.js} +8 -8
  80. package/dist/{register.message-CCfWNWs3.js → register.message-C4ifV9vG.js} +2 -2
  81. package/dist/{register.message-DOyREWdG.js → register.message-DsPa-xHV.js} +2 -2
  82. package/dist/{register.onboard-zmF-euog.js → register.onboard-CrY4PxLP.js} +4 -4
  83. package/dist/{register.onboard-Dy_D_uMj.js → register.onboard-DLRPa_4B.js} +4 -4
  84. package/dist/{register.setup-cE7gPp2m.js → register.setup-By37g1vN.js} +4 -4
  85. package/dist/{register.setup-DiGPa1Fw.js → register.setup-fBG_dJfi.js} +4 -4
  86. package/dist/{register.status-health-sessions-DWKL1rkz.js → register.status-health-sessions-Ckw86-gn.js} +3 -3
  87. package/dist/{register.status-health-sessions-ksv1WnIs.js → register.status-health-sessions-DG7KGnD0.js} +3 -3
  88. package/dist/{register.subclis-Crt_IYK0.js → register.subclis-C_xKLugM.js} +9 -9
  89. package/dist/{reply-CjYJHt_H.js → reply-DyjXROKp.js} +40 -3
  90. package/dist/{run-main-bOlPbL7t.js → run-main-Cg3ecTbO.js} +14 -14
  91. package/dist/{runner-B0AbN8wV.js → runner-cJ3m-bxK.js} +1 -1
  92. package/dist/{server-methods-CiwWwj6K.js → server-methods-CW8eFTGD.js} +7 -7
  93. package/dist/{server-methods-VimYvcpY.js → server-methods-CWcLut3F.js} +7 -7
  94. package/dist/{server-node-events-CHmLiFNV.js → server-node-events-C2h9OPo7.js} +2 -2
  95. package/dist/{server-node-events-DYC45lKC.js → server-node-events-CDB0u8PP.js} +2 -2
  96. package/dist/{status-CA5wJHMj.js → status-B2Qt-5kL.js} +1 -1
  97. package/dist/{status-Dt_MXoNa.js → status-CMx3GAax.js} +1 -1
  98. package/dist/{status-DxhtJtzE.js → status-DfPfMVNZ.js} +2 -2
  99. package/dist/{status-DEpM69Pd.js → status-ZPW5EACm.js} +2 -2
  100. package/dist/{subagent-registry-BPwn3Qm7.js → subagent-registry-DQHg3jUV.js} +40 -3
  101. package/dist/{unified-runner-CVkyzT1I.js → unified-runner-DvOFqcrw.js} +54 -17
  102. package/dist/{update-cli-Dh_dfprI.js → update-cli-DBasZeVl.js} +8 -8
  103. package/dist/{update-cli-Dv4c5Gup.js → update-cli-Df9rh_aN.js} +7 -7
  104. package/dist/{update-runner-MMFI1UZ0.js → update-runner-BRKFzAwV.js} +1 -1
  105. package/dist/{update-runner-CG_kbbGR.js → update-runner-DVa6cMqp.js} +1 -1
  106. package/dist/{web-CJk-lv93.js → web-CGh5tw__.js} +1 -1
  107. package/dist/{web-BUc-ts5b.js → web-Cw3bFAiP.js} +6 -6
  108. package/dist/{web-DCBOD-Vj.js → web-Dd05xbUr.js} +1 -1
  109. package/dist/{web-CfVd3Mhp.js → web-KiuDkd0x.js} +2 -2
  110. package/extensions/bluebubbles/package.json +1 -1
  111. package/extensions/copilot-proxy/package.json +1 -1
  112. package/extensions/diagnostics-otel/package.json +1 -1
  113. package/extensions/discord/package.json +1 -1
  114. package/extensions/feishu/package.json +1 -1
  115. package/extensions/google-antigravity-auth/package.json +1 -1
  116. package/extensions/google-gemini-cli-auth/package.json +1 -1
  117. package/extensions/googlechat/package.json +1 -1
  118. package/extensions/imessage/package.json +1 -1
  119. package/extensions/irc/package.json +1 -1
  120. package/extensions/learning-loop/package.json +1 -1
  121. package/extensions/line/package.json +1 -1
  122. package/extensions/llm-task/package.json +1 -1
  123. package/extensions/matrix/CHANGELOG.md +6 -0
  124. package/extensions/matrix/package.json +1 -1
  125. package/extensions/mattermost/package.json +1 -1
  126. package/extensions/memory-core/package.json +1 -1
  127. package/extensions/memory-lancedb/package.json +1 -1
  128. package/extensions/minimax-portal-auth/package.json +1 -1
  129. package/extensions/msteams/CHANGELOG.md +6 -0
  130. package/extensions/msteams/package.json +1 -1
  131. package/extensions/nextcloud-talk/package.json +1 -1
  132. package/extensions/nostr/CHANGELOG.md +6 -0
  133. package/extensions/nostr/package.json +1 -1
  134. package/extensions/open-prose/package.json +1 -1
  135. package/extensions/outlook/package.json +1 -1
  136. package/extensions/pipeline/package.json +1 -1
  137. package/extensions/signal/package.json +1 -1
  138. package/extensions/slack/package.json +1 -1
  139. package/extensions/telegram/package.json +1 -1
  140. package/extensions/tlon/package.json +1 -1
  141. package/extensions/twitch/CHANGELOG.md +6 -0
  142. package/extensions/twitch/package.json +1 -1
  143. package/extensions/voice-call/CHANGELOG.md +6 -0
  144. package/extensions/voice-call/package.json +1 -1
  145. package/extensions/whatsapp/package.json +1 -1
  146. package/extensions/zalo/CHANGELOG.md +6 -0
  147. package/extensions/zalo/package.json +1 -1
  148. package/extensions/zalouser/CHANGELOG.md +6 -0
  149. package/extensions/zalouser/package.json +1 -1
  150. package/package.json +1 -1
  151. package/skills/long-task/SKILL.md +57 -0
  152. package/skills/long-task/scripts/detach-task.sh +58 -0
@@ -14,7 +14,7 @@ import "./client-T3qcxXru.js";
14
14
  import "./call-DKi-hnaF.js";
15
15
  import "./message-channel-C9dERklz.js";
16
16
  import "./pairing-token-Byh6drgn.js";
17
- import "./subagent-registry-BPwn3Qm7.js";
17
+ import "./subagent-registry-DQHg3jUV.js";
18
18
  import "./sessions-Cfa6JEB3.js";
19
19
  import "./tokens-Csntmwwn.js";
20
20
  import "./plugins-CwSlLxM8.js";
@@ -102,9 +102,9 @@ import { t as ensureSymiCliOnPath } from "./path-env-Bic_wXs9.js";
102
102
  import "./catalog-DLQFKucJ.js";
103
103
  import "./note-DDecZomM.js";
104
104
  import "./plugin-auto-enable-D6ENR3Xg.js";
105
- import { t as ensurePluginRegistryLoaded } from "./plugin-registry-BMFEJ4FA.js";
105
+ import { t as ensurePluginRegistryLoaded } from "./plugin-registry-BzIbwU3K.js";
106
106
  import { t as assertSupportedRuntime } from "./runtime-guard-D7waq_Ho.js";
107
- import { t as emitCliBanner } from "./banner-BNsB_A87.js";
107
+ import { t as emitCliBanner } from "./banner-DqqRwplt.js";
108
108
  import "./doctor-config-flow-DhAYwhNB.js";
109
109
  import { n as ensureConfigReady } from "./config-guard-B1skCv1C.js";
110
110
  import process$1 from "node:process";
@@ -119,7 +119,7 @@ const routeHealth = {
119
119
  const verbose = getVerboseFlag(argv, { includeDebug: true });
120
120
  const timeoutMs = getPositiveIntFlagValue(argv, "--timeout");
121
121
  if (timeoutMs === null) return false;
122
- const { healthCommand } = await import("./health-q7706M36.js").then((n) => n.i);
122
+ const { healthCommand } = await import("./health-cVvZdeDu.js").then((n) => n.i);
123
123
  await healthCommand({
124
124
  json,
125
125
  timeoutMs,
@@ -139,7 +139,7 @@ const routeStatus = {
139
139
  const verbose = getVerboseFlag(argv, { includeDebug: true });
140
140
  const timeoutMs = getPositiveIntFlagValue(argv, "--timeout");
141
141
  if (timeoutMs === null) return false;
142
- const { statusCommand } = await import("./status-DxhtJtzE.js").then((n) => n.t);
142
+ const { statusCommand } = await import("./status-DfPfMVNZ.js").then((n) => n.t);
143
143
  await statusCommand({
144
144
  json,
145
145
  deep,
@@ -173,7 +173,7 @@ const routeAgentsList = {
173
173
  run: async (argv) => {
174
174
  const json = hasFlag(argv, "--json");
175
175
  const bindings = hasFlag(argv, "--bindings");
176
- const { agentsListCommand } = await import("./agents-B4RNdKQ3.js").then((n) => n.t);
176
+ const { agentsListCommand } = await import("./agents-DDRDszOI.js").then((n) => n.t);
177
177
  await agentsListCommand({
178
178
  json,
179
179
  bindings
@@ -244,7 +244,7 @@ const routes = [
244
244
  const pathArg = getCommandPositionals(argv)[2];
245
245
  if (!pathArg) return false;
246
246
  const json = hasFlag(argv, "--json");
247
- const { runConfigGet } = await import("./config-cli-BucNvr-c.js");
247
+ const { runConfigGet } = await import("./config-cli-B796xZBe.js");
248
248
  await runConfigGet({
249
249
  path: pathArg,
250
250
  json
@@ -257,7 +257,7 @@ const routes = [
257
257
  run: async (argv) => {
258
258
  const pathArg = getCommandPositionals(argv)[2];
259
259
  if (!pathArg) return false;
260
- const { runConfigUnset } = await import("./config-cli-BucNvr-c.js");
260
+ const { runConfigUnset } = await import("./config-cli-B796xZBe.js");
261
261
  await runConfigUnset({ path: pathArg });
262
262
  return true;
263
263
  }
@@ -271,7 +271,7 @@ const routes = [
271
271
  const local = hasFlag(argv, "--local");
272
272
  const json = hasFlag(argv, "--json");
273
273
  const plain = hasFlag(argv, "--plain");
274
- const { modelsListCommand } = await import("./models-DOTpfa7b.js").then((n) => n.t);
274
+ const { modelsListCommand } = await import("./models-BCfPhQ4m.js").then((n) => n.t);
275
275
  await modelsListCommand({
276
276
  all,
277
277
  local,
@@ -302,7 +302,7 @@ const routes = [
302
302
  const plain = hasFlag(argv, "--plain");
303
303
  const check = hasFlag(argv, "--check");
304
304
  const probe = hasFlag(argv, "--probe");
305
- const { modelsStatusCommand } = await import("./models-DOTpfa7b.js").then((n) => n.t);
305
+ const { modelsStatusCommand } = await import("./models-BCfPhQ4m.js").then((n) => n.t);
306
306
  await modelsStatusCommand({
307
307
  json,
308
308
  plain,
@@ -380,7 +380,7 @@ async function runCli(argv = process$1.argv) {
380
380
  assertSupportedRuntime();
381
381
  if (await tryRouteCli(normalizedArgv)) return;
382
382
  enableConsoleCapture();
383
- const { buildProgram } = await import("./program-4f7W2RMs.js");
383
+ const { buildProgram } = await import("./program-qGm2M9PG.js");
384
384
  const program = buildProgram();
385
385
  installUnhandledRejectionHandler();
386
386
  process$1.on("uncaughtException", (error) => {
@@ -412,10 +412,10 @@ async function runCli(argv = process$1.argv) {
412
412
  const { getProgramContext } = await import("./program-context-CqzR_m-7.js").then((n) => n.n);
413
413
  const ctx = getProgramContext(program);
414
414
  if (ctx) {
415
- const { registerCoreCliByName } = await import("./command-registry-BoEw2RzH.js").then((n) => n.t);
415
+ const { registerCoreCliByName } = await import("./command-registry-BWnZSpbL.js").then((n) => n.t);
416
416
  await registerCoreCliByName(program, ctx, primary, parseArgv);
417
417
  }
418
- const { registerSubCliByName } = await import("./register.subclis-Crt_IYK0.js").then((n) => n.a);
418
+ const { registerSubCliByName } = await import("./register.subclis-C_xKLugM.js").then((n) => n.a);
419
419
  await registerSubCliByName(program, primary);
420
420
  }
421
421
  const hasBuiltinPrimary = primary !== null && program.commands.some((command) => command.name() === primary);
@@ -424,7 +424,7 @@ async function runCli(argv = process$1.argv) {
424
424
  primary,
425
425
  hasBuiltinPrimary
426
426
  })) {
427
- const { registerPluginCliCommands } = await import("./cli-Mcq2pPI0.js");
427
+ const { registerPluginCliCommands } = await import("./cli-eBtEEHLK.js");
428
428
  const { loadConfig } = await import("./config-BNTB6qj8.js").then((n) => n.t);
429
429
  registerPluginCliCommands(program, loadConfig());
430
430
  }
@@ -4,7 +4,7 @@ import { A as normalizeGoogleModelId, B as resolveApiKeyForProvider, C as normal
4
4
  import { d as DEFAULT_IMESSAGE_ATTACHMENT_ROOTS, f as isInboundPathAllowed, m as resolveIMessageAttachmentRoots, n as loadConfig, p as mergeInboundPathRoots } from "./config-B6OxYMgn.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-CbyTdMd5.js";
7
+ import { S as ensureSymiModelsJson, t as describeImageWithModel } from "./image-C3ugMkb5.js";
8
8
  import { n as collectProviderApiKeysForExecution, r as executeWithApiKeyRotation, t as parseGeminiAuth } from "./gemini-auth-BkLFtndu.js";
9
9
  import { n as fetchWithTimeout } from "./fetch-timeout-Cj6kcyGt.js";
10
10
  import { i as fetchRemoteMedia, n as getDefaultMediaLocalRoots, o as fetchWithSsrFGuard, r as MediaFetchError } from "./local-roots-Se92wAN5.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-CjYJHt_H.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-DyjXROKp.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-CfOu9uZi.js";
39
39
  import { t as resolveChannelDefaultAccountId } from "./helpers-DnjQ73f_.js";
40
40
  import { t as buildChannelAccountSnapshot } from "./status-klsFDD3M.js";
41
41
  import { o as isNodeCommandAllowed, s as resolveNodeCommandAllowlist } from "./audit-DB9YkTVX.js";
42
- import { n as getStatusSummary } from "./status-DEpM69Pd.js";
43
- import { s as setHeartbeatsEnabled } from "./health-en2N_Kqc.js";
42
+ import { n as getStatusSummary } from "./status-ZPW5EACm.js";
43
+ import { s as setHeartbeatsEnabled } from "./health-D3w4YMlC.js";
44
44
  import { m as normalizeUpdateChannel } from "./update-check-7EzEjSzb.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-sxB8QxSj.js";
46
- import { a as pruneAgentConfig, i as loadAgentIdentity, r as findAgentEntryIndex, t as applyAgentConfig } from "./agents.config-CG2klYOg.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-CObVeJLC.js";
46
+ import { a as pruneAgentConfig, i as loadAgentIdentity, r as findAgentEntryIndex, t as applyAgentConfig } from "./agents.config-BEVb1Pyx.js";
47
47
  import { t as resolveSystemRunCommand } from "./system-run-command-B_qw8CXP.js";
48
48
  import { t as installSkill } from "./skills-install-CWVdJkLn.js";
49
- import { t as runGatewayUpdate } from "./update-runner-MMFI1UZ0.js";
49
+ import { t as runGatewayUpdate } from "./update-runner-BRKFzAwV.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";
@@ -6944,7 +6944,7 @@ const nodeHandlers = {
6944
6944
  const p = params;
6945
6945
  const payloadJSON = typeof p.payloadJSON === "string" ? p.payloadJSON : p.payload !== void 0 ? JSON.stringify(p.payload) : null;
6946
6946
  await respondUnavailableOnThrow(respond, async () => {
6947
- const { handleNodeEvent } = await import("./server-node-events-DYC45lKC.js");
6947
+ const { handleNodeEvent } = await import("./server-node-events-CDB0u8PP.js");
6948
6948
  const nodeId = client?.connect?.device?.id ?? client?.connect?.client?.id ?? "node";
6949
6949
  await handleNodeEvent({
6950
6950
  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-BPwn3Qm7.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-DQHg3jUV.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-Cfa6JEB3.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-Cgi3TwWN.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-BjI_Yyr5.js";
40
- import { r as getStatusSummary } from "./status-DxhtJtzE.js";
41
- import { c as setHeartbeatsEnabled } from "./health-q7706M36.js";
40
+ import { r as getStatusSummary } from "./status-DfPfMVNZ.js";
41
+ import { c as setHeartbeatsEnabled } from "./health-cVvZdeDu.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-giplY7u-.js";
44
- import { a as pruneAgentConfig, i as loadAgentIdentity, r as findAgentEntryIndex, t as applyAgentConfig } from "./agents.config-CA31c0kN.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-CYC70eKy.js";
44
+ import { a as pruneAgentConfig, i as loadAgentIdentity, r as findAgentEntryIndex, t as applyAgentConfig } from "./agents.config-BKCY6F2A.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-CG_kbbGR.js";
47
+ import { t as runGatewayUpdate } from "./update-runner-DVa6cMqp.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";
@@ -6942,7 +6942,7 @@ const nodeHandlers = {
6942
6942
  const p = params;
6943
6943
  const payloadJSON = typeof p.payloadJSON === "string" ? p.payloadJSON : p.payload !== void 0 ? JSON.stringify(p.payload) : null;
6944
6944
  await respondUnavailableOnThrow(respond, async () => {
6945
- const { handleNodeEvent } = await import("./server-node-events-CHmLiFNV.js");
6945
+ const { handleNodeEvent } = await import("./server-node-events-C2h9OPo7.js");
6946
6946
  const nodeId = client?.connect?.device?.id ?? client?.connect?.client?.id ?? "node";
6947
6947
  await handleNodeEvent({
6948
6948
  deps: context.deps,
@@ -15,7 +15,7 @@ import "./client-T3qcxXru.js";
15
15
  import "./call-DKi-hnaF.js";
16
16
  import "./message-channel-C9dERklz.js";
17
17
  import "./pairing-token-Byh6drgn.js";
18
- import { Cn as enqueueSystemEvent, T as createOutboundSendDeps, dn as requestHeartbeatNow, dt as resolveOutboundTarget, x as agentCommand } from "./subagent-registry-BPwn3Qm7.js";
18
+ import { Cn as enqueueSystemEvent, T as createOutboundSendDeps, dn as requestHeartbeatNow, dt as resolveOutboundTarget, x as agentCommand } from "./subagent-registry-DQHg3jUV.js";
19
19
  import { d as updateSessionStore } from "./sessions-Cfa6JEB3.js";
20
20
  import "./tokens-Csntmwwn.js";
21
21
  import { r as normalizeChannelId } from "./plugins-CwSlLxM8.js";
@@ -99,7 +99,7 @@ import "./onboard-helpers-BBtPmJEe.js";
99
99
  import "./prompt-style-DwCXob2h.js";
100
100
  import "./pairing-labels-D1HDboV2.js";
101
101
  import "./pi-tools.policy-DxNwL7Dl.js";
102
- import { c as parseMessageWithAttachments, l as formatForLog, r as registerApnsToken, s as normalizeRpcAttachmentsToChatAttachments } from "./push-apns-giplY7u-.js";
102
+ import { c as parseMessageWithAttachments, l as formatForLog, r as registerApnsToken, s as normalizeRpcAttachmentsToChatAttachments } from "./push-apns-CYC70eKy.js";
103
103
  import { randomUUID } from "node:crypto";
104
104
 
105
105
  //#region src/gateway/server-node-events.ts
@@ -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-CjYJHt_H.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-DyjXROKp.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";
@@ -103,7 +103,7 @@ import "./pi-tools.policy-DRWb_Cax.js";
103
103
  import "./control-service-BYKXzY4f.js";
104
104
  import "./stagger-CvFURHzt.js";
105
105
  import "./channel-selection-V2xDgw16.js";
106
- import { c as parseMessageWithAttachments, l as formatForLog, r as registerApnsToken, s as normalizeRpcAttachmentsToChatAttachments } from "./push-apns-sxB8QxSj.js";
106
+ import { c as parseMessageWithAttachments, l as formatForLog, r as registerApnsToken, s as normalizeRpcAttachmentsToChatAttachments } from "./push-apns-CObVeJLC.js";
107
107
  import { randomUUID } from "node:crypto";
108
108
 
109
109
  //#region src/gateway/server-node-events.ts
@@ -1,4 +1,4 @@
1
- import { dt as createPluginLoaderLogger, ft as loadSymiPlugins } from "./reply-CjYJHt_H.js";
1
+ import { dt as createPluginLoaderLogger, ft as loadSymiPlugins } from "./reply-DyjXROKp.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-Dz95lSBW.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-BNTB6qj8.js";
4
- import { m as loadSymiPlugins, p as createPluginLoaderLogger } from "./subagent-registry-BPwn3Qm7.js";
4
+ import { m as loadSymiPlugins, p as createPluginLoaderLogger } from "./subagent-registry-DQHg3jUV.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-BNTB6qj8.js";
11
11
  import { n as callGateway, t as buildGatewayConnectionDetails } from "./call-DKi-hnaF.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-BPwn3Qm7.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-DQHg3jUV.js";
13
13
  import { F as resolveMainSessionKey, j as resolveFreshSessionTotalTokens, o as loadSessionStore } from "./sessions-Cfa6JEB3.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-BjI_Yyr5.js";
32
- import { o as resolveHeartbeatSummaryForAgent, t as formatHealthChannelLines } from "./health-q7706M36.js";
32
+ import { o as resolveHeartbeatSummaryForAgent, t as formatHealthChannelLines } from "./health-cVvZdeDu.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";
@@ -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-CjYJHt_H.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-DyjXROKp.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-D6c3G7my.j
28
28
  import { t as readLastGatewayErrorLine } from "./diagnostics-BRwihzJG.js";
29
29
  import { t as renderTable } from "./table-BKlH0YlA.js";
30
30
  import { a as resolveGatewayProbeAuth$1, c as probeGateway, t as runSecurityAudit } from "./audit-DB9YkTVX.js";
31
- import { a as resolveHeartbeatSummaryForAgent, t as formatHealthChannelLines } from "./health-en2N_Kqc.js";
31
+ import { a as resolveHeartbeatSummaryForAgent, t as formatHealthChannelLines } from "./health-D3w4YMlC.js";
32
32
  import { g as resolveUpdateChannelDisplay, i as formatGitInstallLabel, m as normalizeUpdateChannel, t as checkUpdateStatus } from "./update-check-7EzEjSzb.js";
33
33
  import { t as resolveNodeService } from "./node-service-CD47Qpf1.js";
34
34
  import { n as redactSecrets, t as formatGatewayAuthUsed } from "./format-B0yJsjEo.js";
@@ -38847,6 +38847,38 @@ function getHistoryLimitFromSessionKey(sessionKey, config) {
38847
38847
  */
38848
38848
  const getDmHistoryLimitFromSessionKey = getHistoryLimitFromSessionKey;
38849
38849
 
38850
+ //#endregion
38851
+ //#region src/agents/pi-embedded-runner/long-task-prompt.ts
38852
+ const SCRIPT_REL_PATH = "skills/long-task/scripts/detach-task.sh";
38853
+ let cachedScriptPath;
38854
+ async function resolveDetachScriptPath(params) {
38855
+ if (cachedScriptPath !== void 0) return cachedScriptPath;
38856
+ const packageRoot = await resolveSymiPackageRoot({
38857
+ cwd: params.cwd,
38858
+ argv1: params.argv1,
38859
+ moduleUrl: params.moduleUrl
38860
+ });
38861
+ if (!packageRoot) {
38862
+ cachedScriptPath = null;
38863
+ return null;
38864
+ }
38865
+ const candidate = path.join(packageRoot, SCRIPT_REL_PATH);
38866
+ cachedScriptPath = fs.existsSync(candidate) ? candidate : null;
38867
+ return cachedScriptPath;
38868
+ }
38869
+ async function buildLongTaskPromptSuffix(params) {
38870
+ const scriptPath = await resolveDetachScriptPath(params);
38871
+ if (!scriptPath) return "";
38872
+ return "\n\n" + [
38873
+ "LONG-RUNNING TASK PATTERN:",
38874
+ "- For any task that may exceed 15 minutes (deep nmap scans of /24 or larger, full brute-force sweeps, long builds, exhaustive enumeration): detach from the agent turn. Do NOT foreground-block the exec tool for the full duration; the agent turn will hit its timeout and SIGTERM the process mid-run.",
38875
+ `- Detach pattern: exec \`${scriptPath} <task-id> <workdir> <command...>\`. The script spawns under setsid+nohup, writes PID / cmd / started / status / log files in the workdir. Use the agent workspace as the workdir.`,
38876
+ "- Immediately after detaching, respond to the user with: task id, PID, log file path, your ETA estimate, and that a cron monitor has been scheduled.",
38877
+ "- Register a cron monitor using the `cron` tool with action=add. Schedule every 2-3 minutes. Job prompt must include the task-id, PID, log path, and status path so the future turn has enough context. Example job prompt: \"Check if PID <pid> is alive (kill -0). If alive: tail -n 20 <log>, post one-sentence progress update. If not alive: read <status> and tail <log>, post a final summary, then call cron tool with action=remove id=<this-cron-id>.\"",
38878
+ "- When the monitor turn observes status=complete, it MUST call the cron tool with action=remove to clean up its own job. Do not leave stale monitors running."
38879
+ ].join("\n");
38880
+ }
38881
+
38850
38882
  //#endregion
38851
38883
  //#region src/agents/pi-embedded-runner/runs.ts
38852
38884
  const ACTIVE_EMBEDDED_RUNS = /* @__PURE__ */ new Map();
@@ -39900,7 +39932,12 @@ async function runEmbeddedAttempt(params) {
39900
39932
  const profileModelKey = params.modelId ?? "";
39901
39933
  const modelProfile = resolveModelProfile(profileModelKey, params.config?.models?.profiles);
39902
39934
  log$5.debug(`[profile] resolved: modelId=${profileModelKey} → profile=${modelProfile.label} validateToolArgs=${modelProfile.filters?.validateToolArgs ?? false}`);
39903
- const systemPromptText = createSystemPromptOverride(appendPrompt + (modelProfile.promptAdditions.length > 0 ? "\n\n" + modelProfile.promptAdditions.join("\n") : ""))();
39935
+ const profilePromptSuffix = modelProfile.promptAdditions.length > 0 ? "\n\n" + modelProfile.promptAdditions.join("\n") : "";
39936
+ const systemPromptText = createSystemPromptOverride(appendPrompt + await buildLongTaskPromptSuffix({
39937
+ argv1: process.argv[1],
39938
+ cwd: process.cwd(),
39939
+ moduleUrl: import.meta.url
39940
+ }) + profilePromptSuffix)();
39904
39941
  const sessionLock = await acquireSessionWriteLock({
39905
39942
  sessionFile: params.sessionFile,
39906
39943
  maxHoldMs: resolveSessionLockMaxHoldFromTimeout({ timeoutMs: params.timeoutMs })
@@ -53331,7 +53368,7 @@ function isVoiceChannelType(type) {
53331
53368
  function createDefaultDeps() {
53332
53369
  return {
53333
53370
  sendMessageWhatsApp: async (...args) => {
53334
- const { sendMessageWhatsApp } = await import("./web-DCBOD-Vj.js");
53371
+ const { sendMessageWhatsApp } = await import("./web-Dd05xbUr.js");
53335
53372
  return await sendMessageWhatsApp(...args);
53336
53373
  },
53337
53374
  sendMessageTelegram: async (...args) => {
@@ -68645,7 +68682,7 @@ function loadWebLoginQr() {
68645
68682
  return webLoginQrPromise;
68646
68683
  }
68647
68684
  function loadWebChannel() {
68648
- webChannelPromise ??= import("./web-DCBOD-Vj.js");
68685
+ webChannelPromise ??= import("./web-Dd05xbUr.js");
68649
68686
  return webChannelPromise;
68650
68687
  }
68651
68688
  function loadWhatsAppActions() {
@@ -10,10 +10,10 @@ import { $ as resolveAuthProfileDisplayLabel, B as resolveApiKeyForProvider, C a
10
10
  import { n as formatCliCommand, r as resolveCliName, t as isTruthyEnvValue } from "./env-BDXYbTKj.js";
11
11
  import { a as saveJsonFile, i as loadJsonFile } from "./github-copilot-token-cCYzSU9h.js";
12
12
  import { t as parseBooleanValue$1 } from "./boolean-CE7i9tBR.js";
13
- import { $ as normalizeDeliveryContext, A as isTransientHttpError, At as DEFAULT_UPLOAD_DIR, Bt as expandToolGroups, C as isContextOverflowError, Ct as resolveGroupSessionKey, D as isRateLimitAssistantError, Dt as registerBrowserRoutes, E as isLikelyContextOverflowError, Et as createBrowserRouteContext, F as resolveSandboxContext, Ft as resolveSandboxConfigForAgent, G as updateLastRoute, Gt as compileGlobPatterns, H as loadSessionStore, Ht as normalizeToolName, I as resolveSandboxRuntimeStatus, It as applyOwnerOnlyToolPolicy, J as isCacheEnabled, Jt as ensureSessionHeader, K as updateSessionStore, Kt as matchesAnyGlobPattern, L as extractDeliveryInfo, Lt as buildPluginToolGroups, M as parseImageSizeError, Mt as getBridgeAuthForPort, N as sanitizeUserFacingText, Nt as ensureBrowserControlAuth, O as isRawApiErrorPayload, Ot as resolveBrowserConfig, P as ensureSandboxWorkspaceForSession, Pt as resolveBrowserControlAuth, Q as mergeDeliveryContext, R as parseSessionThreadInfo, Rt as collectExplicitAllowlist, S as isCompactionFailureError, St as deriveSessionMetaPatch, T as isFailoverErrorMessage, Tt as resolveSessionLockMaxHoldFromTimeout, U as readSessionUpdatedAt, Ut as resolveToolProfilePolicy, V as resolveAndPersistSessionFile, Vt as mergeAlsoAllowPolicy, W as recordSessionMetaFromInbound, Wt as stripPluginOnlyAllowlist, X as deliveryContextFromSession, Xt as resolveBootstrapTotalMaxChars, Y as resolveCacheTtlMs$1, Yt as resolveBootstrapMaxChars, Z as deliveryContextKey, Zt as sanitizeGoogleTurnOrdering, _ as formatRawAssistantErrorForUi, _t as resolveFreshSessionTotalTokens, a as isMessagingToolDuplicateNormalized, at as extractToolCallNames, b as isBillingAssistantError, bt as resolveExplicitAgentSessionKey, c as extractToolCallsFromAssistant, ct as hasInterSessionUserProvenance, d as isAntigravityClaude, dt as evaluateSessionFreshness, et as normalizeSessionDeliveryFields, f as isGoogleModelApi, ft as resolveChannelResetConfig, g as formatBillingErrorMessage, gt as DEFAULT_RESET_TRIGGERS, h as formatAssistantErrorText, ht as resolveThreadFlag, it as countToolResults, j as parseImageDimensionError, jt as resolveExistingPathsWithinRoot, k as isTimeoutErrorMessage, kt as resolveProfile, l as extractToolResultId, lt as normalizeInputProvenance, m as classifyFailoverReason, mt as resolveSessionResetType, n as validateGeminiTurns, nt as archiveSessionTranscripts, o as normalizeTextForComparison, ot as INPUT_PROVENANCE_KIND_VALUES, p as BILLING_ERROR_USER_MESSAGE, pt as resolveSessionResetPolicy, q as updateSessionStoreEntry, qt as buildBootstrapContextFiles, r as pickFallbackThinkingLevel, rt as capArrayByJsonBytes, s as sanitizeSessionMessagesImages, st as applyInputProvenanceToUserMessage, t as validateAnthropicTurns, tt as normalizeAccountId$3, u as downgradeOpenAIReasoningBlocks, ut as resolveSessionKey, v as getApiErrorPayloadFingerprint, vt as canonicalizeMainSessionAlias, w as isFailoverAssistantError, wt as acquireSessionWriteLock, x as isCloudCodeAssistFormatError, xt as resolveMainSessionKey, y as isAuthAssistantError, z as appendAssistantMessageToSessionTranscript, zt as expandPolicyWithPluginGroups } from "./pi-embedded-helpers-GaCyI2oH.js";
13
+ import { $ as normalizeDeliveryContext, A as isTransientHttpError, At as DEFAULT_UPLOAD_DIR, Bt as expandToolGroups, C as isContextOverflowError, Ct as resolveGroupSessionKey, D as isRateLimitAssistantError, Dt as registerBrowserRoutes, E as isLikelyContextOverflowError, Et as createBrowserRouteContext, F as resolveSandboxContext, Ft as resolveSandboxConfigForAgent, G as updateLastRoute, Gt as compileGlobPatterns, H as loadSessionStore, Ht as normalizeToolName, I as resolveSandboxRuntimeStatus, It as applyOwnerOnlyToolPolicy, J as isCacheEnabled, Jt as ensureSessionHeader, K as updateSessionStore, Kt as matchesAnyGlobPattern, L as extractDeliveryInfo, Lt as buildPluginToolGroups, M as parseImageSizeError, Mt as getBridgeAuthForPort, N as sanitizeUserFacingText, Nt as ensureBrowserControlAuth, O as isRawApiErrorPayload, Ot as resolveBrowserConfig, P as ensureSandboxWorkspaceForSession, Pt as resolveBrowserControlAuth, Q as mergeDeliveryContext, R as parseSessionThreadInfo, Rt as collectExplicitAllowlist, S as isCompactionFailureError, St as deriveSessionMetaPatch, T as isFailoverErrorMessage, Tt as resolveSessionLockMaxHoldFromTimeout, U as readSessionUpdatedAt, Ut as resolveToolProfilePolicy, V as resolveAndPersistSessionFile, Vt as mergeAlsoAllowPolicy, W as recordSessionMetaFromInbound, Wt as stripPluginOnlyAllowlist, X as deliveryContextFromSession, Xt as resolveBootstrapTotalMaxChars, Y as resolveCacheTtlMs$1, Yt as resolveBootstrapMaxChars, Z as deliveryContextKey, Zt as sanitizeGoogleTurnOrdering, _ as formatRawAssistantErrorForUi, _t as resolveFreshSessionTotalTokens, a as isMessagingToolDuplicateNormalized, at as extractToolCallNames, b as isBillingAssistantError, bt as resolveExplicitAgentSessionKey, c as extractToolCallsFromAssistant, ct as hasInterSessionUserProvenance, d as isAntigravityClaude, dt as evaluateSessionFreshness, et as normalizeSessionDeliveryFields, f as isGoogleModelApi, ft as resolveChannelResetConfig, g as formatBillingErrorMessage, gt as DEFAULT_RESET_TRIGGERS, h as formatAssistantErrorText, ht as resolveThreadFlag, it as countToolResults, j as parseImageDimensionError, jt as resolveExistingPathsWithinRoot, k as isTimeoutErrorMessage, kt as resolveProfile, l as extractToolResultId, lt as normalizeInputProvenance, m as classifyFailoverReason, mt as resolveSessionResetType, n as validateGeminiTurns, nt as archiveSessionTranscripts, o as normalizeTextForComparison, ot as INPUT_PROVENANCE_KIND_VALUES, p as BILLING_ERROR_USER_MESSAGE, pt as resolveSessionResetPolicy, q as updateSessionStoreEntry, qt as buildBootstrapContextFiles, r as pickFallbackThinkingLevel, rt as capArrayByJsonBytes, s as sanitizeSessionMessagesImages, st as applyInputProvenanceToUserMessage, t as validateAnthropicTurns, tt as normalizeAccountId$3, u as downgradeOpenAIReasoningBlocks, ut as resolveSessionKey, v as getApiErrorPayloadFingerprint, vt as canonicalizeMainSessionAlias, w as isFailoverAssistantError, wt as acquireSessionWriteLock, x as isCloudCodeAssistFormatError, xt as resolveMainSessionKey, y as isAuthAssistantError, z as appendAssistantMessageToSessionTranscript, zt as expandPolicyWithPluginGroups } from "./pi-embedded-helpers-BgRcgoC9.js";
14
14
  import { A as VERSION, C as getConfigValueAtPath, D as isSafeExecutableValue, E as unsetConfigValueAtPath, O as DEFAULT_SUBAGENT_MAX_SPAWN_DEPTH, S as unsetConfigOverride, T as setConfigValueAtPath, _ as parseDurationMs, a as writeConfigFile, b as resetConfigOverrides, c as TELEGRAM_COMMAND_NAME_PATTERN, f as isInboundPathAllowed, g as normalizeScpRemoteHost, h as resolveIMessageRemoteAttachmentRoots, i as resolveConfigSnapshotHash, k as resolveAgentMaxConcurrent, l as normalizeTelegramCommandName, m as resolveIMessageAttachmentRoots, n as loadConfig, o as validateConfigObjectWithPlugins, r as readConfigFileSnapshot, u as resolveTelegramCustomCommands, v as validateJsonSchemaValue, w as parseConfigPath, x as setConfigOverride, y as getConfigOverrides } from "./config-B6OxYMgn.js";
15
15
  import { a as applyTestPluginDefaults, c as resolveMemorySlotDecision, d as isDangerousHostEnvVarName, i as safeStatSync, n as discoverSymiPlugins, o as normalizePluginsConfig, r as isPathInside, s as resolveEnableState, t as loadPluginManifestRegistry, u as isPathInsideWithRealpath } from "./manifest-registry-yb7sAlu4.js";
16
- import { C as rawDataToString, O as DEFAULT_AI_SNAPSHOT_MAX_CHARS, T as isSecureWebSocketUrl, x as ensureChromeExtensionRelayServer } from "./chrome-BYOhnxTr.js";
16
+ import { C as rawDataToString, O as DEFAULT_AI_SNAPSHOT_MAX_CHARS, T as isSecureWebSocketUrl, x as ensureChromeExtensionRelayServer } from "./chrome-CbA-qnhp.js";
17
17
  import { c as assertSandboxPath, d as resolveSandboxedMediaSource, f as applySkillEnvOverrides, i as resolveSkillsPromptForRun, l as resolveSandboxInputPath, n as buildWorkspaceSkillSnapshot, p as applySkillEnvOverridesFromSnapshot, r as loadWorkspaceSkillEntries, s as assertMediaNotDataUrl } from "./skills-Bs0AW1g3.js";
18
18
  import { n as formatErrorMessage, r as formatUncaughtError } from "./errors-XIsvXeC-.js";
19
19
  import { c as detectMime, d as imageMimeFromFormat, f as isAudioFileName, g as MAX_IMAGE_BYTES, i as getImageMetadata, l as extensionForMime, p as isGifMedia, s as resizeToJpeg, v as mediaKindFromMime } from "./image-ops-C7CauEK8.js";
@@ -31,10 +31,10 @@ import { a as resolveSlackWebClientOptions, c as buildSlackBlocksFallbackText, i
31
31
  import { $ as fetchChannelPermissionsDiscord, A as unpinMessageDiscord, B as listScheduledEventsDiscord, C as editMessageDiscord, Ct as resolveTimestampMs, D as pinMessageDiscord, Dt as normalizeChannelSlug, E as listThreadsDiscord, Et as buildChannelKeyCandidates, F as fetchMemberInfoDiscord, G as uploadStickerDiscord, H as timeoutMemberDiscord, I as fetchRoleInfoDiscord, J as editChannelDiscord, K as createChannelDiscord, L as fetchVoiceStatusDiscord, M as banMemberDiscord, N as createScheduledEventDiscord, O as readMessagesDiscord, Ot as resolveChannelEntryMatchWithFallback, P as fetchChannelInfoDiscord, Q as stripUndefinedFields, R as kickMemberDiscord, S as deleteMessageDiscord, St as resolveDiscordSystemLocation, T as listPinsDiscord, Tt as applyChannelMatchMeta, U as listGuildEmojisDiscord, V as removeRoleDiscord, W as uploadEmojiDiscord, X as removeChannelPermissionDiscord, Y as moveChannelDiscord, Z as setChannelPermissionDiscord, _ as sendPollDiscord, _t as resolveDiscordShouldRequireMention, a as removeReactionDiscord, at as resolveDiscordChannelId, b as sendWebhookMessageDiscord, bt as formatDiscordReactionEmoji, c as formatDiscordComponentEventText, ct as allowListMatches$1, d as parseDiscordModalCustomId, dt as normalizeDiscordSlug, et as hasAnyGuildPermissionDiscord, f as parseDiscordModalCustomIdForCarbon, ft as resolveDiscordAllowListMatch, g as sendMessageDiscord, gt as resolveDiscordOwnerAllowFrom, h as resolveDiscordModalEntry, ht as resolveDiscordMemberAccessState, i as removeOwnReactionsDiscord, it as parseDiscordTarget, j as addRoleDiscord, k as searchMessagesDiscord, l as parseDiscordComponentCustomId, lt as isDiscordGroupAllowedByPolicy, m as resolveDiscordComponentEntry, mt as resolveDiscordGuildEntry, n as fetchReactionsDiscord, nt as createDiscordClient, o as sendDiscordComponentMessage, ot as listDiscordDirectoryGroupsLive, p as readDiscordComponentSpec, pt as resolveDiscordChannelConfigWithFallback, q as deleteChannelDiscord, r as reactMessageDiscord, rt as createDiscordRestClient, s as createDiscordFormModal, st as listDiscordDirectoryPeersLive, tt as chunkDiscordTextWithMode, u as parseDiscordComponentCustomIdForCarbon, ut as normalizeDiscordAllowList, v as sendStickerDiscord, vt as resolveGroupDmAllow, w as fetchMessageDiscord, wt as fetchDiscord, x as createThreadDiscord, xt as formatDiscordUserTag, y as sendVoiceMessageDiscord, yt as shouldEmitDiscordReactionNotification, z as listGuildChannelsDiscord } from "./send-BNnv8GtF.js";
32
32
  import { t as emitSessionTranscriptUpdate } from "./transcript-events-BBh3Gsrx.js";
33
33
  import { i as resolveImageSanitizationLimits, n as sanitizeImageBlocks, r as sanitizeToolResultImages } from "./tool-images-SqqWIT22.js";
34
- import { C as getGlobalHookRunner, S as parseInlineDirectives$1, _ as normalizeTargetForProvider, a as normalizeOutboundPayloadsForJson, b as MEDIA_TOKEN_RE, c as applyReplyThreading, d as isRenderablePayload, f as shouldSuppressMessagingToolReplies, g as normalizeChannelTargetInput, h as buildTargetResolverSignature, i as normalizeOutboundPayloads, l as filterMessagingToolDuplicates, m as resolveReplyToMode, o as normalizeReplyPayloadsForDelivery, p as createReplyToModeFilterForChannel, r as formatOutboundPayloadLog, s as applyReplyTagsToPayload, t as deliverOutboundPayloads, u as filterMessagingToolMediaDuplicates, v as throwIfAborted, w as initializeGlobalHookRunner, x as splitMediaFromOutput, y as parseReplyDirectives } from "./deliver-C1HRkzPJ.js";
34
+ import { C as getGlobalHookRunner, S as parseInlineDirectives$1, _ as normalizeTargetForProvider, a as normalizeOutboundPayloadsForJson, b as MEDIA_TOKEN_RE, c as applyReplyThreading, d as isRenderablePayload, f as shouldSuppressMessagingToolReplies, g as normalizeChannelTargetInput, h as buildTargetResolverSignature, i as normalizeOutboundPayloads, l as filterMessagingToolDuplicates, m as resolveReplyToMode, o as normalizeReplyPayloadsForDelivery, p as createReplyToModeFilterForChannel, r as formatOutboundPayloadLog, s as applyReplyTagsToPayload, t as deliverOutboundPayloads, u as filterMessagingToolMediaDuplicates, v as throwIfAborted, w as initializeGlobalHookRunner, x as splitMediaFromOutput, y as parseReplyDirectives } from "./deliver-C7NePF9Z.js";
35
35
  import { a as logMessageProcessed, c as logWebhookError, d as startDiagnosticHeartbeat, f as stopDiagnosticHeartbeat, i as logLaneEnqueue, l as logWebhookProcessed, m as isDiagnosticsEnabled, o as logMessageQueued, p as emitDiagnosticEvent, r as logLaneDequeue, s as logSessionStateChange, t as diag, u as logWebhookReceived } from "./diagnostic-CQiU0O8b.js";
36
36
  import { r as getDiagnosticSessionState } from "./diagnostic-session-state-Zw87xFym.js";
37
- import { S as ensureSymiModelsJson, _ as stripMinimaxToolCallXml, a as decodeDataUrl, b as stripReasoningTagsFromText, c as extractAssistantText$1, d as extractThinkingFromTaggedText, f as formatReasoningMessage, g as stripDowngradedToolCallText, h as promoteThinkingTagsToBlocks, i as coerceImageModelConfig, l as extractAssistantThinking, m as isAssistantMessage, o as resolveProviderVisionModelFromConfig, p as inferToolMetaFromArgs, r as coerceImageAssistantText, s as minimaxUnderstandImage, u as extractThinkingFromTaggedStream, v as stripThinkingTagsFromText, x as extractTextFromChatContent, y as resolveToolDisplay } from "./image-CbyTdMd5.js";
37
+ import { S as ensureSymiModelsJson, _ as stripMinimaxToolCallXml, a as decodeDataUrl, b as stripReasoningTagsFromText, c as extractAssistantText$1, d as extractThinkingFromTaggedText, f as formatReasoningMessage, g as stripDowngradedToolCallText, h as promoteThinkingTagsToBlocks, i as coerceImageModelConfig, l as extractAssistantThinking, m as isAssistantMessage, o as resolveProviderVisionModelFromConfig, p as inferToolMetaFromArgs, r as coerceImageAssistantText, s as minimaxUnderstandImage, u as extractThinkingFromTaggedStream, v as stripThinkingTagsFromText, x as extractTextFromChatContent, y as resolveToolDisplay } from "./image-C3ugMkb5.js";
38
38
  import { t as ensurePiAuthJsonFromAuthProfiles } from "./pi-auth-json-CCaxCywz.js";
39
39
  import { a as isSilentReplyText, i as isSilentReplyPrefixText, n as SILENT_REPLY_TOKEN, r as SYMIPULSE_TOKEN, t as HEARTBEAT_TOKEN } from "./tokens-W0JzCJJM.js";
40
40
  import { $ as isVoiceCompatibleAudio, A as extractTelegramLocation, B as normalizeAllowFromWithStore$1, C as buildTelegramGroupFrom, D as buildTypingThreadParams, E as buildTelegramThreadParams, F as resolveTelegramMediaPlaceholder, G as formatLocationText, H as firstDefined$1, I as resolveTelegramReplyId, J as readChannelAllowFromStore, K as toLocationContext, L as resolveTelegramStreamMode, M as normalizeForwardedContext, N as resolveTelegramForumThreadId, O as describeReplyTarget, P as resolveTelegramGroupAllowFromContext, Q as listPairingChannels, R as resolveTelegramThreadSpec, S as buildSenderName, T as buildTelegramParentPeer, U as isSenderIdAllowed, V as resolveSenderAllowMatch, W as mergeAllowFromSources, X as upsertChannelPairingRequest, Y as removeChannelAllowFromStoreEntry, Z as getPairingAdapter, _ as resolveTelegramFetch, a as reactMessageTelegram, b as buildGroupLabel, c as sendStickerTelegram, d as wasSentByBot, et as parseTelegramTarget, f as isRecoverableTelegramNetworkError, g as wrapFileReferencesInHtml, h as renderTelegramHtmlText, i as editMessageTelegram, j as hasBotMention, k as expandTextLinks, m as markdownToTelegramHtml, n as createForumTopicTelegram, o as sendMessageTelegram, p as markdownToTelegramChunks, q as addChannelAllowFromStoreEntry, r as deleteMessageTelegram, s as sendPollTelegram, t as buildInlineKeyboard, tt as resolveTelegramTargetChatType, u as resolveTelegramVoiceSend, v as splitTelegramCaption, w as buildTelegramGroupPeerId, x as buildSenderLabel, y as withTelegramApiErrorLogging, z as isSenderAllowed$1 } from "./send-DaBsat3L.js";
@@ -50,7 +50,7 @@ import { n as fetchWithTimeout, t as bindAbortRelay } from "./fetch-timeout-Cj6k
50
50
  import { a as readResponseWithLimit, i as fetchRemoteMedia, n as getDefaultMediaLocalRoots, o as fetchWithSsrFGuard, t as getAgentScopedMediaLocalRoots } from "./local-roots-Se92wAN5.js";
51
51
  import { a as loadWebMedia, i as getDefaultLocalRoots } from "./ir-JAy_3A3B.js";
52
52
  import { _ as resolveNativeCommandsEnabled, a as listChatCommandsForConfig, c as normalizeCommandBody, d as resolveCommandArgMenu, f as serializeCommandArgs, g as isRestartEnabled, h as isNativeCommandsExplicitlyDisabled, i as listChatCommands, l as parseCommandArgs, m as isCommandFlagEnabled, o as listNativeCommandSpecs, p as shouldHandleTextCommands, r as findCommandByNativeName, s as listNativeCommandSpecsForConfig, t as buildCommandTextFromArgs, u as resolveCommandArgChoices, v as resolveNativeSkillsEnabled } from "./commands-registry-BSvi46KZ.js";
53
- import { _ as CLI_OUTPUT_MAX_BUFFER, a as resolveMediaAttachmentLocalRoots, c as loadModelCatalog, d as resolveAttachmentKind, f as buildRandomTempFilePath, g as resolveMediaUnderstandingScope, h as normalizeMediaUnderstandingChatType, i as resolveAutoImageModel, l as modelSupportsVision, m as resolveTimeoutMs$1, n as createMediaAttachmentCache, o as runCapability, p as resolveConcurrency, r as normalizeMediaAttachments, s as findModelInCatalog, t as buildProviderRegistry, v as applyTemplate, y as registerUnhandledRejectionHandler } from "./runner-B0AbN8wV.js";
53
+ import { _ as CLI_OUTPUT_MAX_BUFFER, a as resolveMediaAttachmentLocalRoots, c as loadModelCatalog, d as resolveAttachmentKind, f as buildRandomTempFilePath, g as resolveMediaUnderstandingScope, h as normalizeMediaUnderstandingChatType, i as resolveAutoImageModel, l as modelSupportsVision, m as resolveTimeoutMs$1, n as createMediaAttachmentCache, o as runCapability, p as resolveConcurrency, r as normalizeMediaAttachments, s as findModelInCatalog, t as buildProviderRegistry, v as applyTemplate, y as registerUnhandledRejectionHandler } from "./runner-cJ3m-bxK.js";
54
54
  import { c as getSkillsSnapshotVersion, d as createAsyncLock, f as readJsonFile, i as resolveSkillCommandInvocation, l as pruneExpiredPending, n as listSkillCommandsForAgents, o as getRemoteSkillEligibility, p as writeJsonAtomic, r as listSkillCommandsForWorkspace, s as ensureSkillsWatcher, t as listReservedChatSlashCommandNames, u as resolvePairingPaths } from "./skill-commands-BiPrghRt.js";
55
55
  import { r as normalizeInboundTextNewlines, t as finalizeInboundContext } from "./inbound-context-Dvqh1Tgb.js";
56
56
  import { n as wrapFetchWithAbortSignal, t as resolveFetch } from "./fetch-Dnti0cFs.js";
@@ -81,7 +81,7 @@ import AjvPkg from "ajv";
81
81
  import { CURRENT_SESSION_VERSION, DefaultResourceLoader, SessionManager, SettingsManager, codingTools, createAgentSession, createEditTool, createReadTool, createWriteTool, estimateTokens, generateSummary, readTool } from "@mariozechner/pi-coding-agent";
82
82
  import { createServer } from "node:http";
83
83
  import { ProxyAgent, fetch as fetch$1 } from "undici";
84
- import WebSocket$1, { WebSocket } from "ws";
84
+ import WebSocket, { WebSocket as WebSocket$1 } from "ws";
85
85
  import { Buffer as Buffer$1 } from "node:buffer";
86
86
  import { EdgeTTS } from "node-edge-tts";
87
87
  import { createJiti } from "jiti";
@@ -8782,7 +8782,7 @@ var GatewayClient = class {
8782
8782
  if (fingerprint !== expected) return /* @__PURE__ */ new Error("gateway tls fingerprint mismatch");
8783
8783
  });
8784
8784
  }
8785
- this.ws = new WebSocket(url, wsOptions);
8785
+ this.ws = new WebSocket$1(url, wsOptions);
8786
8786
  this.ws.on("open", () => {
8787
8787
  if (url.startsWith("wss://") && this.opts.tlsFingerprint) {
8788
8788
  const tlsError = this.validateTlsFingerprint();
@@ -9001,7 +9001,7 @@ var GatewayClient = class {
9001
9001
  return null;
9002
9002
  }
9003
9003
  async request(method, params, opts) {
9004
- if (!this.ws || this.ws.readyState !== WebSocket.OPEN) throw new Error("gateway not connected");
9004
+ if (!this.ws || this.ws.readyState !== WebSocket$1.OPEN) throw new Error("gateway not connected");
9005
9005
  const id = randomUUID();
9006
9006
  const frame = {
9007
9007
  type: "req",
@@ -10267,7 +10267,7 @@ async function routeReply(params) {
10267
10267
  const resolvedReplyToId = replyToId ?? (channelId === "slack" && threadId != null && threadId !== "" ? String(threadId) : void 0);
10268
10268
  const resolvedThreadId = channelId === "slack" ? null : threadId ?? null;
10269
10269
  try {
10270
- const { deliverOutboundPayloads } = await import("./deliver-C1HRkzPJ.js").then((n) => n.n);
10270
+ const { deliverOutboundPayloads } = await import("./deliver-C7NePF9Z.js").then((n) => n.n);
10271
10271
  return {
10272
10272
  ok: true,
10273
10273
  messageId: (await deliverOutboundPayloads({
@@ -43708,7 +43708,7 @@ async function deliverSessionMaintenanceWarning(params) {
43708
43708
  return;
43709
43709
  }
43710
43710
  try {
43711
- const { deliverOutboundPayloads } = await import("./deliver-C1HRkzPJ.js").then((n) => n.n);
43711
+ const { deliverOutboundPayloads } = await import("./deliver-C7NePF9Z.js").then((n) => n.n);
43712
43712
  await deliverOutboundPayloads({
43713
43713
  cfg: params.cfg,
43714
43714
  channel,
@@ -47154,7 +47154,7 @@ async function describeStickerImage(params) {
47154
47154
  logVerbose(`telegram: describing sticker with ${provider}/${model}`);
47155
47155
  try {
47156
47156
  const buffer = await fs$1.readFile(imagePath);
47157
- const { describeImageWithModel } = await import("./image-CbyTdMd5.js").then((n) => n.n);
47157
+ const { describeImageWithModel } = await import("./image-C3ugMkb5.js").then((n) => n.n);
47158
47158
  return (await describeImageWithModel({
47159
47159
  buffer,
47160
47160
  fileName: "sticker.webp",
@@ -49816,7 +49816,7 @@ async function preflightDiscordMessage(params) {
49816
49816
  let preflightTranscript;
49817
49817
  const hasAudioAttachment = message.attachments?.some((att) => att.contentType?.startsWith("audio/"));
49818
49818
  if (!isDirectMessage && shouldRequireMention && hasAudioAttachment && !baseText && mentionRegexes.length > 0) try {
49819
- const { transcribeFirstAudio } = await import("./audio-preflight-K-s65jbB.js");
49819
+ const { transcribeFirstAudio } = await import("./audio-preflight-COaFw917.js");
49820
49820
  const audioPaths = message.attachments?.filter((att) => att.contentType?.startsWith("audio/")).map((att) => att.url) ?? [];
49821
49821
  if (audioPaths.length > 0) preflightTranscript = await transcribeFirstAudio({
49822
49822
  ctx: {
@@ -53822,7 +53822,7 @@ function isVoiceChannelType(type) {
53822
53822
  function createDefaultDeps() {
53823
53823
  return {
53824
53824
  sendMessageWhatsApp: async (...args) => {
53825
- const { sendMessageWhatsApp } = await import("./web-BUc-ts5b.js");
53825
+ const { sendMessageWhatsApp } = await import("./web-Cw3bFAiP.js");
53826
53826
  return await sendMessageWhatsApp(...args);
53827
53827
  },
53828
53828
  sendMessageTelegram: async (...args) => {
@@ -56727,7 +56727,7 @@ function createDiscordGatewayPlugin(params) {
56727
56727
  super(options);
56728
56728
  }
56729
56729
  createWebSocket(url) {
56730
- return new WebSocket$1(url, { agent });
56730
+ return new WebSocket(url, { agent });
56731
56731
  }
56732
56732
  }
56733
56733
  return new ProxyGatewayPlugin();
@@ -66945,7 +66945,7 @@ const buildTelegramMessageContext = async ({ primaryCtx, allMedia, storeAllowFro
66945
66945
  const hasAudio = allMedia.some((media) => media.contentType?.startsWith("audio/"));
66946
66946
  let preflightTranscript;
66947
66947
  if (isGroup && requireMention && hasAudio && !hasUserText && mentionRegexes.length > 0) try {
66948
- const { transcribeFirstAudio } = await import("./audio-preflight-K-s65jbB.js");
66948
+ const { transcribeFirstAudio } = await import("./audio-preflight-COaFw917.js");
66949
66949
  preflightTranscript = await transcribeFirstAudio({
66950
66950
  ctx: {
66951
66951
  MediaPaths: allMedia.length > 0 ? allMedia.map((m) => m.path) : void 0,
@@ -69102,7 +69102,7 @@ function loadWebLoginQr() {
69102
69102
  return webLoginQrPromise;
69103
69103
  }
69104
69104
  function loadWebChannel() {
69105
- webChannelPromise ??= import("./web-BUc-ts5b.js");
69105
+ webChannelPromise ??= import("./web-Cw3bFAiP.js");
69106
69106
  return webChannelPromise;
69107
69107
  }
69108
69108
  function loadWhatsAppActions() {
@@ -76301,6 +76301,38 @@ function isRunnerAbortError(err) {
76301
76301
  return ("message" in err && typeof err.message === "string" ? err.message.toLowerCase() : "").includes("aborted");
76302
76302
  }
76303
76303
 
76304
+ //#endregion
76305
+ //#region src/agents/pi-embedded-runner/long-task-prompt.ts
76306
+ const SCRIPT_REL_PATH = "skills/long-task/scripts/detach-task.sh";
76307
+ let cachedScriptPath;
76308
+ async function resolveDetachScriptPath(params) {
76309
+ if (cachedScriptPath !== void 0) return cachedScriptPath;
76310
+ const packageRoot = await resolveSymiPackageRoot({
76311
+ cwd: params.cwd,
76312
+ argv1: params.argv1,
76313
+ moduleUrl: params.moduleUrl
76314
+ });
76315
+ if (!packageRoot) {
76316
+ cachedScriptPath = null;
76317
+ return null;
76318
+ }
76319
+ const candidate = path.join(packageRoot, SCRIPT_REL_PATH);
76320
+ cachedScriptPath = fs.existsSync(candidate) ? candidate : null;
76321
+ return cachedScriptPath;
76322
+ }
76323
+ async function buildLongTaskPromptSuffix(params) {
76324
+ const scriptPath = await resolveDetachScriptPath(params);
76325
+ if (!scriptPath) return "";
76326
+ return "\n\n" + [
76327
+ "LONG-RUNNING TASK PATTERN:",
76328
+ "- For any task that may exceed 15 minutes (deep nmap scans of /24 or larger, full brute-force sweeps, long builds, exhaustive enumeration): detach from the agent turn. Do NOT foreground-block the exec tool for the full duration; the agent turn will hit its timeout and SIGTERM the process mid-run.",
76329
+ `- Detach pattern: exec \`${scriptPath} <task-id> <workdir> <command...>\`. The script spawns under setsid+nohup, writes PID / cmd / started / status / log files in the workdir. Use the agent workspace as the workdir.`,
76330
+ "- Immediately after detaching, respond to the user with: task id, PID, log file path, your ETA estimate, and that a cron monitor has been scheduled.",
76331
+ "- Register a cron monitor using the `cron` tool with action=add. Schedule every 2-3 minutes. Job prompt must include the task-id, PID, log path, and status path so the future turn has enough context. Example job prompt: \"Check if PID <pid> is alive (kill -0). If alive: tail -n 20 <log>, post one-sentence progress update. If not alive: read <status> and tail <log>, post a final summary, then call cron tool with action=remove id=<this-cron-id>.\"",
76332
+ "- When the monitor turn observes status=complete, it MUST call the cron tool with action=remove to clean up its own job. Do not leave stale monitors running."
76333
+ ].join("\n");
76334
+ }
76335
+
76304
76336
  //#endregion
76305
76337
  //#region src/agents/pi-embedded-runner/session-manager-init.ts
76306
76338
  /**
@@ -77107,7 +77139,12 @@ async function runEmbeddedAttempt(params) {
77107
77139
  const profileModelKey = params.modelId ?? "";
77108
77140
  const modelProfile = resolveModelProfile(profileModelKey, params.config?.models?.profiles);
77109
77141
  log$9.debug(`[profile] resolved: modelId=${profileModelKey} → profile=${modelProfile.label} validateToolArgs=${modelProfile.filters?.validateToolArgs ?? false}`);
77110
- const systemPromptText = createSystemPromptOverride(appendPrompt + (modelProfile.promptAdditions.length > 0 ? "\n\n" + modelProfile.promptAdditions.join("\n") : ""))();
77142
+ const profilePromptSuffix = modelProfile.promptAdditions.length > 0 ? "\n\n" + modelProfile.promptAdditions.join("\n") : "";
77143
+ const systemPromptText = createSystemPromptOverride(appendPrompt + await buildLongTaskPromptSuffix({
77144
+ argv1: process.argv[1],
77145
+ cwd: process.cwd(),
77146
+ moduleUrl: import.meta.url
77147
+ }) + profilePromptSuffix)();
77111
77148
  const sessionLock = await acquireSessionWriteLock({
77112
77149
  sessionFile: params.sessionFile,
77113
77150
  maxHoldMs: resolveSessionLockMaxHoldFromTimeout({ timeoutMs: params.timeoutMs })