@symerian/symi 2.8.13 → 2.8.15

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 (272) hide show
  1. package/dist/{acp-cli-D7uCUCr8.js → acp-cli-BgR7mxTS.js} +2 -2
  2. package/dist/{acp-cli-CAU8UW9I.js → acp-cli-D1JYg9c1.js} +2 -2
  3. package/dist/{agents-CgCg4syn.js → agents-BhhAcFrX.js} +5 -5
  4. package/dist/{agents.config-BnPC7uct.js → agents.config-BOvsz6E6.js} +1 -1
  5. package/dist/{agents.config-DqWxpgkX.js → agents.config-D967tgmP.js} +1 -1
  6. package/dist/{audit-Oa5dsn5p.js → audit-Dr_8rC6G.js} +3 -3
  7. package/dist/{audit-Bi9Je9FZ.js → audit-xiwEIT96.js} +3 -3
  8. package/dist/{auth-choice-BKwypsnS.js → auth-choice-DEKKbufH.js} +2 -2
  9. package/dist/{auth-choice-BIlBt2d0.js → auth-choice-Pzy-t2mh.js} +2 -2
  10. package/dist/{banner-CX5CuLWQ.js → banner-CiHQEfyr.js} +1 -1
  11. package/dist/{browser-cli-5ME9iiC3.js → browser-cli-BQeCPbES.js} +3 -3
  12. package/dist/{browser-cli-BTci35qB.js → browser-cli-IXepRCZR.js} +3 -3
  13. package/dist/build-info.json +3 -3
  14. package/dist/bundled/boot-md/handler.js +2 -2
  15. package/dist/bundled/session-memory/handler.js +2 -2
  16. package/dist/{call-Cmb04dff.js → call-BkJK3eYP.js} +2 -1
  17. package/dist/{call-BrRWr7Lj.js → call-CAGvQYXj.js} +2 -1
  18. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  19. package/dist/{channel-options-mUKQVJQl.js → channel-options-DGuilErd.js} +1 -1
  20. package/dist/{channel-options-7y9EuPLO.js → channel-options-_erlRi2w.js} +1 -1
  21. package/dist/{channel-web-Dldh4zVI.js → channel-web-DwfovJKQ.js} +1 -1
  22. package/dist/{channels-cli-Q6Q8LokG.js → channels-cli-B2Zf1oz9.js} +10 -10
  23. package/dist/{channels-cli-Dz9vV1KL.js → channels-cli-DUsK2bXE.js} +10 -10
  24. package/dist/cli/daemon-cli.js +1 -1
  25. package/dist/{cli-DMsLCQbO.js → cli-BpmyiZc9.js} +7 -7
  26. package/dist/{cli-D4WYEtu4.js → cli-DUiSlxsb.js} +7 -7
  27. package/dist/{client-C7AOOnKZ.js → client-CYsBIR3j.js} +27 -1
  28. package/dist/{client-qUlxXXVJ.js → client-Cmq13-uF.js} +27 -1
  29. package/dist/{command-registry-cEqGIx4b.js → command-registry-B8LVEWW9.js} +11 -11
  30. package/dist/{completion-cli-Bw0jbNaG.js → completion-cli-D-_MV8eA.js} +1 -1
  31. package/dist/{completion-cli-C5GCKfKT.js → completion-cli-DZeK6_ev.js} +2 -2
  32. package/dist/{config-cli-DP0hP7WR.js → config-cli-B7ZvHIMY.js} +1 -1
  33. package/dist/{config-cli-DgHooQ4_.js → config-cli-D_m0QL6c.js} +1 -1
  34. package/dist/{configure-OUiXvgMg.js → configure-DFg-N_i2.js} +6 -6
  35. package/dist/{configure-BQUkaPdS.js → configure-DXml-xDR.js} +6 -6
  36. package/dist/control-ui/index.html +7 -0
  37. package/dist/control-ui/js/menu.js +2 -0
  38. package/dist/control-ui/js/settings.js +1 -0
  39. package/dist/{cron-cli-CGJveo7P.js → cron-cli-CZCm3aLt.js} +3 -3
  40. package/dist/{cron-cli-Crh_r2aK.js → cron-cli-Dq2FEfK1.js} +3 -3
  41. package/dist/{daemon-cli-Cq-IaYw4.js → daemon-cli-B2_uIgDM.js} +2 -2
  42. package/dist/{daemon-cli-CAIg9sMo.js → daemon-cli-CweMes2K.js} +2 -2
  43. package/dist/daemon-cli.js +27 -0
  44. package/dist/{devices-cli-CUT_8CuJ.js → devices-cli-3ui-Wcaj.js} +2 -2
  45. package/dist/{devices-cli-hSn5vjJZ.js → devices-cli-DeoPyzAd.js} +2 -2
  46. package/dist/{doctor-completion-BSMAyCq_.js → doctor-completion-CQXl3jf4.js} +1 -1
  47. package/dist/{doctor-completion-DlKvncR9.js → doctor-completion-Cu7DwgVw.js} +1 -1
  48. package/dist/entry.js +1 -1
  49. package/dist/{exec-approvals-cli-BTfZiH6z.js → exec-approvals-cli-Bx9loYnQ.js} +4 -4
  50. package/dist/{exec-approvals-cli-DTad2Zi_.js → exec-approvals-cli-CTEn_Eu_.js} +4 -4
  51. package/dist/extensionAPI.js +2 -2
  52. package/dist/{gateway-cli-NI7W2QxR.js → gateway-cli-B2XchN3Y.js} +35 -17
  53. package/dist/{gateway-cli-BlRNLVfU.js → gateway-cli-P0olUhID.js} +35 -17
  54. package/dist/{gateway-rpc-BKJyAcQd.js → gateway-rpc-DbSbyIcL.js} +1 -1
  55. package/dist/{gateway-rpc-DActF8Qj.js → gateway-rpc-QsFn5Zr1.js} +1 -1
  56. package/dist/{glass-ui-ws-BBkFBsKB.js → glass-ui-ws-Cs2jfN42.js} +14 -14
  57. package/dist/{glass-ui-ws-DxrESDzy.js → glass-ui-ws-tIVOcdB2.js} +14 -14
  58. package/dist/{health-D4vU-wV-.js → health-Cs8wf7Hb.js} +2 -2
  59. package/dist/{health-fOu0S75U.js → health-DMy1nA4K.js} +2 -2
  60. package/dist/{hooks-cli-BdgnXYmw.js → hooks-cli-D6awUCDl.js} +8 -8
  61. package/dist/{hooks-cli-DdSggQYs.js → hooks-cli-DIH-zxCG.js} +8 -8
  62. package/dist/index.js +12 -12
  63. package/dist/llm-slug-generator.js +2 -2
  64. package/dist/{logs-cli-BPnrAg0W.js → logs-cli-1hn28HCu.js} +3 -3
  65. package/dist/{logs-cli-DiDesnnp.js → logs-cli-R4WwQvR2.js} +3 -3
  66. package/dist/{manager-syNf_ZrI.js → manager-B60Ncruq.js} +1 -1
  67. package/dist/{manager-DRrGn88w.js → manager-B76ofKkW.js} +1 -1
  68. package/dist/{manager-_RGWWymD.js → manager-D0_H4LHh.js} +1 -1
  69. package/dist/{manager-TOeH0D8K.js → manager-wF-n_prX.js} +1 -1
  70. package/dist/{memory-cli-0jm-n36m.js → memory-cli-DRLrIa8h.js} +3 -3
  71. package/dist/{memory-cli-BSOOwpt1.js → memory-cli-eSWCbEiS.js} +3 -3
  72. package/dist/{models-sGeWQOmg.js → models-B5H41UsH.js} +3 -3
  73. package/dist/{models-cli-DV-J1cm0.js → models-cli-CHFi2_kC.js} +9 -9
  74. package/dist/{models-cli-CtkoEyh3.js → models-cli-CVfq_g6h.js} +8 -8
  75. package/dist/{node-cli-DwDQpTW5.js → node-cli-BBN6PoOG.js} +1 -1
  76. package/dist/{node-cli-DEcCM2p0.js → node-cli-BsAzTrAx.js} +1 -1
  77. package/dist/{nodes-cli-CqBLemeB.js → nodes-cli-DE60dv81.js} +3 -3
  78. package/dist/{nodes-cli-u8k6TPmF.js → nodes-cli-t3azniiS.js} +3 -3
  79. package/dist/{onboard-CWBYuaCm.js → onboard-DKK6UJjF.js} +3 -3
  80. package/dist/{onboard-FeTHeA1y.js → onboard-DgPzeL3U.js} +3 -3
  81. package/dist/{onboard-channels-D8bDJYPc.js → onboard-channels-BTuYOQO-.js} +1 -1
  82. package/dist/{onboard-channels-DpZkjldS.js → onboard-channels-DvNwlvWZ.js} +1 -1
  83. package/dist/{onboard-helpers-C8f_xi6R.js → onboard-helpers-B7jBYbCU.js} +1 -1
  84. package/dist/{onboard-helpers-CF0Cp3OB.js → onboard-helpers-DjlGq6iG.js} +1 -1
  85. package/dist/{onboard-remote-DgGH0dTe.js → onboard-remote-CXuHbtrT.js} +1 -1
  86. package/dist/{onboard-remote-CWal5_aZ.js → onboard-remote-D7wGqONm.js} +1 -1
  87. package/dist/{onboard-skills-DnzJLU2H.js → onboard-skills-BDhqz3te.js} +1 -1
  88. package/dist/{onboard-skills-CO2TjuO3.js → onboard-skills-ChQnpMi-.js} +1 -1
  89. package/dist/{onboarding-c2qhwP0x.js → onboarding-CCHq8fd9.js} +7 -7
  90. package/dist/{onboarding-BsPnnH5g.js → onboarding-CeqXuQPm.js} +7 -7
  91. package/dist/{onboarding.finalize-7St3fmk2.js → onboarding.finalize-Cw4TWelq.js} +13 -13
  92. package/dist/{onboarding.finalize-id9EHg1P.js → onboarding.finalize-DxWVkNx9.js} +12 -12
  93. package/dist/{onboarding.gateway-config-DlV0vso8.js → onboarding.gateway-config-Cm5jIfRz.js} +3 -3
  94. package/dist/{onboarding.gateway-config-D4rQoPRi.js → onboarding.gateway-config-wAyLcGRu.js} +3 -3
  95. package/dist/{pi-embedded-DCBB1_SC.js → pi-embedded-CGwqumSe.js} +339 -10
  96. package/dist/{pi-tools.policy-BZrM6a-w.js → pi-tools.policy-Bx5zp45n.js} +2 -0
  97. package/dist/{pi-tools.policy-QIVWAVVI.js → pi-tools.policy-o0ytjRqu.js} +2 -0
  98. package/dist/{plugin-registry-BJSfTT8c.js → plugin-registry-CJKHlm9W.js} +1 -1
  99. package/dist/{plugin-registry-Cy1kfzAy.js → plugin-registry-kiYkB_km.js} +1 -1
  100. package/dist/plugin-sdk/{accounts-BtaOa4z_.js → accounts-BToL3HlP.js} +1 -1
  101. package/dist/plugin-sdk/{accounts-Ddm33hQm.js → accounts-D9zGZU5t.js} +3 -3
  102. package/dist/plugin-sdk/{accounts-s-AdhXVR.js → accounts-Dtszw3Zn.js} +1 -1
  103. package/dist/plugin-sdk/{active-listener-DYjn3fML.js → active-listener-CJuvR4C2.js} +1 -1
  104. package/dist/plugin-sdk/{agent-scope-CYYpcO9W.js → agent-scope-C3gMMKCU.js} +2 -2
  105. package/dist/plugin-sdk/agents/pi-embedded-runner/long-task-prompt.d.ts +7 -0
  106. package/dist/plugin-sdk/agents/tools/task-tool.d.ts +7 -0
  107. package/dist/plugin-sdk/{api-key-rotation-DGJZ8SVa.js → api-key-rotation-CBsLb_4V.js} +1 -1
  108. package/dist/plugin-sdk/{audio-preflight-CiVw8470.js → audio-preflight-DucGa8w7.js} +24 -24
  109. package/dist/plugin-sdk/{bindings-C7hRtgYW.js → bindings-BbwoUGPx.js} +2 -2
  110. package/dist/plugin-sdk/{channel-activity-DoC1xtDu.js → channel-activity-Ji7f0gqq.js} +1 -1
  111. package/dist/plugin-sdk/{channel-web-BSDjZSwm.js → channel-web-C9SUmtjL.js} +22 -22
  112. package/dist/plugin-sdk/{chrome-CEqfiEs0.js → chrome-D9kN9org.js} +3 -3
  113. package/dist/plugin-sdk/{chunk-Dw2XBYXv.js → chunk-jvk9axTQ.js} +1 -1
  114. package/dist/plugin-sdk/{command-format-GKSevep4.js → command-format-DSdvQ_M5.js} +1 -1
  115. package/dist/plugin-sdk/{commands-registry-BhW_oGNt.js → commands-registry-BuYpmEx-.js} +4 -4
  116. package/dist/plugin-sdk/{config-Ckum15iC.js → config-BzupW6LN.js} +9 -9
  117. package/dist/plugin-sdk/{consolidate-COuTEt4Z.js → consolidate-CafShdsH.js} +2 -2
  118. package/dist/plugin-sdk/{deliver-B8Y2t-RH.js → deliver-CKgFosI5.js} +10 -10
  119. package/dist/plugin-sdk/{diagnostic-BR07buTm.js → diagnostic-_oc91gNi.js} +1 -1
  120. package/dist/plugin-sdk/gateway/protocol/index.d.ts +6 -3
  121. package/dist/plugin-sdk/gateway/protocol/schema/tasks.d.ts +40 -0
  122. package/dist/plugin-sdk/gateway/protocol/schema/types.d.ts +3 -0
  123. package/dist/plugin-sdk/gateway/protocol/schema.d.ts +1 -0
  124. package/dist/plugin-sdk/{image-CCmNHDV0.js → image-DFyINnvE.js} +4 -4
  125. package/dist/plugin-sdk/{image-ops-BlQR__MN.js → image-ops-Bnp6LXEx.js} +1 -1
  126. package/dist/plugin-sdk/index.js +54 -54
  127. package/dist/plugin-sdk/infra/long-task-state.d.ts +34 -0
  128. package/dist/plugin-sdk/{ir-BJ6BHE5b.js → ir-Fb3qpcis.js} +4 -4
  129. package/dist/plugin-sdk/{local-roots-BHLNSI8U.js → local-roots-Ckk1QfzI.js} +3 -3
  130. package/dist/plugin-sdk/{login-g_rQAcuM.js → login-K1YB_7-t.js} +7 -7
  131. package/dist/plugin-sdk/{login-qr-BOUmLSY3.js → login-qr-lMl_OqDj.js} +9 -9
  132. package/dist/plugin-sdk/{manager-B9GigLWj.js → manager-DUmxOoHb.js} +9 -9
  133. package/dist/plugin-sdk/{manifest-registry-BRx4JDK0.js → manifest-registry-hy3Bn-r9.js} +1 -1
  134. package/dist/plugin-sdk/{markdown-tables-BoYFajMu.js → markdown-tables-Dfaqilz6.js} +1 -1
  135. package/dist/plugin-sdk/{message-channel-COTAJzHd.js → message-channel-BdI5Ra9S.js} +1 -1
  136. package/dist/plugin-sdk/{model-selection-Bbs4XGPG.js → model-selection-CtVwtb6y.js} +4 -4
  137. package/dist/plugin-sdk/{outbound-BVhSNFy0.js → outbound-DW3cqlQW.js} +7 -7
  138. package/dist/plugin-sdk/{outbound-attachment-B56R1Wi4.js → outbound-attachment-D7ME_Kib.js} +2 -2
  139. package/dist/plugin-sdk/{pi-auth-json-CB2bV0Jd.js → pi-auth-json-DiyK6bgV.js} +1 -1
  140. package/dist/plugin-sdk/{pi-embedded-helpers-dd3G9Hfi.js → pi-embedded-helpers-BL7ZRhGv.js} +17 -17
  141. package/dist/plugin-sdk/{plugins-BNByVCIH.js → plugins-BbAvhC25.js} +4 -4
  142. package/dist/plugin-sdk/{pw-ai-BXeOYCz_.js → pw-ai-B3T0mTHr.js} +8 -8
  143. package/dist/plugin-sdk/{qmd-manager-wIr8qz2n.js → qmd-manager-BlUikj9s.js} +4 -4
  144. package/dist/plugin-sdk/{registry-D0xTnUWt.js → registry--_pGht6S.js} +2 -2
  145. package/dist/plugin-sdk/{replies-CQ4szNhV.js → replies-BR2TPTVW.js} +3 -3
  146. package/dist/plugin-sdk/{reply-DD8z_dUW.js → reply-DwJ-3Et9.js} +412 -83
  147. package/dist/plugin-sdk/{reply-prefix-uxfMZW4p.js → reply-prefix-BHuV5t70.js} +1 -1
  148. package/dist/plugin-sdk/{resolve-outbound-target-BiyAyTWz.js → resolve-outbound-target-BkCUbYGV.js} +2 -2
  149. package/dist/plugin-sdk/{resolve-route-CWfcnhza.js → resolve-route-CHQ7BTlU.js} +3 -3
  150. package/dist/plugin-sdk/{retry-CwQ_iIj8.js → retry-ilSJqnz9.js} +1 -1
  151. package/dist/plugin-sdk/{runner-BuxCHv_O.js → runner-BhifC1J_.js} +9 -9
  152. package/dist/plugin-sdk/{send-fNRDT21N.js → send-BP5pSPaZ.js} +6 -6
  153. package/dist/plugin-sdk/{send-BtO-7fHs.js → send-CGhw9mO3.js} +6 -6
  154. package/dist/plugin-sdk/{send-CKXzQuXo.js → send-DLO_yV5_.js} +10 -10
  155. package/dist/plugin-sdk/{send-Djq5IPRa.js → send-ZhAe1nXO.js} +10 -10
  156. package/dist/plugin-sdk/{send-XSuwT1PC.js → send-jsofmTfJ.js} +7 -7
  157. package/dist/plugin-sdk/{session-ARbcLHE9.js → session-BfyK_04G.js} +4 -4
  158. package/dist/plugin-sdk/{skill-commands-yzJVuTIW.js → skill-commands-DEfqC_kJ.js} +5 -5
  159. package/dist/plugin-sdk/{skills-BfsaS1F9.js → skills-C9DbB-Kp.js} +7 -7
  160. package/dist/plugin-sdk/{sqlite-A3wGzttn.js → sqlite-CmVrFEYD.js} +1 -1
  161. package/dist/plugin-sdk/{store-BdrNabcU.js → store-Do3t33-c.js} +2 -2
  162. package/dist/plugin-sdk/{subsystem-B2uDN3TV.js → subsystem-Coz2AgU8.js} +1 -1
  163. package/dist/plugin-sdk/{synthesis-Dv5GwSky.js → synthesis-BzYtaV97.js} +49 -49
  164. package/dist/plugin-sdk/{tables-DNwXwNFa.js → tables-DR0NmBeH.js} +1 -1
  165. package/dist/plugin-sdk/{target-errors-Paro1BjP.js → target-errors-B7YyMnIi.js} +2 -2
  166. package/dist/plugin-sdk/{thinking-CXqf7WTe.js → thinking-DCNUIAHY.js} +5 -5
  167. package/dist/plugin-sdk/{tokens-bC3UVmVH.js → tokens-CWMflosr.js} +1 -1
  168. package/dist/plugin-sdk/{tool-images-HJ2sfZDV.js → tool-images-D7Lno-TE.js} +2 -2
  169. package/dist/plugin-sdk/{tool-loop-detection-gmtzSlNZ.js → tool-loop-detection-DseOlBug.js} +2 -2
  170. package/dist/plugin-sdk/web-BQzPfsd0.js +66 -0
  171. package/dist/plugin-sdk/{whatsapp-actions-B_1l8JMU.js → whatsapp-actions-eTefsWhW.js} +21 -21
  172. package/dist/{plugins-cli-6UYkZBH0.js → plugins-cli-DTI2yj-y.js} +8 -8
  173. package/dist/{plugins-cli-DPetEhfv.js → plugins-cli-tV4C5XJc.js} +8 -8
  174. package/dist/{program-CVy9LVoS.js → program-8Zg4CY5d.js} +13 -13
  175. package/dist/{program-context-CBI6gIf-.js → program-context-BcKgBBit.js} +30 -30
  176. package/dist/{prompt-select-styled-Bv675D48.js → prompt-select-styled-CfKZlGfF.js} +8 -8
  177. package/dist/{prompt-select-styled-BlXl_Qf7.js → prompt-select-styled-DigPcXuk.js} +8 -8
  178. package/dist/{provider-auth-helpers-RUQD5XAm.js → provider-auth-helpers-BH3oyYln.js} +1 -1
  179. package/dist/{provider-auth-helpers-BB1lhCy5.js → provider-auth-helpers-Db02DMW2.js} +1 -1
  180. package/dist/{push-apns-rPetW5cI.js → push-apns-7rC1ybp8.js} +1 -1
  181. package/dist/{push-apns-Cr-a1KBt.js → push-apns-f_6DGP6z.js} +1 -1
  182. package/dist/{register.agent-DKDwNHQi.js → register.agent-CocfT8Pk.js} +12 -12
  183. package/dist/{register.agent-j6OlKEU-.js → register.agent-DETyFsMT.js} +11 -11
  184. package/dist/{register.configure-BgIXIq9d.js → register.configure-BAiFzdYa.js} +14 -14
  185. package/dist/{register.configure-CopgSygi.js → register.configure-VcTwHq1a.js} +14 -14
  186. package/dist/{register.maintenance-DjaGkVtr.js → register.maintenance-BajFgQEm.js} +13 -13
  187. package/dist/{register.maintenance-BKsCM6NG.js → register.maintenance-Bpr3QjJ1.js} +14 -14
  188. package/dist/{register.message-bxhUcSyj.js → register.message-96EL0HQW.js} +8 -8
  189. package/dist/{register.message-C3oHvmdl.js → register.message-CXabSYfO.js} +8 -8
  190. package/dist/{register.onboard-D0DHcb20.js → register.onboard-2KClPynN.js} +10 -10
  191. package/dist/{register.onboard-DijWH8Vd.js → register.onboard-mHEZSai5.js} +10 -10
  192. package/dist/{register.setup-XlCTnTm_.js → register.setup-B-piY6Vs.js} +10 -10
  193. package/dist/{register.setup-CrFzd94c.js → register.setup-Di6tWG-W.js} +10 -10
  194. package/dist/{register.status-health-sessions-AWCg_uLf.js → register.status-health-sessions-BhIYRApE.js} +10 -10
  195. package/dist/{register.status-health-sessions-VwvDWUxZ.js → register.status-health-sessions-ZX2odxGg.js} +10 -10
  196. package/dist/{register.subclis-Bw8k5Z5C.js → register.subclis-CQtXpheE.js} +20 -20
  197. package/dist/{reply-D7_t00Jt.js → reply-D455A6SA.js} +314 -14
  198. package/dist/{rpc-DYHXLh0P.js → rpc-C3ZUAjXK.js} +1 -1
  199. package/dist/{rpc-DdlEeEXT.js → rpc-St4eAsjR.js} +1 -1
  200. package/dist/{run-main-7BEaNeDG.js → run-main-CnqZnevI.js} +21 -21
  201. package/dist/{security-cli-BpnzAB5_.js → security-cli-B8gavsuQ.js} +4 -4
  202. package/dist/{security-cli-D9WEiEjD.js → security-cli-BSvxNP9m.js} +4 -4
  203. package/dist/{server-methods-FQ-PqiVC.js → server-methods-CYPSYbhs.js} +55 -11
  204. package/dist/{server-methods-CTeJHJSZ.js → server-methods-DYjr-KwQ.js} +55 -11
  205. package/dist/{server-node-events-Z7epDloV.js → server-node-events-C58gVs27.js} +8 -8
  206. package/dist/{server-node-events-BqvcHbuK.js → server-node-events-DqJIrx86.js} +8 -8
  207. package/dist/{status-CKROJwI2.js → status-B_zW9YJ8.js} +1 -1
  208. package/dist/{status-DLFbpd9v.js → status-DjjA-TOx.js} +6 -6
  209. package/dist/{status-DMigoL7q.js → status-Qt6QDFJ1.js} +6 -6
  210. package/dist/{status-x7WCSVhG.js → status-sO6Y-c-v.js} +1 -1
  211. package/dist/{subagent-registry-BvP8AGdE.js → subagent-registry-B1HJJs3Q.js} +314 -14
  212. package/dist/{synthesis-DDId6n26.js → synthesis-BCSo0xoc.js} +7 -7
  213. package/dist/{synthesis-E4flT91F.js → synthesis-Ch82MDG8.js} +2 -2
  214. package/dist/{synthesis-By7KPUAm.js → synthesis-DAUJa_9I.js} +7 -7
  215. package/dist/{synthesis-DgQz6kPf.js → synthesis-DzSo6S9Y.js} +2 -2
  216. package/dist/{system-cli-BFopJ_xI.js → system-cli-BN9MXNk7.js} +3 -3
  217. package/dist/{system-cli-DryauSOX.js → system-cli-CD5latLh.js} +3 -3
  218. package/dist/{tui-CvHbwJ3G.js → tui-Cu4TZK3I.js} +2 -2
  219. package/dist/{tui-BiBFm_RY.js → tui-DLkE0D7e.js} +2 -2
  220. package/dist/{tui-cli-CmyT9ctV.js → tui-cli-BfuEq3Q-.js} +3 -3
  221. package/dist/{tui-cli-CU6A8Bu2.js → tui-cli-DC9Bq-N_.js} +3 -3
  222. package/dist/{unified-runner-DaSb-TsZ.js → unified-runner-CpyVnelK.js} +339 -10
  223. package/dist/{update-cli-C5H6DkNM.js → update-cli-BLQsvLIy.js} +14 -14
  224. package/dist/{update-cli-D0relAZw.js → update-cli-CgDLDu8d.js} +15 -15
  225. package/dist/{update-runner-D99V_zHX.js → update-runner-B1vMjo7o.js} +1 -1
  226. package/dist/{update-runner-B_yVOk8Z.js → update-runner-DUHTdrZ0.js} +1 -1
  227. package/dist/{web-BQh2S6oq.js → web-Dbg9lDZ4.js} +7 -7
  228. package/dist/{web-Bdebat5l.js → web-Dhh_eI3q.js} +8 -8
  229. package/dist/{web-BBz1kF_9.js → web-DpAeT8By.js} +2 -2
  230. package/dist/{web-CiYoJfrl.js → web-PhjuzK8Y.js} +2 -2
  231. package/extensions/bluebubbles/package.json +1 -1
  232. package/extensions/copilot-proxy/package.json +1 -1
  233. package/extensions/diagnostics-otel/package.json +1 -1
  234. package/extensions/discord/package.json +1 -1
  235. package/extensions/feishu/package.json +1 -1
  236. package/extensions/google-antigravity-auth/package.json +1 -1
  237. package/extensions/google-gemini-cli-auth/package.json +1 -1
  238. package/extensions/googlechat/package.json +1 -1
  239. package/extensions/imessage/package.json +1 -1
  240. package/extensions/irc/package.json +1 -1
  241. package/extensions/learning-loop/package.json +1 -1
  242. package/extensions/line/package.json +1 -1
  243. package/extensions/llm-task/package.json +1 -1
  244. package/extensions/matrix/CHANGELOG.md +12 -0
  245. package/extensions/matrix/package.json +1 -1
  246. package/extensions/mattermost/package.json +1 -1
  247. package/extensions/memory-core/package.json +1 -1
  248. package/extensions/memory-lancedb/package.json +1 -1
  249. package/extensions/minimax-portal-auth/package.json +1 -1
  250. package/extensions/msteams/CHANGELOG.md +12 -0
  251. package/extensions/msteams/package.json +1 -1
  252. package/extensions/nextcloud-talk/package.json +1 -1
  253. package/extensions/nostr/CHANGELOG.md +12 -0
  254. package/extensions/nostr/package.json +1 -1
  255. package/extensions/open-prose/package.json +1 -1
  256. package/extensions/outlook/package.json +1 -1
  257. package/extensions/pipeline/package.json +1 -1
  258. package/extensions/signal/package.json +1 -1
  259. package/extensions/slack/package.json +1 -1
  260. package/extensions/telegram/package.json +1 -1
  261. package/extensions/tlon/package.json +1 -1
  262. package/extensions/twitch/CHANGELOG.md +12 -0
  263. package/extensions/twitch/package.json +1 -1
  264. package/extensions/voice-call/CHANGELOG.md +12 -0
  265. package/extensions/voice-call/package.json +1 -1
  266. package/extensions/whatsapp/package.json +1 -1
  267. package/extensions/zalo/CHANGELOG.md +12 -0
  268. package/extensions/zalo/package.json +1 -1
  269. package/extensions/zalouser/CHANGELOG.md +12 -0
  270. package/extensions/zalouser/package.json +1 -1
  271. package/package.json +1 -1
  272. package/dist/plugin-sdk/web-CmKqZEsX.js +0 -66
@@ -37,7 +37,7 @@ import { i as resolveSessionTranscriptPath, n as resolveSessionFilePath, o as re
37
37
  import { t as emitSessionTranscriptUpdate } from "./transcript-events-C8Tqw4td.js";
38
38
  import { i as resolveImageSanitizationLimits, n as sanitizeImageBlocks, r as sanitizeToolResultImages } from "./tool-images-ChC2CXaN.js";
39
39
  import { S as ensureSymiModelsJson, _ as stripMinimaxToolCallXml, a as decodeDataUrl, b as stripReasoningTagsFromText, c as extractAssistantText$1, d as extractThinkingFromTaggedText, f as formatReasoningMessage, g as stripDowngradedToolCallText, h as promoteThinkingTagsToBlocks, i as coerceImageModelConfig, l as extractAssistantThinking, m as isAssistantMessage, o as resolveProviderVisionModelFromConfig, p as inferToolMetaFromArgs, r as coerceImageAssistantText, s as minimaxUnderstandImage, u as extractThinkingFromTaggedStream, v as stripThinkingTagsFromText, x as extractTextFromChatContent, y as resolveToolDisplay } from "./image-tzIqIuKx.js";
40
- import { a as resolveMemorySearchConfig, i as resolveOllamaBaseUrl, r as probeOllamaEmbeddingModels, t as MemoryIndexManager } from "./manager-DRrGn88w.js";
40
+ import { a as resolveMemorySearchConfig, i as resolveOllamaBaseUrl, r as probeOllamaEmbeddingModels, t as MemoryIndexManager } from "./manager-B76ofKkW.js";
41
41
  import { c as normalizeExtraMemoryPaths, f as runTasksWithConcurrency, s as listMemoryFiles } from "./internal-479FB0St.js";
42
42
  import { n as retryAsync } from "./retry-QGp0jvVi.js";
43
43
  import { a as createActionGate, c as jsonResult, d as readReactionParams, f as readStringArrayParam, l as parseAvailableTags, m as readStringParam, n as missingTargetError, o as imageResult, p as readStringOrNumberParam, r as unknownTargetError, s as imageResultFromFile, t as ambiguousTargetError, u as readNumberParam } from "./target-errors-Dm716SF3.js";
@@ -3473,7 +3473,7 @@ async function getMemorySearchManager(params) {
3473
3473
  const wrapper = new FallbackMemoryManager({
3474
3474
  primary,
3475
3475
  fallbackFactory: async () => {
3476
- const { MemoryIndexManager } = await import("./manager-DRrGn88w.js").then((n) => n.n);
3476
+ const { MemoryIndexManager } = await import("./manager-B76ofKkW.js").then((n) => n.n);
3477
3477
  return await MemoryIndexManager.get(params);
3478
3478
  }
3479
3479
  }, () => QMD_MANAGER_CACHE.delete(cacheKey));
@@ -3486,7 +3486,7 @@ async function getMemorySearchManager(params) {
3486
3486
  }
3487
3487
  }
3488
3488
  try {
3489
- const { MemoryIndexManager } = await import("./manager-DRrGn88w.js").then((n) => n.n);
3489
+ const { MemoryIndexManager } = await import("./manager-B76ofKkW.js").then((n) => n.n);
3490
3490
  return { manager: await MemoryIndexManager.get(params) };
3491
3491
  } catch (err) {
3492
3492
  return {
@@ -5608,6 +5608,31 @@ const SessionsUsageParamsSchema = Type.Object({
5608
5608
  includeContextWeight: Type.Optional(Type.Boolean())
5609
5609
  }, { additionalProperties: false });
5610
5610
 
5611
+ //#endregion
5612
+ //#region src/gateway/protocol/schema/tasks.ts
5613
+ /**
5614
+ * tasks.list — enumerates long-running detached tasks across configured
5615
+ * agent workspaces. Optional `workdir` override scans a single absolute
5616
+ * directory instead.
5617
+ */
5618
+ const TasksListParamsSchema = Type.Object({ workdir: Type.Optional(Type.String()) }, { additionalProperties: false });
5619
+ const TaskInfoSchema = Type.Object({
5620
+ id: Type.String(),
5621
+ agentId: Type.Optional(Type.String()),
5622
+ workdir: Type.String(),
5623
+ pid: Type.Union([Type.Integer(), Type.Null()]),
5624
+ alive: Type.Boolean(),
5625
+ archived: Type.Boolean(),
5626
+ status: Type.String(),
5627
+ started: Type.Union([Type.String(), Type.Null()]),
5628
+ cmd: Type.Union([Type.String(), Type.Null()]),
5629
+ pidPath: Type.String(),
5630
+ statusPath: Type.String(),
5631
+ archivedPath: Type.String(),
5632
+ logPath: Type.String()
5633
+ }, { additionalProperties: false });
5634
+ const TasksListResultSchema = Type.Object({ tasks: Type.Array(TaskInfoSchema) }, { additionalProperties: false });
5635
+
5611
5636
  //#endregion
5612
5637
  //#region src/gateway/protocol/schema/wizard.ts
5613
5638
  const WizardRunStatusSchema = Type.Union([
@@ -5693,6 +5718,7 @@ const validateAgentIdentityParams = ajv.compile(AgentIdentityParamsSchema);
5693
5718
  const validateAgentWaitParams = ajv.compile(AgentWaitParamsSchema);
5694
5719
  const validateWakeParams = ajv.compile(WakeParamsSchema);
5695
5720
  const validateAgentsListParams = ajv.compile(AgentsListParamsSchema);
5721
+ const validateTasksListParams = ajv.compile(TasksListParamsSchema);
5696
5722
  const validateAgentsCreateParams = ajv.compile(AgentsCreateParamsSchema);
5697
5723
  const validateAgentsUpdateParams = ajv.compile(AgentsUpdateParamsSchema);
5698
5724
  const validateAgentsDeleteParams = ajv.compile(AgentsDeleteParamsSchema);
@@ -6115,6 +6141,7 @@ const METHOD_SCOPE_GROUPS = {
6115
6141
  "cron.list",
6116
6142
  "cron.status",
6117
6143
  "cron.runs",
6144
+ "tasks.list",
6118
6145
  "system-presence",
6119
6146
  "last-heartbeat",
6120
6147
  "node.list",
@@ -17618,7 +17645,7 @@ async function resolveSandboxWorkdir(params) {
17618
17645
  };
17619
17646
  }
17620
17647
  }
17621
- function resolveWorkdir(workdir, warnings) {
17648
+ function resolveWorkdir$1(workdir, warnings) {
17622
17649
  const fallback = safeCwd() ?? homedir();
17623
17650
  try {
17624
17651
  if (statSync(workdir).isDirectory()) return workdir;
@@ -18760,7 +18787,7 @@ function createExecTool(defaults) {
18760
18787
  });
18761
18788
  workdir = resolved.hostWorkdir;
18762
18789
  containerWorkdir = resolved.containerWorkdir;
18763
- } else workdir = resolveWorkdir(rawWorkdir, warnings);
18790
+ } else workdir = resolveWorkdir$1(rawWorkdir, warnings);
18764
18791
  const baseEnv = coerceEnv(process.env);
18765
18792
  if (host !== "sandbox" && params.env) validateHostEnv(params.env);
18766
18793
  const mergedEnv = params.env ? {
@@ -36661,6 +36688,301 @@ function createSubagentsTool(opts) {
36661
36688
  };
36662
36689
  }
36663
36690
 
36691
+ //#endregion
36692
+ //#region src/infra/long-task-state.ts
36693
+ /**
36694
+ * Shared helpers for reading the on-disk state files written by
36695
+ * skills/long-task/scripts/detach-task.sh:
36696
+ *
36697
+ * task-<id>.pid — PID of the detached process
36698
+ * task-<id>.cmd — literal command line
36699
+ * task-<id>.started — ISO-8601 start timestamp
36700
+ * task-<id>.log — combined stdout + stderr
36701
+ * task-<id>.status — current state line
36702
+ * task-<id>.archived — tombstone written by the janitor when it sweeps
36703
+ * a finished task more than 7 days old
36704
+ *
36705
+ * Both the agent-facing tools (task_list / task_cancel) and the gateway's
36706
+ * tasks.list RPC consume this helper so the two views stay in sync.
36707
+ */
36708
+ const TASK_FILE_PREFIX = "task-";
36709
+ const TASK_ID_RE = /^[a-zA-Z0-9_][a-zA-Z0-9._-]{0,59}$/;
36710
+ const TASK_FILE_SUFFIXES = [
36711
+ ".pid",
36712
+ ".status",
36713
+ ".started",
36714
+ ".cmd",
36715
+ ".log",
36716
+ ".archived"
36717
+ ];
36718
+ function defaultIsPidAlive(pid) {
36719
+ try {
36720
+ process.kill(pid, 0);
36721
+ return true;
36722
+ } catch (err) {
36723
+ if (err.code === "EPERM") return true;
36724
+ return false;
36725
+ }
36726
+ }
36727
+ async function safeRead(filePath) {
36728
+ try {
36729
+ return (await fs.promises.readFile(filePath, "utf8")).trim();
36730
+ } catch {
36731
+ return null;
36732
+ }
36733
+ }
36734
+ async function readTaskInfo(workdir, id, isPidAlive = defaultIsPidAlive) {
36735
+ const pidPath = path.join(workdir, `${TASK_FILE_PREFIX}${id}.pid`);
36736
+ const statusPath = path.join(workdir, `${TASK_FILE_PREFIX}${id}.status`);
36737
+ const archivedPath = path.join(workdir, `${TASK_FILE_PREFIX}${id}.archived`);
36738
+ const logPath = path.join(workdir, `${TASK_FILE_PREFIX}${id}.log`);
36739
+ const [pidText, status, started, cmd, archived] = await Promise.all([
36740
+ safeRead(pidPath),
36741
+ safeRead(statusPath),
36742
+ safeRead(path.join(workdir, `${TASK_FILE_PREFIX}${id}.started`)),
36743
+ safeRead(path.join(workdir, `${TASK_FILE_PREFIX}${id}.cmd`)),
36744
+ safeRead(archivedPath)
36745
+ ]);
36746
+ let pid = null;
36747
+ if (pidText) {
36748
+ const parsed = Number.parseInt(pidText, 10);
36749
+ if (Number.isFinite(parsed) && parsed > 0) pid = parsed;
36750
+ }
36751
+ let resolvedStatus;
36752
+ if (status) resolvedStatus = status;
36753
+ else if (archived) resolvedStatus = archived;
36754
+ else resolvedStatus = "missing";
36755
+ return {
36756
+ id,
36757
+ pid,
36758
+ alive: pid !== null && isPidAlive(pid),
36759
+ archived: archived !== null,
36760
+ status: resolvedStatus,
36761
+ started,
36762
+ cmd,
36763
+ pidPath,
36764
+ statusPath,
36765
+ archivedPath,
36766
+ logPath
36767
+ };
36768
+ }
36769
+ async function listTasksInWorkdir(workdir, isPidAlive = defaultIsPidAlive) {
36770
+ let entries;
36771
+ try {
36772
+ entries = await fs.promises.readdir(workdir);
36773
+ } catch {
36774
+ return [];
36775
+ }
36776
+ const taskIds = /* @__PURE__ */ new Set();
36777
+ for (const entry of entries) {
36778
+ if (!entry.startsWith(TASK_FILE_PREFIX)) continue;
36779
+ for (const suffix of TASK_FILE_SUFFIXES) if (entry.endsWith(suffix)) {
36780
+ const id = entry.slice(5, -suffix.length);
36781
+ if (id.length > 0 && TASK_ID_RE.test(id)) taskIds.add(id);
36782
+ break;
36783
+ }
36784
+ }
36785
+ return await Promise.all([...taskIds].toSorted().map((id) => readTaskInfo(workdir, id, isPidAlive)));
36786
+ }
36787
+
36788
+ //#endregion
36789
+ //#region src/agents/tools/task-tool.ts
36790
+ /**
36791
+ * Long-task management tools (task_list, task_cancel).
36792
+ *
36793
+ * Companions to the detach-task pattern in skills/long-task. The detach
36794
+ * script writes task-<id>.{pid,cmd,started,log,status} state files into
36795
+ * the agent's workspace; these tools read and act on those files so the
36796
+ * agent can answer "what's running?" and kill a task without needing
36797
+ * shell access. Shared scanning logic lives in
36798
+ * src/infra/long-task-state.ts so the gateway's tasks.list RPC and these
36799
+ * agent tools agree on every shape detail.
36800
+ *
36801
+ * task-id allow-list mirrors detach-task.sh: 1–60 chars from
36802
+ * [a-zA-Z0-9._-], must not start with '.' or '-'. Diverging would let the
36803
+ * agent kill processes it never spawned via path traversal.
36804
+ */
36805
+ const ALLOWED_SIGNALS = new Set([
36806
+ "SIGTERM",
36807
+ "SIGINT",
36808
+ "SIGHUP",
36809
+ "SIGQUIT",
36810
+ "SIGKILL",
36811
+ "SIGUSR1",
36812
+ "SIGUSR2"
36813
+ ]);
36814
+ const TaskListSchema = Type.Object({ workdir: Type.Optional(Type.String()) });
36815
+ const TaskCancelSchema = Type.Object({
36816
+ taskId: Type.String(),
36817
+ workdir: Type.Optional(Type.String()),
36818
+ signal: Type.Optional(Type.String())
36819
+ });
36820
+ function normaliseSignal(input) {
36821
+ if (!input) return "SIGTERM";
36822
+ const upper = input.trim().toUpperCase();
36823
+ const candidate = upper.startsWith("SIG") ? upper : `SIG${upper}`;
36824
+ if (ALLOWED_SIGNALS.has(candidate)) return candidate;
36825
+ throw new Error(`Unsupported signal: ${input}. Allowed: TERM, INT, HUP, QUIT, KILL, USR1, USR2.`);
36826
+ }
36827
+ function isPidAlive(pid) {
36828
+ try {
36829
+ process.kill(pid, 0);
36830
+ return true;
36831
+ } catch (err) {
36832
+ if (err.code === "EPERM") return true;
36833
+ return false;
36834
+ }
36835
+ }
36836
+ function resolveWorkdir(deps, override) {
36837
+ const raw = override?.trim();
36838
+ if (!raw) return deps.workspaceDir;
36839
+ if (!path.isAbsolute(raw)) throw new Error(`workdir must be an absolute path (got: ${raw})`);
36840
+ return raw;
36841
+ }
36842
+ function createTaskListTool(deps) {
36843
+ return {
36844
+ label: "Task List",
36845
+ name: "task_list",
36846
+ description: `List long-running detached tasks in the agent's workspace.
36847
+
36848
+ Globs task-<id>.{pid,status,started,cmd,log,archived} files, reads their
36849
+ state, and checks each PID's liveness. Use this to find the task-id of a
36850
+ running detach-task before calling task_cancel, or to answer "what's
36851
+ running right now?" without re-asking the user.
36852
+
36853
+ Returns: { workdir, tasks: [{ id, pid, alive, status, archived, started, cmd, pidPath, statusPath, archivedPath, logPath }] }.
36854
+ - archived=true means the janitor swept this task's live state files (>7d
36855
+ dead) and replaced them with a tombstone. The canonical end status is
36856
+ preserved in the .archived file. Distinct from "missing" (no tombstone,
36857
+ no live files) which means the task crashed or its workdir was wiped.
36858
+ - Tasks whose .pid file is missing are still listed (alive=false, pid=null)
36859
+ so the agent can spot orphan state files.`,
36860
+ parameters: TaskListSchema,
36861
+ execute: async (_toolCallId, args) => {
36862
+ const override = readStringParam(args, "workdir");
36863
+ let workdir;
36864
+ try {
36865
+ workdir = resolveWorkdir(deps, override);
36866
+ } catch (err) {
36867
+ return jsonResult({
36868
+ workdir: override ?? deps.workspaceDir,
36869
+ tasks: [],
36870
+ error: err instanceof Error ? err.message : String(err)
36871
+ });
36872
+ }
36873
+ try {
36874
+ const tasks = await listTasksInWorkdir(workdir, isPidAlive);
36875
+ return jsonResult({
36876
+ workdir,
36877
+ tasks
36878
+ });
36879
+ } catch (err) {
36880
+ return jsonResult({
36881
+ workdir,
36882
+ tasks: [],
36883
+ error: err instanceof Error ? err.message : String(err)
36884
+ });
36885
+ }
36886
+ }
36887
+ };
36888
+ }
36889
+ function createTaskCancelTool(deps) {
36890
+ return {
36891
+ label: "Task Cancel",
36892
+ name: "task_cancel",
36893
+ description: `Send a signal (default SIGTERM) to a running detached task.
36894
+
36895
+ Reads task-<id>.pid in the workdir, validates the recorded PID is alive,
36896
+ and sends the signal via process.kill. The task's TERM/INT/HUP trap will
36897
+ write an "aborted" status before exiting, so a follow-up task_list call
36898
+ sees the canonical end state.
36899
+
36900
+ task-id must match the same allow-list as detach-task.sh: 1–60 chars from
36901
+ [a-zA-Z0-9._-], no leading '.' or '-'. signal accepts TERM (default), INT,
36902
+ HUP, QUIT, KILL, USR1, USR2 — with or without the "SIG" prefix.
36903
+
36904
+ Returns: { ok, taskId, pid, sentSignal, alreadyDead?, error? }.`,
36905
+ parameters: TaskCancelSchema,
36906
+ execute: async (_toolCallId, args) => {
36907
+ const params = args;
36908
+ const taskId = readStringParam(params, "taskId", { required: true });
36909
+ if (!TASK_ID_RE.test(taskId)) return jsonResult({
36910
+ ok: false,
36911
+ taskId,
36912
+ error: "taskId must be 1–60 chars from [a-zA-Z0-9._-] and must not start with '.' or '-'."
36913
+ });
36914
+ const override = readStringParam(params, "workdir");
36915
+ let workdir;
36916
+ try {
36917
+ workdir = resolveWorkdir(deps, override);
36918
+ } catch (err) {
36919
+ return jsonResult({
36920
+ ok: false,
36921
+ taskId,
36922
+ error: err instanceof Error ? err.message : String(err)
36923
+ });
36924
+ }
36925
+ const signalRaw = readStringParam(params, "signal");
36926
+ let signal;
36927
+ try {
36928
+ signal = normaliseSignal(signalRaw);
36929
+ } catch (err) {
36930
+ return jsonResult({
36931
+ ok: false,
36932
+ taskId,
36933
+ error: err instanceof Error ? err.message : String(err)
36934
+ });
36935
+ }
36936
+ const pidPath = path.join(workdir, `${TASK_FILE_PREFIX}${taskId}.pid`);
36937
+ let pidText;
36938
+ try {
36939
+ pidText = (await fs.promises.readFile(pidPath, "utf8")).trim();
36940
+ } catch (err) {
36941
+ if (err.code === "ENOENT") return jsonResult({
36942
+ ok: false,
36943
+ taskId,
36944
+ error: `no pid file at ${pidPath} — task is unknown or already cleaned up`
36945
+ });
36946
+ return jsonResult({
36947
+ ok: false,
36948
+ taskId,
36949
+ error: err instanceof Error ? err.message : String(err)
36950
+ });
36951
+ }
36952
+ const pid = Number.parseInt(pidText, 10);
36953
+ if (!Number.isFinite(pid) || pid <= 0) return jsonResult({
36954
+ ok: false,
36955
+ taskId,
36956
+ error: `pid file at ${pidPath} did not contain a positive integer`
36957
+ });
36958
+ if (!isPidAlive(pid)) return jsonResult({
36959
+ ok: false,
36960
+ taskId,
36961
+ pid,
36962
+ alreadyDead: true,
36963
+ error: "process is no longer running"
36964
+ });
36965
+ try {
36966
+ process.kill(pid, signal);
36967
+ } catch (err) {
36968
+ return jsonResult({
36969
+ ok: false,
36970
+ taskId,
36971
+ pid,
36972
+ sentSignal: signal,
36973
+ error: err instanceof Error ? err.message : String(err)
36974
+ });
36975
+ }
36976
+ return jsonResult({
36977
+ ok: true,
36978
+ taskId,
36979
+ pid,
36980
+ sentSignal: signal
36981
+ });
36982
+ }
36983
+ };
36984
+ }
36985
+
36664
36986
  //#endregion
36665
36987
  //#region src/agents/tools/tts-tool.ts
36666
36988
  const TtsToolSchema = Type.Object({
@@ -37961,6 +38283,8 @@ function createSymiTools(options) {
37961
38283
  config: options?.config
37962
38284
  }),
37963
38285
  createCronTool({ agentSessionKey: options?.agentSessionKey }),
38286
+ createTaskListTool({ workspaceDir }),
38287
+ createTaskCancelTool({ workspaceDir }),
37964
38288
  ...messageTool ? [messageTool] : [],
37965
38289
  createTtsTool({
37966
38290
  agentChannel: options?.agentChannel,
@@ -45761,6 +46085,7 @@ async function resolveDetachScriptPath(params) {
45761
46085
  return cachedScriptPath;
45762
46086
  }
45763
46087
  async function buildLongTaskPromptSuffix(params) {
46088
+ if (params.cronEnabled === false) return "";
45764
46089
  const scriptPath = await resolveDetachScriptPath(params);
45765
46090
  if (!scriptPath) return "";
45766
46091
  return "\n\n" + [
@@ -45775,12 +46100,13 @@ async function buildLongTaskPromptSuffix(params) {
45775
46100
  "- 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.",
45776
46101
  "- Safe status read (inside the monitor turn):",
45777
46102
  " `status=$(cat \"<workdir>/task-<id>.status\" 2>/dev/null || echo missing)`",
45778
- " 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.",
46103
+ " Possible values: `running pid=<N> started=<ISO>`, `complete rc=<N> ended=<ISO>`, `aborted rc=<N> signal=<TERM|INT|HUP> ended=<ISO>`, `archived swept-from=… at=<ISO>` if the janitor archived an old finished task, or `missing` only when neither `.status` nor `.archived` exists (task crashed or workdir was wiped).",
45779
46104
  "- Monitor responsibilities each tick:",
45780
46105
  " • If status begins with `running`: tail -n 20 <log>, post a one-sentence progress line.",
45781
46106
  " • If status begins with `complete`: post a final summary with rc and tail, then call cron action=remove on this job id.",
45782
46107
  " • If status begins with `aborted`: post a failure summary with signal and tail, then call cron action=remove.",
45783
- " • Never leave stale monitors running after the task finishes."
46108
+ " • Never leave stale monitors running after the task finishes.",
46109
+ "- 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."
45784
46110
  ].join("\n");
45785
46111
  }
45786
46112
 
@@ -46838,7 +47164,8 @@ async function runEmbeddedAttempt(params) {
46838
47164
  const longTaskSuffix = await buildLongTaskPromptSuffix({
46839
47165
  argv1: process.argv[1],
46840
47166
  cwd: process.cwd(),
46841
- moduleUrl: import.meta.url
47167
+ moduleUrl: import.meta.url,
47168
+ cronEnabled: process.env.SYMI_SKIP_CRON !== "1" && params.config?.cron?.enabled !== false
46842
47169
  });
46843
47170
  const emailCapabilitySuffix = buildEmailCapabilityPromptSuffix();
46844
47171
  const systemPromptText = createSystemPromptOverride(appendPrompt + longTaskSuffix + emailCapabilitySuffix + profilePromptSuffix)();
@@ -61263,7 +61590,7 @@ function isVoiceChannelType(type) {
61263
61590
  function createDefaultDeps() {
61264
61591
  return {
61265
61592
  sendMessageWhatsApp: async (...args) => {
61266
- const { sendMessageWhatsApp } = await import("./web-CiYoJfrl.js");
61593
+ const { sendMessageWhatsApp } = await import("./web-PhjuzK8Y.js");
61267
61594
  return await sendMessageWhatsApp(...args);
61268
61595
  },
61269
61596
  sendMessageTelegram: async (...args) => {
@@ -76543,7 +76870,7 @@ function loadWebLoginQr() {
76543
76870
  return webLoginQrPromise;
76544
76871
  }
76545
76872
  function loadWebChannel() {
76546
- webChannelPromise ??= import("./web-CiYoJfrl.js");
76873
+ webChannelPromise ??= import("./web-PhjuzK8Y.js");
76547
76874
  return webChannelPromise;
76548
76875
  }
76549
76876
  function loadWhatsAppActions() {
@@ -77853,6 +78180,8 @@ const SUBAGENT_TOOL_DENY_ALWAYS = [
77853
78180
  "whatsapp_login",
77854
78181
  "session_status",
77855
78182
  "cron",
78183
+ "task_list",
78184
+ "task_cancel",
77856
78185
  "memory_search",
77857
78186
  "memory_get",
77858
78187
  "memory_pin",
@@ -52,6 +52,8 @@ const SUBAGENT_TOOL_DENY_ALWAYS = [
52
52
  "whatsapp_login",
53
53
  "session_status",
54
54
  "cron",
55
+ "task_list",
56
+ "task_cancel",
55
57
  "memory_search",
56
58
  "memory_get",
57
59
  "memory_pin",
@@ -52,6 +52,8 @@ const SUBAGENT_TOOL_DENY_ALWAYS = [
52
52
  "whatsapp_login",
53
53
  "session_status",
54
54
  "cron",
55
+ "task_list",
56
+ "task_cancel",
55
57
  "memory_search",
56
58
  "memory_get",
57
59
  "memory_pin",
@@ -1,5 +1,5 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-Cbj13DAv.js";
2
- import { ft as loadSymiPlugins } from "./reply-D7_t00Jt.js";
2
+ import { pt as loadSymiPlugins } from "./reply-D455A6SA.js";
3
3
  import { d as getActivePluginRegistry } from "./registry-Cja8eT7G.js";
4
4
  import { t as createSubsystemLogger } from "./subsystem-D9vIQve0.js";
5
5
  import { c as resolveAgentWorkspaceDir, l as resolveDefaultAgentId } from "./agent-scope-CgUHAtCo.js";
@@ -2,7 +2,7 @@ import { t as __exportAll } from "./rolldown-runtime-Cbj13DAv.js";
2
2
  import { M as getActivePluginRegistry, o as createSubsystemLogger } from "./entry.js";
3
3
  import { c as resolveAgentWorkspaceDir, l as resolveDefaultAgentId } from "./agent-scope-D-jRCY0d.js";
4
4
  import { i as loadConfig } from "./config-DXt3pc08.js";
5
- import { m as loadSymiPlugins } from "./subagent-registry-BvP8AGdE.js";
5
+ import { m as loadSymiPlugins } from "./subagent-registry-B1HJJs3Q.js";
6
6
 
7
7
  //#region src/cli/plugin-registry.ts
8
8
  var plugin_registry_exports = /* @__PURE__ */ __exportAll({ ensurePluginRegistryLoaded: () => ensurePluginRegistryLoaded });
@@ -1,5 +1,5 @@
1
1
  import { p as normalizeAccountId } from "./session-key-C_0eELjb.js";
2
- import { _ as createAccountListHelpers } from "./accounts-Ddm33hQm.js";
2
+ import { _ as createAccountListHelpers } from "./accounts-D9zGZU5t.js";
3
3
 
4
4
  //#region src/signal/accounts.ts
5
5
  const { listAccountIds, resolveDefaultAccountId } = createAccountListHelpers("signal");
@@ -1,8 +1,8 @@
1
1
  import { f as DEFAULT_ACCOUNT_ID, p as normalizeAccountId } from "./session-key-C_0eELjb.js";
2
2
  import { a as resolveOAuthDir } from "./paths-DR2yt_mP.js";
3
- import { P as resolveUserPath, W as info, X as success, k as jidToE164, tt as getChildLogger } from "./registry-D0xTnUWt.js";
4
- import { i as defaultRuntime } from "./subsystem-B2uDN3TV.js";
5
- import { t as formatCliCommand } from "./command-format-GKSevep4.js";
3
+ import { P as resolveUserPath, W as info, X as success, k as jidToE164, tt as getChildLogger } from "./registry--_pGht6S.js";
4
+ import { i as defaultRuntime } from "./subsystem-Coz2AgU8.js";
5
+ import { t as formatCliCommand } from "./command-format-DSdvQ_M5.js";
6
6
  import fs from "node:fs";
7
7
  import path from "node:path";
8
8
  import fs$1 from "node:fs/promises";
@@ -1,5 +1,5 @@
1
1
  import { p as normalizeAccountId } from "./session-key-C_0eELjb.js";
2
- import { _ as createAccountListHelpers } from "./accounts-Ddm33hQm.js";
2
+ import { _ as createAccountListHelpers } from "./accounts-D9zGZU5t.js";
3
3
 
4
4
  //#region src/imessage/accounts.ts
5
5
  const { listAccountIds, resolveDefaultAccountId } = createAccountListHelpers("imessage");
@@ -1,5 +1,5 @@
1
1
  import { f as DEFAULT_ACCOUNT_ID } from "./session-key-C_0eELjb.js";
2
- import { t as formatCliCommand } from "./command-format-GKSevep4.js";
2
+ import { t as formatCliCommand } from "./command-format-DSdvQ_M5.js";
3
3
 
4
4
  //#region src/web/active-listener.ts
5
5
  const listeners = /* @__PURE__ */ new Map();
@@ -1,7 +1,7 @@
1
1
  import { _ as isCronSessionKey, s as normalizeAgentId, t as DEFAULT_AGENT_ID, v as isSubagentSessionKey, y as parseAgentSessionKey } from "./session-key-C_0eELjb.js";
2
2
  import { s as resolveStateDir, u as resolveRequiredHomeDir } from "./paths-DR2yt_mP.js";
3
- import { P as resolveUserPath, U as danger, W as info, Y as shouldLogVerbose, Z as warn, j as pathExists, nt as getLogger, q as logVerboseConsole } from "./registry-D0xTnUWt.js";
4
- import { i as defaultRuntime, t as createSubsystemLogger } from "./subsystem-B2uDN3TV.js";
3
+ import { P as resolveUserPath, U as danger, W as info, Y as shouldLogVerbose, Z as warn, j as pathExists, nt as getLogger, q as logVerboseConsole } from "./registry--_pGht6S.js";
4
+ import { i as defaultRuntime, t as createSubsystemLogger } from "./subsystem-Coz2AgU8.js";
5
5
  import fs from "node:fs";
6
6
  import path from "node:path";
7
7
  import os from "node:os";
@@ -2,4 +2,11 @@ export declare function buildLongTaskPromptSuffix(params: {
2
2
  argv1?: string;
3
3
  cwd?: string;
4
4
  moduleUrl?: string;
5
+ /**
6
+ * Whether the gateway's cron service is running. The pattern's monitor
7
+ * step requires `cron` tool's `add` action; without cron, the prompt is
8
+ * misleading (the agent would detach a task with no follow-up path).
9
+ * Mirror src/gateway/server-cron.ts:75 — caller passes the same boolean.
10
+ */
11
+ cronEnabled?: boolean;
5
12
  }): Promise<string>;
@@ -0,0 +1,7 @@
1
+ import type { AnyAgentTool } from "./common.js";
2
+ export type TaskToolDeps = {
3
+ /** Default workdir to scan when the model doesn't pass one. */
4
+ workspaceDir: string;
5
+ };
6
+ export declare function createTaskListTool(deps: TaskToolDeps): AnyAgentTool;
7
+ export declare function createTaskCancelTool(deps: TaskToolDeps): AnyAgentTool;
@@ -1,4 +1,4 @@
1
- import { c as normalizeProviderId } from "./model-selection-Bbs4XGPG.js";
1
+ import { c as normalizeProviderId } from "./model-selection-CtVwtb6y.js";
2
2
  import { n as formatErrorMessage } from "./errors-Bv8oZiTO.js";
3
3
 
4
4
  //#region src/infra/gemini-auth.ts
@@ -1,34 +1,34 @@
1
- import "./accounts-Ddm33hQm.js";
1
+ import "./accounts-D9zGZU5t.js";
2
2
  import "./paths-DR2yt_mP.js";
3
3
  import "./github-copilot-token-D9X2phUj.js";
4
- import "./plugins-BNByVCIH.js";
5
- import { K as logVerbose, Y as shouldLogVerbose } from "./registry-D0xTnUWt.js";
6
- import "./config-Ckum15iC.js";
7
- import "./subsystem-B2uDN3TV.js";
8
- import "./command-format-GKSevep4.js";
9
- import "./model-selection-Bbs4XGPG.js";
10
- import "./agent-scope-CYYpcO9W.js";
11
- import "./manifest-registry-BRx4JDK0.js";
4
+ import "./plugins-BbAvhC25.js";
5
+ import { K as logVerbose, Y as shouldLogVerbose } from "./registry--_pGht6S.js";
6
+ import "./config-BzupW6LN.js";
7
+ import "./subsystem-Coz2AgU8.js";
8
+ import "./command-format-DSdvQ_M5.js";
9
+ import "./model-selection-CtVwtb6y.js";
10
+ import "./agent-scope-C3gMMKCU.js";
11
+ import "./manifest-registry-hy3Bn-r9.js";
12
12
  import "./redact-DPnDWsnT.js";
13
13
  import "./errors-Bv8oZiTO.js";
14
- import "./image-ops-BlQR__MN.js";
14
+ import "./image-ops-Bnp6LXEx.js";
15
15
  import "./ssrf-DKZ8eBrk.js";
16
- import "./local-roots-BHLNSI8U.js";
17
- import "./message-channel-COTAJzHd.js";
18
- import "./bindings-C7hRtgYW.js";
19
- import "./tool-images-HJ2sfZDV.js";
20
- import { a as resolveMediaAttachmentLocalRoots, n as createMediaAttachmentCache, o as runCapability, r as normalizeMediaAttachments, t as buildProviderRegistry, u as isAudioAttachment } from "./runner-BuxCHv_O.js";
21
- import "./skills-BfsaS1F9.js";
22
- import "./chrome-CEqfiEs0.js";
23
- import "./thinking-CXqf7WTe.js";
24
- import "./accounts-s-AdhXVR.js";
25
- import "./accounts-BtaOa4z_.js";
26
- import "./pi-embedded-helpers-dd3G9Hfi.js";
16
+ import "./local-roots-Ckk1QfzI.js";
17
+ import "./message-channel-BdI5Ra9S.js";
18
+ import "./bindings-BbwoUGPx.js";
19
+ import "./tool-images-D7Lno-TE.js";
20
+ import { a as resolveMediaAttachmentLocalRoots, n as createMediaAttachmentCache, o as runCapability, r as normalizeMediaAttachments, t as buildProviderRegistry, u as isAudioAttachment } from "./runner-BhifC1J_.js";
21
+ import "./skills-C9DbB-Kp.js";
22
+ import "./chrome-D9kN9org.js";
23
+ import "./thinking-DCNUIAHY.js";
24
+ import "./accounts-Dtszw3Zn.js";
25
+ import "./accounts-BToL3HlP.js";
26
+ import "./pi-embedded-helpers-BL7ZRhGv.js";
27
27
  import "./paths-A0xdf3yk.js";
28
- import "./store-BdrNabcU.js";
29
- import "./image-CCmNHDV0.js";
28
+ import "./store-Do3t33-c.js";
29
+ import "./image-DFyINnvE.js";
30
30
  import "./pi-model-discovery-LbcEa65a.js";
31
- import "./api-key-rotation-DGJZ8SVa.js";
31
+ import "./api-key-rotation-CBsLb_4V.js";
32
32
 
33
33
  //#region src/media-understanding/audio-preflight.ts
34
34
  /**
@@ -1,6 +1,6 @@
1
1
  import { p as normalizeAccountId, s as normalizeAgentId } from "./session-key-C_0eELjb.js";
2
- import { s as normalizeChatChannelId } from "./registry-D0xTnUWt.js";
3
- import { c as resolveDefaultAgentId } from "./agent-scope-CYYpcO9W.js";
2
+ import { s as normalizeChatChannelId } from "./registry--_pGht6S.js";
3
+ import { c as resolveDefaultAgentId } from "./agent-scope-C3gMMKCU.js";
4
4
 
5
5
  //#region src/routing/bindings.ts
6
6
  function normalizeBindingChannelId(raw) {
@@ -1,4 +1,4 @@
1
- import { n as retryAsync, t as resolveRetryConfig } from "./retry-CwQ_iIj8.js";
1
+ import { n as retryAsync, t as resolveRetryConfig } from "./retry-ilSJqnz9.js";
2
2
  import { n as formatErrorMessage } from "./errors-Bv8oZiTO.js";
3
3
  import { RateLimitError } from "@buape/carbon";
4
4