@symerian/symi 2.3.3 → 2.4.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 (255) hide show
  1. package/dist/{accounts-Cd816n6l.js → accounts-DDuIpcln.js} +7 -7
  2. package/dist/{accounts-mN_EcgxC.js → accounts-DyJN4_vR.js} +1 -1
  3. package/dist/{accounts-CokRskCl.js → accounts-bK-Yqdwx.js} +1 -1
  4. package/dist/{acp-cli-BgyJMtqt.js → acp-cli-Cu4icbJT.js} +6 -6
  5. package/dist/{agent-scope-BRwEc2pG.js → agent-scope-CgUHAtCo.js} +18 -18
  6. package/dist/{agents-DjLt6jc3.js → agents-CI3xxYc_.js} +4 -4
  7. package/dist/{agents.config-u_ibObha.js → agents.config-DCE3RGr9.js} +2 -2
  8. package/dist/{agents.config-Dt7B_P5o.js → agents.config-DTUAM1AG.js} +1 -1
  9. package/dist/{api-key-rotation-CEr3lKih.js → api-key-rotation-CzuPlV2t.js} +1 -1
  10. package/dist/{audio-preflight-CPBOQV4I.js → audio-preflight-C40mKAp7.js} +4 -4
  11. package/dist/{audio-preflight-CjysqO8U.js → audio-preflight-CWnxkaac.js} +28 -28
  12. package/dist/{audio-preflight-D02HwB-I.js → audio-preflight-O3ASWbaG.js} +4 -4
  13. package/dist/{audit-BSB9NPSO.js → audit-CrITRV6w.js} +23 -23
  14. package/dist/{auth-choice-DmSG7c8J.js → auth-choice-DuQwRfJc.js} +8 -8
  15. package/dist/{auth-choice-DUUu6Nhg.js → auth-choice-IiIysHGO.js} +1 -1
  16. package/dist/{auth-token-DC5w1WoS.js → auth-token-BnOynwk4.js} +1 -1
  17. package/dist/{banner-BiAcdT2T.js → banner-xhDZu_ZJ.js} +1 -1
  18. package/dist/{bindings-ChzePa8q.js → bindings-DFaVVCsf.js} +1 -1
  19. package/dist/{browser-cli-C4D9Ql3c.js → browser-cli-BG4qPxpM.js} +9 -9
  20. package/dist/build-info.json +3 -3
  21. package/dist/bundled/boot-md/handler.js +6 -6
  22. package/dist/bundled/session-memory/handler.js +6 -6
  23. package/dist/{call-Dd7-bkfG.js → call-CJaS1iRF.js} +9 -9
  24. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  25. package/dist/{channel-options-vQREpu-n.js → channel-options-D3gGVwBd.js} +2 -2
  26. package/dist/{channel-options-ClfXE1B7.js → channel-options-Dvxd7eJY.js} +1 -1
  27. package/dist/{channel-selection-DjfBv8kq.js → channel-selection-DuWs0Aak.js} +1 -1
  28. package/dist/{channel-web-y6pd_GHr.js → channel-web-a5tX1YI3.js} +17 -17
  29. package/dist/{channels-cli-CjYD1_OO.js → channels-cli-BLUkl5Li.js} +75 -75
  30. package/dist/{channels-cli-suXRcyfF.js → channels-cli-C9wBYmDe.js} +4 -4
  31. package/dist/{channels-status-issues-BoH1ZJPN.js → channels-status-issues-B_kBkl_u.js} +1 -1
  32. package/dist/{chrome-EyvdASWt.js → chrome-BFekevcE.js} +7 -7
  33. package/dist/{chrome-D2SKJnR7.js → chrome-CDJYxX5a.js} +7 -7
  34. package/dist/{chrome-r4RThPxq.js → chrome-DtPkPq9T.js} +2 -2
  35. package/dist/cli/daemon-cli.js +1 -1
  36. package/dist/{cli-mbfUlFn3.js → cli-CaEE46xi.js} +1 -1
  37. package/dist/{cli-B-911QZL.js → cli-Cw45F0yJ.js} +62 -62
  38. package/dist/{client-BsrZnuSi.js → client-CQSyCS4M.js} +1 -1
  39. package/dist/{command-registry-y8CXSD5O.js → command-registry-ea9SD1eA.js} +9 -9
  40. package/dist/{commands-CtocZ4Lg.js → commands-BNLCWX6e.js} +1 -1
  41. package/dist/{commands-registry-BZ0ZSQpM.js → commands-registry-BT0-zzs3.js} +3 -3
  42. package/dist/{completion-cli-BLrwUAyo.js → completion-cli-CMJmUQbI.js} +12 -12
  43. package/dist/{completion-cli-2Mi5hts2.js → completion-cli-DVkiEAEA.js} +2 -2
  44. package/dist/{config-CJMcIRQM.js → config-CHwyw6l5.js} +2 -2
  45. package/dist/{config-cli-CF-wdLkO.js → config-cli-B2d28_hb.js} +4 -4
  46. package/dist/{config-cli-tYZAnvgQ.js → config-cli-VIg0PSyq.js} +1 -1
  47. package/dist/{config-guard-C1Rs8NZG.js → config-guard-BflmO0t7.js} +12 -12
  48. package/dist/{config-validation-ChQQVndI.js → config-validation-CmimHAES.js} +1 -1
  49. package/dist/{configure-si19m30s.js → configure-C_TVBt76.js} +3 -3
  50. package/dist/{configure-BHKdqhLb.js → configure-D-3FiJbK.js} +15 -15
  51. package/dist/{control-service-B8H3Bqpv.js → control-service-Bz7rxLWq.js} +4 -4
  52. package/dist/{control-ui-assets-DqGziq7x.js → control-ui-assets-Z947tKLt.js} +1 -1
  53. package/dist/{cron-cli-YrMWJCkm.js → cron-cli-DBIlCvp3.js} +10 -10
  54. package/dist/{daemon-cli-Dx4SXRyp.js → daemon-cli-DscwlsKW.js} +11 -11
  55. package/dist/{daemon-runtime--RiRUx_2.js → daemon-runtime-2mwX-jqj.js} +10 -10
  56. package/dist/{deliver-C-37cZUe.js → deliver-BH0l3UKW.js} +1 -1
  57. package/dist/{deliver-Um8yyhRA.js → deliver-CceEhg3d.js} +7 -7
  58. package/dist/{deliver-D1ZN6-fl.js → deliver-CvCK5Mm9.js} +1 -1
  59. package/dist/{devices-cli-DAJ84AOe.js → devices-cli-Dds-25Ve.js} +6 -6
  60. package/dist/{diagnostics-D2yUMZN1.js → diagnostics-BAMlsVVX.js} +5 -5
  61. package/dist/{directory-cli-C4h8KQLH.js → directory-cli-CpUByQew.js} +7 -7
  62. package/dist/{dm-policy-shared-BCSw0GJS.js → dm-policy-shared-Bh3TbexU.js} +2 -2
  63. package/dist/{dns-cli-s0ZWvTPm.js → dns-cli-Beyzdh3S.js} +3 -3
  64. package/dist/{dock-BYiRZSgZ.js → dock-BhS32F6E.js} +4 -4
  65. package/dist/{docs-cli-BfPfHTDs.js → docs-cli-BpnEOtJi.js} +1 -1
  66. package/dist/{doctor-completion-C19QYsQN.js → doctor-completion-CJHJYIwQ.js} +2 -2
  67. package/dist/{doctor-completion-Dn_Kn4gz.js → doctor-completion-DeRX6gkI.js} +1 -1
  68. package/dist/{doctor-config-flow-D05HlWdn.js → doctor-config-flow-QnaBd8kL.js} +10 -10
  69. package/dist/entry.js +1 -1
  70. package/dist/{exec-approvals-cli-Df1lyRyE.js → exec-approvals-cli-BliRl8VB.js} +13 -13
  71. package/dist/extensionAPI.js +6 -6
  72. package/dist/{fs-safe-CTDvb1DF.js → fs-safe-CUjO1ca2.js} +6 -6
  73. package/dist/{gateway-cli-B7khyAHs.js → gateway-cli-BDDHBfYP.js} +126 -121
  74. package/dist/{gateway-cli-DG_Mdw0H.js → gateway-cli-DiDJ6Z2d.js} +22 -17
  75. package/dist/{gateway-rpc-DFeD8pZh.js → gateway-rpc-BxkKeCZ0.js} +1 -1
  76. package/dist/{glass-ui-ws-BmQAULMj.js → glass-ui-ws-Bj1IuJXt.js} +82 -82
  77. package/dist/{glass-ui-ws-BAub_JoN.js → glass-ui-ws-rGIAkViC.js} +7 -7
  78. package/dist/{health-CboWXJkq.js → health-Bst5HnLF.js} +1 -1
  79. package/dist/{health-DkKXiUEF.js → health-CypF_2ZD.js} +13 -13
  80. package/dist/{hooks-cli-DLM_5caf.js → hooks-cli-CDMcqTy4.js} +2 -2
  81. package/dist/{hooks-cli-BrO_9pas.js → hooks-cli-CfsqqxPX.js} +76 -76
  82. package/dist/{image-Cp3JDEBB.js → image-B0wGflxA.js} +1 -1
  83. package/dist/{image-DcpMiprB.js → image-CHzdaNJ4.js} +1 -1
  84. package/dist/{image-BiY-PfMh.js → image-D9uvDTrc.js} +3 -3
  85. package/dist/{image-ops-DYbDWaIA.js → image-ops-1OJMSAUX.js} +10 -10
  86. package/dist/index.js +72 -72
  87. package/dist/{inspect-ZJkNX0WL.js → inspect-CllGjsWo.js} +4 -4
  88. package/dist/{install-safe-path-Qqr_t_tH.js → install-safe-path-tCLiMpmO.js} +11 -11
  89. package/dist/{installs-O9KlRu9h.js → installs-C1Cebk97.js} +10 -10
  90. package/dist/{ir-Dt4hOzxG.js → ir-DZam9q5M.js} +6 -6
  91. package/dist/{lifecycle-core-BkPSoGM2.js → lifecycle-core-D6LYXpFj.js} +5 -5
  92. package/dist/llm-slug-generator.js +6 -6
  93. package/dist/{local-roots-BBeKX7PX.js → local-roots-aAFLQGkY.js} +2 -2
  94. package/dist/{login-1sleXoB4.js → login-dIlDkG4X.js} +3 -3
  95. package/dist/{login-qr-wCWBOMwB.js → login-qr-pbXdFORv.js} +5 -5
  96. package/dist/{logs-cli-DVeEdUCU.js → logs-cli-xOzIPrHm.js} +7 -7
  97. package/dist/{manager-C1CfGzZ2.js → manager-D4LJSRyZ.js} +13 -13
  98. package/dist/{markdown-tables-ZwP14ydw.js → markdown-tables-CEbN0fEm.js} +1 -1
  99. package/dist/{memory-cli-lk6fRiwy.js → memory-cli-Ca5r9AUb.js} +14 -14
  100. package/dist/{model-catalog-C3NLvWC2.js → model-catalog-DvBJ8pMD.js} +4 -4
  101. package/dist/{model-picker-LKZLY2DL.js → model-picker-Ddo3jHe-.js} +3 -3
  102. package/dist/{model-selection-X1oLh3CE.js → model-selection-CyFvYcRt.js} +9 -9
  103. package/dist/{model-CeeOcylL.js → model-tWhwnFf8.js} +1 -1
  104. package/dist/{models-BmiRYEVd.js → models-ZEOGlFx7.js} +2 -2
  105. package/dist/{models-cli-Tf61I97Q.js → models-cli-BM1QyeXr.js} +3 -3
  106. package/dist/{models-cli-4vQrbW6G.js → models-cli-BwOQhZ_c.js} +72 -72
  107. package/dist/{models-config-CqDdkHJq.js → models-config-qyOXrOli.js} +7 -7
  108. package/dist/{node-cli-Jj2LTGzF.js → node-cli-C_G-Q3h-.js} +28 -28
  109. package/dist/{node-service-CJygtY5M.js → node-service-Cxz4e-Qd.js} +1 -1
  110. package/dist/{nodes-cli-C43ifECe.js → nodes-cli-BcnuJajV.js} +10 -10
  111. package/dist/{nodes-screen-C99kfE1u.js → nodes-screen-VBGXKdLk.js} +4 -4
  112. package/dist/{npm-registry-spec-DR_at_Hp.js → npm-registry-spec-C2JDdSZS.js} +9 -9
  113. package/dist/{onboard-FpptSqHZ.js → onboard-CU-pntZD.js} +2 -2
  114. package/dist/{onboard-D8uxVvMq.js → onboard-DQ34giB5.js} +13 -13
  115. package/dist/{onboard-channels-DOKid2w1.js → onboard-channels-BOBxxhHX.js} +5 -5
  116. package/dist/{onboard-channels-Q_xxgZ8O.js → onboard-channels-g5cvwJpx.js} +1 -1
  117. package/dist/{onboard-custom-DPJiy9aT.js → onboard-custom-C7O-zfQ1.js} +3 -3
  118. package/dist/{onboard-helpers-Dixh6cNh.js → onboard-helpers-ZmZYzlq3.js} +8 -8
  119. package/dist/{onboard-hooks-lsws7g2s.js → onboard-hooks-BAA8CoVv.js} +1 -1
  120. package/dist/{onboard-remote-B66ZWtkN.js → onboard-remote-zUjD7UtM.js} +1 -1
  121. package/dist/{onboard-skills-B0IA09ig.js → onboard-skills-BB0YhUmF.js} +4 -4
  122. package/dist/{onboarding-CdlGKa0U.js → onboarding-CXWUjdM5.js} +13 -13
  123. package/dist/{onboarding-DhIEUmp5.js → onboarding-DWs6tHZ9.js} +3 -3
  124. package/dist/{onboarding.finalize-CEYLIXkq.js → onboarding.finalize-CAYf88mf.js} +6 -6
  125. package/dist/{onboarding.finalize-DyBsPxXJ.js → onboarding.finalize-vupGASMK.js} +74 -74
  126. package/dist/{onboarding.gateway-config-CCJqI0kw.js → onboarding.gateway-config-CJUgDC6Y.js} +14 -14
  127. package/dist/{openai-model-default-BJ1IZ3TN.js → openai-model-default-DMjQRsb1.js} +2 -2
  128. package/dist/{outbound-NJCy0h4x.js → outbound-DB5Zus0-.js} +4 -4
  129. package/dist/{outbound-attachment-D62E0xDI.js → outbound-attachment-D_QuKi8U.js} +2 -2
  130. package/dist/{pairing-cli-CcW0ndhB.js → pairing-cli-CBLfGvqW.js} +8 -8
  131. package/dist/{pairing-labels-27SOKDzJ.js → pairing-labels-2S6x2UoV.js} +1 -1
  132. package/dist/{pairing-store-B8ktu-6j.js → pairing-store-CK726Dzq.js} +2 -2
  133. package/dist/{pairing-token-AV-MMfVE.js → pairing-token-CX3NN_qj.js} +7 -7
  134. package/dist/{paths-CT6jsi4E.js → paths-BBm9fwuG.js} +1 -1
  135. package/dist/{pi-auth-json-CCneTXUh.js → pi-auth-json-DayrlDg_.js} +3 -3
  136. package/dist/{pi-embedded-wr4HXhzm.js → pi-embedded-CJsSOG2j.js} +147 -185
  137. package/dist/{pi-embedded-BThV36aG.js → pi-embedded-DwbQz0MC.js} +147 -185
  138. package/dist/{pi-embedded-helpers-DO6u9K2t.js → pi-embedded-helpers-CNPyv_ax.js} +6 -6
  139. package/dist/{pi-embedded-helpers-ag2bosuj.js → pi-embedded-helpers-DLFjnVBb.js} +4 -4
  140. package/dist/{pi-embedded-helpers-B8kqLWns.js → pi-embedded-helpers-lgx_U5KS.js} +4 -4
  141. package/dist/{pi-tools.policy-juZV2uUv.js → pi-tools.policy-CIDBbw6x.js} +4 -4
  142. package/dist/{plugin-auto-enable-Bbm7MwFV.js → plugin-auto-enable-BzX1uAKy.js} +2 -2
  143. package/dist/{plugin-registry-DvWWctC9.js → plugin-registry-BDpdOTei.js} +1 -1
  144. package/dist/{plugin-registry-lWWSu9UD.js → plugin-registry-CZeHSx_c.js} +3 -3
  145. package/dist/plugin-sdk/agents/model-aware-stream.d.ts +41 -0
  146. package/dist/plugin-sdk/agents/model-token-filter.d.ts +11 -0
  147. package/dist/plugin-sdk/agents/pi-embedded-runner/extra-params.d.ts +13 -0
  148. package/dist/plugin-sdk/{channel-web-BnrTC55Y.js → channel-web-uUypcT9Q.js} +1 -1
  149. package/dist/plugin-sdk/index.js +2 -2
  150. package/dist/plugin-sdk/{reply-kuMxu6Q4.js → reply-DTKTuCrn.js} +133 -171
  151. package/dist/plugin-sdk/{web-TMIhKQyF.js → web-Dh6Youzv.js} +2 -2
  152. package/dist/{plugins-BAyxWQSz.js → plugins-DKDeQZF0.js} +2 -2
  153. package/dist/{plugins-cli-BHfzYAq6.js → plugins-cli-CCQ3skeQ.js} +71 -71
  154. package/dist/{plugins-cli-wlWRx4Oj.js → plugins-cli-D_RzeRoE.js} +2 -2
  155. package/dist/{ports-OZQlocB7.js → ports-BOmtxoTv.js} +2 -2
  156. package/dist/{ports-b36gHZbA.js → ports-BX0kKI0g.js} +1 -1
  157. package/dist/{program-CKy7s-bm.js → program-Cl9i8ubQ.js} +7 -7
  158. package/dist/{program-context-D4gbh6dg.js → program-context-BbmYGW-V.js} +39 -39
  159. package/dist/{prompt-select-styled-bh0GLMiQ.js → prompt-select-styled-BN0T6GxF.js} +4 -4
  160. package/dist/{prompt-select-styled-DlGPNq9c.js → prompt-select-styled-BfuyvChh.js} +38 -38
  161. package/dist/{provider-auth-helpers-B-YsKbwc.js → provider-auth-helpers-CkmLFHXL.js} +1 -1
  162. package/dist/{provider-auth-helpers-Bd5VVReu.js → provider-auth-helpers-CuT5EHza.js} +5 -5
  163. package/dist/{push-apns-ByyOJyDl.js → push-apns-CFkFVwEz.js} +1 -1
  164. package/dist/{push-apns-0et2AR44.js → push-apns-DeJt9kAO.js} +4 -4
  165. package/dist/{pw-ai-Ch7liUOW.js → pw-ai-BnAKvSuw.js} +1 -1
  166. package/dist/{pw-ai-1htA-NnS.js → pw-ai-De-KR9_s.js} +1 -1
  167. package/dist/{pw-ai-MVzi113V.js → pw-ai-DqL87js3.js} +7 -7
  168. package/dist/{qmd-manager-BP2r8b1D.js → qmd-manager-D85GJrir.js} +18 -18
  169. package/dist/{qr-cli-17laLZm_.js → qr-cli-jd9LdZpq.js} +3 -3
  170. package/dist/{register.agent-oKma6YjU.js → register.agent-BQm4YmZp.js} +6 -6
  171. package/dist/{register.agent-Dhijhxr5.js → register.agent-BygseJ7t.js} +81 -81
  172. package/dist/register.configure-C2fhjZze.js +147 -0
  173. package/dist/{register.configure-BX8vQ2Np.js → register.configure-Cj95vB2U.js} +6 -6
  174. package/dist/{register.maintenance-OJCduNdt.js → register.maintenance-CClfXq5e.js} +8 -8
  175. package/dist/{register.maintenance-B3TPb969.js → register.maintenance-K1x3E7OS.js} +84 -84
  176. package/dist/{register.message-CX8C_Fds.js → register.message-BSr-kUvJ.js} +2 -2
  177. package/dist/{register.message-D0aswsGo.js → register.message-CSRzBl-c.js} +63 -63
  178. package/dist/{register.onboard-CSepiSPt.js → register.onboard-Bd6wPydW.js} +4 -4
  179. package/dist/{register.onboard-BHTyEs6d.js → register.onboard-TsU21RR7.js} +74 -74
  180. package/dist/{register.setup-uhpgkBjU.js → register.setup-C9gu0W5l.js} +77 -77
  181. package/dist/{register.setup-lZSHKiGQ.js → register.setup-DK-zsne2.js} +4 -4
  182. package/dist/{register.status-health-sessions-Cbavf8do.js → register.status-health-sessions-DN5Ui3V0.js} +3 -3
  183. package/dist/{register.status-health-sessions-v1KN3eEp.js → register.status-health-sessions-rZsuoqtr.js} +75 -75
  184. package/dist/{register.subclis-DBEv5xOP.js → register.subclis-DnzHFtLz.js} +9 -9
  185. package/dist/{replies-BL7IBg12.js → replies-vgss3_QA.js} +1 -1
  186. package/dist/{reply-DVxU0AMq.js → reply-Ca3slrA3.js} +262 -300
  187. package/dist/{reply-prefix-BLOOs1aW.js → reply-prefix-CE2YmmsD.js} +1 -1
  188. package/dist/{resolve-route-BcnaXYvh.js → resolve-route-BMoTaVAH.js} +2 -2
  189. package/dist/{routes-CE-ohckF.js → routes-Ba9CUQ8M.js} +8 -8
  190. package/dist/{rpc-wovSCB5v.js → rpc-BfhojW8g.js} +1 -1
  191. package/dist/{run-main-DspjiCY1.js → run-main-DlHh5iOO.js} +14 -14
  192. package/dist/{runner-Cen70krW.js → runner-CUglpiFP.js} +20 -20
  193. package/dist/{runner-BcQ0sF9T.js → runner-DUBExAb5.js} +1 -1
  194. package/dist/{runner-D0QUGA_X.js → runner-odEv83vv.js} +1 -1
  195. package/dist/{sandbox-BzNrUHpt.js → sandbox-C-T6hOMv.js} +18 -18
  196. package/dist/{sandbox-cli-CZrMO34w.js → sandbox-cli-BllVdQzR.js} +20 -20
  197. package/dist/{security-cli-CeBoEmeN.js → security-cli-BFLtWWHy.js} +36 -36
  198. package/dist/{send-dH0xroTu.js → send-CPF8hSFp.js} +4 -4
  199. package/dist/{send-C95ZRvja.js → send-CXxQ_f7L.js} +6 -6
  200. package/dist/{send-BnuIB59F.js → send-CZr1hVHY.js} +13 -13
  201. package/dist/{send-BEeuDXqy.js → send-Cutb0ZDY.js} +6 -6
  202. package/dist/{send-BjdAgYLu.js → send-tanEMpHN.js} +6 -6
  203. package/dist/{server-context-DUXqnh6l.js → server-context-CEpFjqSk.js} +5 -5
  204. package/dist/{server-methods-BgBq7KRL.js → server-methods-BYOkyf-q.js} +54 -54
  205. package/dist/{server-methods-B9alalq5.js → server-methods-b_Qod4tt.js} +7 -7
  206. package/dist/{server-node-events-BrBsrcCd.js → server-node-events-60nWpTh1.js} +63 -63
  207. package/dist/{server-node-events-DWG81_Fo.js → server-node-events-oU4Amei7.js} +2 -2
  208. package/dist/{service--qMN5DPm.js → service-Cl74hx8J.js} +15 -15
  209. package/dist/{session-CsIk0Sqq.js → session-DIBTkyvE.js} +2 -2
  210. package/dist/{sessions-D5a7H247.js → sessions-DgYpBvse.js} +13 -13
  211. package/dist/{shared-Jm_QdQJQ.js → shared-BJvwnR5z.js} +1 -1
  212. package/dist/{shared-Gi3l7nlY.js → shared-Knv1hy6h.js} +3 -3
  213. package/dist/{skill-commands-ZXbEITKi.js → skill-commands-Cxw-jNxU.js} +5 -5
  214. package/dist/{skill-scanner-CXg9eeyc.js → skill-scanner-CLs8u6vQ.js} +5 -5
  215. package/dist/{skills-DqQUtOph.js → skills-6jdJQ5ZL.js} +4 -4
  216. package/dist/{skills-cli-D1JL_utC.js → skills-cli-BZTBLQTt.js} +7 -7
  217. package/dist/{skills-install-DjcTy3CT.js → skills-install-D67isO1L.js} +3 -3
  218. package/dist/{skills-status-DS-NZQiq.js → skills-status-CURJKnyY.js} +1 -1
  219. package/dist/{sqlite-BV5ILFtC.js → sqlite-Dx3J_aSE.js} +12 -12
  220. package/dist/{status-CgPPKk09.js → status-BXW5l4sd.js} +25 -25
  221. package/dist/{status-DxodHhzX.js → status-BxbbINLV.js} +2 -2
  222. package/dist/{status-DqMwkAnF.js → status-D3-lP2_9.js} +1 -1
  223. package/dist/{status-CkJV2sl6.js → status-kdz9P3tw.js} +3 -3
  224. package/dist/{status.update-CmGpjKSr.js → status.update-DtwCUTf-.js} +3 -3
  225. package/dist/{store-DvtcmOKj.js → store-r1DJSDq-.js} +5 -5
  226. package/dist/{subagent-registry-CBklD0OL.js → subagent-registry-CbTbJKLs.js} +133 -171
  227. package/dist/{symi-root-MF6_6SCS.js → symi-root-CrGJbkzf.js} +2 -2
  228. package/dist/{system-cli-Buhvt_H5.js → system-cli-UMsMEurS.js} +11 -11
  229. package/dist/{systemd-hints-Db0oImvK.js → systemd-hints-BR6gChwm.js} +6 -6
  230. package/dist/{systemd-linger-BXwqn1jL.js → systemd-linger-aQ75ZlXY.js} +1 -1
  231. package/dist/{systemd-AhJEsmIk.js → systemd-riq8uNJQ.js} +5 -5
  232. package/dist/{tables-C38rzF6E.js → tables-BEzT0Da4.js} +1 -1
  233. package/dist/{target-errors-CCz79CmV.js → target-errors-7AvoVa10.js} +4 -4
  234. package/dist/{tool-images-B-pqX3nX.js → tool-images-DvUBlqjX.js} +1 -1
  235. package/dist/{tui-C0A9W969.js → tui-CriznorL.js} +7 -7
  236. package/dist/{tui-cli-tCnkNdSx.js → tui-cli-CSIdfCTR.js} +28 -28
  237. package/dist/{update-check-C0oYCI89.js → update-check-CtckACbb.js} +5 -5
  238. package/dist/{update-cli-DYrpyu4a.js → update-cli-B5TI650v.js} +94 -94
  239. package/dist/{update-cli-BqdgQuYp.js → update-cli-Cy0gdWRf.js} +8 -8
  240. package/dist/{update-runner-CmZW3aeK.js → update-runner-B0NdgPvD.js} +1 -1
  241. package/dist/{update-runner-BgzyPjF5.js → update-runner-Bacq0oLK.js} +15 -15
  242. package/dist/{update-Df4sEKtI.js → update-rw7wJwHd.js} +3 -3
  243. package/dist/{web-GL_nqURg.js → web-D-oCzJTU.js} +1 -1
  244. package/dist/{web-CfZp0Jv6.js → web-DWNtg4iV.js} +6 -6
  245. package/dist/web-DmED3zDP.js +109 -0
  246. package/dist/{web-DNQzo8ao.js → web-QVwKg99Q.js} +6 -6
  247. package/dist/{webhooks-cli-Bp-7Rs2Y.js → webhooks-cli-cD58DWAE.js} +4 -4
  248. package/dist/{whatsapp-actions-CFXNPLco.js → whatsapp-actions-DbcsdOH3.js} +15 -15
  249. package/dist/{with-timeout-Cs6_LnHB.js → with-timeout-gmK6RciS.js} +1 -1
  250. package/dist/{workspace-dirs-DKu48umx.js → workspace-dirs-GpkFi6Kw.js} +1 -1
  251. package/dist/{wsl-BbXxnokd.js → wsl-C4424szg.js} +2 -2
  252. package/package.json +1 -1
  253. package/dist/register.configure-BcZ-7Yir.js +0 -147
  254. package/dist/session-dirs-D3qlvucD.js +0 -18
  255. package/dist/web-DsCqmzyk.js +0 -109
@@ -1,9 +1,9 @@
1
1
  import { C as resolveThreadParentSessionKey, l as resolveAgentIdFromSessionKey } from "./session-key-DCt45XZa.js";
2
- import { r as resolveAgentConfig } from "./agent-scope-BRwEc2pG.js";
2
+ import { r as resolveAgentConfig } from "./agent-scope-CgUHAtCo.js";
3
3
  import { l as normalizeMessageChannel } from "./message-channel-aT-I_DTX.js";
4
- import { z as DEFAULT_SUBAGENT_MAX_SPAWN_DEPTH } from "./config-CJMcIRQM.js";
5
- import { T as matchesAnyGlobPattern, w as compileGlobPatterns, x as normalizeToolName, y as expandToolGroups } from "./sandbox-BzNrUHpt.js";
6
- import { o as resolveChannelGroupToolsPolicy, t as getChannelDock } from "./dock-BYiRZSgZ.js";
4
+ import { z as DEFAULT_SUBAGENT_MAX_SPAWN_DEPTH } from "./config-CHwyw6l5.js";
5
+ import { T as matchesAnyGlobPattern, w as compileGlobPatterns, x as normalizeToolName, y as expandToolGroups } from "./sandbox-C-T6hOMv.js";
6
+ import { o as resolveChannelGroupToolsPolicy, t as getChannelDock } from "./dock-BhS32F6E.js";
7
7
 
8
8
  //#region src/agents/sandbox-tool-policy.ts
9
9
  function unionAllow(base, extra) {
@@ -1,7 +1,7 @@
1
1
  import { d as isRecord } from "./utils-B-0b9bGM.js";
2
2
  import { o as getChatChannelMeta, s as listChatChannels, u as normalizeChatChannelId } from "./registry-Cja8eT7G.js";
3
- import { l as normalizeProviderId } from "./model-selection-X1oLh3CE.js";
4
- import { t as hasAnyWhatsAppAuth } from "./accounts-Cd816n6l.js";
3
+ import { l as normalizeProviderId } from "./model-selection-CyFvYcRt.js";
4
+ import { t as hasAnyWhatsAppAuth } from "./accounts-DDuIpcln.js";
5
5
  import { n as getChannelPluginCatalogEntry, r as listChannelPluginCatalogEntries } from "./catalog-RiADx7MA.js";
6
6
  import { t as ensurePluginAllowlisted } from "./plugins-allowlist-sArtGE-d.js";
7
7
 
@@ -2,7 +2,7 @@ import { t as __exportAll } from "./rolldown-runtime-Cbj13DAv.js";
2
2
  import { M as getActivePluginRegistry, o as createSubsystemLogger } from "./entry.js";
3
3
  import { c as resolveAgentWorkspaceDir, l as resolveDefaultAgentId } from "./agent-scope-D-jRCY0d.js";
4
4
  import { i as loadConfig } from "./config-DHBLS1Hl.js";
5
- import { b as loadSymiPlugins } from "./subagent-registry-CBklD0OL.js";
5
+ import { b as loadSymiPlugins } from "./subagent-registry-CbTbJKLs.js";
6
6
 
7
7
  //#region src/cli/plugin-registry.ts
8
8
  var plugin_registry_exports = /* @__PURE__ */ __exportAll({ ensurePluginRegistryLoaded: () => ensurePluginRegistryLoaded });
@@ -1,9 +1,9 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-Cbj13DAv.js";
2
- import { vt as loadSymiPlugins } from "./reply-DVxU0AMq.js";
2
+ import { vt as loadSymiPlugins } from "./reply-Ca3slrA3.js";
3
3
  import { d as getActivePluginRegistry } from "./registry-Cja8eT7G.js";
4
4
  import { t as createSubsystemLogger } from "./subsystem-D9vIQve0.js";
5
- import { c as resolveAgentWorkspaceDir, l as resolveDefaultAgentId } from "./agent-scope-BRwEc2pG.js";
6
- import { i as loadConfig } from "./config-CJMcIRQM.js";
5
+ import { c as resolveAgentWorkspaceDir, l as resolveDefaultAgentId } from "./agent-scope-CgUHAtCo.js";
6
+ import { i as loadConfig } from "./config-CHwyw6l5.js";
7
7
 
8
8
  //#region src/cli/plugin-registry.ts
9
9
  var plugin_registry_exports = /* @__PURE__ */ __exportAll({ ensurePluginRegistryLoaded: () => ensurePluginRegistryLoaded });
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Model-Aware Stream Function — the single wrapper that replaces the
3
+ * 6-layer chain in applyExtraParamsToAgent().
4
+ *
5
+ * Handles ALL provider-specific concerns in ONE onPayload hook:
6
+ * - Injects stop, top_p, top_k, repeat_penalty (ignored by buildParams)
7
+ * - Fixes max_completion_tokens → max_tokens for vLLM
8
+ * - Removes unsupported fields (store) for vLLM
9
+ * - Chains caller's onPayload explicitly (no collision)
10
+ *
11
+ * @module
12
+ */
13
+ import type { StreamFn } from "@mariozechner/pi-agent-core";
14
+ import type { SymiConfig } from "../config/config.js";
15
+ import type { ModelProfile } from "../config/model-profiles.js";
16
+ export interface ModelAwareStreamOptions {
17
+ /** Base streaming function — streamSimple or createOllamaStreamFn. */
18
+ baseStreamFn?: StreamFn;
19
+ /** Resolved model profile (from resolveModelProfile). */
20
+ profile: ModelProfile;
21
+ /** Provider ID (e.g. "redsand", "anthropic"). */
22
+ provider: string;
23
+ /** Model ID (e.g. "gemma-4-31b", "claude-sonnet-4-6"). */
24
+ modelId: string;
25
+ /** Full Symi config — used for provider baseUrl detection. */
26
+ config?: SymiConfig;
27
+ /** Per-model params from symi.json (agents.defaults.models[key].params). */
28
+ configExtraParams?: Record<string, unknown>;
29
+ /** Runtime overrides (e.g. CLI --temperature). */
30
+ streamParamsOverride?: Record<string, unknown>;
31
+ }
32
+ /**
33
+ * Create a single stream function wrapper that handles all provider-specific
34
+ * param injection via one onPayload hook.
35
+ *
36
+ * Replaces: createStreamFnWithExtraParams, createVllmCompatWrapper,
37
+ * createOpenRouterHeadersWrapper.
38
+ */
39
+ export declare function createModelAwareStreamFn(opts: ModelAwareStreamOptions): StreamFn;
40
+ /** Detect vLLM/Gemma providers by model hints or baseUrl patterns. */
41
+ export declare function isVllmProvider(provider: string, modelId: string, config?: SymiConfig): boolean;
@@ -11,5 +11,16 @@ declare function isGemmaModel(modelId: string): boolean;
11
11
  * Strip known control tokens from text. Only applies to Gemma-family models;
12
12
  * other models pass through unchanged.
13
13
  */
14
+ /**
15
+ * Strip known control tokens from text. Only applies to Gemma-family models;
16
+ * other models pass through unchanged. Used for streamed text output.
17
+ */
14
18
  export declare function stripModelTokens(text: string, modelId: string): string;
19
+ /**
20
+ * Aggressively strip ALL token-like fragments from a string. Used for tool
21
+ * call arguments where any `<|` corruption causes downstream failures.
22
+ * More aggressive than `stripModelTokens` — removes bare `<|` and `|>` fragments
23
+ * that don't match any known token template.
24
+ */
25
+ export declare function stripModelTokensAggressive(text: string, modelId: string): string;
15
26
  export { isGemmaModel, GEMMA_TOKEN_PATTERNS };
@@ -11,6 +11,19 @@ export declare function resolveExtraParams(params: {
11
11
  provider: string;
12
12
  modelId: string;
13
13
  }): Record<string, unknown> | undefined;
14
+ export declare function createOpenAIResponsesStoreWrapper(baseStreamFn: StreamFn | undefined): StreamFn;
15
+ export declare function resolveAnthropicBetas(extraParams: Record<string, unknown> | undefined, provider: string, modelId: string): string[] | undefined;
16
+ export declare function createAnthropicBetaHeadersWrapper(baseStreamFn: StreamFn | undefined, betas: string[]): StreamFn;
17
+ /**
18
+ * Create a streamFn wrapper that injects tool_stream=true for Z.AI providers.
19
+ *
20
+ * Z.AI's API supports the `tool_stream` parameter to enable real-time streaming
21
+ * of tool call arguments and reasoning content. When enabled, the API returns
22
+ * progressive tool_call deltas, allowing users to see tool execution in real-time.
23
+ *
24
+ * @see https://docs.z.ai/api-reference#streaming
25
+ */
26
+ export declare function createZaiToolStreamWrapper(baseStreamFn: StreamFn | undefined, enabled: boolean): StreamFn;
14
27
  /**
15
28
  * Apply extra params (like temperature) to an agent's streamFn.
16
29
  * Also adds OpenRouter app attribution headers when using the OpenRouter provider.
@@ -1,6 +1,6 @@
1
1
  import { a as buildGroupHistoryKey, n as DEFAULT_MAIN_KEY, r as buildAgentMainSessionKey, s as normalizeAgentId } from "./session-key-C_0eELjb.js";
2
2
  import { f as readWebSelfId, o as getWebAuthAgeMs, r as resolveWhatsAppAccount } from "./accounts-D9zGZU5t.js";
3
- import { E as enqueueSystemEvent, G as resolveMentionGating, W as shouldAckReactionForWhatsApp, X as buildHistoryContextFromEntries, Y as DEFAULT_GROUP_HISTORY_LIMIT, _ as resolveEnvelopeFormatOptions, c as computeBackoff, d as formatDurationPrecise, f as dispatchReplyWithBufferedBlockDispatcher, g as formatInboundEnvelope, h as resolveInboundDebounceMs, ht as createDedupeCache, l as sleepWithAbort, m as createInboundDebouncer, n as normalizeGroupActivation, nt as buildMentionRegexes, r as parseActivationCommand, rt as normalizeMentionText, t as getReplyFromConfig, tt as recordPendingHistoryEntryIfEnabled, u as buildPairingReply, v as hasControlCommand, y as shouldComputeCommandAuthorized } from "./reply-kuMxu6Q4.js";
3
+ import { E as enqueueSystemEvent, G as resolveMentionGating, W as shouldAckReactionForWhatsApp, X as buildHistoryContextFromEntries, Y as DEFAULT_GROUP_HISTORY_LIMIT, _ as resolveEnvelopeFormatOptions, c as computeBackoff, d as formatDurationPrecise, f as dispatchReplyWithBufferedBlockDispatcher, g as formatInboundEnvelope, h as resolveInboundDebounceMs, ht as createDedupeCache, l as sleepWithAbort, m as createInboundDebouncer, n as normalizeGroupActivation, nt as buildMentionRegexes, r as parseActivationCommand, rt as normalizeMentionText, t as getReplyFromConfig, tt as recordPendingHistoryEntryIfEnabled, u as buildPairingReply, v as hasControlCommand, y as shouldComputeCommandAuthorized } from "./reply-DTKTuCrn.js";
4
4
  import { A as normalizeE164, B as toWhatsappJid, K as logVerbose, N as resolveJidToE164, O as isSelfChatMode, R as sleep, Y as shouldLogVerbose, k as jidToE164, s as normalizeChatChannelId, tt as getChildLogger, x as clamp } from "./registry--_pGht6S.js";
5
5
  import { n as loadConfig } from "./config-DDkdiUOR.js";
6
6
  import { i as defaultRuntime, t as createSubsystemLogger } from "./subsystem-Coz2AgU8.js";
@@ -1,6 +1,6 @@
1
1
  import { f as DEFAULT_ACCOUNT_ID, p as normalizeAccountId } from "./session-key-C_0eELjb.js";
2
2
  import { _ as createAccountListHelpers, i as resolveWhatsAppAuthDir, n as resolveDefaultWhatsAppAccountId, r as resolveWhatsAppAccount, t as listWhatsAppAccountIds } from "./accounts-D9zGZU5t.js";
3
- import { $ as clearHistoryEntriesIfEnabled, A as resolveDiscordUserAllowlist, B as logTypingFailure, C as stripMarkdown, Ct as unbindThreadBindingsBySessionKey, D as resolveSlackUserAllowlist, Dt as BLUEBUBBLES_ACTION_NAMES, Et as BLUEBUBBLES_ACTIONS, F as stringEnum, G as resolveMentionGating, H as removeAckReactionAfterReply, I as recordInboundSession, J as summarizeMapping, K as resolveMentionGatingWithBypass, L as resolveControlCommandGate, M as collectDiscordAuditChannelIds, N as formatDocsLink, O as resolveSlackChannelAllowlist, Ot as BLUEBUBBLES_GROUP_ACTIONS, P as optionalStringEnum, Q as clearHistoryEntries, R as logAckFailure, S as processLineMessage, St as listThreadBindingsBySessionKey, T as attachFooterText, Tt as resolveAllowlistMatchSimple, U as shouldAckReaction, V as createTypingCallbacks, W as shouldAckReactionForWhatsApp, Y as DEFAULT_GROUP_HISTORY_LIMIT, Z as buildPendingHistoryContextFromMap, _t as listDevicePairing, a as normalizeAccountId$1, at as isWSLEnv, bt as registerPluginHttpRoute, ct as DEFAULT_WEBHOOK_MAX_BODY_BYTES, dt as isRequestBodyLimitError, et as recordPendingHistoryEntry, ft as readJsonBodyWithLimit, gt as approveDevicePairing, ht as createDedupeCache, i as listLineAccountIds, it as isWSL2Sync, j as resolveDiscordChannelAllowlist, k as detectBinary, kt as CHANNEL_MESSAGE_ACTION_NAMES, lt as RequestBodyLimitError, mt as requestBodyErrorToText, o as resolveDefaultLineAccountId, ot as isWSLSync, pt as readRequestBodyWithLimit, q as mergeAllowlist, s as resolveLineAccount, st as DEFAULT_WEBHOOK_BODY_TIMEOUT_MS, tt as recordPendingHistoryEntryIfEnabled, ut as installRequestBodyLimitGuard, vt as rejectDevicePairing, w as createReceiptCard, wt as formatAllowlistMatchMeta, x as hasMarkdownToConvert, xt as autoBindSpawnedDiscordSubagent, yt as extractToolSend, z as logInboundDrop } from "./reply-kuMxu6Q4.js";
3
+ import { $ as clearHistoryEntriesIfEnabled, A as resolveDiscordUserAllowlist, B as logTypingFailure, C as stripMarkdown, Ct as unbindThreadBindingsBySessionKey, D as resolveSlackUserAllowlist, Dt as BLUEBUBBLES_ACTION_NAMES, Et as BLUEBUBBLES_ACTIONS, F as stringEnum, G as resolveMentionGating, H as removeAckReactionAfterReply, I as recordInboundSession, J as summarizeMapping, K as resolveMentionGatingWithBypass, L as resolveControlCommandGate, M as collectDiscordAuditChannelIds, N as formatDocsLink, O as resolveSlackChannelAllowlist, Ot as BLUEBUBBLES_GROUP_ACTIONS, P as optionalStringEnum, Q as clearHistoryEntries, R as logAckFailure, S as processLineMessage, St as listThreadBindingsBySessionKey, T as attachFooterText, Tt as resolveAllowlistMatchSimple, U as shouldAckReaction, V as createTypingCallbacks, W as shouldAckReactionForWhatsApp, Y as DEFAULT_GROUP_HISTORY_LIMIT, Z as buildPendingHistoryContextFromMap, _t as listDevicePairing, a as normalizeAccountId$1, at as isWSLEnv, bt as registerPluginHttpRoute, ct as DEFAULT_WEBHOOK_MAX_BODY_BYTES, dt as isRequestBodyLimitError, et as recordPendingHistoryEntry, ft as readJsonBodyWithLimit, gt as approveDevicePairing, ht as createDedupeCache, i as listLineAccountIds, it as isWSL2Sync, j as resolveDiscordChannelAllowlist, k as detectBinary, kt as CHANNEL_MESSAGE_ACTION_NAMES, lt as RequestBodyLimitError, mt as requestBodyErrorToText, o as resolveDefaultLineAccountId, ot as isWSLSync, pt as readRequestBodyWithLimit, q as mergeAllowlist, s as resolveLineAccount, st as DEFAULT_WEBHOOK_BODY_TIMEOUT_MS, tt as recordPendingHistoryEntryIfEnabled, ut as installRequestBodyLimitGuard, vt as rejectDevicePairing, w as createReceiptCard, wt as formatAllowlistMatchMeta, x as hasMarkdownToConvert, xt as autoBindSpawnedDiscordSubagent, yt as extractToolSend, z as logInboundDrop } from "./reply-DTKTuCrn.js";
4
4
  import "./paths-DR2yt_mP.js";
5
5
  import "./github-copilot-token-D9X2phUj.js";
6
6
  import { D as resolveSlackAccount, E as resolveDefaultSlackAccountId, F as resolveDiscordAccount, M as listDiscordAccountIds, O as resolveSlackReplyToMode, P as resolveDefaultDiscordAccountId, S as resolveTelegramAccount, T as listSlackAccountIds, _ as normalizeWhatsAppTarget, a as listDiscordDirectoryPeersFromConfig, b as listTelegramAccountIds, c as listTelegramDirectoryGroupsFromConfig, d as listWhatsAppDirectoryPeersFromConfig, f as looksLikeSlackTargetId, g as isWhatsAppGroupJid, i as listDiscordDirectoryGroupsFromConfig, l as listTelegramDirectoryPeersFromConfig, o as listSlackDirectoryGroupsFromConfig, p as normalizeSlackMessagingTarget, s as listSlackDirectoryPeersFromConfig, u as listWhatsAppDirectoryGroupsFromConfig, w as listEnabledSlackAccounts, x as resolveDefaultTelegramAccountId } from "./plugins-BbAvhC25.js";
@@ -47,7 +47,7 @@ import "./paths-A0xdf3yk.js";
47
47
  import { h as onDiagnosticEvent, m as isDiagnosticsEnabled, p as emitDiagnosticEvent } from "./diagnostic-mFf4i4G9.js";
48
48
  import { n as extractOriginalFilename } from "./store-Do3t33-c.js";
49
49
  import { t as resolveWhatsAppOutboundTarget } from "./resolve-outbound-target-BkCUbYGV.js";
50
- import { r as resolveWhatsAppHeartbeatRecipients } from "./channel-web-BnrTC55Y.js";
50
+ import { r as resolveWhatsAppHeartbeatRecipients } from "./channel-web-uUypcT9Q.js";
51
51
  import "./image-BOYy0Ump.js";
52
52
  import "./pi-model-discovery-LbcEa65a.js";
53
53
  import "./api-key-rotation-CVBMpnPc.js";
@@ -27119,7 +27119,7 @@ async function runWithImageModelFallback(params) {
27119
27119
  function createDefaultDeps() {
27120
27120
  return {
27121
27121
  sendMessageWhatsApp: async (...args) => {
27122
- const { sendMessageWhatsApp } = await import("./web-TMIhKQyF.js");
27122
+ const { sendMessageWhatsApp } = await import("./web-Dh6Youzv.js");
27123
27123
  return await sendMessageWhatsApp(...args);
27124
27124
  },
27125
27125
  sendMessageTelegram: async (...args) => {
@@ -44745,7 +44745,7 @@ function loadWebLoginQr() {
44745
44745
  return webLoginQrPromise;
44746
44746
  }
44747
44747
  function loadWebChannel() {
44748
- webChannelPromise ??= import("./web-TMIhKQyF.js");
44748
+ webChannelPromise ??= import("./web-Dh6Youzv.js");
44749
44749
  return webChannelPromise;
44750
44750
  }
44751
44751
  function loadWhatsAppActions() {
@@ -49991,8 +49991,16 @@ const GEMMA_TOKEN_PATTERNS = [
49991
49991
  /<start_of_turn>(?:model|user)?/g,
49992
49992
  /<end_of_turn>/g,
49993
49993
  /<\|(?:fim_prefix|fim_suffix|fim_middle)\|>/g,
49994
- /^\s*<bos>\s*/gm
49994
+ /^\s*<bos>\s*/gm,
49995
+ /<\|[^|>]{0,30}\|>/g,
49996
+ /<\|[^>]{0,30}>/g
49995
49997
  ];
49998
+ /**
49999
+ * Aggressively strip all fragments of model control token corruption from
50000
+ * tool arguments. This catches cases where the model produces raw garbage
50001
+ * like `<|<|"|<|<|\'` that doesn't match any known token template.
50002
+ */
50003
+ const AGGRESSIVE_TOKEN_FRAGMENTS = [/<\|/g, /\|>/g];
49996
50004
  const GEMMA_MODEL_HINTS$1 = ["gemma", "redsand/"];
49997
50005
  function isGemmaModel$1(modelId) {
49998
50006
  const lower = modelId.toLowerCase();
@@ -50002,6 +50010,10 @@ function isGemmaModel$1(modelId) {
50002
50010
  * Strip known control tokens from text. Only applies to Gemma-family models;
50003
50011
  * other models pass through unchanged.
50004
50012
  */
50013
+ /**
50014
+ * Strip known control tokens from text. Only applies to Gemma-family models;
50015
+ * other models pass through unchanged. Used for streamed text output.
50016
+ */
50005
50017
  function stripModelTokens(text, modelId) {
50006
50018
  if (!text || !isGemmaModel$1(modelId)) return text;
50007
50019
  let result = text;
@@ -50011,6 +50023,21 @@ function stripModelTokens(text, modelId) {
50011
50023
  }
50012
50024
  return result;
50013
50025
  }
50026
+ /**
50027
+ * Aggressively strip ALL token-like fragments from a string. Used for tool
50028
+ * call arguments where any `<|` corruption causes downstream failures.
50029
+ * More aggressive than `stripModelTokens` — removes bare `<|` and `|>` fragments
50030
+ * that don't match any known token template.
50031
+ */
50032
+ function stripModelTokensAggressive(text, modelId) {
50033
+ if (!text || !isGemmaModel$1(modelId)) return text;
50034
+ let result = stripModelTokens(text, modelId);
50035
+ for (const re of AGGRESSIVE_TOKEN_FRAGMENTS) {
50036
+ re.lastIndex = 0;
50037
+ result = result.replace(re, "");
50038
+ }
50039
+ return result;
50040
+ }
50014
50041
 
50015
50042
  //#endregion
50016
50043
  //#region src/agents/pi-tools.abort.ts
@@ -61168,10 +61195,10 @@ function wrapToolWithArgSanitization(tool, modelId) {
61168
61195
  };
61169
61196
  }
61170
61197
  function sanitizeToolArgs(params, modelId) {
61171
- if (!params || typeof params !== "object") return typeof params === "string" ? stripModelTokens(params, modelId) : params;
61198
+ if (!params || typeof params !== "object") return typeof params === "string" ? stripModelTokensAggressive(params, modelId) : params;
61172
61199
  if (Array.isArray(params)) return params.map((item) => sanitizeToolArgs(item, modelId));
61173
61200
  const result = {};
61174
- for (const [key, value] of Object.entries(params)) if (typeof value === "string") result[key] = stripModelTokens(value, modelId);
61201
+ for (const [key, value] of Object.entries(params)) if (typeof value === "string") result[key] = stripModelTokensAggressive(value, modelId);
61175
61202
  else if (value && typeof value === "object") result[key] = sanitizeToolArgs(value, modelId);
61176
61203
  else result[key] = value;
61177
61204
  return result;
@@ -64420,10 +64447,6 @@ function resolveModelProfile(modelId, userProfiles) {
64420
64447
 
64421
64448
  //#endregion
64422
64449
  //#region src/agents/pi-embedded-runner/extra-params.ts
64423
- const OPENROUTER_APP_HEADERS = {
64424
- "HTTP-Referer": "https://symi.ai",
64425
- "X-Title": "Symi"
64426
- };
64427
64450
  const ANTHROPIC_CONTEXT_1M_BETA = "context-1m-2025-08-07";
64428
64451
  const ANTHROPIC_1M_MODEL_PREFIXES = ["claude-opus-4", "claude-sonnet-4"];
64429
64452
  const OPENAI_RESPONSES_APIS = new Set(["openai-responses"]);
@@ -64441,70 +64464,6 @@ function resolveExtraParams(params) {
64441
64464
  const profile = resolveModelProfile(modelKey, params.cfg?.models?.profiles);
64442
64465
  if (profile.params && Object.keys(profile.params).length > 0) return { ...profile.params };
64443
64466
  }
64444
- /**
64445
- * Resolve cacheRetention from extraParams, supporting both new `cacheRetention`
64446
- * and legacy `cacheControlTtl` values for backwards compatibility.
64447
- *
64448
- * Mapping: "5m" → "short", "1h" → "long"
64449
- *
64450
- * Only applies to Anthropic provider (OpenRouter uses openai-completions API
64451
- * with hardcoded cache_control, not the cacheRetention stream option).
64452
- *
64453
- * Defaults to "short" for Anthropic provider when not explicitly configured.
64454
- */
64455
- function resolveCacheRetention(extraParams, provider) {
64456
- if (provider !== "anthropic") return;
64457
- const newVal = extraParams?.cacheRetention;
64458
- if (newVal === "none" || newVal === "short" || newVal === "long") return newVal;
64459
- const legacy = extraParams?.cacheControlTtl;
64460
- if (legacy === "5m") return "short";
64461
- if (legacy === "1h") return "long";
64462
- return "short";
64463
- }
64464
- function createStreamFnWithExtraParams(baseStreamFn, extraParams, provider) {
64465
- if (!extraParams || Object.keys(extraParams).length === 0) return;
64466
- const streamParams = {};
64467
- if (typeof extraParams.temperature === "number") streamParams.temperature = extraParams.temperature;
64468
- if (typeof extraParams.maxTokens === "number") streamParams.maxTokens = extraParams.maxTokens;
64469
- if (typeof extraParams.top_p === "number") streamParams.top_p = extraParams.top_p;
64470
- if (typeof extraParams.top_k === "number") streamParams.top_k = extraParams.top_k;
64471
- if (typeof extraParams.repeat_penalty === "number") streamParams.repeat_penalty = extraParams.repeat_penalty;
64472
- if (Array.isArray(extraParams.stop) && extraParams.stop.length > 0) streamParams.stop = extraParams.stop;
64473
- if (extraParams.chat_template_kwargs && typeof extraParams.chat_template_kwargs === "object") streamParams.chat_template_kwargs = extraParams.chat_template_kwargs;
64474
- const cacheRetention = resolveCacheRetention(extraParams, provider);
64475
- if (cacheRetention) streamParams.cacheRetention = cacheRetention;
64476
- if (Object.keys(streamParams).length === 0) return;
64477
- log$2.debug(`creating streamFn wrapper with params: ${JSON.stringify(streamParams)}`);
64478
- const sp = streamParams;
64479
- const payloadOverrides = {};
64480
- if (Array.isArray(sp.stop) && sp.stop.length > 0) payloadOverrides.stop = sp.stop;
64481
- if (typeof sp.top_p === "number") payloadOverrides.top_p = sp.top_p;
64482
- if (typeof sp.top_k === "number") payloadOverrides.top_k = sp.top_k;
64483
- if (typeof sp.repeat_penalty === "number") payloadOverrides.repeat_penalty = sp.repeat_penalty;
64484
- const hasPayloadOverrides = Object.keys(payloadOverrides).length > 0;
64485
- const underlying = baseStreamFn ?? streamSimple;
64486
- const wrappedStreamFn = (model, context, options) => {
64487
- if (hasPayloadOverrides) {
64488
- const originalOnPayload = options?.onPayload;
64489
- return underlying(model, context, {
64490
- ...streamParams,
64491
- ...options,
64492
- onPayload: (payload) => {
64493
- if (payload && typeof payload === "object") {
64494
- const p = payload;
64495
- for (const [key, value] of Object.entries(payloadOverrides)) if (p[key] === void 0) p[key] = value;
64496
- }
64497
- originalOnPayload?.(payload);
64498
- }
64499
- });
64500
- }
64501
- return underlying(model, context, {
64502
- ...streamParams,
64503
- ...options
64504
- });
64505
- };
64506
- return wrappedStreamFn;
64507
- }
64508
64467
  function isDirectOpenAIBaseUrl(baseUrl) {
64509
64468
  if (typeof baseUrl !== "string" || !baseUrl.trim()) return true;
64510
64469
  try {
@@ -64585,20 +64544,6 @@ function createAnthropicBetaHeadersWrapper(baseStreamFn, betas) {
64585
64544
  };
64586
64545
  }
64587
64546
  /**
64588
- * Create a streamFn wrapper that adds OpenRouter app attribution headers.
64589
- * These headers allow Symi to appear on OpenRouter's leaderboard.
64590
- */
64591
- function createOpenRouterHeadersWrapper(baseStreamFn) {
64592
- const underlying = baseStreamFn ?? streamSimple;
64593
- return (model, context, options) => underlying(model, context, {
64594
- ...options,
64595
- headers: {
64596
- ...OPENROUTER_APP_HEADERS,
64597
- ...options?.headers
64598
- }
64599
- });
64600
- }
64601
- /**
64602
64547
  * Create a streamFn wrapper that injects tool_stream=true for Z.AI providers.
64603
64548
  *
64604
64549
  * Z.AI's API supports the `tool_stream` parameter to enable real-time streaming
@@ -64621,82 +64566,6 @@ function createZaiToolStreamWrapper(baseStreamFn, enabled) {
64621
64566
  });
64622
64567
  };
64623
64568
  }
64624
- const GEMMA_STOP_SEQUENCES = ["<end_of_turn>", "<eos>"];
64625
- const VLLM_GEMMA_HINTS = ["gemma", "redsand"];
64626
- function isVllmOrGemmaProvider(provider, modelId, cfg) {
64627
- const lower = `${provider}/${modelId}`.toLowerCase();
64628
- if (VLLM_GEMMA_HINTS.some((h) => lower.includes(h))) return true;
64629
- const baseUrl = ((cfg?.models?.providers?.[provider])?.baseUrl ?? "").toLowerCase();
64630
- return baseUrl.includes("coreweave") || baseUrl.includes("vllm");
64631
- }
64632
- /**
64633
- * Wrap the stream function to fix vLLM/Gemma compat issues via onPayload:
64634
- * 1. Replace `max_completion_tokens` with `max_tokens` (vLLM ignores the former)
64635
- * 2. Inject Gemma stop sequences if none are set
64636
- * 3. Remove unsupported fields (store, stream_options.include_usage on older vLLM)
64637
- */
64638
- function createVllmCompatWrapper(baseStreamFn, extraParams) {
64639
- const underlying = baseStreamFn ?? streamSimple;
64640
- const configuredStop = Array.isArray(extraParams.stop) ? extraParams.stop : GEMMA_STOP_SEQUENCES;
64641
- return (model, context, options) => {
64642
- const originalOnPayload = options?.onPayload;
64643
- return underlying(model, context, {
64644
- ...options,
64645
- onPayload: (payload) => {
64646
- if (payload && typeof payload === "object") {
64647
- const p = payload;
64648
- if (p.max_completion_tokens && !p.max_tokens) {
64649
- p.max_tokens = p.max_completion_tokens;
64650
- delete p.max_completion_tokens;
64651
- }
64652
- if (!p.stop && configuredStop.length > 0) p.stop = configuredStop;
64653
- delete p.store;
64654
- }
64655
- originalOnPayload?.(payload);
64656
- }
64657
- });
64658
- };
64659
- }
64660
- /**
64661
- * Apply extra params (like temperature) to an agent's streamFn.
64662
- * Also adds OpenRouter app attribution headers when using the OpenRouter provider.
64663
- *
64664
- * @internal Exported for testing
64665
- */
64666
- function applyExtraParamsToAgent(agent, cfg, provider, modelId, extraParamsOverride) {
64667
- const extraParams = resolveExtraParams({
64668
- cfg,
64669
- provider,
64670
- modelId
64671
- });
64672
- const override = extraParamsOverride && Object.keys(extraParamsOverride).length > 0 ? Object.fromEntries(Object.entries(extraParamsOverride).filter(([, value]) => value !== void 0)) : void 0;
64673
- const merged = Object.assign({}, extraParams, override);
64674
- const wrappedStreamFn = createStreamFnWithExtraParams(agent.streamFn, merged, provider);
64675
- if (wrappedStreamFn) {
64676
- log$2.debug(`applying extraParams to agent streamFn for ${provider}/${modelId}`);
64677
- agent.streamFn = wrappedStreamFn;
64678
- }
64679
- const anthropicBetas = resolveAnthropicBetas(merged, provider, modelId);
64680
- if (anthropicBetas?.length) {
64681
- log$2.debug(`applying Anthropic beta header for ${provider}/${modelId}: ${anthropicBetas.join(",")}`);
64682
- agent.streamFn = createAnthropicBetaHeadersWrapper(agent.streamFn, anthropicBetas);
64683
- }
64684
- if (provider === "openrouter") {
64685
- log$2.debug(`applying OpenRouter app attribution headers for ${provider}/${modelId}`);
64686
- agent.streamFn = createOpenRouterHeadersWrapper(agent.streamFn);
64687
- }
64688
- if (provider === "zai" || provider === "z-ai") {
64689
- if (merged?.tool_stream !== false) {
64690
- log$2.debug(`enabling Z.AI tool_stream for ${provider}/${modelId}`);
64691
- agent.streamFn = createZaiToolStreamWrapper(agent.streamFn, true);
64692
- }
64693
- }
64694
- if (isVllmOrGemmaProvider(provider, modelId, cfg)) {
64695
- log$2.debug(`applying vLLM/Gemma compat wrapper for ${provider}/${modelId}`);
64696
- agent.streamFn = createVllmCompatWrapper(agent.streamFn, merged);
64697
- }
64698
- agent.streamFn = createOpenAIResponsesStoreWrapper(agent.streamFn);
64699
- }
64700
64569
 
64701
64570
  //#endregion
64702
64571
  //#region src/utils/safe-json.ts
@@ -64973,6 +64842,74 @@ function createCacheTrace(params) {
64973
64842
  };
64974
64843
  }
64975
64844
 
64845
+ //#endregion
64846
+ //#region src/agents/model-aware-stream.ts
64847
+ /**
64848
+ * Create a single stream function wrapper that handles all provider-specific
64849
+ * param injection via one onPayload hook.
64850
+ *
64851
+ * Replaces: createStreamFnWithExtraParams, createVllmCompatWrapper,
64852
+ * createOpenRouterHeadersWrapper.
64853
+ */
64854
+ function createModelAwareStreamFn(opts) {
64855
+ const underlying = opts.baseStreamFn ?? streamSimple;
64856
+ const mergedParams = {
64857
+ ...opts.profile.params,
64858
+ ...opts.configExtraParams,
64859
+ ...opts.streamParamsOverride
64860
+ };
64861
+ const nativeOpts = {};
64862
+ if (typeof mergedParams.temperature === "number") nativeOpts.temperature = mergedParams.temperature;
64863
+ if (typeof mergedParams.max_tokens === "number") nativeOpts.maxTokens = mergedParams.max_tokens;
64864
+ else if (typeof mergedParams.maxTokens === "number") nativeOpts.maxTokens = mergedParams.maxTokens;
64865
+ const injections = {};
64866
+ if (Array.isArray(mergedParams.stop) && mergedParams.stop.length > 0) injections.stop = mergedParams.stop;
64867
+ if (typeof mergedParams.top_p === "number") injections.top_p = mergedParams.top_p;
64868
+ if (typeof mergedParams.top_k === "number") injections.top_k = mergedParams.top_k;
64869
+ if (typeof mergedParams.repeat_penalty === "number") injections.repeat_penalty = mergedParams.repeat_penalty;
64870
+ const isVllm = isVllmProvider(opts.provider, opts.modelId, opts.config);
64871
+ const isOpenRouter = opts.provider === "openrouter";
64872
+ const extraHeaders = {};
64873
+ if (isOpenRouter) {
64874
+ extraHeaders["HTTP-Referer"] = "https://symi.ai";
64875
+ extraHeaders["X-Title"] = "Symi";
64876
+ }
64877
+ const hasExtraHeaders = Object.keys(extraHeaders).length > 0;
64878
+ const onPayloadHook = (payload, callerOnPayload) => {
64879
+ if (payload && typeof payload === "object") {
64880
+ const p = payload;
64881
+ for (const [key, val] of Object.entries(injections)) if (p[key] === void 0) p[key] = val;
64882
+ if (isVllm) {
64883
+ if (p.max_completion_tokens && !p.max_tokens) {
64884
+ p.max_tokens = p.max_completion_tokens;
64885
+ delete p.max_completion_tokens;
64886
+ }
64887
+ delete p.store;
64888
+ }
64889
+ }
64890
+ callerOnPayload?.(payload);
64891
+ };
64892
+ return (model, context, options) => {
64893
+ const callerOnPayload = options?.onPayload;
64894
+ return underlying(model, context, {
64895
+ ...nativeOpts,
64896
+ ...options,
64897
+ onPayload: (payload) => onPayloadHook(payload, callerOnPayload),
64898
+ ...hasExtraHeaders ? { headers: {
64899
+ ...extraHeaders,
64900
+ ...options?.headers
64901
+ } } : {}
64902
+ });
64903
+ };
64904
+ }
64905
+ /** Detect vLLM/Gemma providers by model hints or baseUrl patterns. */
64906
+ function isVllmProvider(provider, modelId, config) {
64907
+ const lower = `${provider}/${modelId}`.toLowerCase();
64908
+ if (["gemma", "redsand"].some((h) => lower.includes(h))) return true;
64909
+ const baseUrl = ((config?.models?.providers?.[provider])?.baseUrl ?? "").toLowerCase();
64910
+ return baseUrl.includes("coreweave") || baseUrl.includes("vllm");
64911
+ }
64912
+
64976
64913
  //#endregion
64977
64914
  //#region src/auto-reply/reply/streaming-directives.ts
64978
64915
  const splitTrailingDirective = (text) => {
@@ -68020,14 +67957,39 @@ async function runEmbeddedAttempt(params) {
68020
67957
  modelApi: params.model.api,
68021
67958
  workspaceDir: params.workspaceDir
68022
67959
  });
68023
- if (params.model.api === "ollama") {
68024
- const providerConfig = params.config?.models?.providers?.[params.model.provider];
68025
- const modelBaseUrl = typeof params.model.baseUrl === "string" ? params.model.baseUrl.trim() : "";
68026
- const providerBaseUrl = typeof providerConfig?.baseUrl === "string" ? providerConfig.baseUrl.trim() : "";
68027
- const ollamaBaseUrl = modelBaseUrl || providerBaseUrl || OLLAMA_NATIVE_BASE_URL;
68028
- activeSession.agent.streamFn = createOllamaStreamFn(ollamaBaseUrl);
68029
- } else activeSession.agent.streamFn = streamSimple;
68030
- applyExtraParamsToAgent(activeSession.agent, params.config, params.provider, params.modelId, params.streamParams);
67960
+ {
67961
+ let baseStreamFn = streamSimple;
67962
+ if (params.model.api === "ollama") {
67963
+ const providerConfig = params.config?.models?.providers?.[params.model.provider];
67964
+ const modelBaseUrl = typeof params.model.baseUrl === "string" ? params.model.baseUrl.trim() : "";
67965
+ const providerBaseUrl = typeof providerConfig?.baseUrl === "string" ? providerConfig.baseUrl.trim() : "";
67966
+ baseStreamFn = createOllamaStreamFn(modelBaseUrl || providerBaseUrl || OLLAMA_NATIVE_BASE_URL);
67967
+ }
67968
+ const configExtraParams = resolveExtraParams({
67969
+ cfg: params.config,
67970
+ provider: params.provider,
67971
+ modelId: params.modelId
67972
+ });
67973
+ activeSession.agent.streamFn = createModelAwareStreamFn({
67974
+ baseStreamFn,
67975
+ profile: modelProfile,
67976
+ provider: params.provider,
67977
+ modelId: params.modelId,
67978
+ config: params.config,
67979
+ configExtraParams,
67980
+ streamParamsOverride: params.streamParams
67981
+ });
67982
+ const merged = {
67983
+ ...configExtraParams,
67984
+ ...params.streamParams
67985
+ };
67986
+ const anthropicBetas = resolveAnthropicBetas(merged, params.provider, params.modelId);
67987
+ if (anthropicBetas?.length) activeSession.agent.streamFn = createAnthropicBetaHeadersWrapper(activeSession.agent.streamFn, anthropicBetas);
67988
+ if (params.provider === "zai" || params.provider === "z-ai") {
67989
+ if (merged?.tool_stream !== false) activeSession.agent.streamFn = createZaiToolStreamWrapper(activeSession.agent.streamFn, true);
67990
+ }
67991
+ activeSession.agent.streamFn = createOpenAIResponsesStoreWrapper(activeSession.agent.streamFn);
67992
+ }
68031
67993
  if (cacheTrace) {
68032
67994
  cacheTrace.recordStage("session:loaded", {
68033
67995
  messages: activeSession.messages,
@@ -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-kuMxu6Q4.js";
2
+ import "./reply-DTKTuCrn.js";
3
3
  import "./paths-DR2yt_mP.js";
4
4
  import "./github-copilot-token-D9X2phUj.js";
5
5
  import "./plugins-BbAvhC25.js";
@@ -45,7 +45,7 @@ import "./pi-embedded-helpers-BveUP4hk.js";
45
45
  import "./paths-A0xdf3yk.js";
46
46
  import "./diagnostic-mFf4i4G9.js";
47
47
  import "./store-Do3t33-c.js";
48
- import { n as monitorWebInbox, t as monitorWebChannel } from "./channel-web-BnrTC55Y.js";
48
+ import { n as monitorWebInbox, t as monitorWebChannel } from "./channel-web-uUypcT9Q.js";
49
49
  import "./image-BOYy0Ump.js";
50
50
  import "./pi-model-discovery-LbcEa65a.js";
51
51
  import "./api-key-rotation-CVBMpnPc.js";
@@ -4,8 +4,8 @@ import { h as normalizeAccountId, m as DEFAULT_ACCOUNT_ID } from "./session-key-
4
4
  import { c as normalizeAnyChannelId, f as requireActivePluginRegistry, n as CHAT_CHANNEL_ORDER } from "./registry-Cja8eT7G.js";
5
5
  import { t as isTruthyEnvValue } from "./env-DPCHYPeH.js";
6
6
  import { t as normalizeChatType } from "./chat-type-DyovJwCt.js";
7
- import { h as createAccountListHelpers } from "./accounts-Cd816n6l.js";
8
- import { i as resolveDefaultAgentBoundAccountId, r as listBoundAccountIds } from "./bindings-ChzePa8q.js";
7
+ import { h as createAccountListHelpers } from "./accounts-DDuIpcln.js";
8
+ import { i as resolveDefaultAgentBoundAccountId, r as listBoundAccountIds } from "./bindings-DFaVVCsf.js";
9
9
  import fs from "node:fs";
10
10
 
11
11
  //#region src/channels/plugins/account-action-gate.ts