@symerian/symi 2.8.12 → 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 (229) 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-OAonMxYV.js → agents-DlAvDWxz.js} +4 -4
  7. package/dist/{agents.config-BIhaDwT2.js → agents.config-BKKMbeeE.js} +1 -1
  8. package/dist/{agents.config-DGu_K5xz.js → agents.config-Dd-11klq.js} +1 -1
  9. package/dist/{audio-preflight-Cb-T0r6e.js → audio-preflight-rrz8KyHd.js} +29 -29
  10. package/dist/{audit-Bi9Je9FZ.js → audit-BhCJV2l6.js} +1 -1
  11. package/dist/{audit-Oa5dsn5p.js → audit-CB97BqHJ.js} +1 -1
  12. package/dist/{auth-choice-BvPX7B4c.js → auth-choice-C6woT6k2.js} +1 -1
  13. package/dist/{auth-choice-DDzWns1k.js → auth-choice-CRQRPwQt.js} +1 -1
  14. package/dist/{auth-profiles-C2vj6htZ.js → auth-profiles-BzB_Exeq.js} +17 -17
  15. package/dist/{banner-BFdiq-O5.js → banner-DrNha2_N.js} +1 -1
  16. package/dist/{bindings-BsHoBLIE.js → bindings-xcRox9xM.js} +2 -2
  17. package/dist/build-info.json +3 -3
  18. package/dist/bundled/boot-md/handler.js +54 -54
  19. package/dist/bundled/bootstrap-extra-files/handler.js +5 -5
  20. package/dist/bundled/command-logger/handler.js +1 -1
  21. package/dist/bundled/session-memory/handler.js +54 -54
  22. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  23. package/dist/{channel-activity-D8QD7GoV.js → channel-activity-CzHaIUAp.js} +1 -1
  24. package/dist/{channel-options-DTqUB0OP.js → channel-options-D8q9En4T.js} +1 -1
  25. package/dist/{channel-options-tfnOGSNF.js → channel-options-DYy2sCfN.js} +1 -1
  26. package/dist/{channel-web-CcUXobcu.js → channel-web-CRBU4eZk.js} +1 -1
  27. package/dist/{channels-cli-CmShA-wJ.js → channels-cli-BUk43hHR.js} +7 -7
  28. package/dist/{channels-cli-BcE5tHIr.js → channels-cli-Dk3kUw9A.js} +7 -7
  29. package/dist/{chrome-ROtrXlNs.js → chrome-DwXnykXR.js} +14 -14
  30. package/dist/{chunk-BRe1o4Af.js → chunk-BcxcL1U3.js} +1 -1
  31. package/dist/{cli-BxoD2wzk.js → cli-5gWsnsB7.js} +4 -4
  32. package/dist/{cli-CKG2iAr3.js → cli-DjZzJy3t.js} +4 -4
  33. package/dist/{command-registry-D1Le-Fmh.js → command-registry-LjFltTU9.js} +10 -10
  34. package/dist/{commands-registry-DxbSTLNQ.js → commands-registry-ByGkL6hs.js} +4 -4
  35. package/dist/{completion-cli-DgiFjSGS.js → completion-cli-BVTGy8th.js} +1 -1
  36. package/dist/{completion-cli-D9pC-ttw.js → completion-cli-Cf6fYZWL.js} +2 -2
  37. package/dist/{config-BkZ9HOKT.js → config-C4WnAd-c.js} +17 -17
  38. package/dist/{config-cli-C_uZQsTl.js → config-cli-C7DIbGxx.js} +1 -1
  39. package/dist/{config-cli-5mFA0UDP.js → config-cli-EgWrCemi.js} +1 -1
  40. package/dist/{configure-BJcy7wXm.js → configure-B67uIawm.js} +3 -3
  41. package/dist/{configure-DuRTFCuW.js → configure-Bk-snuxh.js} +3 -3
  42. package/dist/{consolidate-07QMweFF.js → consolidate-DRtVvG2U.js} +4 -4
  43. package/dist/{deliver-B0OUq6RP.js → deliver-SLYAWE19.js} +20 -20
  44. package/dist/{diagnostic-BUcR3Meg.js → diagnostic-DTkZsRNM.js} +1 -1
  45. package/dist/{doctor-completion-sQVhKKei.js → doctor-completion-By066O3p.js} +1 -1
  46. package/dist/{doctor-completion-DCRTHpiY.js → doctor-completion-lE_33xaY.js} +1 -1
  47. package/dist/entry.js +1 -1
  48. package/dist/{env-BDXYbTKj.js → env-CB65jmJQ.js} +1 -1
  49. package/dist/extensionAPI.js +2 -2
  50. package/dist/{frontmatter-CTR5f_Ez.js → frontmatter-CT1M0pRK.js} +4 -4
  51. package/dist/{gateway-cli-C3ujhxO0.js → gateway-cli-C6uT2x34.js} +182 -13
  52. package/dist/{gateway-cli-C_MT4JFm.js → gateway-cli-DqEgqVKC.js} +182 -13
  53. package/dist/{gemini-auth-BefM10YB.js → gemini-auth-D80BsXr2.js} +1 -1
  54. package/dist/{github-copilot-token-cCYzSU9h.js → github-copilot-token-B8B2pmph.js} +7 -7
  55. package/dist/{glass-ui-ws-ColAiWUr.js → glass-ui-ws-77TY57IO.js} +11 -11
  56. package/dist/{glass-ui-ws-B7zRY2BL.js → glass-ui-ws-CLAUHeZR.js} +11 -11
  57. package/dist/{health-C12hy3Ao.js → health-2jkjZxY8.js} +1 -1
  58. package/dist/{health-vKJZ7iJR.js → health-CvMHgR-L.js} +1 -1
  59. package/dist/{hooks-cli-CdUQvj8s.js → hooks-cli-CRZySOiz.js} +5 -5
  60. package/dist/{hooks-cli-fCPl5hur.js → hooks-cli-DSaezFsD.js} +5 -5
  61. package/dist/{image-BuVL0jHI.js → image-BHF_fnIp.js} +4 -4
  62. package/dist/{image-ops-C7CauEK8.js → image-ops-CY7v6vvp.js} +16 -16
  63. package/dist/index.js +9 -9
  64. package/dist/{internal-DjnxpF_K.js → internal-FNqguZSK.js} +11 -11
  65. package/dist/{ir-7tMVY7D_.js → ir-D6MiJpAy.js} +4 -4
  66. package/dist/llm-slug-generator.js +54 -54
  67. package/dist/{local-roots-ClipCZ9s.js → local-roots-tcdaIEhh.js} +5 -5
  68. package/dist/{login-D4rZWBXe.js → login-D4ZkmSrY.js} +7 -7
  69. package/dist/{login-qr-DdAVHOEC.js → login-qr-C9ftIq3n.js} +12 -12
  70. package/dist/{manager-DHRBy5oR.js → manager-BtWtmpxN.js} +1 -1
  71. package/dist/{manager-CLrJn9l-.js → manager-DDELj5o9.js} +1 -1
  72. package/dist/{manager-BJvYQ7xP.js → manager-DrmlegR2.js} +1 -1
  73. package/dist/{manager-Df_ZdrNG.js → manager-DxCmjSfP.js} +24 -24
  74. package/dist/{manifest-registry-CBCGTsIb.js → manifest-registry-BvGv6lp9.js} +19 -19
  75. package/dist/{markdown-tables-x2Xe2UXh.js → markdown-tables-CE-qSMGB.js} +1 -1
  76. package/dist/{memory-cli-T-a5-lqZ.js → memory-cli-ENCASZJk.js} +3 -3
  77. package/dist/{memory-cli-BgJciaHC.js → memory-cli-Qgbcxvuf.js} +3 -3
  78. package/dist/{message-channel-OlFBYAw8.js → message-channel-lwVT8QjK.js} +1 -1
  79. package/dist/{models-BXXV_sZU.js → models-COhUz7M9.js} +2 -2
  80. package/dist/{models-cli-BI-DyItH.js → models-cli-CCxYcF4R.js} +5 -5
  81. package/dist/{models-cli-Bs6JAGq-.js → models-cli-CYvXBvmZ.js} +6 -6
  82. package/dist/{onboard-Czi_FRdi.js → onboard-CQNUYBIp.js} +2 -2
  83. package/dist/{onboard-channels-sTuhQBVu.js → onboard-channels-9erx07qe.js} +1 -1
  84. package/dist/{onboard-channels-BUCYZF02.js → onboard-channels-CWw8G-6n.js} +1 -1
  85. package/dist/{onboard-DKDCWveE.js → onboard-fVpLVnwg.js} +2 -2
  86. package/dist/{onboarding-Bgx0qZhA.js → onboarding-CtEiH9WG.js} +3 -3
  87. package/dist/{onboarding-CokRRVEi.js → onboarding-D-OIkDwZ.js} +3 -3
  88. package/dist/{onboarding.finalize-BCv5jB0d.js → onboarding.finalize-BY3HNjX4.js} +9 -9
  89. package/dist/{onboarding.finalize-BzEKyraI.js → onboarding.finalize-DTbpLV-T.js} +8 -8
  90. package/dist/{outbound-Zmd7UyQH.js → outbound-C6Gm22UF.js} +7 -7
  91. package/dist/{outbound-attachment-DeCnZT-8.js → outbound-attachment-BWyKV1Gy.js} +2 -2
  92. package/dist/paths-CYmyCDsE.js +212 -0
  93. package/dist/{paths-CbQV9WEg.js → paths-DEuVuViW.js} +1 -1
  94. package/dist/{pi-auth-json-RXOlh8ar.js → pi-auth-json-Bv1NzJdR.js} +1 -1
  95. package/dist/{pi-embedded-DXY7TLac.js → pi-embedded-CdOdQw2i.js} +265 -13
  96. package/dist/{pi-embedded-helpers-D1_Sab0M.js → pi-embedded-helpers-DwQ9wJeT.js} +73 -73
  97. package/dist/{pi-tools.policy-BZrM6a-w.js → pi-tools.policy-Bx5zp45n.js} +2 -0
  98. package/dist/{pi-tools.policy-QIVWAVVI.js → pi-tools.policy-o0ytjRqu.js} +2 -0
  99. package/dist/{plugin-registry-CyrsJDyE.js → plugin-registry-BrJ0-qlu.js} +1 -1
  100. package/dist/{plugin-registry-B2cpTmJz.js → plugin-registry-Cuc8ORuR.js} +1 -1
  101. package/dist/plugin-sdk/agents/pi-embedded-runner/long-task-prompt.d.ts +7 -0
  102. package/dist/plugin-sdk/agents/tools/task-tool.d.ts +7 -0
  103. package/dist/plugin-sdk/{channel-web-t6enTxNE.js → channel-web-t8UOP6Zu.js} +1 -1
  104. package/dist/plugin-sdk/index.js +3 -3
  105. package/dist/plugin-sdk/{manager-LRE7zEk2.js → manager-BPm5oefC.js} +1 -1
  106. package/dist/plugin-sdk/{reply-JypoGhql.js → reply-BKAHTugL.js} +265 -13
  107. package/dist/plugin-sdk/{synthesis-_WpVyZKx.js → synthesis-CVF7Fwhd.js} +2 -2
  108. package/dist/plugin-sdk/{web-BTVj4kiQ.js → web-D0DsmFvw.js} +3 -3
  109. package/dist/{plugins-cli-B-zoQyqU.js → plugins-cli-BDalhI46.js} +5 -5
  110. package/dist/{plugins-cli-DJwRd3EZ.js → plugins-cli-DFmriy-c.js} +5 -5
  111. package/dist/{plugins-BzmbgY7s.js → plugins-v8k1XVOy.js} +9 -9
  112. package/dist/{program-H7h6Iqrq.js → program-DKh41c2a.js} +10 -10
  113. package/dist/{program-context-BgecQAHU.js → program-context-Cq7pqOrw.js} +19 -19
  114. package/dist/{prompt-select-styled-BglmD29e.js → prompt-select-styled-BFCAZLwK.js} +6 -6
  115. package/dist/{prompt-select-styled-BDN2o35i.js → prompt-select-styled-DvvSE_ni.js} +6 -6
  116. package/dist/{provider-auth-helpers-BGIgr7xM.js → provider-auth-helpers-B-LkDxxi.js} +1 -1
  117. package/dist/{provider-auth-helpers-MfKmTeLY.js → provider-auth-helpers-DXppgV1l.js} +1 -1
  118. package/dist/{push-apns-b6bH1EBC.js → push-apns-DCA47WA5.js} +1 -1
  119. package/dist/{push-apns-IcfSTzfr.js → push-apns-DvudhEAb.js} +1 -1
  120. package/dist/{pw-ai-DWkC5eGA.js → pw-ai-XGqnSWju.js} +11 -11
  121. package/dist/{qmd-manager-BXkbA8Y9.js → qmd-manager-CbRJhonG.js} +8 -8
  122. package/dist/{register.agent-ChwMSIC4.js → register.agent-_BV5KyFb.js} +9 -9
  123. package/dist/{register.agent-BgyETrrj.js → register.agent-aFj_SMi3.js} +8 -8
  124. package/dist/{register.configure-DH3L2tqW.js → register.configure-CvOoD5gE.js} +9 -9
  125. package/dist/{register.configure-Bm4CvoLF.js → register.configure-Dx0Uhmlz.js} +9 -9
  126. package/dist/{register.maintenance-BbOBw1eI.js → register.maintenance-BuZpoSik.js} +10 -10
  127. package/dist/{register.maintenance-CAyHUEzP.js → register.maintenance-CMeJR7DG.js} +11 -11
  128. package/dist/{register.message-DheqsiR0.js → register.message-qysZPg3G.js} +5 -5
  129. package/dist/{register.message-DQ3MOWFE.js → register.message-xxGePuRC.js} +5 -5
  130. package/dist/{register.onboard-DOJkUhoY.js → register.onboard-1MP2I0q4.js} +7 -7
  131. package/dist/{register.onboard-CxqR4S1C.js → register.onboard-D4Aow7Gc.js} +7 -7
  132. package/dist/{register.setup-zdrIJA2P.js → register.setup-BT74aXzA.js} +7 -7
  133. package/dist/{register.setup-48YBHzMZ.js → register.setup-DzliKkWh.js} +7 -7
  134. package/dist/{register.status-health-sessions-CeT5pVXb.js → register.status-health-sessions-B3K2gZ72.js} +7 -7
  135. package/dist/{register.status-health-sessions-CimrhScH.js → register.status-health-sessions-D7VYZlrU.js} +7 -7
  136. package/dist/{register.subclis-B-zh940S.js → register.subclis-BCy0IDRv.js} +10 -10
  137. package/dist/{registry-DYq1AYOv.js → registry-X6fUE0K7.js} +19 -19
  138. package/dist/{replies-CUWXgyx2.js → replies-86F3PldM.js} +3 -3
  139. package/dist/{reply-CUR4xpYM.js → reply-Dg1ZU3DZ.js} +263 -13
  140. package/dist/{reply-prefix-CvEIl6_d.js → reply-prefix-CI_IdwqH.js} +1 -1
  141. package/dist/{resolve-route-Jy5dFY67.js → resolve-route-BgSuN9c6.js} +4 -4
  142. package/dist/{retry-B-y5suGA.js → retry-4oEAHckB.js} +1 -1
  143. package/dist/{run-main-CW_kj5Lj.js → run-main-OS2aFAJ2.js} +18 -18
  144. package/dist/{runner-ecX1WzDt.js → runner-B5oNTtgf.js} +22 -22
  145. package/dist/{security-cli-BpnzAB5_.js → security-cli-BadXDWTh.js} +2 -2
  146. package/dist/{security-cli-D9WEiEjD.js → security-cli-D5y28-RH.js} +2 -2
  147. package/dist/{send-DFtnbzqy.js → send-ASDB3AzC.js} +7 -7
  148. package/dist/{send-Bb4it0te.js → send-BTfqlrYd.js} +18 -18
  149. package/dist/{send-C0QjmPaf.js → send-CSydU49L.js} +10 -10
  150. package/dist/{send-Cpk3Ti6-.js → send-Du-IfSne.js} +6 -6
  151. package/dist/{send-BKo1T3HF.js → send-cCTQjuOZ.js} +6 -6
  152. package/dist/{server-methods-C1h0A5n0.js → server-methods-BszFAkbJ.js} +8 -8
  153. package/dist/{server-methods-C4id-H_X.js → server-methods-D_iKJ-sj.js} +8 -8
  154. package/dist/{server-node-events-CD2yDaEj.js → server-node-events-CENHuAVz.js} +5 -5
  155. package/dist/{server-node-events-BPZEGV_N.js → server-node-events-uBu3XOjd.js} +5 -5
  156. package/dist/{session-BTeY6Gn2.js → session-D8qLj_xN.js} +8 -8
  157. package/dist/{skill-commands-DG2lcozb.js → skill-commands-BcOduw6G.js} +16 -16
  158. package/dist/{skills-CXxrn_e2.js → skills-BrYDT4Jr.js} +24 -24
  159. package/dist/{sqlite-BN_hIcmu.js → sqlite-P-gMg7fi.js} +3 -3
  160. package/dist/{status-_xBnHTlx.js → status-BvbJavmh.js} +1 -1
  161. package/dist/{status-DCeW2a07.js → status-CA0mUJld.js} +4 -4
  162. package/dist/{status-Cb932Vl4.js → status-CBnCPUMG.js} +4 -4
  163. package/dist/{status-DvHD1cnq.js → status-DJAeKN4G.js} +1 -1
  164. package/dist/{store-01F_JM7O.js → store-Ceagbc4L.js} +6 -6
  165. package/dist/{subagent-registry-BKuL9PdW.js → subagent-registry-C1OyZl-M.js} +263 -13
  166. package/dist/{subsystem-BjyjJF-d.js → subsystem-CzXhCdeY.js} +1 -1
  167. package/dist/{synthesis-DOiTUsXQ.js → synthesis-DNTyB7JY.js} +2 -2
  168. package/dist/{synthesis-BUqDGjlc.js → synthesis-DuqSkHEr.js} +54 -54
  169. package/dist/{synthesis-C9RputIi.js → synthesis-brHrnNF2.js} +4 -4
  170. package/dist/{synthesis-Ia9egx87.js → synthesis-z5B41p_r.js} +4 -4
  171. package/dist/{tables-DoG-pFrf.js → tables-qbCoZrYA.js} +1 -1
  172. package/dist/{target-errors-DeJTztcq.js → target-errors-uNitqCCT.js} +2 -2
  173. package/dist/{thinking-BprCy23Z.js → thinking-BV7SCNJP.js} +5 -5
  174. package/dist/{tokens-W0JzCJJM.js → tokens-Bl5R3wPD.js} +1 -1
  175. package/dist/{tool-images-SqqWIT22.js → tool-images-JxNglLSr.js} +2 -2
  176. package/dist/{tool-loop-detection-Dj9h1ogr.js → tool-loop-detection-dfE771kg.js} +3 -3
  177. package/dist/{unified-runner-CVItnwwP.js → unified-runner-Czg3pdBc.js} +489 -237
  178. package/dist/{update-cli-ChEABesZ.js → update-cli-0lyGyl31.js} +11 -11
  179. package/dist/{update-cli-D6ax3jSX.js → update-cli-CIzkVfmj.js} +10 -10
  180. package/dist/{update-runner-B2EY9BWM.js → update-runner-D7-LDziQ.js} +1 -1
  181. package/dist/{update-runner-CWG6GxKs.js → update-runner-aYPcKYAN.js} +1 -1
  182. package/dist/{web-z-yQ8riS.js → web-B90A99YU.js} +58 -58
  183. package/dist/{web-CpSE67Jp.js → web-BJ5dUZso.js} +5 -5
  184. package/dist/{web-D6PPeyG7.js → web-CN7wnU7w.js} +4 -4
  185. package/dist/{web-DMdb2p-h.js → web-Wk1ay1eQ.js} +2 -2
  186. package/dist/{whatsapp-actions-DmVpLXmh.js → whatsapp-actions-llk0IUn2.js} +23 -23
  187. package/dist/{workspace-DscDraUb.js → workspace-CywO4ayZ.js} +27 -27
  188. package/extensions/bluebubbles/package.json +1 -1
  189. package/extensions/copilot-proxy/package.json +1 -1
  190. package/extensions/diagnostics-otel/package.json +1 -1
  191. package/extensions/discord/package.json +1 -1
  192. package/extensions/feishu/package.json +1 -1
  193. package/extensions/google-antigravity-auth/package.json +1 -1
  194. package/extensions/google-gemini-cli-auth/package.json +1 -1
  195. package/extensions/googlechat/package.json +1 -1
  196. package/extensions/imessage/package.json +1 -1
  197. package/extensions/irc/package.json +1 -1
  198. package/extensions/learning-loop/package.json +1 -1
  199. package/extensions/line/package.json +1 -1
  200. package/extensions/llm-task/package.json +1 -1
  201. package/extensions/matrix/CHANGELOG.md +12 -0
  202. package/extensions/matrix/package.json +1 -1
  203. package/extensions/mattermost/package.json +1 -1
  204. package/extensions/memory-core/package.json +1 -1
  205. package/extensions/memory-lancedb/package.json +1 -1
  206. package/extensions/minimax-portal-auth/package.json +1 -1
  207. package/extensions/msteams/CHANGELOG.md +12 -0
  208. package/extensions/msteams/package.json +1 -1
  209. package/extensions/nextcloud-talk/package.json +1 -1
  210. package/extensions/nostr/CHANGELOG.md +12 -0
  211. package/extensions/nostr/package.json +1 -1
  212. package/extensions/open-prose/package.json +1 -1
  213. package/extensions/outlook/package.json +1 -1
  214. package/extensions/pipeline/package.json +1 -1
  215. package/extensions/signal/package.json +1 -1
  216. package/extensions/slack/package.json +1 -1
  217. package/extensions/telegram/package.json +1 -1
  218. package/extensions/tlon/package.json +1 -1
  219. package/extensions/twitch/CHANGELOG.md +12 -0
  220. package/extensions/twitch/package.json +1 -1
  221. package/extensions/voice-call/CHANGELOG.md +12 -0
  222. package/extensions/voice-call/package.json +1 -1
  223. package/extensions/whatsapp/package.json +1 -1
  224. package/extensions/zalo/CHANGELOG.md +12 -0
  225. package/extensions/zalo/package.json +1 -1
  226. package/extensions/zalouser/CHANGELOG.md +12 -0
  227. package/extensions/zalouser/package.json +1 -1
  228. package/package.json +1 -1
  229. package/skills/long-task/scripts/detach-task.sh +57 -5
@@ -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-T-a5-lqZ.js";
64
- import { a as resolveMemorySearchConfig, t as MemoryIndexManager } from "./manager-BJvYQ7xP.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" + [
@@ -29007,10 +29008,7 @@ async function buildLongTaskPromptSuffix(params) {
29007
29008
  " • workdir: absolute path you own (e.g. the agent workspace).",
29008
29009
  " • Script spawns under setsid+nohup+disown, writes task-<id>.{pid,cmd,started,log,status} files.",
29009
29010
  "- Immediately after detaching, respond to the user with: task id, PID, log file path, your ETA estimate, and that a cron monitor has been scheduled.",
29010
- "- Register a cron monitor using the `cron` tool with action=add. Required fields:",
29011
- " • schedule: { kind: \"interval\", ms: 180000 } (every 3 minutes; minimum 60000)",
29012
- " • payload: { kind: \"agent\", sessionTarget: \"isolated\", text: <job prompt> }",
29013
- " The job prompt must literally contain the task-id, PID, log path, and status path so the future turn has enough context without re-deriving them.",
29011
+ "- Register a cron monitor via the `cron` tool's `add` action. Use the schema documented in that tool's own description for the exact field names — do NOT guess. The monitor should fire roughly every 3 minutes as an isolated agentTurn job, and its message must literally contain the task-id, PID, log path, and status path so the future turn has enough context without re-deriving them.",
29014
29012
  "- Safe status read (inside the monitor turn):",
29015
29013
  " `status=$(cat \"<workdir>/task-<id>.status\" 2>/dev/null || echo missing)`",
29016
29014
  " Possible values: `running pid=<N> started=<ISO>`, `complete rc=<N> ended=<ISO>`, `aborted rc=<N> signal=<TERM|INT|HUP> ended=<ISO>`, or `missing` if the file was cleaned up.",
@@ -29018,7 +29016,8 @@ async function buildLongTaskPromptSuffix(params) {
29018
29016
  " • If status begins with `running`: tail -n 20 <log>, post a one-sentence progress line.",
29019
29017
  " • If status begins with `complete`: post a final summary with rc and tail, then call cron action=remove on this job id.",
29020
29018
  " • If status begins with `aborted`: post a failure summary with signal and tail, then call cron action=remove.",
29021
- " • 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."
29022
29021
  ].join("\n");
29023
29022
  }
29024
29023
 
@@ -30091,7 +30090,8 @@ async function runEmbeddedAttempt(params) {
30091
30090
  const longTaskSuffix = await buildLongTaskPromptSuffix({
30092
30091
  argv1: process.argv[1],
30093
30092
  cwd: process.cwd(),
30094
- moduleUrl: import.meta.url
30093
+ moduleUrl: import.meta.url,
30094
+ cronEnabled: process.env.SYMI_SKIP_CRON !== "1" && params.config?.cron?.enabled !== false
30095
30095
  });
30096
30096
  const emailCapabilitySuffix = buildEmailCapabilityPromptSuffix();
30097
30097
  const systemPromptText = createSystemPromptOverride(appendPrompt + longTaskSuffix + emailCapabilitySuffix + profilePromptSuffix)();
@@ -31935,7 +31935,7 @@ async function runAgentTurn(params) {
31935
31935
  function createDefaultDeps() {
31936
31936
  return {
31937
31937
  sendMessageWhatsApp: async (...args) => {
31938
- const { sendMessageWhatsApp } = await import("./web-CpSE67Jp.js");
31938
+ const { sendMessageWhatsApp } = await import("./web-BJ5dUZso.js");
31939
31939
  return await sendMessageWhatsApp(...args);
31940
31940
  },
31941
31941
  sendMessageTelegram: async (...args) => {
@@ -50366,7 +50366,7 @@ function loadWebLoginQr() {
50366
50366
  return webLoginQrPromise;
50367
50367
  }
50368
50368
  function loadWebChannel() {
50369
- webChannelPromise ??= import("./web-CpSE67Jp.js");
50369
+ webChannelPromise ??= import("./web-BJ5dUZso.js");
50370
50370
  return webChannelPromise;
50371
50371
  }
50372
50372
  function loadWhatsAppActions() {
@@ -52122,7 +52122,7 @@ async function resolveSandboxWorkdir(params) {
52122
52122
  };
52123
52123
  }
52124
52124
  }
52125
- function resolveWorkdir(workdir, warnings) {
52125
+ function resolveWorkdir$1(workdir, warnings) {
52126
52126
  const fallback = safeCwd() ?? homedir();
52127
52127
  try {
52128
52128
  if (statSync(workdir).isDirectory()) return workdir;
@@ -53194,7 +53194,7 @@ function createExecTool(defaults) {
53194
53194
  });
53195
53195
  workdir = resolved.hostWorkdir;
53196
53196
  containerWorkdir = resolved.containerWorkdir;
53197
- } else workdir = resolveWorkdir(rawWorkdir, warnings);
53197
+ } else workdir = resolveWorkdir$1(rawWorkdir, warnings);
53198
53198
  const baseEnv = coerceEnv(process.env);
53199
53199
  if (host !== "sandbox" && params.env) validateHostEnv(params.env);
53200
53200
  const mergedEnv = params.env ? {
@@ -63411,6 +63411,254 @@ function createSubagentsTool(opts) {
63411
63411
  };
63412
63412
  }
63413
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
+
63414
63662
  //#endregion
63415
63663
  //#region src/agents/tools/tts-tool.ts
63416
63664
  const TtsToolSchema = Type.Object({
@@ -64711,6 +64959,8 @@ function createSymiTools(options) {
64711
64959
  config: options?.config
64712
64960
  }),
64713
64961
  createCronTool({ agentSessionKey: options?.agentSessionKey }),
64962
+ createTaskListTool({ workspaceDir }),
64963
+ createTaskCancelTool({ workspaceDir }),
64714
64964
  ...messageTool ? [messageTool] : [],
64715
64965
  createTtsTool({
64716
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 = {
@@ -14,7 +14,7 @@ import "./client-qUlxXXVJ.js";
14
14
  import "./call-BrRWr7Lj.js";
15
15
  import "./message-channel-C9dERklz.js";
16
16
  import "./pairing-token-Byh6drgn.js";
17
- import "./subagent-registry-BKuL9PdW.js";
17
+ import "./subagent-registry-C1OyZl-M.js";
18
18
  import "./sessions-BPD85pWA.js";
19
19
  import "./tokens-Csntmwwn.js";
20
20
  import "./plugins-CwSlLxM8.js";
@@ -52,8 +52,8 @@ import "./tool-images-CVLISeRT.js";
52
52
  import "./thinking-8sKPnzpp.js";
53
53
  import "./models-config-J1x_DaPn.js";
54
54
  import "./reply-prefix-BUN71nd5.js";
55
- import "./memory-cli-BgJciaHC.js";
56
- import "./manager-CLrJn9l-.js";
55
+ import "./memory-cli-Qgbcxvuf.js";
56
+ import "./manager-DDELj5o9.js";
57
57
  import "./gemini-auth-DEakvf-D.js";
58
58
  import "./retry-C4Q_VPOo.js";
59
59
  import "./sqlite-BP8tiuca.js";
@@ -97,14 +97,14 @@ import "./replies-Sxbew659.js";
97
97
  import "./onboard-helpers-CF0Cp3OB.js";
98
98
  import "./prompt-style-BxVdnrLq.js";
99
99
  import "./pairing-labels-BHx_CdbP.js";
100
- import "./pi-tools.policy-QIVWAVVI.js";
100
+ import "./pi-tools.policy-o0ytjRqu.js";
101
101
  import { t as ensureSymiCliOnPath } from "./path-env-CaiY2aOj.js";
102
102
  import "./catalog-KcLvtTfa.js";
103
103
  import "./note-DewoEWtc.js";
104
104
  import "./plugin-auto-enable-pQEg2Mly.js";
105
- import { t as ensurePluginRegistryLoaded } from "./plugin-registry-B2cpTmJz.js";
105
+ import { t as ensurePluginRegistryLoaded } from "./plugin-registry-Cuc8ORuR.js";
106
106
  import { t as assertSupportedRuntime } from "./runtime-guard-BofkqBu7.js";
107
- import { t as emitCliBanner } from "./banner-BFdiq-O5.js";
107
+ import { t as emitCliBanner } from "./banner-DrNha2_N.js";
108
108
  import "./doctor-config-flow-B2dVxbL7.js";
109
109
  import { n as ensureConfigReady } from "./config-guard-BvqCjFPk.js";
110
110
  import process$1 from "node:process";
@@ -119,7 +119,7 @@ const routeHealth = {
119
119
  const verbose = getVerboseFlag(argv, { includeDebug: true });
120
120
  const timeoutMs = getPositiveIntFlagValue(argv, "--timeout");
121
121
  if (timeoutMs === null) return false;
122
- const { healthCommand } = await import("./health-C12hy3Ao.js").then((n) => n.i);
122
+ const { healthCommand } = await import("./health-2jkjZxY8.js").then((n) => n.i);
123
123
  await healthCommand({
124
124
  json,
125
125
  timeoutMs,
@@ -139,7 +139,7 @@ const routeStatus = {
139
139
  const verbose = getVerboseFlag(argv, { includeDebug: true });
140
140
  const timeoutMs = getPositiveIntFlagValue(argv, "--timeout");
141
141
  if (timeoutMs === null) return false;
142
- const { statusCommand } = await import("./status-Cb932Vl4.js").then((n) => n.t);
142
+ const { statusCommand } = await import("./status-CBnCPUMG.js").then((n) => n.t);
143
143
  await statusCommand({
144
144
  json,
145
145
  deep,
@@ -173,7 +173,7 @@ const routeAgentsList = {
173
173
  run: async (argv) => {
174
174
  const json = hasFlag(argv, "--json");
175
175
  const bindings = hasFlag(argv, "--bindings");
176
- const { agentsListCommand } = await import("./agents-OAonMxYV.js").then((n) => n.t);
176
+ const { agentsListCommand } = await import("./agents-DlAvDWxz.js").then((n) => n.t);
177
177
  await agentsListCommand({
178
178
  json,
179
179
  bindings
@@ -190,7 +190,7 @@ const routeMemoryStatus = {
190
190
  const deep = hasFlag(argv, "--deep");
191
191
  const index = hasFlag(argv, "--index");
192
192
  const verbose = hasFlag(argv, "--verbose");
193
- const { runMemoryStatus } = await import("./memory-cli-BgJciaHC.js").then((n) => n.t);
193
+ const { runMemoryStatus } = await import("./memory-cli-Qgbcxvuf.js").then((n) => n.t);
194
194
  await runMemoryStatus({
195
195
  agent,
196
196
  json,
@@ -244,7 +244,7 @@ const routes = [
244
244
  const pathArg = getCommandPositionals(argv)[2];
245
245
  if (!pathArg) return false;
246
246
  const json = hasFlag(argv, "--json");
247
- const { runConfigGet } = await import("./config-cli-C_uZQsTl.js");
247
+ const { runConfigGet } = await import("./config-cli-C7DIbGxx.js");
248
248
  await runConfigGet({
249
249
  path: pathArg,
250
250
  json
@@ -257,7 +257,7 @@ const routes = [
257
257
  run: async (argv) => {
258
258
  const pathArg = getCommandPositionals(argv)[2];
259
259
  if (!pathArg) return false;
260
- const { runConfigUnset } = await import("./config-cli-C_uZQsTl.js");
260
+ const { runConfigUnset } = await import("./config-cli-C7DIbGxx.js");
261
261
  await runConfigUnset({ path: pathArg });
262
262
  return true;
263
263
  }
@@ -271,7 +271,7 @@ const routes = [
271
271
  const local = hasFlag(argv, "--local");
272
272
  const json = hasFlag(argv, "--json");
273
273
  const plain = hasFlag(argv, "--plain");
274
- const { modelsListCommand } = await import("./models-BXXV_sZU.js").then((n) => n.t);
274
+ const { modelsListCommand } = await import("./models-COhUz7M9.js").then((n) => n.t);
275
275
  await modelsListCommand({
276
276
  all,
277
277
  local,
@@ -302,7 +302,7 @@ const routes = [
302
302
  const plain = hasFlag(argv, "--plain");
303
303
  const check = hasFlag(argv, "--check");
304
304
  const probe = hasFlag(argv, "--probe");
305
- const { modelsStatusCommand } = await import("./models-BXXV_sZU.js").then((n) => n.t);
305
+ const { modelsStatusCommand } = await import("./models-COhUz7M9.js").then((n) => n.t);
306
306
  await modelsStatusCommand({
307
307
  json,
308
308
  plain,
@@ -380,7 +380,7 @@ async function runCli(argv = process$1.argv) {
380
380
  assertSupportedRuntime();
381
381
  if (await tryRouteCli(normalizedArgv)) return;
382
382
  enableConsoleCapture();
383
- const { buildProgram } = await import("./program-H7h6Iqrq.js");
383
+ const { buildProgram } = await import("./program-DKh41c2a.js");
384
384
  const program = buildProgram();
385
385
  installUnhandledRejectionHandler();
386
386
  process$1.on("uncaughtException", (error) => {
@@ -412,10 +412,10 @@ async function runCli(argv = process$1.argv) {
412
412
  const { getProgramContext } = await import("./program-context-DeZ44oQ9.js").then((n) => n.n);
413
413
  const ctx = getProgramContext(program);
414
414
  if (ctx) {
415
- const { registerCoreCliByName } = await import("./command-registry-D1Le-Fmh.js").then((n) => n.t);
415
+ const { registerCoreCliByName } = await import("./command-registry-LjFltTU9.js").then((n) => n.t);
416
416
  await registerCoreCliByName(program, ctx, primary, parseArgv);
417
417
  }
418
- const { registerSubCliByName } = await import("./register.subclis-B-zh940S.js").then((n) => n.a);
418
+ const { registerSubCliByName } = await import("./register.subclis-BCy0IDRv.js").then((n) => n.a);
419
419
  await registerSubCliByName(program, primary);
420
420
  }
421
421
  const hasBuiltinPrimary = primary !== null && program.commands.some((command) => command.name() === primary);
@@ -424,7 +424,7 @@ async function runCli(argv = process$1.argv) {
424
424
  primary,
425
425
  hasBuiltinPrimary
426
426
  })) {
427
- const { registerPluginCliCommands } = await import("./cli-CKG2iAr3.js");
427
+ const { registerPluginCliCommands } = await import("./cli-DjZzJy3t.js");
428
428
  const { loadConfig } = await import("./config-DXt3pc08.js").then((n) => n.t);
429
429
  registerPluginCliCommands(program, loadConfig());
430
430
  }
@@ -1,17 +1,17 @@
1
- import { J as logVerbose, Z as shouldLogVerbose } from "./registry-DYq1AYOv.js";
2
- import { _ as runExec } from "./workspace-DscDraUb.js";
3
- import { A as normalizeGoogleModelId, B as resolveApiKeyForProvider, C as normalizeProviderId, et as resolveSymiAgentDir, z as requireApiKey } from "./auth-profiles-C2vj6htZ.js";
4
- import { d as DEFAULT_IMESSAGE_ATTACHMENT_ROOTS, f as isInboundPathAllowed, m as resolveIMessageAttachmentRoots, n as loadConfig, p as mergeInboundPathRoots } from "./config-BkZ9HOKT.js";
5
- import { c as detectMime, f as isAudioFileName, m as kindFromMime, u as getFileExtension } from "./image-ops-C7CauEK8.js";
1
+ import { J as logVerbose, Z as shouldLogVerbose } from "./registry-X6fUE0K7.js";
2
+ import { _ as runExec } from "./workspace-CywO4ayZ.js";
3
+ import { A as normalizeGoogleModelId, B as resolveApiKeyForProvider, C as normalizeProviderId, et as resolveSymiAgentDir, z as requireApiKey } from "./auth-profiles-BzB_Exeq.js";
4
+ import { d as DEFAULT_IMESSAGE_ATTACHMENT_ROOTS, f as isInboundPathAllowed, m as resolveIMessageAttachmentRoots, n as loadConfig, p as mergeInboundPathRoots } from "./config-C4WnAd-c.js";
5
+ import { c as detectMime, f as isAudioFileName, m as kindFromMime, u as getFileExtension } from "./image-ops-CY7v6vvp.js";
6
6
  import { t as normalizeChatType } from "./chat-type-3FRbbjbq.js";
7
- import { S as ensureSymiModelsJson, t as describeImageWithModel } from "./image-BuVL0jHI.js";
8
- import { n as collectProviderApiKeysForExecution, r as executeWithApiKeyRotation, t as parseGeminiAuth } from "./gemini-auth-BefM10YB.js";
7
+ import { S as ensureSymiModelsJson, t as describeImageWithModel } from "./image-BHF_fnIp.js";
8
+ import { n as collectProviderApiKeysForExecution, r as executeWithApiKeyRotation, t as parseGeminiAuth } from "./gemini-auth-D80BsXr2.js";
9
9
  import { n as fetchWithTimeout } from "./fetch-timeout-CVCBkyv1.js";
10
- import { i as fetchRemoteMedia, n as getDefaultMediaLocalRoots, o as fetchWithSsrFGuard, r as MediaFetchError } from "./local-roots-ClipCZ9s.js";
10
+ import { i as fetchRemoteMedia, n as getDefaultMediaLocalRoots, o as fetchWithSsrFGuard, r as MediaFetchError } from "./local-roots-tcdaIEhh.js";
11
11
  import path from "node:path";
12
12
  import { constants } from "node:fs";
13
13
  import os from "node:os";
14
- import fs$1 from "node:fs/promises";
14
+ import fs from "node:fs/promises";
15
15
  import { fileURLToPath } from "node:url";
16
16
  import crypto from "node:crypto";
17
17
  import process$1 from "node:process";
@@ -693,7 +693,7 @@ var MediaAttachmentCache = class {
693
693
  const size = await this.ensureLocalStat(entry);
694
694
  if (entry.resolvedPath) {
695
695
  if (size !== void 0 && size > params.maxBytes) throw new MediaUnderstandingSkipError("maxBytes", `Attachment ${params.attachmentIndex + 1} exceeds maxBytes ${params.maxBytes}`);
696
- const buffer = await fs$1.readFile(entry.resolvedPath);
696
+ const buffer = await fs.readFile(entry.resolvedPath);
697
697
  entry.buffer = buffer;
698
698
  entry.bufferMime = entry.bufferMime ?? entry.attachment.mime ?? await detectMime({
699
699
  buffer,
@@ -763,10 +763,10 @@ var MediaAttachmentCache = class {
763
763
  prefix: "symi-media",
764
764
  extension: path.extname(bufferResult.fileName || "") || ""
765
765
  });
766
- await fs$1.writeFile(tmpPath, bufferResult.buffer);
766
+ await fs.writeFile(tmpPath, bufferResult.buffer);
767
767
  entry.tempPath = tmpPath;
768
768
  entry.tempCleanup = async () => {
769
- await fs$1.unlink(tmpPath).catch(() => {});
769
+ await fs.unlink(tmpPath).catch(() => {});
770
770
  };
771
771
  return {
772
772
  path: tmpPath,
@@ -813,12 +813,12 @@ var MediaAttachmentCache = class {
813
813
  if (entry.statSize !== void 0) return entry.statSize;
814
814
  try {
815
815
  const currentPath = entry.resolvedPath;
816
- const stat = await fs$1.stat(currentPath);
816
+ const stat = await fs.stat(currentPath);
817
817
  if (!stat.isFile()) {
818
818
  entry.resolvedPath = void 0;
819
819
  return;
820
820
  }
821
- const canonicalPath = await fs$1.realpath(currentPath).catch(() => currentPath);
821
+ const canonicalPath = await fs.realpath(currentPath).catch(() => currentPath);
822
822
  if (!isInboundPathAllowed({
823
823
  filePath: canonicalPath,
824
824
  roots: await this.getCanonicalLocalPathRoots()
@@ -840,7 +840,7 @@ var MediaAttachmentCache = class {
840
840
  if (this.canonicalLocalPathRoots) return await this.canonicalLocalPathRoots;
841
841
  this.canonicalLocalPathRoots = (async () => mergeInboundPathRoots(this.localPathRoots, await Promise.all(this.localPathRoots.map(async (root) => {
842
842
  if (root.includes("*")) return root;
843
- return await fs$1.realpath(root).catch(() => root);
843
+ return await fs.realpath(root).catch(() => root);
844
844
  }))))();
845
845
  return await this.canonicalLocalPathRoots;
846
846
  }
@@ -883,7 +883,7 @@ async function loadModelCatalog(params) {
883
883
  try {
884
884
  const cfg = params?.config ?? loadConfig();
885
885
  await ensureSymiModelsJson(cfg);
886
- await (await import("./pi-auth-json-RXOlh8ar.js").then((n) => n.n)).ensurePiAuthJsonFromAuthProfiles(resolveSymiAgentDir(), { config: cfg });
886
+ await (await import("./pi-auth-json-Bv1NzJdR.js").then((n) => n.n)).ensurePiAuthJsonFromAuthProfiles(resolveSymiAgentDir(), { config: cfg });
887
887
  const piSdk = await importPiSdk();
888
888
  const agentDir = resolveSymiAgentDir();
889
889
  const { join } = await import("node:path");
@@ -943,7 +943,7 @@ function findModelInCatalog(catalog, provider, modelId) {
943
943
  async function fileExists(filePath) {
944
944
  if (!filePath) return false;
945
945
  try {
946
- await fs$1.stat(filePath);
946
+ await fs.stat(filePath);
947
947
  return true;
948
948
  } catch {
949
949
  return false;
@@ -1043,7 +1043,7 @@ async function resolveCliOutput(params) {
1043
1043
  const commandId = commandBase(params.command);
1044
1044
  const fileOutput = commandId === "whisper-cli" ? resolveWhisperCppOutputPath(params.args) : commandId === "whisper" ? resolveWhisperOutputPath(params.args, params.mediaPath) : null;
1045
1045
  if (fileOutput && await fileExists(fileOutput)) try {
1046
- const content = await fs$1.readFile(fileOutput, "utf8");
1046
+ const content = await fs.readFile(fileOutput, "utf8");
1047
1047
  if (content.trim()) return content.trim();
1048
1048
  } catch {}
1049
1049
  if (commandId === "gemini") {
@@ -1334,7 +1334,7 @@ async function runCliEntry(params) {
1334
1334
  maxBytes,
1335
1335
  timeoutMs
1336
1336
  });
1337
- const outputDir = await fs$1.mkdtemp(path.join(os.tmpdir(), "symi-media-cli-"));
1337
+ const outputDir = await fs.mkdtemp(path.join(os.tmpdir(), "symi-media-cli-"));
1338
1338
  const mediaPath = pathResult.path;
1339
1339
  const outputBase = path.join(outputDir, path.parse(mediaPath).name);
1340
1340
  const templCtx = {
@@ -1368,7 +1368,7 @@ async function runCliEntry(params) {
1368
1368
  model: command
1369
1369
  };
1370
1370
  } finally {
1371
- await fs$1.rm(outputDir, {
1371
+ await fs.rm(outputDir, {
1372
1372
  recursive: true,
1373
1373
  force: true
1374
1374
  }).catch(() => {});
@@ -1412,9 +1412,9 @@ function candidateBinaryNames(name) {
1412
1412
  }
1413
1413
  async function isExecutable(filePath) {
1414
1414
  try {
1415
- if (!(await fs$1.stat(filePath)).isFile()) return false;
1415
+ if (!(await fs.stat(filePath)).isFile()) return false;
1416
1416
  if (process.platform === "win32") return true;
1417
- await fs$1.access(filePath, constants.X_OK);
1417
+ await fs.access(filePath, constants.X_OK);
1418
1418
  return true;
1419
1419
  } catch {
1420
1420
  return false;