@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
@@ -1,6 +1,6 @@
1
1
  import { u as resolveGatewayPort } from "./paths-Cqn-zk3M.js";
2
2
  import { B as theme, k as info, z as isRich } from "./utils-B-0b9bGM.js";
3
- import { B as summarizeRestartSentinel, Jt as sha256HexPrefix, _t as formatUsageReportLines, a as buildChannelSummary, gt as loadProviderUsageSummary, h as listAgentsForGateway, m as classifySessionKey, o as buildChannelAccountSnapshot, pr as lookupContextTokens, s as formatChannelAllowFrom, wr as peekSystemEvents, x as resolveSessionModelRef, z as readRestartSentinel } from "./reply-CUR4xpYM.js";
3
+ import { B as summarizeRestartSentinel, Jt as sha256HexPrefix, _t as formatUsageReportLines, a as buildChannelSummary, gt as loadProviderUsageSummary, h as listAgentsForGateway, m as classifySessionKey, o as buildChannelAccountSnapshot, pr as lookupContextTokens, s as formatChannelAllowFrom, wr as peekSystemEvents, x as resolveSessionModelRef, z as readRestartSentinel } from "./reply-Dg1ZU3DZ.js";
4
4
  import { S as parseAgentSessionKey } from "./session-key-DCt45XZa.js";
5
5
  import { t as resolveSymiPackageRoot } from "./symi-root-CrGJbkzf.js";
6
6
  import { n as runExec } from "./exec-CWkblSrI.js";
@@ -13,7 +13,7 @@ import { a as inspectPortUsage, s as formatPortDiagnostics } from "./ports-BOmtx
13
13
  import { H as resolveMainSessionKey, R as resolveFreshSessionTotalTokens, o as loadSessionStore } from "./sessions-BeYHj0gr.js";
14
14
  import { n as listChannelPlugins } from "./plugins-DKDeQZF0.js";
15
15
  import { c as resolveStorePath } from "./paths-CyhzMxFA.js";
16
- import { r as getMemorySearchManager } from "./memory-cli-T-a5-lqZ.js";
16
+ import { r as getMemorySearchManager } from "./memory-cli-ENCASZJk.js";
17
17
  import { n as callGateway, t as buildGatewayConnectionDetails } from "./call-Cmb04dff.js";
18
18
  import { n as formatTimeAgo } from "./format-relative-CviDPm2s.js";
19
19
  import { n as withProgress } from "./progress-WhkkDU0H.js";
@@ -27,8 +27,8 @@ import { s as resolveGatewayLogPaths, t as resolveGatewayService } from "./servi
27
27
  import { t as formatRuntimeStatusWithDetails } from "./runtime-status-D0P5lDGf.js";
28
28
  import { t as readLastGatewayErrorLine } from "./diagnostics-1uBuB9IE.js";
29
29
  import { t as renderTable } from "./table-BWuvjnmY.js";
30
- import { a as resolveGatewayProbeAuth$1, c as probeGateway, t as runSecurityAudit } from "./audit-Bi9Je9FZ.js";
31
- import { a as resolveHeartbeatSummaryForAgent, t as formatHealthChannelLines } from "./health-vKJZ7iJR.js";
30
+ import { a as resolveGatewayProbeAuth$1, c as probeGateway, t as runSecurityAudit } from "./audit-BhCJV2l6.js";
31
+ import { a as resolveHeartbeatSummaryForAgent, t as formatHealthChannelLines } from "./health-CvMHgR-L.js";
32
32
  import { g as resolveUpdateChannelDisplay, i as formatGitInstallLabel, m as normalizeUpdateChannel, t as checkUpdateStatus } from "./update-check-Bbvpax6u.js";
33
33
  import { t as resolveNodeService } from "./node-service-DxPZ_ZFk.js";
34
34
  import { n as redactSecrets, t as formatGatewayAuthUsed } from "./format-DNqZrSx7.js";
@@ -9,13 +9,13 @@ import { c as resolveAgentWorkspaceDir } from "./agent-scope-D-jRCY0d.js";
9
9
  import { t as buildWorkspaceSkillStatus } from "./skills-status-DODCG6UU.js";
10
10
  import { H as VERSION, i as loadConfig, o as readConfigFileSnapshot } from "./config-DXt3pc08.js";
11
11
  import { n as callGateway, t as buildGatewayConnectionDetails } from "./call-BrRWr7Lj.js";
12
- import { En as peekSystemEvents, St as summarizeRestartSentinel, cn as buildChannelAccountSnapshot, in as formatUsageReportLines, ln as formatChannelAllowFrom, nt as sha256HexPrefix, rn as loadProviderUsageSummary, sn as buildChannelSummary, xt as readRestartSentinel } from "./subagent-registry-BKuL9PdW.js";
12
+ import { En as peekSystemEvents, St as summarizeRestartSentinel, cn as buildChannelAccountSnapshot, in as formatUsageReportLines, ln as formatChannelAllowFrom, nt as sha256HexPrefix, rn as loadProviderUsageSummary, sn as buildChannelSummary, xt as readRestartSentinel } from "./subagent-registry-C1OyZl-M.js";
13
13
  import { F as resolveMainSessionKey, j as resolveFreshSessionTotalTokens, o as loadSessionStore } from "./sessions-BPD85pWA.js";
14
14
  import { n as listChannelPlugins } from "./plugins-CwSlLxM8.js";
15
15
  import { o as getTailnetHostname, s as readTailscaleStatusJson } from "./tailscale-CbbvYNVw.js";
16
16
  import { i as formatPortDiagnostics, n as inspectPortUsage } from "./ports-2xFXbwLq.js";
17
17
  import { c as resolveStorePath } from "./paths-DNdWAq7b.js";
18
- import { r as getMemorySearchManager } from "./memory-cli-BgJciaHC.js";
18
+ import { r as getMemorySearchManager } from "./memory-cli-Qgbcxvuf.js";
19
19
  import { n as formatTimeAgo } from "./format-relative-BDwAggS5.js";
20
20
  import { l as resolveSessionModelRef, n as classifySessionKey, r as listAgentsForGateway, u as lookupContextTokens } from "./session-utils-DaBIs243.js";
21
21
  import { o as getRemoteSkillEligibility } from "./skill-commands-DrX4xCNq.js";
@@ -28,8 +28,8 @@ import { s as resolveGatewayLogPaths, t as resolveGatewayService } from "./servi
28
28
  import { t as formatRuntimeStatusWithDetails } from "./runtime-status-DJYthOLz.js";
29
29
  import { t as readLastGatewayErrorLine } from "./diagnostics-C6xPE2ln.js";
30
30
  import { t as renderTable } from "./table-Bka4fasy.js";
31
- import { a as resolveGatewayProbeAuth$1, c as probeGateway, t as runSecurityAudit } from "./audit-Oa5dsn5p.js";
32
- import { o as resolveHeartbeatSummaryForAgent, t as formatHealthChannelLines } from "./health-C12hy3Ao.js";
31
+ import { a as resolveGatewayProbeAuth$1, c as probeGateway, t as runSecurityAudit } from "./audit-CB97BqHJ.js";
32
+ import { o as resolveHeartbeatSummaryForAgent, t as formatHealthChannelLines } from "./health-2jkjZxY8.js";
33
33
  import { g as resolveUpdateChannelDisplay, i as formatGitInstallLabel, m as normalizeUpdateChannel, t as checkUpdateStatus } from "./update-check-BNjupSIM.js";
34
34
  import { t as resolveNodeService } from "./node-service-B-qdOCNb.js";
35
35
  import { n as redactSecrets, t as formatGatewayAuthUsed } from "./format-yQZNwAF2.js";
@@ -1,7 +1,7 @@
1
1
  import { o as createSubsystemLogger } from "./entry.js";
2
2
  import { D as resolveDefaultAgentWorkspaceDir, c as resolveAgentWorkspaceDir, l as resolveDefaultAgentId } from "./agent-scope-D-jRCY0d.js";
3
3
  import { i as loadConfig } from "./config-DXt3pc08.js";
4
- import { m as loadSymiPlugins, p as createPluginLoaderLogger } from "./subagent-registry-BKuL9PdW.js";
4
+ import { m as loadSymiPlugins, p as createPluginLoaderLogger } from "./subagent-registry-C1OyZl-M.js";
5
5
 
6
6
  //#region src/plugins/status.ts
7
7
  const log = createSubsystemLogger("plugins");
@@ -1,7 +1,7 @@
1
- import { P as resolveConfigDir } from "./registry-DYq1AYOv.js";
2
- import { c as detectMime, l as extensionForMime } from "./image-ops-C7CauEK8.js";
1
+ import { P as resolveConfigDir } from "./registry-X6fUE0K7.js";
2
+ import { c as detectMime, l as extensionForMime } from "./image-ops-CY7v6vvp.js";
3
3
  import path from "node:path";
4
- import fs$1 from "node:fs/promises";
4
+ import fs from "node:fs/promises";
5
5
  import crypto from "node:crypto";
6
6
 
7
7
  //#region src/media/store.ts
@@ -24,7 +24,7 @@ function getMediaDir() {
24
24
  }
25
25
  async function ensureMediaDir() {
26
26
  const mediaDir = resolveMediaDir();
27
- await fs$1.mkdir(mediaDir, {
27
+ await fs.mkdir(mediaDir, {
28
28
  recursive: true,
29
29
  mode: 448
30
30
  });
@@ -33,7 +33,7 @@ async function ensureMediaDir() {
33
33
  async function saveMediaBuffer(buffer, contentType, subdir = "inbound", maxBytes = MAX_BYTES, originalFilename) {
34
34
  if (buffer.byteLength > maxBytes) throw new Error(`Media exceeds ${(maxBytes / (1024 * 1024)).toFixed(0)}MB limit`);
35
35
  const dir = path.join(resolveMediaDir(), subdir);
36
- await fs$1.mkdir(dir, {
36
+ await fs.mkdir(dir, {
37
37
  recursive: true,
38
38
  mode: 448
39
39
  });
@@ -51,7 +51,7 @@ async function saveMediaBuffer(buffer, contentType, subdir = "inbound", maxBytes
51
51
  id = sanitized ? `${sanitized}---${uuid}${ext}` : `${uuid}${ext}`;
52
52
  } else id = ext ? `${uuid}${ext}` : uuid;
53
53
  const dest = path.join(dir, id);
54
- await fs$1.writeFile(dest, buffer, { mode: 384 });
54
+ await fs.writeFile(dest, buffer, { mode: 384 });
55
55
  return {
56
56
  id,
57
57
  path: dest,
@@ -50,8 +50,8 @@ import { i as resolveImageSanitizationLimits, n as sanitizeImageBlocks, r as san
50
50
  import { a as normalizeElevatedLevel, c as normalizeUsageDisplay, d as supportsXHighThinking, l as normalizeVerboseLevel, n as formatXHighModelHint, o as normalizeReasoningLevel, s as normalizeThinkLevel, t as formatThinkingLevels, u as resolveResponseUsageMode } from "./thinking-8sKPnzpp.js";
51
51
  import { t as ensureSymiModelsJson } from "./models-config-J1x_DaPn.js";
52
52
  import { a as resolveAgentIdentity, i as resolveAckReaction, o as resolveEffectiveMessagesConfig, r as resolveResponsePrefixTemplate, s as resolveHumanDelayConfig, t as createReplyPrefixOptions } from "./reply-prefix-BUN71nd5.js";
53
- import { i as resolveMemoryBackendConfig, n as registerMemoryCli, r as getMemorySearchManager } from "./memory-cli-BgJciaHC.js";
54
- import { a as resolveMemorySearchConfig, t as MemoryIndexManager } from "./manager-CLrJn9l-.js";
53
+ import { i as resolveMemoryBackendConfig, n as registerMemoryCli, r as getMemorySearchManager } from "./memory-cli-Qgbcxvuf.js";
54
+ import { a as resolveMemorySearchConfig, t as MemoryIndexManager } from "./manager-DDELj5o9.js";
55
55
  import { f as runTasksWithConcurrency } from "./internal-C2jxeHS9.js";
56
56
  import { n as retryAsync } from "./retry-C4Q_VPOo.js";
57
57
  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-Co0LcWKH.js";
@@ -95,7 +95,7 @@ import { a as createReplyReferencePlanner, i as resolveSlackThreadTs, n as deliv
95
95
  import { r as detectBinary } from "./onboard-helpers-CF0Cp3OB.js";
96
96
  import { t as resolvePairingIdLabel } from "./pairing-labels-BHx_CdbP.js";
97
97
  import { t as getActiveWebListener } from "./active-listener-DEi7sEFa.js";
98
- import { a as resolveSubagentToolPolicy, i as resolveGroupToolPolicy, n as isToolAllowedByPolicies, r as resolveEffectiveToolPolicy, t as filterToolsByPolicy } from "./pi-tools.policy-QIVWAVVI.js";
98
+ import { a as resolveSubagentToolPolicy, i as resolveGroupToolPolicy, n as isToolAllowedByPolicies, r as resolveEffectiveToolPolicy, t as filterToolsByPolicy } from "./pi-tools.policy-o0ytjRqu.js";
99
99
  import { createRequire } from "node:module";
100
100
  import { execFileSync, spawn, spawnSync } from "node:child_process";
101
101
  import os, { homedir } from "node:os";
@@ -11042,7 +11042,7 @@ async function resolveSandboxWorkdir(params) {
11042
11042
  };
11043
11043
  }
11044
11044
  }
11045
- function resolveWorkdir(workdir, warnings) {
11045
+ function resolveWorkdir$1(workdir, warnings) {
11046
11046
  const fallback = safeCwd() ?? homedir();
11047
11047
  try {
11048
11048
  if (statSync(workdir).isDirectory()) return workdir;
@@ -12114,7 +12114,7 @@ function createExecTool(defaults) {
12114
12114
  });
12115
12115
  workdir = resolved.hostWorkdir;
12116
12116
  containerWorkdir = resolved.containerWorkdir;
12117
- } else workdir = resolveWorkdir(rawWorkdir, warnings);
12117
+ } else workdir = resolveWorkdir$1(rawWorkdir, warnings);
12118
12118
  const baseEnv = coerceEnv(process.env);
12119
12119
  if (host !== "sandbox" && params.env) validateHostEnv(params.env);
12120
12120
  const mergedEnv = params.env ? {
@@ -29913,6 +29913,254 @@ function createSubagentsTool(opts) {
29913
29913
  };
29914
29914
  }
29915
29915
 
29916
+ //#endregion
29917
+ //#region src/agents/tools/task-tool.ts
29918
+ /**
29919
+ * Long-task management tools (task_list, task_cancel).
29920
+ *
29921
+ * Companions to the detach-task pattern in skills/long-task. The detach
29922
+ * script writes task-<id>.{pid,cmd,started,log,status} state files into
29923
+ * the agent's workspace; these tools read and act on those files so the
29924
+ * agent can answer "what's running?" and kill a task without needing
29925
+ * shell access.
29926
+ *
29927
+ * task-id allow-list mirrors detach-task.sh: 1–60 chars from
29928
+ * [a-zA-Z0-9._-], must not start with '.' or '-'. Diverging would let the
29929
+ * agent kill processes it never spawned via path traversal.
29930
+ */
29931
+ const TASK_FILE_PREFIX = "task-";
29932
+ const TASK_ID_RE = /^[a-zA-Z0-9_][a-zA-Z0-9._-]{0,59}$/;
29933
+ const TASK_FILE_SUFFIXES = [
29934
+ ".pid",
29935
+ ".status",
29936
+ ".started",
29937
+ ".cmd",
29938
+ ".log"
29939
+ ];
29940
+ const ALLOWED_SIGNALS = new Set([
29941
+ "SIGTERM",
29942
+ "SIGINT",
29943
+ "SIGHUP",
29944
+ "SIGQUIT",
29945
+ "SIGKILL",
29946
+ "SIGUSR1",
29947
+ "SIGUSR2"
29948
+ ]);
29949
+ const TaskListSchema = Type.Object({ workdir: Type.Optional(Type.String()) });
29950
+ const TaskCancelSchema = Type.Object({
29951
+ taskId: Type.String(),
29952
+ workdir: Type.Optional(Type.String()),
29953
+ signal: Type.Optional(Type.String())
29954
+ });
29955
+ function normaliseSignal(input) {
29956
+ if (!input) return "SIGTERM";
29957
+ const upper = input.trim().toUpperCase();
29958
+ const candidate = upper.startsWith("SIG") ? upper : `SIG${upper}`;
29959
+ if (ALLOWED_SIGNALS.has(candidate)) return candidate;
29960
+ throw new Error(`Unsupported signal: ${input}. Allowed: TERM, INT, HUP, QUIT, KILL, USR1, USR2.`);
29961
+ }
29962
+ function isPidAlive(pid) {
29963
+ try {
29964
+ process.kill(pid, 0);
29965
+ return true;
29966
+ } catch (err) {
29967
+ if (err.code === "EPERM") return true;
29968
+ return false;
29969
+ }
29970
+ }
29971
+ async function safeRead(filePath) {
29972
+ try {
29973
+ return (await fs.promises.readFile(filePath, "utf8")).trim();
29974
+ } catch {
29975
+ return null;
29976
+ }
29977
+ }
29978
+ function resolveWorkdir(deps, override) {
29979
+ const raw = override?.trim();
29980
+ if (!raw) return deps.workspaceDir;
29981
+ if (!path.isAbsolute(raw)) throw new Error(`workdir must be an absolute path (got: ${raw})`);
29982
+ return raw;
29983
+ }
29984
+ async function readTaskInfo(workdir, id) {
29985
+ const pidPath = path.join(workdir, `${TASK_FILE_PREFIX}${id}.pid`);
29986
+ const [pidText, status, started, cmd] = await Promise.all([
29987
+ safeRead(pidPath),
29988
+ safeRead(path.join(workdir, `${TASK_FILE_PREFIX}${id}.status`)),
29989
+ safeRead(path.join(workdir, `${TASK_FILE_PREFIX}${id}.started`)),
29990
+ safeRead(path.join(workdir, `${TASK_FILE_PREFIX}${id}.cmd`))
29991
+ ]);
29992
+ let pid = null;
29993
+ if (pidText) {
29994
+ const parsed = Number.parseInt(pidText, 10);
29995
+ if (Number.isFinite(parsed) && parsed > 0) pid = parsed;
29996
+ }
29997
+ return {
29998
+ id,
29999
+ pid,
30000
+ alive: pid !== null && isPidAlive(pid),
30001
+ status: status ?? "missing",
30002
+ started,
30003
+ cmd,
30004
+ pidPath,
30005
+ statusPath: path.join(workdir, `${TASK_FILE_PREFIX}${id}.status`),
30006
+ logPath: path.join(workdir, `${TASK_FILE_PREFIX}${id}.log`)
30007
+ };
30008
+ }
30009
+ function createTaskListTool(deps) {
30010
+ return {
30011
+ label: "Task List",
30012
+ name: "task_list",
30013
+ description: `List long-running detached tasks in the agent's workspace.
30014
+
30015
+ Globs task-<id>.{pid,status,started,cmd,log} files, reads their state, and
30016
+ checks each PID's liveness. Use this to find the task-id of a running
30017
+ detach-task before calling task_cancel, or to answer "what's running right
30018
+ now?" without re-asking the user.
30019
+
30020
+ Returns: { workdir, tasks: [{ id, pid, alive, status, started, cmd, pidPath, statusPath, logPath }] }.
30021
+ Tasks whose .pid file is missing are still listed (alive=false, pid=null) so
30022
+ the agent can spot orphan state files.`,
30023
+ parameters: TaskListSchema,
30024
+ execute: async (_toolCallId, args) => {
30025
+ const override = readStringParam(args, "workdir");
30026
+ let workdir;
30027
+ try {
30028
+ workdir = resolveWorkdir(deps, override);
30029
+ } catch (err) {
30030
+ return jsonResult({
30031
+ workdir: override ?? deps.workspaceDir,
30032
+ tasks: [],
30033
+ error: err instanceof Error ? err.message : String(err)
30034
+ });
30035
+ }
30036
+ let entries;
30037
+ try {
30038
+ entries = await fs.promises.readdir(workdir);
30039
+ } catch (err) {
30040
+ if (err.code === "ENOENT") return jsonResult({
30041
+ workdir,
30042
+ tasks: []
30043
+ });
30044
+ return jsonResult({
30045
+ workdir,
30046
+ tasks: [],
30047
+ error: err instanceof Error ? err.message : String(err)
30048
+ });
30049
+ }
30050
+ const taskIds = /* @__PURE__ */ new Set();
30051
+ for (const entry of entries) {
30052
+ if (!entry.startsWith(TASK_FILE_PREFIX)) continue;
30053
+ for (const suffix of TASK_FILE_SUFFIXES) if (entry.endsWith(suffix)) {
30054
+ const id = entry.slice(5, -suffix.length);
30055
+ if (id.length > 0 && TASK_ID_RE.test(id)) taskIds.add(id);
30056
+ break;
30057
+ }
30058
+ }
30059
+ const tasks = await Promise.all([...taskIds].toSorted().map((id) => readTaskInfo(workdir, id)));
30060
+ return jsonResult({
30061
+ workdir,
30062
+ tasks
30063
+ });
30064
+ }
30065
+ };
30066
+ }
30067
+ function createTaskCancelTool(deps) {
30068
+ return {
30069
+ label: "Task Cancel",
30070
+ name: "task_cancel",
30071
+ description: `Send a signal (default SIGTERM) to a running detached task.
30072
+
30073
+ Reads task-<id>.pid in the workdir, validates the recorded PID is alive,
30074
+ and sends the signal via process.kill. The task's TERM/INT/HUP trap will
30075
+ write an "aborted" status before exiting, so a follow-up task_list call
30076
+ sees the canonical end state.
30077
+
30078
+ task-id must match the same allow-list as detach-task.sh: 1–60 chars from
30079
+ [a-zA-Z0-9._-], no leading '.' or '-'. signal accepts TERM (default), INT,
30080
+ HUP, QUIT, KILL, USR1, USR2 — with or without the "SIG" prefix.
30081
+
30082
+ Returns: { ok, taskId, pid, sentSignal, alreadyDead?, error? }.`,
30083
+ parameters: TaskCancelSchema,
30084
+ execute: async (_toolCallId, args) => {
30085
+ const params = args;
30086
+ const taskId = readStringParam(params, "taskId", { required: true });
30087
+ if (!TASK_ID_RE.test(taskId)) return jsonResult({
30088
+ ok: false,
30089
+ taskId,
30090
+ error: "taskId must be 1–60 chars from [a-zA-Z0-9._-] and must not start with '.' or '-'."
30091
+ });
30092
+ const override = readStringParam(params, "workdir");
30093
+ let workdir;
30094
+ try {
30095
+ workdir = resolveWorkdir(deps, override);
30096
+ } catch (err) {
30097
+ return jsonResult({
30098
+ ok: false,
30099
+ taskId,
30100
+ error: err instanceof Error ? err.message : String(err)
30101
+ });
30102
+ }
30103
+ const signalRaw = readStringParam(params, "signal");
30104
+ let signal;
30105
+ try {
30106
+ signal = normaliseSignal(signalRaw);
30107
+ } catch (err) {
30108
+ return jsonResult({
30109
+ ok: false,
30110
+ taskId,
30111
+ error: err instanceof Error ? err.message : String(err)
30112
+ });
30113
+ }
30114
+ const pidPath = path.join(workdir, `${TASK_FILE_PREFIX}${taskId}.pid`);
30115
+ let pidText;
30116
+ try {
30117
+ pidText = (await fs.promises.readFile(pidPath, "utf8")).trim();
30118
+ } catch (err) {
30119
+ if (err.code === "ENOENT") return jsonResult({
30120
+ ok: false,
30121
+ taskId,
30122
+ error: `no pid file at ${pidPath} — task is unknown or already cleaned up`
30123
+ });
30124
+ return jsonResult({
30125
+ ok: false,
30126
+ taskId,
30127
+ error: err instanceof Error ? err.message : String(err)
30128
+ });
30129
+ }
30130
+ const pid = Number.parseInt(pidText, 10);
30131
+ if (!Number.isFinite(pid) || pid <= 0) return jsonResult({
30132
+ ok: false,
30133
+ taskId,
30134
+ error: `pid file at ${pidPath} did not contain a positive integer`
30135
+ });
30136
+ if (!isPidAlive(pid)) return jsonResult({
30137
+ ok: false,
30138
+ taskId,
30139
+ pid,
30140
+ alreadyDead: true,
30141
+ error: "process is no longer running"
30142
+ });
30143
+ try {
30144
+ process.kill(pid, signal);
30145
+ } catch (err) {
30146
+ return jsonResult({
30147
+ ok: false,
30148
+ taskId,
30149
+ pid,
30150
+ sentSignal: signal,
30151
+ error: err instanceof Error ? err.message : String(err)
30152
+ });
30153
+ }
30154
+ return jsonResult({
30155
+ ok: true,
30156
+ taskId,
30157
+ pid,
30158
+ sentSignal: signal
30159
+ });
30160
+ }
30161
+ };
30162
+ }
30163
+
29916
30164
  //#endregion
29917
30165
  //#region src/agents/tools/tts-tool.ts
29918
30166
  const TtsToolSchema = Type.Object({
@@ -31213,6 +31461,8 @@ function createSymiTools(options) {
31213
31461
  config: options?.config
31214
31462
  }),
31215
31463
  createCronTool({ agentSessionKey: options?.agentSessionKey }),
31464
+ createTaskListTool({ workspaceDir }),
31465
+ createTaskCancelTool({ workspaceDir }),
31216
31466
  ...messageTool ? [messageTool] : [],
31217
31467
  createTtsTool({
31218
31468
  agentChannel: options?.agentChannel,
@@ -39013,6 +39263,7 @@ async function resolveDetachScriptPath(params) {
39013
39263
  return cachedScriptPath;
39014
39264
  }
39015
39265
  async function buildLongTaskPromptSuffix(params) {
39266
+ if (params.cronEnabled === false) return "";
39016
39267
  const scriptPath = await resolveDetachScriptPath(params);
39017
39268
  if (!scriptPath) return "";
39018
39269
  return "\n\n" + [
@@ -39024,10 +39275,7 @@ async function buildLongTaskPromptSuffix(params) {
39024
39275
  " • workdir: absolute path you own (e.g. the agent workspace).",
39025
39276
  " • Script spawns under setsid+nohup+disown, writes task-<id>.{pid,cmd,started,log,status} files.",
39026
39277
  "- 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.",
39027
- "- Register a cron monitor using the `cron` tool with action=add. Required fields:",
39028
- " • schedule: { kind: \"interval\", ms: 180000 } (every 3 minutes; minimum 60000)",
39029
- " • payload: { kind: \"agent\", sessionTarget: \"isolated\", text: <job prompt> }",
39030
- " 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.",
39278
+ "- 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.",
39031
39279
  "- Safe status read (inside the monitor turn):",
39032
39280
  " `status=$(cat \"<workdir>/task-<id>.status\" 2>/dev/null || echo missing)`",
39033
39281
  " 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.",
@@ -39035,7 +39283,8 @@ async function buildLongTaskPromptSuffix(params) {
39035
39283
  " • If status begins with `running`: tail -n 20 <log>, post a one-sentence progress line.",
39036
39284
  " • If status begins with `complete`: post a final summary with rc and tail, then call cron action=remove on this job id.",
39037
39285
  " • If status begins with `aborted`: post a failure summary with signal and tail, then call cron action=remove.",
39038
- " • Never leave stale monitors running after the task finishes."
39286
+ " • Never leave stale monitors running after the task finishes.",
39287
+ "- 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."
39039
39288
  ].join("\n");
39040
39289
  }
39041
39290
 
@@ -40096,7 +40345,8 @@ async function runEmbeddedAttempt(params) {
40096
40345
  const longTaskSuffix = await buildLongTaskPromptSuffix({
40097
40346
  argv1: process.argv[1],
40098
40347
  cwd: process.cwd(),
40099
- moduleUrl: import.meta.url
40348
+ moduleUrl: import.meta.url,
40349
+ cronEnabled: process.env.SYMI_SKIP_CRON !== "1" && params.config?.cron?.enabled !== false
40100
40350
  });
40101
40351
  const emailCapabilitySuffix = buildEmailCapabilityPromptSuffix();
40102
40352
  const systemPromptText = createSystemPromptOverride(appendPrompt + longTaskSuffix + emailCapabilitySuffix + profilePromptSuffix)();
@@ -53585,7 +53835,7 @@ function isVoiceChannelType(type) {
53585
53835
  function createDefaultDeps() {
53586
53836
  return {
53587
53837
  sendMessageWhatsApp: async (...args) => {
53588
- const { sendMessageWhatsApp } = await import("./web-D6PPeyG7.js");
53838
+ const { sendMessageWhatsApp } = await import("./web-CN7wnU7w.js");
53589
53839
  return await sendMessageWhatsApp(...args);
53590
53840
  },
53591
53841
  sendMessageTelegram: async (...args) => {
@@ -68899,7 +69149,7 @@ function loadWebLoginQr() {
68899
69149
  return webLoginQrPromise;
68900
69150
  }
68901
69151
  function loadWebChannel() {
68902
- webChannelPromise ??= import("./web-D6PPeyG7.js");
69152
+ webChannelPromise ??= import("./web-CN7wnU7w.js");
68903
69153
  return webChannelPromise;
68904
69154
  }
68905
69155
  function loadWhatsAppActions() {
@@ -1,4 +1,4 @@
1
- import { at as isFileLogLevelEnabled, ct as levelToMinLevel, lt as normalizeLogLevel, n as CHAT_CHANNEL_ORDER, q as isVerbose, rt as getChildLogger, st as loggingState, ut as readLoggingConfig } from "./registry-DYq1AYOv.js";
1
+ import { at as isFileLogLevelEnabled, ct as levelToMinLevel, lt as normalizeLogLevel, n as CHAT_CHANNEL_ORDER, q as isVerbose, rt as getChildLogger, st as loggingState, ut as readLoggingConfig } from "./registry-X6fUE0K7.js";
2
2
  import { Chalk } from "chalk";
3
3
 
4
4
  //#region src/terminal/progress-line.ts
@@ -7,7 +7,7 @@ import "./reply-prefix-K_J_nfgx.js";
7
7
  import "./github-copilot-token-BbsJ0Qbo.js";
8
8
  import "./env-CQ_DQOwT.js";
9
9
  import "./tokens-Cn6drXx2.js";
10
- import { p as runAgentTurn } from "./pi-embedded-DXY7TLac.js";
10
+ import { p as runAgentTurn } from "./pi-embedded-CdOdQw2i.js";
11
11
  import "./plugins-71oIavrF.js";
12
12
  import "./accounts-DDEyGwby.js";
13
13
  import "./bindings-DYVakimr.js";
@@ -35,7 +35,7 @@ import "./accounts-DImOt9jX.js";
35
35
  import "./paths-DkMamAQ-.js";
36
36
  import "./tool-images-ChC2CXaN.js";
37
37
  import "./image-MNvheU8U.js";
38
- import "./manager-DHRBy5oR.js";
38
+ import "./manager-BtWtmpxN.js";
39
39
  import "./gemini-auth-DVcG-42i.js";
40
40
  import "./retry-QGp0jvVi.js";
41
41
  import "./sqlite-Bo4pHfp8.js";
@@ -1,66 +1,66 @@
1
- import "./paths-CE7eVGHg.js";
2
- import "./registry-DYq1AYOv.js";
3
- import "./agent-scope-CpEJ0B88.js";
4
- import { t as createSubsystemLogger } from "./subsystem-BjyjJF-d.js";
5
- import "./workspace-DscDraUb.js";
6
- import { t as runAgentTurn } from "./unified-runner-CVItnwwP.js";
7
- import "./paths-CbQV9WEg.js";
8
- import "./auth-profiles-C2vj6htZ.js";
9
- import "./env-BDXYbTKj.js";
10
- import "./github-copilot-token-cCYzSU9h.js";
1
+ import "./paths-CYmyCDsE.js";
2
+ import "./registry-X6fUE0K7.js";
3
+ import "./agent-scope-Cpm7a9ss.js";
4
+ import { t as createSubsystemLogger } from "./subsystem-CzXhCdeY.js";
5
+ import "./workspace-CywO4ayZ.js";
6
+ import { t as runAgentTurn } from "./unified-runner-Czg3pdBc.js";
7
+ import "./paths-DEuVuViW.js";
8
+ import "./auth-profiles-BzB_Exeq.js";
9
+ import "./env-CB65jmJQ.js";
10
+ import "./github-copilot-token-B8B2pmph.js";
11
11
  import "./boolean-CE7i9tBR.js";
12
- import "./pi-embedded-helpers-D1_Sab0M.js";
13
- import "./config-BkZ9HOKT.js";
14
- import "./manifest-registry-CBCGTsIb.js";
15
- import "./chrome-ROtrXlNs.js";
16
- import "./frontmatter-CTR5f_Ez.js";
17
- import "./skills-CXxrn_e2.js";
12
+ import "./pi-embedded-helpers-DwQ9wJeT.js";
13
+ import "./config-C4WnAd-c.js";
14
+ import "./manifest-registry-BvGv6lp9.js";
15
+ import "./chrome-DwXnykXR.js";
16
+ import "./frontmatter-CT1M0pRK.js";
17
+ import "./skills-BrYDT4Jr.js";
18
18
  import "./redact-BDMXB06K.js";
19
19
  import "./errors-XIsvXeC-.js";
20
- import "./image-ops-C7CauEK8.js";
20
+ import "./image-ops-CY7v6vvp.js";
21
21
  import "./ssrf-DpUUUgkK.js";
22
- import "./store-01F_JM7O.js";
23
- import "./thinking-BprCy23Z.js";
24
- import "./message-channel-OlFBYAw8.js";
25
- import "./plugins-BzmbgY7s.js";
26
- import "./accounts-BRw8yhIW.js";
27
- import "./accounts-3dCrO3oZ.js";
28
- import "./accounts-BuZxOb3B.js";
29
- import "./bindings-BsHoBLIE.js";
30
- import "./send-BKo1T3HF.js";
31
- import "./send-C0QjmPaf.js";
32
- import "./tool-images-SqqWIT22.js";
33
- import "./deliver-B0OUq6RP.js";
34
- import "./diagnostic-BUcR3Meg.js";
22
+ import "./store-Ceagbc4L.js";
23
+ import "./thinking-BV7SCNJP.js";
24
+ import "./message-channel-lwVT8QjK.js";
25
+ import "./plugins-v8k1XVOy.js";
26
+ import "./accounts-BsgY6sda.js";
27
+ import "./accounts-wWWkC0JH.js";
28
+ import "./accounts-Bsg6r6H7.js";
29
+ import "./bindings-xcRox9xM.js";
30
+ import "./send-cCTQjuOZ.js";
31
+ import "./send-CSydU49L.js";
32
+ import "./tool-images-JxNglLSr.js";
33
+ import "./deliver-SLYAWE19.js";
34
+ import "./diagnostic-DTkZsRNM.js";
35
35
  import "./diagnostic-session-state-Zw87xFym.js";
36
- import "./image-BuVL0jHI.js";
37
- import "./pi-auth-json-RXOlh8ar.js";
38
- import "./tokens-W0JzCJJM.js";
39
- import "./send-Bb4it0te.js";
36
+ import "./image-BHF_fnIp.js";
37
+ import "./pi-auth-json-Bv1NzJdR.js";
38
+ import "./tokens-Bl5R3wPD.js";
39
+ import "./send-BTfqlrYd.js";
40
40
  import "./pi-model-discovery-CuZX_Q4t.js";
41
- import "./reply-prefix-CvEIl6_d.js";
42
- import "./manager-Df_ZdrNG.js";
43
- import "./gemini-auth-BefM10YB.js";
44
- import "./retry-B-y5suGA.js";
45
- import "./sqlite-BN_hIcmu.js";
46
- import "./target-errors-DeJTztcq.js";
47
- import "./chunk-BRe1o4Af.js";
48
- import "./markdown-tables-x2Xe2UXh.js";
49
- import "./local-roots-ClipCZ9s.js";
50
- import "./ir-7tMVY7D_.js";
41
+ import "./reply-prefix-CI_IdwqH.js";
42
+ import "./manager-DxCmjSfP.js";
43
+ import "./gemini-auth-D80BsXr2.js";
44
+ import "./retry-4oEAHckB.js";
45
+ import "./sqlite-P-gMg7fi.js";
46
+ import "./target-errors-uNitqCCT.js";
47
+ import "./chunk-BcxcL1U3.js";
48
+ import "./markdown-tables-CE-qSMGB.js";
49
+ import "./local-roots-tcdaIEhh.js";
50
+ import "./ir-D6MiJpAy.js";
51
51
  import "./render-D1xvLuGo.js";
52
- import "./commands-registry-DxbSTLNQ.js";
53
- import "./runner-ecX1WzDt.js";
54
- import "./skill-commands-DG2lcozb.js";
52
+ import "./commands-registry-ByGkL6hs.js";
53
+ import "./runner-B5oNTtgf.js";
54
+ import "./skill-commands-BcOduw6G.js";
55
55
  import "./fetch-ClslA6GS.js";
56
- import "./channel-activity-D8QD7GoV.js";
57
- import "./tables-DoG-pFrf.js";
58
- import "./send-Cpk3Ti6-.js";
59
- import "./outbound-attachment-DeCnZT-8.js";
60
- import "./send-DFtnbzqy.js";
61
- import "./resolve-route-Jy5dFY67.js";
56
+ import "./channel-activity-CzHaIUAp.js";
57
+ import "./tables-qbCoZrYA.js";
58
+ import "./send-Du-IfSne.js";
59
+ import "./outbound-attachment-BWyKV1Gy.js";
60
+ import "./send-ASDB3AzC.js";
61
+ import "./resolve-route-BgSuN9c6.js";
62
62
  import "./proxy-d9fklNTC.js";
63
- import "./replies-CUWXgyx2.js";
63
+ import "./replies-86F3PldM.js";
64
64
 
65
65
  //#region src/memory/synthesis.ts
66
66
  const log = createSubsystemLogger("memory/synthesis");
@@ -1,7 +1,7 @@
1
1
  import "./paths-Cqn-zk3M.js";
2
2
  import "./utils-B-0b9bGM.js";
3
3
  import "./thinking-EAliFiVK.js";
4
- import { zt as runAgentTurn } from "./reply-CUR4xpYM.js";
4
+ import { zt as runAgentTurn } from "./reply-Dg1ZU3DZ.js";
5
5
  import "./registry-Cja8eT7G.js";
6
6
  import { t as createSubsystemLogger } from "./subsystem-D9vIQve0.js";
7
7
  import "./exec-CWkblSrI.js";
@@ -60,8 +60,8 @@ import "./diagnostic-session-state-CUslJyKP.js";
60
60
  import "./send-DpMnSIi5.js";
61
61
  import "./model-ECsJuJew.js";
62
62
  import "./reply-prefix-CE2YmmsD.js";
63
- import "./memory-cli-T-a5-lqZ.js";
64
- import "./manager-BJvYQ7xP.js";
63
+ import "./memory-cli-ENCASZJk.js";
64
+ import "./manager-DrmlegR2.js";
65
65
  import "./retry-BoS4e4X_.js";
66
66
  import "./sqlite-D55gRQbH.js";
67
67
  import "./target-errors-C9e6dMU_.js";
@@ -98,7 +98,7 @@ import "./prompt-style-Y2J72w6p.js";
98
98
  import "./pairing-labels-CTL1gXZb.js";
99
99
  import "./exec-approvals-DEigTi7M.js";
100
100
  import "./nodes-screen-BZS89z6C.js";
101
- import "./pi-tools.policy-BZrM6a-w.js";
101
+ import "./pi-tools.policy-Bx5zp45n.js";
102
102
  import "./control-service-C0pRqIFv.js";
103
103
  import "./stagger-CZ1Rrj7O.js";
104
104
  import "./channel-selection-9fIQGtZy.js";