@symerian/symi 2.5.1 → 2.5.3

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 (228) hide show
  1. package/dist/{accounts-tNElYrCH.js → accounts-CI6zQTJj.js} +14 -14
  2. package/dist/{accounts-qtxJ-6em.js → accounts-CJR8j_Kq.js} +1 -1
  3. package/dist/{accounts-CWktKM8a.js → accounts-ChTFYj8Q.js} +1 -1
  4. package/dist/{active-listener-C9r8ZB9m.js → active-listener-D6sXIjAg.js} +1 -1
  5. package/dist/{agent-scope-BxoUQqgM.js → agent-scope-Bw1Ed8W9.js} +3 -3
  6. package/dist/{agents-Cf7lxbx4.js → agents-CTPFuwCu.js} +4 -4
  7. package/dist/{agents.config-aAHTt-cM.js → agents.config-CQVRXowo.js} +1 -1
  8. package/dist/{agents.config-CsltNAhl.js → agents.config-CVlanyIt.js} +1 -1
  9. package/dist/{audio-preflight-D02HwB-I.js → audio-preflight-BkIfnmpi.js} +29 -29
  10. package/dist/{auth-choice-wU5fEl73.js → auth-choice-AlA3IixA.js} +1 -1
  11. package/dist/{auth-choice-Cy78Q2jy.js → auth-choice-BKmjyPNC.js} +1 -1
  12. package/dist/{banner-BRzyFiIY.js → banner-8_qXSW1S.js} +1 -1
  13. package/dist/{bindings-B7Ke6LJi.js → bindings-BU2hsBd9.js} +2 -2
  14. package/dist/build-info.json +3 -3
  15. package/dist/bundled/boot-md/handler.js +53 -53
  16. package/dist/bundled/bootstrap-extra-files/handler.js +5 -5
  17. package/dist/bundled/command-logger/handler.js +1 -1
  18. package/dist/bundled/session-memory/handler.js +53 -53
  19. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  20. package/dist/{channel-activity-CsM_hJ_s.js → channel-activity-C9-gaquj.js} +1 -1
  21. package/dist/{channel-options-BcCKOiwh.js → channel-options-CMm67N4v.js} +1 -1
  22. package/dist/{channel-options-up8R2ST5.js → channel-options-nfXd5NWO.js} +1 -1
  23. package/dist/{channel-web-CrH0yvww.js → channel-web-D6t5UK5A.js} +1 -1
  24. package/dist/{channels-cli-DG3sTlC7.js → channels-cli-BA9QVK8Q.js} +4 -4
  25. package/dist/{channels-cli-BiHu6J16.js → channels-cli-B_iBgjWh.js} +4 -4
  26. package/dist/{chrome-EyvdASWt.js → chrome-CxSAp8x3.js} +13 -13
  27. package/dist/{chunk-BW5f05BR.js → chunk-ClbN9Pqy.js} +1 -1
  28. package/dist/{cli-YBkGYxfg.js → cli-BF2nSOtU.js} +1 -1
  29. package/dist/{cli-BUkGaPzi.js → cli-DyI0-h78.js} +1 -1
  30. package/dist/{command-format-BaxDnULz.js → command-format-UKHV-j0K.js} +1 -1
  31. package/dist/{command-registry-YX9EbrJh.js → command-registry-DhvgkMQN.js} +9 -9
  32. package/dist/{commands-registry-D7CTCQPm.js → commands-registry-VSmULp-g.js} +4 -4
  33. package/dist/{completion-cli-Cm8iWdRA.js → completion-cli-CqHcRASb.js} +2 -2
  34. package/dist/{completion-cli-DZf03KrT.js → completion-cli-DJ2AgNQF.js} +1 -1
  35. package/dist/{config-cli-1PDMhq8v.js → config-cli-7yzVs6sD.js} +1 -1
  36. package/dist/{config-cli-Dx3mtUwm.js → config-cli-9MIL9tVq.js} +1 -1
  37. package/dist/{config-DRbjHIwD.js → config-eEaJddXj.js} +12 -12
  38. package/dist/{configure-DZn4tz03.js → configure-BWIGtf_8.js} +3 -3
  39. package/dist/{configure-DKN7f4VI.js → configure-rs23A6dR.js} +3 -3
  40. package/dist/{deliver-D1ZN6-fl.js → deliver-BA7ZN3iM.js} +20 -20
  41. package/dist/{diagnostic-CI0kRQkt.js → diagnostic-C3nsWaw3.js} +1 -1
  42. package/dist/{doctor-completion--aLGEAgK.js → doctor-completion-BqOO4r2O.js} +1 -1
  43. package/dist/{doctor-completion-D4SLAoAE.js → doctor-completion-DD-fb-G8.js} +1 -1
  44. package/dist/entry.js +1 -1
  45. package/dist/extensionAPI.js +1 -1
  46. package/dist/{frontmatter-C_bv_0P8.js → frontmatter-DPlG6yha.js} +2 -2
  47. package/dist/{gateway-cli-CMVvut5c.js → gateway-cli-2R-SuiTy.js} +9 -9
  48. package/dist/{gateway-cli-ZbqwB66o.js → gateway-cli-BVnEz6em.js} +9 -9
  49. package/dist/{gemini-auth-CdSPHuLl.js → gemini-auth-CF48hUR9.js} +1 -1
  50. package/dist/{github-copilot-token-C_qUP7p5.js → github-copilot-token-DJqsJ2-r.js} +7 -7
  51. package/dist/{glass-ui-ws-Bg6ek2Vs.js → glass-ui-ws-C9w0ySFw.js} +7 -7
  52. package/dist/{glass-ui-ws-Cykb9Xv4.js → glass-ui-ws-CmDHJq0W.js} +7 -7
  53. package/dist/{health-CGoPVhko.js → health-CGJe8xON.js} +1 -1
  54. package/dist/{health-BMKu3MJz.js → health-R_6vQfbY.js} +1 -1
  55. package/dist/{hooks-cli-CQUjUbF8.js → hooks-cli-CUTMGbml.js} +2 -2
  56. package/dist/{hooks-cli-CFtgfZBU.js → hooks-cli-Cvc0R8C2.js} +2 -2
  57. package/dist/{image-Cp3JDEBB.js → image-BGmVDkkw.js} +4 -4
  58. package/dist/{image-ops-CvJzsyvE.js → image-ops-S8-8dAhx.js} +1 -1
  59. package/dist/index.js +6 -6
  60. package/dist/{ir-DccrnjsE.js → ir-CbFUkv_T.js} +4 -4
  61. package/dist/llm-slug-generator.js +53 -53
  62. package/dist/{local-roots-DMwIh5cS.js → local-roots-C7OCYACU.js} +5 -5
  63. package/dist/{login-CwCoxapk.js → login-B8uiUAnV.js} +7 -7
  64. package/dist/{login-qr-Batf3PT5.js → login-qr-CIZk8uKX.js} +12 -12
  65. package/dist/{manager-D_LwXbc6.js → manager-BoLr3xR_.js} +13 -13
  66. package/dist/{manifest-registry-D0IQ3WuX.js → manifest-registry-CneMHk0N.js} +19 -19
  67. package/dist/{markdown-tables-iMQQZu4Q.js → markdown-tables-DSHvnTLx.js} +1 -1
  68. package/dist/{plugin-sdk/message-channel-COTAJzHd.js → message-channel-DbsRltF2.js} +1 -1
  69. package/dist/{model-auth-DK43VicI.js → model-auth-CwOuTuXl.js} +9 -9
  70. package/dist/{models-BPJ5Z5tU.js → models-DPk6zVF5.js} +2 -2
  71. package/dist/{models-cli-D9miPqtu.js → models-cli-1hWA7FrI.js} +2 -2
  72. package/dist/{models-cli-I7FIJUNa.js → models-cli-BhijD6uM.js} +3 -3
  73. package/dist/{onboard-BU6-iBln.js → onboard-BgoNPLnU.js} +2 -2
  74. package/dist/{onboard-CCZ5n-rI.js → onboard-CSPuFTdy.js} +2 -2
  75. package/dist/{onboard-channels-CaRYhl9J.js → onboard-channels-D680exuN.js} +1 -1
  76. package/dist/{onboard-channels-B188R3F1.js → onboard-channels-r6Gvo5Cd.js} +1 -1
  77. package/dist/{onboarding-CNgU4kg8.js → onboarding-Dnmpcyzj.js} +3 -3
  78. package/dist/{onboarding-Gsj-iMyY.js → onboarding-pxBeD60g.js} +3 -3
  79. package/dist/{onboarding.finalize-C64KHESC.js → onboarding.finalize-CBTphwf0.js} +6 -6
  80. package/dist/{onboarding.finalize-BvPgcu7R.js → onboarding.finalize-jsLRDHxC.js} +5 -5
  81. package/dist/{outbound-attachment-DjNDa3zn.js → outbound-attachment-Co2diKdP.js} +2 -2
  82. package/dist/{outbound-D4fN_ZlE.js → outbound-opDNxv-l.js} +7 -7
  83. package/dist/{paths-DLyHUt31.js → paths-Cb87-LzP.js} +1 -1
  84. package/dist/{paths-Cce4PUkG.js → paths-CySxpNhH.js} +5 -5
  85. package/dist/{pi-auth-json-0SYBFZTt.js → pi-auth-json-DPWPoruO.js} +8 -8
  86. package/dist/{pi-embedded-RoXbo73e.js → pi-embedded-BRw7oe5n.js} +125 -8
  87. package/dist/{pi-embedded-DXSWVPEZ.js → pi-embedded-DkqIIBK5.js} +281 -164
  88. package/dist/{pi-embedded-helpers-ag2bosuj.js → pi-embedded-helpers-DEEaCvEp.js} +52 -52
  89. package/dist/{plugin-registry-ByLEBcK_.js → plugin-registry-BtIkzwfi.js} +1 -1
  90. package/dist/{plugin-registry-dNrBrnR0.js → plugin-registry-DZ4m64Mr.js} +1 -1
  91. package/dist/plugin-sdk/{accounts-BtaOa4z_.js → accounts-BToL3HlP.js} +1 -1
  92. package/dist/plugin-sdk/{accounts-Ddm33hQm.js → accounts-D9zGZU5t.js} +3 -3
  93. package/dist/plugin-sdk/{accounts-s-AdhXVR.js → accounts-Dtszw3Zn.js} +1 -1
  94. package/dist/plugin-sdk/{active-listener-BXYeALs0.js → active-listener-bEk__wbB.js} +1 -1
  95. package/dist/plugin-sdk/{agent-scope-CYYpcO9W.js → agent-scope-C3gMMKCU.js} +2 -2
  96. package/dist/plugin-sdk/agents/session-version.d.ts +48 -0
  97. package/dist/plugin-sdk/{api-key-rotation-D_sMvI5W.js → api-key-rotation-CVBMpnPc.js} +1 -1
  98. package/dist/plugin-sdk/{audio-preflight-VpItkiy3.js → audio-preflight-DoQQKlxa.js} +24 -24
  99. package/dist/plugin-sdk/{bindings-C7hRtgYW.js → bindings-BbwoUGPx.js} +2 -2
  100. package/dist/plugin-sdk/{channel-activity-DoC1xtDu.js → channel-activity-Ji7f0gqq.js} +1 -1
  101. package/dist/plugin-sdk/{channel-web-Dn3ufSyq.js → channel-web-CDaDQ_94.js} +22 -22
  102. package/dist/plugin-sdk/{chrome-B7RdxmJ0.js → chrome-C7c_0I5M.js} +3 -3
  103. package/dist/plugin-sdk/{chunk-Dw2XBYXv.js → chunk-jvk9axTQ.js} +1 -1
  104. package/dist/plugin-sdk/{command-format-GKSevep4.js → command-format-DSdvQ_M5.js} +1 -1
  105. package/dist/plugin-sdk/{commands-registry-COIaslGl.js → commands-registry-CQFbmUMs.js} +4 -4
  106. package/dist/plugin-sdk/{config-KlTNfkFF.js → config-DDkdiUOR.js} +9 -9
  107. package/dist/plugin-sdk/{deliver-BZ99UKQq.js → deliver-BZ6iNLl7.js} +10 -10
  108. package/dist/plugin-sdk/{diagnostic-05pm5Rxi.js → diagnostic-mFf4i4G9.js} +1 -1
  109. package/dist/plugin-sdk/{image-CLOPx7yW.js → image-BOYy0Ump.js} +4 -4
  110. package/dist/plugin-sdk/{image-ops-BlQR__MN.js → image-ops-Bnp6LXEx.js} +1 -1
  111. package/dist/plugin-sdk/index.js +53 -53
  112. package/dist/plugin-sdk/{ir-BJ6BHE5b.js → ir-Fb3qpcis.js} +4 -4
  113. package/dist/plugin-sdk/{local-roots-BHLNSI8U.js → local-roots-Ckk1QfzI.js} +3 -3
  114. package/dist/plugin-sdk/{login-DQMXuxOk.js → login-Bh3DZPam.js} +7 -7
  115. package/dist/plugin-sdk/{login-qr-BjVZSoCi.js → login-qr-DbR7odSr.js} +9 -9
  116. package/dist/plugin-sdk/{manager-CBSBFuFz.js → manager-DckktAQ3.js} +8 -8
  117. package/dist/plugin-sdk/{manifest-registry-CPnHl_K3.js → manifest-registry-B3ugY9-f.js} +1 -1
  118. package/dist/plugin-sdk/{markdown-tables-BoYFajMu.js → markdown-tables-Dfaqilz6.js} +1 -1
  119. package/dist/{message-channel-Dz5lr5b0.js → plugin-sdk/message-channel-BdI5Ra9S.js} +1 -1
  120. package/dist/plugin-sdk/{model-selection-CsbEfrS0.js → model-selection-OpU8HN50.js} +4 -4
  121. package/dist/plugin-sdk/{outbound-attachment-CnslKL38.js → outbound-attachment-DnVQfTG2.js} +2 -2
  122. package/dist/plugin-sdk/{outbound-B0e8KdaR.js → outbound-rF6G8Xpr.js} +7 -7
  123. package/dist/plugin-sdk/{pi-auth-json-qWi7ZIYV.js → pi-auth-json-CJk8t14T.js} +5 -5
  124. package/dist/plugin-sdk/{pi-embedded-helpers-CW630epe.js → pi-embedded-helpers-BveUP4hk.js} +17 -17
  125. package/dist/plugin-sdk/{plugins-BNByVCIH.js → plugins-BbAvhC25.js} +4 -4
  126. package/dist/plugin-sdk/{pw-ai-CnbPIPY9.js → pw-ai-DjGUsee-.js} +8 -8
  127. package/dist/plugin-sdk/{qmd-manager-CH0XbIHf.js → qmd-manager-mjKcdwVr.js} +4 -4
  128. package/dist/plugin-sdk/{registry-D0xTnUWt.js → registry--_pGht6S.js} +2 -2
  129. package/dist/{replies-BIX_isV7.js → plugin-sdk/replies-fI39rPGa.js} +3 -3
  130. package/dist/plugin-sdk/{reply-DqjPcp_q.js → reply-BgTxNeXD.js} +201 -84
  131. package/dist/plugin-sdk/{reply-prefix-uxfMZW4p.js → reply-prefix-BHuV5t70.js} +1 -1
  132. package/dist/plugin-sdk/{resolve-outbound-target-BiyAyTWz.js → resolve-outbound-target-BkCUbYGV.js} +2 -2
  133. package/dist/plugin-sdk/{resolve-route-B3CCBumQ.js → resolve-route-D3JH_D2N.js} +3 -3
  134. package/dist/plugin-sdk/{retry-CwQ_iIj8.js → retry-ilSJqnz9.js} +1 -1
  135. package/dist/plugin-sdk/{runner-CGBT7tgF.js → runner-BVqnEfNe.js} +9 -9
  136. package/dist/plugin-sdk/{send-C5h_YxNb.js → send-BHbXh8Ly.js} +7 -7
  137. package/dist/plugin-sdk/{send-pYqe432l.js → send-BMfJIhCk.js} +6 -6
  138. package/dist/plugin-sdk/{send-B2CEnVLL.js → send-BtANzsAo.js} +6 -6
  139. package/dist/plugin-sdk/{send-CjOBB3Vo.js → send-Bxdu6ZZy.js} +10 -10
  140. package/dist/plugin-sdk/{send-CRsR8-vO.js → send-D6LMZJ_h.js} +10 -10
  141. package/dist/plugin-sdk/{session-BsOrxiMj.js → session-kI0tzViQ.js} +4 -4
  142. package/dist/plugin-sdk/{skill-commands-ff_01_r3.js → skill-commands-DCNXVERE.js} +5 -5
  143. package/dist/plugin-sdk/{skills-_yTP47Cd.js → skills-B1GeRYlu.js} +7 -7
  144. package/dist/plugin-sdk/{sqlite-CxAR5ttJ.js → sqlite-Cq_7Cg4E.js} +1 -1
  145. package/dist/plugin-sdk/{store-BdrNabcU.js → store-Do3t33-c.js} +2 -2
  146. package/dist/plugin-sdk/{subsystem-B2uDN3TV.js → subsystem-Coz2AgU8.js} +1 -1
  147. package/dist/plugin-sdk/{tables-DNwXwNFa.js → tables-DR0NmBeH.js} +1 -1
  148. package/dist/{target-errors-Be1SwYlW.js → plugin-sdk/target-errors-B7YyMnIi.js} +2 -2
  149. package/dist/plugin-sdk/{thinking-CXqf7WTe.js → thinking-DCNUIAHY.js} +5 -5
  150. package/dist/plugin-sdk/{tokens-bC3UVmVH.js → tokens-CWMflosr.js} +1 -1
  151. package/dist/{tool-images-DXB7tqWi.js → plugin-sdk/tool-images-D7Lno-TE.js} +2 -2
  152. package/dist/plugin-sdk/{tool-loop-detection-BVA6fax-.js → tool-loop-detection-edmW8ZiF.js} +2 -2
  153. package/dist/plugin-sdk/web-B6NRKGGa.js +65 -0
  154. package/dist/plugin-sdk/{whatsapp-actions-DfseosPO.js → whatsapp-actions-CcBzDuL-.js} +21 -21
  155. package/dist/{plugins-DQYI3Fr-.js → plugins-C4C9637U.js} +9 -9
  156. package/dist/{plugins-cli-BJRG_tkQ.js → plugins-cli-CRb9nRFi.js} +2 -2
  157. package/dist/{plugins-cli-DPaKpbZ0.js → plugins-cli-DqE-InfX.js} +2 -2
  158. package/dist/{program-DCyh129g.js → program-BDQRtHXP.js} +7 -7
  159. package/dist/{program-context-27mCl36z.js → program-context-DoK7rKBC.js} +17 -17
  160. package/dist/{prompt-select-styled-JUdZMeZI.js → prompt-select-styled-B3dTk26Y.js} +4 -4
  161. package/dist/{prompt-select-styled-kpNeUDud.js → prompt-select-styled-MqSvQaDb.js} +4 -4
  162. package/dist/{provider-auth-helpers-C9GRYN-o.js → provider-auth-helpers-BDN3x0AU.js} +1 -1
  163. package/dist/{provider-auth-helpers-DyW_7UGQ.js → provider-auth-helpers-CwUeZ41c.js} +1 -1
  164. package/dist/{push-apns-DSpV-UMg.js → push-apns-BBaXO4aV.js} +1 -1
  165. package/dist/{push-apns-CZw1UMXk.js → push-apns-CgmHr336.js} +1 -1
  166. package/dist/{pw-ai-Ch7liUOW.js → pw-ai-DhwRiS06.js} +11 -11
  167. package/dist/{qmd-manager-QHUP-_em.js → qmd-manager-DdZh9PHs.js} +7 -7
  168. package/dist/{register.agent-B7jOO00w.js → register.agent-BDIn4sRN.js} +5 -5
  169. package/dist/{register.agent-Dt-fGSRM.js → register.agent-zqbU35_d.js} +6 -6
  170. package/dist/{register.configure-B4ssKdGP.js → register.configure-B9Atehb4.js} +6 -6
  171. package/dist/{register.configure-BB1NVcZv.js → register.configure-CBWMCe2I.js} +6 -6
  172. package/dist/{register.maintenance-ICQUl02l.js → register.maintenance-B3SsgHO_.js} +8 -8
  173. package/dist/{register.maintenance-B6JGjudV.js → register.maintenance-BQy8hEp0.js} +7 -7
  174. package/dist/{register.message-BEP0P-gF.js → register.message-B6KDPfgh.js} +2 -2
  175. package/dist/{register.message-B-hq0-gd.js → register.message-Dg0Q8NL0.js} +2 -2
  176. package/dist/{register.onboard-CrgzRM5X.js → register.onboard-Cg1itYBF.js} +4 -4
  177. package/dist/{register.onboard-Dgsu5_C8.js → register.onboard-kaKkBUpb.js} +4 -4
  178. package/dist/{register.setup-C8xPuOMY.js → register.setup-BBQtCyWL.js} +4 -4
  179. package/dist/{register.setup-B3pPkZ-g.js → register.setup-BiBByjTo.js} +4 -4
  180. package/dist/{register.status-health-sessions-RqNzd4Pm.js → register.status-health-sessions-C3M6B_3w.js} +3 -3
  181. package/dist/{register.status-health-sessions-DzM7DkCi.js → register.status-health-sessions-DL9QESHL.js} +3 -3
  182. package/dist/{register.subclis-DcJgaLOK.js → register.subclis-B27L2Tlh.js} +9 -9
  183. package/dist/{registry-CK4e9hn8.js → registry-DP24za6g.js} +17 -17
  184. package/dist/{plugin-sdk/replies-LLcQL3w6.js → replies-DpPvWiGF.js} +3 -3
  185. package/dist/{reply-DiFKjgpz.js → reply-ahHa59uT.js} +125 -8
  186. package/dist/{reply-prefix-XlyuyChD.js → reply-prefix-CtL0omgM.js} +1 -1
  187. package/dist/{resolve-route-CZ-1eqw0.js → resolve-route-BVikmvWO.js} +4 -4
  188. package/dist/{retry-Cly39XZB.js → retry-dGG-MbxL.js} +1 -1
  189. package/dist/{run-main-Ck0iMwKh.js → run-main-DqlK3Wy-.js} +14 -14
  190. package/dist/{runner-D0QUGA_X.js → runner-B_KP4voe.js} +9 -9
  191. package/dist/{send-DeFniOjh.js → send-CHEOWVc8.js} +6 -6
  192. package/dist/{send-WyRqb4WD.js → send-DbcLJb0P.js} +7 -7
  193. package/dist/{send-B1u-LrcS.js → send-DeEosX8F.js} +18 -18
  194. package/dist/{send-CiTGOvEc.js → send-DwKJK3sM.js} +10 -10
  195. package/dist/{send-DW96zgDL.js → send-zSarozV2.js} +6 -6
  196. package/dist/{server-methods-pP1Q9SDn.js → server-methods-B9ZPWP0q.js} +7 -7
  197. package/dist/{server-methods-CBQha8Aw.js → server-methods-CGVoOkf3.js} +7 -7
  198. package/dist/{server-node-events-CfY2QTYr.js → server-node-events-CjoofPGv.js} +2 -2
  199. package/dist/{server-node-events-aW9AFIXA.js → server-node-events-DzlyRIPt.js} +2 -2
  200. package/dist/{session-SM36BTsl.js → session-DV1MNlbV.js} +8 -8
  201. package/dist/{skill-commands-BJMb_psG.js → skill-commands-D610IKhm.js} +9 -9
  202. package/dist/{skills-BFekKL7i.js → skills-o5WVqM4V.js} +21 -21
  203. package/dist/{sqlite-DRbx2dhW.js → sqlite-6H6Zw1cs.js} +4 -4
  204. package/dist/{status-iwhTBXbZ.js → status-Csa1fdSW.js} +2 -2
  205. package/dist/{status-BNOqNwMY.js → status-DNRd5-AN.js} +1 -1
  206. package/dist/{status-DYp8kqmj.js → status-Dd3-6fq5.js} +2 -2
  207. package/dist/{status-BKc593Qu.js → status-TUjwchut.js} +1 -1
  208. package/dist/{store-C0wvOkae.js → store-vVE6N2mH.js} +2 -2
  209. package/dist/{subagent-registry-yBrXpTO-.js → subagent-registry-DfimjEyh.js} +125 -8
  210. package/dist/{subsystem-Bs9YvKLa.js → subsystem-DgpxyDQ_.js} +1 -1
  211. package/dist/{tables-DuZspiBu.js → tables-BIWsCKXJ.js} +1 -1
  212. package/dist/{plugin-sdk/target-errors-Paro1BjP.js → target-errors-DyItGyW9.js} +2 -2
  213. package/dist/{thinking-CdlENGRW.js → thinking-Ni0HF-w6.js} +5 -5
  214. package/dist/{tokens-H1H1LiSQ.js → tokens-c_SLAkVb.js} +1 -1
  215. package/dist/{plugin-sdk/tool-images-HJ2sfZDV.js → tool-images-DBCfXdli.js} +2 -2
  216. package/dist/{tool-loop-detection-Cs8_HCsx.js → tool-loop-detection-Bbc9OPFR.js} +3 -3
  217. package/dist/{update-cli-Cma87YH0.js → update-cli-4mLsTTm5.js} +7 -7
  218. package/dist/{update-cli-B8lS5-Z5.js → update-cli-yJuLaKdL.js} +8 -8
  219. package/dist/{update-runner-Cx6XjioC.js → update-runner-C0hYiaj2.js} +1 -1
  220. package/dist/{update-runner-DZmjPgW-.js → update-runner-CB0M0lum.js} +1 -1
  221. package/dist/{web-C5liFFox.js → web-BMLeQ_Ql.js} +1 -1
  222. package/dist/{web-CycbZoQb.js → web-BUrK0rTE.js} +2 -2
  223. package/dist/{web-B9ciy43q.js → web-DrsjOzkW.js} +1 -1
  224. package/dist/{web-BWuN3c4n.js → web-Nrl97JcY.js} +57 -57
  225. package/dist/{whatsapp-actions-D1RsnX7P.js → whatsapp-actions-oRQjcdQe.js} +23 -23
  226. package/dist/{workspace-wAaHI8-5.js → workspace-CbvamIU6.js} +6 -6
  227. package/package.json +1 -1
  228. package/dist/plugin-sdk/web-GvAx9MMo.js +0 -65
@@ -13,7 +13,7 @@ import "./client-DMBZpU6X.js";
13
13
  import "./call-BcE47FtD.js";
14
14
  import "./message-channel-C9dERklz.js";
15
15
  import "./pairing-token-Byh6drgn.js";
16
- import "./subagent-registry-yBrXpTO-.js";
16
+ import "./subagent-registry-DfimjEyh.js";
17
17
  import "./sessions-CJXnZVjR.js";
18
18
  import "./tokens-Csntmwwn.js";
19
19
  import "./plugins-CwSlLxM8.js";
@@ -104,8 +104,8 @@ import "./daemon-runtime-CfRwa6qh.js";
104
104
  import "./runtime-guard-D7waq_Ho.js";
105
105
  import "./systemd-DlMdyFDY.js";
106
106
  import "./service-Cm9j9WzQ.js";
107
- import "./health-CGoPVhko.js";
108
- import "./onboarding-CNgU4kg8.js";
107
+ import "./health-CGJe8xON.js";
108
+ import "./onboarding-Dnmpcyzj.js";
109
109
  import "./shared-D8K9MkWg.js";
110
110
  import "./auth-token-Cmrk2TPo.js";
111
111
  import { n as logConfigUpdated, t as formatConfigPath } from "./logging-BGewRZy0.js";
@@ -113,7 +113,7 @@ import "./openai-model-default-DAwnTUcK.js";
113
113
  import "./model-picker-D5nCutGW.js";
114
114
  import "./systemd-linger-DA_LW52P.js";
115
115
  import "./onboard-custom-DdWPfzJO.js";
116
- import { t as onboardCommand } from "./onboard-BU6-iBln.js";
116
+ import { t as onboardCommand } from "./onboard-BgoNPLnU.js";
117
117
  import JSON5 from "json5";
118
118
  import fs from "node:fs/promises";
119
119
 
@@ -1,7 +1,7 @@
1
1
  import "./paths-Cqn-zk3M.js";
2
2
  import { B as theme, S as shortenHomePath } from "./utils-B-0b9bGM.js";
3
3
  import "./thinking-EAliFiVK.js";
4
- import "./reply-DiFKjgpz.js";
4
+ import "./reply-ahHa59uT.js";
5
5
  import "./registry-Cja8eT7G.js";
6
6
  import { f as defaultRuntime } from "./subsystem-D9vIQve0.js";
7
7
  import "./exec-CWkblSrI.js";
@@ -108,8 +108,8 @@ import "./clack-prompter-B7pN13HV.js";
108
108
  import "./daemon-runtime-2mwX-jqj.js";
109
109
  import "./systemd-riq8uNJQ.js";
110
110
  import "./service-Cl74hx8J.js";
111
- import "./health-BMKu3MJz.js";
112
- import "./onboarding-Gsj-iMyY.js";
111
+ import "./health-R_6vQfbY.js";
112
+ import "./onboarding-pxBeD60g.js";
113
113
  import "./shared-Knv1hy6h.js";
114
114
  import "./auth-token-BnOynwk4.js";
115
115
  import { n as logConfigUpdated, t as formatConfigPath } from "./logging-BzzwiKjv.js";
@@ -117,7 +117,7 @@ import "./openai-model-default-DMjQRsb1.js";
117
117
  import "./model-picker-Ddo3jHe-.js";
118
118
  import "./systemd-linger-aQ75ZlXY.js";
119
119
  import "./onboard-custom-C7O-zfQ1.js";
120
- import { t as onboardCommand } from "./onboard-CCZ5n-rI.js";
120
+ import { t as onboardCommand } from "./onboard-CSPuFTdy.js";
121
121
  import JSON5 from "json5";
122
122
  import fs from "node:fs/promises";
123
123
 
@@ -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-yBrXpTO-.js";
17
+ import "./subagent-registry-DfimjEyh.js";
18
18
  import "./sessions-CJXnZVjR.js";
19
19
  import "./tokens-Csntmwwn.js";
20
20
  import "./plugins-CwSlLxM8.js";
@@ -108,8 +108,8 @@ import "./service-Cm9j9WzQ.js";
108
108
  import "./diagnostics-CS1ov_hH.js";
109
109
  import "./table-D01d2GuY.js";
110
110
  import "./audit-Byo5jCLN.js";
111
- import { n as statusCommand } from "./status-iwhTBXbZ.js";
112
- import { r as healthCommand } from "./health-CGoPVhko.js";
111
+ import { n as statusCommand } from "./status-Csa1fdSW.js";
112
+ import { r as healthCommand } from "./health-CGJe8xON.js";
113
113
  import "./update-check-ZdimP1aU.js";
114
114
  import "./dm-policy-shared-DJ-61hCT.js";
115
115
  import "./node-service-fcZExd22.js";
@@ -1,7 +1,7 @@
1
1
  import "./paths-Cqn-zk3M.js";
2
2
  import { B as theme, P as setVerbose, k as info, z as isRich } from "./utils-B-0b9bGM.js";
3
3
  import "./thinking-EAliFiVK.js";
4
- import { m as classifySessionKey, pr as lookupContextTokens, x as resolveSessionModelRef } from "./reply-DiFKjgpz.js";
4
+ import { m as classifySessionKey, pr as lookupContextTokens, x as resolveSessionModelRef } from "./reply-ahHa59uT.js";
5
5
  import { S as parseAgentSessionKey } from "./session-key-DCt45XZa.js";
6
6
  import "./registry-Cja8eT7G.js";
7
7
  import { f as defaultRuntime } from "./subsystem-D9vIQve0.js";
@@ -114,8 +114,8 @@ import "./service-Cl74hx8J.js";
114
114
  import "./diagnostics-BAMlsVVX.js";
115
115
  import "./table-BTgkRafz.js";
116
116
  import "./audit-CrITRV6w.js";
117
- import { t as statusCommand } from "./status-DYp8kqmj.js";
118
- import { r as healthCommand } from "./health-BMKu3MJz.js";
117
+ import { t as statusCommand } from "./status-Dd3-6fq5.js";
118
+ import { r as healthCommand } from "./health-R_6vQfbY.js";
119
119
  import "./update-check-CtckACbb.js";
120
120
  import "./dm-policy-shared-Bh3TbexU.js";
121
121
  import "./node-service-Cxz4e-Qd.js";
@@ -49,7 +49,7 @@ const entries = [
49
49
  description: "Run, inspect, and query the WebSocket Gateway",
50
50
  hasSubcommands: true,
51
51
  register: async (program) => {
52
- (await import("./gateway-cli-CMVvut5c.js")).registerGatewayCli(program);
52
+ (await import("./gateway-cli-2R-SuiTy.js")).registerGatewayCli(program);
53
53
  }
54
54
  },
55
55
  {
@@ -81,7 +81,7 @@ const entries = [
81
81
  description: "Discover, scan, and configure models",
82
82
  hasSubcommands: true,
83
83
  register: async (program) => {
84
- (await import("./models-cli-I7FIJUNa.js")).registerModelsCli(program);
84
+ (await import("./models-cli-BhijD6uM.js")).registerModelsCli(program);
85
85
  }
86
86
  },
87
87
  {
@@ -161,7 +161,7 @@ const entries = [
161
161
  description: "Manage internal agent hooks",
162
162
  hasSubcommands: true,
163
163
  register: async (program) => {
164
- (await import("./hooks-cli-CFtgfZBU.js")).registerHooksCli(program);
164
+ (await import("./hooks-cli-Cvc0R8C2.js")).registerHooksCli(program);
165
165
  }
166
166
  },
167
167
  {
@@ -185,7 +185,7 @@ const entries = [
185
185
  description: "Secure DM pairing (approve inbound requests)",
186
186
  hasSubcommands: true,
187
187
  register: async (program) => {
188
- const { registerPluginCliCommands } = await import("./cli-BUkGaPzi.js");
188
+ const { registerPluginCliCommands } = await import("./cli-DyI0-h78.js");
189
189
  registerPluginCliCommands(program, await loadConfig());
190
190
  (await import("./pairing-cli-CQRAnpvm.js")).registerPairingCli(program);
191
191
  }
@@ -195,8 +195,8 @@ const entries = [
195
195
  description: "Manage Symi plugins and extensions",
196
196
  hasSubcommands: true,
197
197
  register: async (program) => {
198
- (await import("./plugins-cli-DPaKpbZ0.js")).registerPluginsCli(program);
199
- const { registerPluginCliCommands } = await import("./cli-BUkGaPzi.js");
198
+ (await import("./plugins-cli-DqE-InfX.js")).registerPluginsCli(program);
199
+ const { registerPluginCliCommands } = await import("./cli-DyI0-h78.js");
200
200
  registerPluginCliCommands(program, await loadConfig());
201
201
  }
202
202
  },
@@ -205,7 +205,7 @@ const entries = [
205
205
  description: "Manage connected chat channels (Telegram, Discord, etc.)",
206
206
  hasSubcommands: true,
207
207
  register: async (program) => {
208
- (await import("./channels-cli-BiHu6J16.js")).registerChannelsCli(program);
208
+ (await import("./channels-cli-B_iBgjWh.js")).registerChannelsCli(program);
209
209
  }
210
210
  },
211
211
  {
@@ -237,7 +237,7 @@ const entries = [
237
237
  description: "Update Symi and inspect update channel status",
238
238
  hasSubcommands: true,
239
239
  register: async (program) => {
240
- (await import("./update-cli-B8lS5-Z5.js")).registerUpdateCli(program);
240
+ (await import("./update-cli-yJuLaKdL.js")).registerUpdateCli(program);
241
241
  }
242
242
  },
243
243
  {
@@ -245,7 +245,7 @@ const entries = [
245
245
  description: "Generate shell completion script",
246
246
  hasSubcommands: false,
247
247
  register: async (program) => {
248
- (await import("./completion-cli-Cm8iWdRA.js").then((n) => n.n)).registerCompletionCli(program);
248
+ (await import("./completion-cli-CqHcRASb.js").then((n) => n.n)).registerCompletionCli(program);
249
249
  }
250
250
  }
251
251
  ];
@@ -1,7 +1,7 @@
1
- import { a as resolveOAuthDir, c as expandHomePrefix, l as resolveEffectiveHomeDir, n as resolveConfigPath, u as resolveRequiredHomeDir } from "./paths-Cce4PUkG.js";
1
+ import { a as resolveOAuthDir, c as expandHomePrefix, l as resolveEffectiveHomeDir, n as resolveConfigPath, u as resolveRequiredHomeDir } from "./paths-CySxpNhH.js";
2
2
  import os from "node:os";
3
3
  import path from "node:path";
4
- import fs from "node:fs";
4
+ import fsSync from "node:fs";
5
5
  import { Logger } from "tslog";
6
6
  import JSON5 from "json5";
7
7
  import chalk, { Chalk } from "chalk";
@@ -12,9 +12,9 @@ function isNodeErrorWithCode(err, code) {
12
12
  return typeof err === "object" && err !== null && "code" in err && err.code === code;
13
13
  }
14
14
  function resolvePreferredSymiTmpDir(options = {}) {
15
- const accessSync = options.accessSync ?? fs.accessSync;
16
- const lstatSync = options.lstatSync ?? fs.lstatSync;
17
- const mkdirSync = options.mkdirSync ?? fs.mkdirSync;
15
+ const accessSync = options.accessSync ?? fsSync.accessSync;
16
+ const lstatSync = options.lstatSync ?? fsSync.lstatSync;
17
+ const mkdirSync = options.mkdirSync ?? fsSync.mkdirSync;
18
18
  const getuid = options.getuid ?? (() => {
19
19
  try {
20
20
  return typeof process.getuid === "function" ? process.getuid() : void 0;
@@ -38,14 +38,14 @@ function resolvePreferredSymiTmpDir(options = {}) {
38
38
  try {
39
39
  const preferred = lstatSync(POSIX_SYMI_TMP_DIR);
40
40
  if (!preferred.isDirectory() || preferred.isSymbolicLink()) return fallback();
41
- accessSync(POSIX_SYMI_TMP_DIR, fs.constants.W_OK | fs.constants.X_OK);
41
+ accessSync(POSIX_SYMI_TMP_DIR, fsSync.constants.W_OK | fsSync.constants.X_OK);
42
42
  if (!isSecureDirForUser(preferred)) return fallback();
43
43
  return POSIX_SYMI_TMP_DIR;
44
44
  } catch (err) {
45
45
  if (!isNodeErrorWithCode(err, "ENOENT")) return fallback();
46
46
  }
47
47
  try {
48
- accessSync("/tmp", fs.constants.W_OK | fs.constants.X_OK);
48
+ accessSync("/tmp", fsSync.constants.W_OK | fsSync.constants.X_OK);
49
49
  mkdirSync(POSIX_SYMI_TMP_DIR, {
50
50
  recursive: true,
51
51
  mode: 448
@@ -68,8 +68,8 @@ function resolvePreferredSymiTmpDir(options = {}) {
68
68
  function readLoggingConfig() {
69
69
  const configPath = resolveConfigPath();
70
70
  try {
71
- if (!fs.existsSync(configPath)) return;
72
- const raw = fs.readFileSync(configPath, "utf-8");
71
+ if (!fsSync.existsSync(configPath)) return;
72
+ const raw = fsSync.readFileSync(configPath, "utf-8");
73
73
  const logging = JSON5.parse(raw)?.logging;
74
74
  if (!logging || typeof logging !== "object" || Array.isArray(logging)) return;
75
75
  return logging;
@@ -172,7 +172,7 @@ function isFileLogLevelEnabled(level) {
172
172
  return levelToMinLevel(level) <= levelToMinLevel(settings.level);
173
173
  }
174
174
  function buildLogger(settings) {
175
- fs.mkdirSync(path.dirname(settings.file), { recursive: true });
175
+ fsSync.mkdirSync(path.dirname(settings.file), { recursive: true });
176
176
  if (isRollingPath(settings.file)) pruneOldRollingLogs(path.dirname(settings.file));
177
177
  const logger = new Logger({
178
178
  name: "symi",
@@ -186,7 +186,7 @@ function buildLogger(settings) {
186
186
  ...logObj,
187
187
  time
188
188
  });
189
- fs.appendFileSync(settings.file, `${line}\n`, { encoding: "utf8" });
189
+ fsSync.appendFileSync(settings.file, `${line}\n`, { encoding: "utf8" });
190
190
  } catch {}
191
191
  });
192
192
  for (const transport of externalTransports) attachExternalTransport(logger, transport);
@@ -238,14 +238,14 @@ function isRollingPath(file) {
238
238
  }
239
239
  function pruneOldRollingLogs(dir) {
240
240
  try {
241
- const entries = fs.readdirSync(dir, { withFileTypes: true });
241
+ const entries = fsSync.readdirSync(dir, { withFileTypes: true });
242
242
  const cutoff = Date.now() - MAX_LOG_AGE_MS;
243
243
  for (const entry of entries) {
244
244
  if (!entry.isFile()) continue;
245
245
  if (!entry.name.startsWith(`${LOG_PREFIX}-`) || !entry.name.endsWith(LOG_SUFFIX)) continue;
246
246
  const fullPath = path.join(dir, entry.name);
247
247
  try {
248
- if (fs.statSync(fullPath).mtimeMs < cutoff) fs.rmSync(fullPath, { force: true });
248
+ if (fsSync.statSync(fullPath).mtimeMs < cutoff) fsSync.rmSync(fullPath, { force: true });
249
249
  } catch {}
250
250
  }
251
251
  } catch {}
@@ -326,14 +326,14 @@ function isPlainObject(value) {
326
326
  //#endregion
327
327
  //#region src/utils.ts
328
328
  async function ensureDir(dir) {
329
- await fs.promises.mkdir(dir, { recursive: true });
329
+ await fsSync.promises.mkdir(dir, { recursive: true });
330
330
  }
331
331
  /**
332
332
  * Check if a file or directory exists at the given path.
333
333
  */
334
334
  async function pathExists(targetPath) {
335
335
  try {
336
- await fs.promises.access(targetPath);
336
+ await fsSync.promises.access(targetPath);
337
337
  return true;
338
338
  } catch {
339
339
  return false;
@@ -416,7 +416,7 @@ function readLidReverseMapping(lid, opts) {
416
416
  for (const dir of mappingDirs) {
417
417
  const mappingPath = path.join(dir, mappingFilename);
418
418
  try {
419
- const data = fs.readFileSync(mappingPath, "utf8");
419
+ const data = fsSync.readFileSync(mappingPath, "utf8");
420
420
  const phone = JSON.parse(data);
421
421
  if (phone === null || phone === void 0) continue;
422
422
  return normalizeE164(String(phone));
@@ -500,7 +500,7 @@ function resolveConfigDir(env = process.env, homedir = os.homedir) {
500
500
  if (override) return resolveUserPath(override);
501
501
  const newDir = path.join(resolveRequiredHomeDir(env, homedir), ".symi");
502
502
  try {
503
- if (fs.existsSync(newDir)) return newDir;
503
+ if (fsSync.existsSync(newDir)) return newDir;
504
504
  } catch {}
505
505
  return newDir;
506
506
  }
@@ -1,7 +1,7 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-Cbj13DAv.js";
2
- import { i as chunkMarkdownTextWithMode } from "./chunk-Dw2XBYXv.js";
3
- import { r as markdownToSlackMrkdwnChunks, t as sendMessageSlack } from "./send-B2CEnVLL.js";
4
- import { a as isSilentReplyText, n as SILENT_REPLY_TOKEN } from "./tokens-bC3UVmVH.js";
2
+ import { a as isSilentReplyText, n as SILENT_REPLY_TOKEN } from "./tokens-c_SLAkVb.js";
3
+ import { r as markdownToSlackMrkdwnChunks, t as sendMessageSlack } from "./send-CHEOWVc8.js";
4
+ import { i as chunkMarkdownTextWithMode } from "./chunk-ClbN9Pqy.js";
5
5
 
6
6
  //#region src/auto-reply/reply/reply-reference.ts
7
7
  function createReplyReferencePlanner(options) {
@@ -22404,7 +22404,16 @@ const BUILTIN_PROFILES = [
22404
22404
  suppressMonologue: true,
22405
22405
  hasStructuredThinking: false
22406
22406
  },
22407
- promptAdditions: ["You are running locally via Ollama. Do not output raw control tokens or internal monologue. Send brief progress updates on long tasks."],
22407
+ promptAdditions: [
22408
+ "CRITICAL OUTPUT RULES:",
22409
+ "- Your response ends when you have delivered the answer. Do not append anything after.",
22410
+ "- Do not output raw control tokens, channel tags, or turn markers.",
22411
+ "- Do not begin any sentence with 'I have addressed' or 'I've reviewed'.",
22412
+ "- Do not write verification checklists, self-assessments, or numbered assessment lists after your answer.",
22413
+ "- Do not write 'Verification:', 'Requirements:', 'Status Check:', or 'Everything is correct'.",
22414
+ "- If you need to verify your work, do so before writing your response, not after.",
22415
+ "- Send brief progress updates on long tasks so the user knows you are active."
22416
+ ],
22408
22417
  ui: {
22409
22418
  badge: "Local",
22410
22419
  watchdogMs: 9e5,
@@ -22464,12 +22473,15 @@ const BUILTIN_PROFILES = [
22464
22473
  hasStructuredThinking: false
22465
22474
  },
22466
22475
  promptAdditions: [
22467
- "You are running as Gemma 4 via vLLM. Important behavioral rules:",
22468
- "- Never output raw control tokens, channel tags, or turn markers in your responses.",
22469
- "- Never display internal status checks, plans, or self-assessments. Your visible output should only be conversational responses and final results.",
22470
- "- When working on multi-step tasks, send a brief one-line status update every 30-60 seconds so the user knows you are active.",
22476
+ "CRITICAL OUTPUT RULES:",
22477
+ "- Your response ends when you have delivered the answer. Do not append anything after.",
22478
+ "- Do not output raw control tokens, channel tags, turn markers, or <|channel>thought syntax.",
22479
+ "- Do not begin any sentence with 'I have addressed' or 'I've reviewed'.",
22480
+ "- Do not write verification checklists, self-assessments, or numbered assessment lists after your answer.",
22481
+ "- Do not write 'Verification:', 'Requirements:', 'Status Check:', or 'Everything is correct'.",
22482
+ "- If you need to verify your work, do so before writing your response, not after.",
22471
22483
  "- Keep planning and reasoning internal. Only speak when you have a result or need user input.",
22472
- "- Do not use <|channel>thought or similar syntax. If you need to reason, do so silently."
22484
+ "- When working on multi-step tasks, send a brief one-line status update so the user knows you are active."
22473
22485
  ],
22474
22486
  ui: {
22475
22487
  badge: "CoreWeave",
@@ -26180,6 +26192,109 @@ function guardSessionManager(sessionManager, opts) {
26180
26192
  return sessionManager;
26181
26193
  }
26182
26194
 
26195
+ //#endregion
26196
+ //#region src/agents/session-version.ts
26197
+ /**
26198
+ * Session Versioning — version-based session migration.
26199
+ *
26200
+ * Each session gets a `symiVersion` field in its JSONL header.
26201
+ * On session load, if the session was created by a known-poison version
26202
+ * (2.3.0-2.3.4), it's archived and a fresh session starts.
26203
+ *
26204
+ * Sessions without `symiVersion` predate 2.3.0 and were created with Claude,
26205
+ * which does not produce corrupted tool args or looping output. Do NOT
26206
+ * archive unversioned sessions — they are safe. Only sessions with an
26207
+ * explicit symiVersion in the known-poison range are archived.
26208
+ *
26209
+ * @module
26210
+ */
26211
+ /** Versions that produced corrupted sessions (tool arg garbage, looping). */
26212
+ const POISON_VERSION_MIN = [
26213
+ 2,
26214
+ 3,
26215
+ 0
26216
+ ];
26217
+ const POISON_VERSION_MAX = [
26218
+ 2,
26219
+ 3,
26220
+ 4
26221
+ ];
26222
+ function parseVersion(v) {
26223
+ return v.split(".").map((s) => parseInt(s, 10)).filter((n) => !Number.isNaN(n));
26224
+ }
26225
+ function compareVersions(a, b) {
26226
+ for (let i = 0; i < Math.max(a.length, b.length); i++) {
26227
+ const av = a[i] ?? 0;
26228
+ const bv = b[i] ?? 0;
26229
+ if (av < bv) return -1;
26230
+ if (av > bv) return 1;
26231
+ }
26232
+ return 0;
26233
+ }
26234
+ function isInPoisonRange(version) {
26235
+ const v = parseVersion(version);
26236
+ if (v.length < 3) return false;
26237
+ return compareVersions(v, POISON_VERSION_MIN) >= 0 && compareVersions(v, POISON_VERSION_MAX) <= 0;
26238
+ }
26239
+ /**
26240
+ * Check if a session file was created by a poisoned Symi version.
26241
+ * Returns the symiVersion if poisoned, null if safe.
26242
+ */
26243
+ async function checkSessionPoison(sessionFile) {
26244
+ try {
26245
+ const firstLine = (await fs$1.readFile(sessionFile, "utf-8")).split("\n")[0];
26246
+ if (!firstLine) return null;
26247
+ const header = JSON.parse(firstLine);
26248
+ if (header.type !== "session") return null;
26249
+ const symiVersion = header.symiVersion;
26250
+ if (typeof symiVersion !== "string") return null;
26251
+ if (isInPoisonRange(symiVersion)) return symiVersion;
26252
+ return null;
26253
+ } catch {
26254
+ return null;
26255
+ }
26256
+ }
26257
+ /**
26258
+ * Archive a poisoned session file by renaming it.
26259
+ * The archived file can be inspected later but won't be loaded.
26260
+ */
26261
+ async function archivePoisonedSession(sessionFile) {
26262
+ const archiveName = `${sessionFile}.archived-poison.${(/* @__PURE__ */ new Date()).toISOString().replace(/[:.]/g, "-")}`;
26263
+ await fs$1.rename(sessionFile, archiveName);
26264
+ return archiveName;
26265
+ }
26266
+ /**
26267
+ * Stamp the current Symi version into a session file's header.
26268
+ * Reads the first line, adds/updates symiVersion, rewrites the line.
26269
+ */
26270
+ async function stampSessionVersion(sessionFile) {
26271
+ try {
26272
+ const lines = (await fs$1.readFile(sessionFile, "utf-8")).split("\n");
26273
+ if (lines.length === 0) return;
26274
+ const header = JSON.parse(lines[0]);
26275
+ if (header.type !== "session") return;
26276
+ if (header.symiVersion === VERSION) return;
26277
+ header.symiVersion = VERSION;
26278
+ lines[0] = JSON.stringify(header);
26279
+ await fs$1.writeFile(sessionFile, lines.join("\n"), "utf-8");
26280
+ } catch {}
26281
+ }
26282
+ /**
26283
+ * Check and handle a session file before use.
26284
+ * If poisoned: archive it and return { archived: true }.
26285
+ * Otherwise: stamp the current version and return { archived: false }.
26286
+ */
26287
+ async function handleSessionVersion(sessionFile) {
26288
+ const poison = await checkSessionPoison(sessionFile);
26289
+ if (poison) return {
26290
+ archived: true,
26291
+ archivePath: await archivePoisonedSession(sessionFile),
26292
+ poisonVersion: poison
26293
+ };
26294
+ await stampSessionVersion(sessionFile);
26295
+ return { archived: false };
26296
+ }
26297
+
26183
26298
  //#endregion
26184
26299
  //#region src/agents/stream-monitor.ts
26185
26300
  /**
@@ -29328,6 +29443,8 @@ async function runEmbeddedAttempt(params) {
29328
29443
  provider: params.provider,
29329
29444
  modelId: params.modelId
29330
29445
  });
29446
+ const versionCheck = await handleSessionVersion(params.sessionFile);
29447
+ if (versionCheck.archived) log$6.warn(`session archived: created by ${versionCheck.poisonVersion}, known corruption range → ${versionCheck.archivePath}`);
29331
29448
  await prewarmSessionFile(params.sessionFile);
29332
29449
  sessionManager = guardSessionManager(SessionManager.open(params.sessionFile), {
29333
29450
  agentId: sessionAgentId,
@@ -30999,7 +31116,7 @@ async function runAgentTurn(params) {
30999
31116
  function createDefaultDeps() {
31000
31117
  return {
31001
31118
  sendMessageWhatsApp: async (...args) => {
31002
- const { sendMessageWhatsApp } = await import("./web-CycbZoQb.js");
31119
+ const { sendMessageWhatsApp } = await import("./web-BUrK0rTE.js");
31003
31120
  return await sendMessageWhatsApp(...args);
31004
31121
  },
31005
31122
  sendMessageTelegram: async (...args) => {
@@ -49430,7 +49547,7 @@ function loadWebLoginQr() {
49430
49547
  return webLoginQrPromise;
49431
49548
  }
49432
49549
  function loadWebChannel() {
49433
- webChannelPromise ??= import("./web-CycbZoQb.js");
49550
+ webChannelPromise ??= import("./web-BUrK0rTE.js");
49434
49551
  return webChannelPromise;
49435
49552
  }
49436
49553
  function loadWhatsAppActions() {
@@ -1,5 +1,5 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-Cbj13DAv.js";
2
- import { n as resolveAgentConfig } from "./agent-scope-BxoUQqgM.js";
2
+ import { n as resolveAgentConfig } from "./agent-scope-Bw1Ed8W9.js";
3
3
 
4
4
  //#region src/agents/identity.ts
5
5
  const DEFAULT_ACK_REACTION = "👀";
@@ -1,10 +1,10 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-Cbj13DAv.js";
2
2
  import { d as sanitizeAgentId, f as DEFAULT_ACCOUNT_ID, i as buildAgentPeerSessionKey, n as DEFAULT_MAIN_KEY, p as normalizeAccountId, r as buildAgentMainSessionKey, s as normalizeAgentId, t as DEFAULT_AGENT_ID } from "./session-key-BCzIW1Y2.js";
3
- import { Z as shouldLogVerbose } from "./registry-CK4e9hn8.js";
4
- import { c as resolveDefaultAgentId } from "./agent-scope-BxoUQqgM.js";
5
- import { y as logDebug } from "./workspace-wAaHI8-5.js";
3
+ import { Z as shouldLogVerbose } from "./registry-DP24za6g.js";
4
+ import { c as resolveDefaultAgentId } from "./agent-scope-Bw1Ed8W9.js";
5
+ import { y as logDebug } from "./workspace-CbvamIU6.js";
6
6
  import { t as normalizeChatType } from "./chat-type-C_KiWNAH.js";
7
- import { t as listBindings } from "./bindings-B7Ke6LJi.js";
7
+ import { t as listBindings } from "./bindings-BU2hsBd9.js";
8
8
 
9
9
  //#region src/routing/resolve-route.ts
10
10
  var resolve_route_exports = /* @__PURE__ */ __exportAll({
@@ -1,4 +1,4 @@
1
- import { B as sleep } from "./registry-CK4e9hn8.js";
1
+ import { B as sleep } from "./registry-DP24za6g.js";
2
2
 
3
3
  //#region src/infra/retry.ts
4
4
  const DEFAULT_RETRY_CONFIG = {
@@ -13,7 +13,7 @@ import "./client-DMBZpU6X.js";
13
13
  import "./call-BcE47FtD.js";
14
14
  import "./message-channel-C9dERklz.js";
15
15
  import "./pairing-token-Byh6drgn.js";
16
- import "./subagent-registry-yBrXpTO-.js";
16
+ import "./subagent-registry-DfimjEyh.js";
17
17
  import "./sessions-CJXnZVjR.js";
18
18
  import "./tokens-Csntmwwn.js";
19
19
  import "./plugins-CwSlLxM8.js";
@@ -101,9 +101,9 @@ import { t as ensureSymiCliOnPath } from "./path-env-Bic_wXs9.js";
101
101
  import "./catalog-DLQFKucJ.js";
102
102
  import "./note-DDecZomM.js";
103
103
  import "./plugin-auto-enable-D6ENR3Xg.js";
104
- import { t as ensurePluginRegistryLoaded } from "./plugin-registry-ByLEBcK_.js";
104
+ import { t as ensurePluginRegistryLoaded } from "./plugin-registry-BtIkzwfi.js";
105
105
  import { t as assertSupportedRuntime } from "./runtime-guard-D7waq_Ho.js";
106
- import { t as emitCliBanner } from "./banner-BRzyFiIY.js";
106
+ import { t as emitCliBanner } from "./banner-8_qXSW1S.js";
107
107
  import "./doctor-config-flow-CA3eiKhd.js";
108
108
  import { n as ensureConfigReady } from "./config-guard-CPHvOzsC.js";
109
109
  import process$1 from "node:process";
@@ -118,7 +118,7 @@ const routeHealth = {
118
118
  const verbose = getVerboseFlag(argv, { includeDebug: true });
119
119
  const timeoutMs = getPositiveIntFlagValue(argv, "--timeout");
120
120
  if (timeoutMs === null) return false;
121
- const { healthCommand } = await import("./health-CGoPVhko.js").then((n) => n.i);
121
+ const { healthCommand } = await import("./health-CGJe8xON.js").then((n) => n.i);
122
122
  await healthCommand({
123
123
  json,
124
124
  timeoutMs,
@@ -138,7 +138,7 @@ const routeStatus = {
138
138
  const verbose = getVerboseFlag(argv, { includeDebug: true });
139
139
  const timeoutMs = getPositiveIntFlagValue(argv, "--timeout");
140
140
  if (timeoutMs === null) return false;
141
- const { statusCommand } = await import("./status-iwhTBXbZ.js").then((n) => n.t);
141
+ const { statusCommand } = await import("./status-Csa1fdSW.js").then((n) => n.t);
142
142
  await statusCommand({
143
143
  json,
144
144
  deep,
@@ -172,7 +172,7 @@ const routeAgentsList = {
172
172
  run: async (argv) => {
173
173
  const json = hasFlag(argv, "--json");
174
174
  const bindings = hasFlag(argv, "--bindings");
175
- const { agentsListCommand } = await import("./agents-Cf7lxbx4.js").then((n) => n.t);
175
+ const { agentsListCommand } = await import("./agents-CTPFuwCu.js").then((n) => n.t);
176
176
  await agentsListCommand({
177
177
  json,
178
178
  bindings
@@ -243,7 +243,7 @@ const routes = [
243
243
  const pathArg = getCommandPositionals(argv)[2];
244
244
  if (!pathArg) return false;
245
245
  const json = hasFlag(argv, "--json");
246
- const { runConfigGet } = await import("./config-cli-Dx3mtUwm.js");
246
+ const { runConfigGet } = await import("./config-cli-9MIL9tVq.js");
247
247
  await runConfigGet({
248
248
  path: pathArg,
249
249
  json
@@ -256,7 +256,7 @@ const routes = [
256
256
  run: async (argv) => {
257
257
  const pathArg = getCommandPositionals(argv)[2];
258
258
  if (!pathArg) return false;
259
- const { runConfigUnset } = await import("./config-cli-Dx3mtUwm.js");
259
+ const { runConfigUnset } = await import("./config-cli-9MIL9tVq.js");
260
260
  await runConfigUnset({ path: pathArg });
261
261
  return true;
262
262
  }
@@ -270,7 +270,7 @@ const routes = [
270
270
  const local = hasFlag(argv, "--local");
271
271
  const json = hasFlag(argv, "--json");
272
272
  const plain = hasFlag(argv, "--plain");
273
- const { modelsListCommand } = await import("./models-BPJ5Z5tU.js").then((n) => n.t);
273
+ const { modelsListCommand } = await import("./models-DPk6zVF5.js").then((n) => n.t);
274
274
  await modelsListCommand({
275
275
  all,
276
276
  local,
@@ -301,7 +301,7 @@ const routes = [
301
301
  const plain = hasFlag(argv, "--plain");
302
302
  const check = hasFlag(argv, "--check");
303
303
  const probe = hasFlag(argv, "--probe");
304
- const { modelsStatusCommand } = await import("./models-BPJ5Z5tU.js").then((n) => n.t);
304
+ const { modelsStatusCommand } = await import("./models-DPk6zVF5.js").then((n) => n.t);
305
305
  await modelsStatusCommand({
306
306
  json,
307
307
  plain,
@@ -379,7 +379,7 @@ async function runCli(argv = process$1.argv) {
379
379
  assertSupportedRuntime();
380
380
  if (await tryRouteCli(normalizedArgv)) return;
381
381
  enableConsoleCapture();
382
- const { buildProgram } = await import("./program-DCyh129g.js");
382
+ const { buildProgram } = await import("./program-BDQRtHXP.js");
383
383
  const program = buildProgram();
384
384
  installUnhandledRejectionHandler();
385
385
  process$1.on("uncaughtException", (error) => {
@@ -411,10 +411,10 @@ async function runCli(argv = process$1.argv) {
411
411
  const { getProgramContext } = await import("./program-context-CqzR_m-7.js").then((n) => n.n);
412
412
  const ctx = getProgramContext(program);
413
413
  if (ctx) {
414
- const { registerCoreCliByName } = await import("./command-registry-YX9EbrJh.js").then((n) => n.t);
414
+ const { registerCoreCliByName } = await import("./command-registry-DhvgkMQN.js").then((n) => n.t);
415
415
  await registerCoreCliByName(program, ctx, primary, parseArgv);
416
416
  }
417
- const { registerSubCliByName } = await import("./register.subclis-DcJgaLOK.js").then((n) => n.a);
417
+ const { registerSubCliByName } = await import("./register.subclis-B27L2Tlh.js").then((n) => n.a);
418
418
  await registerSubCliByName(program, primary);
419
419
  }
420
420
  const hasBuiltinPrimary = primary !== null && program.commands.some((command) => command.name() === primary);
@@ -423,7 +423,7 @@ async function runCli(argv = process$1.argv) {
423
423
  primary,
424
424
  hasBuiltinPrimary
425
425
  })) {
426
- const { registerPluginCliCommands } = await import("./cli-BUkGaPzi.js");
426
+ const { registerPluginCliCommands } = await import("./cli-DyI0-h78.js");
427
427
  const { loadConfig } = await import("./config-DHBLS1Hl.js").then((n) => n.t);
428
428
  registerPluginCliCommands(program, loadConfig());
429
429
  }
@@ -1,13 +1,13 @@
1
- import { J as logVerbose, Z as shouldLogVerbose } from "./registry-CK4e9hn8.js";
2
- import { _ as runExec } from "./workspace-wAaHI8-5.js";
1
+ import { J as logVerbose, Z as shouldLogVerbose } from "./registry-DP24za6g.js";
2
+ import { _ as runExec } from "./workspace-CbvamIU6.js";
3
3
  import { t as normalizeChatType } from "./chat-type-C_KiWNAH.js";
4
- import { _ as kindFromMime, d as detectMime, h as isAudioFileName, p as getFileExtension } from "./image-ops-CvJzsyvE.js";
5
- import { A as normalizeProviderId, L as normalizeGoogleModelId, i as resolveApiKeyForProvider, r as requireApiKey, y as resolveSymiAgentDir } from "./model-auth-DK43VicI.js";
6
- import { d as DEFAULT_IMESSAGE_ATTACHMENT_ROOTS, f as isInboundPathAllowed, m as resolveIMessageAttachmentRoots, n as loadConfig, p as mergeInboundPathRoots } from "./config-DRbjHIwD.js";
7
- import { S as ensureSymiModelsJson, t as describeImageWithModel } from "./image-Cp3JDEBB.js";
8
- import { n as collectProviderApiKeysForExecution, r as executeWithApiKeyRotation, t as parseGeminiAuth } from "./gemini-auth-CdSPHuLl.js";
4
+ import { _ as kindFromMime, d as detectMime, h as isAudioFileName, p as getFileExtension } from "./image-ops-S8-8dAhx.js";
5
+ import { A as normalizeProviderId, L as normalizeGoogleModelId, i as resolveApiKeyForProvider, r as requireApiKey, y as resolveSymiAgentDir } from "./model-auth-CwOuTuXl.js";
6
+ import { d as DEFAULT_IMESSAGE_ATTACHMENT_ROOTS, f as isInboundPathAllowed, m as resolveIMessageAttachmentRoots, n as loadConfig, p as mergeInboundPathRoots } from "./config-eEaJddXj.js";
7
+ import { S as ensureSymiModelsJson, t as describeImageWithModel } from "./image-BGmVDkkw.js";
8
+ import { n as collectProviderApiKeysForExecution, r as executeWithApiKeyRotation, t as parseGeminiAuth } from "./gemini-auth-CF48hUR9.js";
9
9
  import { n as fetchWithTimeout } from "./fetch-timeout-DL3f_O53.js";
10
- import { i as fetchRemoteMedia, n as getDefaultMediaLocalRoots, o as fetchWithSsrFGuard, r as MediaFetchError } from "./local-roots-DMwIh5cS.js";
10
+ import { i as fetchRemoteMedia, n as getDefaultMediaLocalRoots, o as fetchWithSsrFGuard, r as MediaFetchError } from "./local-roots-C7OCYACU.js";
11
11
  import fs from "node:fs/promises";
12
12
  import os from "node:os";
13
13
  import path from "node:path";
@@ -882,7 +882,7 @@ async function loadModelCatalog(params) {
882
882
  });
883
883
  try {
884
884
  await ensureSymiModelsJson(params?.config ?? loadConfig());
885
- await (await import("./pi-auth-json-0SYBFZTt.js")).ensurePiAuthJsonFromAuthProfiles(resolveSymiAgentDir());
885
+ await (await import("./pi-auth-json-DPWPoruO.js")).ensurePiAuthJsonFromAuthProfiles(resolveSymiAgentDir());
886
886
  const piSdk = await importPiSdk();
887
887
  const agentDir = resolveSymiAgentDir();
888
888
  const { join } = await import("node:path");