@symerian/symi 2.8.13 → 2.8.14

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 (295) hide show
  1. package/dist/{accounts-BuZxOb3B.js → accounts-Bsg6r6H7.js} +1 -1
  2. package/dist/{accounts-BRw8yhIW.js → accounts-BsgY6sda.js} +21 -21
  3. package/dist/{accounts-3dCrO3oZ.js → accounts-wWWkC0JH.js} +1 -1
  4. package/dist/{active-listener-BVZOh2T1.js → active-listener-AVNn5_U9.js} +1 -1
  5. package/dist/{agent-scope-CpEJ0B88.js → agent-scope-Cpm7a9ss.js} +3 -3
  6. package/dist/{agents-CgCg4syn.js → agents-DlAvDWxz.js} +4 -4
  7. package/dist/{agents.config-BnPC7uct.js → agents.config-BKKMbeeE.js} +1 -1
  8. package/dist/{agents.config-DqWxpgkX.js → agents.config-Dd-11klq.js} +1 -1
  9. package/dist/{audio-preflight-NdNUAZ0y.js → audio-preflight-C6vpFnOG.js} +4 -4
  10. package/dist/{audio-preflight-Cb-T0r6e.js → audio-preflight-rrz8KyHd.js} +29 -29
  11. package/dist/{audit-Bi9Je9FZ.js → audit-BhCJV2l6.js} +1 -1
  12. package/dist/{audit-Oa5dsn5p.js → audit-CB97BqHJ.js} +1 -1
  13. package/dist/{auth-choice-BKwypsnS.js → auth-choice-C6woT6k2.js} +1 -1
  14. package/dist/{auth-choice-BIlBt2d0.js → auth-choice-CRQRPwQt.js} +1 -1
  15. package/dist/{auth-profiles-C2vj6htZ.js → auth-profiles-BzB_Exeq.js} +17 -17
  16. package/dist/{banner-CX5CuLWQ.js → banner-DrNha2_N.js} +1 -1
  17. package/dist/{bindings-BsHoBLIE.js → bindings-xcRox9xM.js} +2 -2
  18. package/dist/build-info.json +3 -3
  19. package/dist/bundled/boot-md/handler.js +54 -54
  20. package/dist/bundled/bootstrap-extra-files/handler.js +5 -5
  21. package/dist/bundled/command-logger/handler.js +1 -1
  22. package/dist/bundled/session-memory/handler.js +54 -54
  23. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  24. package/dist/{channel-activity-D8QD7GoV.js → channel-activity-CzHaIUAp.js} +1 -1
  25. package/dist/{channel-options-mUKQVJQl.js → channel-options-D8q9En4T.js} +1 -1
  26. package/dist/{channel-options-7y9EuPLO.js → channel-options-DYy2sCfN.js} +1 -1
  27. package/dist/{channel-web-Dldh4zVI.js → channel-web-CRBU4eZk.js} +1 -1
  28. package/dist/{channels-cli-Dz9vV1KL.js → channels-cli-BUk43hHR.js} +7 -7
  29. package/dist/{channels-cli-Q6Q8LokG.js → channels-cli-Dk3kUw9A.js} +7 -7
  30. package/dist/{chrome-ROtrXlNs.js → chrome-B14NNyfm.js} +5 -5
  31. package/dist/{chrome-BUT--ob3.js → chrome-DwXnykXR.js} +23 -23
  32. package/dist/{chunk-BRe1o4Af.js → chunk-BcxcL1U3.js} +1 -1
  33. package/dist/{cli-DMsLCQbO.js → cli-5gWsnsB7.js} +4 -4
  34. package/dist/{cli-D4WYEtu4.js → cli-DjZzJy3t.js} +4 -4
  35. package/dist/{command-registry-cEqGIx4b.js → command-registry-LjFltTU9.js} +10 -10
  36. package/dist/{commands-registry-DxbSTLNQ.js → commands-registry-ByGkL6hs.js} +4 -4
  37. package/dist/{completion-cli-Bw0jbNaG.js → completion-cli-BVTGy8th.js} +1 -1
  38. package/dist/{completion-cli-C5GCKfKT.js → completion-cli-Cf6fYZWL.js} +2 -2
  39. package/dist/{config-BkZ9HOKT.js → config-C4WnAd-c.js} +17 -17
  40. package/dist/{config-cli-DP0hP7WR.js → config-cli-C7DIbGxx.js} +1 -1
  41. package/dist/{config-cli-DgHooQ4_.js → config-cli-EgWrCemi.js} +1 -1
  42. package/dist/{configure-OUiXvgMg.js → configure-B67uIawm.js} +3 -3
  43. package/dist/{configure-BQUkaPdS.js → configure-Bk-snuxh.js} +3 -3
  44. package/dist/{consolidate-07QMweFF.js → consolidate-DRtVvG2U.js} +4 -4
  45. package/dist/{deliver-B_Q_nWJV.js → deliver-D0bWiRCg.js} +1 -1
  46. package/dist/{deliver-B0OUq6RP.js → deliver-SLYAWE19.js} +20 -20
  47. package/dist/{diagnostic-BUcR3Meg.js → diagnostic-DTkZsRNM.js} +1 -1
  48. package/dist/{doctor-completion-DlKvncR9.js → doctor-completion-By066O3p.js} +1 -1
  49. package/dist/{doctor-completion-BSMAyCq_.js → doctor-completion-lE_33xaY.js} +1 -1
  50. package/dist/entry.js +1 -1
  51. package/dist/{env-BDXYbTKj.js → env-CB65jmJQ.js} +1 -1
  52. package/dist/extensionAPI.js +7 -7
  53. package/dist/{frontmatter-CTR5f_Ez.js → frontmatter-CT1M0pRK.js} +4 -4
  54. package/dist/{gateway-cli-BlRNLVfU.js → gateway-cli-C6uT2x34.js} +13 -13
  55. package/dist/{gateway-cli-NI7W2QxR.js → gateway-cli-DqEgqVKC.js} +13 -13
  56. package/dist/{gemini-auth-BefM10YB.js → gemini-auth-D80BsXr2.js} +1 -1
  57. package/dist/{github-copilot-token-cCYzSU9h.js → github-copilot-token-B8B2pmph.js} +7 -7
  58. package/dist/{glass-ui-ws-BBkFBsKB.js → glass-ui-ws-77TY57IO.js} +11 -11
  59. package/dist/{glass-ui-ws-DxrESDzy.js → glass-ui-ws-CLAUHeZR.js} +11 -11
  60. package/dist/{health-fOu0S75U.js → health-2jkjZxY8.js} +1 -1
  61. package/dist/{health-D4vU-wV-.js → health-CvMHgR-L.js} +1 -1
  62. package/dist/{hooks-cli-BdgnXYmw.js → hooks-cli-CRZySOiz.js} +5 -5
  63. package/dist/{hooks-cli-DdSggQYs.js → hooks-cli-DSaezFsD.js} +5 -5
  64. package/dist/{image-BuVL0jHI.js → image-BHF_fnIp.js} +4 -4
  65. package/dist/{image-tzIqIuKx.js → image-MNvheU8U.js} +1 -1
  66. package/dist/{plugin-sdk/image-ops-BlQR__MN.js → image-ops-CY7v6vvp.js} +17 -17
  67. package/dist/index.js +9 -9
  68. package/dist/{internal-DjnxpF_K.js → internal-FNqguZSK.js} +11 -11
  69. package/dist/{ir-7tMVY7D_.js → ir-D6MiJpAy.js} +4 -4
  70. package/dist/llm-slug-generator.js +54 -54
  71. package/dist/{local-roots-ClipCZ9s.js → local-roots-tcdaIEhh.js} +5 -5
  72. package/dist/{login-D4rZWBXe.js → login-D4ZkmSrY.js} +7 -7
  73. package/dist/{login-qr-DdAVHOEC.js → login-qr-C9ftIq3n.js} +12 -12
  74. package/dist/{manager-DRrGn88w.js → manager-BtWtmpxN.js} +1 -1
  75. package/dist/{manager-syNf_ZrI.js → manager-DDELj5o9.js} +1 -1
  76. package/dist/{manager-TOeH0D8K.js → manager-DrmlegR2.js} +1 -1
  77. package/dist/{manager-_RGWWymD.js → manager-DxCmjSfP.js} +24 -24
  78. package/dist/{manifest-registry-CBCGTsIb.js → manifest-registry-BvGv6lp9.js} +19 -19
  79. package/dist/{markdown-tables-x2Xe2UXh.js → markdown-tables-CE-qSMGB.js} +1 -1
  80. package/dist/{memory-cli-0jm-n36m.js → memory-cli-ENCASZJk.js} +3 -3
  81. package/dist/{memory-cli-BSOOwpt1.js → memory-cli-Qgbcxvuf.js} +3 -3
  82. package/dist/{plugin-sdk/message-channel-COTAJzHd.js → message-channel-lwVT8QjK.js} +1 -1
  83. package/dist/{models-sGeWQOmg.js → models-COhUz7M9.js} +2 -2
  84. package/dist/{models-cli-CtkoEyh3.js → models-cli-CCxYcF4R.js} +5 -5
  85. package/dist/{models-cli-DV-J1cm0.js → models-cli-CYvXBvmZ.js} +6 -6
  86. package/dist/{onboard-FeTHeA1y.js → onboard-CQNUYBIp.js} +2 -2
  87. package/dist/{onboard-channels-DpZkjldS.js → onboard-channels-9erx07qe.js} +1 -1
  88. package/dist/{onboard-channels-D8bDJYPc.js → onboard-channels-CWw8G-6n.js} +1 -1
  89. package/dist/{onboard-CWBYuaCm.js → onboard-fVpLVnwg.js} +2 -2
  90. package/dist/{onboarding-BsPnnH5g.js → onboarding-CtEiH9WG.js} +3 -3
  91. package/dist/{onboarding-c2qhwP0x.js → onboarding-D-OIkDwZ.js} +3 -3
  92. package/dist/{onboarding.finalize-7St3fmk2.js → onboarding.finalize-BY3HNjX4.js} +9 -9
  93. package/dist/{onboarding.finalize-id9EHg1P.js → onboarding.finalize-DTbpLV-T.js} +8 -8
  94. package/dist/{outbound-Zmd7UyQH.js → outbound-C6Gm22UF.js} +7 -7
  95. package/dist/{outbound-attachment-DeCnZT-8.js → outbound-attachment-BWyKV1Gy.js} +2 -2
  96. package/dist/paths-CYmyCDsE.js +212 -0
  97. package/dist/{paths-CbQV9WEg.js → paths-DEuVuViW.js} +1 -1
  98. package/dist/{pi-auth-json-RXOlh8ar.js → pi-auth-json-Bv1NzJdR.js} +1 -1
  99. package/dist/{pi-embedded-DCBB1_SC.js → pi-embedded-CdOdQw2i.js} +278 -23
  100. package/dist/{pi-embedded-helpers-D1_Sab0M.js → pi-embedded-helpers-DwQ9wJeT.js} +73 -73
  101. package/dist/{pi-embedded-helpers-DjSdA5BG.js → pi-embedded-helpers-TcYQOZAY.js} +4 -4
  102. package/dist/{pi-tools.policy-BZrM6a-w.js → pi-tools.policy-Bx5zp45n.js} +2 -0
  103. package/dist/{pi-tools.policy-QIVWAVVI.js → pi-tools.policy-o0ytjRqu.js} +2 -0
  104. package/dist/{plugin-registry-BJSfTT8c.js → plugin-registry-BrJ0-qlu.js} +1 -1
  105. package/dist/{plugin-registry-Cy1kfzAy.js → plugin-registry-Cuc8ORuR.js} +1 -1
  106. package/dist/plugin-sdk/{accounts-BtaOa4z_.js → accounts-BToL3HlP.js} +1 -1
  107. package/dist/plugin-sdk/{accounts-Ddm33hQm.js → accounts-D9zGZU5t.js} +3 -3
  108. package/dist/plugin-sdk/{accounts-s-AdhXVR.js → accounts-Dtszw3Zn.js} +1 -1
  109. package/dist/plugin-sdk/{active-listener-DYjn3fML.js → active-listener-CJuvR4C2.js} +1 -1
  110. package/dist/plugin-sdk/{agent-scope-CYYpcO9W.js → agent-scope-C3gMMKCU.js} +2 -2
  111. package/dist/plugin-sdk/agents/pi-embedded-runner/long-task-prompt.d.ts +7 -0
  112. package/dist/plugin-sdk/agents/tools/task-tool.d.ts +7 -0
  113. package/dist/plugin-sdk/{api-key-rotation-DGJZ8SVa.js → api-key-rotation-CBsLb_4V.js} +1 -1
  114. package/dist/plugin-sdk/{audio-preflight-CiVw8470.js → audio-preflight-DucGa8w7.js} +24 -24
  115. package/dist/plugin-sdk/{bindings-C7hRtgYW.js → bindings-BbwoUGPx.js} +2 -2
  116. package/dist/plugin-sdk/{channel-activity-DoC1xtDu.js → channel-activity-Ji7f0gqq.js} +1 -1
  117. package/dist/plugin-sdk/{channel-web-BSDjZSwm.js → channel-web-t8UOP6Zu.js} +22 -22
  118. package/dist/plugin-sdk/{chrome-CEqfiEs0.js → chrome-D9kN9org.js} +3 -3
  119. package/dist/plugin-sdk/{chunk-Dw2XBYXv.js → chunk-jvk9axTQ.js} +1 -1
  120. package/dist/plugin-sdk/{command-format-GKSevep4.js → command-format-DSdvQ_M5.js} +1 -1
  121. package/dist/plugin-sdk/{commands-registry-BhW_oGNt.js → commands-registry-BuYpmEx-.js} +4 -4
  122. package/dist/plugin-sdk/{config-Ckum15iC.js → config-BzupW6LN.js} +9 -9
  123. package/dist/plugin-sdk/{consolidate-COuTEt4Z.js → consolidate-CafShdsH.js} +2 -2
  124. package/dist/plugin-sdk/{deliver-B8Y2t-RH.js → deliver-CKgFosI5.js} +10 -10
  125. package/dist/plugin-sdk/{diagnostic-BR07buTm.js → diagnostic-_oc91gNi.js} +1 -1
  126. package/dist/plugin-sdk/{image-CCmNHDV0.js → image-DFyINnvE.js} +4 -4
  127. package/dist/{image-ops-C7CauEK8.js → plugin-sdk/image-ops-Bnp6LXEx.js} +2 -2
  128. package/dist/plugin-sdk/index.js +54 -54
  129. package/dist/plugin-sdk/{ir-BJ6BHE5b.js → ir-Fb3qpcis.js} +4 -4
  130. package/dist/plugin-sdk/{local-roots-BHLNSI8U.js → local-roots-Ckk1QfzI.js} +3 -3
  131. package/dist/plugin-sdk/{login-g_rQAcuM.js → login-K1YB_7-t.js} +7 -7
  132. package/dist/plugin-sdk/{login-qr-BOUmLSY3.js → login-qr-lMl_OqDj.js} +9 -9
  133. package/dist/plugin-sdk/{manager-B9GigLWj.js → manager-BPm5oefC.js} +9 -9
  134. package/dist/plugin-sdk/{manifest-registry-BRx4JDK0.js → manifest-registry-hy3Bn-r9.js} +1 -1
  135. package/dist/plugin-sdk/{markdown-tables-BoYFajMu.js → markdown-tables-Dfaqilz6.js} +1 -1
  136. package/dist/{message-channel-OlFBYAw8.js → plugin-sdk/message-channel-BdI5Ra9S.js} +1 -1
  137. package/dist/plugin-sdk/{model-selection-Bbs4XGPG.js → model-selection-CtVwtb6y.js} +4 -4
  138. package/dist/plugin-sdk/{outbound-BVhSNFy0.js → outbound-DW3cqlQW.js} +7 -7
  139. package/dist/plugin-sdk/{outbound-attachment-B56R1Wi4.js → outbound-attachment-D7ME_Kib.js} +2 -2
  140. package/dist/plugin-sdk/{pi-auth-json-CB2bV0Jd.js → pi-auth-json-DiyK6bgV.js} +1 -1
  141. package/dist/plugin-sdk/{pi-embedded-helpers-dd3G9Hfi.js → pi-embedded-helpers-BL7ZRhGv.js} +17 -17
  142. package/dist/plugin-sdk/{plugins-BNByVCIH.js → plugins-BbAvhC25.js} +4 -4
  143. package/dist/plugin-sdk/{pw-ai-BXeOYCz_.js → pw-ai-B3T0mTHr.js} +8 -8
  144. package/dist/plugin-sdk/{qmd-manager-wIr8qz2n.js → qmd-manager-BlUikj9s.js} +4 -4
  145. package/dist/plugin-sdk/{registry-D0xTnUWt.js → registry--_pGht6S.js} +2 -2
  146. package/dist/plugin-sdk/{replies-CQ4szNhV.js → replies-BR2TPTVW.js} +3 -3
  147. package/dist/plugin-sdk/{reply-DD8z_dUW.js → reply-BKAHTugL.js} +337 -82
  148. package/dist/plugin-sdk/{reply-prefix-uxfMZW4p.js → reply-prefix-BHuV5t70.js} +1 -1
  149. package/dist/plugin-sdk/{resolve-outbound-target-BiyAyTWz.js → resolve-outbound-target-BkCUbYGV.js} +2 -2
  150. package/dist/plugin-sdk/{resolve-route-CWfcnhza.js → resolve-route-CHQ7BTlU.js} +3 -3
  151. package/dist/plugin-sdk/{retry-CwQ_iIj8.js → retry-ilSJqnz9.js} +1 -1
  152. package/dist/plugin-sdk/{runner-BuxCHv_O.js → runner-BhifC1J_.js} +9 -9
  153. package/dist/plugin-sdk/{send-fNRDT21N.js → send-BP5pSPaZ.js} +6 -6
  154. package/dist/plugin-sdk/{send-BtO-7fHs.js → send-CGhw9mO3.js} +6 -6
  155. package/dist/plugin-sdk/{send-CKXzQuXo.js → send-DLO_yV5_.js} +10 -10
  156. package/dist/plugin-sdk/{send-Djq5IPRa.js → send-ZhAe1nXO.js} +10 -10
  157. package/dist/plugin-sdk/{send-XSuwT1PC.js → send-jsofmTfJ.js} +7 -7
  158. package/dist/plugin-sdk/{session-ARbcLHE9.js → session-BfyK_04G.js} +4 -4
  159. package/dist/plugin-sdk/{skill-commands-yzJVuTIW.js → skill-commands-DEfqC_kJ.js} +5 -5
  160. package/dist/plugin-sdk/{skills-BfsaS1F9.js → skills-C9DbB-Kp.js} +7 -7
  161. package/dist/plugin-sdk/{sqlite-A3wGzttn.js → sqlite-CmVrFEYD.js} +1 -1
  162. package/dist/plugin-sdk/{store-BdrNabcU.js → store-Do3t33-c.js} +2 -2
  163. package/dist/plugin-sdk/{subsystem-B2uDN3TV.js → subsystem-Coz2AgU8.js} +1 -1
  164. package/dist/plugin-sdk/{synthesis-Dv5GwSky.js → synthesis-CVF7Fwhd.js} +49 -49
  165. package/dist/plugin-sdk/{tables-DNwXwNFa.js → tables-DR0NmBeH.js} +1 -1
  166. package/dist/{target-errors-DeJTztcq.js → plugin-sdk/target-errors-B7YyMnIi.js} +2 -2
  167. package/dist/plugin-sdk/{thinking-CXqf7WTe.js → thinking-DCNUIAHY.js} +5 -5
  168. package/dist/{tokens-W0JzCJJM.js → plugin-sdk/tokens-CWMflosr.js} +1 -1
  169. package/dist/plugin-sdk/{tool-images-HJ2sfZDV.js → tool-images-D7Lno-TE.js} +2 -2
  170. package/dist/plugin-sdk/{tool-loop-detection-gmtzSlNZ.js → tool-loop-detection-DseOlBug.js} +2 -2
  171. package/dist/plugin-sdk/web-D0DsmFvw.js +66 -0
  172. package/dist/plugin-sdk/{whatsapp-actions-B_1l8JMU.js → whatsapp-actions-eTefsWhW.js} +21 -21
  173. package/dist/{plugins-cli-6UYkZBH0.js → plugins-cli-BDalhI46.js} +5 -5
  174. package/dist/{plugins-cli-DPetEhfv.js → plugins-cli-DFmriy-c.js} +5 -5
  175. package/dist/{plugins-BzmbgY7s.js → plugins-v8k1XVOy.js} +9 -9
  176. package/dist/{program-CVy9LVoS.js → program-DKh41c2a.js} +10 -10
  177. package/dist/{program-context-CBI6gIf-.js → program-context-Cq7pqOrw.js} +19 -19
  178. package/dist/{prompt-select-styled-BlXl_Qf7.js → prompt-select-styled-BFCAZLwK.js} +6 -6
  179. package/dist/{prompt-select-styled-Bv675D48.js → prompt-select-styled-DvvSE_ni.js} +6 -6
  180. package/dist/{provider-auth-helpers-RUQD5XAm.js → provider-auth-helpers-B-LkDxxi.js} +1 -1
  181. package/dist/{provider-auth-helpers-BB1lhCy5.js → provider-auth-helpers-DXppgV1l.js} +1 -1
  182. package/dist/{push-apns-Cr-a1KBt.js → push-apns-DCA47WA5.js} +1 -1
  183. package/dist/{push-apns-rPetW5cI.js → push-apns-DvudhEAb.js} +1 -1
  184. package/dist/{pw-ai-CQtaPvM8.js → pw-ai-40Jf9QIb.js} +1 -1
  185. package/dist/{pw-ai-DWkC5eGA.js → pw-ai-XGqnSWju.js} +11 -11
  186. package/dist/{qmd-manager-BXkbA8Y9.js → qmd-manager-CbRJhonG.js} +8 -8
  187. package/dist/{register.agent-DKDwNHQi.js → register.agent-_BV5KyFb.js} +9 -9
  188. package/dist/{register.agent-j6OlKEU-.js → register.agent-aFj_SMi3.js} +8 -8
  189. package/dist/{register.configure-CopgSygi.js → register.configure-CvOoD5gE.js} +9 -9
  190. package/dist/{register.configure-BgIXIq9d.js → register.configure-Dx0Uhmlz.js} +9 -9
  191. package/dist/{register.maintenance-DjaGkVtr.js → register.maintenance-BuZpoSik.js} +10 -10
  192. package/dist/{register.maintenance-BKsCM6NG.js → register.maintenance-CMeJR7DG.js} +11 -11
  193. package/dist/{register.message-C3oHvmdl.js → register.message-qysZPg3G.js} +5 -5
  194. package/dist/{register.message-bxhUcSyj.js → register.message-xxGePuRC.js} +5 -5
  195. package/dist/{register.onboard-DijWH8Vd.js → register.onboard-1MP2I0q4.js} +7 -7
  196. package/dist/{register.onboard-D0DHcb20.js → register.onboard-D4Aow7Gc.js} +7 -7
  197. package/dist/{register.setup-XlCTnTm_.js → register.setup-BT74aXzA.js} +7 -7
  198. package/dist/{register.setup-CrFzd94c.js → register.setup-DzliKkWh.js} +7 -7
  199. package/dist/{register.status-health-sessions-VwvDWUxZ.js → register.status-health-sessions-B3K2gZ72.js} +7 -7
  200. package/dist/{register.status-health-sessions-AWCg_uLf.js → register.status-health-sessions-D7VYZlrU.js} +7 -7
  201. package/dist/{register.subclis-Bw8k5Z5C.js → register.subclis-BCy0IDRv.js} +10 -10
  202. package/dist/{registry-DYq1AYOv.js → registry-X6fUE0K7.js} +19 -19
  203. package/dist/{replies-CUWXgyx2.js → replies-86F3PldM.js} +3 -3
  204. package/dist/{reply-D7_t00Jt.js → reply-Dg1ZU3DZ.js} +262 -9
  205. package/dist/{reply-prefix-CvEIl6_d.js → reply-prefix-CI_IdwqH.js} +1 -1
  206. package/dist/{resolve-route-Jy5dFY67.js → resolve-route-BgSuN9c6.js} +4 -4
  207. package/dist/{retry-B-y5suGA.js → retry-4oEAHckB.js} +1 -1
  208. package/dist/{run-main-7BEaNeDG.js → run-main-OS2aFAJ2.js} +18 -18
  209. package/dist/{runner-ecX1WzDt.js → runner-B5oNTtgf.js} +22 -22
  210. package/dist/{runner-Dpjulwnm.js → runner-DFuAePEr.js} +1 -1
  211. package/dist/{security-cli-BpnzAB5_.js → security-cli-BadXDWTh.js} +2 -2
  212. package/dist/{security-cli-D9WEiEjD.js → security-cli-D5y28-RH.js} +2 -2
  213. package/dist/{send-DFtnbzqy.js → send-ASDB3AzC.js} +7 -7
  214. package/dist/{send-Bb4it0te.js → send-BTfqlrYd.js} +18 -18
  215. package/dist/{send-C0QjmPaf.js → send-CSydU49L.js} +10 -10
  216. package/dist/{send-Cpk3Ti6-.js → send-Du-IfSne.js} +6 -6
  217. package/dist/{send-BKo1T3HF.js → send-cCTQjuOZ.js} +6 -6
  218. package/dist/{server-methods-CTeJHJSZ.js → server-methods-BszFAkbJ.js} +8 -8
  219. package/dist/{server-methods-FQ-PqiVC.js → server-methods-D_iKJ-sj.js} +8 -8
  220. package/dist/{server-node-events-BqvcHbuK.js → server-node-events-CENHuAVz.js} +5 -5
  221. package/dist/{server-node-events-Z7epDloV.js → server-node-events-uBu3XOjd.js} +5 -5
  222. package/dist/{session-BTeY6Gn2.js → session-D8qLj_xN.js} +8 -8
  223. package/dist/{skill-commands-DG2lcozb.js → skill-commands-BcOduw6G.js} +16 -16
  224. package/dist/{skills-CXxrn_e2.js → skills-BrYDT4Jr.js} +24 -24
  225. package/dist/{sqlite-BN_hIcmu.js → sqlite-P-gMg7fi.js} +3 -3
  226. package/dist/{status-CKROJwI2.js → status-BvbJavmh.js} +1 -1
  227. package/dist/{status-DLFbpd9v.js → status-CA0mUJld.js} +4 -4
  228. package/dist/{status-DMigoL7q.js → status-CBnCPUMG.js} +4 -4
  229. package/dist/{status-x7WCSVhG.js → status-DJAeKN4G.js} +1 -1
  230. package/dist/{store-01F_JM7O.js → store-Ceagbc4L.js} +6 -6
  231. package/dist/{subagent-registry-BvP8AGdE.js → subagent-registry-C1OyZl-M.js} +262 -9
  232. package/dist/{subsystem-BjyjJF-d.js → subsystem-CzXhCdeY.js} +1 -1
  233. package/dist/{synthesis-DgQz6kPf.js → synthesis-DNTyB7JY.js} +7 -7
  234. package/dist/{synthesis-E4flT91F.js → synthesis-DuqSkHEr.js} +54 -54
  235. package/dist/{synthesis-DDId6n26.js → synthesis-brHrnNF2.js} +4 -4
  236. package/dist/{synthesis-By7KPUAm.js → synthesis-z5B41p_r.js} +4 -4
  237. package/dist/{tables-DoG-pFrf.js → tables-qbCoZrYA.js} +1 -1
  238. package/dist/{plugin-sdk/target-errors-Paro1BjP.js → target-errors-uNitqCCT.js} +2 -2
  239. package/dist/{thinking-BprCy23Z.js → thinking-BV7SCNJP.js} +5 -5
  240. package/dist/{plugin-sdk/tokens-bC3UVmVH.js → tokens-Bl5R3wPD.js} +1 -1
  241. package/dist/{tool-images-SqqWIT22.js → tool-images-JxNglLSr.js} +2 -2
  242. package/dist/{tool-loop-detection-Dj9h1ogr.js → tool-loop-detection-dfE771kg.js} +3 -3
  243. package/dist/{unified-runner-DaSb-TsZ.js → unified-runner-Czg3pdBc.js} +488 -233
  244. package/dist/{update-cli-D0relAZw.js → update-cli-0lyGyl31.js} +11 -11
  245. package/dist/{update-cli-C5H6DkNM.js → update-cli-CIzkVfmj.js} +10 -10
  246. package/dist/{update-runner-D99V_zHX.js → update-runner-D7-LDziQ.js} +1 -1
  247. package/dist/{update-runner-B_yVOk8Z.js → update-runner-aYPcKYAN.js} +1 -1
  248. package/dist/{web-BBz1kF_9.js → web-B90A99YU.js} +58 -58
  249. package/dist/{web-Bdebat5l.js → web-BJ5dUZso.js} +5 -5
  250. package/dist/{web-BQh2S6oq.js → web-CN7wnU7w.js} +4 -4
  251. package/dist/{web-CiYoJfrl.js → web-Wk1ay1eQ.js} +7 -7
  252. package/dist/{whatsapp-actions-DmVpLXmh.js → whatsapp-actions-llk0IUn2.js} +23 -23
  253. package/dist/{workspace-DscDraUb.js → workspace-CywO4ayZ.js} +27 -27
  254. package/extensions/bluebubbles/package.json +1 -1
  255. package/extensions/copilot-proxy/package.json +1 -1
  256. package/extensions/diagnostics-otel/package.json +1 -1
  257. package/extensions/discord/package.json +1 -1
  258. package/extensions/feishu/package.json +1 -1
  259. package/extensions/google-antigravity-auth/package.json +1 -1
  260. package/extensions/google-gemini-cli-auth/package.json +1 -1
  261. package/extensions/googlechat/package.json +1 -1
  262. package/extensions/imessage/package.json +1 -1
  263. package/extensions/irc/package.json +1 -1
  264. package/extensions/learning-loop/package.json +1 -1
  265. package/extensions/line/package.json +1 -1
  266. package/extensions/llm-task/package.json +1 -1
  267. package/extensions/matrix/CHANGELOG.md +6 -0
  268. package/extensions/matrix/package.json +1 -1
  269. package/extensions/mattermost/package.json +1 -1
  270. package/extensions/memory-core/package.json +1 -1
  271. package/extensions/memory-lancedb/package.json +1 -1
  272. package/extensions/minimax-portal-auth/package.json +1 -1
  273. package/extensions/msteams/CHANGELOG.md +6 -0
  274. package/extensions/msteams/package.json +1 -1
  275. package/extensions/nextcloud-talk/package.json +1 -1
  276. package/extensions/nostr/CHANGELOG.md +6 -0
  277. package/extensions/nostr/package.json +1 -1
  278. package/extensions/open-prose/package.json +1 -1
  279. package/extensions/outlook/package.json +1 -1
  280. package/extensions/pipeline/package.json +1 -1
  281. package/extensions/signal/package.json +1 -1
  282. package/extensions/slack/package.json +1 -1
  283. package/extensions/telegram/package.json +1 -1
  284. package/extensions/tlon/package.json +1 -1
  285. package/extensions/twitch/CHANGELOG.md +6 -0
  286. package/extensions/twitch/package.json +1 -1
  287. package/extensions/voice-call/CHANGELOG.md +6 -0
  288. package/extensions/voice-call/package.json +1 -1
  289. package/extensions/whatsapp/package.json +1 -1
  290. package/extensions/zalo/CHANGELOG.md +6 -0
  291. package/extensions/zalo/package.json +1 -1
  292. package/extensions/zalouser/CHANGELOG.md +6 -0
  293. package/extensions/zalouser/package.json +1 -1
  294. package/package.json +1 -1
  295. package/dist/plugin-sdk/web-CmKqZEsX.js +0 -66
@@ -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-BlRNLVfU.js")).registerGatewayCli(program);
52
+ (await import("./gateway-cli-C6uT2x34.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-DV-J1cm0.js")).registerModelsCli(program);
84
+ (await import("./models-cli-CYvXBvmZ.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-DdSggQYs.js")).registerHooksCli(program);
164
+ (await import("./hooks-cli-DSaezFsD.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-D4WYEtu4.js");
188
+ const { registerPluginCliCommands } = await import("./cli-DjZzJy3t.js");
189
189
  registerPluginCliCommands(program, await loadConfig());
190
190
  (await import("./pairing-cli-7X1qlhzF.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-6UYkZBH0.js")).registerPluginsCli(program);
199
- const { registerPluginCliCommands } = await import("./cli-D4WYEtu4.js");
198
+ (await import("./plugins-cli-BDalhI46.js")).registerPluginsCli(program);
199
+ const { registerPluginCliCommands } = await import("./cli-DjZzJy3t.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-Q6Q8LokG.js")).registerChannelsCli(program);
208
+ (await import("./channels-cli-Dk3kUw9A.js")).registerChannelsCli(program);
209
209
  }
210
210
  },
211
211
  {
@@ -221,7 +221,7 @@ const entries = [
221
221
  description: "Security tools and local config audits",
222
222
  hasSubcommands: true,
223
223
  register: async (program) => {
224
- (await import("./security-cli-BpnzAB5_.js")).registerSecurityCli(program);
224
+ (await import("./security-cli-BadXDWTh.js")).registerSecurityCli(program);
225
225
  }
226
226
  },
227
227
  {
@@ -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-D0relAZw.js")).registerUpdateCli(program);
240
+ (await import("./update-cli-0lyGyl31.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-C5GCKfKT.js").then((n) => n.n)).registerCompletionCli(program);
248
+ (await import("./completion-cli-Cf6fYZWL.js").then((n) => n.n)).registerCompletionCli(program);
249
249
  }
250
250
  }
251
251
  ];
@@ -1,9 +1,9 @@
1
- import { a as resolveOAuthDir, c as expandHomePrefix, l as resolveEffectiveHomeDir, n as resolveConfigPath, u as resolveRequiredHomeDir } from "./paths-CE7eVGHg.js";
1
+ import { a as resolveOAuthDir, c as expandHomePrefix, l as resolveEffectiveHomeDir, n as resolveConfigPath, u as resolveRequiredHomeDir } from "./paths-CYmyCDsE.js";
2
2
  import path from "node:path";
3
- import fs from "node:fs";
3
+ import fsSync from "node:fs";
4
4
  import os from "node:os";
5
5
  import { Logger } from "tslog";
6
- import JSON5 from "json5";
6
+ import json5 from "json5";
7
7
  import chalk, { Chalk } from "chalk";
8
8
 
9
9
  //#region src/infra/tmp-symi-dir.ts
@@ -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,9 +68,9 @@ 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");
73
- const logging = JSON5.parse(raw)?.logging;
71
+ if (!fsSync.existsSync(configPath)) return;
72
+ const raw = fsSync.readFileSync(configPath, "utf-8");
73
+ const logging = json5.parse(raw)?.logging;
74
74
  if (!logging || typeof logging !== "object" || Array.isArray(logging)) return;
75
75
  return logging;
76
76
  } catch {
@@ -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 { r as markdownToSlackMrkdwnChunks, t as sendMessageSlack } from "./send-BKo1T3HF.js";
3
- import { a as isSilentReplyText, n as SILENT_REPLY_TOKEN } from "./tokens-W0JzCJJM.js";
4
- import { i as chunkMarkdownTextWithMode } from "./chunk-BRe1o4Af.js";
2
+ import { r as markdownToSlackMrkdwnChunks, t as sendMessageSlack } from "./send-cCTQjuOZ.js";
3
+ import { a as isSilentReplyText, n as SILENT_REPLY_TOKEN } from "./tokens-Bl5R3wPD.js";
4
+ import { i as chunkMarkdownTextWithMode } from "./chunk-BcxcL1U3.js";
5
5
 
6
6
  //#region src/auto-reply/reply/reply-reference.ts
7
7
  function createReplyReferencePlanner(options) {
@@ -60,8 +60,8 @@ import { r as getDiagnosticSessionState } from "./diagnostic-session-state-CUslJ
60
60
  import { A as hasBotMention, B as resolveSenderAllowMatch, C as buildTelegramGroupPeerId, D as describeReplyTarget, E as buildTypingThreadParams, F as resolveTelegramReplyId, G as toLocationContext, H as isSenderIdAllowed, I as resolveTelegramStreamMode, J as parseTelegramTarget, K as withTelegramApiErrorLogging, L as resolveTelegramThreadSpec, M as resolveTelegramForumThreadId, N as resolveTelegramGroupAllowFromContext, O as expandTextLinks, P as resolveTelegramMediaPlaceholder, R as isSenderAllowed$1, S as buildTelegramGroupFrom, T as buildTelegramThreadParams, U as mergeAllowFromSources, V as firstDefined$1, W as formatLocationText, Y as resolveTelegramTargetChatType, _ as resolveTelegramFetch, a as reactMessageTelegram, b as buildSenderLabel, c as sendStickerTelegram, d as wasSentByBot, f as isRecoverableTelegramNetworkError, g as wrapFileReferencesInHtml, h as renderTelegramHtmlText, i as editMessageTelegram, j as normalizeForwardedContext, k as extractTelegramLocation, m as markdownToTelegramHtml, n as createForumTopicTelegram, o as sendMessageTelegram, p as markdownToTelegramChunks, q as isVoiceCompatibleAudio, r as deleteMessageTelegram, s as sendPollTelegram, t as buildInlineKeyboard, u as resolveTelegramVoiceSend, v as splitTelegramCaption, w as buildTelegramParentPeer, x as buildSenderName, y as buildGroupLabel, z as normalizeAllowFromWithStore$1 } from "./send-DpMnSIi5.js";
61
61
  import { a as buildModelAliasLines, n as resolveModel } from "./model-ECsJuJew.js";
62
62
  import { a as resolveAgentIdentity, i as resolveAckReaction, o as resolveEffectiveMessagesConfig, r as resolveResponsePrefixTemplate, s as resolveHumanDelayConfig, t as createReplyPrefixOptions } from "./reply-prefix-CE2YmmsD.js";
63
- import { i as resolveMemoryBackendConfig, n as registerMemoryCli, r as getMemorySearchManager } from "./memory-cli-0jm-n36m.js";
64
- import { a as resolveMemorySearchConfig, t as MemoryIndexManager } from "./manager-TOeH0D8K.js";
63
+ import { i as resolveMemoryBackendConfig, n as registerMemoryCli, r as getMemorySearchManager } from "./memory-cli-ENCASZJk.js";
64
+ import { a as resolveMemorySearchConfig, t as MemoryIndexManager } from "./manager-DrmlegR2.js";
65
65
  import { n as retryAsync } from "./retry-BoS4e4X_.js";
66
66
  import { c as imageResultFromFile, d as readNumberParam, f as readReactionParams, h as readStringParam, l as jsonResult, m as readStringOrNumberParam, n as missingTargetError, o as createActionGate, p as readStringArrayParam, r as unknownTargetError, s as imageResult, t as ambiguousTargetError, u as parseAvailableTags } from "./target-errors-C9e6dMU_.js";
67
67
  import { a as chunkText, c as resolveChunkMode, d as isSafeFenceBreak, f as parseFenceSpans, i as chunkMarkdownTextWithMode, l as resolveTextChunkLimit, o as chunkTextWithMode, r as chunkMarkdownText, t as chunkByNewline, u as findFenceSpanAt } from "./chunk-DIi9uyC6.js";
@@ -94,7 +94,7 @@ import { _ as getTrustedSafeBinDirs, b as buildSafeShellCommand, d as resolveExe
94
94
  import { a as canvasSnapshotTempPath, c as parseCameraClipPayload, d as writeCameraClipPayloadToFile, f as writeUrlToFile, g as normalizePathPrepend, h as mergePathPrepend, i as parseEnvPairs, l as parseCameraSnapPayload, m as applyPathPrepend, n as screenRecordTempPath, o as parseCanvasSnapshotPayload, p as buildNodeShellCommand, r as writeScreenRecordToFile, s as cameraTempPath, t as parseScreenRecordPayload, u as writeBase64ToFile } from "./nodes-screen-BZS89z6C.js";
95
95
  import { n as parseNodeList, r as parsePairingList, t as resolveNodeIdFromCandidates } from "./node-match-D3rffA64.js";
96
96
  import { n as recordCommandPoll, r as resetCommandPollCount } from "./command-poll-backoff-CjL9F9WT.js";
97
- import { a as resolveSubagentToolPolicy, i as resolveGroupToolPolicy, n as isToolAllowedByPolicies, r as resolveEffectiveToolPolicy, t as filterToolsByPolicy } from "./pi-tools.policy-BZrM6a-w.js";
97
+ import { a as resolveSubagentToolPolicy, i as resolveGroupToolPolicy, n as isToolAllowedByPolicies, r as resolveEffectiveToolPolicy, t as filterToolsByPolicy } from "./pi-tools.policy-Bx5zp45n.js";
98
98
  import { n as createBrowserControlContext, r as startBrowserControlServiceFromConfig } from "./control-service-C0pRqIFv.js";
99
99
  import { i as parseAbsoluteTimeMs, r as resolveDefaultCronStaggerMs, t as normalizeCronStaggerMs } from "./stagger-CZ1Rrj7O.js";
100
100
  import { c as resolveGatewayLaunchAgentLabel, d as resolveGatewaySystemdServiceName } from "./constants-DF8wPn-_.js";
@@ -28996,6 +28996,7 @@ async function resolveDetachScriptPath(params) {
28996
28996
  return cachedScriptPath;
28997
28997
  }
28998
28998
  async function buildLongTaskPromptSuffix(params) {
28999
+ if (params.cronEnabled === false) return "";
28999
29000
  const scriptPath = await resolveDetachScriptPath(params);
29000
29001
  if (!scriptPath) return "";
29001
29002
  return "\n\n" + [
@@ -29015,7 +29016,8 @@ async function buildLongTaskPromptSuffix(params) {
29015
29016
  " • If status begins with `running`: tail -n 20 <log>, post a one-sentence progress line.",
29016
29017
  " • If status begins with `complete`: post a final summary with rc and tail, then call cron action=remove on this job id.",
29017
29018
  " • If status begins with `aborted`: post a failure summary with signal and tail, then call cron action=remove.",
29018
- " • Never leave stale monitors running after the task finishes."
29019
+ " • Never leave stale monitors running after the task finishes.",
29020
+ "- Inspecting and killing tasks: use `task_list` to enumerate detached tasks in the workspace (returns id/pid/alive/status/started for each), and `task_cancel` with `taskId` (and optional `signal`, default SIGTERM) to terminate a running task. Prefer these over raw `kill`/`ps` exec calls — they share the detach script's task-id allow-list and report alreadyDead cleanly."
29019
29021
  ].join("\n");
29020
29022
  }
29021
29023
 
@@ -30088,7 +30090,8 @@ async function runEmbeddedAttempt(params) {
30088
30090
  const longTaskSuffix = await buildLongTaskPromptSuffix({
30089
30091
  argv1: process.argv[1],
30090
30092
  cwd: process.cwd(),
30091
- moduleUrl: import.meta.url
30093
+ moduleUrl: import.meta.url,
30094
+ cronEnabled: process.env.SYMI_SKIP_CRON !== "1" && params.config?.cron?.enabled !== false
30092
30095
  });
30093
30096
  const emailCapabilitySuffix = buildEmailCapabilityPromptSuffix();
30094
30097
  const systemPromptText = createSystemPromptOverride(appendPrompt + longTaskSuffix + emailCapabilitySuffix + profilePromptSuffix)();
@@ -31932,7 +31935,7 @@ async function runAgentTurn(params) {
31932
31935
  function createDefaultDeps() {
31933
31936
  return {
31934
31937
  sendMessageWhatsApp: async (...args) => {
31935
- const { sendMessageWhatsApp } = await import("./web-Bdebat5l.js");
31938
+ const { sendMessageWhatsApp } = await import("./web-BJ5dUZso.js");
31936
31939
  return await sendMessageWhatsApp(...args);
31937
31940
  },
31938
31941
  sendMessageTelegram: async (...args) => {
@@ -50363,7 +50366,7 @@ function loadWebLoginQr() {
50363
50366
  return webLoginQrPromise;
50364
50367
  }
50365
50368
  function loadWebChannel() {
50366
- webChannelPromise ??= import("./web-Bdebat5l.js");
50369
+ webChannelPromise ??= import("./web-BJ5dUZso.js");
50367
50370
  return webChannelPromise;
50368
50371
  }
50369
50372
  function loadWhatsAppActions() {
@@ -52119,7 +52122,7 @@ async function resolveSandboxWorkdir(params) {
52119
52122
  };
52120
52123
  }
52121
52124
  }
52122
- function resolveWorkdir(workdir, warnings) {
52125
+ function resolveWorkdir$1(workdir, warnings) {
52123
52126
  const fallback = safeCwd() ?? homedir();
52124
52127
  try {
52125
52128
  if (statSync(workdir).isDirectory()) return workdir;
@@ -53191,7 +53194,7 @@ function createExecTool(defaults) {
53191
53194
  });
53192
53195
  workdir = resolved.hostWorkdir;
53193
53196
  containerWorkdir = resolved.containerWorkdir;
53194
- } else workdir = resolveWorkdir(rawWorkdir, warnings);
53197
+ } else workdir = resolveWorkdir$1(rawWorkdir, warnings);
53195
53198
  const baseEnv = coerceEnv(process.env);
53196
53199
  if (host !== "sandbox" && params.env) validateHostEnv(params.env);
53197
53200
  const mergedEnv = params.env ? {
@@ -63408,6 +63411,254 @@ function createSubagentsTool(opts) {
63408
63411
  };
63409
63412
  }
63410
63413
 
63414
+ //#endregion
63415
+ //#region src/agents/tools/task-tool.ts
63416
+ /**
63417
+ * Long-task management tools (task_list, task_cancel).
63418
+ *
63419
+ * Companions to the detach-task pattern in skills/long-task. The detach
63420
+ * script writes task-<id>.{pid,cmd,started,log,status} state files into
63421
+ * the agent's workspace; these tools read and act on those files so the
63422
+ * agent can answer "what's running?" and kill a task without needing
63423
+ * shell access.
63424
+ *
63425
+ * task-id allow-list mirrors detach-task.sh: 1–60 chars from
63426
+ * [a-zA-Z0-9._-], must not start with '.' or '-'. Diverging would let the
63427
+ * agent kill processes it never spawned via path traversal.
63428
+ */
63429
+ const TASK_FILE_PREFIX = "task-";
63430
+ const TASK_ID_RE = /^[a-zA-Z0-9_][a-zA-Z0-9._-]{0,59}$/;
63431
+ const TASK_FILE_SUFFIXES = [
63432
+ ".pid",
63433
+ ".status",
63434
+ ".started",
63435
+ ".cmd",
63436
+ ".log"
63437
+ ];
63438
+ const ALLOWED_SIGNALS = new Set([
63439
+ "SIGTERM",
63440
+ "SIGINT",
63441
+ "SIGHUP",
63442
+ "SIGQUIT",
63443
+ "SIGKILL",
63444
+ "SIGUSR1",
63445
+ "SIGUSR2"
63446
+ ]);
63447
+ const TaskListSchema = Type.Object({ workdir: Type.Optional(Type.String()) });
63448
+ const TaskCancelSchema = Type.Object({
63449
+ taskId: Type.String(),
63450
+ workdir: Type.Optional(Type.String()),
63451
+ signal: Type.Optional(Type.String())
63452
+ });
63453
+ function normaliseSignal(input) {
63454
+ if (!input) return "SIGTERM";
63455
+ const upper = input.trim().toUpperCase();
63456
+ const candidate = upper.startsWith("SIG") ? upper : `SIG${upper}`;
63457
+ if (ALLOWED_SIGNALS.has(candidate)) return candidate;
63458
+ throw new Error(`Unsupported signal: ${input}. Allowed: TERM, INT, HUP, QUIT, KILL, USR1, USR2.`);
63459
+ }
63460
+ function isPidAlive(pid) {
63461
+ try {
63462
+ process.kill(pid, 0);
63463
+ return true;
63464
+ } catch (err) {
63465
+ if (err.code === "EPERM") return true;
63466
+ return false;
63467
+ }
63468
+ }
63469
+ async function safeRead(filePath) {
63470
+ try {
63471
+ return (await fs.promises.readFile(filePath, "utf8")).trim();
63472
+ } catch {
63473
+ return null;
63474
+ }
63475
+ }
63476
+ function resolveWorkdir(deps, override) {
63477
+ const raw = override?.trim();
63478
+ if (!raw) return deps.workspaceDir;
63479
+ if (!path.isAbsolute(raw)) throw new Error(`workdir must be an absolute path (got: ${raw})`);
63480
+ return raw;
63481
+ }
63482
+ async function readTaskInfo(workdir, id) {
63483
+ const pidPath = path.join(workdir, `${TASK_FILE_PREFIX}${id}.pid`);
63484
+ const [pidText, status, started, cmd] = await Promise.all([
63485
+ safeRead(pidPath),
63486
+ safeRead(path.join(workdir, `${TASK_FILE_PREFIX}${id}.status`)),
63487
+ safeRead(path.join(workdir, `${TASK_FILE_PREFIX}${id}.started`)),
63488
+ safeRead(path.join(workdir, `${TASK_FILE_PREFIX}${id}.cmd`))
63489
+ ]);
63490
+ let pid = null;
63491
+ if (pidText) {
63492
+ const parsed = Number.parseInt(pidText, 10);
63493
+ if (Number.isFinite(parsed) && parsed > 0) pid = parsed;
63494
+ }
63495
+ return {
63496
+ id,
63497
+ pid,
63498
+ alive: pid !== null && isPidAlive(pid),
63499
+ status: status ?? "missing",
63500
+ started,
63501
+ cmd,
63502
+ pidPath,
63503
+ statusPath: path.join(workdir, `${TASK_FILE_PREFIX}${id}.status`),
63504
+ logPath: path.join(workdir, `${TASK_FILE_PREFIX}${id}.log`)
63505
+ };
63506
+ }
63507
+ function createTaskListTool(deps) {
63508
+ return {
63509
+ label: "Task List",
63510
+ name: "task_list",
63511
+ description: `List long-running detached tasks in the agent's workspace.
63512
+
63513
+ Globs task-<id>.{pid,status,started,cmd,log} files, reads their state, and
63514
+ checks each PID's liveness. Use this to find the task-id of a running
63515
+ detach-task before calling task_cancel, or to answer "what's running right
63516
+ now?" without re-asking the user.
63517
+
63518
+ Returns: { workdir, tasks: [{ id, pid, alive, status, started, cmd, pidPath, statusPath, logPath }] }.
63519
+ Tasks whose .pid file is missing are still listed (alive=false, pid=null) so
63520
+ the agent can spot orphan state files.`,
63521
+ parameters: TaskListSchema,
63522
+ execute: async (_toolCallId, args) => {
63523
+ const override = readStringParam(args, "workdir");
63524
+ let workdir;
63525
+ try {
63526
+ workdir = resolveWorkdir(deps, override);
63527
+ } catch (err) {
63528
+ return jsonResult({
63529
+ workdir: override ?? deps.workspaceDir,
63530
+ tasks: [],
63531
+ error: err instanceof Error ? err.message : String(err)
63532
+ });
63533
+ }
63534
+ let entries;
63535
+ try {
63536
+ entries = await fs.promises.readdir(workdir);
63537
+ } catch (err) {
63538
+ if (err.code === "ENOENT") return jsonResult({
63539
+ workdir,
63540
+ tasks: []
63541
+ });
63542
+ return jsonResult({
63543
+ workdir,
63544
+ tasks: [],
63545
+ error: err instanceof Error ? err.message : String(err)
63546
+ });
63547
+ }
63548
+ const taskIds = /* @__PURE__ */ new Set();
63549
+ for (const entry of entries) {
63550
+ if (!entry.startsWith(TASK_FILE_PREFIX)) continue;
63551
+ for (const suffix of TASK_FILE_SUFFIXES) if (entry.endsWith(suffix)) {
63552
+ const id = entry.slice(5, -suffix.length);
63553
+ if (id.length > 0 && TASK_ID_RE.test(id)) taskIds.add(id);
63554
+ break;
63555
+ }
63556
+ }
63557
+ const tasks = await Promise.all([...taskIds].toSorted().map((id) => readTaskInfo(workdir, id)));
63558
+ return jsonResult({
63559
+ workdir,
63560
+ tasks
63561
+ });
63562
+ }
63563
+ };
63564
+ }
63565
+ function createTaskCancelTool(deps) {
63566
+ return {
63567
+ label: "Task Cancel",
63568
+ name: "task_cancel",
63569
+ description: `Send a signal (default SIGTERM) to a running detached task.
63570
+
63571
+ Reads task-<id>.pid in the workdir, validates the recorded PID is alive,
63572
+ and sends the signal via process.kill. The task's TERM/INT/HUP trap will
63573
+ write an "aborted" status before exiting, so a follow-up task_list call
63574
+ sees the canonical end state.
63575
+
63576
+ task-id must match the same allow-list as detach-task.sh: 1–60 chars from
63577
+ [a-zA-Z0-9._-], no leading '.' or '-'. signal accepts TERM (default), INT,
63578
+ HUP, QUIT, KILL, USR1, USR2 — with or without the "SIG" prefix.
63579
+
63580
+ Returns: { ok, taskId, pid, sentSignal, alreadyDead?, error? }.`,
63581
+ parameters: TaskCancelSchema,
63582
+ execute: async (_toolCallId, args) => {
63583
+ const params = args;
63584
+ const taskId = readStringParam(params, "taskId", { required: true });
63585
+ if (!TASK_ID_RE.test(taskId)) return jsonResult({
63586
+ ok: false,
63587
+ taskId,
63588
+ error: "taskId must be 1–60 chars from [a-zA-Z0-9._-] and must not start with '.' or '-'."
63589
+ });
63590
+ const override = readStringParam(params, "workdir");
63591
+ let workdir;
63592
+ try {
63593
+ workdir = resolveWorkdir(deps, override);
63594
+ } catch (err) {
63595
+ return jsonResult({
63596
+ ok: false,
63597
+ taskId,
63598
+ error: err instanceof Error ? err.message : String(err)
63599
+ });
63600
+ }
63601
+ const signalRaw = readStringParam(params, "signal");
63602
+ let signal;
63603
+ try {
63604
+ signal = normaliseSignal(signalRaw);
63605
+ } catch (err) {
63606
+ return jsonResult({
63607
+ ok: false,
63608
+ taskId,
63609
+ error: err instanceof Error ? err.message : String(err)
63610
+ });
63611
+ }
63612
+ const pidPath = path.join(workdir, `${TASK_FILE_PREFIX}${taskId}.pid`);
63613
+ let pidText;
63614
+ try {
63615
+ pidText = (await fs.promises.readFile(pidPath, "utf8")).trim();
63616
+ } catch (err) {
63617
+ if (err.code === "ENOENT") return jsonResult({
63618
+ ok: false,
63619
+ taskId,
63620
+ error: `no pid file at ${pidPath} — task is unknown or already cleaned up`
63621
+ });
63622
+ return jsonResult({
63623
+ ok: false,
63624
+ taskId,
63625
+ error: err instanceof Error ? err.message : String(err)
63626
+ });
63627
+ }
63628
+ const pid = Number.parseInt(pidText, 10);
63629
+ if (!Number.isFinite(pid) || pid <= 0) return jsonResult({
63630
+ ok: false,
63631
+ taskId,
63632
+ error: `pid file at ${pidPath} did not contain a positive integer`
63633
+ });
63634
+ if (!isPidAlive(pid)) return jsonResult({
63635
+ ok: false,
63636
+ taskId,
63637
+ pid,
63638
+ alreadyDead: true,
63639
+ error: "process is no longer running"
63640
+ });
63641
+ try {
63642
+ process.kill(pid, signal);
63643
+ } catch (err) {
63644
+ return jsonResult({
63645
+ ok: false,
63646
+ taskId,
63647
+ pid,
63648
+ sentSignal: signal,
63649
+ error: err instanceof Error ? err.message : String(err)
63650
+ });
63651
+ }
63652
+ return jsonResult({
63653
+ ok: true,
63654
+ taskId,
63655
+ pid,
63656
+ sentSignal: signal
63657
+ });
63658
+ }
63659
+ };
63660
+ }
63661
+
63411
63662
  //#endregion
63412
63663
  //#region src/agents/tools/tts-tool.ts
63413
63664
  const TtsToolSchema = Type.Object({
@@ -64708,6 +64959,8 @@ function createSymiTools(options) {
64708
64959
  config: options?.config
64709
64960
  }),
64710
64961
  createCronTool({ agentSessionKey: options?.agentSessionKey }),
64962
+ createTaskListTool({ workspaceDir }),
64963
+ createTaskCancelTool({ workspaceDir }),
64711
64964
  ...messageTool ? [messageTool] : [],
64712
64965
  createTtsTool({
64713
64966
  agentChannel: options?.agentChannel,
@@ -1,5 +1,5 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-Cbj13DAv.js";
2
- import { n as resolveAgentConfig } from "./agent-scope-CpEJ0B88.js";
2
+ import { n as resolveAgentConfig } from "./agent-scope-Cpm7a9ss.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-DYq1AYOv.js";
4
- import { c as resolveDefaultAgentId } from "./agent-scope-CpEJ0B88.js";
5
- import { y as logDebug } from "./workspace-DscDraUb.js";
3
+ import { Z as shouldLogVerbose } from "./registry-X6fUE0K7.js";
4
+ import { c as resolveDefaultAgentId } from "./agent-scope-Cpm7a9ss.js";
5
+ import { y as logDebug } from "./workspace-CywO4ayZ.js";
6
6
  import { t as normalizeChatType } from "./chat-type-3FRbbjbq.js";
7
- import { t as listBindings } from "./bindings-BsHoBLIE.js";
7
+ import { t as listBindings } from "./bindings-xcRox9xM.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-DYq1AYOv.js";
1
+ import { B as sleep } from "./registry-X6fUE0K7.js";
2
2
 
3
3
  //#region src/infra/retry.ts
4
4
  const DEFAULT_RETRY_CONFIG = {