fengming 0.3.8 → 0.3.10

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 (1255) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/abort-CCR8oZyg.js +277 -0
  3. package/dist/abort.runtime-eqx84NZa.js +2 -0
  4. package/dist/abort.runtime.js +1 -1
  5. package/dist/acp-spawn-BcDyvaXh.js +2 -0
  6. package/dist/acp-spawn-CCtSel-_.js +1286 -0
  7. package/dist/acp-stateful-target-driver-B3pCvuOV.js +89 -0
  8. package/dist/active-tool-schema-warnings-Cf-5q5WU.js +105 -0
  9. package/dist/active-tool-schema-warnings-Dzt3XE-y.js +2 -0
  10. package/dist/agent-1M2dVE2G.js +2 -0
  11. package/dist/agent-DLDIbUT4.js +1825 -0
  12. package/dist/agent-DZi6j3o6.js +3 -0
  13. package/dist/agent-command-ppfDBwET.js +1435 -0
  14. package/dist/agent-harness-runtime-C0bo62eY.d.ts +913 -0
  15. package/dist/agent-harness-runtime-RkTGiliR.js +207 -0
  16. package/dist/agent-runner-utils-B4YeVAO_.js +267 -0
  17. package/dist/agent-runner.runtime-T_3tlZN1.js +3784 -0
  18. package/dist/agent-runner.runtime.js +1 -1
  19. package/dist/agent-runtime-CloshyK-.d.ts +207 -0
  20. package/dist/agent-runtime-DZsmp1xr.js +199 -0
  21. package/dist/agent-tools-CET9usCz.js +2506 -0
  22. package/dist/agent-via-gateway-CZ0X0YkM.js +486 -0
  23. package/dist/agent-wait-dedupe-I81_F2tr.js +180 -0
  24. package/dist/agents/embedded-agent-runner/run/runtime-context-prompt.d.ts +1 -1
  25. package/dist/agents/embedded-agent-runner/tool-split.d.ts +1 -1
  26. package/dist/agents/model-catalog.runtime.d.ts +1 -1
  27. package/dist/api-BDB5xHYj.js +3 -0
  28. package/dist/api-BH7bfI5d.js +6 -0
  29. package/dist/api-BxJNXitd.js +2 -0
  30. package/dist/approval-client-helpers-CfQA9Jzh.d.ts +78 -0
  31. package/dist/approval-native-helpers-B2zyhxWc.d.ts +241 -0
  32. package/dist/approval-renderers-CMqSXyvm.d.ts +39 -0
  33. package/dist/assistant-Cu_Mzzgu.js +291 -0
  34. package/dist/attachment-normalize-Bb3v5iCC.js +213 -0
  35. package/dist/attempt-execution-BskbAq5I.js +584 -0
  36. package/dist/attempt-execution.runtime-BuT1wpNS.js +3 -0
  37. package/dist/attempt-execution.runtime.js +1 -1
  38. package/dist/attempt.prompt-helpers-ByKj-vQ7.js +543 -0
  39. package/dist/auto-reply/reply/commands-crestodian.d.ts +1 -1
  40. package/dist/binding-routing-EGRNvRC4.js +113 -0
  41. package/dist/binding-targets-B9vYS8n6.js +121 -0
  42. package/dist/bridge-server-DG9YtKQe.js +113 -0
  43. package/dist/browser-cli-B0Ou-Nbm.js +2 -0
  44. package/dist/browser-cli-GF25gL6M.js +230 -0
  45. package/dist/browser-cli-actions-input-CuER6RVe.js +522 -0
  46. package/dist/browser-cli-actions-observe-Dq-Zz_FA.js +81 -0
  47. package/dist/browser-cli-debug-7hvb49S1.js +137 -0
  48. package/dist/browser-cli-inspect-WU5KeWOK.js +117 -0
  49. package/dist/browser-cli-manage-B9D9BvSe.js +446 -0
  50. package/dist/browser-cli-resize-BUOusOPb.js +32 -0
  51. package/dist/browser-cli-shared-DmpSN-Qi.js +69 -0
  52. package/dist/browser-cli-state-D_YxTqRw.js +371 -0
  53. package/dist/browser-control-auth-Cqd1n9FA.js +2 -0
  54. package/dist/browser-profiles-9tQ05wYh.js +2 -0
  55. package/dist/browser-runtime-Bbzumoha.js +389 -0
  56. package/dist/build-CBXuT2K1.js +261 -0
  57. package/dist/build-info.json +3 -3
  58. package/dist/bundled/boot-md/handler.js +2 -2
  59. package/dist/bundled/session-memory/handler.js +1 -1
  60. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  61. package/dist/capability-cli-CiVGX7ut.js +1809 -0
  62. package/dist/channel-BIVwHq7P.js +2309 -0
  63. package/dist/channel-CiA2FVdL.d.ts +427 -0
  64. package/dist/channel-core-Cj9JTqeu.js +5 -0
  65. package/dist/channel-core-DjVpcH1C.d.ts +6 -0
  66. package/dist/channel-entry-contract-Bs_54m1D.d.ts +114 -0
  67. package/dist/channel-inbound-CdUdeQRa.js +121 -0
  68. package/dist/channel-inbound-iGiqx6CS.d.ts +97 -0
  69. package/dist/channel-message-C3QPaDUk.js +12 -0
  70. package/dist/channel-message-CXDjxb2U.d.ts +9 -0
  71. package/dist/channel-outbound-ofvvmMSK.d.ts +325 -0
  72. package/dist/channel-pairing-DKscOV1K.d.ts +58 -0
  73. package/dist/channel.runtime-VW6PW_ez.js +697 -0
  74. package/dist/channel.runtime.js +1 -1
  75. package/dist/chat-CFkQepUQ.js +3 -0
  76. package/dist/chat-Czh_tXM0.js +2940 -0
  77. package/dist/chrome-B2cq8YyH.js +1517 -0
  78. package/dist/cli/run-main.js +5 -5
  79. package/dist/cli-compaction-Dxv4nt7R.js +363 -0
  80. package/dist/cli-runner-CimXSTVs.js +2 -0
  81. package/dist/cli-runner-orCzE1Sr.js +597 -0
  82. package/dist/cli-runner.runtime-CsW0dXJW.js +3 -0
  83. package/dist/cli-runner.runtime-DgPrc1do.js +4 -0
  84. package/dist/cli-runner.runtime.js +1 -1
  85. package/dist/cli-startup-metadata.json +10 -12
  86. package/dist/command-registry-C5ooX6PF.js +4 -0
  87. package/dist/command-registry-DMB-HKIk.js +9 -0
  88. package/dist/command-registry-core-B2w_XWvn.js +114 -0
  89. package/dist/command-status.runtime-Bdy3Dkar.js +90 -0
  90. package/dist/command-status.runtime.js +1 -1
  91. package/dist/commands-compact.runtime-Bk2jTQo6.js +10 -0
  92. package/dist/commands-compact.runtime.js +1 -1
  93. package/dist/commands-handlers.runtime-Csw1og0U.js +6327 -0
  94. package/dist/commands-handlers.runtime.js +1 -1
  95. package/dist/commands-mRqmLIVz.d.ts +117 -0
  96. package/dist/commands-status-Dgrj_ubK.js +3 -0
  97. package/dist/commands-status-s32HJOpD.js +16 -0
  98. package/dist/commands-status.runtime-Dgrj_ubK.js +3 -0
  99. package/dist/commands-status.runtime.js +1 -1
  100. package/dist/commands-subagents-control.runtime-C_hnOO9l.js +2 -0
  101. package/dist/commands-subagents-control.runtime.js +1 -1
  102. package/dist/commands-system-prompt-CQV742Cc.js +2 -0
  103. package/dist/commands-system-prompt-DTfsKwK1.js +161 -0
  104. package/dist/commands-types-MXHhrssO.d.ts +132 -0
  105. package/dist/commands.runtime-akiVK67l.js +175 -0
  106. package/dist/commands.runtime.js +1 -1
  107. package/dist/commitments/runtime.js +1 -1
  108. package/dist/compact-U6ZhvPtD.js +1165 -0
  109. package/dist/compact.runtime-36E5vKsC.js +12 -0
  110. package/dist/compact.runtime.js +1 -1
  111. package/dist/completion-cli-Bf4mEw2W.js +393 -0
  112. package/dist/config-BJJhHN9E.js +374 -0
  113. package/dist/config-mutations-swLu-j_p.js +161 -0
  114. package/dist/config-schema-Tjner6bM.d.ts +20 -0
  115. package/dist/context-engine-host-compat-6fkn_daV.js +280 -0
  116. package/dist/context-engine-host-compat-DtAZC1bS.js +2 -0
  117. package/dist/context-engine-lifecycle-R__Idxi1.js +627 -0
  118. package/dist/control-auth-DnkI94_D.js +114 -0
  119. package/dist/control-service-BBsamNjq.js +40 -0
  120. package/dist/control-service-BGpHj7RL.js +3 -0
  121. package/dist/control-ui/assets/activity-D-mnRThU.js +124 -0
  122. package/dist/control-ui/assets/agents-U_KSP5I_.js +1030 -0
  123. package/dist/control-ui/assets/channels-ohK9_G1O.js +120 -0
  124. package/dist/control-ui/assets/cron-6ZCzfU29.js +1016 -0
  125. package/dist/control-ui/assets/debug-CSsDLg_s.js +97 -0
  126. package/dist/control-ui/assets/index-jUDczxhd.js +7214 -0
  127. package/dist/control-ui/assets/instances-782ZoDT4.js +57 -0
  128. package/dist/control-ui/assets/nodes-BMX16BKM.js +444 -0
  129. package/dist/control-ui/assets/sessions-jLGSApYa.js +425 -0
  130. package/dist/control-ui/assets/skills-DweBwUhs.js +362 -0
  131. package/dist/control-ui/assets/workboard-BsU-FXIo.js +402 -0
  132. package/dist/control-ui/index.html +1 -1
  133. package/dist/control-ui/sw.js +1 -1
  134. package/dist/conversation-runtime-DDekWU-U.js +31 -0
  135. package/dist/core-Bpk-qSJH.js +284 -0
  136. package/dist/core-Chrz4oRB.d.ts +223 -0
  137. package/dist/core-api-DSpUKNVW.js +2 -0
  138. package/dist/core-api-hLsW03Wo.js +5 -0
  139. package/dist/crestodian/crestodian.js +1 -1
  140. package/dist/crestodian/rescue-message.d.ts +1 -1
  141. package/dist/crestodian/rescue-message.js +1 -1
  142. package/dist/crestodian-C0x7JjF-.js +55 -0
  143. package/dist/delegate-BArFIZ4B.d.ts +30 -0
  144. package/dist/deliver-BnVp3VbL.d.ts +111 -0
  145. package/dist/delivery-queue-BFOASdf5.d.ts +161 -0
  146. package/dist/delivery-queue-runtime-BFfc8AEs.d.ts +9 -0
  147. package/dist/dialogue-No0NvYX7.js +37 -0
  148. package/dist/direct-dm-C-h88JJH.d.ts +79 -0
  149. package/dist/directive-handling.fast-lane-DTyDKhZb.js +70 -0
  150. package/dist/directive-handling.impl-DMReM6tu.js +2 -0
  151. package/dist/directive-handling.impl-DzPouhV-.js +823 -0
  152. package/dist/directive-handling.model-selection-BjwTBAZJ.js +122 -0
  153. package/dist/directive-handling.persist.runtime-D_O1okkR.js +274 -0
  154. package/dist/directive-handling.persist.runtime.js +1 -1
  155. package/dist/dispatch-Dtl-oRuN.js +2057 -0
  156. package/dist/dispatch-acp-transcript.runtime-M4y0Dq74.js +40 -0
  157. package/dist/dispatch-acp-transcript.runtime.js +1 -1
  158. package/dist/dispatch-acp.runtime-B8uCIKZS.js +18 -0
  159. package/dist/dispatch-acp.runtime.js +1 -1
  160. package/dist/dispatcher-DslvaRcj.js +106 -0
  161. package/dist/doctor-config-flow-LU2C94af.js +1819 -0
  162. package/dist/doctor-core-checks-BqcjExIZ.js +666 -0
  163. package/dist/doctor-core-checks-Diuk8l0N.js +2 -0
  164. package/dist/doctor-core-checks.runtime-DbS-kMZN.js +278 -0
  165. package/dist/doctor-core-checks.runtime.js +1 -1
  166. package/dist/doctor-health-BdqHwfYE.js +65 -0
  167. package/dist/doctor-health-contributions-DLLTVnll.js +874 -0
  168. package/dist/doctor-lint-PZqkVMWf.js +95 -0
  169. package/dist/doctor-mRfJMSb5.js +6 -0
  170. package/dist/doctor-state-integrity-Cdlm-peH.js +1257 -0
  171. package/dist/draft-stream-controls-B7uLonbw.d.ts +159 -0
  172. package/dist/embedded-agent-CEpOPW6X.js +4 -0
  173. package/dist/embedded-agent-CNINO_M-.d.ts +5 -0
  174. package/dist/embedded-agent-DxwzoZkp.js +4074 -0
  175. package/dist/embedded-agent.runtime-DDbhA85-.js +4 -0
  176. package/dist/embedded-agent.runtime.js +1 -1
  177. package/dist/embedded-backend-ChaKCepC.js +1581 -0
  178. package/dist/embedded-gateway-stub.runtime-e_ZxGhcW.js +12 -0
  179. package/dist/embedded-gateway-stub.runtime.js +1 -1
  180. package/dist/entry.d.ts +1 -1
  181. package/dist/extensionAPI.d.ts +2 -2
  182. package/dist/extensionAPI.js +1 -1
  183. package/dist/extensions/active-memory/index.d.ts +1 -1
  184. package/dist/extensions/active-memory/index.js +1 -1
  185. package/dist/extensions/admin-http-rpc/index.d.ts +1 -1
  186. package/dist/extensions/admin-http-rpc/index.js +1 -1
  187. package/dist/extensions/bonjour/index.d.ts +1 -1
  188. package/dist/extensions/browser/browser-bridge.js +1 -1
  189. package/dist/extensions/browser/browser-config.js +4 -4
  190. package/dist/extensions/browser/browser-control-auth.js +2 -2
  191. package/dist/extensions/browser/browser-doctor.js +2 -2
  192. package/dist/extensions/browser/browser-maintenance.js +1 -1
  193. package/dist/extensions/browser/browser-profiles.js +2 -2
  194. package/dist/extensions/browser/browser-runtime-api.js +12 -12
  195. package/dist/extensions/browser/cli-metadata.d.ts +1 -1
  196. package/dist/extensions/browser/cli-metadata.js +1 -1
  197. package/dist/extensions/browser/index.d.ts +1 -1
  198. package/dist/extensions/browser/index.js +1 -1
  199. package/dist/extensions/browser/plugin-registration.d.ts +1 -1
  200. package/dist/extensions/browser/plugin-registration.js +1 -1
  201. package/dist/extensions/browser/register.runtime.d.ts +2 -2
  202. package/dist/extensions/browser/register.runtime.js +4 -4
  203. package/dist/extensions/browser/runtime-api.d.ts +3 -3
  204. package/dist/extensions/browser/runtime-api.js +14 -14
  205. package/dist/extensions/browser/setup-api.d.ts +1 -1
  206. package/dist/extensions/canvas/cli-metadata.d.ts +1 -1
  207. package/dist/extensions/canvas/index.d.ts +1 -1
  208. package/dist/extensions/canvas/index.js +1 -1
  209. package/dist/extensions/canvas/setup-api.d.ts +1 -1
  210. package/dist/extensions/deepseek/api.d.ts +1 -1
  211. package/dist/extensions/deepseek/index.d.ts +1 -1
  212. package/dist/extensions/deepseek/provider-discovery.d.ts +1 -1
  213. package/dist/extensions/deepseek/stream.d.ts +1 -1
  214. package/dist/extensions/device-pair/api.d.ts +4 -4
  215. package/dist/extensions/device-pair/api.js +1 -1
  216. package/dist/extensions/device-pair/index.d.ts +1 -1
  217. package/dist/extensions/device-pair/notify.d.ts +1 -1
  218. package/dist/extensions/device-pair/pair-command-approve.js +1 -1
  219. package/dist/extensions/device-pair/qr-image.d.ts +1 -1
  220. package/dist/extensions/memory-core/api.d.ts +1 -1
  221. package/dist/extensions/memory-core/cli-metadata.d.ts +1 -1
  222. package/dist/extensions/memory-core/cli-metadata.js +1 -1
  223. package/dist/extensions/memory-core/index.d.ts +1 -1
  224. package/dist/extensions/memory-core/manager-runtime.d.ts +1 -1
  225. package/dist/extensions/memory-core/runtime-api.d.ts +3 -3
  226. package/dist/extensions/skill-workshop/api.d.ts +2 -2
  227. package/dist/extensions/skill-workshop/api.js +1 -1
  228. package/dist/extensions/skill-workshop/index.d.ts +1 -1
  229. package/dist/extensions/skill-workshop/index.js +2 -2
  230. package/dist/extensions/tavily/index.d.ts +1 -1
  231. package/dist/extensions/tavily/web-search-contract-api.d.ts +1 -1
  232. package/dist/extensions/tavily/web-search-provider.d.ts +1 -1
  233. package/dist/extensions/thread-ownership/api.d.ts +2 -2
  234. package/dist/extensions/thread-ownership/index.d.ts +1 -1
  235. package/dist/extensions/webhooks/api.d.ts +2 -2
  236. package/dist/extensions/webhooks/api.js +1 -1
  237. package/dist/extensions/webhooks/index.d.ts +1 -1
  238. package/dist/extensions/webhooks/index.js +1 -1
  239. package/dist/extensions/webhooks/runtime-api.d.ts +1 -1
  240. package/dist/extensions/workboard/api.d.ts +2 -2
  241. package/dist/extensions/workboard/index.d.ts +1 -1
  242. package/dist/extensions/workboard/index.js +1 -1
  243. package/dist/extensions/workboard/runtime-api.d.ts +1 -1
  244. package/dist/fengming-runtime-CtRd5677.d.ts +153 -0
  245. package/dist/fengming-tools-DBLsJfsf.js +12221 -0
  246. package/dist/gateway-cli-BgDV2HF9.js +443 -0
  247. package/dist/gateway-method-runtime-d9oN_XO9.js +21 -0
  248. package/dist/get-reply-CEMtvaTJ.js +5198 -0
  249. package/dist/get-reply-from-config.runtime-CE8zmX7o.js +2 -0
  250. package/dist/get-reply-from-config.runtime.js +1 -1
  251. package/dist/heartbeat-runner-H8SmaKmJ.js +5 -0
  252. package/dist/heartbeat-runner.runtime-6hUaxEbl.js +3 -0
  253. package/dist/heartbeat-runner.runtime.js +1 -1
  254. package/dist/hooks-DkEvkwzS.js +536 -0
  255. package/dist/host-compat-DeAq3dnI.d.ts +21 -0
  256. package/dist/http-registry-BDoApjTY.d.ts +23 -0
  257. package/dist/inbound-reply-dispatch-CIYP2OPo.d.ts +156 -0
  258. package/dist/inbound-reply-dispatch-geHu6oUK.js +147 -0
  259. package/dist/inbound-reply-dispatch-vwW5Hl-_.js +2 -0
  260. package/dist/index.js +1 -1
  261. package/dist/init-DpE_6dG4.js +59 -0
  262. package/dist/interactive-Cb_1f91G.d.ts +26 -0
  263. package/dist/isolated-agent-B_upYOOM.js +2 -0
  264. package/dist/isolated-agent-KH9uwWhw.js +1097 -0
  265. package/dist/kernel-BHnBXnm2.d.ts +241 -0
  266. package/dist/lifecycle-BmZwopzF.js +570 -0
  267. package/dist/list.probe-5kzWm9Jk.js +451 -0
  268. package/dist/list.probe-9zBcGGQ4.js +2 -0
  269. package/dist/list.status-command-DY2ifqp1.js +815 -0
  270. package/dist/llm-slug-generator-Bmx0I84M.js +78 -0
  271. package/dist/llm-slug-generator.js +1 -1
  272. package/dist/loader-BVz75gSb.d.ts +142 -0
  273. package/dist/local-dispatch.runtime-CX3IOY1E.js +10 -0
  274. package/dist/local-dispatch.runtime.js +1 -1
  275. package/dist/manager-BXGg8bfG.d.ts +409 -0
  276. package/dist/mcp-http-B1lnh67s.js +2 -0
  277. package/dist/mcp-http-CamghE-W.js +583 -0
  278. package/dist/media-runtime-DpykroJR.d.ts +261 -0
  279. package/dist/memory-core-host-engine-embeddings-N2dX5P40.d.ts +324 -0
  280. package/dist/memory-core-host-engine-storage-WQfkQMer.d.ts +54 -0
  281. package/dist/message-handler-Ca_pqGVS.js +1806 -0
  282. package/dist/model-catalog-BBMLIjhq.d.ts +88 -0
  283. package/dist/model-selection-Cq82FXLy.js +352 -0
  284. package/dist/models-cli-Dm_393dw.js +257 -0
  285. package/dist/monitor-d0eyE2k0.js +60 -0
  286. package/dist/monitor.account-vLQ3bKHu.js +5382 -0
  287. package/dist/nodes-Bunvrb33.js +1483 -0
  288. package/dist/nodes-edNlxb2I.js +3 -0
  289. package/dist/nodes-pending-DEIwVh9v.js +211 -0
  290. package/dist/openai-compat-errors-CvWEoG98.js +136 -0
  291. package/dist/openai-http-Bskdv4Tv.js +836 -0
  292. package/dist/openresponses-http-DxdgCxFU.js +1175 -0
  293. package/dist/operations-Z85LFqsT.js +805 -0
  294. package/dist/outbound.types-DVkbsxo8.d.ts +291 -0
  295. package/dist/plugin-enabled-fvhTpvYS.js +232 -0
  296. package/dist/plugin-entry-CunlVUw6.d.ts +47 -0
  297. package/dist/plugin-registration-9ovnK_Tk.js +97 -0
  298. package/dist/plugin-runtime-DH2ZM9P5.d.ts +117 -0
  299. package/dist/plugin-sdk/.boundary-entry-shims.stamp +1 -1
  300. package/dist/plugin-sdk/acp-runtime-backend.js +1 -1
  301. package/dist/plugin-sdk/acp-runtime.js +1 -1
  302. package/dist/plugin-sdk/agent-harness-runtime.js +5 -5
  303. package/dist/plugin-sdk/agent-harness-task-runtime.js +1 -1
  304. package/dist/plugin-sdk/agent-harness.js +6 -6
  305. package/dist/plugin-sdk/agent-runtime.js +2 -2
  306. package/dist/plugin-sdk/bundled-channel-config-schema-Dfn3b8sF.d.ts +3169 -0
  307. package/dist/plugin-sdk/bundled-channel-config-schema.d.ts +1 -1
  308. package/dist/plugin-sdk/channel-config-schema-legacy.d.ts +1 -1
  309. package/dist/plugin-sdk/channel-core.js +2 -2
  310. package/dist/plugin-sdk/channel-envelope.js +1 -1
  311. package/dist/plugin-sdk/channel-inbound-roots.js +1 -1
  312. package/dist/plugin-sdk/channel-inbound.js +2 -2
  313. package/dist/plugin-sdk/channel-location.js +1 -1
  314. package/dist/plugin-sdk/channel-message-runtime.js +3 -3
  315. package/dist/plugin-sdk/channel-message.js +2 -2
  316. package/dist/plugin-sdk/channel-runtime.js +0 -1
  317. package/dist/plugin-sdk/command-status-runtime.js +1 -1
  318. package/dist/plugin-sdk/compat.js +1 -1
  319. package/dist/plugin-sdk/conversation-binding-runtime.js +1 -1
  320. package/dist/plugin-sdk/conversation-runtime.js +3 -3
  321. package/dist/plugin-sdk/core.js +2 -2
  322. package/dist/plugin-sdk/discord.d.ts +1 -1
  323. package/dist/plugin-sdk/gateway-method-runtime.js +1 -1
  324. package/dist/plugin-sdk/health.js +1 -1
  325. package/dist/plugin-sdk/hook-runtime.js +0 -1
  326. package/dist/plugin-sdk/inbound-reply-dispatch.js +2 -2
  327. package/dist/plugin-sdk/index.js +1 -1
  328. package/dist/plugin-sdk/infra-runtime.js +3 -1
  329. package/dist/plugin-sdk/provider-auth-api-key.js +0 -1
  330. package/dist/plugin-sdk/provider-stream-family.js +0 -1
  331. package/dist/plugin-sdk/provider-usage.js +649 -1
  332. package/dist/plugin-sdk/reply-runtime.js +4 -4
  333. package/dist/plugin-sdk/video-generation.js +206 -1
  334. package/dist/plugin-service-BdZxoKBZ.js +1249 -0
  335. package/dist/plugin-service-quTl5hT0.d.ts +24 -0
  336. package/dist/plugins/build-smoke-entry.d.ts +2 -2
  337. package/dist/plugins/loader.d.ts +1 -1
  338. package/dist/plugins/provider-discovery.runtime.d.ts +1 -1
  339. package/dist/plugins/provider-runtime.runtime.d.ts +1 -1
  340. package/dist/plugins/runtime/index.d.ts +1 -1
  341. package/dist/plugins/runtime/index.js +4 -4
  342. package/dist/plugins/tools.d.ts +1 -1
  343. package/dist/prepare.runtime-DFvkUqBZ.js +798 -0
  344. package/dist/prepare.runtime.js +1 -1
  345. package/dist/preview-warnings-CGzc8ccG.js +618 -0
  346. package/dist/program-D19g2jaa.js +131 -0
  347. package/dist/provider-api-key-auth-B8GgTfo8.d.ts +27 -0
  348. package/dist/provider-auth-result-Diw-woMA.d.ts +21 -0
  349. package/dist/provider-catalog-shared-hMvzzDgL.d.ts +62 -0
  350. package/dist/provider-dispatcher-DCTc4lG_.js +22 -0
  351. package/dist/provider-dispatcher.runtime.js +1 -1
  352. package/dist/provider-model-shared-BUCh3uCL.d.ts +143 -0
  353. package/dist/provider-registry-BIokPlxa.d.ts +8 -0
  354. package/dist/provider-registry-CyUOXHG-.d.ts +8 -0
  355. package/dist/provider-registry-i--H79Ao.d.ts +29 -0
  356. package/dist/provider-self-hosted-setup-BF8UR8wg.d.ts +74 -0
  357. package/dist/provider-stream-NF0XJnar.d.ts +139 -0
  358. package/dist/provider-stream-shared-DLwDaYed.d.ts +132 -0
  359. package/dist/provider-web-search-contract-fields-D61Vl5Kl.d.ts +25 -0
  360. package/dist/pw-ai-DYR-D7xR.js +3064 -0
  361. package/dist/register.agent-DwW0mQPk.js +152 -0
  362. package/dist/register.crestodian-BhIukKDA.js +24 -0
  363. package/dist/register.maintenance-DWHlvztJ.js +85 -0
  364. package/dist/register.subclis-Bsvdh8RI.js +3 -0
  365. package/dist/register.subclis-DVk0HU4k.js +31 -0
  366. package/dist/register.subclis-core-BK7nVvl6.js +278 -0
  367. package/dist/registry-hscEPAcC.d.ts +8 -0
  368. package/dist/registry-types-Ce-n1tuw.d.ts +392 -0
  369. package/dist/repair-sequencing-0-qGNSUO.js +652 -0
  370. package/dist/reply-payload-mCw4ZND6.d.ts +200 -0
  371. package/dist/reply-turn-admission-DMWNadoS.js +2056 -0
  372. package/dist/reply.runtime-CE8zmX7o.js +2 -0
  373. package/dist/reply.runtime.js +1 -1
  374. package/dist/result-fallback-classifier-BZmv2ACy.js +98 -0
  375. package/dist/route-qQ-jYpFa.js +475 -0
  376. package/dist/routes-dTCmw98g.js +2 -0
  377. package/dist/routes-r8DRKa83.js +3701 -0
  378. package/dist/run-BgH7EPGH.js +1162 -0
  379. package/dist/run-command-DCsM-BVh.js +23 -0
  380. package/dist/run-command-I2ib4dwS.js +2 -0
  381. package/dist/run-context-CWaKUKKJ.js +66 -0
  382. package/dist/run-embedded.runtime-CBnDBWN0.js +4 -0
  383. package/dist/run-embedded.runtime.js +1 -1
  384. package/dist/run-execution-cli.runtime-DlYXI-lw.js +4 -0
  385. package/dist/run-execution-cli.runtime.js +1 -1
  386. package/dist/run-executor.runtime-DwepGrmB.js +330 -0
  387. package/dist/run-executor.runtime.js +1 -1
  388. package/dist/run-subagent-registry.runtime-CeVpoIhj.js +2 -0
  389. package/dist/run-subagent-registry.runtime.js +1 -1
  390. package/dist/runtime-D2ee-rNh.js +436 -0
  391. package/dist/runtime-api-B99ZlkNt.d.ts +5 -0
  392. package/dist/runtime-api-Cta2L_Yo.js +12 -0
  393. package/dist/runtime-channel-LKOkML3M.js +2 -0
  394. package/dist/runtime-channel-UtWvrTZ5.js +148 -0
  395. package/dist/runtime-embedded-agent.runtime-9O2Idzyb.js +2 -0
  396. package/dist/runtime-embedded-agent.runtime.js +1 -1
  397. package/dist/runtime-forwarders-DjI8RFL5.d.ts +39 -0
  398. package/dist/sdk-setup-tools-B-X04pa6.js +8 -0
  399. package/dist/selection-B02h8Old.js +3 -0
  400. package/dist/selection-DEPvzrW2.js +18365 -0
  401. package/dist/server-CMYi8gDo.js +24 -0
  402. package/dist/server-Cx07rsiY.js +72 -0
  403. package/dist/server-close.runtime.js +1 -1
  404. package/dist/server-context-BIemGRt4.js +2 -0
  405. package/dist/server-context-CB_an9iy.js +955 -0
  406. package/dist/server-cron-BeyuBUjb.js +3173 -0
  407. package/dist/server-cron-CV7KkVeB.js +2 -0
  408. package/dist/server-methods-C7EnpOhB.js +497 -0
  409. package/dist/server-node-events-DMMzZciN.js +597 -0
  410. package/dist/server-plugin-bootstrap-O6MzvzL8.js +71 -0
  411. package/dist/server-plugins-Dwnaz9kX.js +435 -0
  412. package/dist/server-reload-handlers-C-6TyPvI.js +719 -0
  413. package/dist/server-restart-sentinel-Dc35eYgk.js +700 -0
  414. package/dist/server-runtime-services-DCs-gqh_.js +3 -0
  415. package/dist/server-runtime-services-DF2fzzVd.js +147 -0
  416. package/dist/server-startup-plugins-t-YeYibm.js +127 -0
  417. package/dist/server-startup-post-attach-CiEki-DC.js +793 -0
  418. package/dist/server-ws-runtime-uaUpI-e8.js +374 -0
  419. package/dist/server.impl-MoHjSMr5.js +2622 -0
  420. package/dist/session-kill-http-CYCiQpt2.js +121 -0
  421. package/dist/session-reset-service-BYbADY57.js +651 -0
  422. package/dist/session-status.runtime-8NASbeO4.js +2 -0
  423. package/dist/session-status.runtime.js +1 -1
  424. package/dist/session-subagent-reactivation.runtime-DGeNY2Rb.js +2 -0
  425. package/dist/session-subagent-reactivation.runtime.js +1 -1
  426. package/dist/session-tab-registry-C2eElZrt.js +551 -0
  427. package/dist/sessions-DXAdVXIx.js +1917 -0
  428. package/dist/sessions-history-http-BwK7b8OH.js +432 -0
  429. package/dist/sessions-patch-BYC5gvY1.js +401 -0
  430. package/dist/sessions-resolve-C3ORcdmo.js +180 -0
  431. package/dist/sessions.runtime-BijldeSY.js +2 -0
  432. package/dist/sessions.runtime.js +1 -1
  433. package/dist/snapshot-urls-C5CfP3Co.js +317 -0
  434. package/dist/speech-core-wWkTZPpQ.d.ts +49 -0
  435. package/dist/standalone-CHrieUsw.js +42 -0
  436. package/dist/startup-context-CZfmG8-g.js +314 -0
  437. package/dist/status-subagents.runtime-D2XMebiS.js +32 -0
  438. package/dist/status-subagents.runtime.js +1 -1
  439. package/dist/status-text-JR7IPyzZ.js +301 -0
  440. package/dist/stream-BJgTkLEI.d.ts +5 -0
  441. package/dist/subagent-announce-B9cfs_KZ.js +353 -0
  442. package/dist/subagent-announce-delivery-CtmEvLTS.js +1369 -0
  443. package/dist/subagent-control-DVqLHi9O.js +492 -0
  444. package/dist/subagent-hooks-D251uSvy.js +230 -0
  445. package/dist/subagent-hooks-api-DvdMKxsC.js +23 -0
  446. package/dist/subagent-hooks-uLORYChc.js +2 -0
  447. package/dist/subagent-registry-BW2l_oYu.js +3 -0
  448. package/dist/subagent-registry-BxEMHuiN.js +2627 -0
  449. package/dist/subagent-registry.runtime.d.ts +1 -1
  450. package/dist/subagent-registry.runtime.js +1 -1
  451. package/dist/subagent-session-cleanup-BC5wV2qQ.js +390 -0
  452. package/dist/system-fvgHsr2x.js +111 -0
  453. package/dist/talk-DU0Sod_K.js +2454 -0
  454. package/dist/target-id-BR2xJIkd.js +107 -0
  455. package/dist/task-registry-control.runtime.js +1 -1
  456. package/dist/thread-bindings-8XNu5U2p.js +228 -0
  457. package/dist/tool-Boeg0N5g.js +143 -0
  458. package/dist/tool-dispatch-BhLLaL2g.js +155 -0
  459. package/dist/tool-resolution-CzsLs-87.js +153 -0
  460. package/dist/tool-split-Bedy42Ms.d.ts +19 -0
  461. package/dist/tools-B6egHpE3.d.ts +38 -0
  462. package/dist/tools-effective-NXscxK8n.js +442 -0
  463. package/dist/tools-effective-inventory-NsGMUVo-.js +379 -0
  464. package/dist/tools-invoke-_sSu96Kq.js +51 -0
  465. package/dist/tools-invoke-http-BDhlRl-G.js +68 -0
  466. package/dist/tools-invoke-shared-BH-T9Bcg.js +200 -0
  467. package/dist/tts-runtime-C1wu3o15.d.ts +230 -0
  468. package/dist/tui-C733Qov0.js +2 -0
  469. package/dist/tui-DqbscVN5.js +3 -0
  470. package/dist/tui-backend-_Pn3Byj-.js +257 -0
  471. package/dist/tui-cli-CAiC39zd.js +40 -0
  472. package/dist/tui-ink-run-ChXEGj1h.js +7414 -0
  473. package/dist/tui-ink-run-D4mSfLHj.js +2 -0
  474. package/dist/types-BQw1qXGl.d.ts +7034 -0
  475. package/dist/types-BzMoU6-C.d.ts +111 -0
  476. package/dist/types-DltHmoCX.d.ts +393 -0
  477. package/dist/types.public-C_bVIMBl.d.ts +70 -0
  478. package/dist/web-fetch/runtime.d.ts +1 -1
  479. package/dist/webhook-targets-DW2jhddP.d.ts +99 -0
  480. package/npm-shrinkwrap.json +12861 -11889
  481. package/package.json +2 -5
  482. package/skills/batch/SKILL.md +118 -0
  483. package/skills/code-review/SKILL.md +107 -0
  484. package/skills/debug/SKILL.md +83 -0
  485. package/skills/loop/SKILL.md +118 -0
  486. package/skills/run/SKILL.md +79 -0
  487. package/skills/run-skill-generator/SKILL.md +179 -0
  488. package/skills/verify/SKILL.md +103 -0
  489. package/dist/abort-DGskei2p.js +0 -277
  490. package/dist/abort.runtime-Buq9IZxn.js +0 -2
  491. package/dist/acp-spawn-DC6IyYaB.js +0 -1286
  492. package/dist/acp-spawn-Diqb3nel.js +0 -2
  493. package/dist/acp-stateful-target-driver-Clhe_L8v.js +0 -89
  494. package/dist/active-tool-schema-warnings-BRhKkyvt.js +0 -2
  495. package/dist/active-tool-schema-warnings-C6N0-ce6.js +0 -105
  496. package/dist/agent-C5lhsEZJ.js +0 -2
  497. package/dist/agent-WEb757bl.js +0 -1825
  498. package/dist/agent-command-iLD_nsVY.js +0 -1435
  499. package/dist/agent-core-BeDN8Ns5.d.ts +0 -13
  500. package/dist/agent-harness-runtime-C89_Q-bW.d.ts +0 -913
  501. package/dist/agent-harness-runtime-Dfn5rik2.js +0 -207
  502. package/dist/agent-runner-utils-DNiuuo43.js +0 -267
  503. package/dist/agent-runner.runtime-CFF_qJ5V.js +0 -3784
  504. package/dist/agent-runtime-BkMtWXxn.js +0 -199
  505. package/dist/agent-runtime-HufMO_YR.d.ts +0 -207
  506. package/dist/agent-tools-HmaDv4ot.js +0 -2506
  507. package/dist/agent-via-gateway-CZQG8RYL.js +0 -486
  508. package/dist/agent-wait-dedupe-C3xQk2Ww.js +0 -180
  509. package/dist/agent-z1cs3c7n.js +0 -3
  510. package/dist/api-B4IMKjSe.js +0 -3
  511. package/dist/api-BwSbBWI8.js +0 -3
  512. package/dist/api-CE9In9m4.js +0 -5
  513. package/dist/api-ClPvYNGa.js +0 -32
  514. package/dist/api-CntBCaZf.js +0 -3
  515. package/dist/api-DBZBwTsn.js +0 -6
  516. package/dist/api-OCPwGOvK.js +0 -2
  517. package/dist/api-yYhEo7gK.js +0 -4
  518. package/dist/approval-client-helpers-CfdQ3-vv.d.ts +0 -78
  519. package/dist/approval-native-helpers-DSHPksK4.d.ts +0 -241
  520. package/dist/approval-renderers-BfEfwk44.d.ts +0 -39
  521. package/dist/assistant-v5fdOYu7.js +0 -291
  522. package/dist/attachment-normalize-BHAbLiL2.js +0 -213
  523. package/dist/attempt-execution-5w9WYbaJ.js +0 -584
  524. package/dist/attempt-execution.runtime-DnhOWGzr.js +0 -3
  525. package/dist/attempt.prompt-helpers-C4M4erF7.js +0 -543
  526. package/dist/binding-routing-Dpes-QF1.js +0 -113
  527. package/dist/binding-targets-B6H5Pd-A.js +0 -121
  528. package/dist/bridge-server-BCpxCRm_.js +0 -113
  529. package/dist/browser-cli-DMhXHopl.js +0 -230
  530. package/dist/browser-cli-Dy_VugK0.js +0 -2
  531. package/dist/browser-cli-actions-input-WMP7_lm6.js +0 -522
  532. package/dist/browser-cli-actions-observe-DQWAWhwU.js +0 -81
  533. package/dist/browser-cli-debug-CaT2ZKAx.js +0 -137
  534. package/dist/browser-cli-inspect-DU-LUXq1.js +0 -117
  535. package/dist/browser-cli-manage-DAuogqIh.js +0 -446
  536. package/dist/browser-cli-resize-Cz5uO_aR.js +0 -32
  537. package/dist/browser-cli-shared-CjPZcG3j.js +0 -69
  538. package/dist/browser-cli-state-CC3l77-K.js +0 -371
  539. package/dist/browser-control-auth-ELccIUZy.js +0 -2
  540. package/dist/browser-profiles-Cuy4ia6_.js +0 -2
  541. package/dist/browser-runtime-De-iUfME.js +0 -389
  542. package/dist/build-DEF8Per9.js +0 -261
  543. package/dist/capability-cli-Bydel4E7.js +0 -1809
  544. package/dist/channel-6SGL4R5P.js +0 -2309
  545. package/dist/channel-D3Q3b8J-.d.ts +0 -427
  546. package/dist/channel-core-Bj71kAB5.d.ts +0 -6
  547. package/dist/channel-core-DMvyWnHg.js +0 -5
  548. package/dist/channel-entry-contract-zYxRmEdf.d.ts +0 -114
  549. package/dist/channel-inbound-DVJzBcJ8.d.ts +0 -97
  550. package/dist/channel-inbound-DlCa7eJe.js +0 -121
  551. package/dist/channel-message-CyPGMMFB.js +0 -12
  552. package/dist/channel-message-Czl4cdoA.d.ts +0 -9
  553. package/dist/channel-outbound-BNbhmruA.d.ts +0 -325
  554. package/dist/channel-pairing-BiS-tSvl.d.ts +0 -58
  555. package/dist/channel-runtime-D8hntg7H.js +0 -7
  556. package/dist/channel.runtime-DxErReJR.js +0 -697
  557. package/dist/chat-BLA8ORQI.js +0 -3
  558. package/dist/chat-DWRXkuvU.js +0 -2940
  559. package/dist/chrome-DPwFYi-g.js +0 -1517
  560. package/dist/cli-compaction-YZpssARf.js +0 -363
  561. package/dist/cli-runner-D2OAqxu3.js +0 -597
  562. package/dist/cli-runner-DO4SORQf.js +0 -2
  563. package/dist/cli-runner.runtime-CNSIpbeT.js +0 -4
  564. package/dist/cli-runner.runtime-DAOYvpVQ.js +0 -3
  565. package/dist/command-registry-DpD0fb8D.js +0 -4
  566. package/dist/command-registry-core-Cl3tLG8G.js +0 -114
  567. package/dist/command-registry-nbP7c8RT.js +0 -9
  568. package/dist/command-status.runtime-BBuXTkq0.js +0 -90
  569. package/dist/commands-CR8MVvlD.d.ts +0 -117
  570. package/dist/commands-compact.runtime-BoafIjjg.js +0 -10
  571. package/dist/commands-handlers.runtime-D9jViG_x.js +0 -6327
  572. package/dist/commands-status-BqqJ7PVq.js +0 -16
  573. package/dist/commands-status-CMd41Vxf.js +0 -3
  574. package/dist/commands-status.runtime-CMd41Vxf.js +0 -3
  575. package/dist/commands-subagents-control.runtime-CU4I3A_n.js +0 -2
  576. package/dist/commands-system-prompt-CTtu1D3-.js +0 -2
  577. package/dist/commands-system-prompt-xswhORdM.js +0 -161
  578. package/dist/commands-types-B67CsqXf.d.ts +0 -132
  579. package/dist/commands.runtime-BUFhkrjQ.js +0 -175
  580. package/dist/compact-Dz_WvRkQ.js +0 -1165
  581. package/dist/compact.runtime-n-AKErni.js +0 -12
  582. package/dist/completion-cli-DJYs_L4_.js +0 -393
  583. package/dist/config-CFMbHJb0.js +0 -374
  584. package/dist/config-mutations-DCAloTKR.js +0 -161
  585. package/dist/config-schema-Drw1zrnG.d.ts +0 -20
  586. package/dist/context-engine-host-compat-4mNm1HCE.js +0 -2
  587. package/dist/context-engine-host-compat-BzJ7fUIn.js +0 -280
  588. package/dist/context-engine-lifecycle-V4PNQp6k.js +0 -627
  589. package/dist/control-auth-DG_cw-aN.js +0 -114
  590. package/dist/control-service-CurYipgK.js +0 -3
  591. package/dist/control-service-VyncoV7j.js +0 -40
  592. package/dist/control-ui/assets/activity-D5Plhlo-.js +0 -124
  593. package/dist/control-ui/assets/agents-Chcdfe1E.js +0 -1030
  594. package/dist/control-ui/assets/channels-BEtB4H37.js +0 -120
  595. package/dist/control-ui/assets/cron-CZyPkxSU.js +0 -1016
  596. package/dist/control-ui/assets/debug-DvM8iG47.js +0 -97
  597. package/dist/control-ui/assets/index-Rmpgh0f1.js +0 -7214
  598. package/dist/control-ui/assets/instances-yTC_uu60.js +0 -57
  599. package/dist/control-ui/assets/nodes-vbAxVHIH.js +0 -444
  600. package/dist/control-ui/assets/sessions-DOviHme5.js +0 -425
  601. package/dist/control-ui/assets/skills-Bfp5HEGW.js +0 -362
  602. package/dist/control-ui/assets/workboard-5sU2kHsV.js +0 -402
  603. package/dist/conversation-runtime-DgaABwHh.js +0 -31
  604. package/dist/core-BeBXdneV.js +0 -284
  605. package/dist/core-Chqb7X6l.d.ts +0 -223
  606. package/dist/core-api-BlK0FgBM.js +0 -2
  607. package/dist/core-api-pAvYk716.js +0 -5
  608. package/dist/crestodian-FeGTBqO1.js +0 -55
  609. package/dist/delegate-BjIjSU_E.d.ts +0 -30
  610. package/dist/deliver-CvtWN4Ey.d.ts +0 -111
  611. package/dist/delivery-queue-CQ-cj3KG.d.ts +0 -161
  612. package/dist/delivery-queue-runtime-ut7MG04m.d.ts +0 -9
  613. package/dist/detect-BjXPyrwn.js +0 -115
  614. package/dist/detect-C1xeIemQ.d.ts +0 -16
  615. package/dist/dialogue-BowVYhEC.js +0 -37
  616. package/dist/direct-dm-DoZZHpA0.d.ts +0 -79
  617. package/dist/directive-handling.fast-lane-hnmQ_CvD.js +0 -70
  618. package/dist/directive-handling.impl-Cai-CFS1.js +0 -2
  619. package/dist/directive-handling.impl-DY84qIfU.js +0 -823
  620. package/dist/directive-handling.model-selection-DASssLFQ.js +0 -122
  621. package/dist/directive-handling.persist.runtime-BY7tJUs2.js +0 -274
  622. package/dist/dispatch-D5iG5A8j.js +0 -2057
  623. package/dist/dispatch-acp-transcript.runtime-D3r16hbD.js +0 -40
  624. package/dist/dispatch-acp.runtime-CAIau5qX.js +0 -18
  625. package/dist/dispatcher-7-d2gw3J.js +0 -106
  626. package/dist/doctor-DD5YEMmf.js +0 -6
  627. package/dist/doctor-config-flow-CdlLHJmX.js +0 -1819
  628. package/dist/doctor-core-checks-6MP99TQG.js +0 -666
  629. package/dist/doctor-core-checks-Dm_o576z.js +0 -2
  630. package/dist/doctor-core-checks.runtime-B2qbKATd.js +0 -278
  631. package/dist/doctor-health-BKrhOv1v.js +0 -65
  632. package/dist/doctor-health-contributions-bIBLmw69.js +0 -874
  633. package/dist/doctor-lint-aOLOWli4.js +0 -95
  634. package/dist/doctor-state-integrity-23NQNNuo.js +0 -1257
  635. package/dist/draft-stream-controls-Bk1GVJ1l.d.ts +0 -159
  636. package/dist/embedded-agent-BeK8FhZr.d.ts +0 -5
  637. package/dist/embedded-agent-CNp_y7jW.js +0 -4074
  638. package/dist/embedded-agent-NEmNlXDR.js +0 -4
  639. package/dist/embedded-agent.runtime-hEby8P2s.js +0 -4
  640. package/dist/embedded-backend-BdbgfpBP.js +0 -1581
  641. package/dist/embedded-gateway-stub.runtime-ySZUA3Gy.js +0 -12
  642. package/dist/extensions/alibaba/fengming.plugin.json +0 -47
  643. package/dist/extensions/alibaba/index.d.ts +0 -12
  644. package/dist/extensions/alibaba/index.js +0 -13
  645. package/dist/extensions/alibaba/package.json +0 -15
  646. package/dist/extensions/alibaba/video-generation-provider.d.ts +0 -6
  647. package/dist/extensions/alibaba/video-generation-provider.js +0 -2
  648. package/dist/extensions/baichuan/fengming.plugin.json +0 -69
  649. package/dist/extensions/baichuan/index.d.ts +0 -11
  650. package/dist/extensions/baichuan/index.js +0 -45
  651. package/dist/extensions/baichuan/models.d.ts +0 -7
  652. package/dist/extensions/baichuan/models.js +0 -2
  653. package/dist/extensions/baichuan/onboard.d.ts +0 -5
  654. package/dist/extensions/baichuan/onboard.js +0 -2
  655. package/dist/extensions/baichuan/package.json +0 -15
  656. package/dist/extensions/baichuan/provider-catalog.d.ts +0 -2
  657. package/dist/extensions/baichuan/provider-catalog.js +0 -2
  658. package/dist/extensions/baichuan/provider-discovery.d.ts +0 -2
  659. package/dist/extensions/baichuan/provider-discovery.js +0 -5
  660. package/dist/extensions/byteplus/api.d.ts +0 -3
  661. package/dist/extensions/byteplus/api.js +0 -3
  662. package/dist/extensions/byteplus/fengming.plugin.json +0 -196
  663. package/dist/extensions/byteplus/index.d.ts +0 -12
  664. package/dist/extensions/byteplus/index.js +0 -85
  665. package/dist/extensions/byteplus/models.d.ts +0 -2
  666. package/dist/extensions/byteplus/models.js +0 -2
  667. package/dist/extensions/byteplus/package.json +0 -15
  668. package/dist/extensions/byteplus/provider-catalog.d.ts +0 -2
  669. package/dist/extensions/byteplus/provider-catalog.js +0 -2
  670. package/dist/extensions/byteplus/provider-discovery.d.ts +0 -5
  671. package/dist/extensions/byteplus/provider-discovery.js +0 -23
  672. package/dist/extensions/byteplus/video-generation-provider.d.ts +0 -6
  673. package/dist/extensions/byteplus/video-generation-provider.js +0 -2
  674. package/dist/extensions/longcat/fengming.plugin.json +0 -84
  675. package/dist/extensions/longcat/index.d.ts +0 -11
  676. package/dist/extensions/longcat/index.js +0 -45
  677. package/dist/extensions/longcat/models.d.ts +0 -7
  678. package/dist/extensions/longcat/models.js +0 -2
  679. package/dist/extensions/longcat/onboard.d.ts +0 -5
  680. package/dist/extensions/longcat/onboard.js +0 -2
  681. package/dist/extensions/longcat/package.json +0 -15
  682. package/dist/extensions/longcat/provider-catalog.d.ts +0 -2
  683. package/dist/extensions/longcat/provider-catalog.js +0 -2
  684. package/dist/extensions/longcat/provider-discovery.d.ts +0 -2
  685. package/dist/extensions/longcat/provider-discovery.js +0 -5
  686. package/dist/extensions/minimax/api.d.ts +0 -5
  687. package/dist/extensions/minimax/api.js +0 -6
  688. package/dist/extensions/minimax/fengming.plugin.json +0 -206
  689. package/dist/extensions/minimax/image-generation-provider.d.ts +0 -6
  690. package/dist/extensions/minimax/image-generation-provider.js +0 -2
  691. package/dist/extensions/minimax/index.d.ts +0 -12
  692. package/dist/extensions/minimax/index.js +0 -29
  693. package/dist/extensions/minimax/media-understanding-provider.d.ts +0 -6
  694. package/dist/extensions/minimax/media-understanding-provider.js +0 -2
  695. package/dist/extensions/minimax/model-definitions.d.ts +0 -2
  696. package/dist/extensions/minimax/model-definitions.js +0 -2
  697. package/dist/extensions/minimax/music-generation-provider.d.ts +0 -6
  698. package/dist/extensions/minimax/music-generation-provider.js +0 -2
  699. package/dist/extensions/minimax/oauth.d.ts +0 -2
  700. package/dist/extensions/minimax/oauth.js +0 -2
  701. package/dist/extensions/minimax/oauth.runtime.d.ts +0 -2
  702. package/dist/extensions/minimax/oauth.runtime.js +0 -2
  703. package/dist/extensions/minimax/onboard.d.ts +0 -2
  704. package/dist/extensions/minimax/onboard.js +0 -2
  705. package/dist/extensions/minimax/package.json +0 -15
  706. package/dist/extensions/minimax/provider-catalog.d.ts +0 -2
  707. package/dist/extensions/minimax/provider-catalog.js +0 -2
  708. package/dist/extensions/minimax/provider-contract-api.d.ts +0 -6
  709. package/dist/extensions/minimax/provider-contract-api.js +0 -77
  710. package/dist/extensions/minimax/provider-discovery.d.ts +0 -5
  711. package/dist/extensions/minimax/provider-discovery.js +0 -23
  712. package/dist/extensions/minimax/provider-models.d.ts +0 -2
  713. package/dist/extensions/minimax/provider-models.js +0 -2
  714. package/dist/extensions/minimax/provider-registration.d.ts +0 -7
  715. package/dist/extensions/minimax/provider-registration.js +0 -2
  716. package/dist/extensions/minimax/speech-provider.d.ts +0 -5
  717. package/dist/extensions/minimax/speech-provider.js +0 -2
  718. package/dist/extensions/minimax/tts.d.ts +0 -20
  719. package/dist/extensions/minimax/tts.js +0 -2
  720. package/dist/extensions/minimax/video-generation-provider.d.ts +0 -7
  721. package/dist/extensions/minimax/video-generation-provider.js +0 -2
  722. package/dist/extensions/minimax/web-search-contract-api.d.ts +0 -5
  723. package/dist/extensions/minimax/web-search-contract-api.js +0 -31
  724. package/dist/extensions/minimax/web-search-provider.d.ts +0 -5
  725. package/dist/extensions/minimax/web-search-provider.js +0 -2
  726. package/dist/extensions/moonshot/api.d.ts +0 -3
  727. package/dist/extensions/moonshot/api.js +0 -4
  728. package/dist/extensions/moonshot/fengming.plugin.json +0 -250
  729. package/dist/extensions/moonshot/index.d.ts +0 -11
  730. package/dist/extensions/moonshot/index.js +0 -70
  731. package/dist/extensions/moonshot/media-understanding-provider.d.ts +0 -6
  732. package/dist/extensions/moonshot/media-understanding-provider.js +0 -2
  733. package/dist/extensions/moonshot/onboard.d.ts +0 -2
  734. package/dist/extensions/moonshot/onboard.js +0 -2
  735. package/dist/extensions/moonshot/package.json +0 -15
  736. package/dist/extensions/moonshot/provider-catalog.d.ts +0 -2
  737. package/dist/extensions/moonshot/provider-catalog.js +0 -2
  738. package/dist/extensions/moonshot/provider-contract-api.d.ts +0 -5
  739. package/dist/extensions/moonshot/provider-contract-api.js +0 -27
  740. package/dist/extensions/moonshot/provider-discovery.d.ts +0 -5
  741. package/dist/extensions/moonshot/provider-discovery.js +0 -15
  742. package/dist/extensions/moonshot/web-search-contract-api.d.ts +0 -5
  743. package/dist/extensions/moonshot/web-search-contract-api.js +0 -29
  744. package/dist/extensions/moonshot/web-search-provider.d.ts +0 -5
  745. package/dist/extensions/moonshot/web-search-provider.js +0 -2
  746. package/dist/extensions/qianfan/api.d.ts +0 -3
  747. package/dist/extensions/qianfan/api.js +0 -3
  748. package/dist/extensions/qianfan/fengming.plugin.json +0 -89
  749. package/dist/extensions/qianfan/index.d.ts +0 -11
  750. package/dist/extensions/qianfan/index.js +0 -26
  751. package/dist/extensions/qianfan/onboard.d.ts +0 -2
  752. package/dist/extensions/qianfan/onboard.js +0 -2
  753. package/dist/extensions/qianfan/package.json +0 -15
  754. package/dist/extensions/qianfan/provider-catalog.d.ts +0 -2
  755. package/dist/extensions/qianfan/provider-catalog.js +0 -2
  756. package/dist/extensions/qwen/api.d.ts +0 -4
  757. package/dist/extensions/qwen/api.js +0 -5
  758. package/dist/extensions/qwen/fengming.plugin.json +0 -389
  759. package/dist/extensions/qwen/index.d.ts +0 -11
  760. package/dist/extensions/qwen/index.js +0 -202
  761. package/dist/extensions/qwen/media-understanding-provider.d.ts +0 -6
  762. package/dist/extensions/qwen/media-understanding-provider.js +0 -2
  763. package/dist/extensions/qwen/model-definitions.d.ts +0 -2
  764. package/dist/extensions/qwen/model-definitions.js +0 -2
  765. package/dist/extensions/qwen/models.d.ts +0 -2
  766. package/dist/extensions/qwen/models.js +0 -2
  767. package/dist/extensions/qwen/onboard.d.ts +0 -21
  768. package/dist/extensions/qwen/onboard.js +0 -2
  769. package/dist/extensions/qwen/package.json +0 -15
  770. package/dist/extensions/qwen/provider-catalog.d.ts +0 -2
  771. package/dist/extensions/qwen/provider-catalog.js +0 -2
  772. package/dist/extensions/qwen/stream.d.ts +0 -2
  773. package/dist/extensions/qwen/stream.js +0 -2
  774. package/dist/extensions/qwen/video-generation-provider.d.ts +0 -6
  775. package/dist/extensions/qwen/video-generation-provider.js +0 -2
  776. package/dist/extensions/sensenova/fengming.plugin.json +0 -69
  777. package/dist/extensions/sensenova/index.d.ts +0 -11
  778. package/dist/extensions/sensenova/index.js +0 -45
  779. package/dist/extensions/sensenova/models.d.ts +0 -7
  780. package/dist/extensions/sensenova/models.js +0 -2
  781. package/dist/extensions/sensenova/onboard.d.ts +0 -5
  782. package/dist/extensions/sensenova/onboard.js +0 -2
  783. package/dist/extensions/sensenova/package.json +0 -15
  784. package/dist/extensions/sensenova/provider-catalog.d.ts +0 -2
  785. package/dist/extensions/sensenova/provider-catalog.js +0 -2
  786. package/dist/extensions/sensenova/provider-discovery.d.ts +0 -2
  787. package/dist/extensions/sensenova/provider-discovery.js +0 -5
  788. package/dist/extensions/stepfun/fengming.plugin.json +0 -162
  789. package/dist/extensions/stepfun/index.d.ts +0 -12
  790. package/dist/extensions/stepfun/index.js +0 -165
  791. package/dist/extensions/stepfun/onboard.d.ts +0 -7
  792. package/dist/extensions/stepfun/onboard.js +0 -2
  793. package/dist/extensions/stepfun/package.json +0 -15
  794. package/dist/extensions/stepfun/provider-catalog.d.ts +0 -14
  795. package/dist/extensions/stepfun/provider-catalog.js +0 -2
  796. package/dist/extensions/tencent/api.d.ts +0 -3
  797. package/dist/extensions/tencent/api.js +0 -4
  798. package/dist/extensions/tencent/fengming.plugin.json +0 -105
  799. package/dist/extensions/tencent/index.d.ts +0 -12
  800. package/dist/extensions/tencent/index.js +0 -62
  801. package/dist/extensions/tencent/models.d.ts +0 -2
  802. package/dist/extensions/tencent/models.js +0 -2
  803. package/dist/extensions/tencent/onboard.d.ts +0 -6
  804. package/dist/extensions/tencent/onboard.js +0 -2
  805. package/dist/extensions/tencent/package.json +0 -15
  806. package/dist/extensions/tencent/provider-catalog.d.ts +0 -2
  807. package/dist/extensions/tencent/provider-catalog.js +0 -2
  808. package/dist/extensions/tencent/provider-discovery.d.ts +0 -5
  809. package/dist/extensions/tencent/provider-discovery.js +0 -14
  810. package/dist/extensions/tiangong/fengming.plugin.json +0 -69
  811. package/dist/extensions/tiangong/index.d.ts +0 -11
  812. package/dist/extensions/tiangong/index.js +0 -45
  813. package/dist/extensions/tiangong/models.d.ts +0 -7
  814. package/dist/extensions/tiangong/models.js +0 -2
  815. package/dist/extensions/tiangong/onboard.d.ts +0 -5
  816. package/dist/extensions/tiangong/onboard.js +0 -2
  817. package/dist/extensions/tiangong/package.json +0 -15
  818. package/dist/extensions/tiangong/provider-catalog.d.ts +0 -2
  819. package/dist/extensions/tiangong/provider-catalog.js +0 -2
  820. package/dist/extensions/tiangong/provider-discovery.d.ts +0 -2
  821. package/dist/extensions/tiangong/provider-discovery.js +0 -5
  822. package/dist/extensions/volcengine/api.d.ts +0 -12
  823. package/dist/extensions/volcengine/api.js +0 -4
  824. package/dist/extensions/volcengine/fengming.plugin.json +0 -263
  825. package/dist/extensions/volcengine/index.d.ts +0 -12
  826. package/dist/extensions/volcengine/index.js +0 -88
  827. package/dist/extensions/volcengine/models.d.ts +0 -2
  828. package/dist/extensions/volcengine/models.js +0 -2
  829. package/dist/extensions/volcengine/package.json +0 -15
  830. package/dist/extensions/volcengine/provider-catalog.d.ts +0 -2
  831. package/dist/extensions/volcengine/provider-catalog.js +0 -2
  832. package/dist/extensions/volcengine/provider-discovery.d.ts +0 -5
  833. package/dist/extensions/volcengine/provider-discovery.js +0 -23
  834. package/dist/extensions/volcengine/speech-provider.d.ts +0 -5
  835. package/dist/extensions/volcengine/speech-provider.js +0 -2
  836. package/dist/extensions/volcengine/tts.d.ts +0 -22
  837. package/dist/extensions/volcengine/tts.js +0 -2
  838. package/dist/extensions/weixin/fengming.plugin.json +0 -22
  839. package/dist/extensions/weixin/index.d.ts +0 -26
  840. package/dist/extensions/weixin/index.js +0 -862
  841. package/dist/extensions/weixin/package.json +0 -45
  842. package/dist/extensions/xiaomi/api.d.ts +0 -3
  843. package/dist/extensions/xiaomi/api.js +0 -3
  844. package/dist/extensions/xiaomi/fengming.plugin.json +0 -260
  845. package/dist/extensions/xiaomi/index.d.ts +0 -12
  846. package/dist/extensions/xiaomi/index.js +0 -284
  847. package/dist/extensions/xiaomi/onboard.d.ts +0 -2
  848. package/dist/extensions/xiaomi/onboard.js +0 -2
  849. package/dist/extensions/xiaomi/package.json +0 -15
  850. package/dist/extensions/xiaomi/provider-catalog.d.ts +0 -2
  851. package/dist/extensions/xiaomi/provider-catalog.js +0 -2
  852. package/dist/extensions/xiaomi/speech-provider.d.ts +0 -5
  853. package/dist/extensions/xiaomi/speech-provider.js +0 -2
  854. package/dist/extensions/xiaomi/stream.d.ts +0 -5
  855. package/dist/extensions/xiaomi/stream.js +0 -2
  856. package/dist/extensions/xiaomi/thinking.d.ts +0 -11
  857. package/dist/extensions/xiaomi/thinking.js +0 -2
  858. package/dist/extensions/xingchen/fengming.plugin.json +0 -69
  859. package/dist/extensions/xingchen/index.d.ts +0 -11
  860. package/dist/extensions/xingchen/index.js +0 -45
  861. package/dist/extensions/xingchen/models.d.ts +0 -7
  862. package/dist/extensions/xingchen/models.js +0 -2
  863. package/dist/extensions/xingchen/onboard.d.ts +0 -5
  864. package/dist/extensions/xingchen/onboard.js +0 -2
  865. package/dist/extensions/xingchen/package.json +0 -15
  866. package/dist/extensions/xingchen/provider-catalog.d.ts +0 -2
  867. package/dist/extensions/xingchen/provider-catalog.js +0 -2
  868. package/dist/extensions/xingchen/provider-discovery.d.ts +0 -2
  869. package/dist/extensions/xingchen/provider-discovery.js +0 -5
  870. package/dist/extensions/yi/fengming.plugin.json +0 -84
  871. package/dist/extensions/yi/index.d.ts +0 -11
  872. package/dist/extensions/yi/index.js +0 -45
  873. package/dist/extensions/yi/models.d.ts +0 -7
  874. package/dist/extensions/yi/models.js +0 -2
  875. package/dist/extensions/yi/onboard.d.ts +0 -5
  876. package/dist/extensions/yi/onboard.js +0 -2
  877. package/dist/extensions/yi/package.json +0 -15
  878. package/dist/extensions/yi/provider-catalog.d.ts +0 -2
  879. package/dist/extensions/yi/provider-catalog.js +0 -2
  880. package/dist/extensions/yi/provider-discovery.d.ts +0 -2
  881. package/dist/extensions/yi/provider-discovery.js +0 -5
  882. package/dist/extensions/zai/api.d.ts +0 -4
  883. package/dist/extensions/zai/api.js +0 -4
  884. package/dist/extensions/zai/detect.d.ts +0 -2
  885. package/dist/extensions/zai/detect.js +0 -2
  886. package/dist/extensions/zai/fengming.plugin.json +0 -377
  887. package/dist/extensions/zai/index.d.ts +0 -12
  888. package/dist/extensions/zai/index.js +0 -297
  889. package/dist/extensions/zai/media-understanding-provider.d.ts +0 -5
  890. package/dist/extensions/zai/media-understanding-provider.js +0 -2
  891. package/dist/extensions/zai/model-definitions.d.ts +0 -2
  892. package/dist/extensions/zai/model-definitions.js +0 -2
  893. package/dist/extensions/zai/onboard.d.ts +0 -2
  894. package/dist/extensions/zai/onboard.js +0 -2
  895. package/dist/extensions/zai/package.json +0 -15
  896. package/dist/extensions/zai/runtime-api.d.ts +0 -2
  897. package/dist/extensions/zai/runtime-api.js +0 -2
  898. package/dist/extensions/zhinao/fengming.plugin.json +0 -69
  899. package/dist/extensions/zhinao/index.d.ts +0 -11
  900. package/dist/extensions/zhinao/index.js +0 -45
  901. package/dist/extensions/zhinao/models.d.ts +0 -7
  902. package/dist/extensions/zhinao/models.js +0 -2
  903. package/dist/extensions/zhinao/onboard.d.ts +0 -5
  904. package/dist/extensions/zhinao/onboard.js +0 -2
  905. package/dist/extensions/zhinao/package.json +0 -15
  906. package/dist/extensions/zhinao/provider-catalog.d.ts +0 -2
  907. package/dist/extensions/zhinao/provider-catalog.js +0 -2
  908. package/dist/extensions/zhinao/provider-discovery.d.ts +0 -2
  909. package/dist/extensions/zhinao/provider-discovery.js +0 -5
  910. package/dist/fengming-runtime-0jdu_329.d.ts +0 -153
  911. package/dist/fengming-tools-gQkwsWYz.js +0 -12221
  912. package/dist/fengming.plugin-C-Kdi1_5.js +0 -130
  913. package/dist/fengming.plugin-CRPqMj85.js +0 -166
  914. package/dist/gateway-cli-BV1V43-D.js +0 -443
  915. package/dist/gateway-method-runtime-J2OPP_oH.js +0 -21
  916. package/dist/get-reply-BE8ZGJos.js +0 -5198
  917. package/dist/get-reply-from-config.runtime-C5wfxVI_.js +0 -2
  918. package/dist/heartbeat-runner-_0HlObMb.js +0 -5
  919. package/dist/heartbeat-runner.runtime-DvYz_4Z3.js +0 -3
  920. package/dist/hook-runtime-BH9moP5T.js +0 -4
  921. package/dist/hooks-icCwsmrQ.js +0 -536
  922. package/dist/host-compat-dfJvEfe7.d.ts +0 -21
  923. package/dist/http-registry-Buj7R-F_.d.ts +0 -23
  924. package/dist/image-generation-provider-hrRXkkGc.js +0 -152
  925. package/dist/inbound-reply-dispatch-5AYt56Yt.js +0 -147
  926. package/dist/inbound-reply-dispatch-B5weFW8i.js +0 -2
  927. package/dist/inbound-reply-dispatch-cJh4H31y.d.ts +0 -156
  928. package/dist/infra-runtime-3_0R8nmO.js +0 -32
  929. package/dist/init-BnfkYG_k.js +0 -59
  930. package/dist/interactive-V8NfYsTW.d.ts +0 -26
  931. package/dist/isolated-agent-CgH7dfOj.js +0 -1097
  932. package/dist/isolated-agent-dBWkiw0a.js +0 -2
  933. package/dist/kernel-Ds2aqAJF.d.ts +0 -241
  934. package/dist/kimi-web-search-provider-QJT3Ftj3.js +0 -80
  935. package/dist/kimi-web-search-provider.runtime-Dj3SS4T5.js +0 -307
  936. package/dist/kimi-web-search-provider.runtime.js +0 -1
  937. package/dist/lib-Dg4yjNFQ.js +0 -871
  938. package/dist/lifecycle-B9k7QGsS.js +0 -570
  939. package/dist/list.probe-CbVHFNwf.js +0 -2
  940. package/dist/list.probe-CxiEBmyW.js +0 -451
  941. package/dist/list.status-command-DE-edGgB.js +0 -815
  942. package/dist/llm-slug-generator-DJgq9eFd.js +0 -78
  943. package/dist/loader-5AqYM9PC.d.ts +0 -142
  944. package/dist/local-dispatch.runtime-D3F4v51B.js +0 -10
  945. package/dist/manager-BWf1ks-Z.d.ts +0 -409
  946. package/dist/mcp-http-DU7Nsg4P.js +0 -583
  947. package/dist/mcp-http-iZCW6Cet.js +0 -2
  948. package/dist/media-runtime-DZ5RpQN7.d.ts +0 -261
  949. package/dist/media-understanding-DEdEyoQB.d.ts +0 -46
  950. package/dist/media-understanding-provider-4JHrQOUE.js +0 -70
  951. package/dist/media-understanding-provider-BV7O82XV.js +0 -29
  952. package/dist/media-understanding-provider-BlPRhYkx.js +0 -69
  953. package/dist/media-understanding-provider-BuX8eQLj.js +0 -13
  954. package/dist/memory-core-host-engine-embeddings-BDu5fx8E.d.ts +0 -324
  955. package/dist/memory-core-host-engine-storage-CdCuH-E2.d.ts +0 -54
  956. package/dist/message-handler-L6QLWNVP.js +0 -1806
  957. package/dist/minimax-web-search-provider-_gxeEOy8.js +0 -58
  958. package/dist/minimax-web-search-provider.runtime-BF4mGi6U.js +0 -148
  959. package/dist/minimax-web-search-provider.runtime.js +0 -1
  960. package/dist/model-catalog-DCnRkX8f.d.ts +0 -88
  961. package/dist/model-definitions-B2gY43hI.d.ts +0 -34
  962. package/dist/model-definitions-BLOyeH5h.js +0 -73
  963. package/dist/model-definitions-CoByf5mT.js +0 -243
  964. package/dist/model-definitions-WP3OmzbS.d.ts +0 -57
  965. package/dist/model-selection-DhTE6GZD.js +0 -352
  966. package/dist/models--iAR9QkZ.js +0 -175
  967. package/dist/models-8ImVEkvh.js +0 -36
  968. package/dist/models-BIDM8htk.js +0 -48
  969. package/dist/models-BRgRfrcS.js +0 -36
  970. package/dist/models-Bib5-APc.js +0 -67
  971. package/dist/models-Bl67zOoe.js +0 -36
  972. package/dist/models-BqDDYFE3.d.ts +0 -65
  973. package/dist/models-BtRQoRIu.js +0 -36
  974. package/dist/models-BvXmOXik.js +0 -48
  975. package/dist/models-C-sJciOD.d.ts +0 -9
  976. package/dist/models-COnXPdlL.js +0 -24
  977. package/dist/models-CXTmk-Da.d.ts +0 -8
  978. package/dist/models-Cz0C_8re.js +0 -36
  979. package/dist/models-DbwEIt-m.d.ts +0 -15
  980. package/dist/models-DgXkSADi.js +0 -30
  981. package/dist/models-cli-Bv3y3JgQ.js +0 -257
  982. package/dist/monitor-BiVOsbbN.js +0 -1024
  983. package/dist/monitor-BumfRp1t.js +0 -60
  984. package/dist/monitor.account-Cd6EwtuZ.js +0 -5382
  985. package/dist/music-generation-provider-ZdDMiC-c.js +0 -308
  986. package/dist/nodes-C0f8XgD5.js +0 -1483
  987. package/dist/nodes-Dk4vOgg9.js +0 -3
  988. package/dist/nodes-pending-Cjg09MXz.js +0 -211
  989. package/dist/oauth-BIO69Qw0.d.ts +0 -25
  990. package/dist/oauth-CnO10TN2.js +0 -207
  991. package/dist/onboard-B3BYT5k7.js +0 -34
  992. package/dist/onboard-BDMNV6RE.js +0 -23
  993. package/dist/onboard-B_WNNy5F.d.ts +0 -6
  994. package/dist/onboard-BbyMaErU.js +0 -69
  995. package/dist/onboard-BuYPNE6j2.js +0 -23
  996. package/dist/onboard-C394zMnM.d.ts +0 -11
  997. package/dist/onboard-CHn4oVbY.js +0 -24
  998. package/dist/onboard-CPpVbb0O.js +0 -73
  999. package/dist/onboard-CWDx7Crt.js +0 -23
  1000. package/dist/onboard-CbzkwBzu.d.ts +0 -12
  1001. package/dist/onboard-D099qUd0.js +0 -23
  1002. package/dist/onboard-D7dbzfHc.js +0 -23
  1003. package/dist/onboard-DB-x0nHF.js +0 -30
  1004. package/dist/onboard-DFVrRnxJ.js +0 -23
  1005. package/dist/onboard-DFiqoOc2.d.ts +0 -7
  1006. package/dist/onboard-DJaMK3rr.d.ts +0 -6
  1007. package/dist/onboard-DMdK8D_h.js +0 -67
  1008. package/dist/onboard-J-KL-I6m.js +0 -48
  1009. package/dist/onboard-MIBU-Rmv.js +0 -39
  1010. package/dist/onboard-vmGylfFe.js +0 -23
  1011. package/dist/openai-compat-errors-Dcr5Y8bF.js +0 -136
  1012. package/dist/openai-http-CcqspzU6.js +0 -836
  1013. package/dist/openresponses-http-BnyYYvUF.js +0 -1175
  1014. package/dist/operations-H2Oq0KYz.js +0 -805
  1015. package/dist/outbound.types-BhRehecY.d.ts +0 -291
  1016. package/dist/plugin-enabled-CEIKWKrq.js +0 -232
  1017. package/dist/plugin-entry-CTVRRaaA.d.ts +0 -47
  1018. package/dist/plugin-registration-BTyO5Fwt.js +0 -97
  1019. package/dist/plugin-runtime-_XF2N_UQ.d.ts +0 -117
  1020. package/dist/plugin-sdk/bundled-channel-config-schema-BsOWCrJT.d.ts +0 -3169
  1021. package/dist/plugin-service-B91jVlmZ.d.ts +0 -24
  1022. package/dist/plugin-service-CtGwVz8V.js +0 -1249
  1023. package/dist/prepare.runtime-9dlboph7.js +0 -798
  1024. package/dist/preview-warnings-DJx4KJpC.js +0 -618
  1025. package/dist/program-CWC-NBBB.js +0 -131
  1026. package/dist/provider-api-key-auth-BmNcYRMl.d.ts +0 -27
  1027. package/dist/provider-auth-api-key-CCaFiqY3.js +0 -5
  1028. package/dist/provider-auth-result-D_E9dcVc.d.ts +0 -21
  1029. package/dist/provider-catalog-5KZLmrDO.js +0 -11
  1030. package/dist/provider-catalog-7P6AvDzS.js +0 -11
  1031. package/dist/provider-catalog-B2gyTjTU.js +0 -88
  1032. package/dist/provider-catalog-B3YBhe77.js +0 -17
  1033. package/dist/provider-catalog-B7XEeuUm.js +0 -11
  1034. package/dist/provider-catalog-BFGPRd9v.js +0 -17
  1035. package/dist/provider-catalog-BLvkIMSk.d.ts +0 -6
  1036. package/dist/provider-catalog-BPBL9mJf.d.ts +0 -5
  1037. package/dist/provider-catalog-BRkZ6-HD.d.ts +0 -5
  1038. package/dist/provider-catalog-Bfl_AoTZ.js +0 -142
  1039. package/dist/provider-catalog-BpiHWHu1.js +0 -11
  1040. package/dist/provider-catalog-C1qDLekT.d.ts +0 -5
  1041. package/dist/provider-catalog-CKWNCfry.js +0 -11
  1042. package/dist/provider-catalog-CUHB2pSt.d.ts +0 -7
  1043. package/dist/provider-catalog-CWqN2j6J.d.ts +0 -5
  1044. package/dist/provider-catalog-CZ8oYbx3.js +0 -11
  1045. package/dist/provider-catalog-CcQ5-4ZW.d.ts +0 -6
  1046. package/dist/provider-catalog-Cd16uZ0U.js +0 -20
  1047. package/dist/provider-catalog-CpF2D0VK.js +0 -61
  1048. package/dist/provider-catalog-CvXq36zW.d.ts +0 -5
  1049. package/dist/provider-catalog-D2pgEME3.js +0 -48
  1050. package/dist/provider-catalog-DPzcupEl.d.ts +0 -5
  1051. package/dist/provider-catalog-DaeI606G.d.ts +0 -9
  1052. package/dist/provider-catalog-DrOCtTb-.js +0 -11
  1053. package/dist/provider-catalog-DwZ1J2Al.d.ts +0 -6
  1054. package/dist/provider-catalog-Dy7IcHmS.js +0 -107
  1055. package/dist/provider-catalog-TsZS52nq.d.ts +0 -10
  1056. package/dist/provider-catalog-YqIFRCND.d.ts +0 -5
  1057. package/dist/provider-catalog-Ywb5jRwG.d.ts +0 -5
  1058. package/dist/provider-catalog-evknl1oN.js +0 -11
  1059. package/dist/provider-catalog-l0hFpFO2.d.ts +0 -17
  1060. package/dist/provider-catalog-shared-DsRBv0Tp.d.ts +0 -62
  1061. package/dist/provider-dispatcher-BMy9mBJ1.js +0 -22
  1062. package/dist/provider-model-shared-CPAfQBNs.d.ts +0 -143
  1063. package/dist/provider-models-Diu65OcG.d.ts +0 -18
  1064. package/dist/provider-models-LE7PlLYY.js +0 -22
  1065. package/dist/provider-onboard-CpvXEmvz.d.ts +0 -91
  1066. package/dist/provider-registration-DF-LkmNE.js +0 -235
  1067. package/dist/provider-registry-D9cTPW1F.d.ts +0 -8
  1068. package/dist/provider-registry-DI7gMKUP.d.ts +0 -8
  1069. package/dist/provider-registry-DZtgZDkl.d.ts +0 -29
  1070. package/dist/provider-self-hosted-setup-CoHvoyKm.d.ts +0 -74
  1071. package/dist/provider-stream-BpXJr5Ap.d.ts +0 -139
  1072. package/dist/provider-stream-family-Bj5aBD8w.js +0 -2
  1073. package/dist/provider-stream-shared-BaUkhUHj.d.ts +0 -132
  1074. package/dist/provider-usage-DFUhW2do.js +0 -651
  1075. package/dist/provider-web-search-contract-fields-CkXzSsWu.d.ts +0 -25
  1076. package/dist/pw-ai-9Q_dIq4B.js +0 -3064
  1077. package/dist/register.agent-CbfrlzXB.js +0 -152
  1078. package/dist/register.crestodian-CEg0rPfK.js +0 -24
  1079. package/dist/register.maintenance-k9N8I4Wg.js +0 -85
  1080. package/dist/register.subclis-CrXOeaS3.js +0 -3
  1081. package/dist/register.subclis-DfKlni8N.js +0 -31
  1082. package/dist/register.subclis-core-Bg4wbDsO.js +0 -278
  1083. package/dist/registry-Bh3-P2HL.d.ts +0 -8
  1084. package/dist/registry-types-BmEUS4d3.d.ts +0 -392
  1085. package/dist/repair-sequencing-E4yViXG9.js +0 -652
  1086. package/dist/reply-payload-S2mrc_Mh.d.ts +0 -200
  1087. package/dist/reply-turn-admission-BBoPjmGB.js +0 -2056
  1088. package/dist/reply.runtime-C5wfxVI_.js +0 -2
  1089. package/dist/result-fallback-classifier-CX4iLD1G.js +0 -98
  1090. package/dist/route-CifxcQZ1.js +0 -475
  1091. package/dist/routes-B3XAOeWo.js +0 -2
  1092. package/dist/routes-H185h3U-.js +0 -3701
  1093. package/dist/run-CTJFbwbB.js +0 -1162
  1094. package/dist/run-command-B7B53tYk.js +0 -23
  1095. package/dist/run-command-BFuxRDxS.js +0 -2
  1096. package/dist/run-context-C7im9ICg.js +0 -66
  1097. package/dist/run-embedded.runtime-TljBTbzh.js +0 -4
  1098. package/dist/run-execution-cli.runtime-Bt5zwx1W.js +0 -4
  1099. package/dist/run-executor.runtime-hmbWX2Ct.js +0 -330
  1100. package/dist/run-subagent-registry.runtime-B70X80nS.js +0 -2
  1101. package/dist/runtime-DoKE0o7v.js +0 -436
  1102. package/dist/runtime-api-Ca4Llbgf.js +0 -12
  1103. package/dist/runtime-api-pa8xcEmg.d.ts +0 -5
  1104. package/dist/runtime-channel-CFQ59svm.js +0 -148
  1105. package/dist/runtime-channel-DRwCWGUx.js +0 -2
  1106. package/dist/runtime-embedded-agent.runtime-DwmqKUVp.js +0 -2
  1107. package/dist/runtime-forwarders-BMThPHg_.d.ts +0 -39
  1108. package/dist/sdk-setup-tools-Cg_Tabrf.js +0 -8
  1109. package/dist/selection-COhr7g82.js +0 -18365
  1110. package/dist/selection-_G44EVqd.js +0 -3
  1111. package/dist/send-media-BNc67G7I.js +0 -2072
  1112. package/dist/server-5rR0RCpI.js +0 -24
  1113. package/dist/server-context-BhiPROPA.js +0 -955
  1114. package/dist/server-context-OShBAJZQ.js +0 -2
  1115. package/dist/server-cron-Bkzb9edh.js +0 -3173
  1116. package/dist/server-cron-DdR-ugiU.js +0 -2
  1117. package/dist/server-lwtC1vaS.js +0 -72
  1118. package/dist/server-methods-BY_ZqDFJ.js +0 -497
  1119. package/dist/server-node-events-CLvE94AS.js +0 -597
  1120. package/dist/server-plugin-bootstrap-cKOAH5GL.js +0 -71
  1121. package/dist/server-plugins-CPpUykw5.js +0 -435
  1122. package/dist/server-reload-handlers-uzt4VDZ-.js +0 -719
  1123. package/dist/server-restart-sentinel-CpvV0t4O.js +0 -700
  1124. package/dist/server-runtime-services-BhOHoerM.js +0 -147
  1125. package/dist/server-runtime-services-D3Ig68nC.js +0 -3
  1126. package/dist/server-startup-plugins-DslzKVHK.js +0 -127
  1127. package/dist/server-startup-post-attach-DPFBTQez.js +0 -793
  1128. package/dist/server-ws-runtime-D0zoWoiz.js +0 -374
  1129. package/dist/server.impl-CzqLQ3qt.js +0 -2622
  1130. package/dist/session-kill-http-D8JhwZVS.js +0 -121
  1131. package/dist/session-reset-service-uoi7E4Xp.js +0 -651
  1132. package/dist/session-status.runtime-CZK5IU8w.js +0 -2
  1133. package/dist/session-subagent-reactivation.runtime-BSO00-FY.js +0 -2
  1134. package/dist/session-tab-registry-DM9U7e3o.js +0 -551
  1135. package/dist/sessions-B-SkIoaa.js +0 -1917
  1136. package/dist/sessions-history-http-DCiOG4FK.js +0 -432
  1137. package/dist/sessions-patch-DlAAvQvB.js +0 -401
  1138. package/dist/sessions-resolve-DfMXookg.js +0 -180
  1139. package/dist/sessions.runtime-0V2YxKxB.js +0 -2
  1140. package/dist/snapshot-urls-Ble1-NEW.js +0 -317
  1141. package/dist/speech-core-Bk60ZS_y.d.ts +0 -49
  1142. package/dist/speech-provider-DQO9eZd0.js +0 -233
  1143. package/dist/speech-provider-DnBCla4V.js +0 -171
  1144. package/dist/speech-provider-DyYHFxT5.js +0 -227
  1145. package/dist/standalone-9EWfcxeO.js +0 -42
  1146. package/dist/startup-context-nti4X0_w.js +0 -314
  1147. package/dist/status-subagents.runtime-CPZb1EF1.js +0 -32
  1148. package/dist/status-text-C1Hf37lF.js +0 -301
  1149. package/dist/stream-9VBt1MDs.js +0 -26
  1150. package/dist/stream-B_3P7v7P.js +0 -86
  1151. package/dist/stream-CXsue2-v.d.ts +0 -9
  1152. package/dist/stream-oNBFxfKt.d.ts +0 -5
  1153. package/dist/subagent-announce-CPjQQLy8.js +0 -353
  1154. package/dist/subagent-announce-delivery-B6iBOicL.js +0 -1369
  1155. package/dist/subagent-control-DP72sk-l.js +0 -492
  1156. package/dist/subagent-hooks-B1oUIYH3.js +0 -2
  1157. package/dist/subagent-hooks-BkGj4_xI.js +0 -230
  1158. package/dist/subagent-hooks-api-D2mulK3S.js +0 -23
  1159. package/dist/subagent-registry-CEKAUB5h.js +0 -3
  1160. package/dist/subagent-registry-OUVucPAn.js +0 -2627
  1161. package/dist/subagent-session-cleanup-Bx8d3kw0.js +0 -390
  1162. package/dist/system-CelaP2zI.js +0 -111
  1163. package/dist/talk-DGOI3Lu3.js +0 -2454
  1164. package/dist/target-id-BXRG7x9x.js +0 -107
  1165. package/dist/thinking-B8V29FhB.js +0 -35
  1166. package/dist/thread-bindings-DpVdEPZ0.js +0 -228
  1167. package/dist/tool-DHzDpxE4.js +0 -143
  1168. package/dist/tool-dispatch-ClP3Rc7g.js +0 -155
  1169. package/dist/tool-resolution-CZcLod1d.js +0 -153
  1170. package/dist/tool-split-BhiQ8676.d.ts +0 -19
  1171. package/dist/tools-ZvSvbsCW.d.ts +0 -38
  1172. package/dist/tools-effective-C2mHZT-A.js +0 -442
  1173. package/dist/tools-effective-inventory-ctnM7hc6.js +0 -379
  1174. package/dist/tools-invoke-Ci6Rux2s.js +0 -51
  1175. package/dist/tools-invoke-http-CJflXcJk.js +0 -68
  1176. package/dist/tools-invoke-shared-BLu_mJEX.js +0 -200
  1177. package/dist/tts-B2rPJPij.js +0 -83
  1178. package/dist/tts-Gp9FI3_n.js +0 -163
  1179. package/dist/tts-runtime-DNi1HXPF.d.ts +0 -230
  1180. package/dist/tui-BUhfQ9vD.js +0 -3
  1181. package/dist/tui-BhH5mvLf.js +0 -2
  1182. package/dist/tui-backend-C_4ajTHI.js +0 -257
  1183. package/dist/tui-cli-BhWJ-QoB.js +0 -40
  1184. package/dist/tui-ink-run-BTWbUQGb.js +0 -7414
  1185. package/dist/tui-ink-run-DfTdivkh.js +0 -2
  1186. package/dist/types-B4fW3r5y.d.ts +0 -111
  1187. package/dist/types-DI62NfFe.d.ts +0 -7034
  1188. package/dist/types-sAih_uQb.d.ts +0 -393
  1189. package/dist/types.public-B3MKhuo2.d.ts +0 -70
  1190. package/dist/video-generation-B9c6a5cw.js +0 -207
  1191. package/dist/video-generation-BgJp7UIA.d.ts +0 -224
  1192. package/dist/video-generation-provider-BjiVjf40.js +0 -325
  1193. package/dist/video-generation-provider-CsnQJg_h.js +0 -297
  1194. package/dist/video-generation-provider-DtU-ZPqP.js +0 -64
  1195. package/dist/video-generation-provider-wZ0bzv0e.js +0 -77
  1196. package/dist/webhook-targets-Cy8e7y3g.d.ts +0 -99
  1197. package/skills/canvas/SKILL.md +0 -78
  1198. package/skills/clawhub/SKILL.md +0 -77
  1199. package/skills/coding-agent/SKILL.md +0 -143
  1200. package/skills/diagram-maker/SKILL.md +0 -53
  1201. package/skills/diagram-maker/references/excalidraw-patterns.md +0 -85
  1202. package/skills/diagram-maker/references/svg-template.md +0 -112
  1203. package/skills/gemini/SKILL.md +0 -47
  1204. package/skills/gh-issues/SKILL.md +0 -213
  1205. package/skills/gifgrep/SKILL.md +0 -85
  1206. package/skills/github/SKILL.md +0 -84
  1207. package/skills/healthcheck/SKILL.md +0 -105
  1208. package/skills/mcporter/SKILL.md +0 -61
  1209. package/skills/meme-maker/SKILL.md +0 -42
  1210. package/skills/meme-maker/references/templates.json +0 -358
  1211. package/skills/meme-maker/scripts/meme.mjs +0 -398
  1212. package/skills/model-usage/SKILL.md +0 -71
  1213. package/skills/model-usage/references/codexbar-cli.md +0 -33
  1214. package/skills/model-usage/scripts/model_usage.py +0 -319
  1215. package/skills/model-usage/scripts/test_model_usage.py +0 -40
  1216. package/skills/nano-pdf/SKILL.md +0 -38
  1217. package/skills/node-connect/SKILL.md +0 -143
  1218. package/skills/node-inspect-debugger/SKILL.md +0 -85
  1219. package/skills/openai-whisper/SKILL.md +0 -38
  1220. package/skills/openai-whisper-api/SKILL.md +0 -71
  1221. package/skills/openai-whisper-api/scripts/transcribe.sh +0 -154
  1222. package/skills/oracle/SKILL.md +0 -126
  1223. package/skills/pyproject.toml +0 -10
  1224. package/skills/python-debugpy/SKILL.md +0 -73
  1225. package/skills/sag/SKILL.md +0 -87
  1226. package/skills/session-logs/SKILL.md +0 -151
  1227. package/skills/sherpa-onnx-tts/SKILL.md +0 -109
  1228. package/skills/sherpa-onnx-tts/bin/sherpa-onnx-tts +0 -178
  1229. package/skills/skill-creator/SKILL.md +0 -78
  1230. package/skills/skill-creator/license.txt +0 -202
  1231. package/skills/skill-creator/scripts/init_skill.py +0 -378
  1232. package/skills/skill-creator/scripts/package_skill.py +0 -139
  1233. package/skills/skill-creator/scripts/quick_validate.py +0 -169
  1234. package/skills/skill-creator/scripts/test_package_skill.py +0 -161
  1235. package/skills/skill-creator/scripts/test_quick_validate.py +0 -116
  1236. package/skills/spike/SKILL.md +0 -51
  1237. package/skills/summarize/SKILL.md +0 -87
  1238. package/skills/taskflow/SKILL.md +0 -149
  1239. package/skills/taskflow/examples/inbox-triage.lobster +0 -33
  1240. package/skills/taskflow/examples/pr-intake.lobster +0 -32
  1241. package/skills/taskflow-inbox-triage/SKILL.md +0 -119
  1242. package/skills/video-frames/SKILL.md +0 -46
  1243. package/skills/video-frames/scripts/frame.sh +0 -81
  1244. package/skills/voice-call/SKILL.md +0 -45
  1245. package/skills/weather/SKILL.md +0 -64
  1246. /package/dist/{acp-runtime-backend-DbchQ02o.js → acp-runtime-backend-DZ1Lnt7f.js} +0 -0
  1247. /package/dist/{delegate-k1aptKei.js → delegate-CwhxUdeb.js} +0 -0
  1248. /package/dist/{dispatch-acp-CD4YxPpf.js → dispatch-acp-BP4I5ZQf.js} +0 -0
  1249. /package/dist/{exec-approvals-ByWUCFQM.js → exec-approvals-ByWUCFQM2.js} +0 -0
  1250. /package/dist/{heartbeat-runner-CM0UZxa_.js → heartbeat-runner-CL3alQ8-.js} +0 -0
  1251. /package/dist/{index-B0VJdRJQ.d.ts → index-B0VJdRJQ2.d.ts} +0 -0
  1252. /package/dist/{library-CQ71yATP.js → library-CiTr_aqC.js} +0 -0
  1253. /package/dist/{run-session-state-DbDeH-q6.js → run-session-state-BOMUtBKZ.js} +0 -0
  1254. /package/dist/{session-subagent-reactivation-Bj91A2ms.js → session-subagent-reactivation-CH0C2I6Y.js} +0 -0
  1255. /package/dist/{types-C4HgagiY2.d.ts → types-C4HgagiY.d.ts} +0 -0
@@ -0,0 +1,2627 @@
1
+ import { a as normalizeLowercaseStringOrEmpty } from "./string-coerce-DKw2K5wM.js";
2
+ import { a as asFiniteNumber } from "./number-coercion-D1aDmIZp.js";
3
+ import { c as readErrorName, i as formatErrorMessage } from "./errors-C_Wa6a5T.js";
4
+ import { n as createLazyPromiseLoader, t as createLazyImportLoader } from "./lazy-promise-Djskx0qC.js";
5
+ import { _ as uniqueStrings } from "./string-normalization-B8G0vlWE.js";
6
+ import { n as defaultRuntime } from "./runtime-BkTkFkXs.js";
7
+ import { t as createSubsystemLogger } from "./subsystem-B7U-DPv3.js";
8
+ import { d as resolveAgentIdFromSessionKey } from "./session-key-CJf5_zWs.js";
9
+ import { c as toSafeImportPath } from "./plugin-module-loader-cache-BfqZt7iA.js";
10
+ import { i as getRuntimeConfig } from "./io-T1CV3Z1L.js";
11
+ import "./config-4B-JCqw_.js";
12
+ import { i as callGateway } from "./call-CLicF0UE.js";
13
+ import { t as getGlobalHookRunner } from "./hook-runner-global-De3loPgD.js";
14
+ import { c as getAgentRunContext, l as onAgentEvent } from "./agent-events-Dl8p_DjC.js";
15
+ import { o as normalizeDeliveryContext } from "./delivery-context.shared-CHlZnq4E.js";
16
+ import { u as resolveStorePath } from "./paths-C79m3Aob.js";
17
+ import { c as registerSessionMaintenancePreserveKeysProvider, t as loadSessionStore } from "./store-load-CVdafI-Y.js";
18
+ import { d as updateSessionStore } from "./store-DH20opqS.js";
19
+ import "./sessions-CtMqsEs2.js";
20
+ import { n as resolveRequiredCompletionTerminalResult, r as resolveAgentTimeoutMs, t as resolveRequiredCompletionDeliveryFailureTerminalResult } from "./task-completion-contract-BqW0VJsk.js";
21
+ import { c as isBlockedLivenessState, n as buildAgentRunTerminalOutcomeFromWaitResult, o as isAbortedAgentStopReason, s as formatBlockedLivenessError } from "./agent-run-terminal-outcome-uM9dOCUm.js";
22
+ import { n as extractTextFromChatContent } from "./chat-content-BNTcXm1Z.js";
23
+ import { a as failTaskRunByRunId, i as createRunningTaskRun, l as setDetachedTaskDeliveryStatusByRunId, n as completeTaskRunByRunId } from "./detached-task-runtime-C6Jx9d2V.js";
24
+ import { a as isSilentReplyText } from "./tokens-T0RrWCee.js";
25
+ import { A as getSubagentSessionRuntimeMs, B as subagentRuns, F as SUBAGENT_ENDED_OUTCOME_TIMEOUT, I as SUBAGENT_ENDED_REASON_COMPLETE, L as SUBAGENT_ENDED_REASON_ERROR, M as resolveSubagentSessionStatus, N as SUBAGENT_ENDED_OUTCOME_ERROR, O as isStaleUnendedSubagentRun, P as SUBAGENT_ENDED_OUTCOME_KILLED, R as SUBAGENT_ENDED_REASON_KILLED, _ as countPendingDescendantRunsFromRuns, a as clearDeliveryState, b as listDescendantRunsForRequesterFromRuns, c as getDeliveryAttemptCount, d as isDeliverySuspended, f as normalizeSubagentRunState, h as countActiveRunsForSessionFromRuns, i as restoreSubagentRunsFromDisk, j as getSubagentSessionStartedAt, l as getDeliveryLastAttemptAt, m as countActiveDescendantRunsFromRuns, n as persistSubagentRunsToDisk, o as ensureCompletionState, r as persistSubagentRunsToDiskOrThrow, s as ensureDeliveryState, t as getSubagentRunsSnapshotForRead, u as getDeliveryLastError, v as getSubagentRunByChildSessionKeyFromRuns, x as listRunsForControllerFromRuns, z as SUBAGENT_TARGET_KIND_SUBAGENT } from "./subagent-registry-state-C5HEp0cB.js";
26
+ import { d as retireSessionMcpRuntimeForSessionKey } from "./agent-bundle-mcp-runtime-CTPBK_s1.js";
27
+ import "./agent-bundle-mcp-tools-CpR0MDOO.js";
28
+ import { i as waitForAgentRun, t as isRecoverableAgentWaitError } from "./run-wait-Bv_zn1_5.js";
29
+ import { d as withSubagentOutcomeTiming, t as deleteSubagentSessionForCleanup } from "./subagent-session-cleanup-BC5wV2qQ.js";
30
+ import { n as removeInternalSessionEffectsTranscript } from "./internal-session-effects-8p4s6m-x.js";
31
+ import { t as emitSessionLifecycleEvent } from "./session-lifecycle-events-CrY3-yco.js";
32
+ import { n as buildAnnounceIdempotencyKey, t as buildAnnounceIdFromChildRun } from "./announce-idempotency-DV6_8Blm.js";
33
+ import { t as configureSubagentRegistrySteerRuntime } from "./subagent-registry-steer-runtime-9Vso0zzU.js";
34
+ import fs, { promises } from "node:fs";
35
+ import path from "node:path";
36
+ //#region src/shared/runtime-import.ts
37
+ function resolveRuntimeImportSpecifier(baseUrl, parts) {
38
+ const joined = parts.join("");
39
+ const safeJoined = toSafeImportPath(joined);
40
+ if (safeJoined !== joined) return safeJoined;
41
+ return new URL(joined, toSafeImportPath(baseUrl)).href;
42
+ }
43
+ async function importRuntimeModule(baseUrl, parts, importModule = (specifier) => import(specifier)) {
44
+ return await importModule(resolveRuntimeImportSpecifier(baseUrl, parts));
45
+ }
46
+ //#endregion
47
+ //#region src/agents/subagent-registry-completion.ts
48
+ const log$2 = createSubsystemLogger("agents/subagent-registry-completion");
49
+ function runOutcomesEqual(a, b) {
50
+ if (!a && !b) return true;
51
+ if (!a || !b) return false;
52
+ if (a.status !== b.status) return false;
53
+ if (a.status === "error" && b.status === "error") {
54
+ if ((a.error ?? "") !== (b.error ?? "")) return false;
55
+ }
56
+ if (!runOutcomeHasTiming(a) || !runOutcomeHasTiming(b)) return true;
57
+ return a.startedAt === b.startedAt && a.endedAt === b.endedAt && a.elapsedMs === b.elapsedMs;
58
+ }
59
+ function runOutcomeHasTiming(outcome) {
60
+ return Number.isFinite(outcome?.startedAt) || Number.isFinite(outcome?.endedAt) || Number.isFinite(outcome?.elapsedMs);
61
+ }
62
+ function shouldUpdateRunOutcome(current, next) {
63
+ return !runOutcomesEqual(current, next) || !runOutcomeHasTiming(current) && runOutcomeHasTiming(next);
64
+ }
65
+ function resolveLifecycleOutcomeFromRunOutcome(outcome) {
66
+ if (outcome?.status === "error") return SUBAGENT_ENDED_OUTCOME_ERROR;
67
+ if (outcome?.status === "timeout") return SUBAGENT_ENDED_OUTCOME_TIMEOUT;
68
+ return "ok";
69
+ }
70
+ async function emitSubagentEndedHookOnce(params) {
71
+ const runId = params.entry.runId.trim();
72
+ if (!runId) return false;
73
+ if (params.entry.endedHookEmittedAt) return false;
74
+ if (params.inFlightRunIds.has(runId)) return false;
75
+ params.inFlightRunIds.add(runId);
76
+ try {
77
+ const hookRunner = getGlobalHookRunner();
78
+ if (!hookRunner) return false;
79
+ if (hookRunner?.hasHooks("subagent_ended")) await hookRunner.runSubagentEnded({
80
+ targetSessionKey: params.entry.childSessionKey,
81
+ targetKind: SUBAGENT_TARGET_KIND_SUBAGENT,
82
+ reason: params.reason,
83
+ sendFarewell: params.sendFarewell,
84
+ accountId: params.accountId,
85
+ runId: params.entry.runId,
86
+ endedAt: params.entry.endedAt,
87
+ outcome: params.outcome,
88
+ error: params.error
89
+ }, {
90
+ runId: params.entry.runId,
91
+ childSessionKey: params.entry.childSessionKey,
92
+ requesterSessionKey: params.entry.requesterSessionKey
93
+ });
94
+ params.entry.endedHookEmittedAt = Date.now();
95
+ params.persist();
96
+ return true;
97
+ } catch (err) {
98
+ log$2.warn(`failed to emit subagent_ended hook for run ${runId}: ${err instanceof Error ? err.message : String(err)}`);
99
+ return false;
100
+ } finally {
101
+ params.inFlightRunIds.delete(runId);
102
+ }
103
+ }
104
+ //#endregion
105
+ //#region src/agents/subagent-registry-helpers.ts
106
+ const MIN_ANNOUNCE_RETRY_DELAY_MS = 1e3;
107
+ const MAX_ANNOUNCE_RETRY_DELAY_MS = 8e3;
108
+ const ANNOUNCE_EXPIRY_MS = 5 * 6e4;
109
+ const ANNOUNCE_COMPLETION_HARD_EXPIRY_MS = 30 * 6e4;
110
+ const FROZEN_RESULT_TEXT_MAX_BYTES = 100 * 1024;
111
+ function capFrozenResultText(resultText) {
112
+ const trimmed = resultText.trim();
113
+ if (!trimmed) return "";
114
+ const totalBytes = Buffer.byteLength(trimmed, "utf8");
115
+ if (totalBytes <= FROZEN_RESULT_TEXT_MAX_BYTES) return trimmed;
116
+ const notice = `\n\n[truncated: frozen completion output exceeded ${Math.round(FROZEN_RESULT_TEXT_MAX_BYTES / 1024)}KB (${Math.round(totalBytes / 1024)}KB)]`;
117
+ const maxPayloadBytes = Math.max(0, FROZEN_RESULT_TEXT_MAX_BYTES - Buffer.byteLength(notice, "utf8"));
118
+ return `${Buffer.from(trimmed, "utf8").subarray(0, maxPayloadBytes).toString("utf8")}${notice}`;
119
+ }
120
+ function resolveAnnounceRetryDelayMs(retryCount) {
121
+ const baseDelay = MIN_ANNOUNCE_RETRY_DELAY_MS * 2 ** Math.max(0, Math.max(0, Math.min(retryCount, 10)) - 1);
122
+ return Math.min(baseDelay, MAX_ANNOUNCE_RETRY_DELAY_MS);
123
+ }
124
+ function formatAnnounceGiveUpLogField(value) {
125
+ const normalized = value.replace(/\s+/g, " ").trim();
126
+ return JSON.stringify(normalized.length > 2e3 ? `${normalized.slice(0, 2e3)}…` : normalized);
127
+ }
128
+ function logAnnounceGiveUp(entry, reason) {
129
+ const retryCount = getDeliveryAttemptCount(entry);
130
+ const endedAgoMs = typeof entry.endedAt === "number" ? Math.max(0, Date.now() - entry.endedAt) : void 0;
131
+ const endedAgoLabel = endedAgoMs != null ? `${Math.round(endedAgoMs / 1e3)}s` : "n/a";
132
+ const lastDeliveryError = getDeliveryLastError(entry);
133
+ const deliveryError = lastDeliveryError ? ` deliveryError=${formatAnnounceGiveUpLogField(lastDeliveryError)}` : "";
134
+ defaultRuntime.log(`[warn] Subagent announce give up (${reason}) run=${entry.runId} child=${entry.childSessionKey} requester=${entry.requesterSessionKey} retries=${retryCount} endedAgo=${endedAgoLabel}${deliveryError}`);
135
+ }
136
+ function findSessionEntryByKey$1(store, sessionKey) {
137
+ const direct = store[sessionKey];
138
+ if (direct) return direct;
139
+ const normalized = normalizeLowercaseStringOrEmpty(sessionKey);
140
+ for (const [key, entry] of Object.entries(store)) if (normalizeLowercaseStringOrEmpty(key) === normalized) return entry;
141
+ }
142
+ async function persistSubagentSessionTiming(entry) {
143
+ const childSessionKey = entry.childSessionKey?.trim();
144
+ if (!childSessionKey) return;
145
+ const cfg = getRuntimeConfig();
146
+ const agentId = resolveAgentIdFromSessionKey(childSessionKey);
147
+ const storePath = resolveStorePath(cfg.session?.store, { agentId });
148
+ const startedAt = getSubagentSessionStartedAt(entry);
149
+ const endedAt = typeof entry.endedAt === "number" && Number.isFinite(entry.endedAt) ? entry.endedAt : void 0;
150
+ const runtimeMs = endedAt !== void 0 ? getSubagentSessionRuntimeMs(entry, endedAt) : getSubagentSessionRuntimeMs(entry);
151
+ const status = resolveSubagentSessionStatus(entry);
152
+ await updateSessionStore(storePath, (store) => {
153
+ const sessionEntry = findSessionEntryByKey$1(store, childSessionKey);
154
+ if (!sessionEntry) return;
155
+ if (typeof startedAt === "number" && Number.isFinite(startedAt)) sessionEntry.startedAt = startedAt;
156
+ else delete sessionEntry.startedAt;
157
+ if (typeof endedAt === "number" && Number.isFinite(endedAt)) sessionEntry.endedAt = endedAt;
158
+ else delete sessionEntry.endedAt;
159
+ if (typeof runtimeMs === "number" && Number.isFinite(runtimeMs)) sessionEntry.runtimeMs = runtimeMs;
160
+ else delete sessionEntry.runtimeMs;
161
+ if (status) sessionEntry.status = status;
162
+ else delete sessionEntry.status;
163
+ });
164
+ }
165
+ function resolveSubagentRunOrphanReason(params) {
166
+ const childSessionKey = params.entry.childSessionKey?.trim();
167
+ if (!childSessionKey) return "missing-session-entry";
168
+ try {
169
+ const cfg = getRuntimeConfig();
170
+ const agentId = resolveAgentIdFromSessionKey(childSessionKey);
171
+ const storePath = resolveStorePath(cfg.session?.store, { agentId });
172
+ let store = params.storeCache?.get(storePath);
173
+ if (!store) {
174
+ store = loadSessionStore(storePath);
175
+ params.storeCache?.set(storePath, store);
176
+ }
177
+ const sessionEntry = findSessionEntryByKey$1(store, childSessionKey);
178
+ if (!sessionEntry) return "missing-session-entry";
179
+ if (typeof sessionEntry.sessionId !== "string" || !sessionEntry.sessionId.trim()) return "missing-session-id";
180
+ if (params.includeStaleUnended === true && sessionEntry.abortedLastRun !== true && isStaleUnendedSubagentRun(params.entry, params.now)) return "stale-unended-run";
181
+ return null;
182
+ } catch {
183
+ return null;
184
+ }
185
+ }
186
+ function isResolvedChildPath(params) {
187
+ const rootWithSep = params.rootPath.endsWith(path.sep) ? params.rootPath : `${params.rootPath}${path.sep}`;
188
+ return params.childPath.startsWith(rootWithSep);
189
+ }
190
+ async function safeRemoveAttachmentsDir(entry) {
191
+ if (!entry.attachmentsDir || !entry.attachmentsRootDir) return;
192
+ const resolveReal = async (targetPath) => {
193
+ try {
194
+ return await promises.realpath(targetPath);
195
+ } catch (err) {
196
+ if (err?.code === "ENOENT") return null;
197
+ throw err;
198
+ }
199
+ };
200
+ try {
201
+ const [rootReal, dirReal] = await Promise.all([resolveReal(entry.attachmentsRootDir), resolveReal(entry.attachmentsDir)]);
202
+ if (!dirReal) return;
203
+ const rootBase = rootReal ?? path.resolve(entry.attachmentsRootDir);
204
+ const dirBase = dirReal;
205
+ if (!isResolvedChildPath({
206
+ childPath: dirBase,
207
+ rootPath: rootBase
208
+ })) return;
209
+ await promises.rm(dirBase, {
210
+ recursive: true,
211
+ force: true
212
+ });
213
+ } catch {}
214
+ }
215
+ function safeRemoveAttachmentsDirSync(entry) {
216
+ if (!entry.attachmentsDir || !entry.attachmentsRootDir) return;
217
+ const resolveReal = (targetPath) => {
218
+ try {
219
+ return fs.realpathSync.native(targetPath);
220
+ } catch (err) {
221
+ if (err?.code === "ENOENT") return null;
222
+ throw err;
223
+ }
224
+ };
225
+ try {
226
+ const rootReal = resolveReal(entry.attachmentsRootDir);
227
+ const dirReal = resolveReal(entry.attachmentsDir);
228
+ if (!dirReal) return;
229
+ if (!isResolvedChildPath({
230
+ childPath: dirReal,
231
+ rootPath: rootReal ?? path.resolve(entry.attachmentsRootDir)
232
+ })) return;
233
+ fs.rmSync(dirReal, {
234
+ recursive: true,
235
+ force: true
236
+ });
237
+ } catch {}
238
+ }
239
+ function reconcileOrphanedRun(params) {
240
+ const now = Date.now();
241
+ let changed = false;
242
+ if (typeof params.entry.endedAt !== "number") {
243
+ params.entry.endedAt = now;
244
+ changed = true;
245
+ }
246
+ const orphanOutcome = withSubagentOutcomeTiming({
247
+ status: "error",
248
+ error: `orphaned subagent run (${params.reason})`
249
+ }, {
250
+ startedAt: params.entry.startedAt,
251
+ endedAt: params.entry.endedAt
252
+ });
253
+ if (shouldUpdateRunOutcome(params.entry.outcome, orphanOutcome)) {
254
+ params.entry.outcome = orphanOutcome;
255
+ changed = true;
256
+ }
257
+ if (params.entry.endedReason !== "subagent-error") {
258
+ params.entry.endedReason = SUBAGENT_ENDED_REASON_ERROR;
259
+ changed = true;
260
+ }
261
+ if (params.entry.cleanupHandled !== true) {
262
+ params.entry.cleanupHandled = true;
263
+ changed = true;
264
+ }
265
+ if (typeof params.entry.cleanupCompletedAt !== "number") {
266
+ params.entry.cleanupCompletedAt = now;
267
+ changed = true;
268
+ }
269
+ if (params.entry.cleanup === "delete" || !params.entry.retainAttachmentsOnKeep) safeRemoveAttachmentsDirSync(params.entry);
270
+ const removed = params.runs.delete(params.runId);
271
+ params.resumedRuns.delete(params.runId);
272
+ if (!removed && !changed) return false;
273
+ defaultRuntime.log(`[warn] Subagent orphan run pruned source=${params.source} run=${params.runId} child=${params.entry.childSessionKey} reason=${params.reason}`);
274
+ return true;
275
+ }
276
+ function reconcileOrphanedRestoredRuns(params) {
277
+ const storeCache = /* @__PURE__ */ new Map();
278
+ const now = Date.now();
279
+ let changed = false;
280
+ for (const [runId, entry] of params.runs.entries()) {
281
+ const orphanReason = resolveSubagentRunOrphanReason({
282
+ entry,
283
+ storeCache,
284
+ includeStaleUnended: true,
285
+ now
286
+ });
287
+ if (!orphanReason) continue;
288
+ if (reconcileOrphanedRun({
289
+ runId,
290
+ entry,
291
+ reason: orphanReason,
292
+ source: "restore",
293
+ runs: params.runs,
294
+ resumedRuns: params.resumedRuns
295
+ })) changed = true;
296
+ }
297
+ return changed;
298
+ }
299
+ function resolveArchiveAfterMs(cfg) {
300
+ const minutes = (cfg ?? getRuntimeConfig()).agents?.defaults?.subagents?.archiveAfterMinutes ?? 60;
301
+ if (!Number.isFinite(minutes) || minutes < 0) return;
302
+ if (minutes === 0) return;
303
+ return Math.max(1, Math.floor(minutes)) * 6e4;
304
+ }
305
+ //#endregion
306
+ //#region src/agents/subagent-registry-cleanup.ts
307
+ function resolveCleanupCompletionReason(entry) {
308
+ return entry.endedReason ?? "subagent-complete";
309
+ }
310
+ function resolveEndedAgoMs(entry, now) {
311
+ return typeof entry.endedAt === "number" ? now - entry.endedAt : 0;
312
+ }
313
+ function resolveDeferredCleanupDecision(params) {
314
+ const endedAgo = resolveEndedAgoMs(params.entry, params.now);
315
+ const isCompletionMessageFlow = params.entry.expectsCompletionMessage === true;
316
+ const completionHardExpiryExceeded = isCompletionMessageFlow && endedAgo > params.announceCompletionHardExpiryMs;
317
+ if (isCompletionMessageFlow && params.activeDescendantRuns > 0) {
318
+ if (completionHardExpiryExceeded) return {
319
+ kind: "give-up",
320
+ reason: "expiry"
321
+ };
322
+ return {
323
+ kind: "defer-descendants",
324
+ delayMs: params.deferDescendantDelayMs
325
+ };
326
+ }
327
+ const retryCount = getDeliveryAttemptCount(params.entry) + 1;
328
+ const expiryExceeded = isCompletionMessageFlow ? completionHardExpiryExceeded : endedAgo > params.announceExpiryMs;
329
+ if (retryCount >= params.maxAnnounceRetryCount || expiryExceeded) return {
330
+ kind: "give-up",
331
+ reason: retryCount >= params.maxAnnounceRetryCount ? "retry-limit" : "expiry",
332
+ retryCount
333
+ };
334
+ return {
335
+ kind: "retry",
336
+ retryCount,
337
+ resumeDelayMs: params.resolveAnnounceRetryDelayMs(retryCount)
338
+ };
339
+ }
340
+ //#endregion
341
+ //#region src/agents/subagent-registry-lifecycle.ts
342
+ const DELIVERY_MIRROR_HISTORY_MAX_CHARS = 128 * 1024;
343
+ const browserCleanupLoader$1 = createLazyImportLoader(() => import("./browser-lifecycle-cleanup-Dii5CgXr.js"));
344
+ async function loadCleanupBrowserSessionsForLifecycleEnd$1() {
345
+ return (await browserCleanupLoader$1.load()).cleanupBrowserSessionsForLifecycleEnd;
346
+ }
347
+ function resolveSubagentRunDeadlineMs$1(entry, observedStartedAt) {
348
+ const timeoutSeconds = entry.runTimeoutSeconds;
349
+ if (typeof timeoutSeconds !== "number" || !Number.isFinite(timeoutSeconds) || timeoutSeconds <= 0) return;
350
+ const startedAt = typeof observedStartedAt === "number" && Number.isFinite(observedStartedAt) ? observedStartedAt : typeof entry.startedAt === "number" && Number.isFinite(entry.startedAt) ? entry.startedAt : entry.createdAt;
351
+ return Number.isFinite(startedAt) ? startedAt + Math.floor(timeoutSeconds * 1e3) : void 0;
352
+ }
353
+ function shouldPreservePublishedExplicitRunTimeout(params) {
354
+ if (typeof params.entry.runTimeoutSeconds !== "number" || !Number.isFinite(params.entry.runTimeoutSeconds) || params.entry.runTimeoutSeconds <= 0 || params.entry.outcome?.status !== "timeout" || typeof params.entry.endedAt !== "number") return false;
355
+ const deadlineMs = resolveSubagentRunDeadlineMs$1(params.entry);
356
+ if (deadlineMs === void 0 || params.entry.endedAt < deadlineMs) return false;
357
+ if (params.entry.cleanupHandled || typeof params.entry.cleanupCompletedAt === "number" || typeof params.entry.endedHookEmittedAt === "number" || params.entry.delivery?.status === "delivered" || typeof params.entry.delivery?.announcedAt === "number") return true;
358
+ return false;
359
+ }
360
+ function resolveExpiredExplicitRunDeadlineMs(params) {
361
+ const deadlineMs = resolveSubagentRunDeadlineMs$1(params.entry, params.observedStartedAt);
362
+ return deadlineMs !== void 0 && params.nextEndedAt > deadlineMs ? deadlineMs : void 0;
363
+ }
364
+ function createSubagentRegistryLifecycleController(params) {
365
+ const scheduledResumeTimers = /* @__PURE__ */ new Set();
366
+ const scheduleResumeSubagentRun = (runId, entry, delayMs) => {
367
+ const timer = setTimeout(() => {
368
+ scheduledResumeTimers.delete(timer);
369
+ if (params.runs.get(runId) !== entry) return;
370
+ params.resumeSubagentRun(runId);
371
+ }, delayMs);
372
+ timer.unref?.();
373
+ scheduledResumeTimers.add(timer);
374
+ };
375
+ const clearScheduledResumeTimers = () => {
376
+ for (const timer of scheduledResumeTimers) clearTimeout(timer);
377
+ scheduledResumeTimers.clear();
378
+ };
379
+ const maskRunId = (runId) => {
380
+ const trimmed = runId.trim();
381
+ if (!trimmed) return "unknown";
382
+ if (trimmed.length <= 8) return "***";
383
+ return `${trimmed.slice(0, 4)}…${trimmed.slice(-4)}`;
384
+ };
385
+ const maskSessionKey = (sessionKey) => {
386
+ const trimmed = sessionKey.trim();
387
+ if (!trimmed) return "unknown";
388
+ return `${trimmed.split(":").slice(0, 2).join(":") || "session"}:…`;
389
+ };
390
+ const buildSafeLifecycleErrorMeta = (err) => {
391
+ const message = formatErrorMessage(err);
392
+ const name = readErrorName(err);
393
+ return name ? {
394
+ name,
395
+ message
396
+ } : { message };
397
+ };
398
+ const formatAnnounceDeliveryError = (delivery) => {
399
+ const errors = [delivery.error, ...(delivery.phases ?? []).map((phase) => phase.error ? `${phase.phase}: ${phase.error}` : void 0)].map((value) => value?.trim()).filter((value) => Boolean(value));
400
+ return errors.length > 0 ? uniqueStrings(errors).join("; ") : `delivery path ${delivery.path} did not complete`;
401
+ };
402
+ const recordAnnounceDeliveryResult = (entry, delivery) => {
403
+ const deliveryState = ensureDeliveryState(entry);
404
+ if (typeof delivery.enqueuedAt === "number") deliveryState.enqueuedAt ??= delivery.enqueuedAt;
405
+ if (delivery.delivered) {
406
+ deliveryState.deliveredAt = typeof delivery.deliveredAt === "number" ? delivery.deliveredAt : Date.now();
407
+ deliveryState.lastDropReason = void 0;
408
+ }
409
+ };
410
+ const hasPriorRequesterDeliveryMirror = async (entry) => {
411
+ const expectedText = extractTextFromChatContent(ensureCompletionState(entry).resultText, { joinWith: "" });
412
+ if (entry.expectsCompletionMessage !== true || expectedText == null) return false;
413
+ const mirrorNotBefore = entry.startedAt ?? entry.createdAt;
414
+ const mirrorNotAfter = Date.now() + 3e4;
415
+ const expectedIdempotencyKey = buildAnnounceIdempotencyKey(buildAnnounceIdFromChildRun({
416
+ childSessionKey: entry.childSessionKey,
417
+ childRunId: entry.runId
418
+ }));
419
+ const isExpectedMirrorIdempotencyKey = (value) => typeof value === "string" && (value === expectedIdempotencyKey || value.startsWith(`${expectedIdempotencyKey}:internal-source-reply:`) || value.startsWith(`${expectedIdempotencyKey}:message-tool:internal-source-reply:`) || value.startsWith(`${entry.runId}:message-tool:`) || value.startsWith(`${entry.runId}:internal-source-reply:`));
420
+ try {
421
+ const mirror = (await params.callGateway({
422
+ method: "chat.history",
423
+ params: {
424
+ sessionKey: entry.requesterSessionKey,
425
+ limit: 25,
426
+ maxChars: DELIVERY_MIRROR_HISTORY_MAX_CHARS
427
+ },
428
+ timeoutMs: 5e3
429
+ })).messages?.find((message) => {
430
+ if (!message || typeof message !== "object") return false;
431
+ const record = message;
432
+ const timestamp = record.timestamp;
433
+ if (typeof timestamp !== "number" || !Number.isFinite(timestamp) || timestamp < mirrorNotBefore || timestamp > mirrorNotAfter || !isExpectedMirrorIdempotencyKey(record.idempotencyKey)) return false;
434
+ const text = extractTextFromChatContent(record.content, { joinWith: "" });
435
+ return record.role === "assistant" && record.provider === "fengming" && record.model === "delivery-mirror" && text === expectedText;
436
+ });
437
+ if (mirror) ensureDeliveryState(entry).deliveredAt = mirror.timestamp;
438
+ return Boolean(mirror);
439
+ } catch {
440
+ return false;
441
+ }
442
+ };
443
+ const safeSetSubagentTaskDeliveryStatus = (args) => {
444
+ try {
445
+ setDetachedTaskDeliveryStatusByRunId({
446
+ runId: args.runId,
447
+ runtime: "subagent",
448
+ sessionKey: args.childSessionKey,
449
+ deliveryStatus: args.deliveryStatus,
450
+ error: args.deliveryStatus === "failed" ? args.deliveryError : void 0
451
+ });
452
+ } catch (err) {
453
+ params.warn("failed to update subagent background task delivery state", {
454
+ error: buildSafeLifecycleErrorMeta(err),
455
+ runId: maskRunId(args.runId),
456
+ childSessionKey: maskSessionKey(args.childSessionKey),
457
+ deliveryStatus: args.deliveryStatus
458
+ });
459
+ }
460
+ };
461
+ const safeFinalizeSubagentTaskRun = (args) => {
462
+ const endedAt = args.entry.endedAt ?? Date.now();
463
+ const lastEventAt = endedAt;
464
+ try {
465
+ if (args.outcome.status === "ok") {
466
+ const completion = ensureCompletionState(args.entry);
467
+ const terminalResult = args.entry.expectsCompletionMessage === true ? resolveRequiredCompletionTerminalResult(completion.resultText) : {};
468
+ completeTaskRunByRunId({
469
+ runId: args.entry.runId,
470
+ runtime: "subagent",
471
+ sessionKey: args.entry.childSessionKey,
472
+ endedAt,
473
+ lastEventAt,
474
+ progressSummary: completion.resultText ?? void 0,
475
+ terminalSummary: terminalResult.terminalSummary ?? null,
476
+ terminalOutcome: terminalResult.terminalOutcome
477
+ });
478
+ return;
479
+ }
480
+ failTaskRunByRunId({
481
+ runId: args.entry.runId,
482
+ runtime: "subagent",
483
+ sessionKey: args.entry.childSessionKey,
484
+ status: args.outcome.status === "timeout" ? "timed_out" : "failed",
485
+ endedAt,
486
+ lastEventAt,
487
+ error: args.outcome.status === "error" ? args.outcome.error : void 0,
488
+ progressSummary: ensureCompletionState(args.entry).resultText ?? void 0,
489
+ terminalSummary: null
490
+ });
491
+ } catch (err) {
492
+ params.warn("failed to finalize subagent background task state", {
493
+ error: buildSafeLifecycleErrorMeta(err),
494
+ runId: maskRunId(args.entry.runId),
495
+ childSessionKey: maskSessionKey(args.entry.childSessionKey),
496
+ outcomeStatus: args.outcome.status
497
+ });
498
+ }
499
+ };
500
+ const safeMarkRequiredCompletionDeliveryBlocked = (args) => {
501
+ if (args.entry.expectsCompletionMessage !== true || args.entry.outcome?.status !== "ok") return;
502
+ const endedAt = args.entry.endedAt ?? Date.now();
503
+ const terminalResult = resolveRequiredCompletionDeliveryFailureTerminalResult(args.reason);
504
+ try {
505
+ completeTaskRunByRunId({
506
+ runId: args.entry.runId,
507
+ runtime: "subagent",
508
+ sessionKey: args.entry.childSessionKey,
509
+ endedAt,
510
+ lastEventAt: Date.now(),
511
+ progressSummary: ensureCompletionState(args.entry).resultText ?? void 0,
512
+ terminalSummary: terminalResult.terminalSummary,
513
+ terminalOutcome: terminalResult.terminalOutcome
514
+ });
515
+ } catch (err) {
516
+ params.warn("failed to mark subagent completion delivery blocked", {
517
+ error: buildSafeLifecycleErrorMeta(err),
518
+ runId: maskRunId(args.entry.runId),
519
+ childSessionKey: maskSessionKey(args.entry.childSessionKey)
520
+ });
521
+ }
522
+ };
523
+ const freezeRunResultAtCompletion = async (entry, outcome) => {
524
+ const completion = ensureCompletionState(entry);
525
+ if (completion.resultText !== void 0) return false;
526
+ if (outcome.status === "error") {
527
+ completion.resultText = null;
528
+ completion.capturedAt = Date.now();
529
+ return true;
530
+ }
531
+ try {
532
+ const captured = await params.captureSubagentCompletionReply(entry.childSessionKey, {
533
+ waitForReply: entry.expectsCompletionMessage === true,
534
+ outcome,
535
+ sessionFile: entry.execution?.transcriptFile
536
+ });
537
+ completion.resultText = captured?.trim() ? capFrozenResultText(captured) : null;
538
+ } catch {
539
+ completion.resultText = null;
540
+ }
541
+ completion.capturedAt = Date.now();
542
+ return true;
543
+ };
544
+ const listPendingCompletionRunsForSession = (sessionKey) => {
545
+ const key = sessionKey.trim();
546
+ if (!key) return [];
547
+ const out = [];
548
+ for (const entry of params.runs.values()) {
549
+ if (entry.childSessionKey !== key) continue;
550
+ if (entry.expectsCompletionMessage !== true) continue;
551
+ if (typeof entry.endedAt !== "number") continue;
552
+ if (typeof entry.cleanupCompletedAt === "number") continue;
553
+ out.push(entry);
554
+ }
555
+ return out;
556
+ };
557
+ const refreshFrozenResultFromSession = async (sessionKey) => {
558
+ const candidates = listPendingCompletionRunsForSession(sessionKey).filter((entry) => entry.outcome?.status !== "error");
559
+ if (candidates.length === 0) return false;
560
+ let captured;
561
+ try {
562
+ captured = await params.captureSubagentCompletionReply(sessionKey);
563
+ } catch {
564
+ return false;
565
+ }
566
+ const trimmed = captured?.trim();
567
+ if (!trimmed || isSilentReplyText(trimmed, "NO_REPLY")) return false;
568
+ const nextFrozen = capFrozenResultText(trimmed);
569
+ const capturedAt = Date.now();
570
+ let changed = false;
571
+ for (const entry of candidates) {
572
+ const completion = ensureCompletionState(entry);
573
+ if (completion.resultText === nextFrozen) continue;
574
+ completion.resultText = nextFrozen;
575
+ completion.capturedAt = capturedAt;
576
+ const delivery = entry.delivery;
577
+ if (delivery?.payload) delivery.payload = {
578
+ ...delivery.payload,
579
+ frozenResultText: nextFrozen
580
+ };
581
+ changed = true;
582
+ }
583
+ if (changed) params.persist();
584
+ return changed;
585
+ };
586
+ const emitCompletionEndedHookIfNeeded = async (entry, reason) => {
587
+ if (entry.expectsCompletionMessage === true && params.shouldEmitEndedHookForRun({
588
+ entry,
589
+ reason
590
+ })) await params.emitSubagentEndedHookForRun({
591
+ entry,
592
+ reason,
593
+ sendFarewell: true
594
+ });
595
+ };
596
+ const clearPendingFinalDelivery = (entry) => {
597
+ const delivery = ensureDeliveryState(entry);
598
+ delivery.payload = void 0;
599
+ delivery.createdAt = void 0;
600
+ delivery.lastAttemptAt = void 0;
601
+ delivery.attemptCount = void 0;
602
+ delivery.lastError = void 0;
603
+ delivery.suspendedAt = void 0;
604
+ delivery.suspendedReason = void 0;
605
+ if (delivery.status !== "delivered" && delivery.status !== "failed") clearDeliveryState(entry);
606
+ };
607
+ const loadPendingFinalDeliveryPayload = (entry) => {
608
+ return {
609
+ requesterSessionKey: entry.delivery?.payload?.requesterSessionKey ?? entry.requesterSessionKey,
610
+ requesterOrigin: entry.delivery?.payload?.requesterOrigin ?? entry.requesterOrigin,
611
+ requesterDisplayKey: entry.delivery?.payload?.requesterDisplayKey ?? entry.requesterDisplayKey,
612
+ childSessionKey: entry.delivery?.payload?.childSessionKey ?? entry.childSessionKey,
613
+ childRunId: entry.delivery?.payload?.childRunId ?? entry.runId,
614
+ task: entry.delivery?.payload?.task ?? entry.task,
615
+ label: entry.delivery?.payload?.label ?? entry.label,
616
+ startedAt: entry.delivery?.payload?.startedAt ?? entry.startedAt,
617
+ endedAt: entry.delivery?.payload?.endedAt ?? entry.endedAt,
618
+ outcome: entry.delivery?.payload?.outcome ?? entry.outcome,
619
+ expectsCompletionMessage: entry.delivery?.payload?.expectsCompletionMessage ?? entry.expectsCompletionMessage,
620
+ spawnMode: entry.delivery?.payload?.spawnMode ?? entry.spawnMode,
621
+ frozenResultText: entry.delivery?.payload?.frozenResultText ?? entry.completion?.resultText,
622
+ fallbackFrozenResultText: entry.delivery?.payload?.fallbackFrozenResultText ?? entry.completion?.fallbackResultText,
623
+ wakeOnDescendantSettle: entry.delivery?.payload?.wakeOnDescendantSettle ?? entry.wakeOnDescendantSettle
624
+ };
625
+ };
626
+ const markPendingFinalDelivery = (args) => {
627
+ const now = Date.now();
628
+ const payload = loadPendingFinalDeliveryPayload(args.entry);
629
+ const delivery = ensureDeliveryState(args.entry);
630
+ delivery.status = "pending";
631
+ delivery.createdAt ??= now;
632
+ delivery.lastAttemptAt = now;
633
+ delivery.attemptCount = (delivery.attemptCount ?? 0) + 1;
634
+ delivery.lastError = args.error ?? null;
635
+ delivery.payload = payload;
636
+ };
637
+ const refreshPendingFinalDeliveryPayload = (entry) => {
638
+ const delivery = entry.delivery;
639
+ if (!delivery?.payload || delivery.status === "delivered" || typeof delivery.announcedAt === "number") return false;
640
+ delivery.payload = {
641
+ ...delivery.payload,
642
+ startedAt: entry.startedAt,
643
+ endedAt: entry.endedAt,
644
+ outcome: entry.outcome,
645
+ frozenResultText: entry.completion?.resultText,
646
+ fallbackFrozenResultText: entry.completion?.fallbackResultText
647
+ };
648
+ return true;
649
+ };
650
+ const suspendPendingFinalDelivery = (args) => {
651
+ markPendingFinalDelivery({
652
+ entry: args.entry,
653
+ error: args.error ?? getDeliveryLastError(args.entry) ?? args.reason
654
+ });
655
+ const now = Date.now();
656
+ const delivery = ensureDeliveryState(args.entry);
657
+ delivery.status = "suspended";
658
+ delivery.suspendedAt ??= now;
659
+ delivery.suspendedReason = args.reason;
660
+ args.entry.cleanupHandled = false;
661
+ args.entry.wakeOnDescendantSettle = void 0;
662
+ const completion = ensureCompletionState(args.entry);
663
+ completion.fallbackResultText = void 0;
664
+ completion.fallbackCapturedAt = void 0;
665
+ params.resumedRuns.delete(args.runId);
666
+ safeSetSubagentTaskDeliveryStatus({
667
+ runId: args.runId,
668
+ childSessionKey: args.entry.childSessionKey,
669
+ deliveryStatus: "failed",
670
+ deliveryError: getDeliveryLastError(args.entry) ?? args.reason
671
+ });
672
+ safeMarkRequiredCompletionDeliveryBlocked({
673
+ entry: args.entry,
674
+ reason: getDeliveryLastError(args.entry) ?? args.reason
675
+ });
676
+ logAnnounceGiveUp(args.entry, args.reason);
677
+ params.persist();
678
+ };
679
+ const shouldSuspendPendingFinalDelivery = (entry) => entry.expectsCompletionMessage === true && entry.cleanup === "keep" && entry.endedReason === "subagent-complete" && entry.outcome?.status === "ok";
680
+ const finalizeResumedAnnounceGiveUp = async (giveUpParams) => {
681
+ if (shouldSuspendPendingFinalDelivery(giveUpParams.entry)) {
682
+ suspendPendingFinalDelivery({
683
+ runId: giveUpParams.runId,
684
+ entry: giveUpParams.entry,
685
+ reason: giveUpParams.reason,
686
+ error: getDeliveryLastError(giveUpParams.entry)
687
+ });
688
+ return;
689
+ }
690
+ const deliveryError = getDeliveryLastError(giveUpParams.entry) ?? giveUpParams.reason;
691
+ clearPendingFinalDelivery(giveUpParams.entry);
692
+ const failedDelivery = ensureDeliveryState(giveUpParams.entry);
693
+ failedDelivery.status = "failed";
694
+ failedDelivery.lastError = deliveryError;
695
+ safeSetSubagentTaskDeliveryStatus({
696
+ runId: giveUpParams.runId,
697
+ childSessionKey: giveUpParams.entry.childSessionKey,
698
+ deliveryStatus: "failed",
699
+ deliveryError
700
+ });
701
+ safeMarkRequiredCompletionDeliveryBlocked({
702
+ entry: giveUpParams.entry,
703
+ reason: deliveryError
704
+ });
705
+ giveUpParams.entry.wakeOnDescendantSettle = void 0;
706
+ const completion = ensureCompletionState(giveUpParams.entry);
707
+ completion.fallbackResultText = void 0;
708
+ completion.fallbackCapturedAt = void 0;
709
+ if (giveUpParams.entry.cleanup === "delete" || !giveUpParams.entry.retainAttachmentsOnKeep) await safeRemoveAttachmentsDir(giveUpParams.entry);
710
+ const completionReason = resolveCleanupCompletionReason(giveUpParams.entry);
711
+ logAnnounceGiveUp(giveUpParams.entry, giveUpParams.reason);
712
+ completeCleanupBookkeeping({
713
+ runId: giveUpParams.runId,
714
+ entry: giveUpParams.entry,
715
+ cleanup: giveUpParams.entry.cleanup,
716
+ completedAt: Date.now()
717
+ });
718
+ await emitCompletionEndedHookIfNeeded(giveUpParams.entry, completionReason);
719
+ };
720
+ const beginSubagentCleanup = (runId) => {
721
+ const entry = params.runs.get(runId);
722
+ if (!entry) return false;
723
+ if (entry.cleanupCompletedAt || entry.cleanupHandled) return false;
724
+ entry.cleanupHandled = true;
725
+ params.persist();
726
+ return true;
727
+ };
728
+ const retryDeferredCompletedAnnounces = (excludeRunId) => {
729
+ const now = Date.now();
730
+ for (const [runId, entry] of params.runs.entries()) {
731
+ if (excludeRunId && runId === excludeRunId) continue;
732
+ if (typeof entry.endedAt !== "number") continue;
733
+ if (entry.cleanupCompletedAt || entry.cleanupHandled) continue;
734
+ if (isDeliverySuspended(entry)) continue;
735
+ if (params.suppressAnnounceForSteerRestart(entry)) continue;
736
+ const endedAgo = now - (entry.endedAt ?? now);
737
+ if (entry.expectsCompletionMessage !== true && endedAgo > 3e5) {
738
+ if (!beginSubagentCleanup(runId)) continue;
739
+ finalizeResumedAnnounceGiveUp({
740
+ runId,
741
+ entry,
742
+ reason: "expiry"
743
+ }).catch((error) => {
744
+ defaultRuntime.log(`[warn] Subagent expiry finalize failed during deferred retry for run ${runId}: ${String(error)}`);
745
+ const current = params.runs.get(runId);
746
+ if (!current || current.cleanupCompletedAt) return;
747
+ current.cleanupHandled = false;
748
+ params.persist();
749
+ });
750
+ continue;
751
+ }
752
+ params.resumedRuns.delete(runId);
753
+ params.resumeSubagentRun(runId);
754
+ }
755
+ };
756
+ const completeCleanupBookkeeping = (cleanupParams) => {
757
+ removeInternalSessionEffectsTranscript(cleanupParams.entry.execution?.transcriptFile);
758
+ if (cleanupParams.entry.spawnMode !== "session") retireSessionMcpRuntimeForSessionKey({
759
+ sessionKey: cleanupParams.entry.childSessionKey,
760
+ reason: "subagent-run-cleanup",
761
+ onError: (error, sessionId) => {
762
+ params.warn("failed to retire subagent bundle MCP runtime", {
763
+ error: buildSafeLifecycleErrorMeta(error),
764
+ sessionId,
765
+ runId: maskRunId(cleanupParams.runId),
766
+ childSessionKey: maskSessionKey(cleanupParams.entry.childSessionKey)
767
+ });
768
+ }
769
+ });
770
+ if (cleanupParams.cleanup === "delete") {
771
+ params.clearPendingLifecycleError(cleanupParams.runId);
772
+ params.notifyContextEngineSubagentEnded({
773
+ childSessionKey: cleanupParams.entry.childSessionKey,
774
+ reason: "deleted",
775
+ agentDir: cleanupParams.entry.agentDir,
776
+ workspaceDir: cleanupParams.entry.workspaceDir
777
+ });
778
+ params.runs.delete(cleanupParams.runId);
779
+ params.persist();
780
+ retryDeferredCompletedAnnounces(cleanupParams.runId);
781
+ return;
782
+ }
783
+ params.notifyContextEngineSubagentEnded({
784
+ childSessionKey: cleanupParams.entry.childSessionKey,
785
+ reason: "completed",
786
+ agentDir: cleanupParams.entry.agentDir,
787
+ workspaceDir: cleanupParams.entry.workspaceDir
788
+ });
789
+ cleanupParams.entry.cleanupCompletedAt = cleanupParams.completedAt;
790
+ params.persist();
791
+ retryDeferredCompletedAnnounces(cleanupParams.runId);
792
+ };
793
+ const retireRunModeBundleMcpRuntime = async (cleanupParams) => {
794
+ if (cleanupParams.entry.spawnMode === "session") return;
795
+ await retireSessionMcpRuntimeForSessionKey({
796
+ sessionKey: cleanupParams.entry.childSessionKey,
797
+ reason: cleanupParams.reason,
798
+ onError: (error, sessionId) => {
799
+ params.warn("failed to retire subagent bundle MCP runtime", {
800
+ error: buildSafeLifecycleErrorMeta(error),
801
+ sessionId,
802
+ runId: maskRunId(cleanupParams.runId),
803
+ childSessionKey: maskSessionKey(cleanupParams.entry.childSessionKey)
804
+ });
805
+ }
806
+ });
807
+ };
808
+ const finalizeSubagentCleanup = async (runId, cleanup, didAnnounce, options) => {
809
+ const entry = params.runs.get(runId);
810
+ if (!entry) return;
811
+ if (didAnnounce) {
812
+ if (!options?.skipAnnounce) {
813
+ const delivery = ensureDeliveryState(entry);
814
+ const deliveredAt = delivery.deliveredAt ?? Date.now();
815
+ delivery.status = "delivered";
816
+ delivery.deliveredAt = deliveredAt;
817
+ delivery.announcedAt = deliveredAt;
818
+ params.persist();
819
+ }
820
+ clearPendingFinalDelivery(entry);
821
+ const delivery = ensureDeliveryState(entry);
822
+ delivery.status = "delivered";
823
+ delivery.suspendedAt = void 0;
824
+ delivery.suspendedReason = void 0;
825
+ if (!options?.skipDeliveryStatus) safeSetSubagentTaskDeliveryStatus({
826
+ runId,
827
+ childSessionKey: entry.childSessionKey,
828
+ deliveryStatus: "delivered"
829
+ });
830
+ delivery.lastError = void 0;
831
+ delivery.lastDropReason = void 0;
832
+ entry.wakeOnDescendantSettle = void 0;
833
+ const completion = ensureCompletionState(entry);
834
+ completion.fallbackResultText = void 0;
835
+ completion.fallbackCapturedAt = void 0;
836
+ await emitCompletionEndedHookIfNeeded(entry, resolveCleanupCompletionReason(entry));
837
+ if (cleanup === "delete" || !entry.retainAttachmentsOnKeep) await safeRemoveAttachmentsDir(entry);
838
+ if (cleanup === "delete") {
839
+ completion.resultText = void 0;
840
+ completion.capturedAt = void 0;
841
+ }
842
+ completeCleanupBookkeeping({
843
+ runId,
844
+ entry,
845
+ cleanup,
846
+ completedAt: Date.now()
847
+ });
848
+ return;
849
+ }
850
+ const now = Date.now();
851
+ const deferredDecision = resolveDeferredCleanupDecision({
852
+ entry,
853
+ now,
854
+ activeDescendantRuns: Math.max(0, params.countPendingDescendantRuns(entry.childSessionKey)),
855
+ announceExpiryMs: ANNOUNCE_EXPIRY_MS,
856
+ announceCompletionHardExpiryMs: ANNOUNCE_COMPLETION_HARD_EXPIRY_MS,
857
+ maxAnnounceRetryCount: 3,
858
+ deferDescendantDelayMs: MIN_ANNOUNCE_RETRY_DELAY_MS,
859
+ resolveAnnounceRetryDelayMs
860
+ });
861
+ if (deferredDecision.kind === "defer-descendants") {
862
+ ensureDeliveryState(entry).lastAttemptAt = now;
863
+ entry.wakeOnDescendantSettle = true;
864
+ entry.cleanupHandled = false;
865
+ params.resumedRuns.delete(runId);
866
+ params.persist();
867
+ scheduleResumeSubagentRun(runId, entry, deferredDecision.delayMs);
868
+ return;
869
+ }
870
+ if (deferredDecision.kind === "give-up") {
871
+ if (shouldSuspendPendingFinalDelivery(entry)) {
872
+ suspendPendingFinalDelivery({
873
+ runId,
874
+ entry,
875
+ reason: deferredDecision.reason,
876
+ error: getDeliveryLastError(entry)
877
+ });
878
+ return;
879
+ }
880
+ const deliveryError = getDeliveryLastError(entry) ?? deferredDecision.reason;
881
+ clearPendingFinalDelivery(entry);
882
+ const failedDelivery = ensureDeliveryState(entry);
883
+ failedDelivery.status = "failed";
884
+ failedDelivery.lastError = deliveryError;
885
+ if (deferredDecision.retryCount != null) {
886
+ failedDelivery.attemptCount = deferredDecision.retryCount;
887
+ failedDelivery.lastAttemptAt = now;
888
+ }
889
+ safeSetSubagentTaskDeliveryStatus({
890
+ runId,
891
+ childSessionKey: entry.childSessionKey,
892
+ deliveryStatus: "failed",
893
+ deliveryError
894
+ });
895
+ safeMarkRequiredCompletionDeliveryBlocked({
896
+ entry,
897
+ reason: deliveryError
898
+ });
899
+ entry.wakeOnDescendantSettle = void 0;
900
+ const completion = ensureCompletionState(entry);
901
+ completion.fallbackResultText = void 0;
902
+ completion.fallbackCapturedAt = void 0;
903
+ if (cleanup === "delete" || !entry.retainAttachmentsOnKeep) await safeRemoveAttachmentsDir(entry);
904
+ const completionReason = resolveCleanupCompletionReason(entry);
905
+ logAnnounceGiveUp(entry, deferredDecision.reason);
906
+ completeCleanupBookkeeping({
907
+ runId,
908
+ entry,
909
+ cleanup,
910
+ completedAt: now
911
+ });
912
+ await emitCompletionEndedHookIfNeeded(entry, completionReason);
913
+ return;
914
+ }
915
+ markPendingFinalDelivery({
916
+ entry,
917
+ error: didAnnounce ? void 0 : "announce deferred or direct delivery failed"
918
+ });
919
+ entry.cleanupHandled = false;
920
+ params.resumedRuns.delete(runId);
921
+ params.persist();
922
+ if (deferredDecision.resumeDelayMs == null) return;
923
+ scheduleResumeSubagentRun(runId, entry, deferredDecision.resumeDelayMs);
924
+ };
925
+ const startSubagentAnnounceCleanupFlow = (runId, entry) => {
926
+ if (typeof entry.delivery?.announcedAt === "number" || entry.delivery?.status === "delivered") {
927
+ if (!beginSubagentCleanup(runId)) return false;
928
+ finalizeSubagentCleanup(runId, entry.cleanup, true, { skipAnnounce: true }).catch((err) => {
929
+ defaultRuntime.log(`[warn] subagent cleanup finalize failed (${runId}): ${String(err)}`);
930
+ const current = params.runs.get(runId);
931
+ if (!current || current.cleanupCompletedAt) return;
932
+ current.cleanupHandled = false;
933
+ params.persist();
934
+ });
935
+ return true;
936
+ }
937
+ if (!beginSubagentCleanup(runId)) return false;
938
+ if (entry.expectsCompletionMessage === false) {
939
+ (async () => {
940
+ if (entry.cleanup === "delete") await deleteSubagentSessionForCleanup({
941
+ callGateway: params.callGateway,
942
+ childSessionKey: entry.childSessionKey,
943
+ spawnMode: entry.spawnMode,
944
+ onError: (error) => params.warn("sessions.delete failed during subagent cleanup", {
945
+ error: buildSafeLifecycleErrorMeta(error),
946
+ runId: maskRunId(runId),
947
+ childSessionKey: maskSessionKey(entry.childSessionKey)
948
+ })
949
+ });
950
+ await finalizeSubagentCleanup(runId, entry.cleanup, true, {
951
+ skipAnnounce: true,
952
+ skipDeliveryStatus: true
953
+ });
954
+ })().catch((err) => {
955
+ defaultRuntime.log(`[warn] subagent cleanup finalize failed (${runId}): ${String(err)}`);
956
+ const current = params.runs.get(runId);
957
+ if (!current || current.cleanupCompletedAt) return;
958
+ current.cleanupHandled = false;
959
+ params.persist();
960
+ });
961
+ return true;
962
+ }
963
+ const pendingPayload = loadPendingFinalDeliveryPayload(entry);
964
+ const requesterOrigin = normalizeDeliveryContext(pendingPayload.requesterOrigin);
965
+ let latestDeliveryError = getDeliveryLastError(entry);
966
+ const finalizeAnnounceCleanup = async (didAnnounce) => {
967
+ const shouldCreditPriorDelivery = !didAnnounce && await hasPriorRequesterDeliveryMirror(entry);
968
+ if (shouldCreditPriorDelivery) latestDeliveryError = void 0;
969
+ if (!didAnnounce && latestDeliveryError) ensureDeliveryState(entry).lastError = latestDeliveryError;
970
+ finalizeSubagentCleanup(runId, entry.cleanup, didAnnounce || shouldCreditPriorDelivery).catch((err) => {
971
+ defaultRuntime.log(`[warn] subagent cleanup finalize failed (${runId}): ${String(err)}`);
972
+ const current = params.runs.get(runId);
973
+ if (!current || current.cleanupCompletedAt) return;
974
+ current.cleanupHandled = false;
975
+ params.persist();
976
+ });
977
+ };
978
+ params.runSubagentAnnounceFlow({
979
+ childSessionKey: pendingPayload.childSessionKey,
980
+ childRunId: pendingPayload.childRunId,
981
+ requesterSessionKey: pendingPayload.requesterSessionKey,
982
+ requesterOrigin,
983
+ requesterDisplayKey: pendingPayload.requesterDisplayKey,
984
+ task: pendingPayload.task,
985
+ timeoutMs: params.subagentAnnounceTimeoutMs,
986
+ cleanup: entry.cleanup,
987
+ roundOneReply: pendingPayload.frozenResultText ?? void 0,
988
+ fallbackReply: pendingPayload.fallbackFrozenResultText ?? void 0,
989
+ waitForCompletion: false,
990
+ startedAt: pendingPayload.startedAt,
991
+ endedAt: pendingPayload.endedAt,
992
+ label: pendingPayload.label,
993
+ outcome: pendingPayload.outcome,
994
+ spawnMode: pendingPayload.spawnMode,
995
+ expectsCompletionMessage: pendingPayload.expectsCompletionMessage,
996
+ wakeOnDescendantSettle: pendingPayload.wakeOnDescendantSettle === true,
997
+ onDeliveryResult: (delivery) => {
998
+ recordAnnounceDeliveryResult(entry, delivery);
999
+ if (delivery.delivered) {
1000
+ const deliveryState = ensureDeliveryState(entry);
1001
+ if (deliveryState.lastError !== void 0) {
1002
+ deliveryState.lastError = void 0;
1003
+ params.persist();
1004
+ }
1005
+ latestDeliveryError = void 0;
1006
+ return;
1007
+ }
1008
+ if (delivery.path === "none") ensureDeliveryState(entry).lastDropReason = "sink_unavailable";
1009
+ latestDeliveryError = formatAnnounceDeliveryError(delivery);
1010
+ if (ensureDeliveryState(entry).lastError !== latestDeliveryError) {
1011
+ ensureDeliveryState(entry).lastError = latestDeliveryError;
1012
+ params.persist();
1013
+ }
1014
+ }
1015
+ }).then((didAnnounce) => {
1016
+ finalizeAnnounceCleanup(didAnnounce);
1017
+ }).catch((error) => {
1018
+ defaultRuntime.log(`[warn] Subagent announce flow failed during cleanup for run ${runId}: ${String(error)}`);
1019
+ finalizeAnnounceCleanup(false);
1020
+ });
1021
+ return true;
1022
+ };
1023
+ const completeSubagentRun = async (completeParams) => {
1024
+ params.clearPendingLifecycleError(completeParams.runId);
1025
+ const entry = params.runs.get(completeParams.runId);
1026
+ if (!entry) return;
1027
+ let mutated = false;
1028
+ if (completeParams.reason === "subagent-complete" && entry.suppressAnnounceReason === "killed" && (entry.cleanupHandled || typeof entry.cleanupCompletedAt === "number")) {
1029
+ entry.suppressAnnounceReason = void 0;
1030
+ entry.cleanupHandled = false;
1031
+ entry.cleanupCompletedAt = void 0;
1032
+ ensureDeliveryState(entry).announcedAt = void 0;
1033
+ mutated = true;
1034
+ }
1035
+ let endedAt = typeof completeParams.endedAt === "number" ? completeParams.endedAt : Date.now();
1036
+ let completionOutcome = completeParams.outcome;
1037
+ let completionReason = completeParams.reason;
1038
+ if (shouldPreservePublishedExplicitRunTimeout({ entry })) return;
1039
+ const observedStartedAt = typeof completeParams.startedAt === "number" && Number.isFinite(completeParams.startedAt) ? completeParams.startedAt : void 0;
1040
+ if (observedStartedAt !== void 0 && entry.startedAt !== observedStartedAt) {
1041
+ entry.startedAt = observedStartedAt;
1042
+ if (typeof entry.sessionStartedAt !== "number") entry.sessionStartedAt = observedStartedAt;
1043
+ mutated = true;
1044
+ }
1045
+ const expiredDeadlineMs = resolveExpiredExplicitRunDeadlineMs({
1046
+ entry,
1047
+ nextOutcome: completionOutcome,
1048
+ nextEndedAt: endedAt,
1049
+ observedStartedAt
1050
+ });
1051
+ if (expiredDeadlineMs !== void 0) {
1052
+ endedAt = expiredDeadlineMs;
1053
+ completionOutcome = { status: "timeout" };
1054
+ completionReason = SUBAGENT_ENDED_REASON_COMPLETE;
1055
+ }
1056
+ if (entry.endedAt !== endedAt) {
1057
+ entry.endedAt = endedAt;
1058
+ entry.execution = {
1059
+ ...entry.execution,
1060
+ status: "terminal",
1061
+ startedAt: entry.startedAt,
1062
+ endedAt
1063
+ };
1064
+ mutated = true;
1065
+ }
1066
+ const outcome = withSubagentOutcomeTiming(completionOutcome, {
1067
+ startedAt: entry.startedAt,
1068
+ endedAt
1069
+ });
1070
+ if (shouldUpdateRunOutcome(entry.outcome, outcome)) {
1071
+ entry.outcome = outcome;
1072
+ mutated = true;
1073
+ }
1074
+ if (entry.execution?.status !== "terminal" || entry.execution.endedAt !== endedAt || entry.execution.outcome !== outcome) {
1075
+ entry.execution = {
1076
+ ...entry.execution,
1077
+ status: "terminal",
1078
+ startedAt: entry.startedAt,
1079
+ endedAt,
1080
+ outcome
1081
+ };
1082
+ mutated = true;
1083
+ }
1084
+ if (entry.endedReason !== completionReason) {
1085
+ entry.endedReason = completionReason;
1086
+ mutated = true;
1087
+ }
1088
+ if (entry.pauseReason !== void 0) {
1089
+ entry.pauseReason = void 0;
1090
+ mutated = true;
1091
+ }
1092
+ if (await freezeRunResultAtCompletion(entry, outcome)) mutated = true;
1093
+ if (refreshPendingFinalDeliveryPayload(entry)) mutated = true;
1094
+ if (mutated) params.persist();
1095
+ safeFinalizeSubagentTaskRun({
1096
+ entry,
1097
+ outcome
1098
+ });
1099
+ try {
1100
+ await persistSubagentSessionTiming(entry);
1101
+ } catch (err) {
1102
+ params.warn("failed to persist subagent session timing", {
1103
+ err,
1104
+ runId: entry.runId,
1105
+ childSessionKey: entry.childSessionKey
1106
+ });
1107
+ }
1108
+ const suppressedForSteerRestart = params.suppressAnnounceForSteerRestart(entry);
1109
+ if (mutated && !suppressedForSteerRestart) emitSessionLifecycleEvent({
1110
+ sessionKey: entry.childSessionKey,
1111
+ reason: "subagent-status",
1112
+ parentSessionKey: entry.requesterSessionKey,
1113
+ label: entry.label
1114
+ });
1115
+ const shouldEmitEndedHook = !suppressedForSteerRestart && params.shouldEmitEndedHookForRun({
1116
+ entry,
1117
+ reason: completionReason
1118
+ });
1119
+ if (!(shouldEmitEndedHook && completeParams.triggerCleanup && entry.expectsCompletionMessage === true && !suppressedForSteerRestart) && shouldEmitEndedHook) await params.emitSubagentEndedHookForRun({
1120
+ entry,
1121
+ reason: completionReason,
1122
+ sendFarewell: completeParams.sendFarewell,
1123
+ accountId: completeParams.accountId
1124
+ });
1125
+ if (!completeParams.triggerCleanup || suppressedForSteerRestart) return;
1126
+ try {
1127
+ await (params.cleanupBrowserSessionsForLifecycleEnd ?? await loadCleanupBrowserSessionsForLifecycleEnd$1())({
1128
+ sessionKeys: [entry.childSessionKey],
1129
+ onWarn: (msg) => params.warn(msg, { runId: entry.runId })
1130
+ });
1131
+ } catch (error) {
1132
+ params.warn("failed to cleanup browser sessions for completed subagent", {
1133
+ error: buildSafeLifecycleErrorMeta(error),
1134
+ runId: maskRunId(completeParams.runId),
1135
+ childSessionKey: maskSessionKey(entry.childSessionKey)
1136
+ });
1137
+ }
1138
+ try {
1139
+ await retireRunModeBundleMcpRuntime({
1140
+ runId: completeParams.runId,
1141
+ entry,
1142
+ reason: "subagent-run-complete"
1143
+ });
1144
+ } catch (error) {
1145
+ params.warn("failed to retire subagent bundle MCP runtime after completion", {
1146
+ error: buildSafeLifecycleErrorMeta(error),
1147
+ runId: maskRunId(completeParams.runId),
1148
+ childSessionKey: maskSessionKey(entry.childSessionKey)
1149
+ });
1150
+ }
1151
+ startSubagentAnnounceCleanupFlow(completeParams.runId, entry);
1152
+ };
1153
+ return {
1154
+ clearScheduledResumeTimers,
1155
+ completeCleanupBookkeeping,
1156
+ completeSubagentRun,
1157
+ finalizeResumedAnnounceGiveUp,
1158
+ refreshFrozenResultFromSession,
1159
+ startSubagentAnnounceCleanupFlow
1160
+ };
1161
+ }
1162
+ //#endregion
1163
+ //#region src/agents/subagent-registry-run-manager.ts
1164
+ const log$1 = createSubsystemLogger("agents/subagent-registry");
1165
+ const RECOVERABLE_WAIT_RETRY_DELAY_MS = process.env.FENGMING_TEST_FAST === "1" ? 25 : 5e3;
1166
+ const WAIT_TIMEOUT_DEADLINE_SKEW_MS = 250;
1167
+ function shouldDeleteAttachments(entry) {
1168
+ return entry.cleanup === "delete" || !entry.retainAttachmentsOnKeep;
1169
+ }
1170
+ function resolveSubagentRunDeadlineMs(entry, observedStartedAt) {
1171
+ const timeoutSeconds = entry.runTimeoutSeconds;
1172
+ if (typeof timeoutSeconds !== "number" || !Number.isFinite(timeoutSeconds) || timeoutSeconds <= 0) return;
1173
+ const startedAt = typeof observedStartedAt === "number" && Number.isFinite(observedStartedAt) ? observedStartedAt : typeof entry.startedAt === "number" && Number.isFinite(entry.startedAt) ? entry.startedAt : entry.createdAt;
1174
+ if (!Number.isFinite(startedAt)) return;
1175
+ return startedAt + Math.floor(timeoutSeconds * 1e3);
1176
+ }
1177
+ function resolveHardRunTimeoutEndedAt(entry, now, observedStartedAt) {
1178
+ const deadlineMs = resolveSubagentRunDeadlineMs(entry, observedStartedAt);
1179
+ if (deadlineMs === void 0) return;
1180
+ return now + WAIT_TIMEOUT_DEADLINE_SKEW_MS >= deadlineMs ? deadlineMs : void 0;
1181
+ }
1182
+ function resolveCompletionAfterHardRunDeadline(params) {
1183
+ const deadlineMs = resolveSubagentRunDeadlineMs(params.entry, params.observedStartedAt);
1184
+ if (deadlineMs === void 0) return;
1185
+ return (typeof params.observedEndedAt === "number" && Number.isFinite(params.observedEndedAt) ? params.observedEndedAt : params.now) > deadlineMs ? deadlineMs : void 0;
1186
+ }
1187
+ function resolveWaitTimeoutMsForRun(entry, waitTimeoutMs, now) {
1188
+ const normalizedWaitTimeoutMs = Math.max(1, Math.floor(waitTimeoutMs));
1189
+ const deadlineMs = resolveSubagentRunDeadlineMs(entry);
1190
+ if (deadlineMs === void 0) return normalizedWaitTimeoutMs;
1191
+ return Math.max(1, Math.min(normalizedWaitTimeoutMs, deadlineMs - now));
1192
+ }
1193
+ function markSubagentRunPausedAfterYield(params) {
1194
+ const { entry } = params;
1195
+ let mutated = false;
1196
+ if (typeof params.startedAt === "number" && entry.startedAt !== params.startedAt) {
1197
+ entry.startedAt = params.startedAt;
1198
+ if (typeof entry.sessionStartedAt !== "number") entry.sessionStartedAt = params.startedAt;
1199
+ mutated = true;
1200
+ }
1201
+ const endedAt = typeof params.endedAt === "number" ? params.endedAt : params.now ?? Date.now();
1202
+ if (entry.endedAt !== endedAt) {
1203
+ entry.endedAt = endedAt;
1204
+ mutated = true;
1205
+ }
1206
+ if (entry.pauseReason !== "sessions_yield") {
1207
+ entry.pauseReason = "sessions_yield";
1208
+ mutated = true;
1209
+ }
1210
+ if (entry.outcome !== void 0) {
1211
+ entry.outcome = void 0;
1212
+ mutated = true;
1213
+ }
1214
+ if (entry.endedReason !== void 0) {
1215
+ entry.endedReason = void 0;
1216
+ mutated = true;
1217
+ }
1218
+ if (entry.cleanupHandled === true) {
1219
+ entry.cleanupHandled = false;
1220
+ mutated = true;
1221
+ }
1222
+ const completion = ensureCompletionState(entry);
1223
+ if (completion.resultText !== void 0) {
1224
+ completion.resultText = void 0;
1225
+ completion.capturedAt = void 0;
1226
+ mutated = true;
1227
+ }
1228
+ return mutated;
1229
+ }
1230
+ function createSubagentRunManager(params) {
1231
+ const waitForSubagentCompletion = async (runId, waitTimeoutMs, expectedEntry, capWaitToStoredDeadline = false) => {
1232
+ let completionForRetry;
1233
+ const scheduleWaitRetry = (entry, reason, error) => {
1234
+ params.scheduleOrphanRecovery({ delayMs: 1e3 });
1235
+ const scheduledEntry = entry;
1236
+ setTimeout(() => {
1237
+ const current = params.runs.get(runId);
1238
+ if (!current || current !== scheduledEntry || typeof current.endedAt === "number") return;
1239
+ waitForSubagentCompletion(runId, waitTimeoutMs, scheduledEntry, true);
1240
+ }, RECOVERABLE_WAIT_RETRY_DELAY_MS).unref?.();
1241
+ log$1.info(reason, {
1242
+ runId,
1243
+ childSessionKey: entry.childSessionKey,
1244
+ ...error ? { error } : {}
1245
+ });
1246
+ };
1247
+ try {
1248
+ const entryBeforeWait = params.runs.get(runId);
1249
+ if (!entryBeforeWait || expectedEntry && entryBeforeWait !== expectedEntry) return;
1250
+ const wait = await waitForAgentRun({
1251
+ runId,
1252
+ timeoutMs: capWaitToStoredDeadline ? resolveWaitTimeoutMsForRun(entryBeforeWait, waitTimeoutMs, Date.now()) : Math.max(1, Math.floor(waitTimeoutMs)),
1253
+ callGateway: params.callGateway
1254
+ });
1255
+ const entry = params.runs.get(runId);
1256
+ if (!entry || expectedEntry && entry !== expectedEntry) return;
1257
+ if (wait.status === "pending") return;
1258
+ const waitTerminalOutcome = buildAgentRunTerminalOutcomeFromWaitResult(wait);
1259
+ const waitBlocked = waitTerminalOutcome?.reason === "blocked";
1260
+ const waitAborted = waitTerminalOutcome?.reason === "aborted" || waitTerminalOutcome?.reason === "cancelled";
1261
+ const waitStatus = waitTerminalOutcome?.status ?? wait.status;
1262
+ if (wait.yielded === true && waitStatus !== "timeout" && !waitBlocked) {
1263
+ if (markSubagentRunPausedAfterYield({
1264
+ entry,
1265
+ startedAt: wait.startedAt,
1266
+ endedAt: wait.endedAt
1267
+ })) params.persist();
1268
+ return;
1269
+ }
1270
+ if (waitStatus === "error" && !waitAborted && isRecoverableAgentWaitError(wait.error)) {
1271
+ scheduleWaitRetry(entry, "subagent wait interrupted; scheduling recovery", wait.error);
1272
+ return;
1273
+ }
1274
+ const observedStartedAt = typeof wait.startedAt === "number" && Number.isFinite(wait.startedAt) ? wait.startedAt : params.resolveSubagentSessionStartedAt({
1275
+ childSessionKey: entry.childSessionKey,
1276
+ notBeforeMs: entry.startedAt ?? entry.createdAt
1277
+ });
1278
+ const completeAsRunTimeout = async (endedAt, startedAt) => {
1279
+ if (typeof startedAt === "number" && Number.isFinite(startedAt)) {
1280
+ entry.startedAt = startedAt;
1281
+ if (typeof entry.sessionStartedAt !== "number") entry.sessionStartedAt = startedAt;
1282
+ }
1283
+ const timeoutCompletion = {
1284
+ runId,
1285
+ outcome: { status: "timeout" },
1286
+ reason: SUBAGENT_ENDED_REASON_COMPLETE,
1287
+ sendFarewell: true,
1288
+ accountId: entry.requesterOrigin?.accountId,
1289
+ triggerCleanup: true
1290
+ };
1291
+ if (typeof endedAt === "number") timeoutCompletion.endedAt = endedAt;
1292
+ if (typeof startedAt === "number" && Number.isFinite(startedAt)) timeoutCompletion.startedAt = startedAt;
1293
+ completionForRetry = timeoutCompletion;
1294
+ await params.completeSubagentRun(completionForRetry);
1295
+ };
1296
+ if (waitStatus === "timeout") {
1297
+ const isTerminalWaitTimeout = typeof wait.endedAt === "number" || typeof wait.stopReason === "string" || typeof wait.livenessState === "string";
1298
+ const now = Date.now();
1299
+ if (observedStartedAt !== void 0 && entry.startedAt !== observedStartedAt) {
1300
+ entry.startedAt = observedStartedAt;
1301
+ if (typeof entry.sessionStartedAt !== "number") entry.sessionStartedAt = observedStartedAt;
1302
+ params.persist();
1303
+ }
1304
+ const hardRunTimeoutEndedAt = resolveHardRunTimeoutEndedAt(entry, now, observedStartedAt);
1305
+ const completion = params.resolveSubagentSessionCompletion({
1306
+ childSessionKey: entry.childSessionKey,
1307
+ fallbackEndedAt: typeof wait.endedAt === "number" ? wait.endedAt : hardRunTimeoutEndedAt ?? now,
1308
+ notBeforeMs: observedStartedAt ?? entry.startedAt ?? entry.createdAt
1309
+ });
1310
+ if (completion) {
1311
+ const completionStartedAt = observedStartedAt ?? completion.startedAt;
1312
+ const completionAfterDeadline = resolveCompletionAfterHardRunDeadline({
1313
+ entry,
1314
+ observedStartedAt: completionStartedAt,
1315
+ observedEndedAt: completion.endedAt,
1316
+ now
1317
+ });
1318
+ if (completionAfterDeadline !== void 0) {
1319
+ await completeAsRunTimeout(completionAfterDeadline, completionStartedAt);
1320
+ return;
1321
+ }
1322
+ completionForRetry = {
1323
+ runId,
1324
+ endedAt: completion.endedAt,
1325
+ outcome: completion.outcome,
1326
+ reason: completion.reason,
1327
+ sendFarewell: true,
1328
+ accountId: entry.requesterOrigin?.accountId,
1329
+ triggerCleanup: true,
1330
+ startedAt: completionStartedAt
1331
+ };
1332
+ await params.completeSubagentRun(completionForRetry);
1333
+ return;
1334
+ }
1335
+ if (isTerminalWaitTimeout || hardRunTimeoutEndedAt !== void 0) {
1336
+ let timeoutEndedAt = typeof wait.endedAt === "number" ? wait.endedAt : hardRunTimeoutEndedAt;
1337
+ const timeoutAfterDeadline = resolveCompletionAfterHardRunDeadline({
1338
+ entry,
1339
+ observedStartedAt,
1340
+ observedEndedAt: timeoutEndedAt,
1341
+ now
1342
+ });
1343
+ if (timeoutAfterDeadline !== void 0) timeoutEndedAt = timeoutAfterDeadline;
1344
+ await completeAsRunTimeout(timeoutEndedAt, observedStartedAt);
1345
+ return;
1346
+ }
1347
+ scheduleWaitRetry(entry, "subagent wait timed out; deferring terminal state until session reconciliation");
1348
+ return;
1349
+ }
1350
+ const completionAfterDeadline = resolveCompletionAfterHardRunDeadline({
1351
+ entry,
1352
+ observedStartedAt,
1353
+ observedEndedAt: wait.endedAt,
1354
+ now: Date.now()
1355
+ });
1356
+ if (completionAfterDeadline !== void 0) {
1357
+ await completeAsRunTimeout(completionAfterDeadline, observedStartedAt);
1358
+ return;
1359
+ }
1360
+ let mutated = false;
1361
+ if (typeof observedStartedAt === "number") {
1362
+ entry.startedAt = observedStartedAt;
1363
+ if (typeof entry.sessionStartedAt !== "number") entry.sessionStartedAt = observedStartedAt;
1364
+ mutated = true;
1365
+ }
1366
+ if (typeof wait.endedAt === "number") {
1367
+ entry.endedAt = wait.endedAt;
1368
+ mutated = true;
1369
+ }
1370
+ if (!entry.endedAt) {
1371
+ entry.endedAt = Date.now();
1372
+ mutated = true;
1373
+ }
1374
+ const rawWaitError = typeof wait.error === "string" ? wait.error : void 0;
1375
+ const waitError = waitAborted ? "subagent run terminated" : waitTerminalOutcome?.error ?? rawWaitError;
1376
+ const outcome = withSubagentOutcomeTiming(waitStatus === "error" ? {
1377
+ status: "error",
1378
+ error: waitError
1379
+ } : { status: "ok" }, {
1380
+ startedAt: entry.startedAt,
1381
+ endedAt: entry.endedAt
1382
+ });
1383
+ if (shouldUpdateRunOutcome(entry.outcome, outcome)) {
1384
+ entry.outcome = outcome;
1385
+ mutated = true;
1386
+ }
1387
+ if (mutated) params.persist();
1388
+ completionForRetry = {
1389
+ runId,
1390
+ endedAt: entry.endedAt,
1391
+ outcome,
1392
+ reason: waitAborted ? SUBAGENT_ENDED_REASON_KILLED : waitStatus === "error" ? SUBAGENT_ENDED_REASON_ERROR : SUBAGENT_ENDED_REASON_COMPLETE,
1393
+ sendFarewell: true,
1394
+ accountId: entry.requesterOrigin?.accountId,
1395
+ triggerCleanup: true,
1396
+ startedAt: observedStartedAt
1397
+ };
1398
+ await params.completeSubagentRun(completionForRetry);
1399
+ } catch (error) {
1400
+ const current = params.runs.get(runId);
1401
+ log$1.warn("failed to complete subagent run; retrying completion", {
1402
+ runId,
1403
+ childSessionKey: current?.childSessionKey ?? expectedEntry?.childSessionKey,
1404
+ error
1405
+ });
1406
+ if (current && typeof current.endedAt === "number" && !current.cleanupCompletedAt && current.pauseReason !== "sessions_yield") {
1407
+ if (completionForRetry) try {
1408
+ await params.completeSubagentRun(completionForRetry);
1409
+ return;
1410
+ } catch (retryError) {
1411
+ log$1.warn("failed to complete subagent run after retry; retrying ended cleanup", {
1412
+ runId,
1413
+ childSessionKey: current.childSessionKey,
1414
+ error: retryError
1415
+ });
1416
+ }
1417
+ current.cleanupHandled = false;
1418
+ params.resumedRuns.delete(runId);
1419
+ params.resumeSubagentRun(runId);
1420
+ }
1421
+ }
1422
+ };
1423
+ const markSubagentRunForSteerRestart = (runId) => {
1424
+ const key = runId.trim();
1425
+ if (!key) return false;
1426
+ const entry = params.runs.get(key);
1427
+ if (!entry) return false;
1428
+ if (entry.suppressAnnounceReason === "steer-restart") return true;
1429
+ entry.suppressAnnounceReason = "steer-restart";
1430
+ params.persist();
1431
+ return true;
1432
+ };
1433
+ const clearSubagentRunSteerRestart = (runId) => {
1434
+ const key = runId.trim();
1435
+ if (!key) return false;
1436
+ const entry = params.runs.get(key);
1437
+ if (!entry) return false;
1438
+ if (entry.suppressAnnounceReason !== "steer-restart") return true;
1439
+ entry.suppressAnnounceReason = void 0;
1440
+ params.persist();
1441
+ params.resumedRuns.delete(key);
1442
+ if (typeof entry.endedAt === "number" && !entry.cleanupCompletedAt) params.resumeSubagentRun(key);
1443
+ return true;
1444
+ };
1445
+ const replaceSubagentRunAfterSteer = (replaceParams) => {
1446
+ const previousRunId = replaceParams.previousRunId.trim();
1447
+ const nextRunId = replaceParams.nextRunId.trim();
1448
+ if (!previousRunId || !nextRunId) return false;
1449
+ const source = params.runs.get(previousRunId) ?? replaceParams.fallback;
1450
+ if (!source) return false;
1451
+ if (previousRunId !== nextRunId) {
1452
+ params.clearPendingLifecycleError(previousRunId);
1453
+ if (shouldDeleteAttachments(source)) safeRemoveAttachmentsDir(source);
1454
+ if (source.execution?.transcriptFile && source.execution.transcriptFile !== replaceParams.transcriptFile) removeInternalSessionEffectsTranscript(source.execution.transcriptFile);
1455
+ params.runs.delete(previousRunId);
1456
+ params.resumedRuns.delete(previousRunId);
1457
+ }
1458
+ const now = Date.now();
1459
+ const cfg = params.getRuntimeConfig();
1460
+ const archiveAfterMs = resolveArchiveAfterMs(cfg);
1461
+ const spawnMode = source.spawnMode === "session" ? "session" : "run";
1462
+ const archiveAtMs = spawnMode === "session" || source.cleanup === "keep" ? void 0 : archiveAfterMs ? now + archiveAfterMs : void 0;
1463
+ const runTimeoutSeconds = replaceParams.runTimeoutSeconds ?? source.runTimeoutSeconds ?? 0;
1464
+ const waitTimeoutMs = params.resolveSubagentWaitTimeoutMs(cfg, runTimeoutSeconds);
1465
+ const preserveFrozenResultFallback = replaceParams.preserveFrozenResultFallback === true;
1466
+ const sessionStartedAt = getSubagentSessionStartedAt(source) ?? now;
1467
+ const accumulatedRuntimeMs = getSubagentSessionRuntimeMs(source, typeof source.endedAt === "number" ? source.endedAt : now) ?? 0;
1468
+ const sourceCompletion = ensureCompletionState(source);
1469
+ const next = normalizeSubagentRunState({
1470
+ ...source,
1471
+ runId: nextRunId,
1472
+ createdAt: now,
1473
+ startedAt: now,
1474
+ sessionStartedAt,
1475
+ accumulatedRuntimeMs,
1476
+ endedAt: void 0,
1477
+ endedReason: void 0,
1478
+ pauseReason: void 0,
1479
+ endedHookEmittedAt: void 0,
1480
+ wakeOnDescendantSettle: void 0,
1481
+ outcome: void 0,
1482
+ execution: {
1483
+ status: "running",
1484
+ startedAt: now,
1485
+ transcriptFile: replaceParams.transcriptFile
1486
+ },
1487
+ completion: {
1488
+ required: source.expectsCompletionMessage === true,
1489
+ fallbackResultText: preserveFrozenResultFallback ? sourceCompletion.resultText : void 0,
1490
+ fallbackCapturedAt: preserveFrozenResultFallback ? sourceCompletion.capturedAt : void 0
1491
+ },
1492
+ cleanupCompletedAt: void 0,
1493
+ cleanupHandled: false,
1494
+ suppressAnnounceReason: void 0,
1495
+ delivery: { status: source.expectsCompletionMessage === false ? "not_required" : "pending" },
1496
+ spawnMode,
1497
+ archiveAtMs,
1498
+ runTimeoutSeconds
1499
+ });
1500
+ clearDeliveryState(next);
1501
+ params.runs.set(nextRunId, next);
1502
+ params.ensureListener();
1503
+ params.persist();
1504
+ params.startSweeper();
1505
+ waitForSubagentCompletion(nextRunId, waitTimeoutMs, next);
1506
+ return true;
1507
+ };
1508
+ const registerSubagentRun = (registerParams) => {
1509
+ const runId = registerParams.runId.trim();
1510
+ const childSessionKey = registerParams.childSessionKey.trim();
1511
+ const requesterSessionKey = registerParams.requesterSessionKey.trim();
1512
+ const controllerSessionKey = registerParams.controllerSessionKey?.trim() || requesterSessionKey;
1513
+ if (!runId || !childSessionKey || !requesterSessionKey) return;
1514
+ const now = Date.now();
1515
+ const cfg = params.getRuntimeConfig();
1516
+ const archiveAfterMs = resolveArchiveAfterMs(cfg);
1517
+ const spawnMode = registerParams.spawnMode === "session" ? "session" : "run";
1518
+ const archiveAtMs = spawnMode === "session" || registerParams.cleanup === "keep" ? void 0 : archiveAfterMs ? now + archiveAfterMs : void 0;
1519
+ const runTimeoutSeconds = registerParams.runTimeoutSeconds ?? 0;
1520
+ const waitTimeoutMs = params.resolveSubagentWaitTimeoutMs(cfg, runTimeoutSeconds);
1521
+ const requesterOrigin = normalizeDeliveryContext(registerParams.requesterOrigin);
1522
+ const entry = normalizeSubagentRunState({
1523
+ runId,
1524
+ childSessionKey,
1525
+ controllerSessionKey,
1526
+ requesterSessionKey,
1527
+ requesterOrigin,
1528
+ requesterDisplayKey: registerParams.requesterDisplayKey,
1529
+ task: registerParams.task,
1530
+ taskName: registerParams.taskName,
1531
+ cleanup: registerParams.cleanup,
1532
+ expectsCompletionMessage: registerParams.expectsCompletionMessage,
1533
+ spawnMode,
1534
+ label: registerParams.label,
1535
+ model: registerParams.model,
1536
+ agentDir: registerParams.agentDir,
1537
+ workspaceDir: registerParams.workspaceDir,
1538
+ runTimeoutSeconds,
1539
+ createdAt: now,
1540
+ startedAt: now,
1541
+ execution: {
1542
+ status: "running",
1543
+ startedAt: now
1544
+ },
1545
+ completion: { required: registerParams.expectsCompletionMessage === true },
1546
+ delivery: { status: registerParams.expectsCompletionMessage === false ? "not_required" : "pending" },
1547
+ sessionStartedAt: now,
1548
+ accumulatedRuntimeMs: 0,
1549
+ archiveAtMs,
1550
+ cleanupHandled: false,
1551
+ wakeOnDescendantSettle: void 0,
1552
+ attachmentsDir: registerParams.attachmentsDir,
1553
+ attachmentsRootDir: registerParams.attachmentsRootDir,
1554
+ retainAttachmentsOnKeep: registerParams.retainAttachmentsOnKeep
1555
+ });
1556
+ params.runs.set(runId, entry);
1557
+ try {
1558
+ params.persistOrThrow();
1559
+ } catch (error) {
1560
+ params.runs.delete(runId);
1561
+ throw error;
1562
+ }
1563
+ try {
1564
+ createRunningTaskRun({
1565
+ runtime: "subagent",
1566
+ sourceId: runId,
1567
+ ownerKey: requesterSessionKey,
1568
+ scopeKind: "session",
1569
+ requesterOrigin,
1570
+ childSessionKey,
1571
+ runId,
1572
+ label: registerParams.label,
1573
+ task: registerParams.task,
1574
+ deliveryStatus: registerParams.expectsCompletionMessage === false ? "not_applicable" : "pending",
1575
+ startedAt: now,
1576
+ lastEventAt: now
1577
+ });
1578
+ } catch (error) {
1579
+ log$1.warn("Failed to create background task for subagent run", {
1580
+ runId: registerParams.runId,
1581
+ error
1582
+ });
1583
+ }
1584
+ params.ensureListener();
1585
+ params.persist();
1586
+ params.startSweeper();
1587
+ waitForSubagentCompletion(runId, waitTimeoutMs, entry);
1588
+ };
1589
+ const releaseSubagentRun = (runId) => {
1590
+ params.clearPendingLifecycleError(runId);
1591
+ const entry = params.runs.get(runId);
1592
+ if (entry) {
1593
+ if (shouldDeleteAttachments(entry)) safeRemoveAttachmentsDir(entry);
1594
+ params.notifyContextEngineSubagentEnded({
1595
+ childSessionKey: entry.childSessionKey,
1596
+ reason: "released",
1597
+ agentDir: entry.agentDir,
1598
+ workspaceDir: entry.workspaceDir
1599
+ });
1600
+ }
1601
+ if (params.runs.delete(runId)) params.persist();
1602
+ if (params.runs.size === 0) params.stopSweeper();
1603
+ };
1604
+ const markSubagentRunTerminated = (markParams) => {
1605
+ const runIds = /* @__PURE__ */ new Set();
1606
+ if (typeof markParams.runId === "string" && markParams.runId.trim()) runIds.add(markParams.runId.trim());
1607
+ if (typeof markParams.childSessionKey === "string" && markParams.childSessionKey.trim()) {
1608
+ for (const [runId, entry] of params.runs.entries()) if (entry.childSessionKey === markParams.childSessionKey.trim()) runIds.add(runId);
1609
+ }
1610
+ if (runIds.size === 0) return 0;
1611
+ const now = Date.now();
1612
+ const reason = markParams.reason?.trim() || "killed";
1613
+ let updated = 0;
1614
+ const entriesByChildSessionKey = /* @__PURE__ */ new Map();
1615
+ for (const runId of runIds) {
1616
+ params.clearPendingLifecycleError(runId);
1617
+ const entry = params.runs.get(runId);
1618
+ if (!entry) continue;
1619
+ if (typeof entry.endedAt === "number") continue;
1620
+ entry.endedAt = now;
1621
+ entry.outcome = withSubagentOutcomeTiming({
1622
+ status: "error",
1623
+ error: reason
1624
+ }, {
1625
+ startedAt: entry.startedAt,
1626
+ endedAt: now
1627
+ });
1628
+ entry.endedReason = SUBAGENT_ENDED_REASON_KILLED;
1629
+ entry.cleanupHandled = true;
1630
+ entry.cleanupCompletedAt = now;
1631
+ entry.suppressAnnounceReason = "killed";
1632
+ if (!entriesByChildSessionKey.has(entry.childSessionKey)) entriesByChildSessionKey.set(entry.childSessionKey, entry);
1633
+ updated += 1;
1634
+ }
1635
+ if (updated > 0) {
1636
+ params.persist();
1637
+ for (const entry of entriesByChildSessionKey.values()) {
1638
+ const emitEndedHook = () => emitSubagentEndedHookOnce({
1639
+ entry,
1640
+ reason: SUBAGENT_ENDED_REASON_KILLED,
1641
+ sendFarewell: true,
1642
+ accountId: entry.requesterOrigin?.accountId,
1643
+ outcome: SUBAGENT_ENDED_OUTCOME_KILLED,
1644
+ error: reason,
1645
+ inFlightRunIds: params.endedHookInFlightRunIds,
1646
+ persist: () => params.persist()
1647
+ });
1648
+ persistSubagentSessionTiming(entry).catch((err) => {
1649
+ log$1.warn("failed to persist killed subagent session timing", {
1650
+ err,
1651
+ runId: entry.runId,
1652
+ childSessionKey: entry.childSessionKey
1653
+ });
1654
+ });
1655
+ if (shouldDeleteAttachments(entry)) safeRemoveAttachmentsDir(entry);
1656
+ params.completeCleanupBookkeeping({
1657
+ runId: entry.runId,
1658
+ entry,
1659
+ cleanup: entry.cleanup,
1660
+ completedAt: now
1661
+ });
1662
+ if (getGlobalHookRunner()) {
1663
+ emitEndedHook().catch(() => {});
1664
+ continue;
1665
+ }
1666
+ const cfg = params.getRuntimeConfig();
1667
+ Promise.resolve(params.ensureRuntimePluginsLoaded({
1668
+ config: cfg,
1669
+ workspaceDir: entry.workspaceDir,
1670
+ allowGatewaySubagentBinding: true
1671
+ })).then(emitEndedHook).catch(() => {});
1672
+ }
1673
+ }
1674
+ return updated;
1675
+ };
1676
+ return {
1677
+ clearSubagentRunSteerRestart,
1678
+ markSubagentRunForSteerRestart,
1679
+ markSubagentRunTerminated,
1680
+ registerSubagentRun,
1681
+ releaseSubagentRun,
1682
+ replaceSubagentRunAfterSteer,
1683
+ waitForSubagentCompletion
1684
+ };
1685
+ }
1686
+ //#endregion
1687
+ //#region src/agents/subagent-session-reconciliation.ts
1688
+ function finiteTimestamp(value) {
1689
+ return asFiniteNumber(value);
1690
+ }
1691
+ function terminalSessionTimestamp(sessionEntry) {
1692
+ return finiteTimestamp(sessionEntry?.endedAt) ?? finiteTimestamp(sessionEntry?.updatedAt);
1693
+ }
1694
+ function isFreshForRun(sessionEntry, notBeforeMs) {
1695
+ if (notBeforeMs === void 0) return true;
1696
+ const terminalAt = terminalSessionTimestamp(sessionEntry);
1697
+ return terminalAt !== void 0 && terminalAt >= notBeforeMs;
1698
+ }
1699
+ function freshSessionStartedAt(sessionEntry, notBeforeMs) {
1700
+ const startedAt = finiteTimestamp(sessionEntry?.startedAt);
1701
+ if (startedAt === void 0) return;
1702
+ return notBeforeMs === void 0 || startedAt >= notBeforeMs ? startedAt : void 0;
1703
+ }
1704
+ function findSessionEntryByKey(store, sessionKey) {
1705
+ const direct = store[sessionKey];
1706
+ if (direct) return direct;
1707
+ const normalized = sessionKey.trim().toLowerCase();
1708
+ for (const [key, entry] of Object.entries(store)) if (key.trim().toLowerCase() === normalized) return entry;
1709
+ }
1710
+ function loadSubagentSessionEntry(params) {
1711
+ const key = params.childSessionKey.trim();
1712
+ if (!key) return;
1713
+ const agentId = resolveAgentIdFromSessionKey(key);
1714
+ const storePath = resolveStorePath((params.cfg ?? getRuntimeConfig()).session?.store, { agentId });
1715
+ let store = params.storeCache?.get(storePath);
1716
+ if (!store) {
1717
+ store = loadSessionStore(storePath);
1718
+ params.storeCache?.set(storePath, store);
1719
+ }
1720
+ return findSessionEntryByKey(store, key);
1721
+ }
1722
+ function resolveCompletionFromSessionEntry(sessionEntry, fallbackEndedAt, opts) {
1723
+ const status = sessionEntry?.status;
1724
+ const startedAt = freshSessionStartedAt(sessionEntry, opts?.notBeforeMs);
1725
+ const endedAt = finiteTimestamp(sessionEntry?.endedAt) ?? finiteTimestamp(sessionEntry?.updatedAt) ?? fallbackEndedAt;
1726
+ if (status === "done") {
1727
+ if (!isFreshForRun(sessionEntry, opts?.notBeforeMs)) return null;
1728
+ return {
1729
+ startedAt,
1730
+ endedAt,
1731
+ outcome: { status: "ok" },
1732
+ reason: SUBAGENT_ENDED_REASON_COMPLETE
1733
+ };
1734
+ }
1735
+ if (status === "timeout") {
1736
+ if (!isFreshForRun(sessionEntry, opts?.notBeforeMs)) return null;
1737
+ return {
1738
+ startedAt,
1739
+ endedAt,
1740
+ outcome: { status: "timeout" },
1741
+ reason: SUBAGENT_ENDED_REASON_COMPLETE
1742
+ };
1743
+ }
1744
+ if (status === "failed") {
1745
+ if (!isFreshForRun(sessionEntry, opts?.notBeforeMs)) return null;
1746
+ return {
1747
+ startedAt,
1748
+ endedAt,
1749
+ outcome: {
1750
+ status: "error",
1751
+ error: "session completed before registry settled"
1752
+ },
1753
+ reason: SUBAGENT_ENDED_REASON_ERROR
1754
+ };
1755
+ }
1756
+ if (status === "killed") {
1757
+ if (!isFreshForRun(sessionEntry, opts?.notBeforeMs)) return null;
1758
+ return {
1759
+ startedAt,
1760
+ endedAt,
1761
+ outcome: {
1762
+ status: "error",
1763
+ error: "subagent run terminated"
1764
+ },
1765
+ reason: SUBAGENT_ENDED_REASON_KILLED
1766
+ };
1767
+ }
1768
+ if (status !== "running" && typeof sessionEntry?.endedAt === "number") {
1769
+ if (!isFreshForRun(sessionEntry, opts?.notBeforeMs)) return null;
1770
+ return {
1771
+ startedAt,
1772
+ endedAt,
1773
+ outcome: { status: "ok" },
1774
+ reason: SUBAGENT_ENDED_REASON_COMPLETE
1775
+ };
1776
+ }
1777
+ return null;
1778
+ }
1779
+ function resolveSubagentSessionCompletion(params) {
1780
+ return resolveCompletionFromSessionEntry(loadSubagentSessionEntry({
1781
+ childSessionKey: params.childSessionKey,
1782
+ storeCache: params.storeCache,
1783
+ cfg: params.cfg
1784
+ }), params.fallbackEndedAt, { notBeforeMs: params.notBeforeMs });
1785
+ }
1786
+ function resolveSubagentSessionStartedAt(params) {
1787
+ const sessionEntry = loadSubagentSessionEntry({
1788
+ childSessionKey: params.childSessionKey,
1789
+ storeCache: params.storeCache,
1790
+ cfg: params.cfg
1791
+ });
1792
+ return isFreshForRun(sessionEntry, params.notBeforeMs) ? freshSessionStartedAt(sessionEntry, params.notBeforeMs) : void 0;
1793
+ }
1794
+ //#endregion
1795
+ //#region src/agents/subagent-registry-maintenance.ts
1796
+ function isCleanupCompleteForMaintenance(entry) {
1797
+ return typeof entry.cleanupCompletedAt === "number";
1798
+ }
1799
+ function isActiveForMaintenance(entry) {
1800
+ return typeof entry.endedAt !== "number";
1801
+ }
1802
+ function isPendingFinalDeliveryForMaintenance(entry) {
1803
+ return entry.delivery?.status === "pending" || isDeliverySuspended(entry);
1804
+ }
1805
+ function isAwaitingCompletionAnnounceForMaintenance(entry) {
1806
+ return entry.expectsCompletionMessage === true && entry.delivery?.status !== "delivered";
1807
+ }
1808
+ function shouldPreserveForMaintenance(entry) {
1809
+ if (isCleanupCompleteForMaintenance(entry)) return false;
1810
+ if (isActiveForMaintenance(entry)) return true;
1811
+ return isAwaitingCompletionAnnounceForMaintenance(entry) || isPendingFinalDeliveryForMaintenance(entry);
1812
+ }
1813
+ function listSessionMaintenanceProtectedSubagentSessionKeys() {
1814
+ const keys = /* @__PURE__ */ new Set();
1815
+ for (const entry of getSubagentRunsSnapshotForRead(subagentRuns).values()) {
1816
+ if (!shouldPreserveForMaintenance(entry)) continue;
1817
+ const childSessionKey = entry.childSessionKey.trim();
1818
+ if (childSessionKey) keys.add(childSessionKey);
1819
+ }
1820
+ return [...keys];
1821
+ }
1822
+ registerSessionMaintenancePreserveKeysProvider(listSessionMaintenanceProtectedSubagentSessionKeys);
1823
+ //#endregion
1824
+ //#region src/agents/subagent-registry.ts
1825
+ const log = createSubsystemLogger("agents/subagent-registry");
1826
+ const subagentAnnounceLoader = createLazyImportLoader(() => import("./subagent-announce-B9cfs_KZ.js"));
1827
+ const browserCleanupLoader = createLazyImportLoader(() => import("./browser-lifecycle-cleanup-Dii5CgXr.js"));
1828
+ async function loadSubagentAnnounceModule() {
1829
+ return await subagentAnnounceLoader.load();
1830
+ }
1831
+ async function loadCleanupBrowserSessionsForLifecycleEnd() {
1832
+ return (await browserCleanupLoader.load()).cleanupBrowserSessionsForLifecycleEnd;
1833
+ }
1834
+ let subagentRegistryDeps = {
1835
+ callGateway,
1836
+ captureSubagentCompletionReply: async (sessionKey, options) => (await loadSubagentAnnounceModule()).captureSubagentCompletionReply(sessionKey, options),
1837
+ cleanupBrowserSessionsForLifecycleEnd: async (params) => (await loadCleanupBrowserSessionsForLifecycleEnd())(params),
1838
+ getSubagentRunsSnapshotForRead,
1839
+ getRuntimeConfig,
1840
+ onAgentEvent,
1841
+ persistSubagentRunsToDisk,
1842
+ persistSubagentRunsToDiskOrThrow,
1843
+ resolveAgentTimeoutMs,
1844
+ restoreSubagentRunsFromDisk,
1845
+ runSubagentAnnounceFlow: async (params) => (await loadSubagentAnnounceModule()).runSubagentAnnounceFlow(params)
1846
+ };
1847
+ const SUBAGENT_REGISTRY_RUNTIME_SPEC = ["./subagent-registry.runtime", ".js"];
1848
+ const contextEngineInitLoader = createLazyPromiseLoader(() => importRuntimeModule(import.meta.url, SUBAGENT_REGISTRY_RUNTIME_SPEC));
1849
+ const contextEngineRegistryLoader = createLazyPromiseLoader(() => importRuntimeModule(import.meta.url, SUBAGENT_REGISTRY_RUNTIME_SPEC));
1850
+ const runtimePluginsLoader = createLazyPromiseLoader(() => importRuntimeModule(import.meta.url, SUBAGENT_REGISTRY_RUNTIME_SPEC));
1851
+ let sweeper = null;
1852
+ const resumeRetryTimers = /* @__PURE__ */ new Set();
1853
+ let sweepInProgress = false;
1854
+ let listenerStarted = false;
1855
+ let restoreAttempted = false;
1856
+ const ORPHAN_RECOVERY_DEBOUNCE_MS = 1e3;
1857
+ let lastOrphanRecoveryScheduleAt = 0;
1858
+ const SUBAGENT_ANNOUNCE_TIMEOUT_MS = 12e4;
1859
+ /**
1860
+ * Embedded runs can emit transient lifecycle `error` events while provider/model
1861
+ * retry is still in progress. Defer terminal error cleanup briefly so a
1862
+ * subsequent lifecycle `start` / `end` can cancel premature failure announces.
1863
+ */
1864
+ const LIFECYCLE_ERROR_RETRY_GRACE_MS = 15e3;
1865
+ /**
1866
+ * Embedded runs can also surface an intermediate lifecycle `end` with
1867
+ * `aborted=true` just before the runtime automatically retries the same run.
1868
+ * Give that timeout a short grace window so the parent does not get a stale
1869
+ * `timed out` completion right before the eventual success.
1870
+ */
1871
+ const LIFECYCLE_TIMEOUT_RETRY_GRACE_MS = 15e3;
1872
+ /** Absolute TTL for session-mode runs after cleanup completes (no archiveAtMs). */
1873
+ const SESSION_RUN_TTL_MS = 5 * 6e4;
1874
+ /** Absolute TTL for orphaned pendingLifecycleError / pendingLifecycleTimeout entries. */
1875
+ const PENDING_LIFECYCLE_TERMINAL_TTL_MS = 5 * 6e4;
1876
+ /** Grace period before treating a "running" subagent without a live run context as stale. */
1877
+ const STALE_ACTIVE_SUBAGENT_GRACE_MS = process.env.FENGMING_TEST_FAST === "1" ? 1e3 : 6e4;
1878
+ const SUSPENDED_DELIVERY_CRON_EXPIRY_MS = 120 * 6e4;
1879
+ const SUSPENDED_DELIVERY_SUBAGENT_EXPIRY_MS = 360 * 6e4;
1880
+ const SUSPENDED_DELIVERY_INTERACTIVE_EXPIRY_MS = 1440 * 6e4;
1881
+ const SUSPENDED_DELIVERY_SOFT_CAP = 25;
1882
+ const SUSPENDED_DELIVERY_HARD_CAP = 50;
1883
+ const SUSPENDED_DELIVERY_PRESSURE_TARGET = 10;
1884
+ function loadContextEngineInitModule() {
1885
+ return contextEngineInitLoader.load();
1886
+ }
1887
+ function loadContextEngineRegistryModule() {
1888
+ return contextEngineRegistryLoader.load();
1889
+ }
1890
+ function loadRuntimePluginsModule() {
1891
+ return runtimePluginsLoader.load();
1892
+ }
1893
+ async function ensureSubagentRegistryPluginRuntimeLoaded(params) {
1894
+ const ensureRuntimePluginsLoaded = subagentRegistryDeps.ensureRuntimePluginsLoaded;
1895
+ if (ensureRuntimePluginsLoaded) {
1896
+ ensureRuntimePluginsLoaded(params);
1897
+ return;
1898
+ }
1899
+ (await loadRuntimePluginsModule()).ensureRuntimePluginsLoaded(params);
1900
+ }
1901
+ async function resolveSubagentRegistryContextEngine(cfg, options) {
1902
+ const initModule = await loadContextEngineInitModule();
1903
+ const registryModule = await loadContextEngineRegistryModule();
1904
+ const ensureContextEnginesInitialized = subagentRegistryDeps.ensureContextEnginesInitialized ?? initModule.ensureContextEnginesInitialized;
1905
+ const resolveContextEngine = subagentRegistryDeps.resolveContextEngine ?? registryModule.resolveContextEngine;
1906
+ ensureContextEnginesInitialized();
1907
+ return await resolveContextEngine(cfg, options);
1908
+ }
1909
+ function persistSubagentRuns() {
1910
+ subagentRegistryDeps.persistSubagentRunsToDisk(subagentRuns);
1911
+ }
1912
+ function persistSubagentRunsOrThrow() {
1913
+ subagentRegistryDeps.persistSubagentRunsToDiskOrThrow(subagentRuns);
1914
+ }
1915
+ function scheduleSubagentOrphanRecovery(params) {
1916
+ const now = Date.now();
1917
+ if (now - lastOrphanRecoveryScheduleAt < ORPHAN_RECOVERY_DEBOUNCE_MS) return;
1918
+ lastOrphanRecoveryScheduleAt = now;
1919
+ import("./subagent-orphan-recovery-CrC4QcBY.js").then(({ scheduleOrphanRecovery }) => {
1920
+ scheduleOrphanRecovery({
1921
+ getActiveRuns: () => subagentRuns,
1922
+ delayMs: params?.delayMs,
1923
+ maxRetries: params?.maxRetries
1924
+ });
1925
+ }, () => {});
1926
+ }
1927
+ const resumedRuns = /* @__PURE__ */ new Set();
1928
+ const endedHookInFlightRunIds = /* @__PURE__ */ new Set();
1929
+ const pendingLifecycleErrorByRunId = /* @__PURE__ */ new Map();
1930
+ const pendingLifecycleTimeoutByRunId = /* @__PURE__ */ new Map();
1931
+ function clearPendingLifecycleError(runId) {
1932
+ const pending = pendingLifecycleErrorByRunId.get(runId);
1933
+ if (!pending) return;
1934
+ clearTimeout(pending.timer);
1935
+ pendingLifecycleErrorByRunId.delete(runId);
1936
+ }
1937
+ function clearPendingLifecycleTimeout(runId) {
1938
+ const pending = pendingLifecycleTimeoutByRunId.get(runId);
1939
+ if (!pending) return;
1940
+ clearTimeout(pending.timer);
1941
+ pendingLifecycleTimeoutByRunId.delete(runId);
1942
+ }
1943
+ async function completeSubagentRunWithRecovery(params, source) {
1944
+ try {
1945
+ await completeSubagentRun(params);
1946
+ return;
1947
+ } catch (error) {
1948
+ const current = subagentRuns.get(params.runId);
1949
+ log.warn("failed to complete subagent run; retrying completion", {
1950
+ source,
1951
+ runId: params.runId,
1952
+ childSessionKey: current?.childSessionKey,
1953
+ error
1954
+ });
1955
+ }
1956
+ const current = subagentRuns.get(params.runId);
1957
+ if (!current || typeof current.endedAt !== "number" || typeof current.cleanupCompletedAt === "number" || current.pauseReason === "sessions_yield") return;
1958
+ try {
1959
+ await completeSubagentRun(params);
1960
+ return;
1961
+ } catch (retryError) {
1962
+ log.warn("failed to complete subagent run after retry; retrying ended cleanup", {
1963
+ source,
1964
+ runId: params.runId,
1965
+ childSessionKey: current.childSessionKey,
1966
+ error: retryError
1967
+ });
1968
+ }
1969
+ const latest = subagentRuns.get(params.runId);
1970
+ if (!latest || typeof latest.endedAt !== "number" || typeof latest.cleanupCompletedAt === "number" || latest.pauseReason === "sessions_yield") return;
1971
+ latest.cleanupHandled = false;
1972
+ resumedRuns.delete(params.runId);
1973
+ resumeSubagentRun(params.runId);
1974
+ }
1975
+ function completeSubagentRunInBackground(params, source) {
1976
+ completeSubagentRunWithRecovery(params, source);
1977
+ }
1978
+ function schedulePendingLifecycleError(params) {
1979
+ clearPendingLifecycleTimeout(params.runId);
1980
+ clearPendingLifecycleError(params.runId);
1981
+ const timer = setTimeout(() => {
1982
+ const pending = pendingLifecycleErrorByRunId.get(params.runId);
1983
+ if (!pending || pending.timer !== timer) return;
1984
+ pendingLifecycleErrorByRunId.delete(params.runId);
1985
+ const entry = subagentRuns.get(params.runId);
1986
+ if (!entry) return;
1987
+ if (entry.endedReason === "subagent-complete" || entry.outcome?.status === "ok") return;
1988
+ completeSubagentRunInBackground({
1989
+ runId: params.runId,
1990
+ endedAt: pending.endedAt,
1991
+ outcome: {
1992
+ status: "error",
1993
+ error: pending.error
1994
+ },
1995
+ reason: SUBAGENT_ENDED_REASON_ERROR,
1996
+ sendFarewell: true,
1997
+ accountId: entry.requesterOrigin?.accountId,
1998
+ triggerCleanup: true,
1999
+ startedAt: pending.startedAt
2000
+ }, "lifecycle-error-grace");
2001
+ }, LIFECYCLE_ERROR_RETRY_GRACE_MS);
2002
+ timer.unref?.();
2003
+ pendingLifecycleErrorByRunId.set(params.runId, {
2004
+ timer,
2005
+ endedAt: params.endedAt,
2006
+ startedAt: params.startedAt,
2007
+ error: params.error
2008
+ });
2009
+ }
2010
+ function schedulePendingLifecycleTimeout(params) {
2011
+ clearPendingLifecycleError(params.runId);
2012
+ clearPendingLifecycleTimeout(params.runId);
2013
+ const timer = setTimeout(() => {
2014
+ const pending = pendingLifecycleTimeoutByRunId.get(params.runId);
2015
+ if (!pending || pending.timer !== timer) return;
2016
+ pendingLifecycleTimeoutByRunId.delete(params.runId);
2017
+ const entry = subagentRuns.get(params.runId);
2018
+ if (!entry) return;
2019
+ if (entry.outcome?.status === "ok") return;
2020
+ completeSubagentRunInBackground({
2021
+ runId: params.runId,
2022
+ endedAt: pending.endedAt,
2023
+ outcome: { status: "timeout" },
2024
+ reason: SUBAGENT_ENDED_REASON_COMPLETE,
2025
+ sendFarewell: true,
2026
+ accountId: entry.requesterOrigin?.accountId,
2027
+ triggerCleanup: true,
2028
+ startedAt: pending.startedAt
2029
+ }, "lifecycle-timeout-grace");
2030
+ }, LIFECYCLE_TIMEOUT_RETRY_GRACE_MS);
2031
+ timer.unref?.();
2032
+ pendingLifecycleTimeoutByRunId.set(params.runId, {
2033
+ timer,
2034
+ endedAt: params.endedAt,
2035
+ startedAt: params.startedAt
2036
+ });
2037
+ }
2038
+ async function notifyContextEngineSubagentEnded(params) {
2039
+ try {
2040
+ const cfg = subagentRegistryDeps.getRuntimeConfig();
2041
+ await ensureSubagentRegistryPluginRuntimeLoaded({
2042
+ config: cfg,
2043
+ workspaceDir: params.workspaceDir,
2044
+ allowGatewaySubagentBinding: true
2045
+ });
2046
+ const engine = await resolveSubagentRegistryContextEngine(cfg, {
2047
+ agentDir: params.agentDir,
2048
+ workspaceDir: params.workspaceDir
2049
+ });
2050
+ if (!engine.onSubagentEnded) return;
2051
+ await engine.onSubagentEnded(params);
2052
+ } catch (err) {
2053
+ log.warn("context-engine onSubagentEnded failed (best-effort)", { err });
2054
+ }
2055
+ }
2056
+ function suppressAnnounceForSteerRestart(entry) {
2057
+ return entry?.suppressAnnounceReason === "steer-restart";
2058
+ }
2059
+ function shouldKeepThreadBindingAfterRun(params) {
2060
+ if (params.reason === "subagent-killed") return false;
2061
+ return params.entry.spawnMode === "session";
2062
+ }
2063
+ function shouldEmitEndedHookForRun(params) {
2064
+ return !shouldKeepThreadBindingAfterRun(params);
2065
+ }
2066
+ async function emitSubagentEndedHookForRun(params) {
2067
+ if (params.entry.endedHookEmittedAt) return;
2068
+ await ensureSubagentRegistryPluginRuntimeLoaded({
2069
+ config: subagentRegistryDeps.getRuntimeConfig(),
2070
+ workspaceDir: params.entry.workspaceDir,
2071
+ allowGatewaySubagentBinding: true
2072
+ });
2073
+ const reason = params.reason ?? params.entry.endedReason ?? "subagent-complete";
2074
+ const outcome = resolveLifecycleOutcomeFromRunOutcome(params.entry.outcome);
2075
+ const error = params.entry.outcome?.status === "error" ? params.entry.outcome.error : void 0;
2076
+ await emitSubagentEndedHookOnce({
2077
+ entry: params.entry,
2078
+ reason,
2079
+ sendFarewell: params.sendFarewell,
2080
+ accountId: params.accountId ?? params.entry.requesterOrigin?.accountId,
2081
+ outcome,
2082
+ error,
2083
+ inFlightRunIds: endedHookInFlightRunIds,
2084
+ persist: persistSubagentRuns
2085
+ });
2086
+ }
2087
+ const { clearScheduledResumeTimers, completeCleanupBookkeeping, completeSubagentRun, finalizeResumedAnnounceGiveUp, refreshFrozenResultFromSession, startSubagentAnnounceCleanupFlow } = createSubagentRegistryLifecycleController({
2088
+ runs: subagentRuns,
2089
+ resumedRuns,
2090
+ subagentAnnounceTimeoutMs: SUBAGENT_ANNOUNCE_TIMEOUT_MS,
2091
+ persist: persistSubagentRuns,
2092
+ clearPendingLifecycleError,
2093
+ countPendingDescendantRuns,
2094
+ suppressAnnounceForSteerRestart,
2095
+ shouldEmitEndedHookForRun,
2096
+ emitSubagentEndedHookForRun,
2097
+ notifyContextEngineSubagentEnded,
2098
+ resumeSubagentRun,
2099
+ callGateway: (request) => subagentRegistryDeps.callGateway(request),
2100
+ captureSubagentCompletionReply: (sessionKey, options) => subagentRegistryDeps.captureSubagentCompletionReply(sessionKey, options),
2101
+ cleanupBrowserSessionsForLifecycleEnd: (args) => subagentRegistryDeps.cleanupBrowserSessionsForLifecycleEnd(args),
2102
+ runSubagentAnnounceFlow: (params) => subagentRegistryDeps.runSubagentAnnounceFlow(params),
2103
+ warn: (message, meta) => log.warn(message, meta)
2104
+ });
2105
+ function resumeSubagentRun(runId) {
2106
+ if (!runId || resumedRuns.has(runId)) return;
2107
+ const entry = subagentRuns.get(runId);
2108
+ if (!entry) return;
2109
+ if (entry.cleanupCompletedAt) return;
2110
+ if (typeof entry.endedAt === "number" && isDeliverySuspended(entry)) return;
2111
+ if (entry.pauseReason === "sessions_yield") return;
2112
+ if (getDeliveryAttemptCount(entry) >= 3) {
2113
+ finalizeResumedAnnounceGiveUp({
2114
+ runId,
2115
+ entry,
2116
+ reason: "retry-limit"
2117
+ });
2118
+ return;
2119
+ }
2120
+ if (entry.expectsCompletionMessage !== true && typeof entry.endedAt === "number" && Date.now() - entry.endedAt > 3e5) {
2121
+ finalizeResumedAnnounceGiveUp({
2122
+ runId,
2123
+ entry,
2124
+ reason: "expiry"
2125
+ });
2126
+ return;
2127
+ }
2128
+ const now = Date.now();
2129
+ const lastAttemptAt = getDeliveryLastAttemptAt(entry);
2130
+ const delayMs = resolveAnnounceRetryDelayMs(getDeliveryAttemptCount(entry));
2131
+ const earliestRetryAt = (lastAttemptAt ?? 0) + delayMs;
2132
+ if (entry.expectsCompletionMessage === true && lastAttemptAt && now < earliestRetryAt) {
2133
+ const waitMs = Math.max(1, earliestRetryAt - now);
2134
+ const scheduledEntry = entry;
2135
+ const timer = setTimeout(() => {
2136
+ resumeRetryTimers.delete(timer);
2137
+ if (subagentRuns.get(runId) !== scheduledEntry) return;
2138
+ resumedRuns.delete(runId);
2139
+ resumeSubagentRun(runId);
2140
+ }, waitMs);
2141
+ timer.unref?.();
2142
+ resumeRetryTimers.add(timer);
2143
+ resumedRuns.add(runId);
2144
+ return;
2145
+ }
2146
+ if (typeof entry.endedAt === "number" && entry.endedAt > 0) {
2147
+ const orphanReason = resolveSubagentRunOrphanReason({ entry });
2148
+ if (orphanReason) {
2149
+ if (reconcileOrphanedRun({
2150
+ runId,
2151
+ entry,
2152
+ reason: orphanReason,
2153
+ source: "resume",
2154
+ runs: subagentRuns,
2155
+ resumedRuns
2156
+ })) persistSubagentRuns();
2157
+ return;
2158
+ }
2159
+ if (suppressAnnounceForSteerRestart(entry)) {
2160
+ resumedRuns.add(runId);
2161
+ return;
2162
+ }
2163
+ if (!startSubagentAnnounceCleanupFlow(runId, entry)) return;
2164
+ resumedRuns.add(runId);
2165
+ return;
2166
+ }
2167
+ const waitTimeoutMs = resolveSubagentWaitTimeoutMs(subagentRegistryDeps.getRuntimeConfig(), entry.runTimeoutSeconds);
2168
+ subagentRunManager.waitForSubagentCompletion(runId, waitTimeoutMs, entry, true);
2169
+ resumedRuns.add(runId);
2170
+ }
2171
+ function restoreSubagentRunsOnce() {
2172
+ if (restoreAttempted) return;
2173
+ restoreAttempted = true;
2174
+ try {
2175
+ if (subagentRegistryDeps.restoreSubagentRunsFromDisk({
2176
+ runs: subagentRuns,
2177
+ mergeOnly: true
2178
+ }) === 0) return;
2179
+ if (reconcileOrphanedRestoredRuns({
2180
+ runs: subagentRuns,
2181
+ resumedRuns
2182
+ })) persistSubagentRuns();
2183
+ if (subagentRuns.size === 0) return;
2184
+ ensureListener();
2185
+ startSweeper();
2186
+ for (const runId of subagentRuns.keys()) resumeSubagentRun(runId);
2187
+ scheduleSubagentOrphanRecovery();
2188
+ } catch (err) {
2189
+ log.warn(`failed to restore subagent runs from disk: ${err instanceof Error ? err.message : String(err)}`);
2190
+ }
2191
+ }
2192
+ function resolveSubagentWaitTimeoutMs(cfg, runTimeoutSeconds) {
2193
+ return subagentRegistryDeps.resolveAgentTimeoutMs({
2194
+ cfg,
2195
+ overrideSeconds: runTimeoutSeconds ?? 0
2196
+ });
2197
+ }
2198
+ function startSweeper() {
2199
+ if (sweeper) return;
2200
+ sweeper = setInterval(() => {
2201
+ if (sweepInProgress) return;
2202
+ sweepSubagentRuns();
2203
+ }, 6e4);
2204
+ sweeper.unref?.();
2205
+ }
2206
+ function stopSweeper() {
2207
+ if (!sweeper) return;
2208
+ clearInterval(sweeper);
2209
+ sweeper = null;
2210
+ }
2211
+ function isSuspendedPendingFinalDelivery(entry) {
2212
+ return typeof entry.endedAt === "number" && isDeliverySuspended(entry);
2213
+ }
2214
+ function resolveSuspendedDeliveryExpiryMs(entry) {
2215
+ const requester = entry.requesterSessionKey;
2216
+ if (requester.includes(":cron:")) return SUSPENDED_DELIVERY_CRON_EXPIRY_MS;
2217
+ if (requester.includes(":subagent:")) return SUSPENDED_DELIVERY_SUBAGENT_EXPIRY_MS;
2218
+ return SUSPENDED_DELIVERY_INTERACTIVE_EXPIRY_MS;
2219
+ }
2220
+ async function discardSuspendedPendingFinalDelivery(runId, entry, now, reason) {
2221
+ const delivery = ensureDeliveryState(entry);
2222
+ const payload = delivery.payload;
2223
+ delivery.status = "discarded";
2224
+ delivery.discardedAt = now;
2225
+ delivery.discardReason = reason;
2226
+ delivery.discardedPayloadSummary = {
2227
+ requesterSessionKey: payload?.requesterSessionKey ?? entry.requesterSessionKey,
2228
+ childSessionKey: payload?.childSessionKey ?? entry.childSessionKey,
2229
+ childRunId: payload?.childRunId ?? entry.runId,
2230
+ endedAt: payload?.endedAt ?? entry.endedAt,
2231
+ status: payload?.outcome?.status ?? entry.outcome?.status,
2232
+ lastError: getDeliveryLastError(entry) ?? null
2233
+ };
2234
+ delivery.payload = void 0;
2235
+ delivery.createdAt = void 0;
2236
+ delivery.lastAttemptAt = void 0;
2237
+ delivery.attemptCount = void 0;
2238
+ delivery.lastError = void 0;
2239
+ delivery.suspendedAt = void 0;
2240
+ delivery.suspendedReason = void 0;
2241
+ entry.wakeOnDescendantSettle = void 0;
2242
+ const completion = ensureCompletionState(entry);
2243
+ completion.fallbackResultText = void 0;
2244
+ completion.fallbackCapturedAt = void 0;
2245
+ entry.cleanupHandled = true;
2246
+ delivery.announcedAt = void 0;
2247
+ resumedRuns.delete(runId);
2248
+ clearPendingLifecycleError(runId);
2249
+ clearPendingLifecycleTimeout(runId);
2250
+ log.warn("subagent suspended delivery discarded", {
2251
+ reason,
2252
+ runId: entry.runId,
2253
+ childSessionKey: entry.childSessionKey,
2254
+ requesterSessionKey: entry.requesterSessionKey
2255
+ });
2256
+ if (entry.cleanup === "delete" || !entry.retainAttachmentsOnKeep) await safeRemoveAttachmentsDir(entry);
2257
+ await removeInternalSessionEffectsTranscript(entry.execution?.transcriptFile);
2258
+ const completionReason = entry.endedReason ?? "subagent-complete";
2259
+ completeCleanupBookkeeping({
2260
+ runId,
2261
+ entry,
2262
+ cleanup: entry.cleanup,
2263
+ completedAt: now
2264
+ });
2265
+ if (entry.expectsCompletionMessage === true && shouldEmitEndedHookForRun({
2266
+ entry,
2267
+ reason: completionReason
2268
+ })) await emitSubagentEndedHookForRun({
2269
+ entry,
2270
+ reason: completionReason,
2271
+ sendFarewell: true
2272
+ });
2273
+ }
2274
+ async function sweepSubagentRuns() {
2275
+ if (sweepInProgress) return;
2276
+ sweepInProgress = true;
2277
+ try {
2278
+ const now = Date.now();
2279
+ const storeCache = /* @__PURE__ */ new Map();
2280
+ let mutated = false;
2281
+ const suspendedEntries = [...subagentRuns.entries()].filter(([, entry]) => isSuspendedPendingFinalDelivery(entry));
2282
+ const pressureDiscardRunIds = /* @__PURE__ */ new Set();
2283
+ if (suspendedEntries.length > SUSPENDED_DELIVERY_HARD_CAP) {
2284
+ const pressureCount = Math.max(0, suspendedEntries.length - SUSPENDED_DELIVERY_PRESSURE_TARGET);
2285
+ for (const [runId] of suspendedEntries.toSorted((a, b) => (a[1].delivery?.suspendedAt ?? 0) - (b[1].delivery?.suspendedAt ?? 0)).slice(0, pressureCount)) pressureDiscardRunIds.add(runId);
2286
+ log.warn("subagent suspended delivery backlog exceeded pressure cap", {
2287
+ suspendedCount: suspendedEntries.length,
2288
+ softCap: SUSPENDED_DELIVERY_SOFT_CAP,
2289
+ hardCap: SUSPENDED_DELIVERY_HARD_CAP,
2290
+ pressureTarget: SUSPENDED_DELIVERY_PRESSURE_TARGET,
2291
+ pressureDiscardCount: pressureDiscardRunIds.size
2292
+ });
2293
+ }
2294
+ for (const [runId, entry] of subagentRuns.entries()) {
2295
+ if (isSuspendedPendingFinalDelivery(entry)) {
2296
+ const expired = now - (entry.delivery?.suspendedAt ?? now) >= resolveSuspendedDeliveryExpiryMs(entry);
2297
+ if (expired || pressureDiscardRunIds.has(runId)) {
2298
+ await discardSuspendedPendingFinalDelivery(runId, entry, now, expired ? "expired" : "pressure-pruned");
2299
+ mutated = true;
2300
+ }
2301
+ continue;
2302
+ }
2303
+ if (typeof entry.endedAt !== "number") {
2304
+ const hasLiveRunContext = Boolean(getAgentRunContext(runId));
2305
+ const activeAgeMs = now - (entry.startedAt ?? entry.createdAt);
2306
+ if (!hasLiveRunContext && activeAgeMs >= STALE_ACTIVE_SUBAGENT_GRACE_MS) {
2307
+ const orphanReason = resolveSubagentRunOrphanReason({
2308
+ entry,
2309
+ storeCache
2310
+ });
2311
+ if (orphanReason) {
2312
+ if (reconcileOrphanedRun({
2313
+ runId,
2314
+ entry,
2315
+ reason: orphanReason,
2316
+ source: "resume",
2317
+ runs: subagentRuns,
2318
+ resumedRuns
2319
+ })) mutated = true;
2320
+ continue;
2321
+ }
2322
+ const sessionEntry = loadSubagentSessionEntry({
2323
+ childSessionKey: entry.childSessionKey,
2324
+ storeCache
2325
+ });
2326
+ const completion = resolveCompletionFromSessionEntry(sessionEntry, now, { notBeforeMs: entry.startedAt ?? entry.createdAt });
2327
+ if (completion) {
2328
+ await completeSubagentRunWithRecovery({
2329
+ runId,
2330
+ startedAt: completion.startedAt,
2331
+ endedAt: completion.endedAt,
2332
+ outcome: completion.outcome,
2333
+ reason: completion.reason,
2334
+ sendFarewell: true,
2335
+ accountId: entry.requesterOrigin?.accountId,
2336
+ triggerCleanup: true
2337
+ }, "sweeper-session-completion");
2338
+ continue;
2339
+ }
2340
+ if (sessionEntry?.abortedLastRun === true) {
2341
+ scheduleSubagentOrphanRecovery({ delayMs: 1e3 });
2342
+ continue;
2343
+ }
2344
+ await completeSubagentRunWithRecovery({
2345
+ runId,
2346
+ endedAt: now,
2347
+ outcome: {
2348
+ status: "error",
2349
+ error: "subagent run lost active execution context"
2350
+ },
2351
+ reason: SUBAGENT_ENDED_REASON_ERROR,
2352
+ sendFarewell: true,
2353
+ accountId: entry.requesterOrigin?.accountId,
2354
+ triggerCleanup: true
2355
+ }, "sweeper-lost-context");
2356
+ continue;
2357
+ }
2358
+ }
2359
+ if (!entry.archiveAtMs && entry.cleanup === "keep" && entry.spawnMode !== "session") continue;
2360
+ if (!entry.archiveAtMs) {
2361
+ if (typeof entry.cleanupCompletedAt === "number" && now - entry.cleanupCompletedAt > SESSION_RUN_TTL_MS) {
2362
+ clearPendingLifecycleError(runId);
2363
+ notifyContextEngineSubagentEnded({
2364
+ childSessionKey: entry.childSessionKey,
2365
+ reason: "swept",
2366
+ agentDir: entry.agentDir,
2367
+ workspaceDir: entry.workspaceDir
2368
+ });
2369
+ subagentRuns.delete(runId);
2370
+ mutated = true;
2371
+ if (!entry.retainAttachmentsOnKeep) await safeRemoveAttachmentsDir(entry);
2372
+ }
2373
+ continue;
2374
+ }
2375
+ if (entry.archiveAtMs > now) continue;
2376
+ clearPendingLifecycleError(runId);
2377
+ try {
2378
+ await subagentRegistryDeps.callGateway({
2379
+ method: "sessions.delete",
2380
+ params: {
2381
+ key: entry.childSessionKey,
2382
+ deleteTranscript: true,
2383
+ emitLifecycleHooks: false
2384
+ },
2385
+ timeoutMs: 1e4
2386
+ });
2387
+ } catch (err) {
2388
+ log.warn("sessions.delete failed during subagent sweep; keeping run for retry", {
2389
+ runId,
2390
+ childSessionKey: entry.childSessionKey,
2391
+ err
2392
+ });
2393
+ continue;
2394
+ }
2395
+ subagentRuns.delete(runId);
2396
+ mutated = true;
2397
+ await safeRemoveAttachmentsDir(entry);
2398
+ notifyContextEngineSubagentEnded({
2399
+ childSessionKey: entry.childSessionKey,
2400
+ reason: "swept",
2401
+ agentDir: entry.agentDir,
2402
+ workspaceDir: entry.workspaceDir
2403
+ });
2404
+ }
2405
+ for (const [runId, pending] of pendingLifecycleErrorByRunId.entries()) if (now - pending.endedAt > PENDING_LIFECYCLE_TERMINAL_TTL_MS) clearPendingLifecycleError(runId);
2406
+ for (const [runId, pending] of pendingLifecycleTimeoutByRunId.entries()) if (now - pending.endedAt > PENDING_LIFECYCLE_TERMINAL_TTL_MS) clearPendingLifecycleTimeout(runId);
2407
+ if (mutated) persistSubagentRuns();
2408
+ if (subagentRuns.size === 0) stopSweeper();
2409
+ } finally {
2410
+ sweepInProgress = false;
2411
+ }
2412
+ }
2413
+ function ensureListener() {
2414
+ if (listenerStarted) return;
2415
+ listenerStarted = true;
2416
+ subagentRegistryDeps.onAgentEvent((evt) => {
2417
+ (async () => {
2418
+ if (!evt || evt.stream !== "lifecycle") return;
2419
+ const phase = evt.data?.phase;
2420
+ const entry = subagentRuns.get(evt.runId);
2421
+ if (!entry) {
2422
+ if (phase === "end" && typeof evt.sessionKey === "string") await refreshFrozenResultFromSession(evt.sessionKey);
2423
+ return;
2424
+ }
2425
+ if (phase === "start") {
2426
+ clearPendingLifecycleError(evt.runId);
2427
+ clearPendingLifecycleTimeout(evt.runId);
2428
+ const startedAt = typeof evt.data?.startedAt === "number" ? evt.data.startedAt : void 0;
2429
+ if (startedAt) {
2430
+ entry.startedAt = startedAt;
2431
+ if (typeof entry.sessionStartedAt !== "number") entry.sessionStartedAt = startedAt;
2432
+ persistSubagentRuns();
2433
+ }
2434
+ return;
2435
+ }
2436
+ if (phase !== "end" && phase !== "error") return;
2437
+ const endedAt = typeof evt.data?.endedAt === "number" ? evt.data.endedAt : Date.now();
2438
+ const startedAt = typeof evt.data?.startedAt === "number" ? evt.data.startedAt : void 0;
2439
+ const error = typeof evt.data?.error === "string" ? evt.data.error : void 0;
2440
+ const livenessState = typeof evt.data?.livenessState === "string" ? evt.data.livenessState : void 0;
2441
+ const stopReason = typeof evt.data?.stopReason === "string" ? evt.data.stopReason : void 0;
2442
+ if (phase === "error") {
2443
+ schedulePendingLifecycleError({
2444
+ runId: evt.runId,
2445
+ endedAt,
2446
+ startedAt,
2447
+ error
2448
+ });
2449
+ return;
2450
+ }
2451
+ if (isAbortedAgentStopReason(stopReason)) {
2452
+ clearPendingLifecycleError(evt.runId);
2453
+ clearPendingLifecycleTimeout(evt.runId);
2454
+ await completeSubagentRunWithRecovery({
2455
+ runId: evt.runId,
2456
+ endedAt,
2457
+ outcome: {
2458
+ status: "error",
2459
+ error: "subagent run terminated"
2460
+ },
2461
+ reason: SUBAGENT_ENDED_REASON_KILLED,
2462
+ sendFarewell: true,
2463
+ accountId: entry.requesterOrigin?.accountId,
2464
+ triggerCleanup: true,
2465
+ startedAt
2466
+ }, "lifecycle-killed-event");
2467
+ return;
2468
+ }
2469
+ if (isBlockedLivenessState(livenessState)) {
2470
+ clearPendingLifecycleError(evt.runId);
2471
+ clearPendingLifecycleTimeout(evt.runId);
2472
+ await completeSubagentRunWithRecovery({
2473
+ runId: evt.runId,
2474
+ endedAt,
2475
+ outcome: {
2476
+ status: "error",
2477
+ error: formatBlockedLivenessError(error)
2478
+ },
2479
+ reason: SUBAGENT_ENDED_REASON_ERROR,
2480
+ sendFarewell: true,
2481
+ accountId: entry.requesterOrigin?.accountId,
2482
+ triggerCleanup: true,
2483
+ startedAt
2484
+ }, "lifecycle-blocked-event");
2485
+ return;
2486
+ }
2487
+ if (evt.data?.aborted) {
2488
+ schedulePendingLifecycleTimeout({
2489
+ runId: evt.runId,
2490
+ endedAt,
2491
+ startedAt
2492
+ });
2493
+ return;
2494
+ }
2495
+ if (evt.data?.yielded === true) {
2496
+ if (markSubagentRunPausedAfterYield({
2497
+ entry,
2498
+ endedAt,
2499
+ startedAt: startedAt ?? entry.startedAt
2500
+ })) persistSubagentRuns();
2501
+ return;
2502
+ }
2503
+ clearPendingLifecycleError(evt.runId);
2504
+ clearPendingLifecycleTimeout(evt.runId);
2505
+ await completeSubagentRunWithRecovery({
2506
+ runId: evt.runId,
2507
+ endedAt,
2508
+ outcome: { status: "ok" },
2509
+ reason: SUBAGENT_ENDED_REASON_COMPLETE,
2510
+ sendFarewell: true,
2511
+ accountId: entry.requesterOrigin?.accountId,
2512
+ triggerCleanup: true,
2513
+ startedAt
2514
+ }, "lifecycle-ok-event");
2515
+ })().catch((err) => {
2516
+ log.warn("lifecycle event handler failed", {
2517
+ err,
2518
+ runId: evt.runId
2519
+ });
2520
+ });
2521
+ });
2522
+ }
2523
+ const subagentRunManager = createSubagentRunManager({
2524
+ runs: subagentRuns,
2525
+ resumedRuns,
2526
+ endedHookInFlightRunIds,
2527
+ persist: persistSubagentRuns,
2528
+ persistOrThrow: persistSubagentRunsOrThrow,
2529
+ callGateway: (request) => subagentRegistryDeps.callGateway(request),
2530
+ getRuntimeConfig: () => subagentRegistryDeps.getRuntimeConfig(),
2531
+ ensureRuntimePluginsLoaded: (args) => ensureSubagentRegistryPluginRuntimeLoaded(args),
2532
+ ensureListener,
2533
+ startSweeper,
2534
+ stopSweeper,
2535
+ resumeSubagentRun,
2536
+ clearPendingLifecycleError,
2537
+ resolveSubagentWaitTimeoutMs,
2538
+ scheduleOrphanRecovery: (args) => scheduleSubagentOrphanRecovery(args),
2539
+ resolveSubagentSessionCompletion,
2540
+ resolveSubagentSessionStartedAt,
2541
+ notifyContextEngineSubagentEnded,
2542
+ completeCleanupBookkeeping,
2543
+ completeSubagentRun
2544
+ });
2545
+ configureSubagentRegistrySteerRuntime({
2546
+ replaceSubagentRunAfterSteer: (params) => subagentRunManager.replaceSubagentRunAfterSteer(params),
2547
+ finalizeInterruptedSubagentRun: async (params) => await finalizeInterruptedSubagentRun(params)
2548
+ });
2549
+ function markSubagentRunForSteerRestart(runId) {
2550
+ return subagentRunManager.markSubagentRunForSteerRestart(runId);
2551
+ }
2552
+ function clearSubagentRunSteerRestart(runId) {
2553
+ return subagentRunManager.clearSubagentRunSteerRestart(runId);
2554
+ }
2555
+ function replaceSubagentRunAfterSteer(params) {
2556
+ return subagentRunManager.replaceSubagentRunAfterSteer(params);
2557
+ }
2558
+ function registerSubagentRun(params) {
2559
+ subagentRunManager.registerSubagentRun(params);
2560
+ }
2561
+ async function finalizeInterruptedSubagentRun(params) {
2562
+ const runIds = /* @__PURE__ */ new Set();
2563
+ if (typeof params.runId === "string" && params.runId.trim()) runIds.add(params.runId.trim());
2564
+ if (typeof params.childSessionKey === "string" && params.childSessionKey.trim()) {
2565
+ const childSessionKey = params.childSessionKey.trim();
2566
+ for (const [runId, entry] of subagentRuns.entries()) if (entry.childSessionKey === childSessionKey) runIds.add(runId);
2567
+ }
2568
+ if (runIds.size === 0) return 0;
2569
+ const endedAt = typeof params.endedAt === "number" && Number.isFinite(params.endedAt) ? params.endedAt : Date.now();
2570
+ let updated = 0;
2571
+ for (const runId of runIds) {
2572
+ clearPendingLifecycleError(runId);
2573
+ clearPendingLifecycleTimeout(runId);
2574
+ const entry = subagentRuns.get(runId);
2575
+ if (!entry || typeof entry.cleanupCompletedAt === "number") continue;
2576
+ await completeSubagentRunWithRecovery({
2577
+ runId,
2578
+ endedAt,
2579
+ outcome: {
2580
+ status: "error",
2581
+ error: params.error
2582
+ },
2583
+ reason: SUBAGENT_ENDED_REASON_ERROR,
2584
+ sendFarewell: true,
2585
+ accountId: entry.requesterOrigin?.accountId,
2586
+ triggerCleanup: true
2587
+ }, "explicit-failed-mark");
2588
+ updated += 1;
2589
+ }
2590
+ return updated;
2591
+ }
2592
+ function markSubagentRunTerminated(params) {
2593
+ return subagentRunManager.markSubagentRunTerminated(params);
2594
+ }
2595
+ function listSubagentRunsForController(controllerSessionKey) {
2596
+ return listRunsForControllerFromRuns(subagentRegistryDeps.getSubagentRunsSnapshotForRead(subagentRuns), controllerSessionKey);
2597
+ }
2598
+ function countActiveRunsForSession(requesterSessionKey) {
2599
+ return countActiveRunsForSessionFromRuns(subagentRegistryDeps.getSubagentRunsSnapshotForRead(subagentRuns), requesterSessionKey);
2600
+ }
2601
+ function countActiveDescendantRuns(rootSessionKey) {
2602
+ return countActiveDescendantRunsFromRuns(subagentRegistryDeps.getSubagentRunsSnapshotForRead(subagentRuns), rootSessionKey);
2603
+ }
2604
+ function countPendingDescendantRuns(rootSessionKey) {
2605
+ return countPendingDescendantRunsFromRuns(subagentRegistryDeps.getSubagentRunsSnapshotForRead(subagentRuns), rootSessionKey);
2606
+ }
2607
+ function listDescendantRunsForRequester(rootSessionKey) {
2608
+ return listDescendantRunsForRequesterFromRuns(subagentRegistryDeps.getSubagentRunsSnapshotForRead(subagentRuns), rootSessionKey);
2609
+ }
2610
+ function getSubagentRunByChildSessionKey(childSessionKey) {
2611
+ return getSubagentRunByChildSessionKeyFromRuns(subagentRegistryDeps.getSubagentRunsSnapshotForRead(subagentRuns), childSessionKey);
2612
+ }
2613
+ function getLatestSubagentRunByChildSessionKey(childSessionKey) {
2614
+ const key = childSessionKey.trim();
2615
+ if (!key) return null;
2616
+ let latest = null;
2617
+ for (const entry of subagentRegistryDeps.getSubagentRunsSnapshotForRead(subagentRuns).values()) {
2618
+ if (entry.childSessionKey !== key) continue;
2619
+ if (!latest || entry.createdAt > latest.createdAt) latest = entry;
2620
+ }
2621
+ return latest;
2622
+ }
2623
+ function initSubagentRegistry() {
2624
+ restoreSubagentRunsOnce();
2625
+ }
2626
+ //#endregion
2627
+ export { finalizeInterruptedSubagentRun as a, initSubagentRegistry as c, markSubagentRunForSteerRestart as d, markSubagentRunTerminated as f, listSessionMaintenanceProtectedSubagentSessionKeys as g, scheduleSubagentOrphanRecovery as h, countPendingDescendantRuns as i, listDescendantRunsForRequester as l, replaceSubagentRunAfterSteer as m, countActiveDescendantRuns as n, getLatestSubagentRunByChildSessionKey as o, registerSubagentRun as p, countActiveRunsForSession as r, getSubagentRunByChildSessionKey as s, clearSubagentRunSteerRestart as t, listSubagentRunsForController as u };