@symerian/symi 2.9.3 → 2.9.4

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 (157) hide show
  1. package/dist/{agents-D6V_7iZL.js → agents-CMoRbMNW.js} +4 -4
  2. package/dist/{agents.config-BeX0kxT3.js → agents.config-BLuBIvek.js} +1 -1
  3. package/dist/{agents.config-B-NRTvyi.js → agents.config-Ebtya9aN.js} +1 -1
  4. package/dist/{auth-choice-4lzxjIcf.js → auth-choice-C_lflrPV.js} +1 -1
  5. package/dist/{auth-choice-BJQjxe_Y.js → auth-choice-DAMY302C.js} +1 -1
  6. package/dist/{banner-Q3fjWWy3.js → banner-4mmBVDxd.js} +1 -1
  7. package/dist/build-info.json +3 -3
  8. package/dist/bundled/boot-md/handler.js +2 -2
  9. package/dist/bundled/session-memory/handler.js +2 -2
  10. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  11. package/dist/{channel-options-D6U_Dpa2.js → channel-options-CqEImsEx.js} +1 -1
  12. package/dist/{channel-options-CQ0Q0xZr.js → channel-options-lJBshQMV.js} +1 -1
  13. package/dist/{channel-web-D6aolbVC.js → channel-web-CBC2RSBF.js} +1 -1
  14. package/dist/{channels-cli-By4y_t51.js → channels-cli-BqW1HbHG.js} +6 -6
  15. package/dist/{channels-cli-CxuKeNkr.js → channels-cli-CqtSKE5p.js} +6 -6
  16. package/dist/{cli-B1gtEojq.js → cli-B1Dxc2DT.js} +3 -3
  17. package/dist/{cli-41r_BAjv.js → cli-CjgvXavV.js} +3 -3
  18. package/dist/{command-registry-FJWuYmEn.js → command-registry-iESIIBvf.js} +10 -10
  19. package/dist/{completion-cli-DWVW4P54.js → completion-cli-BEddBU3C.js} +2 -2
  20. package/dist/{completion-cli-C20c_vzO.js → completion-cli-euUBlC-J.js} +1 -1
  21. package/dist/{config-cli-CJQ-12f7.js → config-cli-CAl0wtaC.js} +1 -1
  22. package/dist/{config-cli-CLXuCFJc.js → config-cli-DG8UgJ6z.js} +1 -1
  23. package/dist/{configure-I99ztt2Y.js → configure-B3AtbkbP.js} +3 -3
  24. package/dist/{configure-DrIhqYYW.js → configure-CtYsABUS.js} +3 -3
  25. package/dist/{doctor-completion-B4pjrehH.js → doctor-completion-B-Oak4dP.js} +1 -1
  26. package/dist/{doctor-completion-C9A7E6Wb.js → doctor-completion-BGriRzaq.js} +1 -1
  27. package/dist/entry.js +1 -1
  28. package/dist/extensionAPI.js +2 -2
  29. package/dist/{gateway-cli-BByLEck3.js → gateway-cli-CPligm4B.js} +11 -11
  30. package/dist/{gateway-cli-cZpbavO4.js → gateway-cli-CrgMw50H.js} +11 -11
  31. package/dist/{glass-ui-ws-DUHaC6lE.js → glass-ui-ws-BmrBGwq0.js} +9 -9
  32. package/dist/{glass-ui-ws-09XXkYnX.js → glass-ui-ws-JoAL8aXB.js} +9 -9
  33. package/dist/{health-CYHbTw04.js → health-BFlZuHVH.js} +1 -1
  34. package/dist/{health-Bvo3NXZK.js → health-C5cdo2e_.js} +1 -1
  35. package/dist/{hooks-cli-CiFs-0g0.js → hooks-cli-BHOi35KU.js} +4 -4
  36. package/dist/{hooks-cli-BwFW4lKC.js → hooks-cli-DFDzJIQJ.js} +4 -4
  37. package/dist/index.js +8 -8
  38. package/dist/llm-slug-generator.js +2 -2
  39. package/dist/{manager-CB20PmUH.js → manager-Ca7NOWdK.js} +1 -1
  40. package/dist/{manager-BsfrsBPw.js → manager-DNxvT0P-.js} +1 -1
  41. package/dist/{manager-CMB15ft8.js → manager-DlNP6Nui.js} +1 -1
  42. package/dist/{manager-Bj8GFlcZ.js → manager-SbxZtjEc.js} +1 -1
  43. package/dist/{memory-cli-Cuhhh4qN.js → memory-cli-D2LaloPq.js} +3 -3
  44. package/dist/{memory-cli-CoTkaEhh.js → memory-cli-xSpyRUEV.js} +3 -3
  45. package/dist/{models-CdIe1IJX.js → models-C6MaesB8.js} +2 -2
  46. package/dist/{models-cli-CZcMWBL0.js → models-cli-4IVFNhw8.js} +5 -5
  47. package/dist/{models-cli-o07a-fh5.js → models-cli-CjcsH00X.js} +4 -4
  48. package/dist/{onboard-Cjlal6-V.js → onboard-BoXWv3OF.js} +2 -2
  49. package/dist/{onboard-44op-88v.js → onboard-Dk5UFbaj.js} +2 -2
  50. package/dist/{onboard-channels-BseAErC9.js → onboard-channels-BQ-TPkl5.js} +1 -1
  51. package/dist/{onboard-channels-Lt1TlRrb.js → onboard-channels-DSIBGif0.js} +1 -1
  52. package/dist/{onboarding-DYJYybkl.js → onboarding-CvCh0fyS.js} +3 -3
  53. package/dist/{onboarding-DODsq7cg.js → onboarding-p3SCUopW.js} +3 -3
  54. package/dist/{onboarding.finalize-BX-xeFu7.js → onboarding.finalize-CrmmBrzK.js} +7 -7
  55. package/dist/{onboarding.finalize-DhhWr8GR.js → onboarding.finalize-l2qeYvn5.js} +8 -8
  56. package/dist/{pi-embedded-UMBd-Mrj.js → pi-embedded-DaTqseIp.js} +41 -5
  57. package/dist/{plugin-registry-HrZC-Iww.js → plugin-registry-B_IeViDg.js} +1 -1
  58. package/dist/{plugin-registry-Di_isjUm.js → plugin-registry-BmdLxUZd.js} +1 -1
  59. package/dist/plugin-sdk/{channel-web-CzZZsS3O.js → channel-web-DYJYy4et.js} +1 -1
  60. package/dist/plugin-sdk/index.js +3 -3
  61. package/dist/plugin-sdk/{manager-BiRYpsW7.js → manager-Ca0_Buoj.js} +1 -1
  62. package/dist/plugin-sdk/{reply-DYEklKOc.js → reply-Bfy77FPA.js} +41 -5
  63. package/dist/plugin-sdk/{synthesis-CaDiVumM.js → synthesis-D9SmRgqU.js} +2 -2
  64. package/dist/plugin-sdk/{web-DU4xaLZf.js → web-qvuO3y6z.js} +3 -3
  65. package/dist/{plugins-cli-CMz1ww6G.js → plugins-cli-CAp8Hyam.js} +4 -4
  66. package/dist/{plugins-cli-BlBz4J4q.js → plugins-cli-Dhcj3Mah.js} +4 -4
  67. package/dist/{program-dFZ5CYgD.js → program-UlEVhGTo.js} +9 -9
  68. package/dist/{program-context-ByWsh-2T.js → program-context-BFvY5D79.js} +18 -18
  69. package/dist/{prompt-select-styled-nywEyQoQ.js → prompt-select-styled-BehvQU7S.js} +6 -6
  70. package/dist/{prompt-select-styled-BkwnTGjt.js → prompt-select-styled-Bf47U3gY.js} +6 -6
  71. package/dist/{provider-auth-helpers-CQ604vQz.js → provider-auth-helpers-CEstUTnU.js} +1 -1
  72. package/dist/{provider-auth-helpers-CgJE4rvP.js → provider-auth-helpers-l2_9mB3E.js} +1 -1
  73. package/dist/{push-apns-CbjqnCIn.js → push-apns-Be_K61Y3.js} +1 -1
  74. package/dist/{push-apns-CQlSAman.js → push-apns-Cr9FKn9_.js} +1 -1
  75. package/dist/{register.agent-Hw7FS0tf.js → register.agent-DXzkaRw1.js} +8 -8
  76. package/dist/{register.agent-BaLgPcGg.js → register.agent-tfizhRlb.js} +7 -7
  77. package/dist/{register.configure-BC-jW4EY.js → register.configure-CtXnzNAk.js} +8 -8
  78. package/dist/{register.configure-D6bKnyeR.js → register.configure-DsBKnmY3.js} +8 -8
  79. package/dist/{register.maintenance-7LeID6wA.js → register.maintenance-BZJLuSs7.js} +10 -10
  80. package/dist/{register.maintenance-DQ73gAH0.js → register.maintenance-mVD8OA1V.js} +9 -9
  81. package/dist/{register.message-odamuJP5.js → register.message-C7Mfqk6i.js} +4 -4
  82. package/dist/{register.message-D2Ubr7KY.js → register.message-ZHGwfsV9.js} +4 -4
  83. package/dist/{register.onboard-Bv3BjuIZ.js → register.onboard-B0zHMGtr.js} +6 -6
  84. package/dist/{register.onboard-DwYvxoBx.js → register.onboard-bPMjH-cM.js} +6 -6
  85. package/dist/{register.setup-BvNMj7Tn.js → register.setup-aVvT34-g.js} +6 -6
  86. package/dist/{register.setup-B6ylBd_s.js → register.setup-jLBfOyYo.js} +6 -6
  87. package/dist/{register.status-health-sessions-Cr65vOYW.js → register.status-health-sessions-Bbp4B0t_.js} +5 -5
  88. package/dist/{register.status-health-sessions-Bx0oTY_P.js → register.status-health-sessions-Ym9Z__5q.js} +5 -5
  89. package/dist/{register.subclis-BzbNYOC6.js → register.subclis-DHLF7LUE.js} +9 -9
  90. package/dist/{reply-Bymjl4wV.js → reply-DaLBaxTg.js} +40 -4
  91. package/dist/{run-main-BAaL6QjO.js → run-main-i-0RAGWP.js} +17 -17
  92. package/dist/{server-methods-Ds4i0Q2F.js → server-methods-9ygcQLBv.js} +8 -8
  93. package/dist/{server-methods-C4j7W_qQ.js → server-methods-BTBqGPE0.js} +8 -8
  94. package/dist/{server-node-events-tbjGwgHF.js → server-node-events-Dwq8UMWp.js} +4 -4
  95. package/dist/{server-node-events-D0gNq3h6.js → server-node-events-v-YRyTWm.js} +4 -4
  96. package/dist/{status-CGabcN-L.js → status-87Am-dN6.js} +3 -3
  97. package/dist/{status-BdkVcIDX.js → status-BwKYtKTR.js} +1 -1
  98. package/dist/{status-DpVc9DSG.js → status-Cet2zu6k.js} +1 -1
  99. package/dist/{status-BfNSBvnp.js → status-vF06cYz7.js} +3 -3
  100. package/dist/{subagent-registry-0D_yjdW5.js → subagent-registry--ttOPMLH.js} +40 -4
  101. package/dist/{synthesis-Bf2XnlvP.js → synthesis-9GndKT3K.js} +2 -2
  102. package/dist/{synthesis-DFQ_rjEF.js → synthesis-DH0gSv7o.js} +2 -2
  103. package/dist/{synthesis-1f-yGtS7.js → synthesis-JzS-852N.js} +3 -3
  104. package/dist/{synthesis-A2SfvBRN.js → synthesis-aBsVjLIL.js} +3 -3
  105. package/dist/{unified-runner-j_Vn4K8X.js → unified-runner-C0OC_Ay0.js} +41 -5
  106. package/dist/{update-cli-CWMGbbPM.js → update-cli-BWulAC_Y.js} +10 -10
  107. package/dist/{update-cli-B3t4yUU6.js → update-cli-DAP38iFd.js} +9 -9
  108. package/dist/{update-runner-CfzHxbsu.js → update-runner-Bl0Y3ndR.js} +1 -1
  109. package/dist/{update-runner-UfVHKth_.js → update-runner-DV6ov2uA.js} +1 -1
  110. package/dist/{web-BSf9H0_w.js → web-Cl-3dkwx.js} +2 -2
  111. package/dist/{web-DaChMSyM.js → web-DcZB_7Fo.js} +2 -2
  112. package/dist/{web-DIDhNbES.js → web-DhjVLurg.js} +4 -4
  113. package/dist/{web-DCTvbYTy.js → web-K_bPrtFT.js} +3 -3
  114. package/docs/capabilities.md +36 -36
  115. package/extensions/bluebubbles/package.json +1 -1
  116. package/extensions/copilot-proxy/package.json +1 -1
  117. package/extensions/diagnostics-otel/package.json +1 -1
  118. package/extensions/discord/package.json +1 -1
  119. package/extensions/feishu/package.json +1 -1
  120. package/extensions/google-antigravity-auth/package.json +1 -1
  121. package/extensions/google-gemini-cli-auth/package.json +1 -1
  122. package/extensions/googlechat/package.json +1 -1
  123. package/extensions/imessage/package.json +1 -1
  124. package/extensions/irc/package.json +1 -1
  125. package/extensions/learning-loop/package.json +1 -1
  126. package/extensions/line/package.json +1 -1
  127. package/extensions/llm-task/package.json +1 -1
  128. package/extensions/matrix/CHANGELOG.md +6 -0
  129. package/extensions/matrix/package.json +1 -1
  130. package/extensions/mattermost/package.json +1 -1
  131. package/extensions/memory-core/package.json +1 -1
  132. package/extensions/memory-lancedb/package.json +1 -1
  133. package/extensions/minimax-portal-auth/package.json +1 -1
  134. package/extensions/msteams/CHANGELOG.md +6 -0
  135. package/extensions/msteams/package.json +1 -1
  136. package/extensions/nextcloud-talk/package.json +1 -1
  137. package/extensions/nostr/CHANGELOG.md +6 -0
  138. package/extensions/nostr/package.json +1 -1
  139. package/extensions/open-prose/package.json +1 -1
  140. package/extensions/outlook/node_modules/.bin/symi +21 -0
  141. package/extensions/outlook/package.json +1 -1
  142. package/extensions/pipeline/package.json +1 -1
  143. package/extensions/signal/package.json +1 -1
  144. package/extensions/slack/package.json +1 -1
  145. package/extensions/telegram/package.json +1 -1
  146. package/extensions/tlon/package.json +1 -1
  147. package/extensions/twitch/CHANGELOG.md +6 -0
  148. package/extensions/twitch/package.json +1 -1
  149. package/extensions/voice-call/CHANGELOG.md +6 -0
  150. package/extensions/voice-call/package.json +1 -1
  151. package/extensions/whatsapp/package.json +1 -1
  152. package/extensions/zalo/CHANGELOG.md +6 -0
  153. package/extensions/zalo/package.json +1 -1
  154. package/extensions/zalouser/CHANGELOG.md +6 -0
  155. package/extensions/zalouser/package.json +1 -1
  156. package/package.json +5 -1
  157. package/skills/document-generation/SKILL.md +37 -18
@@ -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 readRestartSentinel, S as resolveSessionModelRef, Tr as peekSystemEvents, V as summarizeRestartSentinel, Yt as sha256HexPrefix, _t as loadProviderUsageSummary, a as buildChannelSummary, g as listAgentsForGateway, h as classifySessionKey, mr as lookupContextTokens, o as buildChannelAccountSnapshot, s as formatChannelAllowFrom, vt as formatUsageReportLines } from "./reply-Bymjl4wV.js";
3
+ import { B as readRestartSentinel, S as resolveSessionModelRef, Tr as peekSystemEvents, V as summarizeRestartSentinel, Yt as sha256HexPrefix, _t as loadProviderUsageSummary, a as buildChannelSummary, g as listAgentsForGateway, h as classifySessionKey, mr as lookupContextTokens, o as buildChannelAccountSnapshot, s as formatChannelAllowFrom, vt as formatUsageReportLines } from "./reply-DaLBaxTg.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";
@@ -13,7 +13,7 @@ import { a as inspectPortUsage, s as formatPortDiagnostics } from "./ports-BOmtx
13
13
  import { H as resolveMainSessionKey, R as resolveFreshSessionTotalTokens, o as loadSessionStore } from "./sessions-CVWGQEWu.js";
14
14
  import { n as listChannelPlugins } from "./plugins-DKDeQZF0.js";
15
15
  import { c as resolveStorePath } from "./paths-CyhzMxFA.js";
16
- import { r as getMemorySearchManager } from "./memory-cli-CoTkaEhh.js";
16
+ import { r as getMemorySearchManager } from "./memory-cli-xSpyRUEV.js";
17
17
  import { n as callGateway, t as buildGatewayConnectionDetails } from "./call-BIETyST6.js";
18
18
  import { n as formatTimeAgo } from "./format-relative-CviDPm2s.js";
19
19
  import { n as withProgress } from "./progress-WhkkDU0H.js";
@@ -28,7 +28,7 @@ import { t as formatRuntimeStatusWithDetails } from "./runtime-status-D0P5lDGf.j
28
28
  import { t as readLastGatewayErrorLine } from "./diagnostics-1uBuB9IE.js";
29
29
  import { t as renderTable } from "./table-BWuvjnmY.js";
30
30
  import { a as resolveGatewayProbeAuth$1, c as probeGateway, t as runSecurityAudit } from "./audit-OPWWS900.js";
31
- import { a as resolveHeartbeatSummaryForAgent, t as formatHealthChannelLines } from "./health-CYHbTw04.js";
31
+ import { a as resolveHeartbeatSummaryForAgent, t as formatHealthChannelLines } from "./health-BFlZuHVH.js";
32
32
  import { g as resolveUpdateChannelDisplay, i as formatGitInstallLabel, m as normalizeUpdateChannel, t as checkUpdateStatus } from "./update-check-Bbvpax6u.js";
33
33
  import { t as resolveNodeService } from "./node-service-DxPZ_ZFk.js";
34
34
  import { n as redactSecrets, t as formatGatewayAuthUsed } from "./format-DNqZrSx7.js";
@@ -51,8 +51,8 @@ import { i as resolveImageSanitizationLimits, n as sanitizeImageBlocks, r as san
51
51
  import { a as normalizeElevatedLevel, c as normalizeUsageDisplay, d as supportsXHighThinking, l as normalizeVerboseLevel, n as formatXHighModelHint, o as normalizeReasoningLevel, s as normalizeThinkLevel, t as formatThinkingLevels, u as resolveResponseUsageMode } from "./thinking-8sKPnzpp.js";
52
52
  import { t as ensureSymiModelsJson } from "./models-config-frWb8fDT.js";
53
53
  import { a as resolveAgentIdentity, i as resolveAckReaction, o as resolveEffectiveMessagesConfig, r as resolveResponsePrefixTemplate, s as resolveHumanDelayConfig, t as createReplyPrefixOptions } from "./reply-prefix-BUN71nd5.js";
54
- import { i as resolveMemoryBackendConfig, n as registerMemoryCli, r as getMemorySearchManager } from "./memory-cli-Cuhhh4qN.js";
55
- import { a as resolveMemorySearchConfig, t as MemoryIndexManager } from "./manager-BsfrsBPw.js";
54
+ import { i as resolveMemoryBackendConfig, n as registerMemoryCli, r as getMemorySearchManager } from "./memory-cli-D2LaloPq.js";
55
+ import { a as resolveMemorySearchConfig, t as MemoryIndexManager } from "./manager-DNxvT0P-.js";
56
56
  import { f as runTasksWithConcurrency } from "./internal-C2jxeHS9.js";
57
57
  import { n as retryAsync } from "./retry-C4Q_VPOo.js";
58
58
  import { c as imageResultFromFile, d as readNumberParam, f as readReactionParams, h as readStringParam, l as jsonResult, m as readStringOrNumberParam, n as missingTargetError, o as createActionGate, p as readStringArrayParam, r as unknownTargetError, s as imageResult, t as ambiguousTargetError, u as parseAvailableTags } from "./target-errors-Co0LcWKH.js";
@@ -11983,6 +11983,41 @@ async function executeNodeHostCommand(params) {
11983
11983
 
11984
11984
  //#endregion
11985
11985
  //#region src/agents/bash-tools.exec.ts
11986
+ let cachedSymiNodeModules;
11987
+ /**
11988
+ * Returns the absolute path to Symi's bundled `node_modules` directory, so
11989
+ * gateway-host node scripts can `require()` packages that ship with Symi
11990
+ * (docx / exceljs / pptxgenjs / pdfkit for the document-generation skill,
11991
+ * plus any future bundled npm dep). Cached for the process lifetime.
11992
+ *
11993
+ * Returns null when Symi's package root can't be resolved (development
11994
+ * setups outside a package, broken installs).
11995
+ */
11996
+ function resolveSymiNodeModulesPath() {
11997
+ if (cachedSymiNodeModules !== void 0) return cachedSymiNodeModules;
11998
+ const root = resolveSymiPackageRootSync({});
11999
+ cachedSymiNodeModules = root ? path.join(root, "node_modules") : null;
12000
+ return cachedSymiNodeModules;
12001
+ }
12002
+ /**
12003
+ * Append Symi's bundled node_modules path to NODE_PATH so gateway-host
12004
+ * scripts (run via the `exec` tool with `host: "gateway"`) can resolve
12005
+ * Symi-bundled npm packages from any cwd. Existing NODE_PATH (user
12006
+ * override or test fixture) is preserved by appending, not replacing.
12007
+ */
12008
+ function applySymiNodePath(env) {
12009
+ const symiModules = resolveSymiNodeModulesPath();
12010
+ if (!symiModules) return;
12011
+ const existing = env.NODE_PATH?.trim();
12012
+ if (!existing) {
12013
+ env.NODE_PATH = symiModules;
12014
+ return;
12015
+ }
12016
+ const sep = path.delimiter;
12017
+ const segments = existing.split(sep).filter(Boolean);
12018
+ if (!segments.includes(symiModules)) segments.push(symiModules);
12019
+ env.NODE_PATH = segments.join(sep);
12020
+ }
11986
12021
  function extractScriptTargetFromCommand(command) {
11987
12022
  const raw = command.trim();
11988
12023
  if (!raw) return null;
@@ -12132,6 +12167,7 @@ function createExecTool(defaults) {
12132
12167
  env: process.env,
12133
12168
  timeoutMs: resolveShellEnvFallbackTimeoutMs(process.env)
12134
12169
  }));
12170
+ if (!sandbox && host === "gateway") applySymiNodePath(env);
12135
12171
  if (host === "node" && defaultPathPrepend.length > 0) warnings.push("Warning: tools.exec.pathPrepend is ignored for host=node. Configure PATH on the node host/service instead.");
12136
12172
  else applyPathPrepend(env, defaultPathPrepend);
12137
12173
  if (host === "node") return executeNodeHostCommand({
@@ -54312,7 +54348,7 @@ function isVoiceChannelType(type) {
54312
54348
  function createDefaultDeps() {
54313
54349
  return {
54314
54350
  sendMessageWhatsApp: async (...args) => {
54315
- const { sendMessageWhatsApp } = await import("./web-DCTvbYTy.js");
54351
+ const { sendMessageWhatsApp } = await import("./web-K_bPrtFT.js");
54316
54352
  return await sendMessageWhatsApp(...args);
54317
54353
  },
54318
54354
  sendMessageTelegram: async (...args) => {
@@ -69626,7 +69662,7 @@ function loadWebLoginQr() {
69626
69662
  return webLoginQrPromise;
69627
69663
  }
69628
69664
  function loadWebChannel() {
69629
- webChannelPromise ??= import("./web-DCTvbYTy.js");
69665
+ webChannelPromise ??= import("./web-K_bPrtFT.js");
69630
69666
  return webChannelPromise;
69631
69667
  }
69632
69668
  function loadWhatsAppActions() {
@@ -7,7 +7,7 @@ import "./reply-prefix-K_J_nfgx.js";
7
7
  import "./github-copilot-token-BbsJ0Qbo.js";
8
8
  import "./env-CQ_DQOwT.js";
9
9
  import "./tokens-Cn6drXx2.js";
10
- import { p as runAgentTurn } from "./pi-embedded-UMBd-Mrj.js";
10
+ import { p as runAgentTurn } from "./pi-embedded-DaTqseIp.js";
11
11
  import "./plugins-71oIavrF.js";
12
12
  import "./accounts-DDEyGwby.js";
13
13
  import "./bindings-DYVakimr.js";
@@ -35,7 +35,7 @@ import "./accounts-DImOt9jX.js";
35
35
  import "./paths-DkMamAQ-.js";
36
36
  import "./tool-images-ChC2CXaN.js";
37
37
  import "./image-BjyeKf1c.js";
38
- import "./manager-Bj8GFlcZ.js";
38
+ import "./manager-SbxZtjEc.js";
39
39
  import "./gemini-auth-DVcG-42i.js";
40
40
  import "./retry-QGp0jvVi.js";
41
41
  import "./sqlite-Bo4pHfp8.js";
@@ -3,7 +3,7 @@ import "./registry-DYq1AYOv.js";
3
3
  import "./agent-scope-CpEJ0B88.js";
4
4
  import { t as createSubsystemLogger } from "./subsystem-BjyjJF-d.js";
5
5
  import "./workspace-DscDraUb.js";
6
- import { t as runAgentTurn } from "./unified-runner-j_Vn4K8X.js";
6
+ import { t as runAgentTurn } from "./unified-runner-C0OC_Ay0.js";
7
7
  import "./paths-CbQV9WEg.js";
8
8
  import "./auth-profiles-C2vj6htZ.js";
9
9
  import "./env-BDXYbTKj.js";
@@ -39,7 +39,7 @@ import "./tokens-W0JzCJJM.js";
39
39
  import "./send-90t8KM2a.js";
40
40
  import "./pi-model-discovery-CuZX_Q4t.js";
41
41
  import "./reply-prefix-CvEIl6_d.js";
42
- import "./manager-CMB15ft8.js";
42
+ import "./manager-DlNP6Nui.js";
43
43
  import "./gemini-auth-BefM10YB.js";
44
44
  import "./retry-B-y5suGA.js";
45
45
  import "./sqlite-BN_hIcmu.js";
@@ -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 { Bt as runAgentTurn } from "./reply-Bymjl4wV.js";
4
+ import { Bt as runAgentTurn } from "./reply-DaLBaxTg.js";
5
5
  import "./registry-Cja8eT7G.js";
6
6
  import { t as createSubsystemLogger } from "./subsystem-D9vIQve0.js";
7
7
  import "./exec-CWkblSrI.js";
@@ -60,8 +60,8 @@ import "./diagnostic-session-state-CUslJyKP.js";
60
60
  import "./send-aXMPprv9.js";
61
61
  import "./model-ECsJuJew.js";
62
62
  import "./reply-prefix-CE2YmmsD.js";
63
- import "./memory-cli-CoTkaEhh.js";
64
- import "./manager-CB20PmUH.js";
63
+ import "./memory-cli-xSpyRUEV.js";
64
+ import "./manager-Ca7NOWdK.js";
65
65
  import "./retry-BoS4e4X_.js";
66
66
  import "./sqlite-D55gRQbH.js";
67
67
  import "./target-errors-C9e6dMU_.js";
@@ -14,7 +14,7 @@ import "./client-CJIMV1WD.js";
14
14
  import "./call-BCTAmPye.js";
15
15
  import "./message-channel-C9dERklz.js";
16
16
  import "./pairing-token-Byh6drgn.js";
17
- import { J as runAgentTurn } from "./subagent-registry-0D_yjdW5.js";
17
+ import { J as runAgentTurn } from "./subagent-registry--ttOPMLH.js";
18
18
  import "./sessions-CpDbQNFu.js";
19
19
  import "./tokens-Csntmwwn.js";
20
20
  import "./plugins-CwSlLxM8.js";
@@ -52,8 +52,8 @@ import "./tool-images-CVLISeRT.js";
52
52
  import "./thinking-8sKPnzpp.js";
53
53
  import "./models-config-frWb8fDT.js";
54
54
  import "./reply-prefix-BUN71nd5.js";
55
- import "./memory-cli-Cuhhh4qN.js";
56
- import "./manager-BsfrsBPw.js";
55
+ import "./memory-cli-D2LaloPq.js";
56
+ import "./manager-DNxvT0P-.js";
57
57
  import "./gemini-auth-DEakvf-D.js";
58
58
  import "./retry-C4Q_VPOo.js";
59
59
  import "./sqlite-BP8tiuca.js";
@@ -41,7 +41,7 @@ import { a as isSilentReplyText, i as isSilentReplyPrefixText, n as SILENT_REPLY
41
41
  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-90t8KM2a.js";
42
42
  import { n as discoverModels, t as discoverAuthStorage } from "./pi-model-discovery-CuZX_Q4t.js";
43
43
  import { a as resolveAgentIdentity, i as resolveAckReaction, o as resolveEffectiveMessagesConfig, r as resolveResponsePrefixTemplate, s as resolveHumanDelayConfig, t as createReplyPrefixOptions } from "./reply-prefix-CvEIl6_d.js";
44
- import { a as resolveMemorySearchConfig, i as resolveOllamaBaseUrl, r as probeOllamaEmbeddingModels, t as MemoryIndexManager } from "./manager-CMB15ft8.js";
44
+ import { a as resolveMemorySearchConfig, i as resolveOllamaBaseUrl, r as probeOllamaEmbeddingModels, t as MemoryIndexManager } from "./manager-DlNP6Nui.js";
45
45
  import { c as normalizeExtraMemoryPaths, f as runTasksWithConcurrency, s as listMemoryFiles } from "./internal-DjnxpF_K.js";
46
46
  import { n as retryAsync } from "./retry-B-y5suGA.js";
47
47
  import { a as createActionGate, c as jsonResult, d as readReactionParams, f as readStringArrayParam, l as parseAvailableTags, m as readStringParam, n as missingTargetError, o as imageResult, p as readStringOrNumberParam, r as unknownTargetError, s as imageResultFromFile, t as ambiguousTargetError, u as readNumberParam } from "./target-errors-DeJTztcq.js";
@@ -4336,7 +4336,7 @@ async function getMemorySearchManager(params) {
4336
4336
  const wrapper = new FallbackMemoryManager({
4337
4337
  primary,
4338
4338
  fallbackFactory: async () => {
4339
- const { MemoryIndexManager } = await import("./manager-CMB15ft8.js").then((n) => n.n);
4339
+ const { MemoryIndexManager } = await import("./manager-DlNP6Nui.js").then((n) => n.n);
4340
4340
  return await MemoryIndexManager.get(params);
4341
4341
  }
4342
4342
  }, () => QMD_MANAGER_CACHE.delete(cacheKey));
@@ -4349,7 +4349,7 @@ async function getMemorySearchManager(params) {
4349
4349
  }
4350
4350
  }
4351
4351
  try {
4352
- const { MemoryIndexManager } = await import("./manager-CMB15ft8.js").then((n) => n.n);
4352
+ const { MemoryIndexManager } = await import("./manager-DlNP6Nui.js").then((n) => n.n);
4353
4353
  return { manager: await MemoryIndexManager.get(params) };
4354
4354
  } catch (err) {
4355
4355
  return {
@@ -22159,6 +22159,41 @@ async function executeNodeHostCommand(params) {
22159
22159
 
22160
22160
  //#endregion
22161
22161
  //#region src/agents/bash-tools.exec.ts
22162
+ let cachedSymiNodeModules;
22163
+ /**
22164
+ * Returns the absolute path to Symi's bundled `node_modules` directory, so
22165
+ * gateway-host node scripts can `require()` packages that ship with Symi
22166
+ * (docx / exceljs / pptxgenjs / pdfkit for the document-generation skill,
22167
+ * plus any future bundled npm dep). Cached for the process lifetime.
22168
+ *
22169
+ * Returns null when Symi's package root can't be resolved (development
22170
+ * setups outside a package, broken installs).
22171
+ */
22172
+ function resolveSymiNodeModulesPath() {
22173
+ if (cachedSymiNodeModules !== void 0) return cachedSymiNodeModules;
22174
+ const root = resolveSymiPackageRootSync({});
22175
+ cachedSymiNodeModules = root ? path.join(root, "node_modules") : null;
22176
+ return cachedSymiNodeModules;
22177
+ }
22178
+ /**
22179
+ * Append Symi's bundled node_modules path to NODE_PATH so gateway-host
22180
+ * scripts (run via the `exec` tool with `host: "gateway"`) can resolve
22181
+ * Symi-bundled npm packages from any cwd. Existing NODE_PATH (user
22182
+ * override or test fixture) is preserved by appending, not replacing.
22183
+ */
22184
+ function applySymiNodePath(env) {
22185
+ const symiModules = resolveSymiNodeModulesPath();
22186
+ if (!symiModules) return;
22187
+ const existing = env.NODE_PATH?.trim();
22188
+ if (!existing) {
22189
+ env.NODE_PATH = symiModules;
22190
+ return;
22191
+ }
22192
+ const sep = path.delimiter;
22193
+ const segments = existing.split(sep).filter(Boolean);
22194
+ if (!segments.includes(symiModules)) segments.push(symiModules);
22195
+ env.NODE_PATH = segments.join(sep);
22196
+ }
22162
22197
  function extractScriptTargetFromCommand(command) {
22163
22198
  const raw = command.trim();
22164
22199
  if (!raw) return null;
@@ -22308,6 +22343,7 @@ function createExecTool(defaults) {
22308
22343
  env: process.env,
22309
22344
  timeoutMs: resolveShellEnvFallbackTimeoutMs(process.env)
22310
22345
  }));
22346
+ if (!sandbox && host === "gateway") applySymiNodePath(env);
22311
22347
  if (host === "node" && defaultPathPrepend.length > 0) warnings.push("Warning: tools.exec.pathPrepend is ignored for host=node. Configure PATH on the node host/service instead.");
22312
22348
  else applyPathPrepend(env, defaultPathPrepend);
22313
22349
  if (host === "node") return executeNodeHostCommand({
@@ -54830,7 +54866,7 @@ function isVoiceChannelType(type) {
54830
54866
  function createDefaultDeps() {
54831
54867
  return {
54832
54868
  sendMessageWhatsApp: async (...args) => {
54833
- const { sendMessageWhatsApp } = await import("./web-BSf9H0_w.js");
54869
+ const { sendMessageWhatsApp } = await import("./web-Cl-3dkwx.js");
54834
54870
  return await sendMessageWhatsApp(...args);
54835
54871
  },
54836
54872
  sendMessageTelegram: async (...args) => {
@@ -70110,7 +70146,7 @@ function loadWebLoginQr() {
70110
70146
  return webLoginQrPromise;
70111
70147
  }
70112
70148
  function loadWebChannel() {
70113
- webChannelPromise ??= import("./web-BSf9H0_w.js");
70149
+ webChannelPromise ??= import("./web-Cl-3dkwx.js");
70114
70150
  return webChannelPromise;
70115
70151
  }
70116
70152
  function loadWhatsAppActions() {
@@ -17,7 +17,7 @@ import "./client-CJIMV1WD.js";
17
17
  import "./call-BCTAmPye.js";
18
18
  import "./message-channel-C9dERklz.js";
19
19
  import "./pairing-token-Byh6drgn.js";
20
- import { wt as trimLogTail } from "./subagent-registry-0D_yjdW5.js";
20
+ import { wt as trimLogTail } from "./subagent-registry--ttOPMLH.js";
21
21
  import "./sessions-CpDbQNFu.js";
22
22
  import "./tokens-Csntmwwn.js";
23
23
  import "./plugins-CwSlLxM8.js";
@@ -55,8 +55,8 @@ import "./tool-images-CVLISeRT.js";
55
55
  import "./thinking-8sKPnzpp.js";
56
56
  import "./models-config-frWb8fDT.js";
57
57
  import "./reply-prefix-BUN71nd5.js";
58
- import "./memory-cli-Cuhhh4qN.js";
59
- import "./manager-BsfrsBPw.js";
58
+ import "./memory-cli-D2LaloPq.js";
59
+ import "./manager-DNxvT0P-.js";
60
60
  import "./gemini-auth-DEakvf-D.js";
61
61
  import "./retry-C4Q_VPOo.js";
62
62
  import "./sqlite-BP8tiuca.js";
@@ -112,10 +112,10 @@ import "./npm-registry-spec-PuS2I1Em.js";
112
112
  import "./skill-scanner-BV3QHmsf.js";
113
113
  import "./installs-B4sNNRaW.js";
114
114
  import "./channels-status-issues-B-ssmZ8E.js";
115
- import "./register.subclis-BzbNYOC6.js";
116
- import "./command-registry-FJWuYmEn.js";
115
+ import "./register.subclis-DHLF7LUE.js";
116
+ import "./command-registry-iESIIBvf.js";
117
117
  import "./program-context-DeZ44oQ9.js";
118
- import { r as installCompletion } from "./completion-cli-DWVW4P54.js";
118
+ import { r as installCompletion } from "./completion-cli-BEddBU3C.js";
119
119
  import "./daemon-runtime-C86WnKU5.js";
120
120
  import { r as parseSemver } from "./runtime-guard-BofkqBu7.js";
121
121
  import "./systemd-CJ5L2ee4.js";
@@ -125,19 +125,19 @@ import "./systemd-hints-BbqPFaZ2.js";
125
125
  import { i as runDaemonInstall, r as runDaemonRestart } from "./daemon-cli-BiBjGGfw.js";
126
126
  import "./diagnostics-C6xPE2ln.js";
127
127
  import { t as renderTable } from "./table-Bka4fasy.js";
128
- import "./health-Bvo3NXZK.js";
128
+ import "./health-C5cdo2e_.js";
129
129
  import "./control-ui-assets-Clf7H-Sm.js";
130
130
  import { a as resolveNpmChannelTag, c as DEFAULT_PACKAGE_CHANNEL, d as formatUpdateChannelLabel, g as resolveUpdateChannelDisplay, h as resolveEffectiveUpdateChannel, m as normalizeUpdateChannel, n as compareSemverStrings, r as fetchNpmTagVersion, s as DEFAULT_GIT_CHANNEL, t as checkUpdateStatus, u as channelToNpmTag } from "./update-check-BNjupSIM.js";
131
131
  import "./dm-policy-shared-JiSNSaKz.js";
132
132
  import { i as resolveUpdateAvailability, n as formatUpdateOneLiner, t as formatUpdateAvailableHint } from "./status.update-DoXJrRh6.js";
133
- import { a as globalInstallArgs, c as readPackageVersion, i as detectGlobalInstallManagerForRoot, n as cleanupGlobalRenameDirs, o as resolveGlobalPackageRoot, r as detectGlobalInstallManagerByPresence, s as readPackageName, t as runGatewayUpdate } from "./update-runner-CfzHxbsu.js";
133
+ import { a as globalInstallArgs, c as readPackageVersion, i as detectGlobalInstallManagerForRoot, n as cleanupGlobalRenameDirs, o as resolveGlobalPackageRoot, r as detectGlobalInstallManagerByPresence, s as readPackageName, t as runGatewayUpdate } from "./update-runner-Bl0Y3ndR.js";
134
134
  import "./logging-PVQxLC6I.js";
135
135
  import { n as updateNpmInstalledPlugins, t as syncPluginsForUpdateChannel } from "./update-DticqU4-.js";
136
136
  import "./doctor-config-flow-l2aPNzHP.js";
137
137
  import "./systemd-linger-ipoPa7o0.js";
138
138
  import "./health-format-DkjSgkDx.js";
139
- import { n as doctorCommand, t as selectStyled } from "./prompt-select-styled-nywEyQoQ.js";
140
- import { r as ensureCompletionCacheExists, t as checkShellCompletionStatus } from "./doctor-completion-C9A7E6Wb.js";
139
+ import { n as doctorCommand, t as selectStyled } from "./prompt-select-styled-BehvQU7S.js";
140
+ import { r as ensureCompletionCacheExists, t as checkShellCompletionStatus } from "./doctor-completion-BGriRzaq.js";
141
141
  import { spawn, spawnSync } from "node:child_process";
142
142
  import os from "node:os";
143
143
  import path from "node:path";
@@ -1,7 +1,7 @@
1
1
  import { g as resolveStateDir } from "./paths-Cqn-zk3M.js";
2
2
  import { B as theme, h as pathExists } from "./utils-B-0b9bGM.js";
3
3
  import "./thinking-EAliFiVK.js";
4
- import { H as trimLogTail } from "./reply-Bymjl4wV.js";
4
+ import { H as trimLogTail } from "./reply-DaLBaxTg.js";
5
5
  import { t as resolveSymiPackageRoot } from "./symi-root-CrGJbkzf.js";
6
6
  import "./registry-Cja8eT7G.js";
7
7
  import { f as defaultRuntime } from "./subsystem-D9vIQve0.js";
@@ -62,8 +62,8 @@ import "./diagnostic-session-state-CUslJyKP.js";
62
62
  import "./send-aXMPprv9.js";
63
63
  import "./model-ECsJuJew.js";
64
64
  import "./reply-prefix-CE2YmmsD.js";
65
- import "./memory-cli-CoTkaEhh.js";
66
- import "./manager-CB20PmUH.js";
65
+ import "./memory-cli-xSpyRUEV.js";
66
+ import "./manager-Ca7NOWdK.js";
67
67
  import "./retry-BoS4e4X_.js";
68
68
  import "./sqlite-D55gRQbH.js";
69
69
  import "./target-errors-C9e6dMU_.js";
@@ -107,7 +107,7 @@ import "./stagger-CZ1Rrj7O.js";
107
107
  import { c as resolveGatewayLaunchAgentLabel, d as resolveGatewaySystemdServiceName, f as resolveGatewayWindowsTaskName } from "./constants-DF8wPn-_.js";
108
108
  import "./channel-selection-9fIQGtZy.js";
109
109
  import { r as parseSemver } from "./runtime-guard-BKFbNplo.js";
110
- import "./program-context-ByWsh-2T.js";
110
+ import "./program-context-BFvY5D79.js";
111
111
  import "./catalog-KW3oyt3k.js";
112
112
  import "./skills-status-D1IW8MhS.js";
113
113
  import { n as inheritOptionFromParent } from "./command-options-DOOvAdsg.js";
@@ -118,7 +118,7 @@ import "./npm-registry-spec-B98RgVZF.js";
118
118
  import "./skill-scanner-BTgjeQBf.js";
119
119
  import "./installs-BPZKRjsO.js";
120
120
  import "./channels-status-issues-BVpj6wWd.js";
121
- import { r as installCompletion } from "./completion-cli-C20c_vzO.js";
121
+ import { r as installCompletion } from "./completion-cli-euUBlC-J.js";
122
122
  import "./daemon-runtime-C-Mwepv_.js";
123
123
  import "./systemd-Xs16roN5.js";
124
124
  import { t as resolveGatewayService } from "./service-DzLem5vL.js";
@@ -127,19 +127,19 @@ import "./systemd-hints-CfnF9j3s.js";
127
127
  import { i as runDaemonInstall, r as runDaemonRestart } from "./daemon-cli-BNZu5unw.js";
128
128
  import "./diagnostics-1uBuB9IE.js";
129
129
  import { t as renderTable } from "./table-BWuvjnmY.js";
130
- import "./health-CYHbTw04.js";
130
+ import "./health-BFlZuHVH.js";
131
131
  import "./control-ui-assets-BrP31IQR.js";
132
132
  import { a as resolveNpmChannelTag, c as DEFAULT_PACKAGE_CHANNEL, d as formatUpdateChannelLabel, g as resolveUpdateChannelDisplay, h as resolveEffectiveUpdateChannel, m as normalizeUpdateChannel, n as compareSemverStrings, r as fetchNpmTagVersion, s as DEFAULT_GIT_CHANNEL, t as checkUpdateStatus, u as channelToNpmTag } from "./update-check-Bbvpax6u.js";
133
133
  import "./dm-policy-shared-KlzpDeT_.js";
134
134
  import { i as resolveUpdateAvailability, n as formatUpdateOneLiner, t as formatUpdateAvailableHint } from "./status.update-BSaVYFQv.js";
135
- import { a as globalInstallArgs, c as readPackageVersion, i as detectGlobalInstallManagerForRoot, n as cleanupGlobalRenameDirs, o as resolveGlobalPackageRoot, r as detectGlobalInstallManagerByPresence, s as readPackageName, t as runGatewayUpdate } from "./update-runner-UfVHKth_.js";
135
+ import { a as globalInstallArgs, c as readPackageVersion, i as detectGlobalInstallManagerForRoot, n as cleanupGlobalRenameDirs, o as resolveGlobalPackageRoot, r as detectGlobalInstallManagerByPresence, s as readPackageName, t as runGatewayUpdate } from "./update-runner-DV6ov2uA.js";
136
136
  import "./logging-CZuxhCZR.js";
137
137
  import { n as updateNpmInstalledPlugins, t as syncPluginsForUpdateChannel } from "./update-D4uLu0dv.js";
138
138
  import "./doctor-config-flow-BFHsvL2k.js";
139
139
  import "./systemd-linger-0C265XKH.js";
140
140
  import "./health-format-Ct4VWeSk.js";
141
- import { n as doctorCommand, t as selectStyled } from "./prompt-select-styled-BkwnTGjt.js";
142
- import { r as ensureCompletionCacheExists, t as checkShellCompletionStatus } from "./doctor-completion-B4pjrehH.js";
141
+ import { n as doctorCommand, t as selectStyled } from "./prompt-select-styled-Bf47U3gY.js";
142
+ import { r as ensureCompletionCacheExists, t as checkShellCompletionStatus } from "./doctor-completion-B-Oak4dP.js";
143
143
  import os from "node:os";
144
144
  import path from "node:path";
145
145
  import fs from "node:fs/promises";
@@ -1,6 +1,6 @@
1
1
  import { nt as pathExists } from "./entry.js";
2
2
  import { t as runCommandWithTimeout } from "./exec-CBKBIMpA.js";
3
- import { wt as trimLogTail } from "./subagent-registry-0D_yjdW5.js";
3
+ import { wt as trimLogTail } from "./subagent-registry--ttOPMLH.js";
4
4
  import { n as resolveControlUiDistIndexHealth, r as resolveControlUiDistIndexPathForRoot } from "./control-ui-assets-Clf7H-Sm.js";
5
5
  import { c as DEFAULT_PACKAGE_CHANNEL, f as isBetaTag, l as DEV_BRANCH, n as compareSemverStrings, o as detectPackageManager$1, p as isStableTag, u as channelToNpmTag } from "./update-check-BNjupSIM.js";
6
6
  import os from "node:os";
@@ -1,5 +1,5 @@
1
1
  import { h as pathExists } from "./utils-B-0b9bGM.js";
2
- import { H as trimLogTail } from "./reply-Bymjl4wV.js";
2
+ import { H as trimLogTail } from "./reply-DaLBaxTg.js";
3
3
  import { t as runCommandWithTimeout } from "./exec-CWkblSrI.js";
4
4
  import { n as resolveControlUiDistIndexHealth, r as resolveControlUiDistIndexPathForRoot } from "./control-ui-assets-BrP31IQR.js";
5
5
  import { c as DEFAULT_PACKAGE_CHANNEL, f as isBetaTag, l as DEV_BRANCH, n as compareSemverStrings, o as detectPackageManager$1, p as isStableTag, u as channelToNpmTag } from "./update-check-Bbvpax6u.js";
@@ -4,7 +4,7 @@ import { A as isSelfChatMode, B as sleep, C as clamp, F as resolveJidToE164, H a
4
4
  import "./agent-scope-CpEJ0B88.js";
5
5
  import { r as defaultRuntime, t as createSubsystemLogger } from "./subsystem-BjyjJF-d.js";
6
6
  import "./workspace-DscDraUb.js";
7
- import { C as resolveEnvelopeFormatOptions, D as normalizeMentionText, E as buildMentionRegexes, S as formatInboundEnvelope, T as shouldComputeCommandAuthorized, _ as parseActivationCommand, b as createInboundDebouncer, c as DEFAULT_GROUP_HISTORY_LIMIT, d as shouldAckReactionForWhatsApp, f as dispatchReplyWithBufferedBlockDispatcher, g as normalizeGroupActivation, h as getReplyFromConfig, l as buildHistoryContextFromEntries, m as createDedupeCache, n as computeBackoff, o as buildPairingReply, r as sleepWithAbort, s as resolveMentionGating, u as recordPendingHistoryEntryIfEnabled, v as formatDurationPrecise, w as hasControlCommand, x as resolveInboundDebounceMs, y as enqueueSystemEvent } from "./unified-runner-j_Vn4K8X.js";
7
+ import { C as resolveEnvelopeFormatOptions, D as normalizeMentionText, E as buildMentionRegexes, S as formatInboundEnvelope, T as shouldComputeCommandAuthorized, _ as parseActivationCommand, b as createInboundDebouncer, c as DEFAULT_GROUP_HISTORY_LIMIT, d as shouldAckReactionForWhatsApp, f as dispatchReplyWithBufferedBlockDispatcher, g as normalizeGroupActivation, h as getReplyFromConfig, l as buildHistoryContextFromEntries, m as createDedupeCache, n as computeBackoff, o as buildPairingReply, r as sleepWithAbort, s as resolveMentionGating, u as recordPendingHistoryEntryIfEnabled, v as formatDurationPrecise, w as hasControlCommand, x as resolveInboundDebounceMs, y as enqueueSystemEvent } from "./unified-runner-C0OC_Ay0.js";
8
8
  import { s as resolveStorePath } from "./paths-CbQV9WEg.js";
9
9
  import "./auth-profiles-C2vj6htZ.js";
10
10
  import { n as formatCliCommand } from "./env-BDXYbTKj.js";
@@ -40,7 +40,7 @@ import "./tokens-W0JzCJJM.js";
40
40
  import { G as formatLocationText, J as readChannelAllowFromStore, K as toLocationContext, X as upsertChannelPairingRequest } from "./send-90t8KM2a.js";
41
41
  import "./pi-model-discovery-CuZX_Q4t.js";
42
42
  import { c as resolveIdentityNamePrefix, l as resolveMessagePrefix, t as createReplyPrefixOptions } from "./reply-prefix-CvEIl6_d.js";
43
- import "./manager-CMB15ft8.js";
43
+ import "./manager-DlNP6Nui.js";
44
44
  import "./gemini-auth-BefM10YB.js";
45
45
  import "./retry-B-y5suGA.js";
46
46
  import "./sqlite-BN_hIcmu.js";
@@ -8,7 +8,7 @@ import { c as resolveIdentityNamePrefix, l as resolveMessagePrefix, t as createR
8
8
  import "./github-copilot-token-BbsJ0Qbo.js";
9
9
  import { r as formatCliCommand } from "./env-CQ_DQOwT.js";
10
10
  import "./tokens-Cn6drXx2.js";
11
- import { C as hasControlCommand, E as normalizeMentionText, S as resolveEnvelopeFormatOptions, T as buildMentionRegexes, _ as formatDurationPrecise, a as DEFAULT_GROUP_HISTORY_LIMIT, b as resolveInboundDebounceMs, c as shouldAckReactionForWhatsApp, d as createDedupeCache, f as getReplyFromConfig, g as parseActivationCommand, h as normalizeGroupActivation, i as resolveMentionGating, l as dispatchReplyWithBufferedBlockDispatcher, n as sleepWithAbort, o as buildHistoryContextFromEntries, r as buildPairingReply, s as recordPendingHistoryEntryIfEnabled, t as computeBackoff, v as enqueueSystemEvent, w as shouldComputeCommandAuthorized, x as formatInboundEnvelope, y as createInboundDebouncer } from "./pi-embedded-UMBd-Mrj.js";
11
+ import { C as hasControlCommand, E as normalizeMentionText, S as resolveEnvelopeFormatOptions, T as buildMentionRegexes, _ as formatDurationPrecise, a as DEFAULT_GROUP_HISTORY_LIMIT, b as resolveInboundDebounceMs, c as shouldAckReactionForWhatsApp, d as createDedupeCache, f as getReplyFromConfig, g as parseActivationCommand, h as normalizeGroupActivation, i as resolveMentionGating, l as dispatchReplyWithBufferedBlockDispatcher, n as sleepWithAbort, o as buildHistoryContextFromEntries, r as buildPairingReply, s as recordPendingHistoryEntryIfEnabled, t as computeBackoff, v as enqueueSystemEvent, w as shouldComputeCommandAuthorized, x as formatInboundEnvelope, y as createInboundDebouncer } from "./pi-embedded-DaTqseIp.js";
12
12
  import "./plugins-71oIavrF.js";
13
13
  import { i as logWebSelfId, l as readWebSelfId, n as WA_WEB_AUTH_DIR, p as webAuthExists, r as getWebAuthAgeMs, s as pickWebChannel, t as resolveWhatsAppAccount } from "./accounts-DDEyGwby.js";
14
14
  import "./bindings-DYVakimr.js";
@@ -36,7 +36,7 @@ import "./accounts-DImOt9jX.js";
36
36
  import { s as resolveStorePath } from "./paths-DkMamAQ-.js";
37
37
  import "./tool-images-ChC2CXaN.js";
38
38
  import "./image-BjyeKf1c.js";
39
- import "./manager-Bj8GFlcZ.js";
39
+ import "./manager-SbxZtjEc.js";
40
40
  import "./gemini-auth-DVcG-42i.js";
41
41
  import "./retry-QGp0jvVi.js";
42
42
  import "./sqlite-Bo4pHfp8.js";
@@ -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 "./reply-Bymjl4wV.js";
4
+ import "./reply-DaLBaxTg.js";
5
5
  import "./registry-Cja8eT7G.js";
6
6
  import "./subsystem-D9vIQve0.js";
7
7
  import "./exec-CWkblSrI.js";
@@ -60,8 +60,8 @@ import "./diagnostic-session-state-CUslJyKP.js";
60
60
  import "./send-aXMPprv9.js";
61
61
  import "./model-ECsJuJew.js";
62
62
  import "./reply-prefix-CE2YmmsD.js";
63
- import "./memory-cli-CoTkaEhh.js";
64
- import "./manager-CB20PmUH.js";
63
+ import "./memory-cli-xSpyRUEV.js";
64
+ import "./manager-Ca7NOWdK.js";
65
65
  import "./retry-BoS4e4X_.js";
66
66
  import "./sqlite-D55gRQbH.js";
67
67
  import "./target-errors-C9e6dMU_.js";
@@ -102,7 +102,7 @@ import "./pi-tools.policy-54ABEJtH.js";
102
102
  import "./control-service-BkyH7qkF.js";
103
103
  import "./stagger-CZ1Rrj7O.js";
104
104
  import "./channel-selection-9fIQGtZy.js";
105
- import { n as monitorWebInbox, t as monitorWebChannel } from "./channel-web-D6aolbVC.js";
105
+ import { n as monitorWebInbox, t as monitorWebChannel } from "./channel-web-CBC2RSBF.js";
106
106
  import { n as sendMessageWhatsApp } from "./outbound-CPcVipU-.js";
107
107
  import { i as waitForWaConnection, t as createWaSocket } from "./session-CTTpxOx1.js";
108
108
  import { t as loginWeb } from "./login-Cd4DTmg6.js";
@@ -16,7 +16,7 @@ import "./client-CJIMV1WD.js";
16
16
  import "./call-BCTAmPye.js";
17
17
  import "./message-channel-C9dERklz.js";
18
18
  import "./pairing-token-Byh6drgn.js";
19
- import { Bn as formatInboundEnvelope, F as buildHistoryContextFromEntries, I as recordPendingHistoryEntryIfEnabled, Jn as normalizeMentionText, L as shouldAckReactionForWhatsApp, M as buildPairingReply, N as resolveMentionGating, P as DEFAULT_GROUP_HISTORY_LIMIT, R as dispatchReplyWithBufferedBlockDispatcher, Rn as createInboundDebouncer, U as createDedupeCache, Un as hasControlCommand, Vn as resolveEnvelopeFormatOptions, W as getReplyFromConfig, Wn as shouldComputeCommandAuthorized, b as sleepWithAbort, nn as normalizeGroupActivation, qn as buildMentionRegexes, rn as parseActivationCommand, wn as enqueueSystemEvent, y as computeBackoff, zn as resolveInboundDebounceMs } from "./subagent-registry-0D_yjdW5.js";
19
+ import { Bn as formatInboundEnvelope, F as buildHistoryContextFromEntries, I as recordPendingHistoryEntryIfEnabled, Jn as normalizeMentionText, L as shouldAckReactionForWhatsApp, M as buildPairingReply, N as resolveMentionGating, P as DEFAULT_GROUP_HISTORY_LIMIT, R as dispatchReplyWithBufferedBlockDispatcher, Rn as createInboundDebouncer, U as createDedupeCache, Un as hasControlCommand, Vn as resolveEnvelopeFormatOptions, W as getReplyFromConfig, Wn as shouldComputeCommandAuthorized, b as sleepWithAbort, nn as normalizeGroupActivation, qn as buildMentionRegexes, rn as parseActivationCommand, wn as enqueueSystemEvent, y as computeBackoff, zn as resolveInboundDebounceMs } from "./subagent-registry--ttOPMLH.js";
20
20
  import { B as resolveGroupSessionKey, c as recordSessionMetaFromInbound, o as loadSessionStore, s as readSessionUpdatedAt, u as updateLastRoute } from "./sessions-CpDbQNFu.js";
21
21
  import "./tokens-Csntmwwn.js";
22
22
  import "./plugins-CwSlLxM8.js";
@@ -54,8 +54,8 @@ import "./tool-images-CVLISeRT.js";
54
54
  import "./thinking-8sKPnzpp.js";
55
55
  import "./models-config-frWb8fDT.js";
56
56
  import { c as resolveIdentityNamePrefix, l as resolveMessagePrefix, t as createReplyPrefixOptions } from "./reply-prefix-BUN71nd5.js";
57
- import "./memory-cli-Cuhhh4qN.js";
58
- import "./manager-BsfrsBPw.js";
57
+ import "./memory-cli-D2LaloPq.js";
58
+ import "./manager-DNxvT0P-.js";
59
59
  import "./gemini-auth-DEakvf-D.js";
60
60
  import "./retry-C4Q_VPOo.js";
61
61
  import "./sqlite-BP8tiuca.js";
@@ -2,8 +2,8 @@
2
2
 
3
3
  _Auto-generated by `scripts/build-capabilities-index.ts` — do not hand-edit._
4
4
 
5
- Symi version: `2.9.2`
6
- Generated: 2026-04-29T01:57:20.684Z
5
+ Symi version: `2.9.4`
6
+ Generated: 2026-04-29T02:31:05.375Z
7
7
 
8
8
  Stage 4 of the prompt-reduction plan moves capability documentation
9
9
  out of the system prompt and into versioned content (skills, tool
@@ -35,7 +35,7 @@ block (Stage 3.5).
35
35
  | `coding-agent` | "Delegate coding tasks to Codex, Claude Code, or Pi agents via background process. Use when: (1) building/creating new features or apps, (2) reviewing PRs (spawn in temp dir), (3) refactoring large co | coding-agent, coding, agent |
36
36
  | `connect-email` | Connect a user's email account (Outlook 365 or Gmail) to Symi. Use when the user asks to connect, link, set up, configure, or troubleshoot email — including any mention of "my email", "work email", "o | connect-email, connect, email |
37
37
  | `discord` | "Discord ops via the message tool (channel=discord)." | discord |
38
- | `document-generation` | Generate Word (.docx), Excel (.xlsx), PowerPoint (.pptx), and PDF documents via npm packages pre-installed on the gateway. Write a short Node.js script (.cjs for CommonJS), execute via exec with host= | document, docx, xlsx, pptx, pdf, word, excel, powerpoint |
38
+ | `document-generation` | Generate Word (.docx), Excel (.xlsx), PowerPoint (.pptx), and PDF documents via npm packages bundled with Symi. Write a short Node.js script (.cjs for CommonJS), execute via exec with host=gateway. Us | document, docx, xlsx, pptx, pdf, word, excel, powerpoint |
39
39
  | `eightctl` | Control Eight Sleep pods (status, temperature, alarms, schedules). | eightctl |
40
40
  | `food-order` | Reorder Foodora orders + track ETA/status with ordercli. Never confirm without explicit user approval. Triggers: order food, reorder, track ETA. | food-order, food, order |
41
41
  | `gemini` | Gemini CLI for one-shot Q&A, summaries, and generation. | gemini |
@@ -94,39 +94,39 @@ auth providers all live here. Each ships its own `package.json`.
94
94
 
95
95
  | Extension | Version | Description |
96
96
  | ------------------------- | ------- | ----------------------------------------------------------------------------------------------------- |
97
- | `bluebubbles` | 2.9.2 | Symi BlueBubbles channel plugin |
98
- | `copilot-proxy` | 2.9.2 | Symi Copilot Proxy provider plugin |
99
- | `diagnostics-otel` | 2.9.2 | Symi diagnostics OpenTelemetry exporter |
100
- | `discord` | 2.9.2 | Symi Discord channel plugin |
101
- | `feishu` | 2.9.2 | Symi Feishu/Lark channel plugin (community maintained by @m1heng) |
102
- | `google-antigravity-auth` | 2.9.2 | Symi Google Antigravity OAuth provider plugin |
103
- | `google-gemini-cli-auth` | 2.9.2 | Symi Gemini CLI OAuth provider plugin |
104
- | `googlechat` | 2.9.2 | Symi Google Chat channel plugin |
105
- | `imessage` | 2.9.2 | Symi iMessage channel plugin |
106
- | `irc` | 2.9.2 | Symi IRC channel plugin |
107
- | `learning-loop` | 2.9.2 | Closed-loop learning extension with deterministic quality scoring and vector-indexed learning storage |
108
- | `line` | 2.9.2 | Symi LINE channel plugin |
109
- | `llm-task` | 2.9.2 | Symi JSON-only LLM task plugin |
110
- | `matrix` | 2.9.2 | Symi Matrix channel plugin |
111
- | `mattermost` | 2.9.2 | Symi Mattermost channel plugin |
112
- | `memory-core` | 2.9.2 | Symi core memory search plugin |
113
- | `memory-lancedb` | 2.9.2 | Symi LanceDB-backed long-term memory plugin with auto-recall/capture |
114
- | `minimax-portal-auth` | 2.9.2 | Symi MiniMax Portal OAuth provider plugin |
115
- | `msteams` | 2.9.2 | Symi Microsoft Teams channel plugin |
116
- | `nextcloud-talk` | 2.9.2 | Symi Nextcloud Talk channel plugin |
117
- | `nostr` | 2.9.2 | Symi Nostr channel plugin for NIP-04 encrypted DMs |
118
- | `open-prose` | 2.9.2 | OpenProse VM skill pack plugin (slash command + telemetry). |
119
- | `outlook` | 2.9.2 | Symi Outlook 365 email integration via Microsoft Graph API |
120
- | `pipeline` | 2.9.2 | Pipeline workflow tool plugin (typed pipelines + resumable approvals) |
121
- | `signal` | 2.9.2 | Symi Signal channel plugin |
122
- | `slack` | 2.9.2 | Symi Slack channel plugin |
123
- | `telegram` | 2.9.2 | Symi Telegram channel plugin |
124
- | `tlon` | 2.9.2 | Symi Tlon/Urbit channel plugin |
125
- | `twitch` | 2.9.2 | Symi Twitch channel plugin |
126
- | `voice-call` | 2.9.2 | Symi voice-call plugin |
127
- | `whatsapp` | 2.9.2 | Symi WhatsApp channel plugin |
128
- | `zalo` | 2.9.2 | Symi Zalo channel plugin |
129
- | `zalouser` | 2.9.2 | Symi Zalo Personal Account plugin via zca-cli |
97
+ | `bluebubbles` | 2.9.3 | Symi BlueBubbles channel plugin |
98
+ | `copilot-proxy` | 2.9.3 | Symi Copilot Proxy provider plugin |
99
+ | `diagnostics-otel` | 2.9.3 | Symi diagnostics OpenTelemetry exporter |
100
+ | `discord` | 2.9.3 | Symi Discord channel plugin |
101
+ | `feishu` | 2.9.3 | Symi Feishu/Lark channel plugin (community maintained by @m1heng) |
102
+ | `google-antigravity-auth` | 2.9.3 | Symi Google Antigravity OAuth provider plugin |
103
+ | `google-gemini-cli-auth` | 2.9.3 | Symi Gemini CLI OAuth provider plugin |
104
+ | `googlechat` | 2.9.3 | Symi Google Chat channel plugin |
105
+ | `imessage` | 2.9.3 | Symi iMessage channel plugin |
106
+ | `irc` | 2.9.3 | Symi IRC channel plugin |
107
+ | `learning-loop` | 2.9.3 | Closed-loop learning extension with deterministic quality scoring and vector-indexed learning storage |
108
+ | `line` | 2.9.3 | Symi LINE channel plugin |
109
+ | `llm-task` | 2.9.3 | Symi JSON-only LLM task plugin |
110
+ | `matrix` | 2.9.3 | Symi Matrix channel plugin |
111
+ | `mattermost` | 2.9.3 | Symi Mattermost channel plugin |
112
+ | `memory-core` | 2.9.3 | Symi core memory search plugin |
113
+ | `memory-lancedb` | 2.9.3 | Symi LanceDB-backed long-term memory plugin with auto-recall/capture |
114
+ | `minimax-portal-auth` | 2.9.3 | Symi MiniMax Portal OAuth provider plugin |
115
+ | `msteams` | 2.9.3 | Symi Microsoft Teams channel plugin |
116
+ | `nextcloud-talk` | 2.9.3 | Symi Nextcloud Talk channel plugin |
117
+ | `nostr` | 2.9.3 | Symi Nostr channel plugin for NIP-04 encrypted DMs |
118
+ | `open-prose` | 2.9.3 | OpenProse VM skill pack plugin (slash command + telemetry). |
119
+ | `outlook` | 2.9.3 | Symi Outlook 365 email integration via Microsoft Graph API |
120
+ | `pipeline` | 2.9.3 | Pipeline workflow tool plugin (typed pipelines + resumable approvals) |
121
+ | `signal` | 2.9.3 | Symi Signal channel plugin |
122
+ | `slack` | 2.9.3 | Symi Slack channel plugin |
123
+ | `telegram` | 2.9.3 | Symi Telegram channel plugin |
124
+ | `tlon` | 2.9.3 | Symi Tlon/Urbit channel plugin |
125
+ | `twitch` | 2.9.3 | Symi Twitch channel plugin |
126
+ | `voice-call` | 2.9.3 | Symi voice-call plugin |
127
+ | `whatsapp` | 2.9.3 | Symi WhatsApp channel plugin |
128
+ | `zalo` | 2.9.3 | Symi Zalo channel plugin |
129
+ | `zalouser` | 2.9.3 | Symi Zalo Personal Account plugin via zca-cli |
130
130
 
131
131
  ## Behaviour rules enforced by runtime
132
132