@symerian/symi 2.6.6 → 2.6.8

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-DPdRUY_O.js → agents-DUCHzmZ7.js} +4 -4
  2. package/dist/{agents.config-Cr6DcdaD.js → agents.config-CHQebF9q.js} +1 -1
  3. package/dist/{agents.config-DIumfxnN.js → agents.config-CwoBiqZ_.js} +1 -1
  4. package/dist/{auth-choice-C5etRQcH.js → auth-choice-B1zaWakt.js} +1 -1
  5. package/dist/{auth-choice-z3-Baeyd.js → auth-choice-DGzjLihE.js} +1 -1
  6. package/dist/{banner-om7BRUIc.js → banner-Dy01rdll.js} +1 -1
  7. package/dist/build-info.json +3 -3
  8. package/dist/bundled/boot-md/handler.js +1 -1
  9. package/dist/bundled/session-memory/handler.js +1 -1
  10. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  11. package/dist/{channel-options-BqnokE7_.js → channel-options-Ba5tfq9-.js} +1 -1
  12. package/dist/{channel-options-Cb1PgfNV.js → channel-options-Cte5qJHT.js} +1 -1
  13. package/dist/{channel-web-DztB2W6w.js → channel-web-NGDI-tJN.js} +1 -1
  14. package/dist/{channels-cli-xlZ2mjBu.js → channels-cli-BDlDCL3R.js} +4 -4
  15. package/dist/{channels-cli-R2PHQWVd.js → channels-cli-CgNtcB-z.js} +4 -4
  16. package/dist/{cli-DLly6H0w.js → cli-C2ZGBmO9.js} +1 -1
  17. package/dist/{cli-DNGrFH7L.js → cli-Da_Dnvvp.js} +1 -1
  18. package/dist/{command-registry-xEOR2NPq.js → command-registry-CLcFUFJs.js} +9 -9
  19. package/dist/{completion-cli-CRhFwMiA.js → completion-cli-BzXhONEe.js} +2 -2
  20. package/dist/{completion-cli-CFJbuU6i.js → completion-cli-MbaQCbTj.js} +1 -1
  21. package/dist/{config-cli-CbdeNt0M.js → config-cli-BHHGJx1I.js} +1 -1
  22. package/dist/{config-cli-BaH8OVQ-.js → config-cli-CT6Q4rhy.js} +1 -1
  23. package/dist/{configure-BmNOfGox.js → configure-BOLt9A-A.js} +3 -3
  24. package/dist/{configure-D5dSJprr.js → configure-CVcHuLVe.js} +3 -3
  25. package/dist/{doctor-completion-DCc4SxWN.js → doctor-completion-BZ-FYLu9.js} +1 -1
  26. package/dist/{doctor-completion-D0L7wK2h.js → doctor-completion-CislKWHy.js} +1 -1
  27. package/dist/entry.js +1 -1
  28. package/dist/extensionAPI.js +1 -1
  29. package/dist/{gateway-cli-DYXn5A0z.js → gateway-cli-2yQf_hKZ.js} +168 -35
  30. package/dist/{gateway-cli-zN6V2qw8.js → gateway-cli-Bzz6Rduw.js} +167 -34
  31. package/dist/{glass-ui-ws-Cj9wbO1L.js → glass-ui-ws-ibSNo7RU.js} +7 -7
  32. package/dist/{glass-ui-ws-B7V2wHEu.js → glass-ui-ws-uRv3KH-0.js} +7 -7
  33. package/dist/{health-DUKLANXu.js → health-CBwxQHlQ.js} +1 -1
  34. package/dist/{health-BPOuBmYt.js → health-D4ySlvOE.js} +1 -1
  35. package/dist/{hooks-cli-BF0mbqlZ.js → hooks-cli-BFN2xMj8.js} +2 -2
  36. package/dist/{hooks-cli-BpfIySkB.js → hooks-cli-CreZeBlG.js} +2 -2
  37. package/dist/index.js +6 -6
  38. package/dist/llm-slug-generator.js +1 -1
  39. package/dist/{models-Bt8lm_nD.js → models-Dk7Q5cSF.js} +2 -2
  40. package/dist/{models-cli-bHYoiL5x.js → models-cli-C9Y-HfLg.js} +2 -2
  41. package/dist/{models-cli-BmBmBUgl.js → models-cli-DzSb3Scm.js} +3 -3
  42. package/dist/{onboard-ttzux1w7.js → onboard-D_PsLQiw.js} +2 -2
  43. package/dist/{onboard-i7lit3dF.js → onboard-N-KB8jvT.js} +2 -2
  44. package/dist/{onboard-channels-DEFF3Rjo.js → onboard-channels-Bp74i8iG.js} +1 -1
  45. package/dist/{onboard-channels-D0RHtaJE.js → onboard-channels-VuJyK9g-.js} +1 -1
  46. package/dist/{onboarding-CAlILYcN.js → onboarding-CRAQ2s_3.js} +3 -3
  47. package/dist/{onboarding-By0D-QmK.js → onboarding-D1AsOvXd.js} +3 -3
  48. package/dist/{onboarding.finalize-DSNIp08z.js → onboarding.finalize-DLUoLFNl.js} +6 -6
  49. package/dist/{onboarding.finalize-BDmc4k2T.js → onboarding.finalize-ZYLgVmdn.js} +5 -5
  50. package/dist/{pi-embedded-BzE5v-JN.js → pi-embedded-BSoqm4lP.js} +47 -52
  51. package/dist/{plugin-registry-C1ghjhOE.js → plugin-registry-CTu9B9S3.js} +1 -1
  52. package/dist/{plugin-registry-CDIOKK_i.js → plugin-registry-DDIcHkNU.js} +1 -1
  53. package/dist/plugin-sdk/{accounts-BToL3HlP.js → accounts-BtaOa4z_.js} +1 -1
  54. package/dist/plugin-sdk/{accounts-D9zGZU5t.js → accounts-Ddm33hQm.js} +3 -3
  55. package/dist/plugin-sdk/{accounts-Dtszw3Zn.js → accounts-s-AdhXVR.js} +1 -1
  56. package/dist/plugin-sdk/{active-listener-bEk__wbB.js → active-listener-BXYeALs0.js} +1 -1
  57. package/dist/plugin-sdk/{agent-scope-C3gMMKCU.js → agent-scope-CYYpcO9W.js} +2 -2
  58. package/dist/plugin-sdk/agents/pi-tools.validate-wrapper.d.ts +8 -8
  59. package/dist/plugin-sdk/{api-key-rotation-CVBMpnPc.js → api-key-rotation-D_sMvI5W.js} +1 -1
  60. package/dist/plugin-sdk/{audio-preflight-DoQQKlxa.js → audio-preflight-VpItkiy3.js} +24 -24
  61. package/dist/plugin-sdk/{bindings-BbwoUGPx.js → bindings-C7hRtgYW.js} +2 -2
  62. package/dist/plugin-sdk/{channel-activity-Ji7f0gqq.js → channel-activity-DoC1xtDu.js} +1 -1
  63. package/dist/plugin-sdk/{channel-web-CxwLjrWk.js → channel-web-BmV3Tuy0.js} +22 -22
  64. package/dist/plugin-sdk/{chrome-C7c_0I5M.js → chrome-B7RdxmJ0.js} +3 -3
  65. package/dist/plugin-sdk/{chunk-jvk9axTQ.js → chunk-Dw2XBYXv.js} +1 -1
  66. package/dist/plugin-sdk/{command-format-DSdvQ_M5.js → command-format-GKSevep4.js} +1 -1
  67. package/dist/plugin-sdk/{commands-registry-CQFbmUMs.js → commands-registry-COIaslGl.js} +4 -4
  68. package/dist/plugin-sdk/{config-DDkdiUOR.js → config-KlTNfkFF.js} +9 -9
  69. package/dist/plugin-sdk/{deliver-BZ6iNLl7.js → deliver-BZ99UKQq.js} +10 -10
  70. package/dist/plugin-sdk/{diagnostic-mFf4i4G9.js → diagnostic-05pm5Rxi.js} +1 -1
  71. package/dist/plugin-sdk/{image-BOYy0Ump.js → image-CLOPx7yW.js} +4 -4
  72. package/dist/plugin-sdk/{image-ops-Bnp6LXEx.js → image-ops-BlQR__MN.js} +1 -1
  73. package/dist/plugin-sdk/index.js +53 -53
  74. package/dist/plugin-sdk/{ir-Fb3qpcis.js → ir-BJ6BHE5b.js} +4 -4
  75. package/dist/plugin-sdk/{local-roots-Ckk1QfzI.js → local-roots-BHLNSI8U.js} +3 -3
  76. package/dist/plugin-sdk/{login-Bh3DZPam.js → login-DQMXuxOk.js} +7 -7
  77. package/dist/plugin-sdk/{login-qr-DbR7odSr.js → login-qr-BjVZSoCi.js} +9 -9
  78. package/dist/plugin-sdk/{manager-DckktAQ3.js → manager-CBSBFuFz.js} +8 -8
  79. package/dist/plugin-sdk/{manifest-registry-B3ugY9-f.js → manifest-registry-CPnHl_K3.js} +1 -1
  80. package/dist/plugin-sdk/{markdown-tables-Dfaqilz6.js → markdown-tables-BoYFajMu.js} +1 -1
  81. package/dist/plugin-sdk/{message-channel-BdI5Ra9S.js → message-channel-COTAJzHd.js} +1 -1
  82. package/dist/plugin-sdk/{model-selection-OpU8HN50.js → model-selection-CsbEfrS0.js} +4 -4
  83. package/dist/plugin-sdk/{outbound-rF6G8Xpr.js → outbound-B0e8KdaR.js} +7 -7
  84. package/dist/plugin-sdk/{outbound-attachment-DnVQfTG2.js → outbound-attachment-CnslKL38.js} +2 -2
  85. package/dist/plugin-sdk/{pi-auth-json-CJk8t14T.js → pi-auth-json-qWi7ZIYV.js} +5 -5
  86. package/dist/plugin-sdk/{pi-embedded-helpers-BveUP4hk.js → pi-embedded-helpers-CW630epe.js} +17 -17
  87. package/dist/plugin-sdk/{plugins-BbAvhC25.js → plugins-BNByVCIH.js} +4 -4
  88. package/dist/plugin-sdk/{pw-ai-DjGUsee-.js → pw-ai-CnbPIPY9.js} +8 -8
  89. package/dist/plugin-sdk/{qmd-manager-mjKcdwVr.js → qmd-manager-CH0XbIHf.js} +4 -4
  90. package/dist/plugin-sdk/{registry--_pGht6S.js → registry-D0xTnUWt.js} +2 -2
  91. package/dist/plugin-sdk/{replies-fI39rPGa.js → replies-LLcQL3w6.js} +3 -3
  92. package/dist/plugin-sdk/{reply-CyZfsjrl.js → reply-LQcs9anV.js} +123 -128
  93. package/dist/plugin-sdk/{reply-prefix-BHuV5t70.js → reply-prefix-uxfMZW4p.js} +1 -1
  94. package/dist/plugin-sdk/{resolve-outbound-target-BkCUbYGV.js → resolve-outbound-target-BiyAyTWz.js} +2 -2
  95. package/dist/plugin-sdk/{resolve-route-D3JH_D2N.js → resolve-route-B3CCBumQ.js} +3 -3
  96. package/dist/plugin-sdk/{retry-ilSJqnz9.js → retry-CwQ_iIj8.js} +1 -1
  97. package/dist/plugin-sdk/{runner-BVqnEfNe.js → runner-CGBT7tgF.js} +9 -9
  98. package/dist/plugin-sdk/{send-BtANzsAo.js → send-B2CEnVLL.js} +6 -6
  99. package/dist/plugin-sdk/{send-BHbXh8Ly.js → send-C5h_YxNb.js} +7 -7
  100. package/dist/plugin-sdk/{send-D6LMZJ_h.js → send-CRsR8-vO.js} +10 -10
  101. package/dist/plugin-sdk/{send-Bxdu6ZZy.js → send-CjOBB3Vo.js} +10 -10
  102. package/dist/plugin-sdk/{send-BMfJIhCk.js → send-pYqe432l.js} +6 -6
  103. package/dist/plugin-sdk/{session-kI0tzViQ.js → session-BsOrxiMj.js} +4 -4
  104. package/dist/plugin-sdk/{skill-commands-DCNXVERE.js → skill-commands-ff_01_r3.js} +5 -5
  105. package/dist/plugin-sdk/{skills-B1GeRYlu.js → skills-_yTP47Cd.js} +7 -7
  106. package/dist/plugin-sdk/{sqlite-Cq_7Cg4E.js → sqlite-CxAR5ttJ.js} +1 -1
  107. package/dist/plugin-sdk/{store-Do3t33-c.js → store-BdrNabcU.js} +2 -2
  108. package/dist/plugin-sdk/{subsystem-Coz2AgU8.js → subsystem-B2uDN3TV.js} +1 -1
  109. package/dist/plugin-sdk/{tables-DR0NmBeH.js → tables-DNwXwNFa.js} +1 -1
  110. package/dist/plugin-sdk/{target-errors-B7YyMnIi.js → target-errors-Paro1BjP.js} +2 -2
  111. package/dist/plugin-sdk/{thinking-DCNUIAHY.js → thinking-CXqf7WTe.js} +5 -5
  112. package/dist/plugin-sdk/{tokens-CWMflosr.js → tokens-bC3UVmVH.js} +1 -1
  113. package/dist/plugin-sdk/{tool-images-D7Lno-TE.js → tool-images-HJ2sfZDV.js} +2 -2
  114. package/dist/plugin-sdk/{tool-loop-detection-DU5sTIKg.js → tool-loop-detection-at_K42K7.js} +2 -2
  115. package/dist/plugin-sdk/web-DvzecOyx.js +65 -0
  116. package/dist/plugin-sdk/{whatsapp-actions-CcBzDuL-.js → whatsapp-actions-DfseosPO.js} +21 -21
  117. package/dist/{plugins-cli-BFCJyRBX.js → plugins-cli-DJUkvonf.js} +2 -2
  118. package/dist/{plugins-cli-jv-Bqq1t.js → plugins-cli-DdfBwKlP.js} +2 -2
  119. package/dist/{program-sDlUcw2S.js → program-DyPb-tj_.js} +7 -7
  120. package/dist/{program-context-N9-4Ubpp.js → program-context-Bz_GuT_l.js} +17 -17
  121. package/dist/{prompt-select-styled-BtG_t1Tf.js → prompt-select-styled-BKnaBZhj.js} +4 -4
  122. package/dist/{prompt-select-styled-eBoNrCn6.js → prompt-select-styled-CghdSf8F.js} +4 -4
  123. package/dist/{provider-auth-helpers-CqDTEFnD.js → provider-auth-helpers-BdNgfdWd.js} +1 -1
  124. package/dist/{provider-auth-helpers-CfBPNN7J.js → provider-auth-helpers-CXKXgdFl.js} +1 -1
  125. package/dist/{push-apns-CVRC-O3Q.js → push-apns-A--Taj2b.js} +1 -1
  126. package/dist/{push-apns-CHIVwHRD.js → push-apns-Cdjd6L8R.js} +1 -1
  127. package/dist/{register.agent-B0ExzmtM.js → register.agent-BLWVTdIg.js} +6 -6
  128. package/dist/{register.agent-DD2QErXm.js → register.agent-C4tjED3B.js} +5 -5
  129. package/dist/{register.configure-ByNKeAo7.js → register.configure-De6KxZc8.js} +6 -6
  130. package/dist/{register.configure-DpHCcS5d.js → register.configure-DkNQpMco.js} +6 -6
  131. package/dist/{register.maintenance-BMrBjqU4.js → register.maintenance-B7dlUmZQ.js} +7 -7
  132. package/dist/{register.maintenance-_S91q7Rv.js → register.maintenance-el_O34pN.js} +8 -8
  133. package/dist/{register.message-DZ45n1GX.js → register.message-Bg38q7xU.js} +2 -2
  134. package/dist/{register.message-BveFb6IW.js → register.message-CNub6pDr.js} +2 -2
  135. package/dist/{register.onboard-CLGWOBoy.js → register.onboard-DUIvvhd3.js} +4 -4
  136. package/dist/{register.onboard-CUTbssYt.js → register.onboard-OXQpAbIU.js} +4 -4
  137. package/dist/{register.setup-B_cLbC3d.js → register.setup-BAZ3txi6.js} +4 -4
  138. package/dist/{register.setup-CcDqU6WR.js → register.setup-BQLAOnSQ.js} +4 -4
  139. package/dist/{register.status-health-sessions-DgNzHYE-.js → register.status-health-sessions-BU25Fv8p.js} +3 -3
  140. package/dist/{register.status-health-sessions-CMJ_l4rs.js → register.status-health-sessions-bw_2svPd.js} +3 -3
  141. package/dist/{register.subclis-D6LLN38B.js → register.subclis-Bop-tTBx.js} +9 -9
  142. package/dist/{reply-DcyKvFor.js → reply-BR3MMmPE.js} +47 -52
  143. package/dist/{run-main-QW59Pk-I.js → run-main-DFp18fyd.js} +14 -14
  144. package/dist/{server-methods-D1W-tViM.js → server-methods-B7KrCq1B.js} +7 -7
  145. package/dist/{server-methods-BdXCfO_O.js → server-methods-BMrgMa55.js} +7 -7
  146. package/dist/{server-node-events-BwGehjys.js → server-node-events-DcIWSJrb.js} +2 -2
  147. package/dist/{server-node-events-DqVmWjof.js → server-node-events-tKdBKitQ.js} +2 -2
  148. package/dist/{status-CfLq5R5j.js → status-CChK9DsL.js} +2 -2
  149. package/dist/{status-BY4CnB2O.js → status-DAeh7JKa.js} +2 -2
  150. package/dist/{status-kPaSg3RB.js → status-DkAuXji3.js} +1 -1
  151. package/dist/{status-BvnWSBQl.js → status-Ta_hiT2w.js} +1 -1
  152. package/dist/{subagent-registry-CVQOC9Jw.js → subagent-registry-DovA8Baf.js} +47 -52
  153. package/dist/{unified-runner-DpWGASP3.js → unified-runner-OplgmcEq.js} +47 -52
  154. package/dist/{update-cli-DcUr7_Lg.js → update-cli-DPewzEht.js} +8 -8
  155. package/dist/{update-cli-BpSFY22r.js → update-cli-hfO-LduQ.js} +7 -7
  156. package/dist/{update-runner-DdPdhkw5.js → update-runner-DvkWGO1t.js} +1 -1
  157. package/dist/{update-runner-CPOm0f_6.js → update-runner-WFWqzZw8.js} +1 -1
  158. package/dist/{web-DhofKbBh.js → web-BbEzqR_T.js} +1 -1
  159. package/dist/{web-DqjNQqGK.js → web-CEP_xmdJ.js} +2 -2
  160. package/dist/{web-ZnFT5LP9.js → web-DMBrhq3h.js} +1 -1
  161. package/dist/{web-CHV60IdQ.js → web-WfZujXg4.js} +1 -1
  162. package/package.json +1 -1
  163. package/dist/plugin-sdk/web-C2OyRvIo.js +0 -65
@@ -35609,25 +35609,10 @@ function validateShellCommand(command) {
35609
35609
  //#region src/agents/pi-tools.validate-wrapper.ts
35610
35610
  const log$1 = createSubsystemLogger("agents/tool-validate");
35611
35611
  const EXEC_TOOL_NAMES = new Set(["exec", "bash"]);
35612
- const FILE_TOOL_NAMES = new Set([
35613
- "write",
35614
- "read",
35615
- "edit",
35616
- "patch",
35617
- "file_write",
35618
- "file_edit",
35619
- "write_file",
35620
- "edit_file",
35621
- "create_file"
35622
- ]);
35623
- const FILE_PATH_KEYS = [
35624
- "file_path",
35625
- "path",
35626
- "filePath"
35627
- ];
35612
+ const GEMMA_MODEL_ID = "gemma";
35628
35613
  /**
35629
- * Wrap tools with argument validation. Exec/bash commands and file paths
35630
- * are validated. Other tools pass through unchanged.
35614
+ * Wrap ALL tools with universal string argument sanitization.
35615
+ * Exec/bash tools get additional structural command validation.
35631
35616
  *
35632
35617
  * Call this AFTER tools are created and the model profile is resolved.
35633
35618
  */
@@ -35637,44 +35622,64 @@ function wrapToolsWithArgValidation(tools, profile) {
35637
35622
  return tools;
35638
35623
  }
35639
35624
  const wrapped = tools.map((tool) => wrapToolWithArgValidation(tool));
35640
- const wrappedNames = wrapped.filter((t, i) => t !== tools[i]).map((t) => t.name);
35641
- log$1.debug(`[validate] applied to ${wrappedNames.length} tools: ${wrappedNames.join(",") || "(none matched)"}`);
35625
+ log$1.debug(`[validate] universal sanitizer applied to ${wrapped.length} tools`);
35642
35626
  return wrapped;
35643
35627
  }
35644
35628
  /**
35645
- * Clean a file path by stripping control token fragments.
35646
- * Returns null if the path is irreparably corrupted (empty after cleanup).
35629
+ * Sanitize a single string value: strip control tokens + residual fragments.
35630
+ * Returns the cleaned string, or the original if no changes needed.
35647
35631
  */
35648
- function cleanFilePath(filePath) {
35649
- let cleaned = filePath.replace(/<\|[^|>]*(?:\|>)?/g, "");
35650
- cleaned = cleanResidualTokenFragments(cleaned);
35651
- cleaned = cleaned.trim();
35652
- if (!cleaned || !/[a-zA-Z0-9/._~-]/.test(cleaned)) return {
35653
- valid: false,
35654
- cleaned
35655
- };
35632
+ function sanitizeString(value) {
35633
+ return cleanResidualTokenFragments(stripModelTokensAggressive(value, GEMMA_MODEL_ID));
35634
+ }
35635
+ /**
35636
+ * Check if a string contains control token patterns that need sanitization.
35637
+ * Fast check to avoid unnecessary work on clean strings.
35638
+ */
35639
+ function needsSanitization(value) {
35640
+ return value.includes("<|") || value.includes("|>") || /^[<"|]/.test(value);
35641
+ }
35642
+ /**
35643
+ * Recursively sanitize all string values in a params object.
35644
+ * Returns a new object if any values were changed, or the original if clean.
35645
+ */
35646
+ function sanitizeParams(params) {
35647
+ let changed = false;
35648
+ const cleaned = {};
35649
+ for (const [key, value] of Object.entries(params)) {
35650
+ if (typeof value === "string" && needsSanitization(value)) {
35651
+ const sanitized = sanitizeString(value);
35652
+ if (sanitized !== value) {
35653
+ cleaned[key] = sanitized;
35654
+ changed = true;
35655
+ continue;
35656
+ }
35657
+ }
35658
+ cleaned[key] = value;
35659
+ }
35656
35660
  return {
35657
- valid: true,
35658
- cleaned
35661
+ cleaned,
35662
+ changed
35659
35663
  };
35660
35664
  }
35661
35665
  /**
35662
- * Wrap a single tool with argument validation.
35666
+ * Wrap a single tool with universal argument sanitization.
35663
35667
  */
35664
35668
  function wrapToolWithArgValidation(tool) {
35665
35669
  const toolName = (tool.name ?? "").toLowerCase().trim();
35666
35670
  const isExecTool = EXEC_TOOL_NAMES.has(toolName);
35667
- const isFileTool = FILE_TOOL_NAMES.has(toolName);
35668
- if (!isExecTool && !isFileTool) return tool;
35669
35671
  const originalExecute = tool.execute;
35670
35672
  return {
35671
35673
  ...tool,
35672
35674
  execute(toolCallId, params, ...rest) {
35675
+ const { cleaned, changed } = sanitizeParams(params);
35676
+ if (changed) log$1.debug(`[validate] sanitized args for ${toolName}: ${Object.keys(params).filter((k) => cleaned[k] !== params[k]).join(",")}`);
35677
+ const effectiveParams = changed ? cleaned : params;
35673
35678
  if (isExecTool) {
35674
- const command = params.command ?? params.cmd;
35679
+ const command = effectiveParams.command ?? effectiveParams.cmd;
35675
35680
  if (typeof command !== "string") {
35676
- log$1.debug(`[validate] exec called without string command: keys=${Object.keys(params).join(",")}`);
35677
- return originalExecute.call(tool, toolCallId, params, ...rest);
35681
+ log$1.debug(`[validate] exec called without string command: keys=${Object.keys(effectiveParams).join(",")}`);
35682
+ return originalExecute.call(tool, toolCallId, effectiveParams, ...rest);
35678
35683
  }
35679
35684
  const result = validateShellCommand(command);
35680
35685
  if (!result.valid) {
@@ -35684,22 +35689,12 @@ function wrapToolWithArgValidation(tool) {
35684
35689
  if (result.cleaned !== command) {
35685
35690
  log$1.debug(`[validate] exec command cleaned: raw=${command.slice(0, 80)} → cleaned=${result.cleaned.slice(0, 80)}`);
35686
35691
  return originalExecute.call(tool, toolCallId, {
35687
- ...params,
35692
+ ...effectiveParams,
35688
35693
  command: result.cleaned
35689
35694
  }, ...rest);
35690
35695
  }
35691
- return originalExecute.call(tool, toolCallId, params, ...rest);
35692
35696
  }
35693
- const pathKey = FILE_PATH_KEYS.find((k) => typeof params[k] === "string");
35694
- if (!pathKey) return originalExecute.call(tool, toolCallId, params, ...rest);
35695
- const rawPath = params[pathKey];
35696
- if (!rawPath.includes("<|") && !rawPath.includes("|>") && !/^[<"|]/.test(rawPath)) return originalExecute.call(tool, toolCallId, params, ...rest);
35697
- const pathResult = cleanFilePath(rawPath);
35698
- if (!pathResult.valid) return Promise.resolve({ output: `Error: file path "${rawPath}" contains model control tokens and could not be cleaned. Please provide a clean file path without any <|, |>, or XML-like tags.` });
35699
- return originalExecute.call(tool, toolCallId, {
35700
- ...params,
35701
- [pathKey]: pathResult.cleaned
35702
- }, ...rest);
35697
+ return originalExecute.call(tool, toolCallId, effectiveParams, ...rest);
35703
35698
  }
35704
35699
  };
35705
35700
  }
@@ -53025,7 +53020,7 @@ function isVoiceChannelType(type) {
53025
53020
  function createDefaultDeps() {
53026
53021
  return {
53027
53022
  sendMessageWhatsApp: async (...args) => {
53028
- const { sendMessageWhatsApp } = await import("./web-ZnFT5LP9.js");
53023
+ const { sendMessageWhatsApp } = await import("./web-DMBrhq3h.js");
53029
53024
  return await sendMessageWhatsApp(...args);
53030
53025
  },
53031
53026
  sendMessageTelegram: async (...args) => {
@@ -68339,7 +68334,7 @@ function loadWebLoginQr() {
68339
68334
  return webLoginQrPromise;
68340
68335
  }
68341
68336
  function loadWebChannel() {
68342
- webChannelPromise ??= import("./web-ZnFT5LP9.js");
68337
+ webChannelPromise ??= import("./web-DMBrhq3h.js");
68343
68338
  return webChannelPromise;
68344
68339
  }
68345
68340
  function loadWhatsAppActions() {
@@ -53674,7 +53674,7 @@ function isVoiceChannelType(type) {
53674
53674
  function createDefaultDeps() {
53675
53675
  return {
53676
53676
  sendMessageWhatsApp: async (...args) => {
53677
- const { sendMessageWhatsApp } = await import("./web-DhofKbBh.js");
53677
+ const { sendMessageWhatsApp } = await import("./web-BbEzqR_T.js");
53678
53678
  return await sendMessageWhatsApp(...args);
53679
53679
  },
53680
53680
  sendMessageTelegram: async (...args) => {
@@ -68954,7 +68954,7 @@ function loadWebLoginQr() {
68954
68954
  return webLoginQrPromise;
68955
68955
  }
68956
68956
  function loadWebChannel() {
68957
- webChannelPromise ??= import("./web-DhofKbBh.js");
68957
+ webChannelPromise ??= import("./web-BbEzqR_T.js");
68958
68958
  return webChannelPromise;
68959
68959
  }
68960
68960
  function loadWhatsAppActions() {
@@ -75527,25 +75527,10 @@ function validateShellCommand(command) {
75527
75527
  //#region src/agents/pi-tools.validate-wrapper.ts
75528
75528
  const log = createSubsystemLogger("agents/tool-validate");
75529
75529
  const EXEC_TOOL_NAMES = new Set(["exec", "bash"]);
75530
- const FILE_TOOL_NAMES = new Set([
75531
- "write",
75532
- "read",
75533
- "edit",
75534
- "patch",
75535
- "file_write",
75536
- "file_edit",
75537
- "write_file",
75538
- "edit_file",
75539
- "create_file"
75540
- ]);
75541
- const FILE_PATH_KEYS = [
75542
- "file_path",
75543
- "path",
75544
- "filePath"
75545
- ];
75530
+ const GEMMA_MODEL_ID = "gemma";
75546
75531
  /**
75547
- * Wrap tools with argument validation. Exec/bash commands and file paths
75548
- * are validated. Other tools pass through unchanged.
75532
+ * Wrap ALL tools with universal string argument sanitization.
75533
+ * Exec/bash tools get additional structural command validation.
75549
75534
  *
75550
75535
  * Call this AFTER tools are created and the model profile is resolved.
75551
75536
  */
@@ -75555,44 +75540,64 @@ function wrapToolsWithArgValidation(tools, profile) {
75555
75540
  return tools;
75556
75541
  }
75557
75542
  const wrapped = tools.map((tool) => wrapToolWithArgValidation(tool));
75558
- const wrappedNames = wrapped.filter((t, i) => t !== tools[i]).map((t) => t.name);
75559
- log.debug(`[validate] applied to ${wrappedNames.length} tools: ${wrappedNames.join(",") || "(none matched)"}`);
75543
+ log.debug(`[validate] universal sanitizer applied to ${wrapped.length} tools`);
75560
75544
  return wrapped;
75561
75545
  }
75562
75546
  /**
75563
- * Clean a file path by stripping control token fragments.
75564
- * Returns null if the path is irreparably corrupted (empty after cleanup).
75547
+ * Sanitize a single string value: strip control tokens + residual fragments.
75548
+ * Returns the cleaned string, or the original if no changes needed.
75565
75549
  */
75566
- function cleanFilePath(filePath) {
75567
- let cleaned = filePath.replace(/<\|[^|>]*(?:\|>)?/g, "");
75568
- cleaned = cleanResidualTokenFragments(cleaned);
75569
- cleaned = cleaned.trim();
75570
- if (!cleaned || !/[a-zA-Z0-9/._~-]/.test(cleaned)) return {
75571
- valid: false,
75572
- cleaned
75573
- };
75550
+ function sanitizeString(value) {
75551
+ return cleanResidualTokenFragments(stripModelTokensAggressive(value, GEMMA_MODEL_ID));
75552
+ }
75553
+ /**
75554
+ * Check if a string contains control token patterns that need sanitization.
75555
+ * Fast check to avoid unnecessary work on clean strings.
75556
+ */
75557
+ function needsSanitization(value) {
75558
+ return value.includes("<|") || value.includes("|>") || /^[<"|]/.test(value);
75559
+ }
75560
+ /**
75561
+ * Recursively sanitize all string values in a params object.
75562
+ * Returns a new object if any values were changed, or the original if clean.
75563
+ */
75564
+ function sanitizeParams(params) {
75565
+ let changed = false;
75566
+ const cleaned = {};
75567
+ for (const [key, value] of Object.entries(params)) {
75568
+ if (typeof value === "string" && needsSanitization(value)) {
75569
+ const sanitized = sanitizeString(value);
75570
+ if (sanitized !== value) {
75571
+ cleaned[key] = sanitized;
75572
+ changed = true;
75573
+ continue;
75574
+ }
75575
+ }
75576
+ cleaned[key] = value;
75577
+ }
75574
75578
  return {
75575
- valid: true,
75576
- cleaned
75579
+ cleaned,
75580
+ changed
75577
75581
  };
75578
75582
  }
75579
75583
  /**
75580
- * Wrap a single tool with argument validation.
75584
+ * Wrap a single tool with universal argument sanitization.
75581
75585
  */
75582
75586
  function wrapToolWithArgValidation(tool) {
75583
75587
  const toolName = (tool.name ?? "").toLowerCase().trim();
75584
75588
  const isExecTool = EXEC_TOOL_NAMES.has(toolName);
75585
- const isFileTool = FILE_TOOL_NAMES.has(toolName);
75586
- if (!isExecTool && !isFileTool) return tool;
75587
75589
  const originalExecute = tool.execute;
75588
75590
  return {
75589
75591
  ...tool,
75590
75592
  execute(toolCallId, params, ...rest) {
75593
+ const { cleaned, changed } = sanitizeParams(params);
75594
+ if (changed) log.debug(`[validate] sanitized args for ${toolName}: ${Object.keys(params).filter((k) => cleaned[k] !== params[k]).join(",")}`);
75595
+ const effectiveParams = changed ? cleaned : params;
75591
75596
  if (isExecTool) {
75592
- const command = params.command ?? params.cmd;
75597
+ const command = effectiveParams.command ?? effectiveParams.cmd;
75593
75598
  if (typeof command !== "string") {
75594
- log.debug(`[validate] exec called without string command: keys=${Object.keys(params).join(",")}`);
75595
- return originalExecute.call(tool, toolCallId, params, ...rest);
75599
+ log.debug(`[validate] exec called without string command: keys=${Object.keys(effectiveParams).join(",")}`);
75600
+ return originalExecute.call(tool, toolCallId, effectiveParams, ...rest);
75596
75601
  }
75597
75602
  const result = validateShellCommand(command);
75598
75603
  if (!result.valid) {
@@ -75602,22 +75607,12 @@ function wrapToolWithArgValidation(tool) {
75602
75607
  if (result.cleaned !== command) {
75603
75608
  log.debug(`[validate] exec command cleaned: raw=${command.slice(0, 80)} → cleaned=${result.cleaned.slice(0, 80)}`);
75604
75609
  return originalExecute.call(tool, toolCallId, {
75605
- ...params,
75610
+ ...effectiveParams,
75606
75611
  command: result.cleaned
75607
75612
  }, ...rest);
75608
75613
  }
75609
- return originalExecute.call(tool, toolCallId, params, ...rest);
75610
75614
  }
75611
- const pathKey = FILE_PATH_KEYS.find((k) => typeof params[k] === "string");
75612
- if (!pathKey) return originalExecute.call(tool, toolCallId, params, ...rest);
75613
- const rawPath = params[pathKey];
75614
- if (!rawPath.includes("<|") && !rawPath.includes("|>") && !/^[<"|]/.test(rawPath)) return originalExecute.call(tool, toolCallId, params, ...rest);
75615
- const pathResult = cleanFilePath(rawPath);
75616
- if (!pathResult.valid) return Promise.resolve({ output: `Error: file path "${rawPath}" contains model control tokens and could not be cleaned. Please provide a clean file path without any <|, |>, or XML-like tags.` });
75617
- return originalExecute.call(tool, toolCallId, {
75618
- ...params,
75619
- [pathKey]: pathResult.cleaned
75620
- }, ...rest);
75615
+ return originalExecute.call(tool, toolCallId, effectiveParams, ...rest);
75621
75616
  }
75622
75617
  };
75623
75618
  }
@@ -16,7 +16,7 @@ import "./client-DMBZpU6X.js";
16
16
  import "./call-BcE47FtD.js";
17
17
  import "./message-channel-C9dERklz.js";
18
18
  import "./pairing-token-Byh6drgn.js";
19
- import { Ct as trimLogTail } from "./subagent-registry-CVQOC9Jw.js";
19
+ import { Ct as trimLogTail } from "./subagent-registry-DovA8Baf.js";
20
20
  import "./sessions-CJXnZVjR.js";
21
21
  import "./tokens-Csntmwwn.js";
22
22
  import "./plugins-CwSlLxM8.js";
@@ -111,10 +111,10 @@ import "./npm-registry-spec-DkaZNHAW.js";
111
111
  import "./skill-scanner-BGWOBqLY.js";
112
112
  import "./installs-CgQpVncj.js";
113
113
  import "./channels-status-issues-c7qZbYG5.js";
114
- import "./register.subclis-D6LLN38B.js";
115
- import "./command-registry-xEOR2NPq.js";
114
+ import "./register.subclis-Bop-tTBx.js";
115
+ import "./command-registry-CLcFUFJs.js";
116
116
  import "./program-context-CqzR_m-7.js";
117
- import { r as installCompletion } from "./completion-cli-CRhFwMiA.js";
117
+ import { r as installCompletion } from "./completion-cli-BzXhONEe.js";
118
118
  import "./daemon-runtime-CfRwa6qh.js";
119
119
  import { r as parseSemver } from "./runtime-guard-D7waq_Ho.js";
120
120
  import "./systemd-DlMdyFDY.js";
@@ -124,19 +124,19 @@ import "./systemd-hints-sQipWGd1.js";
124
124
  import { i as runDaemonInstall, r as runDaemonRestart } from "./daemon-cli-wWnBIQtk.js";
125
125
  import "./diagnostics-CS1ov_hH.js";
126
126
  import { t as renderTable } from "./table-D01d2GuY.js";
127
- import "./health-DUKLANXu.js";
127
+ import "./health-CBwxQHlQ.js";
128
128
  import "./control-ui-assets-BseSWee1.js";
129
129
  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-ZdimP1aU.js";
130
130
  import "./dm-policy-shared-DJ-61hCT.js";
131
131
  import { i as resolveUpdateAvailability, n as formatUpdateOneLiner, t as formatUpdateAvailableHint } from "./status.update-DbmZz0Aq.js";
132
- 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-DdPdhkw5.js";
132
+ 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-DvkWGO1t.js";
133
133
  import "./logging-BGewRZy0.js";
134
134
  import { n as updateNpmInstalledPlugins, t as syncPluginsForUpdateChannel } from "./update-DEMKx4eC.js";
135
135
  import "./doctor-config-flow-CA3eiKhd.js";
136
136
  import "./systemd-linger-DA_LW52P.js";
137
137
  import "./health-format-CzgUHmmX.js";
138
- import { n as doctorCommand, t as selectStyled } from "./prompt-select-styled-eBoNrCn6.js";
139
- import { r as ensureCompletionCacheExists, t as checkShellCompletionStatus } from "./doctor-completion-D0L7wK2h.js";
138
+ import { n as doctorCommand, t as selectStyled } from "./prompt-select-styled-CghdSf8F.js";
139
+ import { r as ensureCompletionCacheExists, t as checkShellCompletionStatus } from "./doctor-completion-CislKWHy.js";
140
140
  import { spawn, spawnSync } from "node:child_process";
141
141
  import os from "node:os";
142
142
  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 { V as trimLogTail } from "./reply-DcyKvFor.js";
4
+ import { V as trimLogTail } from "./reply-BR3MMmPE.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";
@@ -106,7 +106,7 @@ import "./stagger-BUClb97_.js";
106
106
  import { c as resolveGatewayLaunchAgentLabel, d as resolveGatewaySystemdServiceName, f as resolveGatewayWindowsTaskName } from "./constants-C8_BLnaW.js";
107
107
  import "./channel-selection-DuWs0Aak.js";
108
108
  import { r as parseSemver } from "./runtime-guard-B37eizu-.js";
109
- import "./program-context-N9-4Ubpp.js";
109
+ import "./program-context-Bz_GuT_l.js";
110
110
  import "./catalog-RiADx7MA.js";
111
111
  import "./skills-status-CURJKnyY.js";
112
112
  import { n as inheritOptionFromParent } from "./command-options-BtDai3oC.js";
@@ -117,7 +117,7 @@ import "./npm-registry-spec-C2JDdSZS.js";
117
117
  import "./skill-scanner-CLs8u6vQ.js";
118
118
  import "./installs-C1Cebk97.js";
119
119
  import "./channels-status-issues-B_kBkl_u.js";
120
- import { r as installCompletion } from "./completion-cli-CFJbuU6i.js";
120
+ import { r as installCompletion } from "./completion-cli-MbaQCbTj.js";
121
121
  import "./daemon-runtime-2mwX-jqj.js";
122
122
  import "./systemd-riq8uNJQ.js";
123
123
  import { t as resolveGatewayService } from "./service-Cl74hx8J.js";
@@ -126,19 +126,19 @@ import "./systemd-hints-BR6gChwm.js";
126
126
  import { i as runDaemonInstall, r as runDaemonRestart } from "./daemon-cli-DscwlsKW.js";
127
127
  import "./diagnostics-BAMlsVVX.js";
128
128
  import { t as renderTable } from "./table-BTgkRafz.js";
129
- import "./health-BPOuBmYt.js";
129
+ import "./health-D4ySlvOE.js";
130
130
  import "./control-ui-assets-Z947tKLt.js";
131
131
  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-CtckACbb.js";
132
132
  import "./dm-policy-shared-Bh3TbexU.js";
133
133
  import { i as resolveUpdateAvailability, n as formatUpdateOneLiner, t as formatUpdateAvailableHint } from "./status.update-DtwCUTf-.js";
134
- 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-CPOm0f_6.js";
134
+ 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-WFWqzZw8.js";
135
135
  import "./logging-BzzwiKjv.js";
136
136
  import { n as updateNpmInstalledPlugins, t as syncPluginsForUpdateChannel } from "./update-rw7wJwHd.js";
137
137
  import "./doctor-config-flow-QnaBd8kL.js";
138
138
  import "./systemd-linger-aQ75ZlXY.js";
139
139
  import "./health-format-DSwnXZPU.js";
140
- import { n as doctorCommand, t as selectStyled } from "./prompt-select-styled-BtG_t1Tf.js";
141
- import { r as ensureCompletionCacheExists, t as checkShellCompletionStatus } from "./doctor-completion-DCc4SxWN.js";
140
+ import { n as doctorCommand, t as selectStyled } from "./prompt-select-styled-BKnaBZhj.js";
141
+ import { r as ensureCompletionCacheExists, t as checkShellCompletionStatus } from "./doctor-completion-BZ-FYLu9.js";
142
142
  import os from "node:os";
143
143
  import path from "node:path";
144
144
  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 { Ct as trimLogTail } from "./subagent-registry-CVQOC9Jw.js";
3
+ import { Ct as trimLogTail } from "./subagent-registry-DovA8Baf.js";
4
4
  import { n as resolveControlUiDistIndexHealth, r as resolveControlUiDistIndexPathForRoot } from "./control-ui-assets-BseSWee1.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-ZdimP1aU.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 { V as trimLogTail } from "./reply-DcyKvFor.js";
2
+ import { V as trimLogTail } from "./reply-BR3MMmPE.js";
3
3
  import { t as runCommandWithTimeout } from "./exec-CWkblSrI.js";
4
4
  import { n as resolveControlUiDistIndexHealth, r as resolveControlUiDistIndexPathForRoot } from "./control-ui-assets-Z947tKLt.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-CtckACbb.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-DpWGASP3.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-OplgmcEq.js";
8
8
  import { s as resolveStorePath } from "./paths-CbQV9WEg.js";
9
9
  import "./auth-profiles-DdK1Hxaa.js";
10
10
  import { n as formatCliCommand } from "./env-BDXYbTKj.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-DcyKvFor.js";
4
+ import "./reply-BR3MMmPE.js";
5
5
  import "./registry-Cja8eT7G.js";
6
6
  import "./subsystem-D9vIQve0.js";
7
7
  import "./exec-CWkblSrI.js";
@@ -101,7 +101,7 @@ import "./pi-tools.policy-CIDBbw6x.js";
101
101
  import "./control-service-Bz7rxLWq.js";
102
102
  import "./stagger-BUClb97_.js";
103
103
  import "./channel-selection-DuWs0Aak.js";
104
- import { n as monitorWebInbox, t as monitorWebChannel } from "./channel-web-DztB2W6w.js";
104
+ import { n as monitorWebInbox, t as monitorWebChannel } from "./channel-web-NGDI-tJN.js";
105
105
  import { n as sendMessageWhatsApp } from "./outbound-DB5Zus0-.js";
106
106
  import { i as waitForWaConnection, t as createWaSocket } from "./session-DIBTkyvE.js";
107
107
  import { t as loginWeb } from "./login-dIlDkG4X.js";
@@ -15,7 +15,7 @@ import "./client-DMBZpU6X.js";
15
15
  import "./call-BcE47FtD.js";
16
16
  import "./message-channel-C9dERklz.js";
17
17
  import "./pairing-token-Byh6drgn.js";
18
- import { Bn as resolveEnvelopeFormatOptions, Cn as enqueueSystemEvent, F as buildHistoryContextFromEntries, Hn as hasControlCommand, I as recordPendingHistoryEntryIfEnabled, Kn as buildMentionRegexes, L as shouldAckReactionForWhatsApp, Ln as createInboundDebouncer, M as buildPairingReply, N as resolveMentionGating, P as DEFAULT_GROUP_HISTORY_LIMIT, R as dispatchReplyWithBufferedBlockDispatcher, Rn as resolveInboundDebounceMs, U as createDedupeCache, Un as shouldComputeCommandAuthorized, W as getReplyFromConfig, b as sleepWithAbort, nn as parseActivationCommand, qn as normalizeMentionText, tn as normalizeGroupActivation, y as computeBackoff, zn as formatInboundEnvelope } from "./subagent-registry-CVQOC9Jw.js";
18
+ import { Bn as resolveEnvelopeFormatOptions, Cn as enqueueSystemEvent, F as buildHistoryContextFromEntries, Hn as hasControlCommand, I as recordPendingHistoryEntryIfEnabled, Kn as buildMentionRegexes, L as shouldAckReactionForWhatsApp, Ln as createInboundDebouncer, M as buildPairingReply, N as resolveMentionGating, P as DEFAULT_GROUP_HISTORY_LIMIT, R as dispatchReplyWithBufferedBlockDispatcher, Rn as resolveInboundDebounceMs, U as createDedupeCache, Un as shouldComputeCommandAuthorized, W as getReplyFromConfig, b as sleepWithAbort, nn as parseActivationCommand, qn as normalizeMentionText, tn as normalizeGroupActivation, y as computeBackoff, zn as formatInboundEnvelope } from "./subagent-registry-DovA8Baf.js";
19
19
  import { B as resolveGroupSessionKey, c as recordSessionMetaFromInbound, o as loadSessionStore, s as readSessionUpdatedAt, u as updateLastRoute } from "./sessions-CJXnZVjR.js";
20
20
  import "./tokens-Csntmwwn.js";
21
21
  import "./plugins-CwSlLxM8.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 shouldComputeCommandAuthorized, S as hasControlCommand, T as normalizeMentionText, _ as enqueueSystemEvent, a as DEFAULT_GROUP_HISTORY_LIMIT, b as formatInboundEnvelope, c as shouldAckReactionForWhatsApp, d as createDedupeCache, f as getReplyFromConfig, g as formatDurationPrecise, h as parseActivationCommand, i as resolveMentionGating, l as dispatchReplyWithBufferedBlockDispatcher, m as normalizeGroupActivation, n as sleepWithAbort, o as buildHistoryContextFromEntries, r as buildPairingReply, s as recordPendingHistoryEntryIfEnabled, t as computeBackoff, v as createInboundDebouncer, w as buildMentionRegexes, x as resolveEnvelopeFormatOptions, y as resolveInboundDebounceMs } from "./pi-embedded-BzE5v-JN.js";
11
+ import { C as shouldComputeCommandAuthorized, S as hasControlCommand, T as normalizeMentionText, _ as enqueueSystemEvent, a as DEFAULT_GROUP_HISTORY_LIMIT, b as formatInboundEnvelope, c as shouldAckReactionForWhatsApp, d as createDedupeCache, f as getReplyFromConfig, g as formatDurationPrecise, h as parseActivationCommand, i as resolveMentionGating, l as dispatchReplyWithBufferedBlockDispatcher, m as normalizeGroupActivation, n as sleepWithAbort, o as buildHistoryContextFromEntries, r as buildPairingReply, s as recordPendingHistoryEntryIfEnabled, t as computeBackoff, v as createInboundDebouncer, w as buildMentionRegexes, x as resolveEnvelopeFormatOptions, y as resolveInboundDebounceMs } from "./pi-embedded-BSoqm4lP.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";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symerian/symi",
3
- "version": "2.6.6",
3
+ "version": "2.6.8",
4
4
  "description": "Multi-channel AI gateway with extensible messaging integrations",
5
5
  "keywords": [],
6
6
  "homepage": "https://github.com/jaysteelmind/symi#readme",
@@ -1,65 +0,0 @@
1
- import { a as WA_WEB_AUTH_DIR, g as webAuthExists, s as logWebSelfId, u as pickWebChannel } from "./accounts-D9zGZU5t.js";
2
- import "./reply-CyZfsjrl.js";
3
- import "./paths-DR2yt_mP.js";
4
- import "./github-copilot-token-D9X2phUj.js";
5
- import "./plugins-BbAvhC25.js";
6
- import "./fetch-CUNoPTKm.js";
7
- import "./registry--_pGht6S.js";
8
- import "./retry-ilSJqnz9.js";
9
- import "./send-Bxdu6ZZy.js";
10
- import "./config-DDkdiUOR.js";
11
- import "./subsystem-Coz2AgU8.js";
12
- import "./command-format-DSdvQ_M5.js";
13
- import "./model-selection-OpU8HN50.js";
14
- import "./agent-scope-C3gMMKCU.js";
15
- import "./manifest-registry-B3ugY9-f.js";
16
- import "./redact-DPnDWsnT.js";
17
- import "./errors-Bv8oZiTO.js";
18
- import "./channel-activity-Ji7f0gqq.js";
19
- import "./image-ops-Bnp6LXEx.js";
20
- import "./ssrf-DKZ8eBrk.js";
21
- import "./local-roots-Ckk1QfzI.js";
22
- import "./ir-Fb3qpcis.js";
23
- import "./chunk-jvk9axTQ.js";
24
- import "./message-channel-BdI5Ra9S.js";
25
- import "./bindings-BbwoUGPx.js";
26
- import "./markdown-tables-Dfaqilz6.js";
27
- import "./render-BiJZ5W4Z.js";
28
- import "./tables-DR0NmBeH.js";
29
- import "./send-BHbXh8Ly.js";
30
- import "./tool-images-D7Lno-TE.js";
31
- import "./target-errors-B7YyMnIi.js";
32
- import "./send-BtANzsAo.js";
33
- import "./send-D6LMZJ_h.js";
34
- import "./runner-BVqnEfNe.js";
35
- import "./reply-prefix-BHuV5t70.js";
36
- import "./tokens-CWMflosr.js";
37
- import "./skill-commands-DCNXVERE.js";
38
- import "./skills-B1GeRYlu.js";
39
- import "./chrome-C7c_0I5M.js";
40
- import "./thinking-DCNUIAHY.js";
41
- import "./accounts-Dtszw3Zn.js";
42
- import "./accounts-BToL3HlP.js";
43
- import "./deliver-BZ6iNLl7.js";
44
- import "./pi-embedded-helpers-BveUP4hk.js";
45
- import "./paths-A0xdf3yk.js";
46
- import "./diagnostic-mFf4i4G9.js";
47
- import "./store-Do3t33-c.js";
48
- import { n as monitorWebInbox, t as monitorWebChannel } from "./channel-web-CxwLjrWk.js";
49
- import "./image-BOYy0Ump.js";
50
- import "./pi-model-discovery-LbcEa65a.js";
51
- import "./api-key-rotation-CVBMpnPc.js";
52
- import "./sqlite-Cq_7Cg4E.js";
53
- import "./diagnostic-session-state-Wd5tNeQG.js";
54
- import "./manager-DckktAQ3.js";
55
- import "./commands-registry-CQFbmUMs.js";
56
- import "./send-BMfJIhCk.js";
57
- import "./proxy-MquBDehr.js";
58
- import "./resolve-route-D3JH_D2N.js";
59
- import "./replies-fI39rPGa.js";
60
- import "./outbound-attachment-DnVQfTG2.js";
61
- import { n as sendMessageWhatsApp } from "./outbound-rF6G8Xpr.js";
62
- import { i as waitForWaConnection, t as createWaSocket } from "./session-kI0tzViQ.js";
63
- import { t as loginWeb } from "./login-Bh3DZPam.js";
64
-
65
- export { WA_WEB_AUTH_DIR, createWaSocket, logWebSelfId, loginWeb, monitorWebChannel, monitorWebInbox, pickWebChannel, sendMessageWhatsApp, waitForWaConnection, webAuthExists };