@symerian/symi 2.5.0 → 2.5.2

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 (171) hide show
  1. package/dist/{agents-BEPfMqrg.js → agents-DfyzZKBc.js} +4 -4
  2. package/dist/{agents.config-DPv-AmZD.js → agents.config-Dzr8Us0l.js} +1 -1
  3. package/dist/{agents.config-D60gMagv.js → agents.config-VjZQr5GP.js} +1 -1
  4. package/dist/{audio-preflight-CPBOQV4I.js → audio-preflight-C40mKAp7.js} +4 -4
  5. package/dist/{auth-choice-CTeG2A5P.js → auth-choice-BJPRC23V.js} +1 -1
  6. package/dist/{auth-choice-BeHaRQfM.js → auth-choice-C01glnpg.js} +1 -1
  7. package/dist/{banner-DihS8WHF.js → banner-B4wP-CCZ.js} +1 -1
  8. package/dist/build-info.json +3 -3
  9. package/dist/bundled/boot-md/handler.js +1 -1
  10. package/dist/bundled/session-memory/handler.js +1 -1
  11. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  12. package/dist/{channel-options-D2Zf6a2L.js → channel-options-Bb2WRpn4.js} +1 -1
  13. package/dist/{channel-options-BJphNYiq.js → channel-options-DRK05uet.js} +1 -1
  14. package/dist/{channel-web-BnZ6c0_u.js → channel-web-Cv1L-jTo.js} +1 -1
  15. package/dist/{channels-cli-COMko9mZ.js → channels-cli-CPvaBiNE.js} +4 -4
  16. package/dist/{channels-cli-CF9LDCSC.js → channels-cli-Dnwswsi2.js} +4 -4
  17. package/dist/{chrome-D2SKJnR7.js → chrome-CDJYxX5a.js} +7 -7
  18. package/dist/{cli-DYNTJxmZ.js → cli-CgQySW2m.js} +1 -1
  19. package/dist/{cli-DXpAHJS4.js → cli-hT0g_Q65.js} +1 -1
  20. package/dist/{command-registry-X_FmrHib.js → command-registry-D7MjQKMD.js} +9 -9
  21. package/dist/{completion-cli-D1aObtjM.js → completion-cli-BLYlpN4p.js} +1 -1
  22. package/dist/{completion-cli-Dhj0jCR_.js → completion-cli-Bcv09Yuh.js} +2 -2
  23. package/dist/{config-cli-BrmaXVj4.js → config-cli-CIkKTucr.js} +1 -1
  24. package/dist/{config-cli-BDpBT1b-.js → config-cli-CtKkpyHu.js} +1 -1
  25. package/dist/{configure-CkCFJCKp.js → configure-BP4M7T_e.js} +3 -3
  26. package/dist/{configure-oMqP6jIk.js → configure-Bhm7x3Ri.js} +3 -3
  27. package/dist/control-ui/js/render.js +4 -32
  28. package/dist/{deliver-C-37cZUe.js → deliver-BH0l3UKW.js} +1 -1
  29. package/dist/{doctor-completion-vhqAoURB.js → doctor-completion-DVs_xVw4.js} +1 -1
  30. package/dist/{doctor-completion-wGoyzRH8.js → doctor-completion-bTUb2Em4.js} +1 -1
  31. package/dist/entry.js +1 -1
  32. package/dist/extensionAPI.js +6 -6
  33. package/dist/{gateway-cli-uDuGdJsH.js → gateway-cli-BPf1OUhU.js} +11 -45
  34. package/dist/{gateway-cli-BBPEwiAc.js → gateway-cli-CY_R8dGA.js} +11 -45
  35. package/dist/{glass-ui-ws-TCkne4L4.js → glass-ui-ws-Cx9mt64o.js} +7 -7
  36. package/dist/{glass-ui-ws-DiqQflvy.js → glass-ui-ws-DMQldmwk.js} +7 -7
  37. package/dist/{health-1KsVR3eN.js → health-CM3gPoYN.js} +1 -1
  38. package/dist/{health-CPYlV7Zg.js → health-vuMM-FAs.js} +1 -1
  39. package/dist/{hooks-cli-PKy2h3eb.js → hooks-cli-B8kuyvML.js} +2 -2
  40. package/dist/{hooks-cli-CL266d2E.js → hooks-cli-tLOOQscu.js} +2 -2
  41. package/dist/{image-DcpMiprB.js → image-CHzdaNJ4.js} +1 -1
  42. package/dist/index.js +6 -6
  43. package/dist/llm-slug-generator.js +1 -1
  44. package/dist/{models-BsS_l1gY.js → models-CBtd5YaQ.js} +2 -2
  45. package/dist/{models-cli-CmR7k-2e.js → models-cli-B8Fq0Of1.js} +2 -2
  46. package/dist/{models-cli-CvxkLybz.js → models-cli-CIp8mElS.js} +3 -3
  47. package/dist/{onboard-D2GpwLzg.js → onboard-CjSHwvTP.js} +2 -2
  48. package/dist/{onboard-Bgo_BcMo.js → onboard-DBCSZwxu.js} +2 -2
  49. package/dist/{onboard-channels-3WFDi7Ts.js → onboard-channels-BgMpB9vX.js} +1 -1
  50. package/dist/{onboard-channels-BNTeFCna.js → onboard-channels-eCCJophA.js} +1 -1
  51. package/dist/{onboarding-BUumoJYB.js → onboarding-3iCiOVeb.js} +3 -3
  52. package/dist/{onboarding-CbkyewZp.js → onboarding-ztTrPGQa.js} +3 -3
  53. package/dist/{onboarding.finalize-B2_mgA4K.js → onboarding.finalize-DsOBEKtX.js} +6 -6
  54. package/dist/{onboarding.finalize-sESCY9Iq.js → onboarding.finalize-bcSfd4yw.js} +5 -5
  55. package/dist/{pi-embedded-BIIdwXKr.js → pi-embedded-Ch-LcMWg.js} +108 -32
  56. package/dist/{pi-embedded-BOF7XlCO.js → pi-embedded-CpI5F8DC.js} +122 -46
  57. package/dist/{pi-embedded-helpers-B8kqLWns.js → pi-embedded-helpers-lgx_U5KS.js} +4 -4
  58. package/dist/{plugin-registry-IXa-nyg0.js → plugin-registry-BfqJjw6d.js} +1 -1
  59. package/dist/{plugin-registry-BDfC2z-e.js → plugin-registry-CL--iTFl.js} +1 -1
  60. package/dist/plugin-sdk/{accounts-BtaOa4z_.js → accounts-BToL3HlP.js} +1 -1
  61. package/dist/plugin-sdk/{accounts-Ddm33hQm.js → accounts-D9zGZU5t.js} +3 -3
  62. package/dist/plugin-sdk/{accounts-s-AdhXVR.js → accounts-Dtszw3Zn.js} +1 -1
  63. package/dist/plugin-sdk/{active-listener-BXYeALs0.js → active-listener-bEk__wbB.js} +1 -1
  64. package/dist/plugin-sdk/{agent-scope-CYYpcO9W.js → agent-scope-C3gMMKCU.js} +2 -2
  65. package/dist/plugin-sdk/agents/session-version.d.ts +48 -0
  66. package/dist/plugin-sdk/{api-key-rotation-D_sMvI5W.js → api-key-rotation-CVBMpnPc.js} +1 -1
  67. package/dist/plugin-sdk/{audio-preflight-VpItkiy3.js → audio-preflight-DoQQKlxa.js} +24 -24
  68. package/dist/plugin-sdk/{bindings-C7hRtgYW.js → bindings-BbwoUGPx.js} +2 -2
  69. package/dist/plugin-sdk/{channel-activity-DoC1xtDu.js → channel-activity-Ji7f0gqq.js} +1 -1
  70. package/dist/plugin-sdk/{channel-web-HznAZS1r.js → channel-web-mO5qO05p.js} +22 -22
  71. package/dist/plugin-sdk/{chrome-B7RdxmJ0.js → chrome-C7c_0I5M.js} +3 -3
  72. package/dist/plugin-sdk/{chunk-Dw2XBYXv.js → chunk-jvk9axTQ.js} +1 -1
  73. package/dist/plugin-sdk/{command-format-GKSevep4.js → command-format-DSdvQ_M5.js} +1 -1
  74. package/dist/plugin-sdk/{commands-registry-COIaslGl.js → commands-registry-CQFbmUMs.js} +4 -4
  75. package/dist/plugin-sdk/{config-KlTNfkFF.js → config-DDkdiUOR.js} +9 -9
  76. package/dist/plugin-sdk/{deliver-BZ99UKQq.js → deliver-BZ6iNLl7.js} +10 -10
  77. package/dist/plugin-sdk/{diagnostic-05pm5Rxi.js → diagnostic-mFf4i4G9.js} +1 -1
  78. package/dist/plugin-sdk/{image-CLOPx7yW.js → image-BOYy0Ump.js} +4 -4
  79. package/dist/plugin-sdk/{image-ops-BlQR__MN.js → image-ops-Bnp6LXEx.js} +1 -1
  80. package/dist/plugin-sdk/index.js +53 -53
  81. package/dist/plugin-sdk/{ir-BJ6BHE5b.js → ir-Fb3qpcis.js} +4 -4
  82. package/dist/plugin-sdk/{local-roots-BHLNSI8U.js → local-roots-Ckk1QfzI.js} +3 -3
  83. package/dist/plugin-sdk/{login-DQMXuxOk.js → login-Bh3DZPam.js} +7 -7
  84. package/dist/plugin-sdk/{login-qr-BjVZSoCi.js → login-qr-DbR7odSr.js} +9 -9
  85. package/dist/plugin-sdk/{manager-CBSBFuFz.js → manager-DckktAQ3.js} +8 -8
  86. package/dist/plugin-sdk/{manifest-registry-CPnHl_K3.js → manifest-registry-B3ugY9-f.js} +1 -1
  87. package/dist/plugin-sdk/{markdown-tables-BoYFajMu.js → markdown-tables-Dfaqilz6.js} +1 -1
  88. package/dist/plugin-sdk/{message-channel-COTAJzHd.js → message-channel-BdI5Ra9S.js} +1 -1
  89. package/dist/plugin-sdk/{model-selection-CsbEfrS0.js → model-selection-OpU8HN50.js} +4 -4
  90. package/dist/plugin-sdk/{outbound-attachment-CnslKL38.js → outbound-attachment-DnVQfTG2.js} +2 -2
  91. package/dist/plugin-sdk/{outbound-B0e8KdaR.js → outbound-rF6G8Xpr.js} +7 -7
  92. package/dist/plugin-sdk/{pi-auth-json-qWi7ZIYV.js → pi-auth-json-CJk8t14T.js} +5 -5
  93. package/dist/plugin-sdk/{pi-embedded-helpers-CW630epe.js → pi-embedded-helpers-BveUP4hk.js} +17 -17
  94. package/dist/plugin-sdk/{plugins-BNByVCIH.js → plugins-BbAvhC25.js} +4 -4
  95. package/dist/plugin-sdk/{pw-ai-CnbPIPY9.js → pw-ai-DjGUsee-.js} +8 -8
  96. package/dist/plugin-sdk/{qmd-manager-CH0XbIHf.js → qmd-manager-mjKcdwVr.js} +4 -4
  97. package/dist/plugin-sdk/{registry-D0xTnUWt.js → registry--_pGht6S.js} +2 -2
  98. package/dist/plugin-sdk/{replies-LLcQL3w6.js → replies-fI39rPGa.js} +3 -3
  99. package/dist/plugin-sdk/{reply-DpnW-aMb.js → reply-B4uPw1l4.js} +184 -108
  100. package/dist/plugin-sdk/{reply-prefix-uxfMZW4p.js → reply-prefix-BHuV5t70.js} +1 -1
  101. package/dist/plugin-sdk/{resolve-outbound-target-BiyAyTWz.js → resolve-outbound-target-BkCUbYGV.js} +2 -2
  102. package/dist/plugin-sdk/{resolve-route-B3CCBumQ.js → resolve-route-D3JH_D2N.js} +3 -3
  103. package/dist/plugin-sdk/{retry-CwQ_iIj8.js → retry-ilSJqnz9.js} +1 -1
  104. package/dist/plugin-sdk/{runner-CGBT7tgF.js → runner-BVqnEfNe.js} +9 -9
  105. package/dist/plugin-sdk/{send-C5h_YxNb.js → send-BHbXh8Ly.js} +7 -7
  106. package/dist/plugin-sdk/{send-pYqe432l.js → send-BMfJIhCk.js} +6 -6
  107. package/dist/plugin-sdk/{send-B2CEnVLL.js → send-BtANzsAo.js} +6 -6
  108. package/dist/plugin-sdk/{send-CjOBB3Vo.js → send-Bxdu6ZZy.js} +10 -10
  109. package/dist/plugin-sdk/{send-CRsR8-vO.js → send-D6LMZJ_h.js} +10 -10
  110. package/dist/plugin-sdk/{session-BsOrxiMj.js → session-kI0tzViQ.js} +4 -4
  111. package/dist/plugin-sdk/{skill-commands-ff_01_r3.js → skill-commands-DCNXVERE.js} +5 -5
  112. package/dist/plugin-sdk/{skills-_yTP47Cd.js → skills-B1GeRYlu.js} +7 -7
  113. package/dist/plugin-sdk/{sqlite-CxAR5ttJ.js → sqlite-Cq_7Cg4E.js} +1 -1
  114. package/dist/plugin-sdk/{store-BdrNabcU.js → store-Do3t33-c.js} +2 -2
  115. package/dist/plugin-sdk/{subsystem-B2uDN3TV.js → subsystem-Coz2AgU8.js} +1 -1
  116. package/dist/plugin-sdk/{tables-DNwXwNFa.js → tables-DR0NmBeH.js} +1 -1
  117. package/dist/plugin-sdk/{target-errors-Paro1BjP.js → target-errors-B7YyMnIi.js} +2 -2
  118. package/dist/plugin-sdk/{thinking-CXqf7WTe.js → thinking-DCNUIAHY.js} +5 -5
  119. package/dist/plugin-sdk/{tokens-bC3UVmVH.js → tokens-CWMflosr.js} +1 -1
  120. package/dist/plugin-sdk/{tool-images-HJ2sfZDV.js → tool-images-D7Lno-TE.js} +2 -2
  121. package/dist/plugin-sdk/{tool-loop-detection-BVA6fax-.js → tool-loop-detection-edmW8ZiF.js} +2 -2
  122. package/dist/plugin-sdk/web-BkEJ_MjB.js +65 -0
  123. package/dist/plugin-sdk/{whatsapp-actions-DfseosPO.js → whatsapp-actions-CcBzDuL-.js} +21 -21
  124. package/dist/{plugins-cli-DsYvb9az.js → plugins-cli-DVLIR6IN.js} +2 -2
  125. package/dist/{plugins-cli-DAxj0T7n.js → plugins-cli-MaXVJ6uV.js} +2 -2
  126. package/dist/{program-context-C-1s9IMf.js → program-context-C0vN6LYk.js} +17 -17
  127. package/dist/{program-C_UFd0ph.js → program-v4cRnLjP.js} +7 -7
  128. package/dist/{prompt-select-styled-uEjL8GAK.js → prompt-select-styled-CEmtUvNV.js} +4 -4
  129. package/dist/{prompt-select-styled-CYRG7OzR.js → prompt-select-styled-D48W5rxp.js} +4 -4
  130. package/dist/{provider-auth-helpers-CJUiVhCt.js → provider-auth-helpers-C4-EqP9W.js} +1 -1
  131. package/dist/{provider-auth-helpers-CpOR6tLS.js → provider-auth-helpers-CPbCxhvj.js} +1 -1
  132. package/dist/{push-apns-Ciljlk7J.js → push-apns-DpdcOumU.js} +1 -1
  133. package/dist/{push-apns-21LKYvkS.js → push-apns-glbAu-g9.js} +1 -1
  134. package/dist/{pw-ai-1htA-NnS.js → pw-ai-De-KR9_s.js} +1 -1
  135. package/dist/{register.agent-stsk6Gip.js → register.agent-2jRwf1Rt.js} +5 -5
  136. package/dist/{register.agent-BSv7WO-U.js → register.agent-DrocnT2d.js} +6 -6
  137. package/dist/{register.configure-DNQTd6SJ.js → register.configure-DULdexW6.js} +6 -6
  138. package/dist/{register.configure-C8oDtnaI.js → register.configure-yy5Qb8fJ.js} +6 -6
  139. package/dist/{register.maintenance-dTI3y4Eh.js → register.maintenance-CI3D-c8a.js} +8 -8
  140. package/dist/{register.maintenance-B3f3jkUo.js → register.maintenance-v_G9yCLf.js} +7 -7
  141. package/dist/{register.message-K9BDeFyy.js → register.message-DkwXioit.js} +2 -2
  142. package/dist/{register.message-Cbb4nH_0.js → register.message-UoA7D74J.js} +2 -2
  143. package/dist/{register.onboard-BBfmwa3j.js → register.onboard-D3qTCyiW.js} +4 -4
  144. package/dist/{register.onboard-Djz7Di9K.js → register.onboard-DFe3IAjB.js} +4 -4
  145. package/dist/{register.setup-Dmu1jt3n.js → register.setup-DO3vwGHY.js} +4 -4
  146. package/dist/{register.setup-B6hkCLH0.js → register.setup-DXT4OS3N.js} +4 -4
  147. package/dist/{register.status-health-sessions-DaSrMm3l.js → register.status-health-sessions-C5IRI7-t.js} +3 -3
  148. package/dist/{register.status-health-sessions-CvwhBkbb.js → register.status-health-sessions-DGLfWuS4.js} +3 -3
  149. package/dist/{register.subclis-Dv1WM9Kj.js → register.subclis-PQ2Ulz3J.js} +9 -9
  150. package/dist/{reply-BvVsPU7v.js → reply-kuehpmXb.js} +109 -33
  151. package/dist/{run-main-55CDVAv6.js → run-main-BHKGY1KH.js} +14 -14
  152. package/dist/{runner-BcQ0sF9T.js → runner-DUBExAb5.js} +1 -1
  153. package/dist/{server-methods-Bf8SpXoW.js → server-methods-BHjqwsiI.js} +7 -7
  154. package/dist/{server-methods-CDDLS3ke.js → server-methods-rmWST_iV.js} +7 -7
  155. package/dist/{server-node-events-B9iZK3qE.js → server-node-events-KVX4S5Md.js} +2 -2
  156. package/dist/{server-node-events-Dx0L419d.js → server-node-events-za7_iA-n.js} +2 -2
  157. package/dist/{status-C-vthqzQ.js → status-BJITmlhZ.js} +2 -2
  158. package/dist/{status-DEymUALi.js → status-Bow6kS56.js} +2 -2
  159. package/dist/{status-5XgxbiNb.js → status-CRuOmtVo.js} +1 -1
  160. package/dist/{status-C-kU0UFm.js → status-DJhmJYSu.js} +1 -1
  161. package/dist/{subagent-registry-CZah-77E.js → subagent-registry-BxM7J5m6.js} +109 -33
  162. package/dist/{update-cli-BSk-OFnI.js → update-cli-BfGdSZRk.js} +8 -8
  163. package/dist/{update-cli-B21iNb0v.js → update-cli-Dqh498qQ.js} +7 -7
  164. package/dist/{update-runner-DPwXk0QQ.js → update-runner-C0iELmzo.js} +1 -1
  165. package/dist/{update-runner-B5bKK21U.js → update-runner-YRJPtj9J.js} +1 -1
  166. package/dist/{web-mkZpWfVs.js → web-9AS0DiSZ.js} +1 -1
  167. package/dist/{web-CB23XCVF.js → web-CVAyVZBT.js} +2 -2
  168. package/dist/{web-DSgWG_2m.js → web-CubghJNN.js} +1 -1
  169. package/dist/{web-DVvZ_mDC.js → web-DFqKskm8.js} +6 -6
  170. package/package.json +1 -1
  171. package/dist/plugin-sdk/web-CGNEXRkp.js +0 -65
@@ -225,7 +225,7 @@ async function runOnboardingWizard(opts, runtime = defaultRuntime, prompter) {
225
225
  const { ensureAuthProfileStore } = await import("./model-selection-CyFvYcRt.js").then((n) => n.dt);
226
226
  const { promptAuthChoiceGrouped } = await import("./auth-choice-prompt-BLzEBA1v.js").then((n) => n.t);
227
227
  const { promptCustomApiConfig } = await import("./onboard-custom-C7O-zfQ1.js").then((n) => n.r);
228
- const { applyAuthChoice, resolvePreferredProviderForAuthChoice, warnIfModelConfigLooksOff } = await import("./auth-choice-CTeG2A5P.js").then((n) => n.t);
228
+ const { applyAuthChoice, resolvePreferredProviderForAuthChoice, warnIfModelConfigLooksOff } = await import("./auth-choice-BJPRC23V.js").then((n) => n.t);
229
229
  const { applyPrimaryModel, promptDefaultModel } = await import("./model-picker-Ddo3jHe-.js").then((n) => n.i);
230
230
  const authStore = ensureAuthProfileStore(void 0, { allowKeychainPrompt: false });
231
231
  const authChoiceFromPrompt = opts.authChoice === void 0;
@@ -278,7 +278,7 @@ async function runOnboardingWizard(opts, runtime = defaultRuntime, prompter) {
278
278
  if (opts.skipChannels ?? opts.skipProviders) await prompter.note("Skipping channel setup.", "Channels");
279
279
  else {
280
280
  const { listChannelPlugins } = await import("./plugins-DKDeQZF0.js").then((n) => n.i);
281
- const { setupChannels } = await import("./onboard-channels-3WFDi7Ts.js").then((n) => n.n);
281
+ const { setupChannels } = await import("./onboard-channels-BgMpB9vX.js").then((n) => n.n);
282
282
  const quickstartAllowFromChannels = flow === "quickstart" ? listChannelPlugins().filter((plugin) => plugin.meta.quickstartAllowFrom).map((plugin) => plugin.id) : [];
283
283
  nextConfig = await setupChannels(nextConfig, runtime, prompter, {
284
284
  allowSignalInstall: true,
@@ -304,7 +304,7 @@ async function runOnboardingWizard(opts, runtime = defaultRuntime, prompter) {
304
304
  mode
305
305
  });
306
306
  await writeConfigFile(nextConfig);
307
- const { finalizeOnboardingWizard } = await import("./onboarding.finalize-sESCY9Iq.js");
307
+ const { finalizeOnboardingWizard } = await import("./onboarding.finalize-bcSfd4yw.js");
308
308
  const { launchedTui } = await finalizeOnboardingWizard({
309
309
  flow,
310
310
  opts,
@@ -14,7 +14,7 @@ import "./client-DMBZpU6X.js";
14
14
  import "./call-BcE47FtD.js";
15
15
  import "./message-channel-C9dERklz.js";
16
16
  import "./pairing-token-Byh6drgn.js";
17
- import "./subagent-registry-CZah-77E.js";
17
+ import "./subagent-registry-BxM7J5m6.js";
18
18
  import "./sessions-CJXnZVjR.js";
19
19
  import "./tokens-Csntmwwn.js";
20
20
  import "./plugins-CwSlLxM8.js";
@@ -99,18 +99,18 @@ import "./prompt-style-DwCXob2h.js";
99
99
  import "./pairing-labels-D1HDboV2.js";
100
100
  import "./pi-tools.policy-De00gPXt.js";
101
101
  import "./note-DDecZomM.js";
102
- import "./register.subclis-Dv1WM9Kj.js";
103
- import "./command-registry-X_FmrHib.js";
102
+ import "./register.subclis-PQ2Ulz3J.js";
103
+ import "./command-registry-D7MjQKMD.js";
104
104
  import "./program-context-CqzR_m-7.js";
105
- import { r as installCompletion } from "./completion-cli-Dhj0jCR_.js";
105
+ import { r as installCompletion } from "./completion-cli-Bcv09Yuh.js";
106
106
  import { a as gatewayInstallErrorHint, i as buildGatewayInstallPlan, n as GATEWAY_DAEMON_RUNTIME_OPTIONS, t as DEFAULT_GATEWAY_DAEMON_RUNTIME } from "./daemon-runtime-CfRwa6qh.js";
107
107
  import "./runtime-guard-D7waq_Ho.js";
108
108
  import { r as isSystemdUserServiceAvailable } from "./systemd-DlMdyFDY.js";
109
109
  import { t as resolveGatewayService } from "./service-Cm9j9WzQ.js";
110
- import { r as healthCommand } from "./health-CPYlV7Zg.js";
110
+ import { r as healthCommand } from "./health-vuMM-FAs.js";
111
111
  import { t as ensureControlUiAssetsBuilt } from "./control-ui-assets-BseSWee1.js";
112
112
  import { t as formatHealthCheckFailure } from "./health-format-CzgUHmmX.js";
113
- import { r as ensureCompletionCacheExists, t as checkShellCompletionStatus } from "./doctor-completion-wGoyzRH8.js";
113
+ import { r as ensureCompletionCacheExists, t as checkShellCompletionStatus } from "./doctor-completion-bTUb2Em4.js";
114
114
  import { t as runTui } from "./tui-BJB80muc.js";
115
115
  import os from "node:os";
116
116
  import path from "node:path";
@@ -1,7 +1,7 @@
1
1
  import "./paths-Cqn-zk3M.js";
2
2
  import { h as pathExists, y as resolveUserPath } from "./utils-B-0b9bGM.js";
3
3
  import "./thinking-EAliFiVK.js";
4
- import "./reply-BvVsPU7v.js";
4
+ import "./reply-kuehpmXb.js";
5
5
  import "./registry-Cja8eT7G.js";
6
6
  import { p as restoreTerminalState } from "./subsystem-D9vIQve0.js";
7
7
  import "./exec-CWkblSrI.js";
@@ -103,16 +103,16 @@ import "./control-service-Bz7rxLWq.js";
103
103
  import "./stagger-BUClb97_.js";
104
104
  import "./channel-selection-DuWs0Aak.js";
105
105
  import "./runtime-guard-B37eizu-.js";
106
- import "./program-context-C-1s9IMf.js";
106
+ import "./program-context-C0vN6LYk.js";
107
107
  import "./note-DeHoW7xO.js";
108
- import { r as installCompletion } from "./completion-cli-D1aObtjM.js";
108
+ import { r as installCompletion } from "./completion-cli-BLYlpN4p.js";
109
109
  import { a as gatewayInstallErrorHint, i as buildGatewayInstallPlan, n as GATEWAY_DAEMON_RUNTIME_OPTIONS, t as DEFAULT_GATEWAY_DAEMON_RUNTIME } from "./daemon-runtime-2mwX-jqj.js";
110
110
  import { r as isSystemdUserServiceAvailable } from "./systemd-riq8uNJQ.js";
111
111
  import { t as resolveGatewayService } from "./service-Cl74hx8J.js";
112
- import { r as healthCommand } from "./health-1KsVR3eN.js";
112
+ import { r as healthCommand } from "./health-CM3gPoYN.js";
113
113
  import { t as ensureControlUiAssetsBuilt } from "./control-ui-assets-Z947tKLt.js";
114
114
  import { t as formatHealthCheckFailure } from "./health-format-DSwnXZPU.js";
115
- import { r as ensureCompletionCacheExists, t as checkShellCompletionStatus } from "./doctor-completion-vhqAoURB.js";
115
+ import { r as ensureCompletionCacheExists, t as checkShellCompletionStatus } from "./doctor-completion-DVs_xVw4.js";
116
116
  import { t as runTui } from "./tui-CriznorL.js";
117
117
  import os from "node:os";
118
118
  import path from "node:path";
@@ -55582,6 +55582,109 @@ function guardSessionManager(sessionManager, opts) {
55582
55582
  return sessionManager;
55583
55583
  }
55584
55584
 
55585
+ //#endregion
55586
+ //#region src/agents/session-version.ts
55587
+ /**
55588
+ * Session Versioning — version-based session migration.
55589
+ *
55590
+ * Each session gets a `symiVersion` field in its JSONL header.
55591
+ * On session load, if the session was created by a known-poison version
55592
+ * (2.3.0-2.3.4), it's archived and a fresh session starts.
55593
+ *
55594
+ * Sessions without `symiVersion` predate 2.3.0 and were created with Claude,
55595
+ * which does not produce corrupted tool args or looping output. Do NOT
55596
+ * archive unversioned sessions — they are safe. Only sessions with an
55597
+ * explicit symiVersion in the known-poison range are archived.
55598
+ *
55599
+ * @module
55600
+ */
55601
+ /** Versions that produced corrupted sessions (tool arg garbage, looping). */
55602
+ const POISON_VERSION_MIN = [
55603
+ 2,
55604
+ 3,
55605
+ 0
55606
+ ];
55607
+ const POISON_VERSION_MAX = [
55608
+ 2,
55609
+ 3,
55610
+ 4
55611
+ ];
55612
+ function parseVersion(v) {
55613
+ return v.split(".").map((s) => parseInt(s, 10)).filter((n) => !Number.isNaN(n));
55614
+ }
55615
+ function compareVersions(a, b) {
55616
+ for (let i = 0; i < Math.max(a.length, b.length); i++) {
55617
+ const av = a[i] ?? 0;
55618
+ const bv = b[i] ?? 0;
55619
+ if (av < bv) return -1;
55620
+ if (av > bv) return 1;
55621
+ }
55622
+ return 0;
55623
+ }
55624
+ function isInPoisonRange(version) {
55625
+ const v = parseVersion(version);
55626
+ if (v.length < 3) return false;
55627
+ return compareVersions(v, POISON_VERSION_MIN) >= 0 && compareVersions(v, POISON_VERSION_MAX) <= 0;
55628
+ }
55629
+ /**
55630
+ * Check if a session file was created by a poisoned Symi version.
55631
+ * Returns the symiVersion if poisoned, null if safe.
55632
+ */
55633
+ async function checkSessionPoison(sessionFile) {
55634
+ try {
55635
+ const firstLine = (await fs.readFile(sessionFile, "utf-8")).split("\n")[0];
55636
+ if (!firstLine) return null;
55637
+ const header = JSON.parse(firstLine);
55638
+ if (header.type !== "session") return null;
55639
+ const symiVersion = header.symiVersion;
55640
+ if (typeof symiVersion !== "string") return null;
55641
+ if (isInPoisonRange(symiVersion)) return symiVersion;
55642
+ return null;
55643
+ } catch {
55644
+ return null;
55645
+ }
55646
+ }
55647
+ /**
55648
+ * Archive a poisoned session file by renaming it.
55649
+ * The archived file can be inspected later but won't be loaded.
55650
+ */
55651
+ async function archivePoisonedSession(sessionFile) {
55652
+ const archiveName = `${sessionFile}.archived-poison.${(/* @__PURE__ */ new Date()).toISOString().replace(/[:.]/g, "-")}`;
55653
+ await fs.rename(sessionFile, archiveName);
55654
+ return archiveName;
55655
+ }
55656
+ /**
55657
+ * Stamp the current Symi version into a session file's header.
55658
+ * Reads the first line, adds/updates symiVersion, rewrites the line.
55659
+ */
55660
+ async function stampSessionVersion(sessionFile) {
55661
+ try {
55662
+ const lines = (await fs.readFile(sessionFile, "utf-8")).split("\n");
55663
+ if (lines.length === 0) return;
55664
+ const header = JSON.parse(lines[0]);
55665
+ if (header.type !== "session") return;
55666
+ if (header.symiVersion === VERSION) return;
55667
+ header.symiVersion = VERSION;
55668
+ lines[0] = JSON.stringify(header);
55669
+ await fs.writeFile(sessionFile, lines.join("\n"), "utf-8");
55670
+ } catch {}
55671
+ }
55672
+ /**
55673
+ * Check and handle a session file before use.
55674
+ * If poisoned: archive it and return { archived: true }.
55675
+ * Otherwise: stamp the current version and return { archived: false }.
55676
+ */
55677
+ async function handleSessionVersion(sessionFile) {
55678
+ const poison = await checkSessionPoison(sessionFile);
55679
+ if (poison) return {
55680
+ archived: true,
55681
+ archivePath: await archivePoisonedSession(sessionFile),
55682
+ poisonVersion: poison
55683
+ };
55684
+ await stampSessionVersion(sessionFile);
55685
+ return { archived: false };
55686
+ }
55687
+
55585
55688
  //#endregion
55586
55689
  //#region src/agents/stream-monitor.ts
55587
55690
  /**
@@ -58530,6 +58633,8 @@ async function runEmbeddedAttempt(params) {
58530
58633
  provider: params.provider,
58531
58634
  modelId: params.modelId
58532
58635
  });
58636
+ const versionCheck = await handleSessionVersion(params.sessionFile);
58637
+ if (versionCheck.archived) log$4.warn(`session archived: created by ${versionCheck.poisonVersion}, known corruption range → ${versionCheck.archivePath}`);
58533
58638
  await prewarmSessionFile(params.sessionFile);
58534
58639
  sessionManager = guardSessionManager(SessionManager.open(params.sessionFile), {
58535
58640
  agentId: sessionAgentId,
@@ -60201,7 +60306,7 @@ async function runAgentTurn(params) {
60201
60306
  function createDefaultDeps() {
60202
60307
  return {
60203
60308
  sendMessageWhatsApp: async (...args) => {
60204
- const { sendMessageWhatsApp } = await import("./web-DSgWG_2m.js");
60309
+ const { sendMessageWhatsApp } = await import("./web-CubghJNN.js");
60205
60310
  return await sendMessageWhatsApp(...args);
60206
60311
  },
60207
60312
  sendMessageTelegram: async (...args) => {
@@ -75481,7 +75586,7 @@ function loadWebLoginQr() {
75481
75586
  return webLoginQrPromise;
75482
75587
  }
75483
75588
  function loadWebChannel() {
75484
- webChannelPromise ??= import("./web-DSgWG_2m.js");
75589
+ webChannelPromise ??= import("./web-CubghJNN.js");
75485
75590
  return webChannelPromise;
75486
75591
  }
75487
75592
  function loadWhatsAppActions() {
@@ -77502,31 +77607,6 @@ function resolveToolLoopDetectionConfig(params) {
77502
77607
  }
77503
77608
  };
77504
77609
  }
77505
- /**
77506
- * Wrap a tool to strip model-specific control tokens from string arguments
77507
- * before execution. Gemma 4 via vLLM sometimes injects tokens like `<|`
77508
- * into tool call arguments (e.g. `exec("<|node -v")`). This wrapper
77509
- * sanitizes all string values in the argument object.
77510
- */
77511
- function wrapToolWithArgSanitization(tool, modelId) {
77512
- const execute = tool.execute;
77513
- if (!execute) return tool;
77514
- return {
77515
- ...tool,
77516
- execute: async (toolCallId, params, signal, onUpdate) => {
77517
- return execute(toolCallId, sanitizeToolArgs(params, modelId), signal, onUpdate);
77518
- }
77519
- };
77520
- }
77521
- function sanitizeToolArgs(params, modelId) {
77522
- if (!params || typeof params !== "object") return typeof params === "string" ? stripModelTokensAggressive(params, modelId) : params;
77523
- if (Array.isArray(params)) return params.map((item) => sanitizeToolArgs(item, modelId));
77524
- const result = {};
77525
- for (const [key, value] of Object.entries(params)) if (typeof value === "string") result[key] = stripModelTokensAggressive(value, modelId);
77526
- else if (value && typeof value === "object") result[key] = sanitizeToolArgs(value, modelId);
77527
- else result[key] = value;
77528
- return result;
77529
- }
77530
77610
  function createSymiCodingTools(options) {
77531
77611
  const execToolName = "exec";
77532
77612
  const sandbox = options?.sandbox?.enabled ? options.sandbox : void 0;
@@ -77750,11 +77830,7 @@ function createSymiCodingTools(options) {
77750
77830
  agentId
77751
77831
  })
77752
77832
  }));
77753
- const withAbort = options?.abortSignal ? withHooks.map((tool) => wrapToolWithAbortSignal(tool, options.abortSignal)) : withHooks;
77754
- const modelId = options?.modelId ?? "";
77755
- const modelProvider = options?.modelProvider ?? "";
77756
- const fullModelId = modelProvider ? `${modelProvider}/${modelId}` : modelId;
77757
- return fullModelId ? withAbort.map((tool) => wrapToolWithArgSanitization(tool, fullModelId)) : withAbort;
77833
+ return options?.abortSignal ? withHooks.map((tool) => wrapToolWithAbortSignal(tool, options.abortSignal)) : withHooks;
77758
77834
  }
77759
77835
 
77760
77836
  //#endregion
@@ -14,7 +14,7 @@ import { a as logoutWeb, i as logWebSelfId, l as readWebSelfId, p as webAuthExis
14
14
  import { t as normalizeChatType } from "./chat-type-DFDuk3FY.js";
15
15
  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-D-hWrHoH.js";
16
16
  import { $ as fetchChannelPermissionsDiscord, A as unpinMessageDiscord, B as listScheduledEventsDiscord, C as editMessageDiscord, Ct as resolveTimestampMs, 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 resolveDiscordSystemLocation, 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 resolveDiscordShouldRequireMention, a as removeReactionDiscord, at as resolveDiscordChannelId, b as sendWebhookMessageDiscord, bt as formatDiscordReactionEmoji, c as formatDiscordComponentEventText, ct as allowListMatches$1, d as parseDiscordModalCustomId, dt as normalizeDiscordSlug, et as hasAnyGuildPermissionDiscord, f as parseDiscordModalCustomIdForCarbon, ft as resolveDiscordAllowListMatch, g as sendMessageDiscord, gt as resolveDiscordOwnerAllowFrom, h as resolveDiscordModalEntry, ht as resolveDiscordMemberAccessState, i as removeOwnReactionsDiscord, it as parseDiscordTarget, j as addRoleDiscord, k as searchMessagesDiscord, l as parseDiscordComponentCustomId, lt as isDiscordGroupAllowedByPolicy, m as resolveDiscordComponentEntry, mt as resolveDiscordGuildEntry, n as fetchReactionsDiscord, nt as createDiscordClient, o as sendDiscordComponentMessage, ot as listDiscordDirectoryGroupsLive, p as readDiscordComponentSpec, pt as resolveDiscordChannelConfigWithFallback, q as deleteChannelDiscord, r as reactMessageDiscord, rt as createDiscordRestClient, s as createDiscordFormModal, st as listDiscordDirectoryPeersLive, tt as chunkDiscordTextWithMode, u as parseDiscordComponentCustomIdForCarbon, ut as normalizeDiscordAllowList, v as sendStickerDiscord, vt as resolveGroupDmAllow, w as fetchMessageDiscord, wt as fetchDiscord, x as createThreadDiscord, xt as formatDiscordUserTag, y as sendVoiceMessageDiscord, yt as shouldEmitDiscordReactionNotification, z as listGuildChannelsDiscord } from "./send-C1IYd3g7.js";
17
- import { C as getGlobalHookRunner, S as parseInlineDirectives$1, _ as normalizeTargetForProvider, a as normalizeOutboundPayloadsForJson, b as MEDIA_TOKEN_RE, 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 throwIfAborted, w as initializeGlobalHookRunner, x as splitMediaFromOutput, y as parseReplyDirectives } from "./deliver-C-37cZUe.js";
17
+ import { C as getGlobalHookRunner, S as parseInlineDirectives$1, _ as normalizeTargetForProvider, a as normalizeOutboundPayloadsForJson, b as MEDIA_TOKEN_RE, 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 throwIfAborted, w as initializeGlobalHookRunner, x as splitMediaFromOutput, y as parseReplyDirectives } from "./deliver-BH0l3UKW.js";
18
18
  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-D0xmLpej.js";
19
19
  import { r as getDiagnosticSessionState } from "./diagnostic-session-state-C1vRJs5w.js";
20
20
  import { n as resolveSignalAccount, t as listEnabledSignalAccounts } from "./accounts-8zZqL37v.js";
@@ -22,10 +22,10 @@ import { $ as isVoiceCompatibleAudio, A as extractTelegramLocation, B as normali
22
22
  import { d as detectMime, f as extensionForMime, g as isGifMedia, h as isAudioFileName, i as getImageMetadata, m as imageMimeFromFormat, s as resizeToJpeg, x as mediaKindFromMime, y as MAX_IMAGE_BYTES } from "./image-ops-ByaQt43P.js";
23
23
  import { n as discoverModels, t as discoverAuthStorage } from "./pi-model-discovery-j5tVLINv.js";
24
24
  import { a as isMarkdownCapableMessageChannel, c as resolveGatewayMessageChannel, d as GATEWAY_CLIENT_MODES, f as GATEWAY_CLIENT_NAMES, i as isInternalMessageChannel, l as resolveMessageChannel, n as isDeliverableMessageChannel, o as listDeliverableMessageChannels, r as isGatewayMessageChannel, s as normalizeMessageChannel, t as INTERNAL_MESSAGE_CHANNEL, u as GATEWAY_CLIENT_IDS } from "./message-channel-BQINJQIT.js";
25
- import { $ as mergeDeliveryContext, A as isTransientHttpError, At as DEFAULT_UPLOAD_DIR, Bt as expandToolGroups, C as isContextOverflowError, Ct as resolveGroupSessionKey, D as isRateLimitAssistantError, Dt as registerBrowserRoutes, E as isLikelyContextOverflowError, Et as createBrowserRouteContext, F as resolveSandboxContext, Ft as resolveSandboxConfigForAgent, Gt as compileGlobPatterns, H as loadSessionStore, Ht as normalizeToolName, I as resolveSandboxRuntimeStatus, It as applyOwnerOnlyToolPolicy, J as updateSessionStoreEntry, Jt as ensureSessionHeader, K as updateLastRoute, Kt as matchesAnyGlobPattern, L as extractDeliveryInfo, Lt as buildPluginToolGroups, M as parseImageSizeError, Mt as getBridgeAuthForPort, N as sanitizeUserFacingText, Nt as ensureBrowserControlAuth, O as isRawApiErrorPayload, Ot as resolveBrowserConfig, P as ensureSandboxWorkspaceForSession, Pt as resolveBrowserControlAuth, Q as deliveryContextKey, R as parseSessionThreadInfo, Rt as collectExplicitAllowlist, S as isCompactionFailureError, St as deriveSessionMetaPatch, T as isFailoverErrorMessage, Tt as resolveSessionLockMaxHoldFromTimeout, U as readSessionUpdatedAt, Ut as resolveToolProfilePolicy, V as resolveAndPersistSessionFile, Vt as mergeAlsoAllowPolicy, W as recordSessionMetaFromInbound, Wt as stripPluginOnlyAllowlist, X as resolveCacheTtlMs$1, Xt as resolveBootstrapTotalMaxChars, Y as isCacheEnabled, Yt as resolveBootstrapMaxChars, Z as deliveryContextFromSession, Zt as sanitizeGoogleTurnOrdering, _ as formatRawAssistantErrorForUi, _t as DEFAULT_RESET_TRIGGERS, a as isMessagingToolDuplicateNormalized, at as countToolResults, b as isBillingAssistantError, bt as resolveExplicitAgentSessionKey, c as extractToolCallsFromAssistant, ct as applyInputProvenanceToUserMessage, d as isAntigravityClaude, dt as resolveSessionKey, et as normalizeDeliveryContext, f as isGoogleModelApi, ft as evaluateSessionFreshness, g as formatBillingErrorMessage, gt as resolveThreadFlag, h as formatAssistantErrorText, ht as resolveSessionResetType, it as capArrayByJsonBytes, j as parseImageDimensionError, jt as resolveExistingPathsWithinRoot, k as isTimeoutErrorMessage, kt as resolveProfile, l as extractToolResultId, lt as hasInterSessionUserProvenance, m as classifyFailoverReason, mt as resolveSessionResetPolicy, n as validateGeminiTurns, nt as normalizeAccountId$3, o as normalizeTextForComparison, ot as extractToolCallNames, p as BILLING_ERROR_USER_MESSAGE, pt as resolveChannelResetConfig, q as updateSessionStore, qt as buildBootstrapContextFiles, r as pickFallbackThinkingLevel, rt as archiveSessionTranscripts, s as sanitizeSessionMessagesImages, st as INPUT_PROVENANCE_KIND_VALUES, t as validateAnthropicTurns, tt as normalizeSessionDeliveryFields, u as downgradeOpenAIReasoningBlocks, ut as normalizeInputProvenance, v as getApiErrorPayloadFingerprint, vt as resolveFreshSessionTotalTokens, w as isFailoverAssistantError, wt as acquireSessionWriteLock, x as isCloudCodeAssistFormatError, xt as resolveMainSessionKey, y as isAuthAssistantError, yt as canonicalizeMainSessionAlias, z as appendAssistantMessageToSessionTranscript, zt as expandPolicyWithPluginGroups } from "./pi-embedded-helpers-B8kqLWns.js";
25
+ import { $ as mergeDeliveryContext, A as isTransientHttpError, At as DEFAULT_UPLOAD_DIR, Bt as expandToolGroups, C as isContextOverflowError, Ct as resolveGroupSessionKey, D as isRateLimitAssistantError, Dt as registerBrowserRoutes, E as isLikelyContextOverflowError, Et as createBrowserRouteContext, F as resolveSandboxContext, Ft as resolveSandboxConfigForAgent, Gt as compileGlobPatterns, H as loadSessionStore, Ht as normalizeToolName, I as resolveSandboxRuntimeStatus, It as applyOwnerOnlyToolPolicy, J as updateSessionStoreEntry, Jt as ensureSessionHeader, K as updateLastRoute, Kt as matchesAnyGlobPattern, L as extractDeliveryInfo, Lt as buildPluginToolGroups, M as parseImageSizeError, Mt as getBridgeAuthForPort, N as sanitizeUserFacingText, Nt as ensureBrowserControlAuth, O as isRawApiErrorPayload, Ot as resolveBrowserConfig, P as ensureSandboxWorkspaceForSession, Pt as resolveBrowserControlAuth, Q as deliveryContextKey, R as parseSessionThreadInfo, Rt as collectExplicitAllowlist, S as isCompactionFailureError, St as deriveSessionMetaPatch, T as isFailoverErrorMessage, Tt as resolveSessionLockMaxHoldFromTimeout, U as readSessionUpdatedAt, Ut as resolveToolProfilePolicy, V as resolveAndPersistSessionFile, Vt as mergeAlsoAllowPolicy, W as recordSessionMetaFromInbound, Wt as stripPluginOnlyAllowlist, X as resolveCacheTtlMs$1, Xt as resolveBootstrapTotalMaxChars, Y as isCacheEnabled, Yt as resolveBootstrapMaxChars, Z as deliveryContextFromSession, Zt as sanitizeGoogleTurnOrdering, _ as formatRawAssistantErrorForUi, _t as DEFAULT_RESET_TRIGGERS, a as isMessagingToolDuplicateNormalized, at as countToolResults, b as isBillingAssistantError, bt as resolveExplicitAgentSessionKey, c as extractToolCallsFromAssistant, ct as applyInputProvenanceToUserMessage, d as isAntigravityClaude, dt as resolveSessionKey, et as normalizeDeliveryContext, f as isGoogleModelApi, ft as evaluateSessionFreshness, g as formatBillingErrorMessage, gt as resolveThreadFlag, h as formatAssistantErrorText, ht as resolveSessionResetType, it as capArrayByJsonBytes, j as parseImageDimensionError, jt as resolveExistingPathsWithinRoot, k as isTimeoutErrorMessage, kt as resolveProfile, l as extractToolResultId, lt as hasInterSessionUserProvenance, m as classifyFailoverReason, mt as resolveSessionResetPolicy, n as validateGeminiTurns, nt as normalizeAccountId$3, o as normalizeTextForComparison, ot as extractToolCallNames, p as BILLING_ERROR_USER_MESSAGE, pt as resolveChannelResetConfig, q as updateSessionStore, qt as buildBootstrapContextFiles, r as pickFallbackThinkingLevel, rt as archiveSessionTranscripts, s as sanitizeSessionMessagesImages, st as INPUT_PROVENANCE_KIND_VALUES, t as validateAnthropicTurns, tt as normalizeSessionDeliveryFields, u as downgradeOpenAIReasoningBlocks, ut as normalizeInputProvenance, v as getApiErrorPayloadFingerprint, vt as resolveFreshSessionTotalTokens, w as isFailoverAssistantError, wt as acquireSessionWriteLock, x as isCloudCodeAssistFormatError, xt as resolveMainSessionKey, y as isAuthAssistantError, yt as canonicalizeMainSessionAlias, z as appendAssistantMessageToSessionTranscript, zt as expandPolicyWithPluginGroups } from "./pi-embedded-helpers-lgx_U5KS.js";
26
26
  import { A as VERSION, C as getConfigValueAtPath, D as isSafeExecutableValue, E as unsetConfigValueAtPath, O as DEFAULT_SUBAGENT_MAX_SPAWN_DEPTH, S as unsetConfigOverride, T as setConfigValueAtPath, _ as parseDurationMs, a as writeConfigFile, b as resetConfigOverrides, c as TELEGRAM_COMMAND_NAME_PATTERN, f as isInboundPathAllowed, g as normalizeScpRemoteHost, h as resolveIMessageRemoteAttachmentRoots, i as resolveConfigSnapshotHash, k as resolveAgentMaxConcurrent, l as normalizeTelegramCommandName, m as resolveIMessageAttachmentRoots, n as loadConfig, o as validateConfigObjectWithPlugins, r as readConfigFileSnapshot, u as resolveTelegramCustomCommands, v as validateJsonSchemaValue, w as parseConfigPath, x as setConfigOverride, y as getConfigOverrides } from "./config-BmV60pPT.js";
27
27
  import { c as normalizePluginsConfig, f as isPathInsideWithRealpath, i as safeStatSync, l as resolveEnableState, n as discoverSymiPlugins, p as isDangerousHostEnvVarName, r as isPathInside, s as applyTestPluginDefaults, t as loadPluginManifestRegistry, u as resolveMemorySlotDecision } from "./manifest-registry-D-mTF1cj.js";
28
- import { C as rawDataToString, O as DEFAULT_AI_SNAPSHOT_MAX_CHARS, T as isSecureWebSocketUrl, x as ensureChromeExtensionRelayServer } from "./chrome-D2SKJnR7.js";
28
+ import { C as rawDataToString, O as DEFAULT_AI_SNAPSHOT_MAX_CHARS, T as isSecureWebSocketUrl, x as ensureChromeExtensionRelayServer } from "./chrome-CDJYxX5a.js";
29
29
  import { c as assertSandboxPath, d as resolveSandboxedMediaSource, f as applySkillEnvOverrides, i as resolveSkillsPromptForRun, l as resolveSandboxInputPath, n as buildWorkspaceSkillSnapshot, p as applySkillEnvOverridesFromSnapshot, r as loadWorkspaceSkillEntries, s as assertMediaNotDataUrl } from "./skills-BNpGMnp-.js";
30
30
  import { n as formatErrorMessage, r as formatUncaughtError } from "./errors-CPfngF0S.js";
31
31
  import { i as isBlockedHostnameOrIp, o as normalizeHostname, t as SsrFBlockedError } from "./ssrf-CxfFyMRZ.js";
@@ -36,7 +36,7 @@ import { t as resolveIMessageAccount } from "./accounts-DImOt9jX.js";
36
36
  import { i as resolveSessionTranscriptPath, n as resolveSessionFilePath, o as resolveSessionTranscriptsDirForAgent, r as resolveSessionFilePathOptions, s as resolveStorePath, t as resolveDefaultSessionStorePath } from "./paths-DkMamAQ-.js";
37
37
  import { t as emitSessionTranscriptUpdate } from "./transcript-events-C8Tqw4td.js";
38
38
  import { i as resolveImageSanitizationLimits, n as sanitizeImageBlocks, r as sanitizeToolResultImages } from "./tool-images-ChC2CXaN.js";
39
- import { S as ensureSymiModelsJson, _ as stripMinimaxToolCallXml, a as decodeDataUrl, b as stripReasoningTagsFromText, c as extractAssistantText$1, d as extractThinkingFromTaggedText, f as formatReasoningMessage, g as stripDowngradedToolCallText, h as promoteThinkingTagsToBlocks, i as coerceImageModelConfig, l as extractAssistantThinking, m as isAssistantMessage, o as resolveProviderVisionModelFromConfig, p as inferToolMetaFromArgs, r as coerceImageAssistantText, s as minimaxUnderstandImage, u as extractThinkingFromTaggedStream, v as stripThinkingTagsFromText, x as extractTextFromChatContent, y as resolveToolDisplay } from "./image-DcpMiprB.js";
39
+ import { S as ensureSymiModelsJson, _ as stripMinimaxToolCallXml, a as decodeDataUrl, b as stripReasoningTagsFromText, c as extractAssistantText$1, d as extractThinkingFromTaggedText, f as formatReasoningMessage, g as stripDowngradedToolCallText, h as promoteThinkingTagsToBlocks, i as coerceImageModelConfig, l as extractAssistantThinking, m as isAssistantMessage, o as resolveProviderVisionModelFromConfig, p as inferToolMetaFromArgs, r as coerceImageAssistantText, s as minimaxUnderstandImage, u as extractThinkingFromTaggedStream, v as stripThinkingTagsFromText, x as extractTextFromChatContent, y as resolveToolDisplay } from "./image-CHzdaNJ4.js";
40
40
  import { i as resolveMemorySearchConfig, n as probeOllamaEmbeddingModels, r as resolveOllamaBaseUrl } from "./manager-jpn5vRTY.js";
41
41
  import { d as listMemoryFiles, f as normalizeExtraMemoryPaths, g as runTasksWithConcurrency } from "./sqlite-BNh23mUR.js";
42
42
  import { n as retryAsync } from "./retry-QGp0jvVi.js";
@@ -49,7 +49,7 @@ import { a as loadWebMedia, i as getDefaultLocalRoots } from "./ir-F0moAwIl.js";
49
49
  import { _ as resolveNativeCommandsEnabled, a as listChatCommandsForConfig, c as normalizeCommandBody, d as resolveCommandArgMenu, f as serializeCommandArgs, g as isRestartEnabled, h as isNativeCommandsExplicitlyDisabled, i as listChatCommands, l as parseCommandArgs, m as isCommandFlagEnabled, o as listNativeCommandSpecs, p as shouldHandleTextCommands, r as findCommandByNativeName, s as listNativeCommandSpecsForConfig, t as buildCommandTextFromArgs, u as resolveCommandArgChoices, v as resolveNativeSkillsEnabled } from "./commands-registry-C_aYUwpl.js";
50
50
  import { c as getSkillsSnapshotVersion, d as createAsyncLock, f as readJsonFile, i as resolveSkillCommandInvocation, l as pruneExpiredPending, n as listSkillCommandsForAgents, o as getRemoteSkillEligibility, p as writeJsonAtomic, r as listSkillCommandsForWorkspace, s as ensureSkillsWatcher, t as listReservedChatSlashCommandNames, u as resolvePairingPaths } from "./skill-commands-DklY7Cj7.js";
51
51
  import { r as normalizeInboundTextNewlines, t as finalizeInboundContext } from "./inbound-context-QOi5vzUt.js";
52
- import { _ as resolveMediaUnderstandingScope, a as resolveMediaAttachmentLocalRoots, c as loadModelCatalog, d as resolveAttachmentKind, f as buildRandomTempFilePath, g as normalizeMediaUnderstandingChatType, h as resolveTimeoutMs$1, i as resolveAutoImageModel, l as modelSupportsVision, m as resolveConcurrency, n as createMediaAttachmentCache, o as runCapability, p as registerUnhandledRejectionHandler, r as normalizeMediaAttachments, s as findModelInCatalog, t as buildProviderRegistry, v as CLI_OUTPUT_MAX_BUFFER, y as applyTemplate } from "./runner-BcQ0sF9T.js";
52
+ import { _ as resolveMediaUnderstandingScope, a as resolveMediaAttachmentLocalRoots, c as loadModelCatalog, d as resolveAttachmentKind, f as buildRandomTempFilePath, g as normalizeMediaUnderstandingChatType, h as resolveTimeoutMs$1, i as resolveAutoImageModel, l as modelSupportsVision, m as resolveConcurrency, n as createMediaAttachmentCache, o as runCapability, p as registerUnhandledRejectionHandler, r as normalizeMediaAttachments, s as findModelInCatalog, t as buildProviderRegistry, v as CLI_OUTPUT_MAX_BUFFER, y as applyTemplate } from "./runner-DUBExAb5.js";
53
53
  import { n as wrapFetchWithAbortSignal, t as resolveFetch } from "./fetch-DtLn7YU3.js";
54
54
  import { n as recordCommandPoll, r as resetCommandPollCount } from "./command-poll-backoff-DtXYsHEc.js";
55
55
  import { n as recordChannelActivity, r as createDiscordRetryRunner, t as getChannelActivity } from "./channel-activity-D9q-fIPB.js";
@@ -79,7 +79,7 @@ import { EdgeTTS } from "node-edge-tts";
79
79
  import AjvPkg from "ajv";
80
80
  import { createServer } from "node:http";
81
81
  import { ProxyAgent, fetch as fetch$1 } from "undici";
82
- import WebSocket, { WebSocket as WebSocket$1 } from "ws";
82
+ import WebSocket$1, { WebSocket } from "ws";
83
83
  import { Buffer as Buffer$1 } from "node:buffer";
84
84
  import { createJiti } from "jiti";
85
85
  import { Type } from "@sinclair/typebox";
@@ -5714,7 +5714,7 @@ var GatewayClient = class {
5714
5714
  if (fingerprint !== expected) return /* @__PURE__ */ new Error("gateway tls fingerprint mismatch");
5715
5715
  });
5716
5716
  }
5717
- this.ws = new WebSocket$1(url, wsOptions);
5717
+ this.ws = new WebSocket(url, wsOptions);
5718
5718
  this.ws.on("open", () => {
5719
5719
  if (url.startsWith("wss://") && this.opts.tlsFingerprint) {
5720
5720
  const tlsError = this.validateTlsFingerprint();
@@ -5933,7 +5933,7 @@ var GatewayClient = class {
5933
5933
  return null;
5934
5934
  }
5935
5935
  async request(method, params, opts) {
5936
- if (!this.ws || this.ws.readyState !== WebSocket$1.OPEN) throw new Error("gateway not connected");
5936
+ if (!this.ws || this.ws.readyState !== WebSocket.OPEN) throw new Error("gateway not connected");
5937
5937
  const id = randomUUID();
5938
5938
  const frame = {
5939
5939
  type: "req",
@@ -7199,7 +7199,7 @@ async function routeReply(params) {
7199
7199
  const resolvedReplyToId = replyToId ?? (channelId === "slack" && threadId != null && threadId !== "" ? String(threadId) : void 0);
7200
7200
  const resolvedThreadId = channelId === "slack" ? null : threadId ?? null;
7201
7201
  try {
7202
- const { deliverOutboundPayloads } = await import("./deliver-C-37cZUe.js").then((n) => n.n);
7202
+ const { deliverOutboundPayloads } = await import("./deliver-BH0l3UKW.js").then((n) => n.n);
7203
7203
  return {
7204
7204
  ok: true,
7205
7205
  messageId: (await deliverOutboundPayloads({
@@ -41673,7 +41673,7 @@ async function deliverSessionMaintenanceWarning(params) {
41673
41673
  return;
41674
41674
  }
41675
41675
  try {
41676
- const { deliverOutboundPayloads } = await import("./deliver-C-37cZUe.js").then((n) => n.n);
41676
+ const { deliverOutboundPayloads } = await import("./deliver-BH0l3UKW.js").then((n) => n.n);
41677
41677
  await deliverOutboundPayloads({
41678
41678
  cfg: params.cfg,
41679
41679
  channel,
@@ -45119,7 +45119,7 @@ async function describeStickerImage(params) {
45119
45119
  logVerbose(`telegram: describing sticker with ${provider}/${model}`);
45120
45120
  try {
45121
45121
  const buffer = await fs$1.readFile(imagePath);
45122
- const { describeImageWithModel } = await import("./image-DcpMiprB.js").then((n) => n.n);
45122
+ const { describeImageWithModel } = await import("./image-CHzdaNJ4.js").then((n) => n.n);
45123
45123
  return (await describeImageWithModel({
45124
45124
  buffer,
45125
45125
  fileName: "sticker.webp",
@@ -47781,7 +47781,7 @@ async function preflightDiscordMessage(params) {
47781
47781
  let preflightTranscript;
47782
47782
  const hasAudioAttachment = message.attachments?.some((att) => att.contentType?.startsWith("audio/"));
47783
47783
  if (!isDirectMessage && shouldRequireMention && hasAudioAttachment && !baseText && mentionRegexes.length > 0) try {
47784
- const { transcribeFirstAudio } = await import("./audio-preflight-CPBOQV4I.js");
47784
+ const { transcribeFirstAudio } = await import("./audio-preflight-C40mKAp7.js");
47785
47785
  const audioPaths = message.attachments?.filter((att) => att.contentType?.startsWith("audio/")).map((att) => att.url) ?? [];
47786
47786
  if (audioPaths.length > 0) preflightTranscript = await transcribeFirstAudio({
47787
47787
  ctx: {
@@ -55580,6 +55580,109 @@ function guardSessionManager(sessionManager, opts) {
55580
55580
  return sessionManager;
55581
55581
  }
55582
55582
 
55583
+ //#endregion
55584
+ //#region src/agents/session-version.ts
55585
+ /**
55586
+ * Session Versioning — version-based session migration.
55587
+ *
55588
+ * Each session gets a `symiVersion` field in its JSONL header.
55589
+ * On session load, if the session was created by a known-poison version
55590
+ * (2.3.0-2.3.4), it's archived and a fresh session starts.
55591
+ *
55592
+ * Sessions without `symiVersion` predate 2.3.0 and were created with Claude,
55593
+ * which does not produce corrupted tool args or looping output. Do NOT
55594
+ * archive unversioned sessions — they are safe. Only sessions with an
55595
+ * explicit symiVersion in the known-poison range are archived.
55596
+ *
55597
+ * @module
55598
+ */
55599
+ /** Versions that produced corrupted sessions (tool arg garbage, looping). */
55600
+ const POISON_VERSION_MIN = [
55601
+ 2,
55602
+ 3,
55603
+ 0
55604
+ ];
55605
+ const POISON_VERSION_MAX = [
55606
+ 2,
55607
+ 3,
55608
+ 4
55609
+ ];
55610
+ function parseVersion(v) {
55611
+ return v.split(".").map((s) => parseInt(s, 10)).filter((n) => !Number.isNaN(n));
55612
+ }
55613
+ function compareVersions(a, b) {
55614
+ for (let i = 0; i < Math.max(a.length, b.length); i++) {
55615
+ const av = a[i] ?? 0;
55616
+ const bv = b[i] ?? 0;
55617
+ if (av < bv) return -1;
55618
+ if (av > bv) return 1;
55619
+ }
55620
+ return 0;
55621
+ }
55622
+ function isInPoisonRange(version) {
55623
+ const v = parseVersion(version);
55624
+ if (v.length < 3) return false;
55625
+ return compareVersions(v, POISON_VERSION_MIN) >= 0 && compareVersions(v, POISON_VERSION_MAX) <= 0;
55626
+ }
55627
+ /**
55628
+ * Check if a session file was created by a poisoned Symi version.
55629
+ * Returns the symiVersion if poisoned, null if safe.
55630
+ */
55631
+ async function checkSessionPoison(sessionFile) {
55632
+ try {
55633
+ const firstLine = (await fs$1.readFile(sessionFile, "utf-8")).split("\n")[0];
55634
+ if (!firstLine) return null;
55635
+ const header = JSON.parse(firstLine);
55636
+ if (header.type !== "session") return null;
55637
+ const symiVersion = header.symiVersion;
55638
+ if (typeof symiVersion !== "string") return null;
55639
+ if (isInPoisonRange(symiVersion)) return symiVersion;
55640
+ return null;
55641
+ } catch {
55642
+ return null;
55643
+ }
55644
+ }
55645
+ /**
55646
+ * Archive a poisoned session file by renaming it.
55647
+ * The archived file can be inspected later but won't be loaded.
55648
+ */
55649
+ async function archivePoisonedSession(sessionFile) {
55650
+ const archiveName = `${sessionFile}.archived-poison.${(/* @__PURE__ */ new Date()).toISOString().replace(/[:.]/g, "-")}`;
55651
+ await fs$1.rename(sessionFile, archiveName);
55652
+ return archiveName;
55653
+ }
55654
+ /**
55655
+ * Stamp the current Symi version into a session file's header.
55656
+ * Reads the first line, adds/updates symiVersion, rewrites the line.
55657
+ */
55658
+ async function stampSessionVersion(sessionFile) {
55659
+ try {
55660
+ const lines = (await fs$1.readFile(sessionFile, "utf-8")).split("\n");
55661
+ if (lines.length === 0) return;
55662
+ const header = JSON.parse(lines[0]);
55663
+ if (header.type !== "session") return;
55664
+ if (header.symiVersion === VERSION) return;
55665
+ header.symiVersion = VERSION;
55666
+ lines[0] = JSON.stringify(header);
55667
+ await fs$1.writeFile(sessionFile, lines.join("\n"), "utf-8");
55668
+ } catch {}
55669
+ }
55670
+ /**
55671
+ * Check and handle a session file before use.
55672
+ * If poisoned: archive it and return { archived: true }.
55673
+ * Otherwise: stamp the current version and return { archived: false }.
55674
+ */
55675
+ async function handleSessionVersion(sessionFile) {
55676
+ const poison = await checkSessionPoison(sessionFile);
55677
+ if (poison) return {
55678
+ archived: true,
55679
+ archivePath: await archivePoisonedSession(sessionFile),
55680
+ poisonVersion: poison
55681
+ };
55682
+ await stampSessionVersion(sessionFile);
55683
+ return { archived: false };
55684
+ }
55685
+
55583
55686
  //#endregion
55584
55687
  //#region src/agents/stream-monitor.ts
55585
55688
  /**
@@ -58528,6 +58631,8 @@ async function runEmbeddedAttempt(params) {
58528
58631
  provider: params.provider,
58529
58632
  modelId: params.modelId
58530
58633
  });
58634
+ const versionCheck = await handleSessionVersion(params.sessionFile);
58635
+ if (versionCheck.archived) log$4.warn(`session archived: created by ${versionCheck.poisonVersion}, known corruption range → ${versionCheck.archivePath}`);
58531
58636
  await prewarmSessionFile(params.sessionFile);
58532
58637
  sessionManager = guardSessionManager(SessionManager.open(params.sessionFile), {
58533
58638
  agentId: sessionAgentId,
@@ -60199,7 +60304,7 @@ async function runAgentTurn(params) {
60199
60304
  function createDefaultDeps() {
60200
60305
  return {
60201
60306
  sendMessageWhatsApp: async (...args) => {
60202
- const { sendMessageWhatsApp } = await import("./web-DVvZ_mDC.js");
60307
+ const { sendMessageWhatsApp } = await import("./web-DFqKskm8.js");
60203
60308
  return await sendMessageWhatsApp(...args);
60204
60309
  },
60205
60310
  sendMessageTelegram: async (...args) => {
@@ -63104,7 +63209,7 @@ function createDiscordGatewayPlugin(params) {
63104
63209
  super(options);
63105
63210
  }
63106
63211
  createWebSocket(url) {
63107
- return new WebSocket(url, { agent });
63212
+ return new WebSocket$1(url, { agent });
63108
63213
  }
63109
63214
  }
63110
63215
  return new ProxyGatewayPlugin();
@@ -73322,7 +73427,7 @@ const buildTelegramMessageContext = async ({ primaryCtx, allMedia, storeAllowFro
73322
73427
  const hasAudio = allMedia.some((media) => media.contentType?.startsWith("audio/"));
73323
73428
  let preflightTranscript;
73324
73429
  if (isGroup && requireMention && hasAudio && !hasUserText && mentionRegexes.length > 0) try {
73325
- const { transcribeFirstAudio } = await import("./audio-preflight-CPBOQV4I.js");
73430
+ const { transcribeFirstAudio } = await import("./audio-preflight-C40mKAp7.js");
73326
73431
  preflightTranscript = await transcribeFirstAudio({
73327
73432
  ctx: {
73328
73433
  MediaPaths: allMedia.length > 0 ? allMedia.map((m) => m.path) : void 0,
@@ -75479,7 +75584,7 @@ function loadWebLoginQr() {
75479
75584
  return webLoginQrPromise;
75480
75585
  }
75481
75586
  function loadWebChannel() {
75482
- webChannelPromise ??= import("./web-DVvZ_mDC.js");
75587
+ webChannelPromise ??= import("./web-DFqKskm8.js");
75483
75588
  return webChannelPromise;
75484
75589
  }
75485
75590
  function loadWhatsAppActions() {
@@ -77500,31 +77605,6 @@ function resolveToolLoopDetectionConfig(params) {
77500
77605
  }
77501
77606
  };
77502
77607
  }
77503
- /**
77504
- * Wrap a tool to strip model-specific control tokens from string arguments
77505
- * before execution. Gemma 4 via vLLM sometimes injects tokens like `<|`
77506
- * into tool call arguments (e.g. `exec("<|node -v")`). This wrapper
77507
- * sanitizes all string values in the argument object.
77508
- */
77509
- function wrapToolWithArgSanitization(tool, modelId) {
77510
- const execute = tool.execute;
77511
- if (!execute) return tool;
77512
- return {
77513
- ...tool,
77514
- execute: async (toolCallId, params, signal, onUpdate) => {
77515
- return execute(toolCallId, sanitizeToolArgs(params, modelId), signal, onUpdate);
77516
- }
77517
- };
77518
- }
77519
- function sanitizeToolArgs(params, modelId) {
77520
- if (!params || typeof params !== "object") return typeof params === "string" ? stripModelTokensAggressive(params, modelId) : params;
77521
- if (Array.isArray(params)) return params.map((item) => sanitizeToolArgs(item, modelId));
77522
- const result = {};
77523
- for (const [key, value] of Object.entries(params)) if (typeof value === "string") result[key] = stripModelTokensAggressive(value, modelId);
77524
- else if (value && typeof value === "object") result[key] = sanitizeToolArgs(value, modelId);
77525
- else result[key] = value;
77526
- return result;
77527
- }
77528
77608
  function createSymiCodingTools(options) {
77529
77609
  const execToolName = "exec";
77530
77610
  const sandbox = options?.sandbox?.enabled ? options.sandbox : void 0;
@@ -77748,11 +77828,7 @@ function createSymiCodingTools(options) {
77748
77828
  agentId
77749
77829
  })
77750
77830
  }));
77751
- const withAbort = options?.abortSignal ? withHooks.map((tool) => wrapToolWithAbortSignal(tool, options.abortSignal)) : withHooks;
77752
- const modelId = options?.modelId ?? "";
77753
- const modelProvider = options?.modelProvider ?? "";
77754
- const fullModelId = modelProvider ? `${modelProvider}/${modelId}` : modelId;
77755
- return fullModelId ? withAbort.map((tool) => wrapToolWithArgSanitization(tool, fullModelId)) : withAbort;
77831
+ return options?.abortSignal ? withHooks.map((tool) => wrapToolWithAbortSignal(tool, options.abortSignal)) : withHooks;
77756
77832
  }
77757
77833
 
77758
77834
  //#endregion
@@ -10,7 +10,7 @@ import { t as normalizeChatType } from "./chat-type-DFDuk3FY.js";
10
10
  import { c as SafeOpenError, i as getImageMetadata, l as openFileWithinRoot, n as buildImageResizeSideGrid, s as resizeToJpeg, t as IMAGE_REDUCE_QUALITY_STEPS } from "./image-ops-ByaQt43P.js";
11
11
  import { o as listDeliverableMessageChannels, s as normalizeMessageChannel } from "./message-channel-BQINJQIT.js";
12
12
  import { _ as parseDurationMs, a as writeConfigFile, n as loadConfig, s as parseByteSize, t as createConfigIO } from "./config-BmV60pPT.js";
13
- import { A as DEFAULT_BROWSER_EVALUATE_ENABLED, D as DEFAULT_AI_SNAPSHOT_EFFICIENT_MAX_CHARS, E as DEFAULT_AI_SNAPSHOT_EFFICIENT_DEPTH, M as DEFAULT_SYMI_BROWSER_ENABLED, N as DEFAULT_SYMI_BROWSER_PROFILE_NAME, O as DEFAULT_AI_SNAPSHOT_MAX_CHARS, S as stopChromeExtensionRelayServer, _ as fetchJson, a as resolveSymiUserDataDir, c as captureScreenshot, d as normalizeCdpWsUrl, f as snapshotAria, g as appendCdpPath, h as withBrowserNavigationPolicy, i as launchSymiChrome, j as DEFAULT_SYMI_BROWSER_COLOR, k as DEFAULT_BROWSER_DEFAULT_PROFILE_NAME, l as createTargetViaCdp, m as assertBrowserNavigationAllowed, n as isChromeCdpReady, o as stopSymiChrome, p as InvalidBrowserNavigationUrlError, r as isChromeReachable, s as resolveBrowserExecutableForPlatform, v as fetchOk, w as isLoopbackHost, x as ensureChromeExtensionRelayServer } from "./chrome-D2SKJnR7.js";
13
+ import { A as DEFAULT_BROWSER_EVALUATE_ENABLED, D as DEFAULT_AI_SNAPSHOT_EFFICIENT_MAX_CHARS, E as DEFAULT_AI_SNAPSHOT_EFFICIENT_DEPTH, M as DEFAULT_SYMI_BROWSER_ENABLED, N as DEFAULT_SYMI_BROWSER_PROFILE_NAME, O as DEFAULT_AI_SNAPSHOT_MAX_CHARS, S as stopChromeExtensionRelayServer, _ as fetchJson, a as resolveSymiUserDataDir, c as captureScreenshot, d as normalizeCdpWsUrl, f as snapshotAria, g as appendCdpPath, h as withBrowserNavigationPolicy, i as launchSymiChrome, j as DEFAULT_SYMI_BROWSER_COLOR, k as DEFAULT_BROWSER_DEFAULT_PROFILE_NAME, l as createTargetViaCdp, m as assertBrowserNavigationAllowed, n as isChromeCdpReady, o as stopSymiChrome, p as InvalidBrowserNavigationUrlError, r as isChromeReachable, s as resolveBrowserExecutableForPlatform, v as fetchOk, w as isLoopbackHost, x as ensureChromeExtensionRelayServer } from "./chrome-CDJYxX5a.js";
14
14
  import { a as syncSkillsToWorkspace, l as resolveSandboxInputPath, m as sanitizeEnvVars, u as resolveSandboxPath } from "./skills-BNpGMnp-.js";
15
15
  import { n as formatErrorMessage, t as extractErrorCode } from "./errors-CPfngF0S.js";
16
16
  import { t as SsrFBlockedError } from "./ssrf-CxfFyMRZ.js";
@@ -931,7 +931,7 @@ function isModuleNotFoundError(err) {
931
931
  }
932
932
  async function loadPwAiModule(mode) {
933
933
  try {
934
- return await import("./pw-ai-1htA-NnS.js");
934
+ return await import("./pw-ai-De-KR9_s.js");
935
935
  } catch (err) {
936
936
  if (mode === "soft") return null;
937
937
  if (isModuleNotFoundError(err)) return null;
@@ -3471,11 +3471,11 @@ function createProfileContext(opts, profile) {
3471
3471
  const userDataDir = resolveSymiUserDataDir(profile.name);
3472
3472
  const profileState = getProfileState();
3473
3473
  if (await isHttpReachable(300) && !profileState.running) try {
3474
- await (await import("./pw-ai-1htA-NnS.js")).closePlaywrightBrowserConnection();
3474
+ await (await import("./pw-ai-De-KR9_s.js")).closePlaywrightBrowserConnection();
3475
3475
  } catch {}
3476
3476
  if (profileState.running) await stopRunningBrowser();
3477
3477
  try {
3478
- await (await import("./pw-ai-1htA-NnS.js")).closePlaywrightBrowserConnection();
3478
+ await (await import("./pw-ai-De-KR9_s.js")).closePlaywrightBrowserConnection();
3479
3479
  } catch {}
3480
3480
  if (!fs.existsSync(userDataDir)) return {
3481
3481
  moved: false,
@@ -1,5 +1,5 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-Cbj13DAv.js";
2
- import { ft as loadSymiPlugins } from "./reply-BvVsPU7v.js";
2
+ import { ft as loadSymiPlugins } from "./reply-kuehpmXb.js";
3
3
  import { d as getActivePluginRegistry } from "./registry-Cja8eT7G.js";
4
4
  import { t as createSubsystemLogger } from "./subsystem-D9vIQve0.js";
5
5
  import { c as resolveAgentWorkspaceDir, l as resolveDefaultAgentId } from "./agent-scope-CgUHAtCo.js";
@@ -2,7 +2,7 @@ import { t as __exportAll } from "./rolldown-runtime-Cbj13DAv.js";
2
2
  import { M as getActivePluginRegistry, o as createSubsystemLogger } from "./entry.js";
3
3
  import { c as resolveAgentWorkspaceDir, l as resolveDefaultAgentId } from "./agent-scope-D-jRCY0d.js";
4
4
  import { i as loadConfig } from "./config-DHBLS1Hl.js";
5
- import { m as loadSymiPlugins } from "./subagent-registry-CZah-77E.js";
5
+ import { m as loadSymiPlugins } from "./subagent-registry-BxM7J5m6.js";
6
6
 
7
7
  //#region src/cli/plugin-registry.ts
8
8
  var plugin_registry_exports = /* @__PURE__ */ __exportAll({ ensurePluginRegistryLoaded: () => ensurePluginRegistryLoaded });