@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
@@ -3,101 +3,101 @@ import { g as resolveStateDir, r as STATE_DIR, u as resolveGatewayPort, y as res
3
3
  import { B as theme, C as sleep$1, D as isPlainObject, E as truncateUtf16Safe, F as shouldLogVerbose, J as normalizeLogLevel, L as warn, M as logVerbose, O as danger, S as shortenHomePath, V as getChildLogger, X as resolvePreferredSymiTmpDir, d as isRecord$1, i as clampInt, l as escapeRegExp, m as normalizeE164, t as CONFIG_DIR, w as sliceUtf16Safe, x as shortenHomeInString, y as resolveUserPath } from "./utils-B-0b9bGM.js";
4
4
  import { a as normalizeElevatedLevel, c as normalizeUsageDisplay, d as supportsXHighThinking, l as normalizeVerboseLevel, n as formatXHighModelHint, o as normalizeReasoningLevel, s as normalizeThinkLevel, t as formatThinkingLevels, u as resolveResponseUsageMode } from "./thinking-EAliFiVK.js";
5
5
  import { C as resolveThreadParentSessionKey, S as parseAgentSessionKey, _ as getSubagentDepth, b as isCronSessionKey, c as normalizeMainKey, d as sanitizeAgentId, h as normalizeAccountId$2, l as resolveAgentIdFromSessionKey, m as DEFAULT_ACCOUNT_ID, o as classifySessionKeyShape, r as buildAgentMainSessionKey, s as normalizeAgentId, t as DEFAULT_AGENT_ID, u as resolveThreadSessionKeys, v as isAcpSessionKey, x as isSubagentSessionKey, y as isCronRunSessionKey } from "./session-key-DCt45XZa.js";
6
- import { t as resolveSymiPackageRoot } from "./symi-root-MF6_6SCS.js";
6
+ import { t as resolveSymiPackageRoot } from "./symi-root-CrGJbkzf.js";
7
7
  import { C as createInternalHookEvent, T as triggerInternalHook, _ as clearPluginCommands, b as listPluginCommands, c as normalizeAnyChannelId, f as requireActivePluginRegistry, g as normalizePluginHttpPath, h as createPluginRegistry, l as normalizeChannelId, n as CHAT_CHANNEL_ORDER, p as setActivePluginRegistry, r as DEFAULT_CHAT_CHANNEL, v as executePluginCommand, x as matchPluginCommand, y as getPluginCommandSpecs } from "./registry-Cja8eT7G.js";
8
8
  import { d as createNonExitingRuntime, f as defaultRuntime, t as createSubsystemLogger } from "./subsystem-D9vIQve0.js";
9
9
  import { a as logError, i as logDebug, n as runExec, o as logInfo, r as spawnWithFallback, s as logWarn, t as runCommandWithTimeout } from "./exec-CWkblSrI.js";
10
- import { C as ensureAgentWorkspace, E as loadWorkspaceBootstrapFiles, a as resolveAgentModelFallbacksOverride, c as resolveAgentWorkspaceDir, d as resolveSessionAgentId, f as resolveSessionAgentIds, g as DEFAULT_IDENTITY_FILENAME, h as DEFAULT_BOOTSTRAP_FILENAME, i as resolveAgentDir, l as resolveDefaultAgentId, m as DEFAULT_AGENT_WORKSPACE_DIR, n as listAgentIds, o as resolveAgentModelPrimary, r as resolveAgentConfig, s as resolveAgentSkillsFilter, u as resolveEffectiveModelFallbacks, w as filterBootstrapFilesForSession } from "./agent-scope-BRwEc2pG.js";
11
- import { At as ensureAuthProfileStore, Bt as normalizeSecretInput, Et as markAuthProfileGood, Ft as resolveSymiAgentDir, G as getCustomProviderApiKey, Gt as DEFAULT_MODEL, H as OLLAMA_NATIVE_BASE_URL, It as withFileLock, K as requireApiKey, Kt as DEFAULT_PROVIDER, Pt as resolveAuthStorePathForDisplay, Q as getShellPathFromLoginShell, Tt as listProfilesForProvider, U as createOllamaStreamFn, Vt as resolveAuthProfileDisplayLabel, W as getApiKeyForModel, Wt as DEFAULT_CONTEXT_TOKENS, X as resolveModelAuthMode, Y as resolveEnvApiKey, c as normalizeModelRef$2, et as resolveShellEnvFallbackTimeoutMs, ft as resolveAuthProfileOrder, g as resolveModelRefFromString, gt as markAuthProfileUsed, ht as markAuthProfileFailure, i as findNormalizedProviderValue, l as normalizeProviderId, m as resolveDefaultModelForAgent, mt as isProfileInCooldown, n as buildConfiguredAllowlistKeys, o as isCliProvider, p as resolveConfiguredModelRef, pt as getSoonestCooldownExpiry, q as resolveApiKeyForProvider, r as buildModelAliasIndex, s as modelKey, t as buildAllowedModelSet, u as parseModelRef, v as resolveSubagentSpawnModelSelection, vt as resolveApiKeyForProfile, wt as dedupeProfileIds, y as resolveThinkingDefault } from "./model-selection-X1oLh3CE.js";
10
+ import { C as ensureAgentWorkspace, E as loadWorkspaceBootstrapFiles, a as resolveAgentModelFallbacksOverride, c as resolveAgentWorkspaceDir, d as resolveSessionAgentId, f as resolveSessionAgentIds, g as DEFAULT_IDENTITY_FILENAME, h as DEFAULT_BOOTSTRAP_FILENAME, i as resolveAgentDir, l as resolveDefaultAgentId, m as DEFAULT_AGENT_WORKSPACE_DIR, n as listAgentIds, o as resolveAgentModelPrimary, r as resolveAgentConfig, s as resolveAgentSkillsFilter, u as resolveEffectiveModelFallbacks, w as filterBootstrapFilesForSession } from "./agent-scope-CgUHAtCo.js";
11
+ import { At as ensureAuthProfileStore, Bt as normalizeSecretInput, Et as markAuthProfileGood, Ft as resolveSymiAgentDir, G as getCustomProviderApiKey, Gt as DEFAULT_MODEL, H as OLLAMA_NATIVE_BASE_URL, It as withFileLock, K as requireApiKey, Kt as DEFAULT_PROVIDER, Pt as resolveAuthStorePathForDisplay, Q as getShellPathFromLoginShell, Tt as listProfilesForProvider, U as createOllamaStreamFn, Vt as resolveAuthProfileDisplayLabel, W as getApiKeyForModel, Wt as DEFAULT_CONTEXT_TOKENS, X as resolveModelAuthMode, Y as resolveEnvApiKey, c as normalizeModelRef$2, et as resolveShellEnvFallbackTimeoutMs, ft as resolveAuthProfileOrder, g as resolveModelRefFromString, gt as markAuthProfileUsed, ht as markAuthProfileFailure, i as findNormalizedProviderValue, l as normalizeProviderId, m as resolveDefaultModelForAgent, mt as isProfileInCooldown, n as buildConfiguredAllowlistKeys, o as isCliProvider, p as resolveConfiguredModelRef, pt as getSoonestCooldownExpiry, q as resolveApiKeyForProvider, r as buildModelAliasIndex, s as modelKey, t as buildAllowedModelSet, u as parseModelRef, v as resolveSubagentSpawnModelSelection, vt as resolveApiKeyForProfile, wt as dedupeProfileIds, y as resolveThinkingDefault } from "./model-selection-CyFvYcRt.js";
12
12
  import { a as saveJsonFile, i as loadJsonFile } from "./github-copilot-token-DAu1a6BX.js";
13
13
  import { t as formatCliCommand } from "./command-format-COaS-S7B.js";
14
14
  import { t as parseBooleanValue$1 } from "./boolean-BsqeuxE6.js";
15
15
  import { t as isTruthyEnvValue } from "./env-DPCHYPeH.js";
16
16
  import { a as isInternalMessageChannel, c as listDeliverableMessageChannels, d as resolveMessageChannel, h as GATEWAY_CLIENT_NAMES, i as isGatewayMessageChannel, l as normalizeMessageChannel, m as GATEWAY_CLIENT_MODES, n as isDeliverableMessageChannel, o as isMarkdownCapableMessageChannel, p as GATEWAY_CLIENT_IDS, t as INTERNAL_MESSAGE_CHANNEL, u as resolveGatewayMessageChannel } from "./message-channel-aT-I_DTX.js";
17
- import { $ as parseDiscordTarget, A as unpinMessageDiscord, B as listScheduledEventsDiscord, C as editMessageDiscord, Ct as createDiscordRestClient, D as pinMessageDiscord, Dt as normalizeChannelSlug, E as listThreadsDiscord, Et as buildChannelKeyCandidates, F as fetchMemberInfoDiscord, G as uploadStickerDiscord, H as timeoutMemberDiscord, I as fetchRoleInfoDiscord, J as editChannelDiscord, K as createChannelDiscord, L as fetchVoiceStatusDiscord, M as banMemberDiscord, N as createScheduledEventDiscord, O as readMessagesDiscord, Ot as resolveChannelEntryMatchWithFallback, P as fetchChannelInfoDiscord, Q as stripUndefinedFields, R as kickMemberDiscord, S as deleteMessageDiscord, St as createDiscordClient, T as listPinsDiscord, Tt as applyChannelMatchMeta, U as listGuildEmojisDiscord, V as removeRoleDiscord, W as uploadEmojiDiscord, X as removeChannelPermissionDiscord, Y as moveChannelDiscord, Z as setChannelPermissionDiscord, _ as sendPollDiscord, _t as resolveDiscordSystemLocation, a as removeReactionDiscord, at as normalizeDiscordAllowList, b as sendWebhookMessageDiscord, bt as fetchChannelPermissionsDiscord, c as formatDiscordComponentEventText, ct as resolveDiscordChannelConfigWithFallback, d as parseDiscordModalCustomId, dt as resolveDiscordOwnerAllowFrom, et as resolveDiscordChannelId, f as parseDiscordModalCustomIdForCarbon, ft as resolveDiscordShouldRequireMention, g as sendMessageDiscord, gt as formatDiscordUserTag, h as resolveDiscordModalEntry, ht as formatDiscordReactionEmoji, i as removeOwnReactionsDiscord, it as isDiscordGroupAllowedByPolicy, j as addRoleDiscord, k as searchMessagesDiscord, l as parseDiscordComponentCustomId, lt as resolveDiscordGuildEntry, m as resolveDiscordComponentEntry, mt as shouldEmitDiscordReactionNotification, n as fetchReactionsDiscord, nt as listDiscordDirectoryPeersLive, o as sendDiscordComponentMessage, ot as normalizeDiscordSlug, p as readDiscordComponentSpec, pt as resolveGroupDmAllow, q as deleteChannelDiscord, r as reactMessageDiscord, rt as allowListMatches$1, s as createDiscordFormModal, st as resolveDiscordAllowListMatch, tt as listDiscordDirectoryGroupsLive, u as parseDiscordComponentCustomIdForCarbon, ut as resolveDiscordMemberAccessState, v as sendStickerDiscord, vt as resolveTimestampMs, w as fetchMessageDiscord, wt as chunkDiscordTextWithMode, x as createThreadDiscord, xt as hasAnyGuildPermissionDiscord, y as sendVoiceMessageDiscord, yt as fetchDiscord, z as listGuildChannelsDiscord } from "./send-BnuIB59F.js";
18
- import { A as parseConfigPath, B as resolveAgentMaxConcurrent, C as parseDurationMs, D as setConfigOverride, E as resetConfigOverrides, H as VERSION, M as unsetConfigValueAtPath, O as unsetConfigOverride, T as getConfigOverrides, _ as isInboundPathAllowed, b as resolveIMessageRemoteAttachmentRoots, c as resolveConfigSnapshotHash, h as resolveTelegramCustomCommands, i as loadConfig, j as setConfigValueAtPath, k as getConfigValueAtPath, l as writeConfigFile, m as normalizeTelegramCommandName, o as readConfigFileSnapshot, p as TELEGRAM_COMMAND_NAME_PATTERN, u as validateConfigObjectWithPlugins, w as validateJsonSchemaValue, x as normalizeScpRemoteHost, y as resolveIMessageAttachmentRoots, z as DEFAULT_SUBAGENT_MAX_SPAWN_DEPTH } from "./config-CJMcIRQM.js";
17
+ import { $ as parseDiscordTarget, A as unpinMessageDiscord, B as listScheduledEventsDiscord, C as editMessageDiscord, Ct as createDiscordRestClient, D as pinMessageDiscord, Dt as normalizeChannelSlug, E as listThreadsDiscord, Et as buildChannelKeyCandidates, F as fetchMemberInfoDiscord, G as uploadStickerDiscord, H as timeoutMemberDiscord, I as fetchRoleInfoDiscord, J as editChannelDiscord, K as createChannelDiscord, L as fetchVoiceStatusDiscord, M as banMemberDiscord, N as createScheduledEventDiscord, O as readMessagesDiscord, Ot as resolveChannelEntryMatchWithFallback, P as fetchChannelInfoDiscord, Q as stripUndefinedFields, R as kickMemberDiscord, S as deleteMessageDiscord, St as createDiscordClient, T as listPinsDiscord, Tt as applyChannelMatchMeta, U as listGuildEmojisDiscord, V as removeRoleDiscord, W as uploadEmojiDiscord, X as removeChannelPermissionDiscord, Y as moveChannelDiscord, Z as setChannelPermissionDiscord, _ as sendPollDiscord, _t as resolveDiscordSystemLocation, a as removeReactionDiscord, at as normalizeDiscordAllowList, b as sendWebhookMessageDiscord, bt as fetchChannelPermissionsDiscord, c as formatDiscordComponentEventText, ct as resolveDiscordChannelConfigWithFallback, d as parseDiscordModalCustomId, dt as resolveDiscordOwnerAllowFrom, et as resolveDiscordChannelId, f as parseDiscordModalCustomIdForCarbon, ft as resolveDiscordShouldRequireMention, g as sendMessageDiscord, gt as formatDiscordUserTag, h as resolveDiscordModalEntry, ht as formatDiscordReactionEmoji, i as removeOwnReactionsDiscord, it as isDiscordGroupAllowedByPolicy, j as addRoleDiscord, k as searchMessagesDiscord, l as parseDiscordComponentCustomId, lt as resolveDiscordGuildEntry, m as resolveDiscordComponentEntry, mt as shouldEmitDiscordReactionNotification, n as fetchReactionsDiscord, nt as listDiscordDirectoryPeersLive, o as sendDiscordComponentMessage, ot as normalizeDiscordSlug, p as readDiscordComponentSpec, pt as resolveGroupDmAllow, q as deleteChannelDiscord, r as reactMessageDiscord, rt as allowListMatches$1, s as createDiscordFormModal, st as resolveDiscordAllowListMatch, tt as listDiscordDirectoryGroupsLive, u as parseDiscordComponentCustomIdForCarbon, ut as resolveDiscordMemberAccessState, v as sendStickerDiscord, vt as resolveTimestampMs, w as fetchMessageDiscord, wt as chunkDiscordTextWithMode, x as createThreadDiscord, xt as hasAnyGuildPermissionDiscord, y as sendVoiceMessageDiscord, yt as fetchDiscord, z as listGuildChannelsDiscord } from "./send-CZr1hVHY.js";
18
+ import { A as parseConfigPath, B as resolveAgentMaxConcurrent, C as parseDurationMs, D as setConfigOverride, E as resetConfigOverrides, H as VERSION, M as unsetConfigValueAtPath, O as unsetConfigOverride, T as getConfigOverrides, _ as isInboundPathAllowed, b as resolveIMessageRemoteAttachmentRoots, c as resolveConfigSnapshotHash, h as resolveTelegramCustomCommands, i as loadConfig, j as setConfigValueAtPath, k as getConfigValueAtPath, l as writeConfigFile, m as normalizeTelegramCommandName, o as readConfigFileSnapshot, p as TELEGRAM_COMMAND_NAME_PATTERN, u as validateConfigObjectWithPlugins, w as validateJsonSchemaValue, x as normalizeScpRemoteHost, y as resolveIMessageAttachmentRoots, z as DEFAULT_SUBAGENT_MAX_SPAWN_DEPTH } from "./config-CHwyw6l5.js";
19
19
  import { a as safeStatSync, c as applyTestPluginDefaults, d as resolveEnableState, f as resolveMemorySlotDecision, h as isDangerousHostEnvVarName, i as isPathInside, n as loadPluginManifestRegistry, r as discoverSymiPlugins, u as normalizePluginsConfig } from "./manifest-registry-C4BxOMWX.js";
20
20
  import { a as isPathInsideWithRealpath } from "./legacy-names-Be3msDZo.js";
21
21
  import { t as normalizeChatType } from "./chat-type-DyovJwCt.js";
22
22
  import { n as resolveConversationLabel } from "./conversation-label-Bn5j3lUT.js";
23
23
  import { r as normalizeInboundTextNewlines, t as finalizeInboundContext } from "./inbound-context-CmmmT8IP.js";
24
- import { _ as applyTemplate, a as resolveMediaAttachmentLocalRoots, c as resolveAttachmentKind, d as registerUnhandledRejectionHandler, f as resolveConcurrency, g as CLI_OUTPUT_MAX_BUFFER, h as resolveMediaUnderstandingScope, i as resolveAutoImageModel, l as buildRandomTempFilePath, m as normalizeMediaUnderstandingChatType, n as createMediaAttachmentCache, o as runCapability, p as resolveTimeoutMs, r as normalizeMediaAttachments, t as buildProviderRegistry } from "./runner-Cen70krW.js";
25
- import { _ as stripThinkingTagsFromText, a as decodeDataUrl, b as minimaxUnderstandImage, c as extractAssistantThinking, d as formatReasoningMessage, f as inferToolMetaFromArgs, g as stripMinimaxToolCallXml, h as stripDowngradedToolCallText, i as coerceImageModelConfig, l as extractThinkingFromTaggedStream, m as promoteThinkingTagsToBlocks, o as resolveProviderVisionModelFromConfig, p as isAssistantMessage, r as coerceImageAssistantText, s as extractAssistantText$1, u as extractThinkingFromTaggedText, v as stripReasoningTagsFromText, y as extractTextFromChatContent } from "./image-BiY-PfMh.js";
26
- import { t as ensureSymiModelsJson } from "./models-config-CqDdkHJq.js";
24
+ import { _ as applyTemplate, a as resolveMediaAttachmentLocalRoots, c as resolveAttachmentKind, d as registerUnhandledRejectionHandler, f as resolveConcurrency, g as CLI_OUTPUT_MAX_BUFFER, h as resolveMediaUnderstandingScope, i as resolveAutoImageModel, l as buildRandomTempFilePath, m as normalizeMediaUnderstandingChatType, n as createMediaAttachmentCache, o as runCapability, p as resolveTimeoutMs, r as normalizeMediaAttachments, t as buildProviderRegistry } from "./runner-CUglpiFP.js";
25
+ import { _ as stripThinkingTagsFromText, a as decodeDataUrl, b as minimaxUnderstandImage, c as extractAssistantThinking, d as formatReasoningMessage, f as inferToolMetaFromArgs, g as stripMinimaxToolCallXml, h as stripDowngradedToolCallText, i as coerceImageModelConfig, l as extractThinkingFromTaggedStream, m as promoteThinkingTagsToBlocks, o as resolveProviderVisionModelFromConfig, p as isAssistantMessage, r as coerceImageAssistantText, s as extractAssistantText$1, u as extractThinkingFromTaggedText, v as stripReasoningTagsFromText, y as extractTextFromChatContent } from "./image-D9uvDTrc.js";
26
+ import { t as ensureSymiModelsJson } from "./models-config-qyOXrOli.js";
27
27
  import { n as discoverModels, t as discoverAuthStorage } from "./pi-model-discovery-4uUnLc3n.js";
28
- import { A as isTransientHttpError, C as isContextOverflowError, D as isRateLimitAssistantError, E as isLikelyContextOverflowError, F as ensureSessionHeader, I as resolveBootstrapMaxChars, L as resolveBootstrapTotalMaxChars, M as parseImageSizeError, N as sanitizeUserFacingText, O as isRawApiErrorPayload, P as buildBootstrapContextFiles, R as sanitizeGoogleTurnOrdering, S as isCompactionFailureError, T as isFailoverErrorMessage, _ as formatRawAssistantErrorForUi, a as isMessagingToolDuplicateNormalized, b as isBillingAssistantError, c as extractToolCallsFromAssistant, d as isAntigravityClaude, f as isGoogleModelApi, g as formatBillingErrorMessage, h as formatAssistantErrorText, j as parseImageDimensionError, k as isTimeoutErrorMessage, l as extractToolResultId, m as classifyFailoverReason, n as validateGeminiTurns, o as normalizeTextForComparison, p as BILLING_ERROR_USER_MESSAGE, r as pickFallbackThinkingLevel, s as sanitizeSessionMessagesImages, t as validateAnthropicTurns, u as downgradeOpenAIReasoningBlocks, v as getApiErrorPayloadFingerprint, w as isFailoverAssistantError, x as isCloudCodeAssistFormatError, y as isAuthAssistantError } from "./pi-embedded-helpers-DO6u9K2t.js";
29
- import { C as stripPluginOnlyAllowlist, S as resolveToolProfilePolicy, T as matchesAnyGlobPattern, _ as collectExplicitAllowlist, a as ensureSandboxWorkspaceForSession, b as mergeAlsoAllowPolicy, c as resolveSandboxRuntimeStatus, d as getBridgeAuthForPort, f as resolveSandboxConfigForAgent, g as buildPluginToolGroups, h as applyOwnerOnlyToolPolicy, o as resolveSandboxContext, v as expandPolicyWithPluginGroups, w as compileGlobPatterns, x as normalizeToolName } from "./sandbox-BzNrUHpt.js";
30
- import { T as DEFAULT_AI_SNAPSHOT_MAX_CHARS } from "./chrome-r4RThPxq.js";
31
- import { i as resolveBrowserConfig, m as resolveBrowserControlAuth } from "./server-context-DUXqnh6l.js";
32
- import { a as resolveSkillsPromptForRun, d as resolveSandboxInputPath, h as applySkillEnvOverridesFromSnapshot, i as loadWorkspaceSkillEntries, l as assertMediaNotDataUrl, m as applySkillEnvOverrides, p as resolveSandboxedMediaSource, r as buildWorkspaceSkillSnapshot, u as assertSandboxPath } from "./skills-DqQUtOph.js";
28
+ import { A as isTransientHttpError, C as isContextOverflowError, D as isRateLimitAssistantError, E as isLikelyContextOverflowError, F as ensureSessionHeader, I as resolveBootstrapMaxChars, L as resolveBootstrapTotalMaxChars, M as parseImageSizeError, N as sanitizeUserFacingText, O as isRawApiErrorPayload, P as buildBootstrapContextFiles, R as sanitizeGoogleTurnOrdering, S as isCompactionFailureError, T as isFailoverErrorMessage, _ as formatRawAssistantErrorForUi, a as isMessagingToolDuplicateNormalized, b as isBillingAssistantError, c as extractToolCallsFromAssistant, d as isAntigravityClaude, f as isGoogleModelApi, g as formatBillingErrorMessage, h as formatAssistantErrorText, j as parseImageDimensionError, k as isTimeoutErrorMessage, l as extractToolResultId, m as classifyFailoverReason, n as validateGeminiTurns, o as normalizeTextForComparison, p as BILLING_ERROR_USER_MESSAGE, r as pickFallbackThinkingLevel, s as sanitizeSessionMessagesImages, t as validateAnthropicTurns, u as downgradeOpenAIReasoningBlocks, v as getApiErrorPayloadFingerprint, w as isFailoverAssistantError, x as isCloudCodeAssistFormatError, y as isAuthAssistantError } from "./pi-embedded-helpers-CNPyv_ax.js";
29
+ import { C as stripPluginOnlyAllowlist, S as resolveToolProfilePolicy, T as matchesAnyGlobPattern, _ as collectExplicitAllowlist, a as ensureSandboxWorkspaceForSession, b as mergeAlsoAllowPolicy, c as resolveSandboxRuntimeStatus, d as getBridgeAuthForPort, f as resolveSandboxConfigForAgent, g as buildPluginToolGroups, h as applyOwnerOnlyToolPolicy, o as resolveSandboxContext, v as expandPolicyWithPluginGroups, w as compileGlobPatterns, x as normalizeToolName } from "./sandbox-C-T6hOMv.js";
30
+ import { T as DEFAULT_AI_SNAPSHOT_MAX_CHARS } from "./chrome-DtPkPq9T.js";
31
+ import { i as resolveBrowserConfig, m as resolveBrowserControlAuth } from "./server-context-CEpFjqSk.js";
32
+ import { a as resolveSkillsPromptForRun, d as resolveSandboxInputPath, h as applySkillEnvOverridesFromSnapshot, i as loadWorkspaceSkillEntries, l as assertMediaNotDataUrl, m as applySkillEnvOverrides, p as resolveSandboxedMediaSource, r as buildWorkspaceSkillSnapshot, u as assertSandboxPath } from "./skills-6jdJQ5ZL.js";
33
33
  import { n as formatErrorMessage, r as formatUncaughtError } from "./errors-BF3TeRH2.js";
34
- import { i as resolveExistingPathsWithinRoot, r as DEFAULT_UPLOAD_DIR } from "./paths-CT6jsi4E.js";
34
+ import { i as resolveExistingPathsWithinRoot, r as DEFAULT_UPLOAD_DIR } from "./paths-BBm9fwuG.js";
35
35
  import { i as isBlockedHostnameOrIp, o as normalizeHostname, t as SsrFBlockedError } from "./ssrf-BCYMnxkM.js";
36
- import { c as detectMime, d as imageMimeFromFormat, f as isAudioFileName, g as MAX_IMAGE_BYTES, i as getImageMetadata, l as extensionForMime, p as isGifMedia, s as resizeToJpeg, v as mediaKindFromMime } from "./image-ops-DYbDWaIA.js";
37
- import { n as getMediaDir, r as saveMediaBuffer } from "./store-DvtcmOKj.js";
38
- import { B as resolveAgentMainSessionKey, C as capArrayByJsonBytes, D as resolveSessionTranscriptCandidates, E as readSessionTitleFieldsFromTranscript, F as resolveSessionResetType, H as resolveMainSessionKey, I as resolveThreadFlag, J as acquireSessionWriteLock, K as buildGroupDisplayName, L as DEFAULT_RESET_TRIGGERS, M as evaluateSessionFreshness, N as resolveChannelResetConfig, P as resolveSessionResetPolicy, R as resolveFreshSessionTotalTokens, S as archiveSessionTranscripts, V as resolveExplicitAgentSessionKey, W as deriveSessionMetaPatch, X as resolveSessionLockMaxHoldFromTimeout, _ as mergeDeliveryContext, a as resolveAndPersistSessionFile, b as normalizeAccountId$3, c as recordSessionMetaFromInbound, d as updateSessionStore, f as updateSessionStoreEntry, g as deliveryContextKey, h as deliveryContextFromSession, j as resolveSessionKey, m as resolveCacheTtlMs$1, n as parseSessionThreadInfo, o as loadSessionStore, p as isCacheEnabled, q as resolveGroupSessionKey, r as appendAssistantMessageToSessionTranscript, s as readSessionUpdatedAt, t as extractDeliveryInfo, u as updateLastRoute, v as normalizeDeliveryContext, y as normalizeSessionDeliveryFields, z as canonicalizeMainSessionAlias } from "./sessions-D5a7H247.js";
39
- import { a as resolveChannelGroupRequireMention, c as normalizeHyphenSlug, i as resolveChannelGroupPolicy, l as normalizeStringEntries, n as listChannelDocks, r as normalizeSignalMessagingTarget, s as normalizeAtHashSlug, t as getChannelDock, u as normalizeStringEntriesLower } from "./dock-BYiRZSgZ.js";
40
- import { _ as listEnabledDiscordAccounts, a as isWhatsAppGroupJid, c as listEnabledTelegramAccounts, d as resolveTelegramToken, f as resolveSlackAccount, g as createDiscordActionGate, h as resolveSlackBotToken, l as listTelegramAccountIds, m as resolveSlackAppToken, n as listChannelPlugins, o as normalizeWhatsAppTarget, r as normalizeChannelId$1, s as createTelegramActionGate, t as getChannelPlugin, u as resolveTelegramAccount, v as resolveDiscordAccount, y as normalizeDiscordToken } from "./plugins-BAyxWQSz.js";
41
- import { a as logWebSelfId, i as getWebAuthAgeMs, m as webAuthExists, n as resolveWhatsAppAccount, o as logoutWeb, u as readWebSelfId } from "./accounts-Cd816n6l.js";
42
- import { t as resolveIMessageAccount } from "./accounts-CokRskCl.js";
43
- import { n as resolveSignalAccount, t as listEnabledSignalAccounts } from "./accounts-mN_EcgxC.js";
44
- import { a as resolveSlackWebClientOptions, c as buildSlackBlocksFallbackText, i as createSlackWebClient, l as parseSlackTarget, o as parseSlackBlocksInput, s as validateSlackBlocksArray, t as sendMessageSlack, u as resolveSlackChannelId } from "./send-dH0xroTu.js";
36
+ import { c as detectMime, d as imageMimeFromFormat, f as isAudioFileName, g as MAX_IMAGE_BYTES, i as getImageMetadata, l as extensionForMime, p as isGifMedia, s as resizeToJpeg, v as mediaKindFromMime } from "./image-ops-1OJMSAUX.js";
37
+ import { n as getMediaDir, r as saveMediaBuffer } from "./store-r1DJSDq-.js";
38
+ import { B as resolveAgentMainSessionKey, C as capArrayByJsonBytes, D as resolveSessionTranscriptCandidates, E as readSessionTitleFieldsFromTranscript, F as resolveSessionResetType, H as resolveMainSessionKey, I as resolveThreadFlag, J as acquireSessionWriteLock, K as buildGroupDisplayName, L as DEFAULT_RESET_TRIGGERS, M as evaluateSessionFreshness, N as resolveChannelResetConfig, P as resolveSessionResetPolicy, R as resolveFreshSessionTotalTokens, S as archiveSessionTranscripts, V as resolveExplicitAgentSessionKey, W as deriveSessionMetaPatch, X as resolveSessionLockMaxHoldFromTimeout, _ as mergeDeliveryContext, a as resolveAndPersistSessionFile, b as normalizeAccountId$3, c as recordSessionMetaFromInbound, d as updateSessionStore, f as updateSessionStoreEntry, g as deliveryContextKey, h as deliveryContextFromSession, j as resolveSessionKey, m as resolveCacheTtlMs$1, n as parseSessionThreadInfo, o as loadSessionStore, p as isCacheEnabled, q as resolveGroupSessionKey, r as appendAssistantMessageToSessionTranscript, s as readSessionUpdatedAt, t as extractDeliveryInfo, u as updateLastRoute, v as normalizeDeliveryContext, y as normalizeSessionDeliveryFields, z as canonicalizeMainSessionAlias } from "./sessions-DgYpBvse.js";
39
+ import { a as resolveChannelGroupRequireMention, c as normalizeHyphenSlug, i as resolveChannelGroupPolicy, l as normalizeStringEntries, n as listChannelDocks, r as normalizeSignalMessagingTarget, s as normalizeAtHashSlug, t as getChannelDock, u as normalizeStringEntriesLower } from "./dock-BhS32F6E.js";
40
+ import { _ as listEnabledDiscordAccounts, a as isWhatsAppGroupJid, c as listEnabledTelegramAccounts, d as resolveTelegramToken, f as resolveSlackAccount, g as createDiscordActionGate, h as resolveSlackBotToken, l as listTelegramAccountIds, m as resolveSlackAppToken, n as listChannelPlugins, o as normalizeWhatsAppTarget, r as normalizeChannelId$1, s as createTelegramActionGate, t as getChannelPlugin, u as resolveTelegramAccount, v as resolveDiscordAccount, y as normalizeDiscordToken } from "./plugins-DKDeQZF0.js";
41
+ import { a as logWebSelfId, i as getWebAuthAgeMs, m as webAuthExists, n as resolveWhatsAppAccount, o as logoutWeb, u as readWebSelfId } from "./accounts-DDuIpcln.js";
42
+ import { t as resolveIMessageAccount } from "./accounts-bK-Yqdwx.js";
43
+ import { n as resolveSignalAccount, t as listEnabledSignalAccounts } from "./accounts-DyJN4_vR.js";
44
+ import { a as resolveSlackWebClientOptions, c as buildSlackBlocksFallbackText, i as createSlackWebClient, l as parseSlackTarget, o as parseSlackBlocksInput, s as validateSlackBlocksArray, t as sendMessageSlack, u as resolveSlackChannelId } from "./send-CPF8hSFp.js";
45
45
  import { c as resolveStorePath, i as resolveSessionTranscriptPath, n as resolveSessionFilePath, r as resolveSessionFilePathOptions, t as resolveDefaultSessionStorePath } from "./paths-CyhzMxFA.js";
46
46
  import { i as normalizeInputProvenance, n as applyInputProvenanceToUserMessage, r as hasInterSessionUserProvenance } from "./input-provenance-BzbXHcaD.js";
47
47
  import { t as emitSessionTranscriptUpdate } from "./transcript-events-DdnTeoR1.js";
48
- import { i as resolveImageSanitizationLimits, n as sanitizeImageBlocks, r as sanitizeToolResultImages } from "./tool-images-B-pqX3nX.js";
48
+ import { i as resolveImageSanitizationLimits, n as sanitizeImageBlocks, r as sanitizeToolResultImages } from "./tool-images-DvUBlqjX.js";
49
49
  import { n as resolveToolDisplay } from "./tool-display-D8N3rsYt.js";
50
50
  import { n as fetchWithTimeout, t as bindAbortRelay } from "./fetch-timeout-Db3da8yR.js";
51
51
  import { t as fetchWithSsrFGuard } from "./fetch-guard-DOPkVbh3.js";
52
- import { a as readResponseWithLimit, i as fetchRemoteMedia, n as getDefaultMediaLocalRoots, t as getAgentScopedMediaLocalRoots } from "./local-roots-BBeKX7PX.js";
53
- import { v as runTasksWithConcurrency } from "./sqlite-BV5ILFtC.js";
54
- import { n as loadModelCatalog, r as modelSupportsVision, t as findModelInCatalog } from "./model-catalog-C3NLvWC2.js";
52
+ import { a as readResponseWithLimit, i as fetchRemoteMedia, n as getDefaultMediaLocalRoots, t as getAgentScopedMediaLocalRoots } from "./local-roots-aAFLQGkY.js";
53
+ import { v as runTasksWithConcurrency } from "./sqlite-Dx3J_aSE.js";
54
+ import { n as loadModelCatalog, r as modelSupportsVision, t as findModelInCatalog } from "./model-catalog-DvBJ8pMD.js";
55
55
  import { a as isSilentReplyText, i as isSilentReplyPrefixText, n as SILENT_REPLY_TOKEN, r as SYMIPULSE_TOKEN, t as HEARTBEAT_TOKEN } from "./tokens-BuceUQDl.js";
56
- import { n as createBrowserRouteDispatcher, r as getMachineDisplayName, t as withTimeout$4 } from "./with-timeout-Cs6_LnHB.js";
57
- import { C as getGlobalHookRunner, S as throwIfAborted, _ as normalizeTargetForProvider, a as normalizeOutboundPayloadsForJson, b as splitMediaFromOutput, c as applyReplyThreading, d as isRenderablePayload, f as shouldSuppressMessagingToolReplies, g as normalizeChannelTargetInput, h as buildTargetResolverSignature, i as normalizeOutboundPayloads, l as filterMessagingToolDuplicates, m as resolveReplyToMode, o as normalizeReplyPayloadsForDelivery, p as createReplyToModeFilterForChannel, r as formatOutboundPayloadLog, s as applyReplyTagsToPayload, t as deliverOutboundPayloads, u as filterMessagingToolMediaDuplicates, v as parseReplyDirectives, w as initializeGlobalHookRunner, x as parseInlineDirectives$1, y as MEDIA_TOKEN_RE } from "./deliver-Um8yyhRA.js";
56
+ import { n as createBrowserRouteDispatcher, r as getMachineDisplayName, t as withTimeout$4 } from "./with-timeout-gmK6RciS.js";
57
+ import { C as getGlobalHookRunner, S as throwIfAborted, _ as normalizeTargetForProvider, a as normalizeOutboundPayloadsForJson, b as splitMediaFromOutput, c as applyReplyThreading, d as isRenderablePayload, f as shouldSuppressMessagingToolReplies, g as normalizeChannelTargetInput, h as buildTargetResolverSignature, i as normalizeOutboundPayloads, l as filterMessagingToolDuplicates, m as resolveReplyToMode, o as normalizeReplyPayloadsForDelivery, p as createReplyToModeFilterForChannel, r as formatOutboundPayloadLog, s as applyReplyTagsToPayload, t as deliverOutboundPayloads, u as filterMessagingToolMediaDuplicates, v as parseReplyDirectives, w as initializeGlobalHookRunner, x as parseInlineDirectives$1, y as MEDIA_TOKEN_RE } from "./deliver-CceEhg3d.js";
58
58
  import { a as logMessageProcessed, c as logWebhookError, d as startDiagnosticHeartbeat, f as stopDiagnosticHeartbeat, i as logLaneEnqueue, l as logWebhookProcessed, m as isDiagnosticsEnabled, o as logMessageQueued, p as emitDiagnosticEvent, r as logLaneDequeue, s as logSessionStateChange, t as diag, u as logWebhookReceived } from "./diagnostic-DjBRPfu9.js";
59
59
  import { r as getDiagnosticSessionState } from "./diagnostic-session-state-CUslJyKP.js";
60
- import { A as hasBotMention, B as resolveSenderAllowMatch, C as buildTelegramGroupPeerId, D as describeReplyTarget, E as buildTypingThreadParams, F as resolveTelegramReplyId, G as toLocationContext, H as isSenderIdAllowed, I as resolveTelegramStreamMode, J as parseTelegramTarget, K as withTelegramApiErrorLogging, L as resolveTelegramThreadSpec, M as resolveTelegramForumThreadId, N as resolveTelegramGroupAllowFromContext, O as expandTextLinks, P as resolveTelegramMediaPlaceholder, R as isSenderAllowed$1, S as buildTelegramGroupFrom, T as buildTelegramThreadParams, U as mergeAllowFromSources, V as firstDefined$1, W as formatLocationText, Y as resolveTelegramTargetChatType, _ as resolveTelegramFetch, a as reactMessageTelegram, b as buildSenderLabel, c as sendStickerTelegram, d as wasSentByBot, f as isRecoverableTelegramNetworkError, g as wrapFileReferencesInHtml, h as renderTelegramHtmlText, i as editMessageTelegram, j as normalizeForwardedContext, k as extractTelegramLocation, m as markdownToTelegramHtml, n as createForumTopicTelegram, o as sendMessageTelegram, p as markdownToTelegramChunks, q as isVoiceCompatibleAudio, r as deleteMessageTelegram, s as sendPollTelegram, t as buildInlineKeyboard, u as resolveTelegramVoiceSend, v as splitTelegramCaption, w as buildTelegramParentPeer, x as buildSenderName, y as buildGroupLabel, z as normalizeAllowFromWithStore$1 } from "./send-BEeuDXqy.js";
61
- import { a as buildModelAliasLines, n as resolveModel } from "./model-CeeOcylL.js";
62
- import { a as resolveAgentIdentity, i as resolveAckReaction, o as resolveEffectiveMessagesConfig, r as resolveResponsePrefixTemplate, s as resolveHumanDelayConfig, t as createReplyPrefixOptions } from "./reply-prefix-BLOOs1aW.js";
63
- import { i as resolveMemoryBackendConfig, n as registerMemoryCli, r as getMemorySearchManager } from "./memory-cli-lk6fRiwy.js";
64
- import { i as resolveMemorySearchConfig } from "./manager-C1CfGzZ2.js";
60
+ import { A as hasBotMention, B as resolveSenderAllowMatch, C as buildTelegramGroupPeerId, D as describeReplyTarget, E as buildTypingThreadParams, F as resolveTelegramReplyId, G as toLocationContext, H as isSenderIdAllowed, I as resolveTelegramStreamMode, J as parseTelegramTarget, K as withTelegramApiErrorLogging, L as resolveTelegramThreadSpec, M as resolveTelegramForumThreadId, N as resolveTelegramGroupAllowFromContext, O as expandTextLinks, P as resolveTelegramMediaPlaceholder, R as isSenderAllowed$1, S as buildTelegramGroupFrom, T as buildTelegramThreadParams, U as mergeAllowFromSources, V as firstDefined$1, W as formatLocationText, Y as resolveTelegramTargetChatType, _ as resolveTelegramFetch, a as reactMessageTelegram, b as buildSenderLabel, c as sendStickerTelegram, d as wasSentByBot, f as isRecoverableTelegramNetworkError, g as wrapFileReferencesInHtml, h as renderTelegramHtmlText, i as editMessageTelegram, j as normalizeForwardedContext, k as extractTelegramLocation, m as markdownToTelegramHtml, n as createForumTopicTelegram, o as sendMessageTelegram, p as markdownToTelegramChunks, q as isVoiceCompatibleAudio, r as deleteMessageTelegram, s as sendPollTelegram, t as buildInlineKeyboard, u as resolveTelegramVoiceSend, v as splitTelegramCaption, w as buildTelegramParentPeer, x as buildSenderName, y as buildGroupLabel, z as normalizeAllowFromWithStore$1 } from "./send-Cutb0ZDY.js";
61
+ import { a as buildModelAliasLines, n as resolveModel } from "./model-tWhwnFf8.js";
62
+ import { a as resolveAgentIdentity, i as resolveAckReaction, o as resolveEffectiveMessagesConfig, r as resolveResponsePrefixTemplate, s as resolveHumanDelayConfig, t as createReplyPrefixOptions } from "./reply-prefix-CE2YmmsD.js";
63
+ import { i as resolveMemoryBackendConfig, n as registerMemoryCli, r as getMemorySearchManager } from "./memory-cli-Ca5r9AUb.js";
64
+ import { i as resolveMemorySearchConfig } from "./manager-D4LJSRyZ.js";
65
65
  import { n as retryAsync } from "./retry-BoS4e4X_.js";
66
- import { c as imageResultFromFile, d as readNumberParam, f as readReactionParams, h as readStringParam, l as jsonResult, m as readStringOrNumberParam, n as missingTargetError, o as createActionGate, p as readStringArrayParam, r as unknownTargetError, s as imageResult, t as ambiguousTargetError, u as parseAvailableTags } from "./target-errors-CCz79CmV.js";
66
+ import { c as imageResultFromFile, d as readNumberParam, f as readReactionParams, h as readStringParam, l as jsonResult, m as readStringOrNumberParam, n as missingTargetError, o as createActionGate, p as readStringArrayParam, r as unknownTargetError, s as imageResult, t as ambiguousTargetError, u as parseAvailableTags } from "./target-errors-7AvoVa10.js";
67
67
  import { a as chunkText, c as resolveChunkMode, d as isSafeFenceBreak, f as parseFenceSpans, i as chunkMarkdownTextWithMode, l as resolveTextChunkLimit, o as chunkTextWithMode, r as chunkMarkdownText, t as chunkByNewline, u as findFenceSpanAt } from "./chunk-1dhPX1NK.js";
68
- import { n as resolveMarkdownTableMode } from "./markdown-tables-ZwP14ydw.js";
69
- import { a as loadWebMedia, i as getDefaultLocalRoots } from "./ir-Dt4hOzxG.js";
70
- import { a as resolveNativeSkillsEnabled, i as resolveNativeCommandsEnabled, n as isNativeCommandsExplicitlyDisabled, r as isRestartEnabled, t as isCommandFlagEnabled } from "./commands-CtocZ4Lg.js";
71
- import { a as listChatCommandsForConfig, c as normalizeCommandBody, d as resolveCommandArgMenu, f as serializeCommandArgs, i as listChatCommands, l as parseCommandArgs, o as listNativeCommandSpecs, p as shouldHandleTextCommands, r as findCommandByNativeName, s as listNativeCommandSpecsForConfig, t as buildCommandTextFromArgs, u as resolveCommandArgChoices } from "./commands-registry-BZ0ZSQpM.js";
72
- import { Mt as SESSION_LABEL_MAX_LENGTH, t as GatewayClient } from "./client-BsrZnuSi.js";
73
- import { a as randomIdempotencyKey, d as resolveLeastPrivilegeOperatorScopesForMethod, n as callGateway, r as callGatewayLeastPrivilege, t as buildGatewayConnectionDetails } from "./call-Dd7-bkfG.js";
68
+ import { n as resolveMarkdownTableMode } from "./markdown-tables-CEbN0fEm.js";
69
+ import { a as loadWebMedia, i as getDefaultLocalRoots } from "./ir-DZam9q5M.js";
70
+ import { a as resolveNativeSkillsEnabled, i as resolveNativeCommandsEnabled, n as isNativeCommandsExplicitlyDisabled, r as isRestartEnabled, t as isCommandFlagEnabled } from "./commands-BNLCWX6e.js";
71
+ import { a as listChatCommandsForConfig, c as normalizeCommandBody, d as resolveCommandArgMenu, f as serializeCommandArgs, i as listChatCommands, l as parseCommandArgs, o as listNativeCommandSpecs, p as shouldHandleTextCommands, r as findCommandByNativeName, s as listNativeCommandSpecsForConfig, t as buildCommandTextFromArgs, u as resolveCommandArgChoices } from "./commands-registry-BT0-zzs3.js";
72
+ import { Mt as SESSION_LABEL_MAX_LENGTH, t as GatewayClient } from "./client-CQSyCS4M.js";
73
+ import { a as randomIdempotencyKey, d as resolveLeastPrivilegeOperatorScopesForMethod, n as callGateway, r as callGatewayLeastPrivilege, t as buildGatewayConnectionDetails } from "./call-CJaS1iRF.js";
74
74
  import { n as formatTimeAgo } from "./format-relative-BXoxEQVN.js";
75
75
  import { n as normalizePollInput } from "./polls-DhH5YkzN.js";
76
76
  import { n as recordChannelActivity, r as createDiscordRetryRunner, t as getChannelActivity } from "./channel-activity-BOiuJS3t.js";
77
77
  import { n as wrapFetchWithAbortSignal, t as resolveFetch } from "./fetch-DTNGXEzX.js";
78
- import { t as convertMarkdownTables } from "./tables-C38rzF6E.js";
79
- import { c as signalRpcRequest, l as streamSignalEvents, n as sendReadReceiptSignal, o as resolveSignalRpcContext, r as sendTypingSignal, s as signalCheck, t as sendMessageSignal } from "./send-BjdAgYLu.js";
80
- import { i as readChannelAllowFromStore, l as listPairingChannels, o as removeChannelAllowFromStoreEntry, s as upsertChannelPairingRequest, t as addChannelAllowFromStoreEntry } from "./pairing-store-B8ktu-6j.js";
78
+ import { t as convertMarkdownTables } from "./tables-BEzT0Da4.js";
79
+ import { c as signalRpcRequest, l as streamSignalEvents, n as sendReadReceiptSignal, o as resolveSignalRpcContext, r as sendTypingSignal, s as signalCheck, t as sendMessageSignal } from "./send-tanEMpHN.js";
80
+ import { i as readChannelAllowFromStore, l as listPairingChannels, o as removeChannelAllowFromStoreEntry, s as upsertChannelPairingRequest, t as addChannelAllowFromStoreEntry } from "./pairing-store-CK726Dzq.js";
81
81
  import { t as makeProxyFetch } from "./proxy-DU7W9XSc.js";
82
82
  import { i as formatDurationSeconds, r as formatDurationPrecise, t as formatDurationCompact$1 } from "./format-duration-D0B0Uo-I.js";
83
- import { n as resolveAgentRoute, t as buildAgentSessionKey } from "./resolve-route-BcnaXYvh.js";
84
- import { a as createReplyReferencePlanner, i as resolveSlackThreadTs, n as deliverReplies$3, t as createSlackReplyDeliveryPlan } from "./replies-BL7IBg12.js";
85
- import { b as ensureSkillsWatcher, i as resolveSkillCommandInvocation, n as listSkillCommandsForAgents, o as getRemoteSkillEligibility, r as listSkillCommandsForWorkspace, t as listReservedChatSlashCommandNames, x as getSkillsSnapshotVersion } from "./skill-commands-ZXbEITKi.js";
83
+ import { n as resolveAgentRoute, t as buildAgentSessionKey } from "./resolve-route-BMoTaVAH.js";
84
+ import { a as createReplyReferencePlanner, i as resolveSlackThreadTs, n as deliverReplies$3, t as createSlackReplyDeliveryPlan } from "./replies-vgss3_QA.js";
85
+ import { b as ensureSkillsWatcher, i as resolveSkillCommandInvocation, n as listSkillCommandsForAgents, o as getRemoteSkillEligibility, r as listSkillCommandsForWorkspace, t as listReservedChatSlashCommandNames, x as getSkillsSnapshotVersion } from "./skill-commands-Cxw-jNxU.js";
86
86
  import { c as hasNonzeroUsage, l as normalizeUsage, n as loadCostUsageSummary, o as derivePromptTokens, r as loadSessionCostSummary, s as deriveSessionTotalTokens } from "./session-cost-usage-BG4AXrGN.js";
87
- import { a as normalizeIMessageHandle, c as DEFAULT_IMESSAGE_PROBE_TIMEOUT_MS, i as isAllowedIMessageSender, o as parseIMessageTarget, r as formatIMessageChatTarget, s as createIMessageRpcClient, t as sendMessageIMessage } from "./send-C95ZRvja.js";
88
- import { r as detectBinary } from "./onboard-helpers-Dixh6cNh.js";
89
- import { t as resolvePairingIdLabel } from "./pairing-labels-27SOKDzJ.js";
87
+ import { a as normalizeIMessageHandle, c as DEFAULT_IMESSAGE_PROBE_TIMEOUT_MS, i as isAllowedIMessageSender, o as parseIMessageTarget, r as formatIMessageChatTarget, s as createIMessageRpcClient, t as sendMessageIMessage } from "./send-CXxQ_f7L.js";
88
+ import { r as detectBinary } from "./onboard-helpers-ZmZYzlq3.js";
89
+ import { t as resolvePairingIdLabel } from "./pairing-labels-2S6x2UoV.js";
90
90
  import { i as resolveModelCostConfig, n as formatTokenCount$2, r as formatUsd, t as estimateUsageCost } from "./usage-format-BzKEDn0q.js";
91
91
  import { t as getActiveWebListener } from "./active-listener-kvXhlgwu.js";
92
92
  import { _ as getTrustedSafeBinDirs, b as buildSafeShellCommand, d as resolveExecApprovals, f as resolveExecApprovalsFromFile, g as resolveSafeBins, h as evaluateShellAllowlist, i as maxAsk, l as recordAllowlistUse, n as addAllowlistEntry, o as minSecurity, u as requiresExecApproval, y as buildSafeBinsShellCommand } from "./exec-approvals-Kn31mBcW.js";
93
- import { a as canvasSnapshotTempPath, c as parseCameraClipPayload, d as writeCameraClipPayloadToFile, f as writeUrlToFile, g as normalizePathPrepend, h as mergePathPrepend, i as parseEnvPairs, l as parseCameraSnapPayload, m as applyPathPrepend, n as screenRecordTempPath, o as parseCanvasSnapshotPayload, p as buildNodeShellCommand, r as writeScreenRecordToFile, s as cameraTempPath, t as parseScreenRecordPayload, u as writeBase64ToFile } from "./nodes-screen-C99kfE1u.js";
93
+ import { a as canvasSnapshotTempPath, c as parseCameraClipPayload, d as writeCameraClipPayloadToFile, f as writeUrlToFile, g as normalizePathPrepend, h as mergePathPrepend, i as parseEnvPairs, l as parseCameraSnapPayload, m as applyPathPrepend, n as screenRecordTempPath, o as parseCanvasSnapshotPayload, p as buildNodeShellCommand, r as writeScreenRecordToFile, s as cameraTempPath, t as parseScreenRecordPayload, u as writeBase64ToFile } from "./nodes-screen-VBGXKdLk.js";
94
94
  import { n as parseNodeList, r as parsePairingList, t as resolveNodeIdFromCandidates } from "./node-match-CN8o4Vi3.js";
95
95
  import { n as recordCommandPoll, r as resetCommandPollCount } from "./command-poll-backoff-BiwOFDEK.js";
96
- import { a as resolveSubagentToolPolicy, i as resolveGroupToolPolicy, n as isToolAllowedByPolicies, r as resolveEffectiveToolPolicy, t as filterToolsByPolicy } from "./pi-tools.policy-juZV2uUv.js";
97
- import { n as createBrowserControlContext, r as startBrowserControlServiceFromConfig } from "./control-service-B8H3Bqpv.js";
96
+ import { a as resolveSubagentToolPolicy, i as resolveGroupToolPolicy, n as isToolAllowedByPolicies, r as resolveEffectiveToolPolicy, t as filterToolsByPolicy } from "./pi-tools.policy-CIDBbw6x.js";
97
+ import { n as createBrowserControlContext, r as startBrowserControlServiceFromConfig } from "./control-service-Bz7rxLWq.js";
98
98
  import { i as parseAbsoluteTimeMs, r as resolveDefaultCronStaggerMs, t as normalizeCronStaggerMs } from "./stagger-BUClb97_.js";
99
99
  import { c as resolveGatewayLaunchAgentLabel, d as resolveGatewaySystemdServiceName } from "./constants-C8_BLnaW.js";
100
- import { n as resolveMessageChannelSelection, t as listConfiguredMessageChannels } from "./channel-selection-DjfBv8kq.js";
100
+ import { n as resolveMessageChannelSelection, t as listConfiguredMessageChannels } from "./channel-selection-DuWs0Aak.js";
101
101
  import { t as parseTimeoutMs } from "./parse-timeout-C385GCpE.js";
102
102
  import { createRequire } from "node:module";
103
103
  import { fileURLToPath } from "node:url";
@@ -105,7 +105,7 @@ import fs, { existsSync, mkdirSync, mkdtempSync, readFileSync, renameSync, rmSyn
105
105
  import os, { homedir } from "node:os";
106
106
  import path from "node:path";
107
107
  import JSON5 from "json5";
108
- import fsPromises from "node:fs/promises";
108
+ import fs$1 from "node:fs/promises";
109
109
  import { execFileSync, spawn, spawnSync } from "node:child_process";
110
110
  import { inspect } from "node:util";
111
111
  import crypto, { createHash, createHmac, randomBytes, randomUUID } from "node:crypto";
@@ -2893,7 +2893,7 @@ async function createModelSelectionState(params) {
2893
2893
  }
2894
2894
  }
2895
2895
  if (sessionEntry && sessionStore && sessionKey && sessionEntry.authProfileOverride) {
2896
- const { ensureAuthProfileStore } = await import("./model-selection-X1oLh3CE.js").then((n) => n.dt);
2896
+ const { ensureAuthProfileStore } = await import("./model-selection-CyFvYcRt.js").then((n) => n.dt);
2897
2897
  const profile = ensureAuthProfileStore(void 0, { allowKeychainPrompt: false }).profiles[sessionEntry.authProfileOverride];
2898
2898
  const providerKey = normalizeProviderId(provider);
2899
2899
  if (!profile || normalizeProviderId(profile.provider) !== providerKey) await clearSessionAuthProfileOverride({
@@ -10415,7 +10415,7 @@ async function routeReply(params) {
10415
10415
  const resolvedReplyToId = replyToId ?? (channelId === "slack" && threadId != null && threadId !== "" ? String(threadId) : void 0);
10416
10416
  const resolvedThreadId = channelId === "slack" ? null : threadId ?? null;
10417
10417
  try {
10418
- const { deliverOutboundPayloads } = await import("./deliver-Um8yyhRA.js").then((n) => n.n);
10418
+ const { deliverOutboundPayloads } = await import("./deliver-CceEhg3d.js").then((n) => n.n);
10419
10419
  return {
10420
10420
  ok: true,
10421
10421
  messageId: (await deliverOutboundPayloads({
@@ -12964,8 +12964,8 @@ async function describeStickerImage(params) {
12964
12964
  const { provider, model } = resolved;
12965
12965
  logVerbose(`telegram: describing sticker with ${provider}/${model}`);
12966
12966
  try {
12967
- const buffer = await fsPromises.readFile(imagePath);
12968
- const { describeImageWithModel } = await import("./image-BiY-PfMh.js").then((n) => n.n);
12967
+ const buffer = await fs$1.readFile(imagePath);
12968
+ const { describeImageWithModel } = await import("./image-D9uvDTrc.js").then((n) => n.n);
12969
12969
  return (await describeImageWithModel({
12970
12970
  buffer,
12971
12971
  fileName: "sticker.webp",
@@ -13388,7 +13388,7 @@ function createWhatsAppLoginTool() {
13388
13388
  force: Type.Optional(Type.Boolean())
13389
13389
  }),
13390
13390
  execute: async (_toolCallId, args) => {
13391
- const { startWebLoginWithQr, waitForWebLogin } = await import("./login-qr-wCWBOMwB.js");
13391
+ const { startWebLoginWithQr, waitForWebLogin } = await import("./login-qr-pbXdFORv.js");
13392
13392
  if ((args?.action ?? "start") === "wait") {
13393
13393
  const result = await waitForWebLogin({ timeoutMs: typeof args.timeoutMs === "number" ? args.timeoutMs : void 0 });
13394
13394
  return {
@@ -15604,7 +15604,7 @@ async function preflightDiscordMessage(params) {
15604
15604
  let preflightTranscript;
15605
15605
  const hasAudioAttachment = message.attachments?.some((att) => att.contentType?.startsWith("audio/"));
15606
15606
  if (!isDirectMessage && shouldRequireMention && hasAudioAttachment && !baseText && mentionRegexes.length > 0) try {
15607
- const { transcribeFirstAudio } = await import("./audio-preflight-CjysqO8U.js");
15607
+ const { transcribeFirstAudio } = await import("./audio-preflight-CWnxkaac.js");
15608
15608
  const audioPaths = message.attachments?.filter((att) => att.contentType?.startsWith("audio/")).map((att) => att.url) ?? [];
15609
15609
  if (audioPaths.length > 0) preflightTranscript = await transcribeFirstAudio({
15610
15610
  ctx: {
@@ -21610,18 +21610,18 @@ function appendImagePathsToPrompt(prompt, paths) {
21610
21610
  return `${trimmed}${trimmed ? "\n\n" : ""}${paths.join("\n")}`;
21611
21611
  }
21612
21612
  async function writeCliImages(images) {
21613
- const tempDir = await fsPromises.mkdtemp(path.join(os.tmpdir(), "symi-cli-images-"));
21613
+ const tempDir = await fs$1.mkdtemp(path.join(os.tmpdir(), "symi-cli-images-"));
21614
21614
  const paths = [];
21615
21615
  for (let i = 0; i < images.length; i += 1) {
21616
21616
  const image = images[i];
21617
21617
  const ext = resolveImageExtension(image.mimeType);
21618
21618
  const filePath = path.join(tempDir, `image-${i + 1}.${ext}`);
21619
21619
  const buffer = Buffer.from(image.data, "base64");
21620
- await fsPromises.writeFile(filePath, buffer, { mode: 384 });
21620
+ await fs$1.writeFile(filePath, buffer, { mode: 384 });
21621
21621
  paths.push(filePath);
21622
21622
  }
21623
21623
  const cleanup = async () => {
21624
- await fsPromises.rm(tempDir, {
21624
+ await fs$1.rm(tempDir, {
21625
21625
  recursive: true,
21626
21626
  force: true
21627
21627
  });
@@ -22374,27 +22374,27 @@ async function runWithImageModelFallback(params) {
22374
22374
  function createDefaultDeps() {
22375
22375
  return {
22376
22376
  sendMessageWhatsApp: async (...args) => {
22377
- const { sendMessageWhatsApp } = await import("./web-DsCqmzyk.js");
22377
+ const { sendMessageWhatsApp } = await import("./web-DmED3zDP.js");
22378
22378
  return await sendMessageWhatsApp(...args);
22379
22379
  },
22380
22380
  sendMessageTelegram: async (...args) => {
22381
- const { sendMessageTelegram } = await import("./send-BEeuDXqy.js").then((n) => n.l);
22381
+ const { sendMessageTelegram } = await import("./send-Cutb0ZDY.js").then((n) => n.l);
22382
22382
  return await sendMessageTelegram(...args);
22383
22383
  },
22384
22384
  sendMessageDiscord: async (...args) => {
22385
- const { sendMessageDiscord } = await import("./send-BnuIB59F.js").then((n) => n.t);
22385
+ const { sendMessageDiscord } = await import("./send-CZr1hVHY.js").then((n) => n.t);
22386
22386
  return await sendMessageDiscord(...args);
22387
22387
  },
22388
22388
  sendMessageSlack: async (...args) => {
22389
- const { sendMessageSlack } = await import("./send-dH0xroTu.js").then((n) => n.n);
22389
+ const { sendMessageSlack } = await import("./send-CPF8hSFp.js").then((n) => n.n);
22390
22390
  return await sendMessageSlack(...args);
22391
22391
  },
22392
22392
  sendMessageSignal: async (...args) => {
22393
- const { sendMessageSignal } = await import("./send-BjdAgYLu.js").then((n) => n.i);
22393
+ const { sendMessageSignal } = await import("./send-tanEMpHN.js").then((n) => n.i);
22394
22394
  return await sendMessageSignal(...args);
22395
22395
  },
22396
22396
  sendMessageIMessage: async (...args) => {
22397
- const { sendMessageIMessage } = await import("./send-C95ZRvja.js").then((n) => n.n);
22397
+ const { sendMessageIMessage } = await import("./send-CXxQ_f7L.js").then((n) => n.n);
22398
22398
  return await sendMessageIMessage(...args);
22399
22399
  }
22400
22400
  };
@@ -23578,10 +23578,10 @@ function estimateDurationSeconds(pcm) {
23578
23578
  return pcm.length / (bytesPerSample * SAMPLE_RATE);
23579
23579
  }
23580
23580
  async function writeWavFile(pcm) {
23581
- const tempDir = await fsPromises.mkdtemp(path.join(resolvePreferredSymiTmpDir(), "discord-voice-"));
23581
+ const tempDir = await fs$1.mkdtemp(path.join(resolvePreferredSymiTmpDir(), "discord-voice-"));
23582
23582
  const filePath = path.join(tempDir, `segment-${randomUUID()}.wav`);
23583
23583
  const wav = buildWavBuffer(pcm);
23584
- await fsPromises.writeFile(filePath, wav);
23584
+ await fs$1.writeFile(filePath, wav);
23585
23585
  scheduleTempCleanup(tempDir);
23586
23586
  return {
23587
23587
  path: filePath,
@@ -23590,7 +23590,7 @@ async function writeWavFile(pcm) {
23590
23590
  }
23591
23591
  function scheduleTempCleanup(tempDir, delayMs = 1800 * 1e3) {
23592
23592
  setTimeout(() => {
23593
- fsPromises.rm(tempDir, {
23593
+ fs$1.rm(tempDir, {
23594
23594
  recursive: true,
23595
23595
  force: true
23596
23596
  }).catch((err) => {
@@ -27329,7 +27329,7 @@ function normalizeAllowList$2(list) {
27329
27329
  async function detectRemoteHostFromCliPath(cliPath) {
27330
27330
  try {
27331
27331
  const expanded = cliPath.startsWith("~") ? cliPath.replace(/^~/, process.env.HOME ?? "") : cliPath;
27332
- const content = await fsPromises.readFile(expanded, "utf8");
27332
+ const content = await fs$1.readFile(expanded, "utf8");
27333
27333
  const userHostMatch = content.match(/\bssh\b[^\n]*?\s+([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+)/);
27334
27334
  if (userHostMatch) return userHostMatch[1];
27335
27335
  return content.match(/\bssh\b[^\n]*?\s+([a-zA-Z][a-zA-Z0-9._-]*)\s+\S*\bimsg\b/)?.[1];
@@ -33544,7 +33544,7 @@ function readSlackExternalArgMenuToken(raw) {
33544
33544
  }
33545
33545
  let commandsRegistry;
33546
33546
  async function getCommandsRegistry() {
33547
- if (!commandsRegistry) commandsRegistry = await import("./commands-registry-BZ0ZSQpM.js").then((n) => n.n);
33547
+ if (!commandsRegistry) commandsRegistry = await import("./commands-registry-BT0-zzs3.js").then((n) => n.n);
33548
33548
  return commandsRegistry;
33549
33549
  }
33550
33550
  function encodeSlackCommandArgValue(parts) {
@@ -33886,11 +33886,11 @@ async function registerSlackMonitorSlashCommands(params) {
33886
33886
  const channelName = channelInfo?.name;
33887
33887
  const roomLabel = channelName ? `#${channelName}` : `#${command.channel_id}`;
33888
33888
  const [{ resolveAgentRoute }, { finalizeInboundContext }, { dispatchReplyWithDispatcher }] = await Promise.all([
33889
- import("./resolve-route-BcnaXYvh.js").then((n) => n.r),
33889
+ import("./resolve-route-BMoTaVAH.js").then((n) => n.r),
33890
33890
  import("./inbound-context-CmmmT8IP.js").then((n) => n.n),
33891
33891
  Promise.resolve().then(() => provider_dispatcher_exports)
33892
33892
  ]);
33893
- const [{ resolveConversationLabel }, { createReplyPrefixOptions }] = await Promise.all([import("./conversation-label-Bn5j3lUT.js").then((n) => n.t), import("./reply-prefix-BLOOs1aW.js").then((n) => n.n)]);
33893
+ const [{ resolveConversationLabel }, { createReplyPrefixOptions }] = await Promise.all([import("./conversation-label-Bn5j3lUT.js").then((n) => n.t), import("./reply-prefix-CE2YmmsD.js").then((n) => n.n)]);
33894
33894
  const route = resolveAgentRoute({
33895
33895
  cfg,
33896
33896
  channel: "slack",
@@ -33947,9 +33947,9 @@ async function registerSlackMonitorSlashCommands(params) {
33947
33947
  });
33948
33948
  const deliverSlashPayloads = async (replies) => {
33949
33949
  const [{ deliverSlackSlashReplies }, { resolveChunkMode }, { resolveMarkdownTableMode }] = await Promise.all([
33950
- import("./replies-BL7IBg12.js").then((n) => n.r),
33950
+ import("./replies-vgss3_QA.js").then((n) => n.r),
33951
33951
  import("./chunk-1dhPX1NK.js").then((n) => n.s),
33952
- import("./markdown-tables-ZwP14ydw.js").then((n) => n.t)
33952
+ import("./markdown-tables-CEbN0fEm.js").then((n) => n.t)
33953
33953
  ]);
33954
33954
  await deliverSlackSlashReplies({
33955
33955
  replies,
@@ -34002,7 +34002,7 @@ async function registerSlackMonitorSlashCommands(params) {
34002
34002
  let nativeCommands = [];
34003
34003
  if (nativeEnabled) {
34004
34004
  reg = await getCommandsRegistry();
34005
- const skillCommands = nativeSkillsEnabled ? (await import("./skill-commands-ZXbEITKi.js").then((n) => n.a)).listSkillCommandsForAgents({ cfg }) : [];
34005
+ const skillCommands = nativeSkillsEnabled ? (await import("./skill-commands-Cxw-jNxU.js").then((n) => n.a)).listSkillCommandsForAgents({ cfg }) : [];
34006
34006
  nativeCommands = reg.listNativeCommandSpecsForConfig(cfg, {
34007
34007
  skillCommands,
34008
34008
  provider: "slack"
@@ -38771,7 +38771,7 @@ const buildTelegramMessageContext = async ({ primaryCtx, allMedia, storeAllowFro
38771
38771
  const hasAudio = allMedia.some((media) => media.contentType?.startsWith("audio/"));
38772
38772
  let preflightTranscript;
38773
38773
  if (isGroup && requireMention && hasAudio && !hasUserText && mentionRegexes.length > 0) try {
38774
- const { transcribeFirstAudio } = await import("./audio-preflight-CjysqO8U.js");
38774
+ const { transcribeFirstAudio } = await import("./audio-preflight-CWnxkaac.js");
38775
38775
  preflightTranscript = await transcribeFirstAudio({
38776
38776
  ctx: {
38777
38777
  MediaPaths: allMedia.length > 0 ? allMedia.map((m) => m.path) : void 0,
@@ -40539,7 +40539,7 @@ function safeParseState(raw) {
40539
40539
  async function readTelegramUpdateOffset(params) {
40540
40540
  const filePath = resolveTelegramUpdateOffsetPath(params.accountId, params.env);
40541
40541
  try {
40542
- return safeParseState(await fsPromises.readFile(filePath, "utf-8"))?.lastUpdateId ?? null;
40542
+ return safeParseState(await fs$1.readFile(filePath, "utf-8"))?.lastUpdateId ?? null;
40543
40543
  } catch (err) {
40544
40544
  if (err.code === "ENOENT") return null;
40545
40545
  return null;
@@ -40548,7 +40548,7 @@ async function readTelegramUpdateOffset(params) {
40548
40548
  async function writeTelegramUpdateOffset(params) {
40549
40549
  const filePath = resolveTelegramUpdateOffsetPath(params.accountId, params.env);
40550
40550
  const dir = path.dirname(filePath);
40551
- await fsPromises.mkdir(dir, {
40551
+ await fs$1.mkdir(dir, {
40552
40552
  recursive: true,
40553
40553
  mode: 448
40554
40554
  });
@@ -40557,14 +40557,14 @@ async function writeTelegramUpdateOffset(params) {
40557
40557
  version: STORE_VERSION,
40558
40558
  lastUpdateId: params.updateId
40559
40559
  };
40560
- await fsPromises.writeFile(tmp, `${JSON.stringify(payload, null, 2)}\n`, { encoding: "utf-8" });
40561
- await fsPromises.chmod(tmp, 384);
40562
- await fsPromises.rename(tmp, filePath);
40560
+ await fs$1.writeFile(tmp, `${JSON.stringify(payload, null, 2)}\n`, { encoding: "utf-8" });
40561
+ await fs$1.chmod(tmp, 384);
40562
+ await fs$1.rename(tmp, filePath);
40563
40563
  }
40564
40564
  async function deleteTelegramUpdateOffset(params) {
40565
40565
  const filePath = resolveTelegramUpdateOffsetPath(params.accountId, params.env);
40566
40566
  try {
40567
- await fsPromises.unlink(filePath);
40567
+ await fs$1.unlink(filePath);
40568
40568
  } catch (err) {
40569
40569
  if (err.code === "ENOENT") return;
40570
40570
  throw err;
@@ -40925,23 +40925,23 @@ let webLoginQrPromise = null;
40925
40925
  let webChannelPromise = null;
40926
40926
  let whatsappActionsPromise = null;
40927
40927
  function loadWebOutbound() {
40928
- webOutboundPromise ??= import("./outbound-NJCy0h4x.js").then((n) => n.t);
40928
+ webOutboundPromise ??= import("./outbound-DB5Zus0-.js").then((n) => n.t);
40929
40929
  return webOutboundPromise;
40930
40930
  }
40931
40931
  function loadWebLogin() {
40932
- webLoginPromise ??= import("./login-1sleXoB4.js").then((n) => n.n);
40932
+ webLoginPromise ??= import("./login-dIlDkG4X.js").then((n) => n.n);
40933
40933
  return webLoginPromise;
40934
40934
  }
40935
40935
  function loadWebLoginQr() {
40936
- webLoginQrPromise ??= import("./login-qr-wCWBOMwB.js");
40936
+ webLoginQrPromise ??= import("./login-qr-pbXdFORv.js");
40937
40937
  return webLoginQrPromise;
40938
40938
  }
40939
40939
  function loadWebChannel() {
40940
- webChannelPromise ??= import("./web-DsCqmzyk.js");
40940
+ webChannelPromise ??= import("./web-DmED3zDP.js");
40941
40941
  return webChannelPromise;
40942
40942
  }
40943
40943
  function loadWhatsAppActions() {
40944
- whatsappActionsPromise ??= import("./whatsapp-actions-CFXNPLco.js");
40944
+ whatsappActionsPromise ??= import("./whatsapp-actions-DbcsdOH3.js");
40945
40945
  return whatsappActionsPromise;
40946
40946
  }
40947
40947
  function createPluginRuntime() {
@@ -41708,7 +41708,7 @@ function resolvePluginTools(params) {
41708
41708
  //#endregion
41709
41709
  //#region src/agents/apply-patch-update.ts
41710
41710
  async function defaultReadFile(filePath) {
41711
- return fsPromises.readFile(filePath, "utf8");
41711
+ return fs$1.readFile(filePath, "utf8");
41712
41712
  }
41713
41713
  async function applyUpdateHunk(filePath, chunks, options) {
41714
41714
  const originalLines = (await (options?.readFile ?? defaultReadFile)(filePath).catch((err) => {
@@ -41952,10 +41952,10 @@ function resolvePatchFileOps(options) {
41952
41952
  };
41953
41953
  }
41954
41954
  return {
41955
- readFile: (filePath) => fsPromises.readFile(filePath, "utf8"),
41956
- writeFile: (filePath, content) => fsPromises.writeFile(filePath, content, "utf8"),
41957
- remove: (filePath) => fsPromises.rm(filePath),
41958
- mkdirp: (dir) => fsPromises.mkdir(dir, { recursive: true }).then(() => {})
41955
+ readFile: (filePath) => fs$1.readFile(filePath, "utf8"),
41956
+ writeFile: (filePath, content) => fs$1.writeFile(filePath, content, "utf8"),
41957
+ remove: (filePath) => fs$1.rm(filePath),
41958
+ mkdirp: (dir) => fs$1.mkdir(dir, { recursive: true }).then(() => {})
41959
41959
  };
41960
41960
  }
41961
41961
  async function ensureDir(filePath, ops) {
@@ -42676,7 +42676,7 @@ async function resolveSandboxWorkdir(params) {
42676
42676
  cwd: process.cwd(),
42677
42677
  root: params.sandbox.workspaceDir
42678
42678
  });
42679
- if (!(await fsPromises.stat(resolved.resolved)).isDirectory()) throw new Error("workdir is not a directory");
42679
+ if (!(await fs$1.stat(resolved.resolved)).isDirectory()) throw new Error("workdir is not a directory");
42680
42680
  const relative = resolved.relative ? resolved.relative.split(path.sep).join(path.posix.sep) : "";
42681
42681
  const containerWorkdir = relative ? path.posix.join(params.sandbox.containerWorkdir, relative) : params.sandbox.containerWorkdir;
42682
42682
  return {
@@ -43657,13 +43657,13 @@ async function validateScriptFileForShellBleed(params) {
43657
43657
  cwd: params.workdir,
43658
43658
  root: params.workdir
43659
43659
  });
43660
- stat = await fsPromises.stat(absPath);
43660
+ stat = await fs$1.stat(absPath);
43661
43661
  } catch {
43662
43662
  return;
43663
43663
  }
43664
43664
  if (!stat.isFile()) return;
43665
43665
  if (stat.size > 512 * 1024) return;
43666
- const content = await fsPromises.readFile(absPath, "utf-8");
43666
+ const content = await fs$1.readFile(absPath, "utf-8");
43667
43667
  const first = /\$[A-Z_][A-Z0-9_]{1,}/g.exec(content);
43668
43668
  if (first) {
43669
43669
  const idx = first.index;
@@ -44602,8 +44602,16 @@ const GEMMA_TOKEN_PATTERNS = [
44602
44602
  /<start_of_turn>(?:model|user)?/g,
44603
44603
  /<end_of_turn>/g,
44604
44604
  /<\|(?:fim_prefix|fim_suffix|fim_middle)\|>/g,
44605
- /^\s*<bos>\s*/gm
44605
+ /^\s*<bos>\s*/gm,
44606
+ /<\|[^|>]{0,30}\|>/g,
44607
+ /<\|[^>]{0,30}>/g
44606
44608
  ];
44609
+ /**
44610
+ * Aggressively strip all fragments of model control token corruption from
44611
+ * tool arguments. This catches cases where the model produces raw garbage
44612
+ * like `<|<|"|<|<|\'` that doesn't match any known token template.
44613
+ */
44614
+ const AGGRESSIVE_TOKEN_FRAGMENTS = [/<\|/g, /\|>/g];
44607
44615
  const GEMMA_MODEL_HINTS$1 = ["gemma", "redsand/"];
44608
44616
  function isGemmaModel$1(modelId) {
44609
44617
  const lower = modelId.toLowerCase();
@@ -44613,6 +44621,10 @@ function isGemmaModel$1(modelId) {
44613
44621
  * Strip known control tokens from text. Only applies to Gemma-family models;
44614
44622
  * other models pass through unchanged.
44615
44623
  */
44624
+ /**
44625
+ * Strip known control tokens from text. Only applies to Gemma-family models;
44626
+ * other models pass through unchanged. Used for streamed text output.
44627
+ */
44616
44628
  function stripModelTokens(text, modelId) {
44617
44629
  if (!text || !isGemmaModel$1(modelId)) return text;
44618
44630
  let result = text;
@@ -44622,6 +44634,21 @@ function stripModelTokens(text, modelId) {
44622
44634
  }
44623
44635
  return result;
44624
44636
  }
44637
+ /**
44638
+ * Aggressively strip ALL token-like fragments from a string. Used for tool
44639
+ * call arguments where any `<|` corruption causes downstream failures.
44640
+ * More aggressive than `stripModelTokens` — removes bare `<|` and `|>` fragments
44641
+ * that don't match any known token template.
44642
+ */
44643
+ function stripModelTokensAggressive(text, modelId) {
44644
+ if (!text || !isGemmaModel$1(modelId)) return text;
44645
+ let result = stripModelTokens(text, modelId);
44646
+ for (const re of AGGRESSIVE_TOKEN_FRAGMENTS) {
44647
+ re.lastIndex = 0;
44648
+ result = result.replace(re, "");
44649
+ }
44650
+ return result;
44651
+ }
44625
44652
 
44626
44653
  //#endregion
44627
44654
  //#region src/agents/pi-tools.abort.ts
@@ -46867,7 +46894,7 @@ async function readJsonlFromPath(jsonlPath) {
46867
46894
  if (shouldLogVerbose()) logVerbose(`Blocked canvas jsonlPath outside allowed roots: ${resolved}`);
46868
46895
  throw new Error("jsonlPath outside allowed roots");
46869
46896
  }
46870
- const canonical = await fsPromises.realpath(resolved).catch(() => resolved);
46897
+ const canonical = await fs$1.realpath(resolved).catch(() => resolved);
46871
46898
  if (!isInboundPathAllowed({
46872
46899
  filePath: canonical,
46873
46900
  roots
@@ -46875,7 +46902,7 @@ async function readJsonlFromPath(jsonlPath) {
46875
46902
  if (shouldLogVerbose()) logVerbose(`Blocked canvas jsonlPath outside allowed roots: ${canonical}`);
46876
46903
  throw new Error("jsonlPath outside allowed roots");
46877
46904
  }
46878
- return await fsPromises.readFile(canonical, "utf8");
46905
+ return await fs$1.readFile(canonical, "utf8");
46879
46906
  }
46880
46907
  const CanvasToolSchema = Type.Object({
46881
46908
  action: stringEnum(CANVAS_ACTIONS),
@@ -47655,27 +47682,27 @@ function resolveRestartSentinelPath(env = process.env) {
47655
47682
  }
47656
47683
  async function writeRestartSentinel(payload, env = process.env) {
47657
47684
  const filePath = resolveRestartSentinelPath(env);
47658
- await fsPromises.mkdir(path.dirname(filePath), { recursive: true });
47685
+ await fs$1.mkdir(path.dirname(filePath), { recursive: true });
47659
47686
  const data = {
47660
47687
  version: 1,
47661
47688
  payload
47662
47689
  };
47663
- await fsPromises.writeFile(filePath, `${JSON.stringify(data, null, 2)}\n`, "utf-8");
47690
+ await fs$1.writeFile(filePath, `${JSON.stringify(data, null, 2)}\n`, "utf-8");
47664
47691
  return filePath;
47665
47692
  }
47666
47693
  async function readRestartSentinel(env = process.env) {
47667
47694
  const filePath = resolveRestartSentinelPath(env);
47668
47695
  try {
47669
- const raw = await fsPromises.readFile(filePath, "utf-8");
47696
+ const raw = await fs$1.readFile(filePath, "utf-8");
47670
47697
  let parsed;
47671
47698
  try {
47672
47699
  parsed = JSON.parse(raw);
47673
47700
  } catch {
47674
- await fsPromises.unlink(filePath).catch(() => {});
47701
+ await fs$1.unlink(filePath).catch(() => {});
47675
47702
  return null;
47676
47703
  }
47677
47704
  if (!parsed || parsed.version !== 1 || !parsed.payload) {
47678
- await fsPromises.unlink(filePath).catch(() => {});
47705
+ await fs$1.unlink(filePath).catch(() => {});
47679
47706
  return null;
47680
47707
  }
47681
47708
  return parsed;
@@ -47687,7 +47714,7 @@ async function consumeRestartSentinel(env = process.env) {
47687
47714
  const filePath = resolveRestartSentinelPath(env);
47688
47715
  const parsed = await readRestartSentinel(env);
47689
47716
  if (!parsed) return null;
47690
- await fsPromises.unlink(filePath).catch(() => {});
47717
+ await fs$1.unlink(filePath).catch(() => {});
47691
47718
  return parsed;
47692
47719
  }
47693
47720
  function formatRestartSentinelMessage(payload) {
@@ -48794,7 +48821,7 @@ async function hydrateAttachmentPayload(params) {
48794
48821
  accountId: params.accountId
48795
48822
  }),
48796
48823
  sandboxValidated: true,
48797
- readFile: (filePath) => fsPromises.readFile(filePath)
48824
+ readFile: (filePath) => fs$1.readFile(filePath)
48798
48825
  });
48799
48826
  params.args.buffer = media.buffer.toString("base64");
48800
48827
  if (!contentTypeParam && media.contentType) params.args.contentType = media.contentType;
@@ -56022,10 +56049,10 @@ function wrapToolWithArgSanitization(tool, modelId) {
56022
56049
  };
56023
56050
  }
56024
56051
  function sanitizeToolArgs(params, modelId) {
56025
- if (!params || typeof params !== "object") return typeof params === "string" ? stripModelTokens(params, modelId) : params;
56052
+ if (!params || typeof params !== "object") return typeof params === "string" ? stripModelTokensAggressive(params, modelId) : params;
56026
56053
  if (Array.isArray(params)) return params.map((item) => sanitizeToolArgs(item, modelId));
56027
56054
  const result = {};
56028
- for (const [key, value] of Object.entries(params)) if (typeof value === "string") result[key] = stripModelTokens(value, modelId);
56055
+ for (const [key, value] of Object.entries(params)) if (typeof value === "string") result[key] = stripModelTokensAggressive(value, modelId);
56029
56056
  else if (value && typeof value === "object") result[key] = sanitizeToolArgs(value, modelId);
56030
56057
  else result[key] = value;
56031
56058
  return result;
@@ -56276,7 +56303,7 @@ async function repairSessionFileIfNeeded(params) {
56276
56303
  };
56277
56304
  let content;
56278
56305
  try {
56279
- content = await fsPromises.readFile(sessionFile, "utf-8");
56306
+ content = await fs$1.readFile(sessionFile, "utf-8");
56280
56307
  } catch (err) {
56281
56308
  if (err?.code === "ENOENT") return {
56282
56309
  repaired: false,
@@ -56324,15 +56351,15 @@ async function repairSessionFileIfNeeded(params) {
56324
56351
  const backupPath = `${sessionFile}.bak-${process.pid}-${Date.now()}`;
56325
56352
  const tmpPath = `${sessionFile}.repair-${process.pid}-${Date.now()}.tmp`;
56326
56353
  try {
56327
- const stat = await fsPromises.stat(sessionFile).catch(() => null);
56328
- await fsPromises.writeFile(backupPath, content, "utf-8");
56329
- if (stat) await fsPromises.chmod(backupPath, stat.mode);
56330
- await fsPromises.writeFile(tmpPath, cleaned, "utf-8");
56331
- if (stat) await fsPromises.chmod(tmpPath, stat.mode);
56332
- await fsPromises.rename(tmpPath, sessionFile);
56354
+ const stat = await fs$1.stat(sessionFile).catch(() => null);
56355
+ await fs$1.writeFile(backupPath, content, "utf-8");
56356
+ if (stat) await fs$1.chmod(backupPath, stat.mode);
56357
+ await fs$1.writeFile(tmpPath, cleaned, "utf-8");
56358
+ if (stat) await fs$1.chmod(tmpPath, stat.mode);
56359
+ await fs$1.rename(tmpPath, sessionFile);
56333
56360
  } catch (err) {
56334
56361
  try {
56335
- await fsPromises.unlink(tmpPath);
56362
+ await fs$1.unlink(tmpPath);
56336
56363
  } catch (cleanupErr) {
56337
56364
  params.warn?.(`session file repair cleanup failed: ${cleanupErr instanceof Error ? cleanupErr.message : "unknown error"} (${path.basename(tmpPath)})`);
56338
56365
  }
@@ -58437,7 +58464,7 @@ async function prewarmSessionFile(sessionFile) {
58437
58464
  if (!isSessionManagerCacheEnabled()) return;
58438
58465
  if (isSessionManagerCached(sessionFile)) return;
58439
58466
  try {
58440
- const handle = await fsPromises.open(sessionFile, "r");
58467
+ const handle = await fs$1.open(sessionFile, "r");
58441
58468
  try {
58442
58469
  const buffer = Buffer$1.alloc(4096);
58443
58470
  await handle.read(buffer, 0, buffer.length, 0);
@@ -58761,7 +58788,7 @@ async function compactEmbeddedPiSessionDirect(params) {
58761
58788
  } catch (err) {
58762
58789
  return fail(describeUnknownError(err));
58763
58790
  }
58764
- await fsPromises.mkdir(resolvedWorkspace, { recursive: true });
58791
+ await fs$1.mkdir(resolvedWorkspace, { recursive: true });
58765
58792
  const sandboxSessionKey = params.sessionKey?.trim() || params.sessionId;
58766
58793
  const sandbox = await resolveSandboxContext({
58767
58794
  config: params.config,
@@ -58769,7 +58796,7 @@ async function compactEmbeddedPiSessionDirect(params) {
58769
58796
  workspaceDir: resolvedWorkspace
58770
58797
  });
58771
58798
  const effectiveWorkspace = sandbox?.enabled ? sandbox.workspaceAccess === "rw" ? resolvedWorkspace : sandbox.workspaceDir : resolvedWorkspace;
58772
- await fsPromises.mkdir(effectiveWorkspace, { recursive: true });
58799
+ await fs$1.mkdir(effectiveWorkspace, { recursive: true });
58773
58800
  await ensureSessionHeader({
58774
58801
  sessionFile: params.sessionFile,
58775
58802
  sessionId: params.sessionId,
@@ -59252,10 +59279,6 @@ function resolveModelProfile(modelId, userProfiles) {
59252
59279
 
59253
59280
  //#endregion
59254
59281
  //#region src/agents/pi-embedded-runner/extra-params.ts
59255
- const OPENROUTER_APP_HEADERS = {
59256
- "HTTP-Referer": "https://symi.ai",
59257
- "X-Title": "Symi"
59258
- };
59259
59282
  const ANTHROPIC_CONTEXT_1M_BETA = "context-1m-2025-08-07";
59260
59283
  const ANTHROPIC_1M_MODEL_PREFIXES = ["claude-opus-4", "claude-sonnet-4"];
59261
59284
  const OPENAI_RESPONSES_APIS = new Set(["openai-responses"]);
@@ -59273,70 +59296,6 @@ function resolveExtraParams(params) {
59273
59296
  const profile = resolveModelProfile(modelKey, params.cfg?.models?.profiles);
59274
59297
  if (profile.params && Object.keys(profile.params).length > 0) return { ...profile.params };
59275
59298
  }
59276
- /**
59277
- * Resolve cacheRetention from extraParams, supporting both new `cacheRetention`
59278
- * and legacy `cacheControlTtl` values for backwards compatibility.
59279
- *
59280
- * Mapping: "5m" → "short", "1h" → "long"
59281
- *
59282
- * Only applies to Anthropic provider (OpenRouter uses openai-completions API
59283
- * with hardcoded cache_control, not the cacheRetention stream option).
59284
- *
59285
- * Defaults to "short" for Anthropic provider when not explicitly configured.
59286
- */
59287
- function resolveCacheRetention(extraParams, provider) {
59288
- if (provider !== "anthropic") return;
59289
- const newVal = extraParams?.cacheRetention;
59290
- if (newVal === "none" || newVal === "short" || newVal === "long") return newVal;
59291
- const legacy = extraParams?.cacheControlTtl;
59292
- if (legacy === "5m") return "short";
59293
- if (legacy === "1h") return "long";
59294
- return "short";
59295
- }
59296
- function createStreamFnWithExtraParams(baseStreamFn, extraParams, provider) {
59297
- if (!extraParams || Object.keys(extraParams).length === 0) return;
59298
- const streamParams = {};
59299
- if (typeof extraParams.temperature === "number") streamParams.temperature = extraParams.temperature;
59300
- if (typeof extraParams.maxTokens === "number") streamParams.maxTokens = extraParams.maxTokens;
59301
- if (typeof extraParams.top_p === "number") streamParams.top_p = extraParams.top_p;
59302
- if (typeof extraParams.top_k === "number") streamParams.top_k = extraParams.top_k;
59303
- if (typeof extraParams.repeat_penalty === "number") streamParams.repeat_penalty = extraParams.repeat_penalty;
59304
- if (Array.isArray(extraParams.stop) && extraParams.stop.length > 0) streamParams.stop = extraParams.stop;
59305
- if (extraParams.chat_template_kwargs && typeof extraParams.chat_template_kwargs === "object") streamParams.chat_template_kwargs = extraParams.chat_template_kwargs;
59306
- const cacheRetention = resolveCacheRetention(extraParams, provider);
59307
- if (cacheRetention) streamParams.cacheRetention = cacheRetention;
59308
- if (Object.keys(streamParams).length === 0) return;
59309
- log$2.debug(`creating streamFn wrapper with params: ${JSON.stringify(streamParams)}`);
59310
- const sp = streamParams;
59311
- const payloadOverrides = {};
59312
- if (Array.isArray(sp.stop) && sp.stop.length > 0) payloadOverrides.stop = sp.stop;
59313
- if (typeof sp.top_p === "number") payloadOverrides.top_p = sp.top_p;
59314
- if (typeof sp.top_k === "number") payloadOverrides.top_k = sp.top_k;
59315
- if (typeof sp.repeat_penalty === "number") payloadOverrides.repeat_penalty = sp.repeat_penalty;
59316
- const hasPayloadOverrides = Object.keys(payloadOverrides).length > 0;
59317
- const underlying = baseStreamFn ?? streamSimple;
59318
- const wrappedStreamFn = (model, context, options) => {
59319
- if (hasPayloadOverrides) {
59320
- const originalOnPayload = options?.onPayload;
59321
- return underlying(model, context, {
59322
- ...streamParams,
59323
- ...options,
59324
- onPayload: (payload) => {
59325
- if (payload && typeof payload === "object") {
59326
- const p = payload;
59327
- for (const [key, value] of Object.entries(payloadOverrides)) if (p[key] === void 0) p[key] = value;
59328
- }
59329
- originalOnPayload?.(payload);
59330
- }
59331
- });
59332
- }
59333
- return underlying(model, context, {
59334
- ...streamParams,
59335
- ...options
59336
- });
59337
- };
59338
- return wrappedStreamFn;
59339
- }
59340
59299
  function isDirectOpenAIBaseUrl(baseUrl) {
59341
59300
  if (typeof baseUrl !== "string" || !baseUrl.trim()) return true;
59342
59301
  try {
@@ -59417,20 +59376,6 @@ function createAnthropicBetaHeadersWrapper(baseStreamFn, betas) {
59417
59376
  };
59418
59377
  }
59419
59378
  /**
59420
- * Create a streamFn wrapper that adds OpenRouter app attribution headers.
59421
- * These headers allow Symi to appear on OpenRouter's leaderboard.
59422
- */
59423
- function createOpenRouterHeadersWrapper(baseStreamFn) {
59424
- const underlying = baseStreamFn ?? streamSimple;
59425
- return (model, context, options) => underlying(model, context, {
59426
- ...options,
59427
- headers: {
59428
- ...OPENROUTER_APP_HEADERS,
59429
- ...options?.headers
59430
- }
59431
- });
59432
- }
59433
- /**
59434
59379
  * Create a streamFn wrapper that injects tool_stream=true for Z.AI providers.
59435
59380
  *
59436
59381
  * Z.AI's API supports the `tool_stream` parameter to enable real-time streaming
@@ -59453,82 +59398,6 @@ function createZaiToolStreamWrapper(baseStreamFn, enabled) {
59453
59398
  });
59454
59399
  };
59455
59400
  }
59456
- const GEMMA_STOP_SEQUENCES = ["<end_of_turn>", "<eos>"];
59457
- const VLLM_GEMMA_HINTS = ["gemma", "redsand"];
59458
- function isVllmOrGemmaProvider(provider, modelId, cfg) {
59459
- const lower = `${provider}/${modelId}`.toLowerCase();
59460
- if (VLLM_GEMMA_HINTS.some((h) => lower.includes(h))) return true;
59461
- const baseUrl = ((cfg?.models?.providers?.[provider])?.baseUrl ?? "").toLowerCase();
59462
- return baseUrl.includes("coreweave") || baseUrl.includes("vllm");
59463
- }
59464
- /**
59465
- * Wrap the stream function to fix vLLM/Gemma compat issues via onPayload:
59466
- * 1. Replace `max_completion_tokens` with `max_tokens` (vLLM ignores the former)
59467
- * 2. Inject Gemma stop sequences if none are set
59468
- * 3. Remove unsupported fields (store, stream_options.include_usage on older vLLM)
59469
- */
59470
- function createVllmCompatWrapper(baseStreamFn, extraParams) {
59471
- const underlying = baseStreamFn ?? streamSimple;
59472
- const configuredStop = Array.isArray(extraParams.stop) ? extraParams.stop : GEMMA_STOP_SEQUENCES;
59473
- return (model, context, options) => {
59474
- const originalOnPayload = options?.onPayload;
59475
- return underlying(model, context, {
59476
- ...options,
59477
- onPayload: (payload) => {
59478
- if (payload && typeof payload === "object") {
59479
- const p = payload;
59480
- if (p.max_completion_tokens && !p.max_tokens) {
59481
- p.max_tokens = p.max_completion_tokens;
59482
- delete p.max_completion_tokens;
59483
- }
59484
- if (!p.stop && configuredStop.length > 0) p.stop = configuredStop;
59485
- delete p.store;
59486
- }
59487
- originalOnPayload?.(payload);
59488
- }
59489
- });
59490
- };
59491
- }
59492
- /**
59493
- * Apply extra params (like temperature) to an agent's streamFn.
59494
- * Also adds OpenRouter app attribution headers when using the OpenRouter provider.
59495
- *
59496
- * @internal Exported for testing
59497
- */
59498
- function applyExtraParamsToAgent(agent, cfg, provider, modelId, extraParamsOverride) {
59499
- const extraParams = resolveExtraParams({
59500
- cfg,
59501
- provider,
59502
- modelId
59503
- });
59504
- const override = extraParamsOverride && Object.keys(extraParamsOverride).length > 0 ? Object.fromEntries(Object.entries(extraParamsOverride).filter(([, value]) => value !== void 0)) : void 0;
59505
- const merged = Object.assign({}, extraParams, override);
59506
- const wrappedStreamFn = createStreamFnWithExtraParams(agent.streamFn, merged, provider);
59507
- if (wrappedStreamFn) {
59508
- log$2.debug(`applying extraParams to agent streamFn for ${provider}/${modelId}`);
59509
- agent.streamFn = wrappedStreamFn;
59510
- }
59511
- const anthropicBetas = resolveAnthropicBetas(merged, provider, modelId);
59512
- if (anthropicBetas?.length) {
59513
- log$2.debug(`applying Anthropic beta header for ${provider}/${modelId}: ${anthropicBetas.join(",")}`);
59514
- agent.streamFn = createAnthropicBetaHeadersWrapper(agent.streamFn, anthropicBetas);
59515
- }
59516
- if (provider === "openrouter") {
59517
- log$2.debug(`applying OpenRouter app attribution headers for ${provider}/${modelId}`);
59518
- agent.streamFn = createOpenRouterHeadersWrapper(agent.streamFn);
59519
- }
59520
- if (provider === "zai" || provider === "z-ai") {
59521
- if (merged?.tool_stream !== false) {
59522
- log$2.debug(`enabling Z.AI tool_stream for ${provider}/${modelId}`);
59523
- agent.streamFn = createZaiToolStreamWrapper(agent.streamFn, true);
59524
- }
59525
- }
59526
- if (isVllmOrGemmaProvider(provider, modelId, cfg)) {
59527
- log$2.debug(`applying vLLM/Gemma compat wrapper for ${provider}/${modelId}`);
59528
- agent.streamFn = createVllmCompatWrapper(agent.streamFn, merged);
59529
- }
59530
- agent.streamFn = createOpenAIResponsesStoreWrapper(agent.streamFn);
59531
- }
59532
59401
 
59533
59402
  //#endregion
59534
59403
  //#region src/utils/safe-json.ts
@@ -59559,12 +59428,12 @@ function getQueuedFileWriter(writers, filePath) {
59559
59428
  const existing = writers.get(filePath);
59560
59429
  if (existing) return existing;
59561
59430
  const dir = path.dirname(filePath);
59562
- const ready = fsPromises.mkdir(dir, { recursive: true }).catch(() => void 0);
59431
+ const ready = fs$1.mkdir(dir, { recursive: true }).catch(() => void 0);
59563
59432
  let queue = Promise.resolve();
59564
59433
  const writer = {
59565
59434
  filePath,
59566
59435
  write: (line) => {
59567
- queue = queue.then(() => ready).then(() => fsPromises.appendFile(filePath, line, "utf8")).catch(() => void 0);
59436
+ queue = queue.then(() => ready).then(() => fs$1.appendFile(filePath, line, "utf8")).catch(() => void 0);
59568
59437
  }
59569
59438
  };
59570
59439
  writers.set(filePath, writer);
@@ -59805,6 +59674,74 @@ function createCacheTrace(params) {
59805
59674
  };
59806
59675
  }
59807
59676
 
59677
+ //#endregion
59678
+ //#region src/agents/model-aware-stream.ts
59679
+ /**
59680
+ * Create a single stream function wrapper that handles all provider-specific
59681
+ * param injection via one onPayload hook.
59682
+ *
59683
+ * Replaces: createStreamFnWithExtraParams, createVllmCompatWrapper,
59684
+ * createOpenRouterHeadersWrapper.
59685
+ */
59686
+ function createModelAwareStreamFn(opts) {
59687
+ const underlying = opts.baseStreamFn ?? streamSimple;
59688
+ const mergedParams = {
59689
+ ...opts.profile.params,
59690
+ ...opts.configExtraParams,
59691
+ ...opts.streamParamsOverride
59692
+ };
59693
+ const nativeOpts = {};
59694
+ if (typeof mergedParams.temperature === "number") nativeOpts.temperature = mergedParams.temperature;
59695
+ if (typeof mergedParams.max_tokens === "number") nativeOpts.maxTokens = mergedParams.max_tokens;
59696
+ else if (typeof mergedParams.maxTokens === "number") nativeOpts.maxTokens = mergedParams.maxTokens;
59697
+ const injections = {};
59698
+ if (Array.isArray(mergedParams.stop) && mergedParams.stop.length > 0) injections.stop = mergedParams.stop;
59699
+ if (typeof mergedParams.top_p === "number") injections.top_p = mergedParams.top_p;
59700
+ if (typeof mergedParams.top_k === "number") injections.top_k = mergedParams.top_k;
59701
+ if (typeof mergedParams.repeat_penalty === "number") injections.repeat_penalty = mergedParams.repeat_penalty;
59702
+ const isVllm = isVllmProvider(opts.provider, opts.modelId, opts.config);
59703
+ const isOpenRouter = opts.provider === "openrouter";
59704
+ const extraHeaders = {};
59705
+ if (isOpenRouter) {
59706
+ extraHeaders["HTTP-Referer"] = "https://symi.ai";
59707
+ extraHeaders["X-Title"] = "Symi";
59708
+ }
59709
+ const hasExtraHeaders = Object.keys(extraHeaders).length > 0;
59710
+ const onPayloadHook = (payload, callerOnPayload) => {
59711
+ if (payload && typeof payload === "object") {
59712
+ const p = payload;
59713
+ for (const [key, val] of Object.entries(injections)) if (p[key] === void 0) p[key] = val;
59714
+ if (isVllm) {
59715
+ if (p.max_completion_tokens && !p.max_tokens) {
59716
+ p.max_tokens = p.max_completion_tokens;
59717
+ delete p.max_completion_tokens;
59718
+ }
59719
+ delete p.store;
59720
+ }
59721
+ }
59722
+ callerOnPayload?.(payload);
59723
+ };
59724
+ return (model, context, options) => {
59725
+ const callerOnPayload = options?.onPayload;
59726
+ return underlying(model, context, {
59727
+ ...nativeOpts,
59728
+ ...options,
59729
+ onPayload: (payload) => onPayloadHook(payload, callerOnPayload),
59730
+ ...hasExtraHeaders ? { headers: {
59731
+ ...extraHeaders,
59732
+ ...options?.headers
59733
+ } } : {}
59734
+ });
59735
+ };
59736
+ }
59737
+ /** Detect vLLM/Gemma providers by model hints or baseUrl patterns. */
59738
+ function isVllmProvider(provider, modelId, config) {
59739
+ const lower = `${provider}/${modelId}`.toLowerCase();
59740
+ if (["gemma", "redsand"].some((h) => lower.includes(h))) return true;
59741
+ const baseUrl = ((config?.models?.providers?.[provider])?.baseUrl ?? "").toLowerCase();
59742
+ return baseUrl.includes("coreweave") || baseUrl.includes("vllm");
59743
+ }
59744
+
59808
59745
  //#endregion
59809
59746
  //#region src/auto-reply/reply/streaming-directives.ts
59810
59747
  const splitTrailingDirective = (text) => {
@@ -61956,7 +61893,7 @@ async function prepareSessionManagerForRun(params) {
61956
61893
  return;
61957
61894
  }
61958
61895
  if (params.hadSessionFile && header && !hasAssistant) {
61959
- await fsPromises.writeFile(params.sessionFile, "", "utf-8");
61896
+ await fs$1.writeFile(params.sessionFile, "", "utf-8");
61960
61897
  sm.fileEntries = [header];
61961
61898
  sm.byId?.clear?.();
61962
61899
  sm.labelsById?.clear?.();
@@ -62514,7 +62451,7 @@ async function runEmbeddedAttempt(params) {
62514
62451
  const prevCwd = process.cwd();
62515
62452
  const runAbortController = new AbortController();
62516
62453
  log$2.debug(`embedded run start: runId=${params.runId} sessionId=${params.sessionId} provider=${params.provider} model=${params.modelId} thinking=${params.thinkLevel} messageChannel=${params.messageChannel ?? params.messageProvider ?? "unknown"}`);
62517
- await fsPromises.mkdir(resolvedWorkspace, { recursive: true });
62454
+ await fs$1.mkdir(resolvedWorkspace, { recursive: true });
62518
62455
  const sandboxSessionKey = params.sessionKey?.trim() || params.sessionId;
62519
62456
  const sandbox = await resolveSandboxContext({
62520
62457
  config: params.config,
@@ -62522,7 +62459,7 @@ async function runEmbeddedAttempt(params) {
62522
62459
  workspaceDir: resolvedWorkspace
62523
62460
  });
62524
62461
  const effectiveWorkspace = sandbox?.enabled ? sandbox.workspaceAccess === "rw" ? resolvedWorkspace : sandbox.workspaceDir : resolvedWorkspace;
62525
- await fsPromises.mkdir(effectiveWorkspace, { recursive: true });
62462
+ await fs$1.mkdir(effectiveWorkspace, { recursive: true });
62526
62463
  let restoreSkillEnv;
62527
62464
  process.chdir(effectiveWorkspace);
62528
62465
  try {
@@ -62750,7 +62687,7 @@ async function runEmbeddedAttempt(params) {
62750
62687
  sessionFile: params.sessionFile,
62751
62688
  warn: (message) => log$2.warn(message)
62752
62689
  });
62753
- const hadSessionFile = await fsPromises.stat(params.sessionFile).then(() => true).catch(() => false);
62690
+ const hadSessionFile = await fs$1.stat(params.sessionFile).then(() => true).catch(() => false);
62754
62691
  const transcriptPolicy = resolveTranscriptPolicy({
62755
62692
  modelApi: params.model?.api,
62756
62693
  provider: params.provider,
@@ -62855,14 +62792,39 @@ async function runEmbeddedAttempt(params) {
62855
62792
  modelApi: params.model.api,
62856
62793
  workspaceDir: params.workspaceDir
62857
62794
  });
62858
- if (params.model.api === "ollama") {
62859
- const providerConfig = params.config?.models?.providers?.[params.model.provider];
62860
- const modelBaseUrl = typeof params.model.baseUrl === "string" ? params.model.baseUrl.trim() : "";
62861
- const providerBaseUrl = typeof providerConfig?.baseUrl === "string" ? providerConfig.baseUrl.trim() : "";
62862
- const ollamaBaseUrl = modelBaseUrl || providerBaseUrl || OLLAMA_NATIVE_BASE_URL;
62863
- activeSession.agent.streamFn = createOllamaStreamFn(ollamaBaseUrl);
62864
- } else activeSession.agent.streamFn = streamSimple;
62865
- applyExtraParamsToAgent(activeSession.agent, params.config, params.provider, params.modelId, params.streamParams);
62795
+ {
62796
+ let baseStreamFn = streamSimple;
62797
+ if (params.model.api === "ollama") {
62798
+ const providerConfig = params.config?.models?.providers?.[params.model.provider];
62799
+ const modelBaseUrl = typeof params.model.baseUrl === "string" ? params.model.baseUrl.trim() : "";
62800
+ const providerBaseUrl = typeof providerConfig?.baseUrl === "string" ? providerConfig.baseUrl.trim() : "";
62801
+ baseStreamFn = createOllamaStreamFn(modelBaseUrl || providerBaseUrl || OLLAMA_NATIVE_BASE_URL);
62802
+ }
62803
+ const configExtraParams = resolveExtraParams({
62804
+ cfg: params.config,
62805
+ provider: params.provider,
62806
+ modelId: params.modelId
62807
+ });
62808
+ activeSession.agent.streamFn = createModelAwareStreamFn({
62809
+ baseStreamFn,
62810
+ profile: modelProfile,
62811
+ provider: params.provider,
62812
+ modelId: params.modelId,
62813
+ config: params.config,
62814
+ configExtraParams,
62815
+ streamParamsOverride: params.streamParams
62816
+ });
62817
+ const merged = {
62818
+ ...configExtraParams,
62819
+ ...params.streamParams
62820
+ };
62821
+ const anthropicBetas = resolveAnthropicBetas(merged, params.provider, params.modelId);
62822
+ if (anthropicBetas?.length) activeSession.agent.streamFn = createAnthropicBetaHeadersWrapper(activeSession.agent.streamFn, anthropicBetas);
62823
+ if (params.provider === "zai" || params.provider === "z-ai") {
62824
+ if (merged?.tool_stream !== false) activeSession.agent.streamFn = createZaiToolStreamWrapper(activeSession.agent.streamFn, true);
62825
+ }
62826
+ activeSession.agent.streamFn = createOpenAIResponsesStoreWrapper(activeSession.agent.streamFn);
62827
+ }
62866
62828
  if (cacheTrace) {
62867
62829
  cacheTrace.recordStage("session:loaded", {
62868
62830
  messages: activeSession.messages,
@@ -63768,7 +63730,7 @@ async function runEmbeddedPiAgent(params) {
63768
63730
  }
63769
63731
  runLoopIterations += 1;
63770
63732
  attemptedThinking.add(thinkLevel);
63771
- await fsPromises.mkdir(resolvedWorkspace, { recursive: true });
63733
+ await fs$1.mkdir(resolvedWorkspace, { recursive: true });
63772
63734
  const prompt = provider === "anthropic" ? scrubAnthropicRefusalMagic(params.prompt) : params.prompt;
63773
63735
  const attempt = await runEmbeddedAttempt({
63774
63736
  sessionId: params.sessionId,
@@ -68110,7 +68072,7 @@ async function handleCommands(params) {
68110
68072
  try {
68111
68073
  const messages = [];
68112
68074
  if (sessionFile) {
68113
- const content = await fsPromises.readFile(sessionFile, "utf-8");
68075
+ const content = await fs$1.readFile(sessionFile, "utf-8");
68114
68076
  for (const line of content.split("\n")) {
68115
68077
  if (!line.trim()) continue;
68116
68078
  try {
@@ -71768,7 +71730,7 @@ async function deliverSessionMaintenanceWarning(params) {
71768
71730
  return;
71769
71731
  }
71770
71732
  try {
71771
- const { deliverOutboundPayloads } = await import("./deliver-Um8yyhRA.js").then((n) => n.n);
71733
+ const { deliverOutboundPayloads } = await import("./deliver-CceEhg3d.js").then((n) => n.n);
71772
71734
  await deliverOutboundPayloads({
71773
71735
  cfg: params.cfg,
71774
71736
  channel,
@@ -72143,7 +72105,7 @@ async function stageSandboxMedia(params) {
72143
72105
  };
72144
72106
  try {
72145
72107
  const destDir = sandbox ? path.join(effectiveWorkspaceDir, "media", "inbound") : effectiveWorkspaceDir;
72146
- await fsPromises.mkdir(destDir, { recursive: true });
72108
+ await fs$1.mkdir(destDir, { recursive: true });
72147
72109
  const remoteAttachmentRoots = resolveIMessageRemoteAttachmentRoots({
72148
72110
  cfg,
72149
72111
  accountId: ctx.AccountId
@@ -72193,7 +72155,7 @@ async function stageSandboxMedia(params) {
72193
72155
  usedNames.add(fileName);
72194
72156
  const dest = path.join(destDir, fileName);
72195
72157
  if (ctx.MediaRemoteHost) await scpFile(ctx.MediaRemoteHost, source, dest);
72196
- else await fsPromises.copyFile(source, dest);
72158
+ else await fs$1.copyFile(source, dest);
72197
72159
  const stagedPath = sandbox ? path.posix.join("media", "inbound", fileName) : dest;
72198
72160
  staged.set(source, stagedPath);
72199
72161
  }