@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
@@ -7,8 +7,8 @@ import "./frontmatter-B8duUx_6.js";
7
7
  import "./skills-D_oCiaQn.js";
8
8
  import "./manifest-registry-D5bnO5uA.js";
9
9
  import "./config-DXt3pc08.js";
10
- import "./client-qUlxXXVJ.js";
11
- import "./call-BrRWr7Lj.js";
10
+ import "./client-Cmq13-uF.js";
11
+ import "./call-CAGvQYXj.js";
12
12
  import "./message-channel-C9dERklz.js";
13
13
  import "./pairing-token-Byh6drgn.js";
14
14
  import "./sessions-BPD85pWA.js";
@@ -43,7 +43,7 @@ import "./commands-registry-CsxsFveo.js";
43
43
  import "./tool-display-I4rDxv8J.js";
44
44
  import { t as parseTimeoutMs } from "./parse-timeout-FUO1ff14.js";
45
45
  import { t as formatDocsLink } from "./links-CxyMXTsn.js";
46
- import { t as runTui } from "./tui-BiBFm_RY.js";
46
+ import { t as runTui } from "./tui-DLkE0D7e.js";
47
47
 
48
48
  //#region src/cli/tui-cli.ts
49
49
  function registerTuiCli(program) {
@@ -40,7 +40,7 @@ import { a as isSilentReplyText, i as isSilentReplyPrefixText, n as SILENT_REPLY
40
40
  import { $ as isVoiceCompatibleAudio, A as extractTelegramLocation, B as normalizeAllowFromWithStore$1, C as buildTelegramGroupFrom, D as buildTypingThreadParams, E as buildTelegramThreadParams, F as resolveTelegramMediaPlaceholder, G as formatLocationText, H as firstDefined$1, I as resolveTelegramReplyId, J as readChannelAllowFromStore, K as toLocationContext, L as resolveTelegramStreamMode, M as normalizeForwardedContext, N as resolveTelegramForumThreadId, O as describeReplyTarget, P as resolveTelegramGroupAllowFromContext, Q as listPairingChannels, R as resolveTelegramThreadSpec, S as buildSenderName, T as buildTelegramParentPeer, U as isSenderIdAllowed, V as resolveSenderAllowMatch, W as mergeAllowFromSources, X as upsertChannelPairingRequest, Y as removeChannelAllowFromStoreEntry, Z as getPairingAdapter, _ as resolveTelegramFetch, a as reactMessageTelegram, b as buildGroupLabel, c as sendStickerTelegram, d as wasSentByBot, et as parseTelegramTarget, f as isRecoverableTelegramNetworkError, g as wrapFileReferencesInHtml, h as renderTelegramHtmlText, i as editMessageTelegram, j as hasBotMention, k as expandTextLinks, m as markdownToTelegramHtml, n as createForumTopicTelegram, o as sendMessageTelegram, p as markdownToTelegramChunks, q as addChannelAllowFromStoreEntry, r as deleteMessageTelegram, s as sendPollTelegram, t as buildInlineKeyboard, tt as resolveTelegramTargetChatType, u as resolveTelegramVoiceSend, v as splitTelegramCaption, w as buildTelegramGroupPeerId, x as buildSenderLabel, y as withTelegramApiErrorLogging, z as isSenderAllowed$1 } from "./send-Bb4it0te.js";
41
41
  import { n as discoverModels, t as discoverAuthStorage } from "./pi-model-discovery-CuZX_Q4t.js";
42
42
  import { a as resolveAgentIdentity, i as resolveAckReaction, o as resolveEffectiveMessagesConfig, r as resolveResponsePrefixTemplate, s as resolveHumanDelayConfig, t as createReplyPrefixOptions } from "./reply-prefix-CvEIl6_d.js";
43
- import { a as resolveMemorySearchConfig, i as resolveOllamaBaseUrl, r as probeOllamaEmbeddingModels, t as MemoryIndexManager } from "./manager-_RGWWymD.js";
43
+ import { a as resolveMemorySearchConfig, i as resolveOllamaBaseUrl, r as probeOllamaEmbeddingModels, t as MemoryIndexManager } from "./manager-D0_H4LHh.js";
44
44
  import { c as normalizeExtraMemoryPaths, f as runTasksWithConcurrency, s as listMemoryFiles } from "./internal-DjnxpF_K.js";
45
45
  import { n as retryAsync } from "./retry-B-y5suGA.js";
46
46
  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-DeJTztcq.js";
@@ -4340,7 +4340,7 @@ async function getMemorySearchManager(params) {
4340
4340
  const wrapper = new FallbackMemoryManager({
4341
4341
  primary,
4342
4342
  fallbackFactory: async () => {
4343
- const { MemoryIndexManager } = await import("./manager-_RGWWymD.js").then((n) => n.n);
4343
+ const { MemoryIndexManager } = await import("./manager-D0_H4LHh.js").then((n) => n.n);
4344
4344
  return await MemoryIndexManager.get(params);
4345
4345
  }
4346
4346
  }, () => QMD_MANAGER_CACHE.delete(cacheKey));
@@ -4353,7 +4353,7 @@ async function getMemorySearchManager(params) {
4353
4353
  }
4354
4354
  }
4355
4355
  try {
4356
- const { MemoryIndexManager } = await import("./manager-_RGWWymD.js").then((n) => n.n);
4356
+ const { MemoryIndexManager } = await import("./manager-D0_H4LHh.js").then((n) => n.n);
4357
4357
  return { manager: await MemoryIndexManager.get(params) };
4358
4358
  } catch (err) {
4359
4359
  return {
@@ -8684,6 +8684,31 @@ const SessionsUsageParamsSchema = Type.Object({
8684
8684
  includeContextWeight: Type.Optional(Type.Boolean())
8685
8685
  }, { additionalProperties: false });
8686
8686
 
8687
+ //#endregion
8688
+ //#region src/gateway/protocol/schema/tasks.ts
8689
+ /**
8690
+ * tasks.list — enumerates long-running detached tasks across configured
8691
+ * agent workspaces. Optional `workdir` override scans a single absolute
8692
+ * directory instead.
8693
+ */
8694
+ const TasksListParamsSchema = Type.Object({ workdir: Type.Optional(Type.String()) }, { additionalProperties: false });
8695
+ const TaskInfoSchema = Type.Object({
8696
+ id: Type.String(),
8697
+ agentId: Type.Optional(Type.String()),
8698
+ workdir: Type.String(),
8699
+ pid: Type.Union([Type.Integer(), Type.Null()]),
8700
+ alive: Type.Boolean(),
8701
+ archived: Type.Boolean(),
8702
+ status: Type.String(),
8703
+ started: Type.Union([Type.String(), Type.Null()]),
8704
+ cmd: Type.Union([Type.String(), Type.Null()]),
8705
+ pidPath: Type.String(),
8706
+ statusPath: Type.String(),
8707
+ archivedPath: Type.String(),
8708
+ logPath: Type.String()
8709
+ }, { additionalProperties: false });
8710
+ const TasksListResultSchema = Type.Object({ tasks: Type.Array(TaskInfoSchema) }, { additionalProperties: false });
8711
+
8687
8712
  //#endregion
8688
8713
  //#region src/gateway/protocol/schema/wizard.ts
8689
8714
  const WizardRunStatusSchema = Type.Union([
@@ -8769,6 +8794,7 @@ const validateAgentIdentityParams = ajv.compile(AgentIdentityParamsSchema);
8769
8794
  const validateAgentWaitParams = ajv.compile(AgentWaitParamsSchema);
8770
8795
  const validateWakeParams = ajv.compile(WakeParamsSchema);
8771
8796
  const validateAgentsListParams = ajv.compile(AgentsListParamsSchema);
8797
+ const validateTasksListParams = ajv.compile(TasksListParamsSchema);
8772
8798
  const validateAgentsCreateParams = ajv.compile(AgentsCreateParamsSchema);
8773
8799
  const validateAgentsUpdateParams = ajv.compile(AgentsUpdateParamsSchema);
8774
8800
  const validateAgentsDeleteParams = ajv.compile(AgentsDeleteParamsSchema);
@@ -9191,6 +9217,7 @@ const METHOD_SCOPE_GROUPS = {
9191
9217
  "cron.list",
9192
9218
  "cron.status",
9193
9219
  "cron.runs",
9220
+ "tasks.list",
9194
9221
  "system-presence",
9195
9222
  "last-heartbeat",
9196
9223
  "node.list",
@@ -20694,7 +20721,7 @@ async function resolveSandboxWorkdir(params) {
20694
20721
  };
20695
20722
  }
20696
20723
  }
20697
- function resolveWorkdir(workdir, warnings) {
20724
+ function resolveWorkdir$1(workdir, warnings) {
20698
20725
  const fallback = safeCwd() ?? homedir();
20699
20726
  try {
20700
20727
  if (statSync(workdir).isDirectory()) return workdir;
@@ -21836,7 +21863,7 @@ function createExecTool(defaults) {
21836
21863
  });
21837
21864
  workdir = resolved.hostWorkdir;
21838
21865
  containerWorkdir = resolved.containerWorkdir;
21839
- } else workdir = resolveWorkdir(rawWorkdir, warnings);
21866
+ } else workdir = resolveWorkdir$1(rawWorkdir, warnings);
21840
21867
  const baseEnv = coerceEnv(process.env);
21841
21868
  if (host !== "sandbox" && params.env) validateHostEnv(params.env);
21842
21869
  const mergedEnv = params.env ? {
@@ -38765,6 +38792,301 @@ function createSubagentsTool(opts) {
38765
38792
  };
38766
38793
  }
38767
38794
 
38795
+ //#endregion
38796
+ //#region src/infra/long-task-state.ts
38797
+ /**
38798
+ * Shared helpers for reading the on-disk state files written by
38799
+ * skills/long-task/scripts/detach-task.sh:
38800
+ *
38801
+ * task-<id>.pid — PID of the detached process
38802
+ * task-<id>.cmd — literal command line
38803
+ * task-<id>.started — ISO-8601 start timestamp
38804
+ * task-<id>.log — combined stdout + stderr
38805
+ * task-<id>.status — current state line
38806
+ * task-<id>.archived — tombstone written by the janitor when it sweeps
38807
+ * a finished task more than 7 days old
38808
+ *
38809
+ * Both the agent-facing tools (task_list / task_cancel) and the gateway's
38810
+ * tasks.list RPC consume this helper so the two views stay in sync.
38811
+ */
38812
+ const TASK_FILE_PREFIX = "task-";
38813
+ const TASK_ID_RE = /^[a-zA-Z0-9_][a-zA-Z0-9._-]{0,59}$/;
38814
+ const TASK_FILE_SUFFIXES = [
38815
+ ".pid",
38816
+ ".status",
38817
+ ".started",
38818
+ ".cmd",
38819
+ ".log",
38820
+ ".archived"
38821
+ ];
38822
+ function defaultIsPidAlive(pid) {
38823
+ try {
38824
+ process.kill(pid, 0);
38825
+ return true;
38826
+ } catch (err) {
38827
+ if (err.code === "EPERM") return true;
38828
+ return false;
38829
+ }
38830
+ }
38831
+ async function safeRead(filePath) {
38832
+ try {
38833
+ return (await fs.promises.readFile(filePath, "utf8")).trim();
38834
+ } catch {
38835
+ return null;
38836
+ }
38837
+ }
38838
+ async function readTaskInfo(workdir, id, isPidAlive = defaultIsPidAlive) {
38839
+ const pidPath = path.join(workdir, `${TASK_FILE_PREFIX}${id}.pid`);
38840
+ const statusPath = path.join(workdir, `${TASK_FILE_PREFIX}${id}.status`);
38841
+ const archivedPath = path.join(workdir, `${TASK_FILE_PREFIX}${id}.archived`);
38842
+ const logPath = path.join(workdir, `${TASK_FILE_PREFIX}${id}.log`);
38843
+ const [pidText, status, started, cmd, archived] = await Promise.all([
38844
+ safeRead(pidPath),
38845
+ safeRead(statusPath),
38846
+ safeRead(path.join(workdir, `${TASK_FILE_PREFIX}${id}.started`)),
38847
+ safeRead(path.join(workdir, `${TASK_FILE_PREFIX}${id}.cmd`)),
38848
+ safeRead(archivedPath)
38849
+ ]);
38850
+ let pid = null;
38851
+ if (pidText) {
38852
+ const parsed = Number.parseInt(pidText, 10);
38853
+ if (Number.isFinite(parsed) && parsed > 0) pid = parsed;
38854
+ }
38855
+ let resolvedStatus;
38856
+ if (status) resolvedStatus = status;
38857
+ else if (archived) resolvedStatus = archived;
38858
+ else resolvedStatus = "missing";
38859
+ return {
38860
+ id,
38861
+ pid,
38862
+ alive: pid !== null && isPidAlive(pid),
38863
+ archived: archived !== null,
38864
+ status: resolvedStatus,
38865
+ started,
38866
+ cmd,
38867
+ pidPath,
38868
+ statusPath,
38869
+ archivedPath,
38870
+ logPath
38871
+ };
38872
+ }
38873
+ async function listTasksInWorkdir(workdir, isPidAlive = defaultIsPidAlive) {
38874
+ let entries;
38875
+ try {
38876
+ entries = await fs.promises.readdir(workdir);
38877
+ } catch {
38878
+ return [];
38879
+ }
38880
+ const taskIds = /* @__PURE__ */ new Set();
38881
+ for (const entry of entries) {
38882
+ if (!entry.startsWith(TASK_FILE_PREFIX)) continue;
38883
+ for (const suffix of TASK_FILE_SUFFIXES) if (entry.endsWith(suffix)) {
38884
+ const id = entry.slice(5, -suffix.length);
38885
+ if (id.length > 0 && TASK_ID_RE.test(id)) taskIds.add(id);
38886
+ break;
38887
+ }
38888
+ }
38889
+ return await Promise.all([...taskIds].toSorted().map((id) => readTaskInfo(workdir, id, isPidAlive)));
38890
+ }
38891
+
38892
+ //#endregion
38893
+ //#region src/agents/tools/task-tool.ts
38894
+ /**
38895
+ * Long-task management tools (task_list, task_cancel).
38896
+ *
38897
+ * Companions to the detach-task pattern in skills/long-task. The detach
38898
+ * script writes task-<id>.{pid,cmd,started,log,status} state files into
38899
+ * the agent's workspace; these tools read and act on those files so the
38900
+ * agent can answer "what's running?" and kill a task without needing
38901
+ * shell access. Shared scanning logic lives in
38902
+ * src/infra/long-task-state.ts so the gateway's tasks.list RPC and these
38903
+ * agent tools agree on every shape detail.
38904
+ *
38905
+ * task-id allow-list mirrors detach-task.sh: 1–60 chars from
38906
+ * [a-zA-Z0-9._-], must not start with '.' or '-'. Diverging would let the
38907
+ * agent kill processes it never spawned via path traversal.
38908
+ */
38909
+ const ALLOWED_SIGNALS = new Set([
38910
+ "SIGTERM",
38911
+ "SIGINT",
38912
+ "SIGHUP",
38913
+ "SIGQUIT",
38914
+ "SIGKILL",
38915
+ "SIGUSR1",
38916
+ "SIGUSR2"
38917
+ ]);
38918
+ const TaskListSchema = Type.Object({ workdir: Type.Optional(Type.String()) });
38919
+ const TaskCancelSchema = Type.Object({
38920
+ taskId: Type.String(),
38921
+ workdir: Type.Optional(Type.String()),
38922
+ signal: Type.Optional(Type.String())
38923
+ });
38924
+ function normaliseSignal(input) {
38925
+ if (!input) return "SIGTERM";
38926
+ const upper = input.trim().toUpperCase();
38927
+ const candidate = upper.startsWith("SIG") ? upper : `SIG${upper}`;
38928
+ if (ALLOWED_SIGNALS.has(candidate)) return candidate;
38929
+ throw new Error(`Unsupported signal: ${input}. Allowed: TERM, INT, HUP, QUIT, KILL, USR1, USR2.`);
38930
+ }
38931
+ function isPidAlive(pid) {
38932
+ try {
38933
+ process.kill(pid, 0);
38934
+ return true;
38935
+ } catch (err) {
38936
+ if (err.code === "EPERM") return true;
38937
+ return false;
38938
+ }
38939
+ }
38940
+ function resolveWorkdir(deps, override) {
38941
+ const raw = override?.trim();
38942
+ if (!raw) return deps.workspaceDir;
38943
+ if (!path.isAbsolute(raw)) throw new Error(`workdir must be an absolute path (got: ${raw})`);
38944
+ return raw;
38945
+ }
38946
+ function createTaskListTool(deps) {
38947
+ return {
38948
+ label: "Task List",
38949
+ name: "task_list",
38950
+ description: `List long-running detached tasks in the agent's workspace.
38951
+
38952
+ Globs task-<id>.{pid,status,started,cmd,log,archived} files, reads their
38953
+ state, and checks each PID's liveness. Use this to find the task-id of a
38954
+ running detach-task before calling task_cancel, or to answer "what's
38955
+ running right now?" without re-asking the user.
38956
+
38957
+ Returns: { workdir, tasks: [{ id, pid, alive, status, archived, started, cmd, pidPath, statusPath, archivedPath, logPath }] }.
38958
+ - archived=true means the janitor swept this task's live state files (>7d
38959
+ dead) and replaced them with a tombstone. The canonical end status is
38960
+ preserved in the .archived file. Distinct from "missing" (no tombstone,
38961
+ no live files) which means the task crashed or its workdir was wiped.
38962
+ - Tasks whose .pid file is missing are still listed (alive=false, pid=null)
38963
+ so the agent can spot orphan state files.`,
38964
+ parameters: TaskListSchema,
38965
+ execute: async (_toolCallId, args) => {
38966
+ const override = readStringParam(args, "workdir");
38967
+ let workdir;
38968
+ try {
38969
+ workdir = resolveWorkdir(deps, override);
38970
+ } catch (err) {
38971
+ return jsonResult({
38972
+ workdir: override ?? deps.workspaceDir,
38973
+ tasks: [],
38974
+ error: err instanceof Error ? err.message : String(err)
38975
+ });
38976
+ }
38977
+ try {
38978
+ const tasks = await listTasksInWorkdir(workdir, isPidAlive);
38979
+ return jsonResult({
38980
+ workdir,
38981
+ tasks
38982
+ });
38983
+ } catch (err) {
38984
+ return jsonResult({
38985
+ workdir,
38986
+ tasks: [],
38987
+ error: err instanceof Error ? err.message : String(err)
38988
+ });
38989
+ }
38990
+ }
38991
+ };
38992
+ }
38993
+ function createTaskCancelTool(deps) {
38994
+ return {
38995
+ label: "Task Cancel",
38996
+ name: "task_cancel",
38997
+ description: `Send a signal (default SIGTERM) to a running detached task.
38998
+
38999
+ Reads task-<id>.pid in the workdir, validates the recorded PID is alive,
39000
+ and sends the signal via process.kill. The task's TERM/INT/HUP trap will
39001
+ write an "aborted" status before exiting, so a follow-up task_list call
39002
+ sees the canonical end state.
39003
+
39004
+ task-id must match the same allow-list as detach-task.sh: 1–60 chars from
39005
+ [a-zA-Z0-9._-], no leading '.' or '-'. signal accepts TERM (default), INT,
39006
+ HUP, QUIT, KILL, USR1, USR2 — with or without the "SIG" prefix.
39007
+
39008
+ Returns: { ok, taskId, pid, sentSignal, alreadyDead?, error? }.`,
39009
+ parameters: TaskCancelSchema,
39010
+ execute: async (_toolCallId, args) => {
39011
+ const params = args;
39012
+ const taskId = readStringParam(params, "taskId", { required: true });
39013
+ if (!TASK_ID_RE.test(taskId)) return jsonResult({
39014
+ ok: false,
39015
+ taskId,
39016
+ error: "taskId must be 1–60 chars from [a-zA-Z0-9._-] and must not start with '.' or '-'."
39017
+ });
39018
+ const override = readStringParam(params, "workdir");
39019
+ let workdir;
39020
+ try {
39021
+ workdir = resolveWorkdir(deps, override);
39022
+ } catch (err) {
39023
+ return jsonResult({
39024
+ ok: false,
39025
+ taskId,
39026
+ error: err instanceof Error ? err.message : String(err)
39027
+ });
39028
+ }
39029
+ const signalRaw = readStringParam(params, "signal");
39030
+ let signal;
39031
+ try {
39032
+ signal = normaliseSignal(signalRaw);
39033
+ } catch (err) {
39034
+ return jsonResult({
39035
+ ok: false,
39036
+ taskId,
39037
+ error: err instanceof Error ? err.message : String(err)
39038
+ });
39039
+ }
39040
+ const pidPath = path.join(workdir, `${TASK_FILE_PREFIX}${taskId}.pid`);
39041
+ let pidText;
39042
+ try {
39043
+ pidText = (await fs.promises.readFile(pidPath, "utf8")).trim();
39044
+ } catch (err) {
39045
+ if (err.code === "ENOENT") return jsonResult({
39046
+ ok: false,
39047
+ taskId,
39048
+ error: `no pid file at ${pidPath} — task is unknown or already cleaned up`
39049
+ });
39050
+ return jsonResult({
39051
+ ok: false,
39052
+ taskId,
39053
+ error: err instanceof Error ? err.message : String(err)
39054
+ });
39055
+ }
39056
+ const pid = Number.parseInt(pidText, 10);
39057
+ if (!Number.isFinite(pid) || pid <= 0) return jsonResult({
39058
+ ok: false,
39059
+ taskId,
39060
+ error: `pid file at ${pidPath} did not contain a positive integer`
39061
+ });
39062
+ if (!isPidAlive(pid)) return jsonResult({
39063
+ ok: false,
39064
+ taskId,
39065
+ pid,
39066
+ alreadyDead: true,
39067
+ error: "process is no longer running"
39068
+ });
39069
+ try {
39070
+ process.kill(pid, signal);
39071
+ } catch (err) {
39072
+ return jsonResult({
39073
+ ok: false,
39074
+ taskId,
39075
+ pid,
39076
+ sentSignal: signal,
39077
+ error: err instanceof Error ? err.message : String(err)
39078
+ });
39079
+ }
39080
+ return jsonResult({
39081
+ ok: true,
39082
+ taskId,
39083
+ pid,
39084
+ sentSignal: signal
39085
+ });
39086
+ }
39087
+ };
39088
+ }
39089
+
38768
39090
  //#endregion
38769
39091
  //#region src/agents/tools/tts-tool.ts
38770
39092
  const TtsToolSchema = Type.Object({
@@ -40065,6 +40387,8 @@ function createSymiTools(options) {
40065
40387
  config: options?.config
40066
40388
  }),
40067
40389
  createCronTool({ agentSessionKey: options?.agentSessionKey }),
40390
+ createTaskListTool({ workspaceDir }),
40391
+ createTaskCancelTool({ workspaceDir }),
40068
40392
  ...messageTool ? [messageTool] : [],
40069
40393
  createTtsTool({
40070
40394
  agentChannel: options?.agentChannel,
@@ -54045,7 +54369,7 @@ function isVoiceChannelType(type) {
54045
54369
  function createDefaultDeps() {
54046
54370
  return {
54047
54371
  sendMessageWhatsApp: async (...args) => {
54048
- const { sendMessageWhatsApp } = await import("./web-BBz1kF_9.js");
54372
+ const { sendMessageWhatsApp } = await import("./web-DpAeT8By.js");
54049
54373
  return await sendMessageWhatsApp(...args);
54050
54374
  },
54051
54375
  sendMessageTelegram: async (...args) => {
@@ -69325,7 +69649,7 @@ function loadWebLoginQr() {
69325
69649
  return webLoginQrPromise;
69326
69650
  }
69327
69651
  function loadWebChannel() {
69328
- webChannelPromise ??= import("./web-BBz1kF_9.js");
69652
+ webChannelPromise ??= import("./web-DpAeT8By.js");
69329
69653
  return webChannelPromise;
69330
69654
  }
69331
69655
  function loadWhatsAppActions() {
@@ -70635,6 +70959,8 @@ const SUBAGENT_TOOL_DENY_ALWAYS = [
70635
70959
  "whatsapp_login",
70636
70960
  "session_status",
70637
70961
  "cron",
70962
+ "task_list",
70963
+ "task_cancel",
70638
70964
  "memory_search",
70639
70965
  "memory_get",
70640
70966
  "memory_pin",
@@ -76601,6 +76927,7 @@ async function resolveDetachScriptPath(params) {
76601
76927
  return cachedScriptPath;
76602
76928
  }
76603
76929
  async function buildLongTaskPromptSuffix(params) {
76930
+ if (params.cronEnabled === false) return "";
76604
76931
  const scriptPath = await resolveDetachScriptPath(params);
76605
76932
  if (!scriptPath) return "";
76606
76933
  return "\n\n" + [
@@ -76615,12 +76942,13 @@ async function buildLongTaskPromptSuffix(params) {
76615
76942
  "- 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.",
76616
76943
  "- Safe status read (inside the monitor turn):",
76617
76944
  " `status=$(cat \"<workdir>/task-<id>.status\" 2>/dev/null || echo missing)`",
76618
- " 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.",
76945
+ " 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).",
76619
76946
  "- Monitor responsibilities each tick:",
76620
76947
  " • If status begins with `running`: tail -n 20 <log>, post a one-sentence progress line.",
76621
76948
  " • If status begins with `complete`: post a final summary with rc and tail, then call cron action=remove on this job id.",
76622
76949
  " • If status begins with `aborted`: post a failure summary with signal and tail, then call cron action=remove.",
76623
- " • Never leave stale monitors running after the task finishes."
76950
+ " • Never leave stale monitors running after the task finishes.",
76951
+ "- 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."
76624
76952
  ].join("\n");
76625
76953
  }
76626
76954
 
@@ -77434,7 +77762,8 @@ async function runEmbeddedAttempt(params) {
77434
77762
  const longTaskSuffix = await buildLongTaskPromptSuffix({
77435
77763
  argv1: process.argv[1],
77436
77764
  cwd: process.cwd(),
77437
- moduleUrl: import.meta.url
77765
+ moduleUrl: import.meta.url,
77766
+ cronEnabled: process.env.SYMI_SKIP_CRON !== "1" && params.config?.cron?.enabled !== false
77438
77767
  });
77439
77768
  const emailCapabilitySuffix = buildEmailCapabilityPromptSuffix();
77440
77769
  const systemPromptText = createSystemPromptOverride(appendPrompt + longTaskSuffix + emailCapabilitySuffix + profilePromptSuffix)();
@@ -1,7 +1,7 @@
1
1
  import { g as resolveStateDir } from "./paths-Cqn-zk3M.js";
2
2
  import { B as theme, h as pathExists } from "./utils-B-0b9bGM.js";
3
3
  import "./thinking-EAliFiVK.js";
4
- import { V as trimLogTail } from "./reply-D7_t00Jt.js";
4
+ import { H as trimLogTail } from "./reply-D455A6SA.js";
5
5
  import { t as resolveSymiPackageRoot } from "./symi-root-CrGJbkzf.js";
6
6
  import "./registry-Cja8eT7G.js";
7
7
  import { f as defaultRuntime } from "./subsystem-D9vIQve0.js";
@@ -62,8 +62,8 @@ import "./diagnostic-session-state-CUslJyKP.js";
62
62
  import "./send-DpMnSIi5.js";
63
63
  import "./model-ECsJuJew.js";
64
64
  import "./reply-prefix-CE2YmmsD.js";
65
- import "./memory-cli-0jm-n36m.js";
66
- import "./manager-TOeH0D8K.js";
65
+ import "./memory-cli-DRLrIa8h.js";
66
+ import "./manager-wF-n_prX.js";
67
67
  import "./retry-BoS4e4X_.js";
68
68
  import "./sqlite-D55gRQbH.js";
69
69
  import "./target-errors-C9e6dMU_.js";
@@ -73,8 +73,8 @@ import "./ir-jTXFdH5R.js";
73
73
  import "./render-Bwu_WxwA.js";
74
74
  import "./commands-vWB85AXk.js";
75
75
  import "./commands-registry-D_uByLpw.js";
76
- import "./client-C7AOOnKZ.js";
77
- import "./call-Cmb04dff.js";
76
+ import "./client-CYsBIR3j.js";
77
+ import "./call-BkJK3eYP.js";
78
78
  import "./pairing-token-pooyuU2J.js";
79
79
  import "./channel-activity-CoTZV03i.js";
80
80
  import "./fetch-BECUf3wn.js";
@@ -96,18 +96,18 @@ import "./session-cost-usage-RPrhIvZF.js";
96
96
  import "./outbound-attachment-FbHNOB0s.js";
97
97
  import "./delivery-queue-D9i0qjI_.js";
98
98
  import "./send-SF7x1UHb.js";
99
- import "./onboard-helpers-C8f_xi6R.js";
99
+ import "./onboard-helpers-B7jBYbCU.js";
100
100
  import { n as stylePromptMessage } from "./prompt-style-Y2J72w6p.js";
101
101
  import "./pairing-labels-CTL1gXZb.js";
102
102
  import "./exec-approvals-DEigTi7M.js";
103
103
  import "./nodes-screen-BZS89z6C.js";
104
- import "./pi-tools.policy-BZrM6a-w.js";
104
+ import "./pi-tools.policy-Bx5zp45n.js";
105
105
  import "./control-service-C0pRqIFv.js";
106
106
  import "./stagger-CZ1Rrj7O.js";
107
107
  import { c as resolveGatewayLaunchAgentLabel, d as resolveGatewaySystemdServiceName, f as resolveGatewayWindowsTaskName } from "./constants-DF8wPn-_.js";
108
108
  import "./channel-selection-9fIQGtZy.js";
109
109
  import { r as parseSemver } from "./runtime-guard-BKFbNplo.js";
110
- import "./program-context-CBI6gIf-.js";
110
+ import "./program-context-BcKgBBit.js";
111
111
  import "./catalog-KW3oyt3k.js";
112
112
  import "./skills-status-D1IW8MhS.js";
113
113
  import { n as inheritOptionFromParent } from "./command-options-DOOvAdsg.js";
@@ -118,28 +118,28 @@ import "./npm-registry-spec-B98RgVZF.js";
118
118
  import "./skill-scanner-BTgjeQBf.js";
119
119
  import "./installs-BPZKRjsO.js";
120
120
  import "./channels-status-issues-BVpj6wWd.js";
121
- import { r as installCompletion } from "./completion-cli-Bw0jbNaG.js";
121
+ import { r as installCompletion } from "./completion-cli-D-_MV8eA.js";
122
122
  import "./daemon-runtime-Cp7obV7Q.js";
123
123
  import "./systemd-Xs16roN5.js";
124
124
  import { t as resolveGatewayService } from "./service-DzLem5vL.js";
125
125
  import "./lifecycle-core-Uucs6Wz6.js";
126
126
  import "./systemd-hints-vhJS1sOh.js";
127
- import { i as runDaemonInstall, r as runDaemonRestart } from "./daemon-cli-Cq-IaYw4.js";
127
+ import { i as runDaemonInstall, r as runDaemonRestart } from "./daemon-cli-B2_uIgDM.js";
128
128
  import "./diagnostics-1uBuB9IE.js";
129
129
  import { t as renderTable } from "./table-BWuvjnmY.js";
130
- import "./health-D4vU-wV-.js";
130
+ import "./health-Cs8wf7Hb.js";
131
131
  import "./control-ui-assets-BrP31IQR.js";
132
132
  import { a as resolveNpmChannelTag, c as DEFAULT_PACKAGE_CHANNEL, d as formatUpdateChannelLabel, g as resolveUpdateChannelDisplay, h as resolveEffectiveUpdateChannel, m as normalizeUpdateChannel, n as compareSemverStrings, r as fetchNpmTagVersion, s as DEFAULT_GIT_CHANNEL, t as checkUpdateStatus, u as channelToNpmTag } from "./update-check-Bbvpax6u.js";
133
133
  import "./dm-policy-shared-KlzpDeT_.js";
134
134
  import { i as resolveUpdateAvailability, n as formatUpdateOneLiner, t as formatUpdateAvailableHint } from "./status.update-8HXdAdwz.js";
135
- import { a as globalInstallArgs, c as readPackageVersion, i as detectGlobalInstallManagerForRoot, n as cleanupGlobalRenameDirs, o as resolveGlobalPackageRoot, r as detectGlobalInstallManagerByPresence, s as readPackageName, t as runGatewayUpdate } from "./update-runner-D99V_zHX.js";
135
+ import { a as globalInstallArgs, c as readPackageVersion, i as detectGlobalInstallManagerForRoot, n as cleanupGlobalRenameDirs, o as resolveGlobalPackageRoot, r as detectGlobalInstallManagerByPresence, s as readPackageName, t as runGatewayUpdate } from "./update-runner-B1vMjo7o.js";
136
136
  import "./logging-CZuxhCZR.js";
137
137
  import { n as updateNpmInstalledPlugins, t as syncPluginsForUpdateChannel } from "./update-D4uLu0dv.js";
138
138
  import "./doctor-config-flow-BCMxS2lf.js";
139
139
  import "./systemd-linger-0C265XKH.js";
140
140
  import "./health-format-Ct4VWeSk.js";
141
- import { n as doctorCommand, t as selectStyled } from "./prompt-select-styled-BlXl_Qf7.js";
142
- import { r as ensureCompletionCacheExists, t as checkShellCompletionStatus } from "./doctor-completion-BSMAyCq_.js";
141
+ import { n as doctorCommand, t as selectStyled } from "./prompt-select-styled-DigPcXuk.js";
142
+ import { r as ensureCompletionCacheExists, t as checkShellCompletionStatus } from "./doctor-completion-CQXl3jf4.js";
143
143
  import os from "node:os";
144
144
  import path from "node:path";
145
145
  import fs from "node:fs/promises";
@@ -13,11 +13,11 @@ import "./skills-D_oCiaQn.js";
13
13
  import "./manifest-registry-D5bnO5uA.js";
14
14
  import "./skills-status-DODCG6UU.js";
15
15
  import { l as writeConfigFile, o as readConfigFileSnapshot } from "./config-DXt3pc08.js";
16
- import "./client-qUlxXXVJ.js";
17
- import "./call-BrRWr7Lj.js";
16
+ import "./client-Cmq13-uF.js";
17
+ import "./call-CAGvQYXj.js";
18
18
  import "./message-channel-C9dERklz.js";
19
19
  import "./pairing-token-Byh6drgn.js";
20
- import { Ct as trimLogTail } from "./subagent-registry-BvP8AGdE.js";
20
+ import { wt as trimLogTail } from "./subagent-registry-B1HJJs3Q.js";
21
21
  import "./sessions-BPD85pWA.js";
22
22
  import "./tokens-Csntmwwn.js";
23
23
  import "./plugins-CwSlLxM8.js";
@@ -55,8 +55,8 @@ import "./tool-images-CVLISeRT.js";
55
55
  import "./thinking-8sKPnzpp.js";
56
56
  import "./models-config-J1x_DaPn.js";
57
57
  import "./reply-prefix-BUN71nd5.js";
58
- import "./memory-cli-BSOOwpt1.js";
59
- import "./manager-syNf_ZrI.js";
58
+ import "./memory-cli-eSWCbEiS.js";
59
+ import "./manager-B60Ncruq.js";
60
60
  import "./gemini-auth-DEakvf-D.js";
61
61
  import "./retry-C4Q_VPOo.js";
62
62
  import "./sqlite-BP8tiuca.js";
@@ -99,10 +99,10 @@ import "./cli-utils-CI_KkT8q.js";
99
99
  import { t as formatHelpExamples } from "./help-format-nY42tGMB.js";
100
100
  import "./progress-HK2tT7Yf.js";
101
101
  import "./replies-Sxbew659.js";
102
- import "./onboard-helpers-CF0Cp3OB.js";
102
+ import "./onboard-helpers-DjlGq6iG.js";
103
103
  import { n as stylePromptMessage } from "./prompt-style-BxVdnrLq.js";
104
104
  import "./pairing-labels-BHx_CdbP.js";
105
- import "./pi-tools.policy-QIVWAVVI.js";
105
+ import "./pi-tools.policy-o0ytjRqu.js";
106
106
  import { n as inheritOptionFromParent } from "./command-options-DbRrl8qF.js";
107
107
  import "./catalog-KcLvtTfa.js";
108
108
  import "./note-DewoEWtc.js";
@@ -112,32 +112,32 @@ import "./npm-registry-spec-PuS2I1Em.js";
112
112
  import "./skill-scanner-BV3QHmsf.js";
113
113
  import "./installs-B4sNNRaW.js";
114
114
  import "./channels-status-issues-B-ssmZ8E.js";
115
- import "./register.subclis-Bw8k5Z5C.js";
116
- import "./command-registry-cEqGIx4b.js";
115
+ import "./register.subclis-CQtXpheE.js";
116
+ import "./command-registry-B8LVEWW9.js";
117
117
  import "./program-context-DeZ44oQ9.js";
118
- import { r as installCompletion } from "./completion-cli-C5GCKfKT.js";
118
+ import { r as installCompletion } from "./completion-cli-DZeK6_ev.js";
119
119
  import "./daemon-runtime-D_elkkFW.js";
120
120
  import { r as parseSemver } from "./runtime-guard-BofkqBu7.js";
121
121
  import "./systemd-CJ5L2ee4.js";
122
122
  import { t as resolveGatewayService } from "./service-RxN7lQKN.js";
123
123
  import "./lifecycle-core-v3lT0Ymo.js";
124
124
  import "./systemd-hints-Ct8ebNeC.js";
125
- import { i as runDaemonInstall, r as runDaemonRestart } from "./daemon-cli-CAIg9sMo.js";
125
+ import { i as runDaemonInstall, r as runDaemonRestart } from "./daemon-cli-CweMes2K.js";
126
126
  import "./diagnostics-C6xPE2ln.js";
127
127
  import { t as renderTable } from "./table-Bka4fasy.js";
128
- import "./health-fOu0S75U.js";
128
+ import "./health-DMy1nA4K.js";
129
129
  import "./control-ui-assets-Clf7H-Sm.js";
130
130
  import { a as resolveNpmChannelTag, c as DEFAULT_PACKAGE_CHANNEL, d as formatUpdateChannelLabel, g as resolveUpdateChannelDisplay, h as resolveEffectiveUpdateChannel, m as normalizeUpdateChannel, n as compareSemverStrings, r as fetchNpmTagVersion, s as DEFAULT_GIT_CHANNEL, t as checkUpdateStatus, u as channelToNpmTag } from "./update-check-BNjupSIM.js";
131
131
  import "./dm-policy-shared-JiSNSaKz.js";
132
132
  import { i as resolveUpdateAvailability, n as formatUpdateOneLiner, t as formatUpdateAvailableHint } from "./status.update-B5zI1_Id.js";
133
- import { a as globalInstallArgs, c as readPackageVersion, i as detectGlobalInstallManagerForRoot, n as cleanupGlobalRenameDirs, o as resolveGlobalPackageRoot, r as detectGlobalInstallManagerByPresence, s as readPackageName, t as runGatewayUpdate } from "./update-runner-B_yVOk8Z.js";
133
+ import { a as globalInstallArgs, c as readPackageVersion, i as detectGlobalInstallManagerForRoot, n as cleanupGlobalRenameDirs, o as resolveGlobalPackageRoot, r as detectGlobalInstallManagerByPresence, s as readPackageName, t as runGatewayUpdate } from "./update-runner-DUHTdrZ0.js";
134
134
  import "./logging-PVQxLC6I.js";
135
135
  import { n as updateNpmInstalledPlugins, t as syncPluginsForUpdateChannel } from "./update-DticqU4-.js";
136
136
  import "./doctor-config-flow-B2dVxbL7.js";
137
137
  import "./systemd-linger-ipoPa7o0.js";
138
138
  import "./health-format-DkjSgkDx.js";
139
- import { n as doctorCommand, t as selectStyled } from "./prompt-select-styled-Bv675D48.js";
140
- import { r as ensureCompletionCacheExists, t as checkShellCompletionStatus } from "./doctor-completion-DlKvncR9.js";
139
+ import { n as doctorCommand, t as selectStyled } from "./prompt-select-styled-CfKZlGfF.js";
140
+ import { r as ensureCompletionCacheExists, t as checkShellCompletionStatus } from "./doctor-completion-Cu7DwgVw.js";
141
141
  import { spawn, spawnSync } from "node:child_process";
142
142
  import os from "node:os";
143
143
  import path from "node:path";
@@ -1,5 +1,5 @@
1
1
  import { h as pathExists } from "./utils-B-0b9bGM.js";
2
- import { V as trimLogTail } from "./reply-D7_t00Jt.js";
2
+ import { H as trimLogTail } from "./reply-D455A6SA.js";
3
3
  import { t as runCommandWithTimeout } from "./exec-CWkblSrI.js";
4
4
  import { n as resolveControlUiDistIndexHealth, r as resolveControlUiDistIndexPathForRoot } from "./control-ui-assets-BrP31IQR.js";
5
5
  import { c as DEFAULT_PACKAGE_CHANNEL, f as isBetaTag, l as DEV_BRANCH, n as compareSemverStrings, o as detectPackageManager$1, p as isStableTag, u as channelToNpmTag } from "./update-check-Bbvpax6u.js";
@@ -1,6 +1,6 @@
1
1
  import { nt as pathExists } from "./entry.js";
2
2
  import { t as runCommandWithTimeout } from "./exec-CBKBIMpA.js";
3
- import { Ct as trimLogTail } from "./subagent-registry-BvP8AGdE.js";
3
+ import { wt as trimLogTail } from "./subagent-registry-B1HJJs3Q.js";
4
4
  import { n as resolveControlUiDistIndexHealth, r as resolveControlUiDistIndexPathForRoot } from "./control-ui-assets-Clf7H-Sm.js";
5
5
  import { c as DEFAULT_PACKAGE_CHANNEL, f as isBetaTag, l as DEV_BRANCH, n as compareSemverStrings, o as detectPackageManager$1, p as isStableTag, u as channelToNpmTag } from "./update-check-BNjupSIM.js";
6
6
  import os from "node:os";