@symerian/symi 2.8.17 → 2.9.0

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 (163) hide show
  1. package/dist/{agents-9cAyC5ED.js → agents-CvNeiuSB.js} +4 -4
  2. package/dist/{agents.config-Cu9zTq04.js → agents.config-BCgY5FjE.js} +1 -1
  3. package/dist/{agents.config-DuwhYjpi.js → agents.config-Ct64cGQ8.js} +1 -1
  4. package/dist/{audio-preflight-rjCWpcfE.js → audio-preflight-Cb-T0r6e.js} +4 -4
  5. package/dist/{auth-choice-CPqyqc93.js → auth-choice-ChFU9OCF.js} +1 -1
  6. package/dist/{auth-choice-DeNzlUAR.js → auth-choice-DmMyKZX4.js} +1 -1
  7. package/dist/{banner-S1NGA6-s.js → banner-Bf46tqiY.js} +1 -1
  8. package/dist/build-info.json +3 -3
  9. package/dist/bundled/boot-md/handler.js +7 -7
  10. package/dist/bundled/session-memory/handler.js +7 -7
  11. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  12. package/dist/{channel-options-C0v4BJgp.js → channel-options-Bqc2VCgt.js} +1 -1
  13. package/dist/{channel-options-C6y7Khvq.js → channel-options-D4a0ZJ72.js} +1 -1
  14. package/dist/{channel-web-DirOFV_n.js → channel-web-YNC2xS5K.js} +1 -1
  15. package/dist/{channels-cli-BhNHckMo.js → channels-cli-BFJcNLbB.js} +6 -6
  16. package/dist/{channels-cli-By_SbriI.js → channels-cli-h3GnmmM9.js} +6 -6
  17. package/dist/{chrome-C08Z0XAa.js → chrome-ROtrXlNs.js} +7 -7
  18. package/dist/{cli-B1QQv1cb.js → cli-BX54CAM7.js} +3 -3
  19. package/dist/{cli-Bx4RQCuK.js → cli-BpQlSGVs.js} +3 -3
  20. package/dist/{command-registry-uMOPbrbY.js → command-registry-BiRjJ2Sy.js} +10 -10
  21. package/dist/{completion-cli-B6s_3rEE.js → completion-cli-BYXofVqv.js} +2 -2
  22. package/dist/{completion-cli-DVD79pVj.js → completion-cli-C8K5J1ld.js} +1 -1
  23. package/dist/{config-cli-DzudcNAD.js → config-cli-BPPD3xqE.js} +1 -1
  24. package/dist/{config-cli-DCGgd-ZL.js → config-cli-Deoo6r2K.js} +1 -1
  25. package/dist/{configure-BybpK_1N.js → configure-BKHxUAAh.js} +3 -3
  26. package/dist/{configure-CItWwZwI.js → configure-D4f0P3bH.js} +3 -3
  27. package/dist/{deliver-qUx-eLKt.js → deliver-B0OUq6RP.js} +1 -1
  28. package/dist/{doctor-completion-BkwgaO4G.js → doctor-completion-gMWymNcA.js} +1 -1
  29. package/dist/{doctor-completion-Bf6dN4D-.js → doctor-completion-woDYSVtY.js} +1 -1
  30. package/dist/entry.js +1 -1
  31. package/dist/extensionAPI.js +2 -2
  32. package/dist/{gateway-cli-eNV6kb1V.js → gateway-cli-Bnh42-56.js} +85 -41
  33. package/dist/{gateway-cli-7CVmb3cX.js → gateway-cli-DsnkTUOp.js} +85 -41
  34. package/dist/{glass-ui-ws-i91Ms6ts.js → glass-ui-ws-0Y0KsBvU.js} +9 -9
  35. package/dist/{glass-ui-ws-B4fsBuHx.js → glass-ui-ws-uj3DRmL8.js} +9 -9
  36. package/dist/{health-C4tWTDu_.js → health-CcV5nKIK.js} +1 -1
  37. package/dist/{health-dA8r4WJ4.js → health-Dl2WRoTa.js} +1 -1
  38. package/dist/{hooks-cli-DYn9nXX0.js → hooks-cli-CTcHtm_0.js} +4 -4
  39. package/dist/{hooks-cli-uGLWBIcW.js → hooks-cli-DEJe3dUH.js} +4 -4
  40. package/dist/{image-C6rCON9L.js → image-BuVL0jHI.js} +1 -1
  41. package/dist/index.js +8 -8
  42. package/dist/llm-slug-generator.js +7 -7
  43. package/dist/{manager-DhGfNqfc.js → manager-9Mni2AA9.js} +1 -1
  44. package/dist/{manager-D6E6EGWa.js → manager-C-H0XXJq.js} +1 -1
  45. package/dist/{manager-BaSutzfz.js → manager-CjW8kPVc.js} +1 -1
  46. package/dist/{manager-CgQo1mIM.js → manager-QPF0UtOC.js} +1 -1
  47. package/dist/{memory-cli-BMb31chU.js → memory-cli-BTByRgM0.js} +3 -3
  48. package/dist/{memory-cli-lJe72a5i.js → memory-cli-OW9XfyYu.js} +3 -3
  49. package/dist/{models-BITN17gY.js → models-Q1jV8ArL.js} +2 -2
  50. package/dist/{models-cli-CHjxevMe.js → models-cli-Cy6H1sFq.js} +5 -5
  51. package/dist/{models-cli-C6JJWWoI.js → models-cli-pfVmmgpv.js} +4 -4
  52. package/dist/{onboard-C8Si08MS.js → onboard-CvpyaUQd.js} +2 -2
  53. package/dist/{onboard-DdJV-Doq.js → onboard-EL8foMiP.js} +2 -2
  54. package/dist/{onboard-channels-Cb-bemSg.js → onboard-channels-BRoSUijQ.js} +1 -1
  55. package/dist/{onboard-channels-PQP9wlk8.js → onboard-channels-Bupbm6zh.js} +1 -1
  56. package/dist/{onboarding-QAtuyHtA.js → onboarding-Ch8WSJ3j.js} +3 -3
  57. package/dist/{onboarding-CAaoPaVQ.js → onboarding-Dg5ydWSh.js} +3 -3
  58. package/dist/{onboarding.finalize-MuO2mvHv.js → onboarding.finalize-Bo8-8TtH.js} +7 -7
  59. package/dist/{onboarding.finalize-BhlQmJlX.js → onboarding.finalize-CCTaCp2s.js} +8 -8
  60. package/dist/{pi-embedded-BUYKq7Wv.js → pi-embedded-Bl3YkBkI.js} +149 -35
  61. package/dist/{pi-embedded-helpers-P13adotN.js → pi-embedded-helpers-D1_Sab0M.js} +4 -4
  62. package/dist/{plugin-registry-tXiHw0vr.js → plugin-registry-BVYZLxmo.js} +1 -1
  63. package/dist/{plugin-registry-DEhkDNDx.js → plugin-registry-Bn9Mj8mP.js} +1 -1
  64. package/dist/plugin-sdk/agents/pi-tools.read-edit-guard.d.ts +5 -0
  65. package/dist/plugin-sdk/agents/pi-tools.read-edit-tracker.d.ts +26 -0
  66. package/dist/plugin-sdk/{channel-web-C7aP_KKZ.js → channel-web-BhqGIC7q.js} +1 -1
  67. package/dist/plugin-sdk/index.js +3 -3
  68. package/dist/plugin-sdk/{manager-CvrDwB1Q.js → manager-DdOb0Em2.js} +1 -1
  69. package/dist/plugin-sdk/{reply-BI7Rf3_S.js → reply-Cjjf4VYT.js} +149 -35
  70. package/dist/plugin-sdk/{synthesis-B3z0Jqt1.js → synthesis-CZ8BYNXP.js} +2 -2
  71. package/dist/plugin-sdk/{web-D2WrY-DI.js → web-B8upqMUo.js} +3 -3
  72. package/dist/{plugins-cli-ByG6o7D2.js → plugins-cli-3h1N5N8n.js} +4 -4
  73. package/dist/{plugins-cli-D1vPxTOQ.js → plugins-cli-CYOQh2DM.js} +4 -4
  74. package/dist/{program-Q44fKoq6.js → program-D3_xE9BL.js} +9 -9
  75. package/dist/{program-context-C3QEc34t.js → program-context-COwsYCbf.js} +18 -18
  76. package/dist/{prompt-select-styled-DBVeLysq.js → prompt-select-styled-D88AWCeM.js} +6 -6
  77. package/dist/{prompt-select-styled-BSZrZcW2.js → prompt-select-styled-rKPBDv7n.js} +6 -6
  78. package/dist/{provider-auth-helpers-Bm4cf-Ms.js → provider-auth-helpers-CyZyVx-V.js} +1 -1
  79. package/dist/{provider-auth-helpers-rH91VXG-.js → provider-auth-helpers-rff7s_gC.js} +1 -1
  80. package/dist/{push-apns-CRD9IH1s.js → push-apns-BNzgqUl3.js} +1 -1
  81. package/dist/{push-apns-Cj10sUbK.js → push-apns-d9qKGKPe.js} +1 -1
  82. package/dist/{pw-ai-CeWN4iD9.js → pw-ai-DWkC5eGA.js} +1 -1
  83. package/dist/{register.agent-DGDnsvVd.js → register.agent-BjaqQA02.js} +7 -7
  84. package/dist/{register.agent-Dfu85lRL.js → register.agent-D_MON8p-.js} +8 -8
  85. package/dist/{register.configure-FCTbPCwe.js → register.configure-BWkkQhpH.js} +8 -8
  86. package/dist/{register.configure-BcdyiQui.js → register.configure-UJi9sfNv.js} +8 -8
  87. package/dist/{register.maintenance-Y8P9AnLe.js → register.maintenance-ChskcWGz.js} +10 -10
  88. package/dist/{register.maintenance-DvDwpW6B.js → register.maintenance-DJptz3DR.js} +9 -9
  89. package/dist/{register.message-mTqwOntI.js → register.message-BDTsiyrW.js} +4 -4
  90. package/dist/{register.message-C57ubt4f.js → register.message-CiadI_oS.js} +4 -4
  91. package/dist/{register.onboard-MIChlygg.js → register.onboard-BflOE1jy.js} +6 -6
  92. package/dist/{register.onboard-YCmMzAW-.js → register.onboard-KR_-4TLY.js} +6 -6
  93. package/dist/{register.setup-sQeN5xag.js → register.setup-Cl0sD25T.js} +6 -6
  94. package/dist/{register.setup-DzUZ2x6y.js → register.setup-W-oNfOp0.js} +6 -6
  95. package/dist/{register.status-health-sessions-DaPK2tow.js → register.status-health-sessions-CCQs235z.js} +5 -5
  96. package/dist/{register.status-health-sessions-DsptpS7K.js → register.status-health-sessions-CT_SmmOH.js} +5 -5
  97. package/dist/{register.subclis-17z5d7uO.js → register.subclis-ByZAz4st.js} +9 -9
  98. package/dist/{reply-2awhibgG.js → reply-CgyjcoxC.js} +148 -34
  99. package/dist/{run-main-CfVO6DFS.js → run-main-xmWpjZL9.js} +17 -17
  100. package/dist/{runner-D633VT13.js → runner-ecX1WzDt.js} +1 -1
  101. package/dist/{server-methods-Bdgs89ve.js → server-methods-CBn954AO.js} +8 -8
  102. package/dist/{server-methods-D_g3GJhv.js → server-methods-DDpCXuOU.js} +8 -8
  103. package/dist/{server-node-events-BZN3RZ8H.js → server-node-events-BBEMSKVE.js} +4 -4
  104. package/dist/{server-node-events-Cvgmf8fS.js → server-node-events-BUEZ3py9.js} +4 -4
  105. package/dist/{status-CwqBkxi2.js → status-BjMiGq0n.js} +1 -1
  106. package/dist/{status-Dkr4Celv.js → status-CG5iHUJ6.js} +3 -3
  107. package/dist/{status-DcxWlds6.js → status-CpvzoCOC.js} +1 -1
  108. package/dist/{status-Ca_VZkZV.js → status-PfvX-BjO.js} +3 -3
  109. package/dist/{subagent-registry-CncIZPCd.js → subagent-registry-D0IYimMO.js} +148 -34
  110. package/dist/{synthesis-CxvpkXBW.js → synthesis-BVZ5RJLg.js} +3 -3
  111. package/dist/{synthesis-lD0Vb_9q.js → synthesis-CBwKBuLy.js} +7 -7
  112. package/dist/{synthesis-CTC73eY9.js → synthesis-D55QrjAJ.js} +3 -3
  113. package/dist/{synthesis-DOmJ2Gay.js → synthesis-itgrzpuj.js} +2 -2
  114. package/dist/{unified-runner-JQaSdhSg.js → unified-runner-BhnvjB1J.js} +163 -49
  115. package/dist/{update-cli-BO1uw-SU.js → update-cli-CL1_LPBS.js} +10 -10
  116. package/dist/{update-cli-CplnPSZ5.js → update-cli-D3K4mhrr.js} +9 -9
  117. package/dist/{update-runner-Df4mjndq.js → update-runner-Bmq67eos.js} +1 -1
  118. package/dist/{update-runner-DFp9PDMN.js → update-runner-DMucmRlv.js} +1 -1
  119. package/dist/{web-CCEVjDcU.js → web-B0lZdBBl.js} +3 -3
  120. package/dist/{web-CZoQ03ZE.js → web-C1HPdY_D.js} +2 -2
  121. package/dist/{web-BEDc6iEz.js → web-DCO_YCRw.js} +7 -7
  122. package/dist/{web-Dn33Cd3-.js → web-DmgQtLx3.js} +4 -4
  123. package/extensions/bluebubbles/package.json +1 -1
  124. package/extensions/copilot-proxy/package.json +1 -1
  125. package/extensions/diagnostics-otel/package.json +1 -1
  126. package/extensions/discord/package.json +1 -1
  127. package/extensions/feishu/package.json +1 -1
  128. package/extensions/google-antigravity-auth/package.json +1 -1
  129. package/extensions/google-gemini-cli-auth/package.json +1 -1
  130. package/extensions/googlechat/package.json +1 -1
  131. package/extensions/imessage/package.json +1 -1
  132. package/extensions/irc/package.json +1 -1
  133. package/extensions/learning-loop/package.json +1 -1
  134. package/extensions/line/package.json +1 -1
  135. package/extensions/llm-task/package.json +1 -1
  136. package/extensions/matrix/CHANGELOG.md +6 -0
  137. package/extensions/matrix/package.json +1 -1
  138. package/extensions/mattermost/package.json +1 -1
  139. package/extensions/memory-core/package.json +1 -1
  140. package/extensions/memory-lancedb/package.json +1 -1
  141. package/extensions/minimax-portal-auth/package.json +1 -1
  142. package/extensions/msteams/CHANGELOG.md +6 -0
  143. package/extensions/msteams/package.json +1 -1
  144. package/extensions/nextcloud-talk/package.json +1 -1
  145. package/extensions/nostr/CHANGELOG.md +6 -0
  146. package/extensions/nostr/package.json +1 -1
  147. package/extensions/open-prose/package.json +1 -1
  148. package/extensions/outlook/package.json +1 -1
  149. package/extensions/pipeline/package.json +1 -1
  150. package/extensions/signal/package.json +1 -1
  151. package/extensions/slack/package.json +1 -1
  152. package/extensions/telegram/package.json +1 -1
  153. package/extensions/tlon/package.json +1 -1
  154. package/extensions/twitch/CHANGELOG.md +6 -0
  155. package/extensions/twitch/package.json +1 -1
  156. package/extensions/voice-call/CHANGELOG.md +6 -0
  157. package/extensions/voice-call/package.json +1 -1
  158. package/extensions/whatsapp/package.json +1 -1
  159. package/extensions/zalo/CHANGELOG.md +6 -0
  160. package/extensions/zalo/package.json +1 -1
  161. package/extensions/zalouser/CHANGELOG.md +6 -0
  162. package/extensions/zalouser/package.json +1 -1
  163. package/package.json +1 -1
@@ -53,7 +53,7 @@ import { S as minimaxUnderstandImage, _ as stripThinkingTagsFromText, a as decod
53
53
  import { n as discoverModels, t as discoverAuthStorage } from "./pi-model-discovery-LbcEa65a.js";
54
54
  import { c as normalizeExtraMemoryPaths, m as runTasksWithConcurrency, s as listMemoryFiles } from "./internal-Qi-tyvHh.js";
55
55
  import { r as getDiagnosticSessionState } from "./diagnostic-session-state-Wd5tNeQG.js";
56
- import { a as resolveMemorySearchConfig, i as resolveOllamaBaseUrl, r as probeOllamaEmbeddingModels, t as MemoryIndexManager } from "./manager-CvrDwB1Q.js";
56
+ import { a as resolveMemorySearchConfig, i as resolveOllamaBaseUrl, r as probeOllamaEmbeddingModels, t as MemoryIndexManager } from "./manager-DdOb0Em2.js";
57
57
  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-BuYpmEx-.js";
58
58
  import { c as signalRpcRequest, l as streamSignalEvents, n as sendReadReceiptSignal, o as resolveSignalRpcContext, r as sendTypingSignal, s as signalCheck, t as sendMessageSignal } from "./send-CGhw9mO3.js";
59
59
  import { t as makeProxyFetch } from "./proxy-D27OUbrW.js";
@@ -11638,7 +11638,7 @@ async function getMemorySearchManager(params) {
11638
11638
  const wrapper = new FallbackMemoryManager({
11639
11639
  primary,
11640
11640
  fallbackFactory: async () => {
11641
- const { MemoryIndexManager } = await import("./manager-CvrDwB1Q.js").then((n) => n.n);
11641
+ const { MemoryIndexManager } = await import("./manager-DdOb0Em2.js").then((n) => n.n);
11642
11642
  return await MemoryIndexManager.get(params);
11643
11643
  }
11644
11644
  }, () => QMD_MANAGER_CACHE.delete(cacheKey));
@@ -11651,7 +11651,7 @@ async function getMemorySearchManager(params) {
11651
11651
  }
11652
11652
  }
11653
11653
  try {
11654
- const { MemoryIndexManager } = await import("./manager-CvrDwB1Q.js").then((n) => n.n);
11654
+ const { MemoryIndexManager } = await import("./manager-DdOb0Em2.js").then((n) => n.n);
11655
11655
  return { manager: await MemoryIndexManager.get(params) };
11656
11656
  } catch (err) {
11657
11657
  return {
@@ -14964,16 +14964,16 @@ function shouldComputeCommandAuthorized(text, cfg, options) {
14964
14964
 
14965
14965
  //#endregion
14966
14966
  //#region src/channels/sender-label.ts
14967
- function normalize(value) {
14967
+ function normalize$1(value) {
14968
14968
  const trimmed = value?.trim();
14969
14969
  return trimmed ? trimmed : void 0;
14970
14970
  }
14971
14971
  function resolveSenderLabel(params) {
14972
- const name = normalize(params.name);
14973
- const username = normalize(params.username);
14974
- const tag = normalize(params.tag);
14975
- const e164 = normalize(params.e164);
14976
- const id = normalize(params.id);
14972
+ const name = normalize$1(params.name);
14973
+ const username = normalize$1(params.username);
14974
+ const tag = normalize$1(params.tag);
14975
+ const e164 = normalize$1(params.e164);
14976
+ const id = normalize$1(params.id);
14977
14977
  const display = name ?? username ?? tag ?? "";
14978
14978
  const idPart = e164 ?? id ?? "";
14979
14979
  if (display && idPart && display !== idPart) return `${display} (${idPart})`;
@@ -36901,7 +36901,7 @@ async function runAgentTurn(params) {
36901
36901
  function createDefaultDeps() {
36902
36902
  return {
36903
36903
  sendMessageWhatsApp: async (...args) => {
36904
- const { sendMessageWhatsApp } = await import("./web-D2WrY-DI.js");
36904
+ const { sendMessageWhatsApp } = await import("./web-B8upqMUo.js");
36905
36905
  return await sendMessageWhatsApp(...args);
36906
36906
  },
36907
36907
  sendMessageTelegram: async (...args) => {
@@ -54339,7 +54339,7 @@ function loadWebLoginQr() {
54339
54339
  return webLoginQrPromise;
54340
54340
  }
54341
54341
  function loadWebChannel() {
54342
- webChannelPromise ??= import("./web-D2WrY-DI.js");
54342
+ webChannelPromise ??= import("./web-B8upqMUo.js");
54343
54343
  return webChannelPromise;
54344
54344
  }
54345
54345
  function loadWhatsAppActions() {
@@ -59821,6 +59821,91 @@ function isToolAllowedByPolicies(name, policies) {
59821
59821
  return policies.every((policy) => isToolAllowedByPolicyName(name, policy));
59822
59822
  }
59823
59823
 
59824
+ //#endregion
59825
+ //#region src/agents/pi-tools.read-edit-guard.ts
59826
+ const RETRY_GUIDANCE_SUFFIX$1 = " Read the file first, then retry the edit.";
59827
+ function readGuardError(filePath) {
59828
+ return /* @__PURE__ */ new Error(`Edit refused: '${filePath}' has not been read in this session. The edit tool requires the agent to read the file first so oldText can match real content rather than hallucinated content.${RETRY_GUIDANCE_SUFFIX$1}`);
59829
+ }
59830
+ function extractPath(args) {
59831
+ if (!args || typeof args !== "object") return;
59832
+ const record = args;
59833
+ const candidate = record.path ?? record.file_path;
59834
+ if (typeof candidate !== "string") return;
59835
+ const trimmed = candidate.trim();
59836
+ return trimmed.length > 0 ? trimmed : void 0;
59837
+ }
59838
+ function wrapReadToolWithTracker(tool, tracker) {
59839
+ return {
59840
+ ...tool,
59841
+ execute: async (toolCallId, args, signal, onUpdate) => {
59842
+ const result = await tool.execute(toolCallId, args, signal, onUpdate);
59843
+ if (!(!!result && typeof result === "object" && result.isError === true)) {
59844
+ const filePath = extractPath(args);
59845
+ if (filePath) tracker.recordRead(filePath);
59846
+ }
59847
+ return result;
59848
+ }
59849
+ };
59850
+ }
59851
+ function wrapWriteToolWithTracker(tool, tracker) {
59852
+ return {
59853
+ ...tool,
59854
+ execute: async (toolCallId, args, signal, onUpdate) => {
59855
+ const result = await tool.execute(toolCallId, args, signal, onUpdate);
59856
+ if (!(!!result && typeof result === "object" && result.isError === true)) {
59857
+ const filePath = extractPath(args);
59858
+ if (filePath) tracker.recordWrite(filePath);
59859
+ }
59860
+ return result;
59861
+ }
59862
+ };
59863
+ }
59864
+ function wrapEditToolWithGuard(tool, tracker) {
59865
+ return {
59866
+ ...tool,
59867
+ execute: async (toolCallId, args, signal, onUpdate) => {
59868
+ const filePath = extractPath(args);
59869
+ if (filePath && !tracker.hasObserved(filePath)) throw readGuardError(filePath);
59870
+ return tool.execute(toolCallId, args, signal, onUpdate);
59871
+ }
59872
+ };
59873
+ }
59874
+
59875
+ //#endregion
59876
+ //#region src/agents/pi-tools.read-edit-tracker.ts
59877
+ function normalize(filePath, workspaceRoot) {
59878
+ if (!workspaceRoot) return filePath;
59879
+ if (path.isAbsolute(filePath)) return path.normalize(filePath);
59880
+ return path.resolve(workspaceRoot, filePath);
59881
+ }
59882
+ function createReadEditTracker(opts = {}) {
59883
+ const observed = /* @__PURE__ */ new Map();
59884
+ const record = (filePath, kind) => {
59885
+ if (typeof filePath !== "string" || !filePath.trim()) return;
59886
+ const key = normalize(filePath.trim(), opts.workspaceRoot);
59887
+ const prior = observed.get(key);
59888
+ if (kind === "written" || prior !== "written") observed.set(key, kind);
59889
+ };
59890
+ return {
59891
+ recordRead: (filePath) => record(filePath, "read"),
59892
+ recordWrite: (filePath) => record(filePath, "written"),
59893
+ observation: (filePath) => {
59894
+ if (typeof filePath !== "string" || !filePath.trim()) return null;
59895
+ const key = normalize(filePath.trim(), opts.workspaceRoot);
59896
+ return observed.get(key) ?? null;
59897
+ },
59898
+ hasObserved: (filePath) => {
59899
+ if (typeof filePath !== "string" || !filePath.trim()) return false;
59900
+ const key = normalize(filePath.trim(), opts.workspaceRoot);
59901
+ return observed.has(key);
59902
+ },
59903
+ reset: () => {
59904
+ observed.clear();
59905
+ }
59906
+ };
59907
+ }
59908
+
59824
59909
  //#endregion
59825
59910
  //#region src/media/sniff-mime-from-base64.ts
59826
59911
  async function sniffMimeFromBase64(base64) {
@@ -62832,8 +62917,39 @@ const GatewayToolSchema = Type.Object({
62832
62917
  baseHash: Type.Optional(Type.String()),
62833
62918
  sessionKey: Type.Optional(Type.String()),
62834
62919
  note: Type.Optional(Type.String()),
62835
- restartDelayMs: Type.Optional(Type.Number())
62920
+ restartDelayMs: Type.Optional(Type.Number()),
62921
+ userRequestAcknowledgment: Type.Optional(Type.String())
62836
62922
  });
62923
+ /** Actions that mutate gateway state and require explicit user authorization. */
62924
+ const DESTRUCTIVE_ACTIONS = new Set([
62925
+ "config.apply",
62926
+ "config.patch",
62927
+ "update.run"
62928
+ ]);
62929
+ /** Minimum length for a meaningful authorization message. */
62930
+ const MIN_AUTHORIZATION_LENGTH = 10;
62931
+ /**
62932
+ * Asserts the user's request was explicitly acknowledged for destructive
62933
+ * actions. Throws a descriptive error if the acknowledgment is missing,
62934
+ * empty, or trivially short.
62935
+ *
62936
+ * NOTE: This is defense-in-depth, not a hard barrier. A determined model
62937
+ * could still populate the field with fabricated text. The barrier exists
62938
+ * to:
62939
+ * 1. Force the agent to deliberately compose a justification (vs. blind
62940
+ * tool invocation).
62941
+ * 2. Provide an audit trail (the acknowledgment is logged with the tool
62942
+ * call args).
62943
+ * 3. Surface for future tightening (e.g., matching against real session
62944
+ * history).
62945
+ */
62946
+ function assertUserAuthorization(action, params) {
62947
+ if (!DESTRUCTIVE_ACTIONS.has(action)) return;
62948
+ const ack = params.userRequestAcknowledgment;
62949
+ const trimmed = typeof ack === "string" ? ack.trim() : "";
62950
+ if (!trimmed) throw new Error(`Action '${action}' requires an explicit user authorization. Pass userRequestAcknowledgment with a paraphrase of the user's request (e.g., "user said: please update Symi"). If the user did not explicitly request this action, ask them first instead of invoking it.`);
62951
+ if (trimmed.length < MIN_AUTHORIZATION_LENGTH) throw new Error(`Action '${action}' requires a substantive userRequestAcknowledgment (minimum ${MIN_AUTHORIZATION_LENGTH} characters describing the user's request). Received: ${JSON.stringify(trimmed)}.`);
62952
+ }
62837
62953
  function createGatewayTool(opts) {
62838
62954
  return {
62839
62955
  label: "Gateway",
@@ -62844,6 +62960,7 @@ function createGatewayTool(opts) {
62844
62960
  execute: async (_toolCallId, args) => {
62845
62961
  const params = args;
62846
62962
  const action = readStringParam(params, "action", { required: true });
62963
+ assertUserAuthorization(action, params);
62847
62964
  if (action === "restart") {
62848
62965
  if (!isRestartEnabled(opts?.config)) throw new Error("Gateway restart is disabled (commands.restart=false).");
62849
62966
  const sessionKey = typeof params.sessionKey === "string" && params.sessionKey.trim() ? params.sessionKey.trim() : opts?.agentSessionKey?.trim() || void 0;
@@ -70587,33 +70704,34 @@ function createSymiCodingTools(options) {
70587
70704
  });
70588
70705
  if (sandboxRoot && !sandboxFsBridge) throw new Error("Sandbox filesystem bridge is unavailable.");
70589
70706
  const imageSanitization = resolveImageSanitizationLimits(options?.config);
70707
+ const readEditTracker = createReadEditTracker({ workspaceRoot: sandboxRoot ?? workspaceRoot });
70590
70708
  const base = codingTools.flatMap((tool) => {
70591
70709
  if (tool.name === readTool.name) {
70592
70710
  if (sandboxRoot) {
70593
- const sandboxed = createSandboxedReadTool({
70711
+ const tracked = wrapReadToolWithTracker(createSandboxedReadTool({
70594
70712
  root: sandboxRoot,
70595
70713
  bridge: sandboxFsBridge,
70596
70714
  modelContextWindowTokens: options?.modelContextWindowTokens,
70597
70715
  imageSanitization
70598
- });
70599
- return [workspaceOnly ? wrapToolWorkspaceRootGuard(sandboxed, sandboxRoot) : sandboxed];
70716
+ }), readEditTracker);
70717
+ return [workspaceOnly ? wrapToolWorkspaceRootGuard(tracked, sandboxRoot) : tracked];
70600
70718
  }
70601
- const wrapped = createSymiReadTool(createReadTool(workspaceRoot), {
70719
+ const tracked = wrapReadToolWithTracker(createSymiReadTool(createReadTool(workspaceRoot), {
70602
70720
  modelContextWindowTokens: options?.modelContextWindowTokens,
70603
70721
  imageSanitization
70604
- });
70605
- return [workspaceOnly ? wrapToolWorkspaceRootGuard(wrapped, workspaceRoot) : wrapped];
70722
+ }), readEditTracker);
70723
+ return [workspaceOnly ? wrapToolWorkspaceRootGuard(tracked, workspaceRoot) : tracked];
70606
70724
  }
70607
70725
  if (tool.name === "bash" || tool.name === execToolName) return [];
70608
70726
  if (tool.name === "write") {
70609
70727
  if (sandboxRoot) return [];
70610
- const wrapped = wrapToolParamNormalization(createWriteTool(workspaceRoot), CLAUDE_PARAM_GROUPS.write);
70611
- return [workspaceOnly ? wrapToolWorkspaceRootGuard(wrapped, workspaceRoot) : wrapped];
70728
+ const tracked = wrapWriteToolWithTracker(wrapToolParamNormalization(createWriteTool(workspaceRoot), CLAUDE_PARAM_GROUPS.write), readEditTracker);
70729
+ return [workspaceOnly ? wrapToolWorkspaceRootGuard(tracked, workspaceRoot) : tracked];
70612
70730
  }
70613
70731
  if (tool.name === "edit") {
70614
70732
  if (sandboxRoot) return [];
70615
- const wrapped = wrapToolParamNormalization(createEditTool(workspaceRoot), CLAUDE_PARAM_GROUPS.edit);
70616
- return [workspaceOnly ? wrapToolWorkspaceRootGuard(wrapped, workspaceRoot) : wrapped];
70733
+ const guarded = wrapEditToolWithGuard(wrapToolParamNormalization(createEditTool(workspaceRoot), CLAUDE_PARAM_GROUPS.edit), readEditTracker);
70734
+ return [workspaceOnly ? wrapToolWorkspaceRootGuard(guarded, workspaceRoot) : guarded];
70617
70735
  }
70618
70736
  return [tool];
70619
70737
  });
@@ -70656,22 +70774,18 @@ function createSymiCodingTools(options) {
70656
70774
  } : void 0,
70657
70775
  workspaceOnly: applyPatchWorkspaceOnly
70658
70776
  });
70777
+ const sandboxedEditTool = sandboxRoot ? wrapEditToolWithGuard(createSandboxedEditTool({
70778
+ root: sandboxRoot,
70779
+ bridge: sandboxFsBridge
70780
+ }), readEditTracker) : null;
70781
+ const sandboxedWriteTool = sandboxRoot ? wrapWriteToolWithTracker(createSandboxedWriteTool({
70782
+ root: sandboxRoot,
70783
+ bridge: sandboxFsBridge
70784
+ }), readEditTracker) : null;
70659
70785
  const withHooks = applyToolPolicyPipeline({
70660
70786
  tools: applyOwnerOnlyToolPolicy([
70661
70787
  ...base,
70662
- ...sandboxRoot ? allowWorkspaceWrites ? [workspaceOnly ? wrapToolWorkspaceRootGuard(createSandboxedEditTool({
70663
- root: sandboxRoot,
70664
- bridge: sandboxFsBridge
70665
- }), sandboxRoot) : createSandboxedEditTool({
70666
- root: sandboxRoot,
70667
- bridge: sandboxFsBridge
70668
- }), workspaceOnly ? wrapToolWorkspaceRootGuard(createSandboxedWriteTool({
70669
- root: sandboxRoot,
70670
- bridge: sandboxFsBridge
70671
- }), sandboxRoot) : createSandboxedWriteTool({
70672
- root: sandboxRoot,
70673
- bridge: sandboxFsBridge
70674
- })] : [] : [],
70788
+ ...sandboxRoot ? allowWorkspaceWrites && sandboxedEditTool && sandboxedWriteTool ? [workspaceOnly ? wrapToolWorkspaceRootGuard(sandboxedEditTool, sandboxRoot) : sandboxedEditTool, workspaceOnly ? wrapToolWorkspaceRootGuard(sandboxedWriteTool, sandboxRoot) : sandboxedWriteTool] : [] : [],
70675
70789
  ...applyPatchTool ? [applyPatchTool] : [],
70676
70790
  execTool,
70677
70791
  processTool,
@@ -1,5 +1,5 @@
1
1
  import "./accounts-D9zGZU5t.js";
2
- import { u as runAgentTurn } from "./reply-BI7Rf3_S.js";
2
+ import { u as runAgentTurn } from "./reply-Cjjf4VYT.js";
3
3
  import "./paths-DR2yt_mP.js";
4
4
  import "./github-copilot-token-D9X2phUj.js";
5
5
  import "./plugins-BbAvhC25.js";
@@ -49,7 +49,7 @@ import "./image-DFyINnvE.js";
49
49
  import "./pi-model-discovery-LbcEa65a.js";
50
50
  import "./api-key-rotation-CBsLb_4V.js";
51
51
  import "./diagnostic-session-state-Wd5tNeQG.js";
52
- import "./manager-CvrDwB1Q.js";
52
+ import "./manager-DdOb0Em2.js";
53
53
  import "./sqlite-CmVrFEYD.js";
54
54
  import "./commands-registry-BuYpmEx-.js";
55
55
  import "./send-CGhw9mO3.js";
@@ -1,5 +1,5 @@
1
1
  import { a as WA_WEB_AUTH_DIR, g as webAuthExists, s as logWebSelfId, u as pickWebChannel } from "./accounts-D9zGZU5t.js";
2
- import "./reply-BI7Rf3_S.js";
2
+ import "./reply-Cjjf4VYT.js";
3
3
  import "./paths-DR2yt_mP.js";
4
4
  import "./github-copilot-token-D9X2phUj.js";
5
5
  import "./plugins-BbAvhC25.js";
@@ -45,12 +45,12 @@ import "./pi-embedded-helpers-BL7ZRhGv.js";
45
45
  import "./paths-A0xdf3yk.js";
46
46
  import "./diagnostic-_oc91gNi.js";
47
47
  import "./store-Do3t33-c.js";
48
- import { n as monitorWebInbox, t as monitorWebChannel } from "./channel-web-C7aP_KKZ.js";
48
+ import { n as monitorWebInbox, t as monitorWebChannel } from "./channel-web-BhqGIC7q.js";
49
49
  import "./image-DFyINnvE.js";
50
50
  import "./pi-model-discovery-LbcEa65a.js";
51
51
  import "./api-key-rotation-CBsLb_4V.js";
52
52
  import "./diagnostic-session-state-Wd5tNeQG.js";
53
- import "./manager-CvrDwB1Q.js";
53
+ import "./manager-DdOb0Em2.js";
54
54
  import "./sqlite-CmVrFEYD.js";
55
55
  import "./commands-registry-BuYpmEx-.js";
56
56
  import "./send-CGhw9mO3.js";
@@ -14,7 +14,7 @@ import "./client-CJIMV1WD.js";
14
14
  import "./call-M4YyUnwu.js";
15
15
  import "./message-channel-C9dERklz.js";
16
16
  import "./pairing-token-Byh6drgn.js";
17
- import "./subagent-registry-CncIZPCd.js";
17
+ import "./subagent-registry-D0IYimMO.js";
18
18
  import "./sessions-BPD85pWA.js";
19
19
  import "./tokens-Csntmwwn.js";
20
20
  import "./plugins-CwSlLxM8.js";
@@ -52,8 +52,8 @@ import "./tool-images-CVLISeRT.js";
52
52
  import "./thinking-8sKPnzpp.js";
53
53
  import "./models-config-J1x_DaPn.js";
54
54
  import "./reply-prefix-BUN71nd5.js";
55
- import "./memory-cli-lJe72a5i.js";
56
- import "./manager-CgQo1mIM.js";
55
+ import "./memory-cli-OW9XfyYu.js";
56
+ import "./manager-QPF0UtOC.js";
57
57
  import "./gemini-auth-DEakvf-D.js";
58
58
  import "./retry-C4Q_VPOo.js";
59
59
  import "./sqlite-BP8tiuca.js";
@@ -103,7 +103,7 @@ import "./npm-registry-spec-PuS2I1Em.js";
103
103
  import "./skill-scanner-BV3QHmsf.js";
104
104
  import { i as resolvePluginInstallDir, n as installPluginFromNpmSpec, r as installPluginFromPath, t as recordPluginInstall } from "./installs-B4sNNRaW.js";
105
105
  import { t as renderTable } from "./table-Bka4fasy.js";
106
- import { t as buildPluginStatusReport } from "./status-DcxWlds6.js";
106
+ import { t as buildPluginStatusReport } from "./status-CpvzoCOC.js";
107
107
  import { n as updateNpmInstalledPlugins } from "./update-DticqU4-.js";
108
108
  import os from "node:os";
109
109
  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, S as shortenHomePath, g as resolveConfigDir, x as shortenHomeInString, y as resolveUserPath } from "./utils-B-0b9bGM.js";
3
3
  import "./thinking-EAliFiVK.js";
4
- import "./reply-2awhibgG.js";
4
+ import "./reply-CgyjcoxC.js";
5
5
  import "./registry-Cja8eT7G.js";
6
6
  import { f as defaultRuntime } from "./subsystem-D9vIQve0.js";
7
7
  import "./exec-CWkblSrI.js";
@@ -60,8 +60,8 @@ import "./diagnostic-session-state-CUslJyKP.js";
60
60
  import "./send-DpMnSIi5.js";
61
61
  import "./model-ECsJuJew.js";
62
62
  import "./reply-prefix-CE2YmmsD.js";
63
- import "./memory-cli-BMb31chU.js";
64
- import "./manager-DhGfNqfc.js";
63
+ import "./memory-cli-BTByRgM0.js";
64
+ import "./manager-9Mni2AA9.js";
65
65
  import "./retry-BoS4e4X_.js";
66
66
  import "./sqlite-D55gRQbH.js";
67
67
  import "./target-errors-C9e6dMU_.js";
@@ -107,7 +107,7 @@ import "./npm-registry-spec-B98RgVZF.js";
107
107
  import "./skill-scanner-BTgjeQBf.js";
108
108
  import { i as resolvePluginInstallDir, n as installPluginFromNpmSpec, r as installPluginFromPath, t as recordPluginInstall } from "./installs-BPZKRjsO.js";
109
109
  import { t as renderTable } from "./table-BWuvjnmY.js";
110
- import { t as buildPluginStatusReport } from "./status-CwqBkxi2.js";
110
+ import { t as buildPluginStatusReport } from "./status-BjMiGq0n.js";
111
111
  import { n as updateNpmInstalledPlugins } from "./update-D4uLu0dv.js";
112
112
  import fs from "node:fs";
113
113
  import os from "node:os";
@@ -15,7 +15,7 @@ import "./client-CJIMV1WD.js";
15
15
  import "./call-M4YyUnwu.js";
16
16
  import "./message-channel-C9dERklz.js";
17
17
  import "./pairing-token-Byh6drgn.js";
18
- import "./subagent-registry-CncIZPCd.js";
18
+ import "./subagent-registry-D0IYimMO.js";
19
19
  import "./sessions-BPD85pWA.js";
20
20
  import "./tokens-Csntmwwn.js";
21
21
  import "./plugins-CwSlLxM8.js";
@@ -53,8 +53,8 @@ import "./tool-images-CVLISeRT.js";
53
53
  import "./thinking-8sKPnzpp.js";
54
54
  import "./models-config-J1x_DaPn.js";
55
55
  import "./reply-prefix-BUN71nd5.js";
56
- import "./memory-cli-lJe72a5i.js";
57
- import "./manager-CgQo1mIM.js";
56
+ import "./memory-cli-OW9XfyYu.js";
57
+ import "./manager-QPF0UtOC.js";
58
58
  import "./gemini-auth-DEakvf-D.js";
59
59
  import "./retry-C4Q_VPOo.js";
60
60
  import "./sqlite-BP8tiuca.js";
@@ -100,13 +100,13 @@ import "./prompt-style-BxVdnrLq.js";
100
100
  import "./pairing-labels-BHx_CdbP.js";
101
101
  import "./pi-tools.policy-o0ytjRqu.js";
102
102
  import "./catalog-KcLvtTfa.js";
103
- import "./plugin-registry-DEhkDNDx.js";
104
- import { n as resolveCliChannelOptions } from "./channel-options-C0v4BJgp.js";
105
- import { t as getSubCliCommandsWithSubcommands } from "./register.subclis-17z5d7uO.js";
106
- import { a as registerProgramCommands, r as getCoreCliCommandsWithSubcommands } from "./command-registry-uMOPbrbY.js";
103
+ import "./plugin-registry-Bn9Mj8mP.js";
104
+ import { n as resolveCliChannelOptions } from "./channel-options-Bqc2VCgt.js";
105
+ import { t as getSubCliCommandsWithSubcommands } from "./register.subclis-ByZAz4st.js";
106
+ import { a as registerProgramCommands, r as getCoreCliCommandsWithSubcommands } from "./command-registry-BiRjJ2Sy.js";
107
107
  import { r as setProgramContext } from "./program-context-DeZ44oQ9.js";
108
108
  import { t as forceFreePort } from "./ports-DQg7kV5s.js";
109
- import { n as formatCliBannerLine, r as hasEmittedCliBanner, t as emitCliBanner } from "./banner-S1NGA6-s.js";
109
+ import { n as formatCliBannerLine, r as hasEmittedCliBanner, t as emitCliBanner } from "./banner-Bf46tqiY.js";
110
110
  import { Command } from "commander";
111
111
 
112
112
  //#region src/cli/program/context.ts
@@ -214,7 +214,7 @@ function registerPreActionHooks(program, programVersion) {
214
214
  commandPath
215
215
  });
216
216
  if (PLUGIN_REQUIRED_COMMANDS.has(commandPath[0])) {
217
- const { ensurePluginRegistryLoaded } = await import("./plugin-registry-DEhkDNDx.js").then((n) => n.n);
217
+ const { ensurePluginRegistryLoaded } = await import("./plugin-registry-Bn9Mj8mP.js").then((n) => n.n);
218
218
  ensurePluginRegistryLoaded();
219
219
  }
220
220
  });
@@ -43,7 +43,7 @@ const entries = [
43
43
  description: "Run, inspect, and query the WebSocket Gateway",
44
44
  hasSubcommands: true,
45
45
  register: async (program) => {
46
- (await import("./gateway-cli-7CVmb3cX.js")).registerGatewayCli(program);
46
+ (await import("./gateway-cli-DsnkTUOp.js")).registerGatewayCli(program);
47
47
  }
48
48
  },
49
49
  {
@@ -75,7 +75,7 @@ const entries = [
75
75
  description: "Discover, scan, and configure models",
76
76
  hasSubcommands: true,
77
77
  register: async (program) => {
78
- (await import("./models-cli-C6JJWWoI.js")).registerModelsCli(program);
78
+ (await import("./models-cli-pfVmmgpv.js")).registerModelsCli(program);
79
79
  }
80
80
  },
81
81
  {
@@ -155,7 +155,7 @@ const entries = [
155
155
  description: "Manage internal agent hooks",
156
156
  hasSubcommands: true,
157
157
  register: async (program) => {
158
- (await import("./hooks-cli-uGLWBIcW.js")).registerHooksCli(program);
158
+ (await import("./hooks-cli-DEJe3dUH.js")).registerHooksCli(program);
159
159
  }
160
160
  },
161
161
  {
@@ -179,7 +179,7 @@ const entries = [
179
179
  description: "Secure DM pairing (approve inbound requests)",
180
180
  hasSubcommands: true,
181
181
  register: async (program) => {
182
- const { registerPluginCliCommands } = await import("./cli-Bx4RQCuK.js");
182
+ const { registerPluginCliCommands } = await import("./cli-BpQlSGVs.js");
183
183
  registerPluginCliCommands(program, await loadConfig());
184
184
  (await import("./pairing-cli-Cl4t3cDV.js")).registerPairingCli(program);
185
185
  }
@@ -189,8 +189,8 @@ const entries = [
189
189
  description: "Manage Symi plugins and extensions",
190
190
  hasSubcommands: true,
191
191
  register: async (program) => {
192
- (await import("./plugins-cli-D1vPxTOQ.js")).registerPluginsCli(program);
193
- const { registerPluginCliCommands } = await import("./cli-Bx4RQCuK.js");
192
+ (await import("./plugins-cli-CYOQh2DM.js")).registerPluginsCli(program);
193
+ const { registerPluginCliCommands } = await import("./cli-BpQlSGVs.js");
194
194
  registerPluginCliCommands(program, await loadConfig());
195
195
  }
196
196
  },
@@ -199,7 +199,7 @@ const entries = [
199
199
  description: "Manage connected chat channels (Telegram, Discord, etc.)",
200
200
  hasSubcommands: true,
201
201
  register: async (program) => {
202
- (await import("./channels-cli-BhNHckMo.js")).registerChannelsCli(program);
202
+ (await import("./channels-cli-BFJcNLbB.js")).registerChannelsCli(program);
203
203
  }
204
204
  },
205
205
  {
@@ -231,7 +231,7 @@ const entries = [
231
231
  description: "Update Symi and inspect update channel status",
232
232
  hasSubcommands: true,
233
233
  register: async (program) => {
234
- (await import("./update-cli-CplnPSZ5.js")).registerUpdateCli(program);
234
+ (await import("./update-cli-D3K4mhrr.js")).registerUpdateCli(program);
235
235
  }
236
236
  },
237
237
  {
@@ -239,7 +239,7 @@ const entries = [
239
239
  description: "Generate shell completion script",
240
240
  hasSubcommands: false,
241
241
  register: async (program) => {
242
- (await import("./completion-cli-DVD79pVj.js").then((n) => n.n)).registerCompletionCli(program);
242
+ (await import("./completion-cli-C8K5J1ld.js").then((n) => n.n)).registerCompletionCli(program);
243
243
  }
244
244
  }
245
245
  ];
@@ -302,7 +302,7 @@ const coreEntries = [
302
302
  hasSubcommands: false
303
303
  }],
304
304
  register: async ({ program }) => {
305
- (await import("./register.setup-DzUZ2x6y.js")).registerSetupCommand(program);
305
+ (await import("./register.setup-W-oNfOp0.js")).registerSetupCommand(program);
306
306
  }
307
307
  },
308
308
  {
@@ -312,7 +312,7 @@ const coreEntries = [
312
312
  hasSubcommands: false
313
313
  }],
314
314
  register: async ({ program }) => {
315
- (await import("./register.onboard-YCmMzAW-.js")).registerOnboardCommand(program);
315
+ (await import("./register.onboard-KR_-4TLY.js")).registerOnboardCommand(program);
316
316
  }
317
317
  },
318
318
  {
@@ -322,7 +322,7 @@ const coreEntries = [
322
322
  hasSubcommands: false
323
323
  }],
324
324
  register: async ({ program }) => {
325
- (await import("./register.configure-FCTbPCwe.js")).registerConfigureCommand(program);
325
+ (await import("./register.configure-BWkkQhpH.js")).registerConfigureCommand(program);
326
326
  }
327
327
  },
328
328
  {
@@ -332,7 +332,7 @@ const coreEntries = [
332
332
  hasSubcommands: true
333
333
  }],
334
334
  register: async ({ program }) => {
335
- (await import("./config-cli-DzudcNAD.js")).registerConfigCli(program);
335
+ (await import("./config-cli-BPPD3xqE.js")).registerConfigCli(program);
336
336
  }
337
337
  },
338
338
  {
@@ -359,7 +359,7 @@ const coreEntries = [
359
359
  }
360
360
  ],
361
361
  register: async ({ program }) => {
362
- (await import("./register.maintenance-DvDwpW6B.js")).registerMaintenanceCommands(program);
362
+ (await import("./register.maintenance-DJptz3DR.js")).registerMaintenanceCommands(program);
363
363
  }
364
364
  },
365
365
  {
@@ -369,7 +369,7 @@ const coreEntries = [
369
369
  hasSubcommands: true
370
370
  }],
371
371
  register: async ({ program, ctx }) => {
372
- (await import("./register.message-mTqwOntI.js")).registerMessageCommands(program, ctx);
372
+ (await import("./register.message-BDTsiyrW.js")).registerMessageCommands(program, ctx);
373
373
  }
374
374
  },
375
375
  {
@@ -379,7 +379,7 @@ const coreEntries = [
379
379
  hasSubcommands: true
380
380
  }],
381
381
  register: async ({ program }) => {
382
- (await import("./memory-cli-BMb31chU.js").then((n) => n.t)).registerMemoryCli(program);
382
+ (await import("./memory-cli-BTByRgM0.js").then((n) => n.t)).registerMemoryCli(program);
383
383
  }
384
384
  },
385
385
  {
@@ -393,7 +393,7 @@ const coreEntries = [
393
393
  hasSubcommands: true
394
394
  }],
395
395
  register: async ({ program, ctx }) => {
396
- (await import("./register.agent-DGDnsvVd.js")).registerAgentCommands(program, { agentChannelOptions: ctx.agentChannelOptions });
396
+ (await import("./register.agent-BjaqQA02.js")).registerAgentCommands(program, { agentChannelOptions: ctx.agentChannelOptions });
397
397
  }
398
398
  },
399
399
  {
@@ -415,7 +415,7 @@ const coreEntries = [
415
415
  }
416
416
  ],
417
417
  register: async ({ program }) => {
418
- (await import("./register.status-health-sessions-DsptpS7K.js")).registerStatusHealthSessionsCommands(program);
418
+ (await import("./register.status-health-sessions-CT_SmmOH.js")).registerStatusHealthSessionsCommands(program);
419
419
  }
420
420
  },
421
421
  {
@@ -8,15 +8,15 @@ import { t as buildWorkspaceSkillStatus } from "./skills-status-DODCG6UU.js";
8
8
  import { l as writeConfigFile, o as readConfigFileSnapshot } from "./config-DXt3pc08.js";
9
9
  import { n as callGateway, t as buildGatewayConnectionDetails } from "./call-M4YyUnwu.js";
10
10
  import { l as resolveGatewayBindHost, n as isLoopbackHost } from "./net-DZ5Ayk-W.js";
11
- import { bn as formatRemainingShort, m as loadSymiPlugins, vn as DEFAULT_OAUTH_WARN_MS, yn as buildAuthHealthSummary } from "./subagent-registry-CncIZPCd.js";
11
+ import { bn as formatRemainingShort, m as loadSymiPlugins, vn as DEFAULT_OAUTH_WARN_MS, yn as buildAuthHealthSummary } from "./subagent-registry-D0IYimMO.js";
12
12
  import { F as resolveMainSessionKey, H as cleanStaleLockFiles, o as loadSessionStore } from "./sessions-BPD85pWA.js";
13
13
  import { n as listChannelPlugins } from "./plugins-CwSlLxM8.js";
14
14
  import { D as DEFAULT_SANDBOX_COMMON_IMAGE, E as DEFAULT_SANDBOX_BROWSER_IMAGE, O as DEFAULT_SANDBOX_IMAGE, p as resolveSandboxScope } from "./sandbox-WWVXeHlA.js";
15
15
  import { a as resolveGatewayAuth } from "./auth-BfDMhFAj.js";
16
16
  import { i as formatPortDiagnostics, n as inspectPortUsage } from "./ports-2xFXbwLq.js";
17
17
  import { c as resolveStorePath, n as resolveSessionFilePath, s as resolveSessionTranscriptsDirForAgent } from "./paths-DNdWAq7b.js";
18
- import { i as resolveMemoryBackendConfig } from "./memory-cli-lJe72a5i.js";
19
- import { a as resolveMemorySearchConfig } from "./manager-CgQo1mIM.js";
18
+ import { i as resolveMemoryBackendConfig } from "./memory-cli-OW9XfyYu.js";
19
+ import { a as resolveMemorySearchConfig } from "./manager-QPF0UtOC.js";
20
20
  import { n as loadModelCatalog } from "./model-catalog-BuYrTTBn.js";
21
21
  import { c as resolveGatewayLaunchAgentLabel, d as resolveGatewaySystemdServiceName, f as resolveGatewayWindowsTaskName, m as resolveNodeLaunchAgentLabel } from "./constants-l9TQg-aP.js";
22
22
  import { h as randomToken, n as applyWizardMetadata, p as printWizardHeader, s as guardCancel } from "./onboard-helpers-DWDNKmkJ.js";
@@ -31,16 +31,16 @@ import { a as launchAgentPlistExists, i as isLaunchAgentLoaded, o as repairLaunc
31
31
  import { i as auditGatewayServiceConfig, n as renderSystemdUnavailableHints, o as needsNodeRuntimeMigration, r as SERVICE_AUDIT_CODES, s as formatRuntimeStatus, t as isSystemdUnavailableDetail } from "./systemd-hints-Ct8ebNeC.js";
32
32
  import { t as readLastGatewayErrorLine } from "./diagnostics-C6xPE2ln.js";
33
33
  import { n as renderGatewayServiceCleanupHints, t as findExtraGatewayServices } from "./inspect-ClE25QpT.js";
34
- import { r as healthCommand } from "./health-C4tWTDu_.js";
34
+ import { r as healthCommand } from "./health-CcV5nKIK.js";
35
35
  import { n as resolveControlUiDistIndexHealth, r as resolveControlUiDistIndexPathForRoot } from "./control-ui-assets-Clf7H-Sm.js";
36
36
  import { t as resolveDmAllowState } from "./dm-policy-shared-JiSNSaKz.js";
37
- import { t as runGatewayUpdate } from "./update-runner-Df4mjndq.js";
37
+ import { t as runGatewayUpdate } from "./update-runner-Bmq67eos.js";
38
38
  import { t as resolveAgentSessionDirs } from "./session-dirs-Dgz7kkUM.js";
39
39
  import { n as logConfigUpdated } from "./logging-PVQxLC6I.js";
40
40
  import { n as detectLegacyStateMigrations, r as runLegacyStateMigrations, t as loadAndMaybeMigrateDoctorConfig } from "./doctor-config-flow-B2dVxbL7.js";
41
41
  import { t as ensureSystemdUserLingerInteractive } from "./systemd-linger-ipoPa7o0.js";
42
42
  import { t as formatHealthCheckFailure } from "./health-format-DkjSgkDx.js";
43
- import { n as doctorShellCompletion } from "./doctor-completion-Bf6dN4D-.js";
43
+ import { n as doctorShellCompletion } from "./doctor-completion-woDYSVtY.js";
44
44
  import { execFile } from "node:child_process";
45
45
  import os from "node:os";
46
46
  import path from "node:path";