fengming 0.3.8 → 0.3.9

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 (1263) hide show
  1. package/CHANGELOG.md +8 -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/bundled-channel-config-schema-DpdKMATU.d.ts +3168 -0
  61. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  62. package/dist/capability-cli-CiVGX7ut.js +1809 -0
  63. package/dist/channel-BIVwHq7P.js +2309 -0
  64. package/dist/channel-CiA2FVdL.d.ts +427 -0
  65. package/dist/channel-core-Cj9JTqeu.js +5 -0
  66. package/dist/channel-core-DjVpcH1C.d.ts +6 -0
  67. package/dist/channel-entry-contract-Bs_54m1D.d.ts +114 -0
  68. package/dist/channel-inbound-CdUdeQRa.js +121 -0
  69. package/dist/channel-inbound-iGiqx6CS.d.ts +97 -0
  70. package/dist/channel-message-C3QPaDUk.js +12 -0
  71. package/dist/channel-message-CXDjxb2U.d.ts +9 -0
  72. package/dist/channel-outbound-ofvvmMSK.d.ts +325 -0
  73. package/dist/channel-pairing-DKscOV1K.d.ts +58 -0
  74. package/dist/channel.runtime-VW6PW_ez.js +697 -0
  75. package/dist/channel.runtime.js +1 -1
  76. package/dist/chat-CFkQepUQ.js +3 -0
  77. package/dist/chat-Czh_tXM0.js +2940 -0
  78. package/dist/chrome-B2cq8YyH.js +1517 -0
  79. package/dist/cli/run-main.js +5 -5
  80. package/dist/cli-compaction-Dxv4nt7R.js +363 -0
  81. package/dist/cli-runner-CimXSTVs.js +2 -0
  82. package/dist/cli-runner-orCzE1Sr.js +597 -0
  83. package/dist/cli-runner.runtime-CsW0dXJW.js +3 -0
  84. package/dist/cli-runner.runtime-DgPrc1do.js +4 -0
  85. package/dist/cli-runner.runtime.js +1 -1
  86. package/dist/cli-startup-metadata.json +10 -12
  87. package/dist/command-registry-C5ooX6PF.js +4 -0
  88. package/dist/command-registry-DMB-HKIk.js +9 -0
  89. package/dist/command-registry-core-B2w_XWvn.js +114 -0
  90. package/dist/command-status.runtime-Bdy3Dkar.js +90 -0
  91. package/dist/command-status.runtime.js +1 -1
  92. package/dist/commands-compact.runtime-Bk2jTQo6.js +10 -0
  93. package/dist/commands-compact.runtime.js +1 -1
  94. package/dist/commands-handlers.runtime-Csw1og0U.js +6327 -0
  95. package/dist/commands-handlers.runtime.js +1 -1
  96. package/dist/commands-mRqmLIVz.d.ts +117 -0
  97. package/dist/commands-status-Dgrj_ubK.js +3 -0
  98. package/dist/commands-status-s32HJOpD.js +16 -0
  99. package/dist/commands-status.runtime-Dgrj_ubK.js +3 -0
  100. package/dist/commands-status.runtime.js +1 -1
  101. package/dist/commands-subagents-control.runtime-C_hnOO9l.js +2 -0
  102. package/dist/commands-subagents-control.runtime.js +1 -1
  103. package/dist/commands-system-prompt-CQV742Cc.js +2 -0
  104. package/dist/commands-system-prompt-DTfsKwK1.js +161 -0
  105. package/dist/commands-types-MXHhrssO.d.ts +132 -0
  106. package/dist/commands.runtime-akiVK67l.js +175 -0
  107. package/dist/commands.runtime.js +1 -1
  108. package/dist/commitments/runtime.js +1 -1
  109. package/dist/compact-U6ZhvPtD.js +1165 -0
  110. package/dist/compact.runtime-36E5vKsC.js +12 -0
  111. package/dist/compact.runtime.js +1 -1
  112. package/dist/completion-cli-Bf4mEw2W.js +393 -0
  113. package/dist/config-BJJhHN9E.js +374 -0
  114. package/dist/config-mutations-swLu-j_p.js +161 -0
  115. package/dist/config-schema-Tjner6bM.d.ts +20 -0
  116. package/dist/context-engine-host-compat-6fkn_daV.js +280 -0
  117. package/dist/context-engine-host-compat-DtAZC1bS.js +2 -0
  118. package/dist/context-engine-lifecycle-R__Idxi1.js +627 -0
  119. package/dist/control-auth-DnkI94_D.js +114 -0
  120. package/dist/control-service-BBsamNjq.js +40 -0
  121. package/dist/control-service-BGpHj7RL.js +3 -0
  122. package/dist/control-ui/assets/activity-B2W-IeAT.js +124 -0
  123. package/dist/control-ui/assets/agents-mRUyNVCz.js +1030 -0
  124. package/dist/control-ui/assets/channels-8QHOqBnt.js +120 -0
  125. package/dist/control-ui/assets/cron-H3unP_mO.js +1016 -0
  126. package/dist/control-ui/assets/debug-CxLsQ9vH.js +97 -0
  127. package/dist/control-ui/assets/index-jtIYT0Eh.js +7214 -0
  128. package/dist/control-ui/assets/instances-B1JQeCRb.js +57 -0
  129. package/dist/control-ui/assets/nodes-RGOmq_1l.js +444 -0
  130. package/dist/control-ui/assets/sessions-C2O-Jgpg.js +425 -0
  131. package/dist/control-ui/assets/skills-jyJOYA4I.js +362 -0
  132. package/dist/control-ui/assets/workboard-uM_kK8cQ.js +402 -0
  133. package/dist/control-ui/index.html +1 -1
  134. package/dist/control-ui/sw.js +1 -1
  135. package/dist/conversation-runtime-DDekWU-U.js +31 -0
  136. package/dist/core-Bpk-qSJH.js +284 -0
  137. package/dist/core-Chrz4oRB.d.ts +223 -0
  138. package/dist/core-api-DSpUKNVW.js +2 -0
  139. package/dist/core-api-hLsW03Wo.js +5 -0
  140. package/dist/crestodian/crestodian.js +1 -1
  141. package/dist/crestodian/rescue-message.d.ts +1 -1
  142. package/dist/crestodian/rescue-message.js +1 -1
  143. package/dist/crestodian-C0x7JjF-.js +55 -0
  144. package/dist/delegate-BArFIZ4B.d.ts +30 -0
  145. package/dist/deliver-BnVp3VbL.d.ts +111 -0
  146. package/dist/delivery-queue-BFOASdf5.d.ts +161 -0
  147. package/dist/delivery-queue-runtime-BFfc8AEs.d.ts +9 -0
  148. package/dist/dialogue-No0NvYX7.js +37 -0
  149. package/dist/direct-dm-C-h88JJH.d.ts +79 -0
  150. package/dist/directive-handling.fast-lane-DTyDKhZb.js +70 -0
  151. package/dist/directive-handling.impl-DMReM6tu.js +2 -0
  152. package/dist/directive-handling.impl-DzPouhV-.js +823 -0
  153. package/dist/directive-handling.model-selection-BjwTBAZJ.js +122 -0
  154. package/dist/directive-handling.persist.runtime-D_O1okkR.js +274 -0
  155. package/dist/directive-handling.persist.runtime.js +1 -1
  156. package/dist/dispatch-Dtl-oRuN.js +2057 -0
  157. package/dist/dispatch-acp-transcript.runtime-M4y0Dq74.js +40 -0
  158. package/dist/dispatch-acp-transcript.runtime.js +1 -1
  159. package/dist/dispatch-acp.runtime-B8uCIKZS.js +18 -0
  160. package/dist/dispatch-acp.runtime.js +1 -1
  161. package/dist/dispatcher-DslvaRcj.js +106 -0
  162. package/dist/doctor-config-flow-LU2C94af.js +1819 -0
  163. package/dist/doctor-core-checks-BqcjExIZ.js +666 -0
  164. package/dist/doctor-core-checks-Diuk8l0N.js +2 -0
  165. package/dist/doctor-core-checks.runtime-DbS-kMZN.js +278 -0
  166. package/dist/doctor-core-checks.runtime.js +1 -1
  167. package/dist/doctor-health-BdqHwfYE.js +65 -0
  168. package/dist/doctor-health-contributions-DLLTVnll.js +874 -0
  169. package/dist/doctor-lint-PZqkVMWf.js +95 -0
  170. package/dist/doctor-mRfJMSb5.js +6 -0
  171. package/dist/doctor-state-integrity-Cdlm-peH.js +1257 -0
  172. package/dist/draft-stream-controls-B7uLonbw.d.ts +159 -0
  173. package/dist/embedded-agent-CEpOPW6X.js +4 -0
  174. package/dist/embedded-agent-CNINO_M-.d.ts +5 -0
  175. package/dist/embedded-agent-DxwzoZkp.js +4074 -0
  176. package/dist/embedded-agent.runtime-DDbhA85-.js +4 -0
  177. package/dist/embedded-agent.runtime.js +1 -1
  178. package/dist/embedded-backend-ChaKCepC.js +1581 -0
  179. package/dist/embedded-gateway-stub.runtime-e_ZxGhcW.js +12 -0
  180. package/dist/embedded-gateway-stub.runtime.js +1 -1
  181. package/dist/entry.d.ts +1 -1
  182. package/dist/extensionAPI.d.ts +2 -2
  183. package/dist/extensionAPI.js +1 -1
  184. package/dist/extensions/active-memory/index.d.ts +1 -1
  185. package/dist/extensions/active-memory/index.js +1 -1
  186. package/dist/extensions/admin-http-rpc/index.d.ts +1 -1
  187. package/dist/extensions/admin-http-rpc/index.js +1 -1
  188. package/dist/extensions/bonjour/index.d.ts +1 -1
  189. package/dist/extensions/browser/browser-bridge.js +1 -1
  190. package/dist/extensions/browser/browser-config.js +4 -4
  191. package/dist/extensions/browser/browser-control-auth.js +2 -2
  192. package/dist/extensions/browser/browser-doctor.js +2 -2
  193. package/dist/extensions/browser/browser-maintenance.js +1 -1
  194. package/dist/extensions/browser/browser-profiles.js +2 -2
  195. package/dist/extensions/browser/browser-runtime-api.js +12 -12
  196. package/dist/extensions/browser/cli-metadata.d.ts +1 -1
  197. package/dist/extensions/browser/cli-metadata.js +1 -1
  198. package/dist/extensions/browser/index.d.ts +1 -1
  199. package/dist/extensions/browser/index.js +1 -1
  200. package/dist/extensions/browser/plugin-registration.d.ts +1 -1
  201. package/dist/extensions/browser/plugin-registration.js +1 -1
  202. package/dist/extensions/browser/register.runtime.d.ts +2 -2
  203. package/dist/extensions/browser/register.runtime.js +4 -4
  204. package/dist/extensions/browser/runtime-api.d.ts +3 -3
  205. package/dist/extensions/browser/runtime-api.js +14 -14
  206. package/dist/extensions/browser/setup-api.d.ts +1 -1
  207. package/dist/extensions/canvas/cli-metadata.d.ts +1 -1
  208. package/dist/extensions/canvas/index.d.ts +1 -1
  209. package/dist/extensions/canvas/index.js +1 -1
  210. package/dist/extensions/canvas/setup-api.d.ts +1 -1
  211. package/dist/extensions/deepseek/api.d.ts +1 -1
  212. package/dist/extensions/deepseek/index.d.ts +1 -1
  213. package/dist/extensions/deepseek/provider-discovery.d.ts +1 -1
  214. package/dist/extensions/deepseek/stream.d.ts +1 -1
  215. package/dist/extensions/device-pair/api.d.ts +4 -4
  216. package/dist/extensions/device-pair/api.js +1 -1
  217. package/dist/extensions/device-pair/index.d.ts +1 -1
  218. package/dist/extensions/device-pair/notify.d.ts +1 -1
  219. package/dist/extensions/device-pair/pair-command-approve.js +1 -1
  220. package/dist/extensions/device-pair/qr-image.d.ts +1 -1
  221. package/dist/extensions/memory-core/api.d.ts +1 -1
  222. package/dist/extensions/memory-core/cli-metadata.d.ts +1 -1
  223. package/dist/extensions/memory-core/cli-metadata.js +1 -1
  224. package/dist/extensions/memory-core/index.d.ts +1 -1
  225. package/dist/extensions/memory-core/manager-runtime.d.ts +1 -1
  226. package/dist/extensions/memory-core/runtime-api.d.ts +3 -3
  227. package/dist/extensions/skill-workshop/api.d.ts +2 -2
  228. package/dist/extensions/skill-workshop/api.js +1 -1
  229. package/dist/extensions/skill-workshop/index.d.ts +1 -1
  230. package/dist/extensions/skill-workshop/index.js +2 -2
  231. package/dist/extensions/tavily/index.d.ts +1 -1
  232. package/dist/extensions/tavily/web-search-contract-api.d.ts +1 -1
  233. package/dist/extensions/tavily/web-search-provider.d.ts +1 -1
  234. package/dist/extensions/thread-ownership/api.d.ts +2 -2
  235. package/dist/extensions/thread-ownership/index.d.ts +1 -1
  236. package/dist/extensions/webhooks/api.d.ts +2 -2
  237. package/dist/extensions/webhooks/api.js +1 -1
  238. package/dist/extensions/webhooks/index.d.ts +1 -1
  239. package/dist/extensions/webhooks/index.js +1 -1
  240. package/dist/extensions/webhooks/runtime-api.d.ts +1 -1
  241. package/dist/extensions/workboard/api.d.ts +2 -2
  242. package/dist/extensions/workboard/index.d.ts +1 -1
  243. package/dist/extensions/workboard/index.js +1 -1
  244. package/dist/extensions/workboard/runtime-api.d.ts +1 -1
  245. package/dist/fengming-runtime-CtRd5677.d.ts +153 -0
  246. package/dist/fengming-tools-DBLsJfsf.js +12221 -0
  247. package/dist/gateway/protocol/index.d.ts +1 -1
  248. package/dist/gateway-cli-BgDV2HF9.js +443 -0
  249. package/dist/gateway-method-runtime-d9oN_XO9.js +21 -0
  250. package/dist/get-reply-CEMtvaTJ.js +5198 -0
  251. package/dist/get-reply-from-config.runtime-CE8zmX7o.js +2 -0
  252. package/dist/get-reply-from-config.runtime.js +1 -1
  253. package/dist/heartbeat-runner-H8SmaKmJ.js +5 -0
  254. package/dist/heartbeat-runner.runtime-6hUaxEbl.js +3 -0
  255. package/dist/heartbeat-runner.runtime.js +1 -1
  256. package/dist/hooks-DkEvkwzS.js +536 -0
  257. package/dist/host-compat-DeAq3dnI.d.ts +21 -0
  258. package/dist/http-registry-BDoApjTY.d.ts +23 -0
  259. package/dist/inbound-reply-dispatch-CIYP2OPo.d.ts +156 -0
  260. package/dist/inbound-reply-dispatch-geHu6oUK.js +147 -0
  261. package/dist/inbound-reply-dispatch-vwW5Hl-_.js +2 -0
  262. package/dist/index-DhOQs6M_.d.ts +1497 -0
  263. package/dist/index.js +1 -1
  264. package/dist/init-DpE_6dG4.js +59 -0
  265. package/dist/interactive-Cb_1f91G.d.ts +26 -0
  266. package/dist/isolated-agent-B_upYOOM.js +2 -0
  267. package/dist/isolated-agent-KH9uwWhw.js +1097 -0
  268. package/dist/kernel-BHnBXnm2.d.ts +241 -0
  269. package/dist/lifecycle-BmZwopzF.js +570 -0
  270. package/dist/list.probe-5kzWm9Jk.js +451 -0
  271. package/dist/list.probe-9zBcGGQ4.js +2 -0
  272. package/dist/list.status-command-DY2ifqp1.js +815 -0
  273. package/dist/llm-slug-generator-Bmx0I84M.js +78 -0
  274. package/dist/llm-slug-generator.js +1 -1
  275. package/dist/loader-BVz75gSb.d.ts +142 -0
  276. package/dist/local-dispatch.runtime-CX3IOY1E.js +10 -0
  277. package/dist/local-dispatch.runtime.js +1 -1
  278. package/dist/manager-BXGg8bfG.d.ts +409 -0
  279. package/dist/mcp-http-B1lnh67s.js +2 -0
  280. package/dist/mcp-http-CamghE-W.js +583 -0
  281. package/dist/media-runtime-DpykroJR.d.ts +261 -0
  282. package/dist/memory-core-host-engine-embeddings-N2dX5P40.d.ts +324 -0
  283. package/dist/memory-core-host-engine-storage-WQfkQMer.d.ts +54 -0
  284. package/dist/message-handler-Ca_pqGVS.js +1806 -0
  285. package/dist/model-catalog-BBMLIjhq.d.ts +88 -0
  286. package/dist/model-selection-Cq82FXLy.js +352 -0
  287. package/dist/models-cli-Dm_393dw.js +257 -0
  288. package/dist/monitor-d0eyE2k0.js +60 -0
  289. package/dist/monitor.account-vLQ3bKHu.js +5382 -0
  290. package/dist/nodes-Bunvrb33.js +1483 -0
  291. package/dist/nodes-edNlxb2I.js +3 -0
  292. package/dist/nodes-pending-DEIwVh9v.js +211 -0
  293. package/dist/openai-compat-errors-CvWEoG98.js +136 -0
  294. package/dist/openai-http-Bskdv4Tv.js +836 -0
  295. package/dist/openresponses-http-DxdgCxFU.js +1175 -0
  296. package/dist/operations-Z85LFqsT.js +805 -0
  297. package/dist/outbound.types-DVkbsxo8.d.ts +291 -0
  298. package/dist/plugin-enabled-fvhTpvYS.js +232 -0
  299. package/dist/plugin-entry-CunlVUw6.d.ts +47 -0
  300. package/dist/plugin-registration-9ovnK_Tk.js +97 -0
  301. package/dist/plugin-runtime-DH2ZM9P5.d.ts +117 -0
  302. package/dist/plugin-sdk/.boundary-entry-shims.stamp +1 -1
  303. package/dist/plugin-sdk/acp-runtime-backend.js +1 -1
  304. package/dist/plugin-sdk/acp-runtime.js +1 -1
  305. package/dist/plugin-sdk/agent-harness-runtime.js +5 -5
  306. package/dist/plugin-sdk/agent-harness-task-runtime.js +1 -1
  307. package/dist/plugin-sdk/agent-harness.js +6 -6
  308. package/dist/plugin-sdk/agent-runtime.js +2 -2
  309. package/dist/plugin-sdk/bundled-channel-config-schema-Dfn3b8sF.d.ts +3169 -0
  310. package/dist/plugin-sdk/bundled-channel-config-schema.d.ts +1 -1
  311. package/dist/plugin-sdk/channel-config-schema-legacy.d.ts +1 -1
  312. package/dist/plugin-sdk/channel-core.js +2 -2
  313. package/dist/plugin-sdk/channel-envelope.js +1 -1
  314. package/dist/plugin-sdk/channel-inbound-roots.js +1 -1
  315. package/dist/plugin-sdk/channel-inbound.js +2 -2
  316. package/dist/plugin-sdk/channel-location.js +1 -1
  317. package/dist/plugin-sdk/channel-message-runtime.js +3 -3
  318. package/dist/plugin-sdk/channel-message.js +2 -2
  319. package/dist/plugin-sdk/channel-runtime.js +0 -1
  320. package/dist/plugin-sdk/command-status-runtime.js +1 -1
  321. package/dist/plugin-sdk/compat.js +1 -1
  322. package/dist/plugin-sdk/config-schema.d.ts +4 -4
  323. package/dist/plugin-sdk/conversation-binding-runtime.js +1 -1
  324. package/dist/plugin-sdk/conversation-runtime.js +3 -3
  325. package/dist/plugin-sdk/core.js +2 -2
  326. package/dist/plugin-sdk/discord.d.ts +1 -1
  327. package/dist/plugin-sdk/gateway-method-runtime.js +1 -1
  328. package/dist/plugin-sdk/health.js +1 -1
  329. package/dist/plugin-sdk/hook-runtime.js +0 -1
  330. package/dist/plugin-sdk/inbound-reply-dispatch.js +2 -2
  331. package/dist/plugin-sdk/index.js +1 -1
  332. package/dist/plugin-sdk/infra-runtime.js +3 -1
  333. package/dist/plugin-sdk/provider-auth-api-key.js +0 -1
  334. package/dist/plugin-sdk/provider-stream-family.js +0 -1
  335. package/dist/plugin-sdk/provider-usage.js +649 -1
  336. package/dist/plugin-sdk/reply-runtime.js +4 -4
  337. package/dist/plugin-sdk/video-generation.js +206 -1
  338. package/dist/plugin-service-BdZxoKBZ.js +1249 -0
  339. package/dist/plugin-service-quTl5hT0.d.ts +24 -0
  340. package/dist/plugins/build-smoke-entry.d.ts +2 -2
  341. package/dist/plugins/loader.d.ts +1 -1
  342. package/dist/plugins/provider-discovery.runtime.d.ts +1 -1
  343. package/dist/plugins/provider-runtime.runtime.d.ts +1 -1
  344. package/dist/plugins/runtime/index.d.ts +1 -1
  345. package/dist/plugins/runtime/index.js +4 -4
  346. package/dist/plugins/tools.d.ts +1 -1
  347. package/dist/prepare.runtime-DFvkUqBZ.js +798 -0
  348. package/dist/prepare.runtime.js +1 -1
  349. package/dist/preview-warnings-CGzc8ccG.js +618 -0
  350. package/dist/program-D19g2jaa.js +131 -0
  351. package/dist/provider-api-key-auth-B8GgTfo8.d.ts +27 -0
  352. package/dist/provider-auth-result-Diw-woMA.d.ts +21 -0
  353. package/dist/provider-catalog-shared-hMvzzDgL.d.ts +62 -0
  354. package/dist/provider-dispatcher-DCTc4lG_.js +22 -0
  355. package/dist/provider-dispatcher.runtime.js +1 -1
  356. package/dist/provider-model-shared-BUCh3uCL.d.ts +143 -0
  357. package/dist/provider-registry-BIokPlxa.d.ts +8 -0
  358. package/dist/provider-registry-CyUOXHG-.d.ts +8 -0
  359. package/dist/provider-registry-i--H79Ao.d.ts +29 -0
  360. package/dist/provider-self-hosted-setup-BF8UR8wg.d.ts +74 -0
  361. package/dist/provider-stream-NF0XJnar.d.ts +139 -0
  362. package/dist/provider-stream-shared-DLwDaYed.d.ts +132 -0
  363. package/dist/provider-web-search-contract-fields-D61Vl5Kl.d.ts +25 -0
  364. package/dist/pw-ai-DYR-D7xR.js +3064 -0
  365. package/dist/register.agent-DwW0mQPk.js +152 -0
  366. package/dist/register.crestodian-BhIukKDA.js +24 -0
  367. package/dist/register.maintenance-DWHlvztJ.js +85 -0
  368. package/dist/register.subclis-Bsvdh8RI.js +3 -0
  369. package/dist/register.subclis-DVk0HU4k.js +31 -0
  370. package/dist/register.subclis-core-BK7nVvl6.js +278 -0
  371. package/dist/registry-hscEPAcC.d.ts +8 -0
  372. package/dist/registry-types-Ce-n1tuw.d.ts +392 -0
  373. package/dist/repair-sequencing-0-qGNSUO.js +652 -0
  374. package/dist/reply-payload-mCw4ZND6.d.ts +200 -0
  375. package/dist/reply-turn-admission-DMWNadoS.js +2056 -0
  376. package/dist/reply.runtime-CE8zmX7o.js +2 -0
  377. package/dist/reply.runtime.js +1 -1
  378. package/dist/result-fallback-classifier-BZmv2ACy.js +98 -0
  379. package/dist/route-qQ-jYpFa.js +475 -0
  380. package/dist/routes-dTCmw98g.js +2 -0
  381. package/dist/routes-r8DRKa83.js +3701 -0
  382. package/dist/run-BgH7EPGH.js +1162 -0
  383. package/dist/run-command-DCsM-BVh.js +23 -0
  384. package/dist/run-command-I2ib4dwS.js +2 -0
  385. package/dist/run-context-CWaKUKKJ.js +66 -0
  386. package/dist/run-embedded.runtime-CBnDBWN0.js +4 -0
  387. package/dist/run-embedded.runtime.js +1 -1
  388. package/dist/run-execution-cli.runtime-DlYXI-lw.js +4 -0
  389. package/dist/run-execution-cli.runtime.js +1 -1
  390. package/dist/run-executor.runtime-DwepGrmB.js +330 -0
  391. package/dist/run-executor.runtime.js +1 -1
  392. package/dist/run-subagent-registry.runtime-CeVpoIhj.js +2 -0
  393. package/dist/run-subagent-registry.runtime.js +1 -1
  394. package/dist/runtime-D2ee-rNh.js +436 -0
  395. package/dist/runtime-api-B99ZlkNt.d.ts +5 -0
  396. package/dist/runtime-api-Cta2L_Yo.js +12 -0
  397. package/dist/runtime-channel-LKOkML3M.js +2 -0
  398. package/dist/runtime-channel-UtWvrTZ5.js +148 -0
  399. package/dist/runtime-embedded-agent.runtime-9O2Idzyb.js +2 -0
  400. package/dist/runtime-embedded-agent.runtime.js +1 -1
  401. package/dist/runtime-forwarders-DjI8RFL5.d.ts +39 -0
  402. package/dist/sdk-setup-tools-B-X04pa6.js +8 -0
  403. package/dist/selection-B02h8Old.js +3 -0
  404. package/dist/selection-DEPvzrW2.js +18365 -0
  405. package/dist/server-CMYi8gDo.js +24 -0
  406. package/dist/server-Cx07rsiY.js +72 -0
  407. package/dist/server-close.runtime.js +1 -1
  408. package/dist/server-context-BIemGRt4.js +2 -0
  409. package/dist/server-context-CB_an9iy.js +955 -0
  410. package/dist/server-cron-BeyuBUjb.js +3173 -0
  411. package/dist/server-cron-CV7KkVeB.js +2 -0
  412. package/dist/server-methods-C7EnpOhB.js +497 -0
  413. package/dist/server-node-events-DMMzZciN.js +597 -0
  414. package/dist/server-plugin-bootstrap-O6MzvzL8.js +71 -0
  415. package/dist/server-plugins-Dwnaz9kX.js +435 -0
  416. package/dist/server-reload-handlers-C-6TyPvI.js +719 -0
  417. package/dist/server-restart-sentinel-Dc35eYgk.js +700 -0
  418. package/dist/server-runtime-services-DCs-gqh_.js +3 -0
  419. package/dist/server-runtime-services-DF2fzzVd.js +147 -0
  420. package/dist/server-startup-plugins-t-YeYibm.js +127 -0
  421. package/dist/server-startup-post-attach-CiEki-DC.js +793 -0
  422. package/dist/server-ws-runtime-uaUpI-e8.js +374 -0
  423. package/dist/server.impl-MoHjSMr5.js +2622 -0
  424. package/dist/session-kill-http-CYCiQpt2.js +121 -0
  425. package/dist/session-reset-service-BYbADY57.js +651 -0
  426. package/dist/session-status.runtime-8NASbeO4.js +2 -0
  427. package/dist/session-status.runtime.js +1 -1
  428. package/dist/session-subagent-reactivation.runtime-DGeNY2Rb.js +2 -0
  429. package/dist/session-subagent-reactivation.runtime.js +1 -1
  430. package/dist/session-tab-registry-C2eElZrt.js +551 -0
  431. package/dist/sessions-DXAdVXIx.js +1917 -0
  432. package/dist/sessions-history-http-BwK7b8OH.js +432 -0
  433. package/dist/sessions-patch-BYC5gvY1.js +401 -0
  434. package/dist/sessions-resolve-C3ORcdmo.js +180 -0
  435. package/dist/sessions.runtime-BijldeSY.js +2 -0
  436. package/dist/sessions.runtime.js +1 -1
  437. package/dist/snapshot-urls-C5CfP3Co.js +317 -0
  438. package/dist/speech-core-wWkTZPpQ.d.ts +49 -0
  439. package/dist/standalone-CHrieUsw.js +42 -0
  440. package/dist/startup-context-CZfmG8-g.js +314 -0
  441. package/dist/status-subagents.runtime-D2XMebiS.js +32 -0
  442. package/dist/status-subagents.runtime.js +1 -1
  443. package/dist/status-text-JR7IPyzZ.js +301 -0
  444. package/dist/stream-BJgTkLEI.d.ts +5 -0
  445. package/dist/subagent-announce-B9cfs_KZ.js +353 -0
  446. package/dist/subagent-announce-delivery-CtmEvLTS.js +1369 -0
  447. package/dist/subagent-control-DVqLHi9O.js +492 -0
  448. package/dist/subagent-hooks-D251uSvy.js +230 -0
  449. package/dist/subagent-hooks-api-DvdMKxsC.js +23 -0
  450. package/dist/subagent-hooks-uLORYChc.js +2 -0
  451. package/dist/subagent-registry-BW2l_oYu.js +3 -0
  452. package/dist/subagent-registry-BxEMHuiN.js +2627 -0
  453. package/dist/subagent-registry.runtime.d.ts +1 -1
  454. package/dist/subagent-registry.runtime.js +1 -1
  455. package/dist/subagent-session-cleanup-BC5wV2qQ.js +390 -0
  456. package/dist/system-fvgHsr2x.js +111 -0
  457. package/dist/talk-DU0Sod_K.js +2454 -0
  458. package/dist/target-id-BR2xJIkd.js +107 -0
  459. package/dist/task-registry-control.runtime.js +1 -1
  460. package/dist/thread-bindings-8XNu5U2p.js +228 -0
  461. package/dist/tool-Boeg0N5g.js +143 -0
  462. package/dist/tool-dispatch-BhLLaL2g.js +155 -0
  463. package/dist/tool-resolution-CzsLs-87.js +153 -0
  464. package/dist/tool-split-Bedy42Ms.d.ts +19 -0
  465. package/dist/tools-B6egHpE3.d.ts +38 -0
  466. package/dist/tools-effective-NXscxK8n.js +442 -0
  467. package/dist/tools-effective-inventory-NsGMUVo-.js +379 -0
  468. package/dist/tools-invoke-_sSu96Kq.js +51 -0
  469. package/dist/tools-invoke-http-BDhlRl-G.js +68 -0
  470. package/dist/tools-invoke-shared-BH-T9Bcg.js +200 -0
  471. package/dist/tts-runtime-C1wu3o15.d.ts +230 -0
  472. package/dist/tui-C733Qov0.js +2 -0
  473. package/dist/tui-DqbscVN5.js +3 -0
  474. package/dist/tui-backend-_Pn3Byj-.js +257 -0
  475. package/dist/tui-cli-CAiC39zd.js +40 -0
  476. package/dist/tui-ink-run-ChXEGj1h.js +7414 -0
  477. package/dist/tui-ink-run-D4mSfLHj.js +2 -0
  478. package/dist/types-BQw1qXGl.d.ts +7034 -0
  479. package/dist/types-BzMoU6-C.d.ts +111 -0
  480. package/dist/types-DltHmoCX.d.ts +393 -0
  481. package/dist/types.public-C_bVIMBl.d.ts +70 -0
  482. package/dist/web-fetch/runtime.d.ts +1 -1
  483. package/dist/webhook-targets-DW2jhddP.d.ts +99 -0
  484. package/dist/zod-schema.core-Cuz0lz6m.d.ts +166 -0
  485. package/npm-shrinkwrap.json +12861 -11889
  486. package/package.json +2 -5
  487. package/skills/batch/SKILL.md +118 -0
  488. package/skills/code-review/SKILL.md +107 -0
  489. package/skills/debug/SKILL.md +83 -0
  490. package/skills/loop/SKILL.md +118 -0
  491. package/skills/run/SKILL.md +79 -0
  492. package/skills/run-skill-generator/SKILL.md +179 -0
  493. package/skills/verify/SKILL.md +103 -0
  494. package/dist/abort-DGskei2p.js +0 -277
  495. package/dist/abort.runtime-Buq9IZxn.js +0 -2
  496. package/dist/acp-spawn-DC6IyYaB.js +0 -1286
  497. package/dist/acp-spawn-Diqb3nel.js +0 -2
  498. package/dist/acp-stateful-target-driver-Clhe_L8v.js +0 -89
  499. package/dist/active-tool-schema-warnings-BRhKkyvt.js +0 -2
  500. package/dist/active-tool-schema-warnings-C6N0-ce6.js +0 -105
  501. package/dist/agent-C5lhsEZJ.js +0 -2
  502. package/dist/agent-WEb757bl.js +0 -1825
  503. package/dist/agent-command-iLD_nsVY.js +0 -1435
  504. package/dist/agent-core-BeDN8Ns5.d.ts +0 -13
  505. package/dist/agent-harness-runtime-C89_Q-bW.d.ts +0 -913
  506. package/dist/agent-harness-runtime-Dfn5rik2.js +0 -207
  507. package/dist/agent-runner-utils-DNiuuo43.js +0 -267
  508. package/dist/agent-runner.runtime-CFF_qJ5V.js +0 -3784
  509. package/dist/agent-runtime-BkMtWXxn.js +0 -199
  510. package/dist/agent-runtime-HufMO_YR.d.ts +0 -207
  511. package/dist/agent-tools-HmaDv4ot.js +0 -2506
  512. package/dist/agent-via-gateway-CZQG8RYL.js +0 -486
  513. package/dist/agent-wait-dedupe-C3xQk2Ww.js +0 -180
  514. package/dist/agent-z1cs3c7n.js +0 -3
  515. package/dist/api-B4IMKjSe.js +0 -3
  516. package/dist/api-BwSbBWI8.js +0 -3
  517. package/dist/api-CE9In9m4.js +0 -5
  518. package/dist/api-ClPvYNGa.js +0 -32
  519. package/dist/api-CntBCaZf.js +0 -3
  520. package/dist/api-DBZBwTsn.js +0 -6
  521. package/dist/api-OCPwGOvK.js +0 -2
  522. package/dist/api-yYhEo7gK.js +0 -4
  523. package/dist/approval-client-helpers-CfdQ3-vv.d.ts +0 -78
  524. package/dist/approval-native-helpers-DSHPksK4.d.ts +0 -241
  525. package/dist/approval-renderers-BfEfwk44.d.ts +0 -39
  526. package/dist/assistant-v5fdOYu7.js +0 -291
  527. package/dist/attachment-normalize-BHAbLiL2.js +0 -213
  528. package/dist/attempt-execution-5w9WYbaJ.js +0 -584
  529. package/dist/attempt-execution.runtime-DnhOWGzr.js +0 -3
  530. package/dist/attempt.prompt-helpers-C4M4erF7.js +0 -543
  531. package/dist/binding-routing-Dpes-QF1.js +0 -113
  532. package/dist/binding-targets-B6H5Pd-A.js +0 -121
  533. package/dist/bridge-server-BCpxCRm_.js +0 -113
  534. package/dist/browser-cli-DMhXHopl.js +0 -230
  535. package/dist/browser-cli-Dy_VugK0.js +0 -2
  536. package/dist/browser-cli-actions-input-WMP7_lm6.js +0 -522
  537. package/dist/browser-cli-actions-observe-DQWAWhwU.js +0 -81
  538. package/dist/browser-cli-debug-CaT2ZKAx.js +0 -137
  539. package/dist/browser-cli-inspect-DU-LUXq1.js +0 -117
  540. package/dist/browser-cli-manage-DAuogqIh.js +0 -446
  541. package/dist/browser-cli-resize-Cz5uO_aR.js +0 -32
  542. package/dist/browser-cli-shared-CjPZcG3j.js +0 -69
  543. package/dist/browser-cli-state-CC3l77-K.js +0 -371
  544. package/dist/browser-control-auth-ELccIUZy.js +0 -2
  545. package/dist/browser-profiles-Cuy4ia6_.js +0 -2
  546. package/dist/browser-runtime-De-iUfME.js +0 -389
  547. package/dist/build-DEF8Per9.js +0 -261
  548. package/dist/bundled-channel-config-schema-Bte--ZlY.d.ts +0 -3168
  549. package/dist/capability-cli-Bydel4E7.js +0 -1809
  550. package/dist/channel-6SGL4R5P.js +0 -2309
  551. package/dist/channel-D3Q3b8J-.d.ts +0 -427
  552. package/dist/channel-core-Bj71kAB5.d.ts +0 -6
  553. package/dist/channel-core-DMvyWnHg.js +0 -5
  554. package/dist/channel-entry-contract-zYxRmEdf.d.ts +0 -114
  555. package/dist/channel-inbound-DVJzBcJ8.d.ts +0 -97
  556. package/dist/channel-inbound-DlCa7eJe.js +0 -121
  557. package/dist/channel-message-CyPGMMFB.js +0 -12
  558. package/dist/channel-message-Czl4cdoA.d.ts +0 -9
  559. package/dist/channel-outbound-BNbhmruA.d.ts +0 -325
  560. package/dist/channel-pairing-BiS-tSvl.d.ts +0 -58
  561. package/dist/channel-runtime-D8hntg7H.js +0 -7
  562. package/dist/channel.runtime-DxErReJR.js +0 -697
  563. package/dist/chat-BLA8ORQI.js +0 -3
  564. package/dist/chat-DWRXkuvU.js +0 -2940
  565. package/dist/chrome-DPwFYi-g.js +0 -1517
  566. package/dist/cli-compaction-YZpssARf.js +0 -363
  567. package/dist/cli-runner-D2OAqxu3.js +0 -597
  568. package/dist/cli-runner-DO4SORQf.js +0 -2
  569. package/dist/cli-runner.runtime-CNSIpbeT.js +0 -4
  570. package/dist/cli-runner.runtime-DAOYvpVQ.js +0 -3
  571. package/dist/command-registry-DpD0fb8D.js +0 -4
  572. package/dist/command-registry-core-Cl3tLG8G.js +0 -114
  573. package/dist/command-registry-nbP7c8RT.js +0 -9
  574. package/dist/command-status.runtime-BBuXTkq0.js +0 -90
  575. package/dist/commands-CR8MVvlD.d.ts +0 -117
  576. package/dist/commands-compact.runtime-BoafIjjg.js +0 -10
  577. package/dist/commands-handlers.runtime-D9jViG_x.js +0 -6327
  578. package/dist/commands-status-BqqJ7PVq.js +0 -16
  579. package/dist/commands-status-CMd41Vxf.js +0 -3
  580. package/dist/commands-status.runtime-CMd41Vxf.js +0 -3
  581. package/dist/commands-subagents-control.runtime-CU4I3A_n.js +0 -2
  582. package/dist/commands-system-prompt-CTtu1D3-.js +0 -2
  583. package/dist/commands-system-prompt-xswhORdM.js +0 -161
  584. package/dist/commands-types-B67CsqXf.d.ts +0 -132
  585. package/dist/commands.runtime-BUFhkrjQ.js +0 -175
  586. package/dist/compact-Dz_WvRkQ.js +0 -1165
  587. package/dist/compact.runtime-n-AKErni.js +0 -12
  588. package/dist/completion-cli-DJYs_L4_.js +0 -393
  589. package/dist/config-CFMbHJb0.js +0 -374
  590. package/dist/config-mutations-DCAloTKR.js +0 -161
  591. package/dist/config-schema-Drw1zrnG.d.ts +0 -20
  592. package/dist/context-engine-host-compat-4mNm1HCE.js +0 -2
  593. package/dist/context-engine-host-compat-BzJ7fUIn.js +0 -280
  594. package/dist/context-engine-lifecycle-V4PNQp6k.js +0 -627
  595. package/dist/control-auth-DG_cw-aN.js +0 -114
  596. package/dist/control-service-CurYipgK.js +0 -3
  597. package/dist/control-service-VyncoV7j.js +0 -40
  598. package/dist/control-ui/assets/activity-D5Plhlo-.js +0 -124
  599. package/dist/control-ui/assets/agents-Chcdfe1E.js +0 -1030
  600. package/dist/control-ui/assets/channels-BEtB4H37.js +0 -120
  601. package/dist/control-ui/assets/cron-CZyPkxSU.js +0 -1016
  602. package/dist/control-ui/assets/debug-DvM8iG47.js +0 -97
  603. package/dist/control-ui/assets/index-Rmpgh0f1.js +0 -7214
  604. package/dist/control-ui/assets/instances-yTC_uu60.js +0 -57
  605. package/dist/control-ui/assets/nodes-vbAxVHIH.js +0 -444
  606. package/dist/control-ui/assets/sessions-DOviHme5.js +0 -425
  607. package/dist/control-ui/assets/skills-Bfp5HEGW.js +0 -362
  608. package/dist/control-ui/assets/workboard-5sU2kHsV.js +0 -402
  609. package/dist/conversation-runtime-DgaABwHh.js +0 -31
  610. package/dist/core-BeBXdneV.js +0 -284
  611. package/dist/core-Chqb7X6l.d.ts +0 -223
  612. package/dist/core-api-BlK0FgBM.js +0 -2
  613. package/dist/core-api-pAvYk716.js +0 -5
  614. package/dist/crestodian-FeGTBqO1.js +0 -55
  615. package/dist/delegate-BjIjSU_E.d.ts +0 -30
  616. package/dist/deliver-CvtWN4Ey.d.ts +0 -111
  617. package/dist/delivery-queue-CQ-cj3KG.d.ts +0 -161
  618. package/dist/delivery-queue-runtime-ut7MG04m.d.ts +0 -9
  619. package/dist/detect-BjXPyrwn.js +0 -115
  620. package/dist/detect-C1xeIemQ.d.ts +0 -16
  621. package/dist/dialogue-BowVYhEC.js +0 -37
  622. package/dist/direct-dm-DoZZHpA0.d.ts +0 -79
  623. package/dist/directive-handling.fast-lane-hnmQ_CvD.js +0 -70
  624. package/dist/directive-handling.impl-Cai-CFS1.js +0 -2
  625. package/dist/directive-handling.impl-DY84qIfU.js +0 -823
  626. package/dist/directive-handling.model-selection-DASssLFQ.js +0 -122
  627. package/dist/directive-handling.persist.runtime-BY7tJUs2.js +0 -274
  628. package/dist/dispatch-D5iG5A8j.js +0 -2057
  629. package/dist/dispatch-acp-transcript.runtime-D3r16hbD.js +0 -40
  630. package/dist/dispatch-acp.runtime-CAIau5qX.js +0 -18
  631. package/dist/dispatcher-7-d2gw3J.js +0 -106
  632. package/dist/doctor-DD5YEMmf.js +0 -6
  633. package/dist/doctor-config-flow-CdlLHJmX.js +0 -1819
  634. package/dist/doctor-core-checks-6MP99TQG.js +0 -666
  635. package/dist/doctor-core-checks-Dm_o576z.js +0 -2
  636. package/dist/doctor-core-checks.runtime-B2qbKATd.js +0 -278
  637. package/dist/doctor-health-BKrhOv1v.js +0 -65
  638. package/dist/doctor-health-contributions-bIBLmw69.js +0 -874
  639. package/dist/doctor-lint-aOLOWli4.js +0 -95
  640. package/dist/doctor-state-integrity-23NQNNuo.js +0 -1257
  641. package/dist/draft-stream-controls-Bk1GVJ1l.d.ts +0 -159
  642. package/dist/embedded-agent-BeK8FhZr.d.ts +0 -5
  643. package/dist/embedded-agent-CNp_y7jW.js +0 -4074
  644. package/dist/embedded-agent-NEmNlXDR.js +0 -4
  645. package/dist/embedded-agent.runtime-hEby8P2s.js +0 -4
  646. package/dist/embedded-backend-BdbgfpBP.js +0 -1581
  647. package/dist/embedded-gateway-stub.runtime-ySZUA3Gy.js +0 -12
  648. package/dist/extensions/alibaba/fengming.plugin.json +0 -47
  649. package/dist/extensions/alibaba/index.d.ts +0 -12
  650. package/dist/extensions/alibaba/index.js +0 -13
  651. package/dist/extensions/alibaba/package.json +0 -15
  652. package/dist/extensions/alibaba/video-generation-provider.d.ts +0 -6
  653. package/dist/extensions/alibaba/video-generation-provider.js +0 -2
  654. package/dist/extensions/baichuan/fengming.plugin.json +0 -69
  655. package/dist/extensions/baichuan/index.d.ts +0 -11
  656. package/dist/extensions/baichuan/index.js +0 -45
  657. package/dist/extensions/baichuan/models.d.ts +0 -7
  658. package/dist/extensions/baichuan/models.js +0 -2
  659. package/dist/extensions/baichuan/onboard.d.ts +0 -5
  660. package/dist/extensions/baichuan/onboard.js +0 -2
  661. package/dist/extensions/baichuan/package.json +0 -15
  662. package/dist/extensions/baichuan/provider-catalog.d.ts +0 -2
  663. package/dist/extensions/baichuan/provider-catalog.js +0 -2
  664. package/dist/extensions/baichuan/provider-discovery.d.ts +0 -2
  665. package/dist/extensions/baichuan/provider-discovery.js +0 -5
  666. package/dist/extensions/byteplus/api.d.ts +0 -3
  667. package/dist/extensions/byteplus/api.js +0 -3
  668. package/dist/extensions/byteplus/fengming.plugin.json +0 -196
  669. package/dist/extensions/byteplus/index.d.ts +0 -12
  670. package/dist/extensions/byteplus/index.js +0 -85
  671. package/dist/extensions/byteplus/models.d.ts +0 -2
  672. package/dist/extensions/byteplus/models.js +0 -2
  673. package/dist/extensions/byteplus/package.json +0 -15
  674. package/dist/extensions/byteplus/provider-catalog.d.ts +0 -2
  675. package/dist/extensions/byteplus/provider-catalog.js +0 -2
  676. package/dist/extensions/byteplus/provider-discovery.d.ts +0 -5
  677. package/dist/extensions/byteplus/provider-discovery.js +0 -23
  678. package/dist/extensions/byteplus/video-generation-provider.d.ts +0 -6
  679. package/dist/extensions/byteplus/video-generation-provider.js +0 -2
  680. package/dist/extensions/longcat/fengming.plugin.json +0 -84
  681. package/dist/extensions/longcat/index.d.ts +0 -11
  682. package/dist/extensions/longcat/index.js +0 -45
  683. package/dist/extensions/longcat/models.d.ts +0 -7
  684. package/dist/extensions/longcat/models.js +0 -2
  685. package/dist/extensions/longcat/onboard.d.ts +0 -5
  686. package/dist/extensions/longcat/onboard.js +0 -2
  687. package/dist/extensions/longcat/package.json +0 -15
  688. package/dist/extensions/longcat/provider-catalog.d.ts +0 -2
  689. package/dist/extensions/longcat/provider-catalog.js +0 -2
  690. package/dist/extensions/longcat/provider-discovery.d.ts +0 -2
  691. package/dist/extensions/longcat/provider-discovery.js +0 -5
  692. package/dist/extensions/minimax/api.d.ts +0 -5
  693. package/dist/extensions/minimax/api.js +0 -6
  694. package/dist/extensions/minimax/fengming.plugin.json +0 -206
  695. package/dist/extensions/minimax/image-generation-provider.d.ts +0 -6
  696. package/dist/extensions/minimax/image-generation-provider.js +0 -2
  697. package/dist/extensions/minimax/index.d.ts +0 -12
  698. package/dist/extensions/minimax/index.js +0 -29
  699. package/dist/extensions/minimax/media-understanding-provider.d.ts +0 -6
  700. package/dist/extensions/minimax/media-understanding-provider.js +0 -2
  701. package/dist/extensions/minimax/model-definitions.d.ts +0 -2
  702. package/dist/extensions/minimax/model-definitions.js +0 -2
  703. package/dist/extensions/minimax/music-generation-provider.d.ts +0 -6
  704. package/dist/extensions/minimax/music-generation-provider.js +0 -2
  705. package/dist/extensions/minimax/oauth.d.ts +0 -2
  706. package/dist/extensions/minimax/oauth.js +0 -2
  707. package/dist/extensions/minimax/oauth.runtime.d.ts +0 -2
  708. package/dist/extensions/minimax/oauth.runtime.js +0 -2
  709. package/dist/extensions/minimax/onboard.d.ts +0 -2
  710. package/dist/extensions/minimax/onboard.js +0 -2
  711. package/dist/extensions/minimax/package.json +0 -15
  712. package/dist/extensions/minimax/provider-catalog.d.ts +0 -2
  713. package/dist/extensions/minimax/provider-catalog.js +0 -2
  714. package/dist/extensions/minimax/provider-contract-api.d.ts +0 -6
  715. package/dist/extensions/minimax/provider-contract-api.js +0 -77
  716. package/dist/extensions/minimax/provider-discovery.d.ts +0 -5
  717. package/dist/extensions/minimax/provider-discovery.js +0 -23
  718. package/dist/extensions/minimax/provider-models.d.ts +0 -2
  719. package/dist/extensions/minimax/provider-models.js +0 -2
  720. package/dist/extensions/minimax/provider-registration.d.ts +0 -7
  721. package/dist/extensions/minimax/provider-registration.js +0 -2
  722. package/dist/extensions/minimax/speech-provider.d.ts +0 -5
  723. package/dist/extensions/minimax/speech-provider.js +0 -2
  724. package/dist/extensions/minimax/tts.d.ts +0 -20
  725. package/dist/extensions/minimax/tts.js +0 -2
  726. package/dist/extensions/minimax/video-generation-provider.d.ts +0 -7
  727. package/dist/extensions/minimax/video-generation-provider.js +0 -2
  728. package/dist/extensions/minimax/web-search-contract-api.d.ts +0 -5
  729. package/dist/extensions/minimax/web-search-contract-api.js +0 -31
  730. package/dist/extensions/minimax/web-search-provider.d.ts +0 -5
  731. package/dist/extensions/minimax/web-search-provider.js +0 -2
  732. package/dist/extensions/moonshot/api.d.ts +0 -3
  733. package/dist/extensions/moonshot/api.js +0 -4
  734. package/dist/extensions/moonshot/fengming.plugin.json +0 -250
  735. package/dist/extensions/moonshot/index.d.ts +0 -11
  736. package/dist/extensions/moonshot/index.js +0 -70
  737. package/dist/extensions/moonshot/media-understanding-provider.d.ts +0 -6
  738. package/dist/extensions/moonshot/media-understanding-provider.js +0 -2
  739. package/dist/extensions/moonshot/onboard.d.ts +0 -2
  740. package/dist/extensions/moonshot/onboard.js +0 -2
  741. package/dist/extensions/moonshot/package.json +0 -15
  742. package/dist/extensions/moonshot/provider-catalog.d.ts +0 -2
  743. package/dist/extensions/moonshot/provider-catalog.js +0 -2
  744. package/dist/extensions/moonshot/provider-contract-api.d.ts +0 -5
  745. package/dist/extensions/moonshot/provider-contract-api.js +0 -27
  746. package/dist/extensions/moonshot/provider-discovery.d.ts +0 -5
  747. package/dist/extensions/moonshot/provider-discovery.js +0 -15
  748. package/dist/extensions/moonshot/web-search-contract-api.d.ts +0 -5
  749. package/dist/extensions/moonshot/web-search-contract-api.js +0 -29
  750. package/dist/extensions/moonshot/web-search-provider.d.ts +0 -5
  751. package/dist/extensions/moonshot/web-search-provider.js +0 -2
  752. package/dist/extensions/qianfan/api.d.ts +0 -3
  753. package/dist/extensions/qianfan/api.js +0 -3
  754. package/dist/extensions/qianfan/fengming.plugin.json +0 -89
  755. package/dist/extensions/qianfan/index.d.ts +0 -11
  756. package/dist/extensions/qianfan/index.js +0 -26
  757. package/dist/extensions/qianfan/onboard.d.ts +0 -2
  758. package/dist/extensions/qianfan/onboard.js +0 -2
  759. package/dist/extensions/qianfan/package.json +0 -15
  760. package/dist/extensions/qianfan/provider-catalog.d.ts +0 -2
  761. package/dist/extensions/qianfan/provider-catalog.js +0 -2
  762. package/dist/extensions/qwen/api.d.ts +0 -4
  763. package/dist/extensions/qwen/api.js +0 -5
  764. package/dist/extensions/qwen/fengming.plugin.json +0 -389
  765. package/dist/extensions/qwen/index.d.ts +0 -11
  766. package/dist/extensions/qwen/index.js +0 -202
  767. package/dist/extensions/qwen/media-understanding-provider.d.ts +0 -6
  768. package/dist/extensions/qwen/media-understanding-provider.js +0 -2
  769. package/dist/extensions/qwen/model-definitions.d.ts +0 -2
  770. package/dist/extensions/qwen/model-definitions.js +0 -2
  771. package/dist/extensions/qwen/models.d.ts +0 -2
  772. package/dist/extensions/qwen/models.js +0 -2
  773. package/dist/extensions/qwen/onboard.d.ts +0 -21
  774. package/dist/extensions/qwen/onboard.js +0 -2
  775. package/dist/extensions/qwen/package.json +0 -15
  776. package/dist/extensions/qwen/provider-catalog.d.ts +0 -2
  777. package/dist/extensions/qwen/provider-catalog.js +0 -2
  778. package/dist/extensions/qwen/stream.d.ts +0 -2
  779. package/dist/extensions/qwen/stream.js +0 -2
  780. package/dist/extensions/qwen/video-generation-provider.d.ts +0 -6
  781. package/dist/extensions/qwen/video-generation-provider.js +0 -2
  782. package/dist/extensions/sensenova/fengming.plugin.json +0 -69
  783. package/dist/extensions/sensenova/index.d.ts +0 -11
  784. package/dist/extensions/sensenova/index.js +0 -45
  785. package/dist/extensions/sensenova/models.d.ts +0 -7
  786. package/dist/extensions/sensenova/models.js +0 -2
  787. package/dist/extensions/sensenova/onboard.d.ts +0 -5
  788. package/dist/extensions/sensenova/onboard.js +0 -2
  789. package/dist/extensions/sensenova/package.json +0 -15
  790. package/dist/extensions/sensenova/provider-catalog.d.ts +0 -2
  791. package/dist/extensions/sensenova/provider-catalog.js +0 -2
  792. package/dist/extensions/sensenova/provider-discovery.d.ts +0 -2
  793. package/dist/extensions/sensenova/provider-discovery.js +0 -5
  794. package/dist/extensions/stepfun/fengming.plugin.json +0 -162
  795. package/dist/extensions/stepfun/index.d.ts +0 -12
  796. package/dist/extensions/stepfun/index.js +0 -165
  797. package/dist/extensions/stepfun/onboard.d.ts +0 -7
  798. package/dist/extensions/stepfun/onboard.js +0 -2
  799. package/dist/extensions/stepfun/package.json +0 -15
  800. package/dist/extensions/stepfun/provider-catalog.d.ts +0 -14
  801. package/dist/extensions/stepfun/provider-catalog.js +0 -2
  802. package/dist/extensions/tencent/api.d.ts +0 -3
  803. package/dist/extensions/tencent/api.js +0 -4
  804. package/dist/extensions/tencent/fengming.plugin.json +0 -105
  805. package/dist/extensions/tencent/index.d.ts +0 -12
  806. package/dist/extensions/tencent/index.js +0 -62
  807. package/dist/extensions/tencent/models.d.ts +0 -2
  808. package/dist/extensions/tencent/models.js +0 -2
  809. package/dist/extensions/tencent/onboard.d.ts +0 -6
  810. package/dist/extensions/tencent/onboard.js +0 -2
  811. package/dist/extensions/tencent/package.json +0 -15
  812. package/dist/extensions/tencent/provider-catalog.d.ts +0 -2
  813. package/dist/extensions/tencent/provider-catalog.js +0 -2
  814. package/dist/extensions/tencent/provider-discovery.d.ts +0 -5
  815. package/dist/extensions/tencent/provider-discovery.js +0 -14
  816. package/dist/extensions/tiangong/fengming.plugin.json +0 -69
  817. package/dist/extensions/tiangong/index.d.ts +0 -11
  818. package/dist/extensions/tiangong/index.js +0 -45
  819. package/dist/extensions/tiangong/models.d.ts +0 -7
  820. package/dist/extensions/tiangong/models.js +0 -2
  821. package/dist/extensions/tiangong/onboard.d.ts +0 -5
  822. package/dist/extensions/tiangong/onboard.js +0 -2
  823. package/dist/extensions/tiangong/package.json +0 -15
  824. package/dist/extensions/tiangong/provider-catalog.d.ts +0 -2
  825. package/dist/extensions/tiangong/provider-catalog.js +0 -2
  826. package/dist/extensions/tiangong/provider-discovery.d.ts +0 -2
  827. package/dist/extensions/tiangong/provider-discovery.js +0 -5
  828. package/dist/extensions/volcengine/api.d.ts +0 -12
  829. package/dist/extensions/volcengine/api.js +0 -4
  830. package/dist/extensions/volcengine/fengming.plugin.json +0 -263
  831. package/dist/extensions/volcengine/index.d.ts +0 -12
  832. package/dist/extensions/volcengine/index.js +0 -88
  833. package/dist/extensions/volcengine/models.d.ts +0 -2
  834. package/dist/extensions/volcengine/models.js +0 -2
  835. package/dist/extensions/volcengine/package.json +0 -15
  836. package/dist/extensions/volcengine/provider-catalog.d.ts +0 -2
  837. package/dist/extensions/volcengine/provider-catalog.js +0 -2
  838. package/dist/extensions/volcengine/provider-discovery.d.ts +0 -5
  839. package/dist/extensions/volcengine/provider-discovery.js +0 -23
  840. package/dist/extensions/volcengine/speech-provider.d.ts +0 -5
  841. package/dist/extensions/volcengine/speech-provider.js +0 -2
  842. package/dist/extensions/volcengine/tts.d.ts +0 -22
  843. package/dist/extensions/volcengine/tts.js +0 -2
  844. package/dist/extensions/weixin/fengming.plugin.json +0 -22
  845. package/dist/extensions/weixin/index.d.ts +0 -26
  846. package/dist/extensions/weixin/index.js +0 -862
  847. package/dist/extensions/weixin/package.json +0 -45
  848. package/dist/extensions/xiaomi/api.d.ts +0 -3
  849. package/dist/extensions/xiaomi/api.js +0 -3
  850. package/dist/extensions/xiaomi/fengming.plugin.json +0 -260
  851. package/dist/extensions/xiaomi/index.d.ts +0 -12
  852. package/dist/extensions/xiaomi/index.js +0 -284
  853. package/dist/extensions/xiaomi/onboard.d.ts +0 -2
  854. package/dist/extensions/xiaomi/onboard.js +0 -2
  855. package/dist/extensions/xiaomi/package.json +0 -15
  856. package/dist/extensions/xiaomi/provider-catalog.d.ts +0 -2
  857. package/dist/extensions/xiaomi/provider-catalog.js +0 -2
  858. package/dist/extensions/xiaomi/speech-provider.d.ts +0 -5
  859. package/dist/extensions/xiaomi/speech-provider.js +0 -2
  860. package/dist/extensions/xiaomi/stream.d.ts +0 -5
  861. package/dist/extensions/xiaomi/stream.js +0 -2
  862. package/dist/extensions/xiaomi/thinking.d.ts +0 -11
  863. package/dist/extensions/xiaomi/thinking.js +0 -2
  864. package/dist/extensions/xingchen/fengming.plugin.json +0 -69
  865. package/dist/extensions/xingchen/index.d.ts +0 -11
  866. package/dist/extensions/xingchen/index.js +0 -45
  867. package/dist/extensions/xingchen/models.d.ts +0 -7
  868. package/dist/extensions/xingchen/models.js +0 -2
  869. package/dist/extensions/xingchen/onboard.d.ts +0 -5
  870. package/dist/extensions/xingchen/onboard.js +0 -2
  871. package/dist/extensions/xingchen/package.json +0 -15
  872. package/dist/extensions/xingchen/provider-catalog.d.ts +0 -2
  873. package/dist/extensions/xingchen/provider-catalog.js +0 -2
  874. package/dist/extensions/xingchen/provider-discovery.d.ts +0 -2
  875. package/dist/extensions/xingchen/provider-discovery.js +0 -5
  876. package/dist/extensions/yi/fengming.plugin.json +0 -84
  877. package/dist/extensions/yi/index.d.ts +0 -11
  878. package/dist/extensions/yi/index.js +0 -45
  879. package/dist/extensions/yi/models.d.ts +0 -7
  880. package/dist/extensions/yi/models.js +0 -2
  881. package/dist/extensions/yi/onboard.d.ts +0 -5
  882. package/dist/extensions/yi/onboard.js +0 -2
  883. package/dist/extensions/yi/package.json +0 -15
  884. package/dist/extensions/yi/provider-catalog.d.ts +0 -2
  885. package/dist/extensions/yi/provider-catalog.js +0 -2
  886. package/dist/extensions/yi/provider-discovery.d.ts +0 -2
  887. package/dist/extensions/yi/provider-discovery.js +0 -5
  888. package/dist/extensions/zai/api.d.ts +0 -4
  889. package/dist/extensions/zai/api.js +0 -4
  890. package/dist/extensions/zai/detect.d.ts +0 -2
  891. package/dist/extensions/zai/detect.js +0 -2
  892. package/dist/extensions/zai/fengming.plugin.json +0 -377
  893. package/dist/extensions/zai/index.d.ts +0 -12
  894. package/dist/extensions/zai/index.js +0 -297
  895. package/dist/extensions/zai/media-understanding-provider.d.ts +0 -5
  896. package/dist/extensions/zai/media-understanding-provider.js +0 -2
  897. package/dist/extensions/zai/model-definitions.d.ts +0 -2
  898. package/dist/extensions/zai/model-definitions.js +0 -2
  899. package/dist/extensions/zai/onboard.d.ts +0 -2
  900. package/dist/extensions/zai/onboard.js +0 -2
  901. package/dist/extensions/zai/package.json +0 -15
  902. package/dist/extensions/zai/runtime-api.d.ts +0 -2
  903. package/dist/extensions/zai/runtime-api.js +0 -2
  904. package/dist/extensions/zhinao/fengming.plugin.json +0 -69
  905. package/dist/extensions/zhinao/index.d.ts +0 -11
  906. package/dist/extensions/zhinao/index.js +0 -45
  907. package/dist/extensions/zhinao/models.d.ts +0 -7
  908. package/dist/extensions/zhinao/models.js +0 -2
  909. package/dist/extensions/zhinao/onboard.d.ts +0 -5
  910. package/dist/extensions/zhinao/onboard.js +0 -2
  911. package/dist/extensions/zhinao/package.json +0 -15
  912. package/dist/extensions/zhinao/provider-catalog.d.ts +0 -2
  913. package/dist/extensions/zhinao/provider-catalog.js +0 -2
  914. package/dist/extensions/zhinao/provider-discovery.d.ts +0 -2
  915. package/dist/extensions/zhinao/provider-discovery.js +0 -5
  916. package/dist/fengming-runtime-0jdu_329.d.ts +0 -153
  917. package/dist/fengming-tools-gQkwsWYz.js +0 -12221
  918. package/dist/fengming.plugin-C-Kdi1_5.js +0 -130
  919. package/dist/fengming.plugin-CRPqMj85.js +0 -166
  920. package/dist/gateway-cli-BV1V43-D.js +0 -443
  921. package/dist/gateway-method-runtime-J2OPP_oH.js +0 -21
  922. package/dist/get-reply-BE8ZGJos.js +0 -5198
  923. package/dist/get-reply-from-config.runtime-C5wfxVI_.js +0 -2
  924. package/dist/heartbeat-runner-_0HlObMb.js +0 -5
  925. package/dist/heartbeat-runner.runtime-DvYz_4Z3.js +0 -3
  926. package/dist/hook-runtime-BH9moP5T.js +0 -4
  927. package/dist/hooks-icCwsmrQ.js +0 -536
  928. package/dist/host-compat-dfJvEfe7.d.ts +0 -21
  929. package/dist/http-registry-Buj7R-F_.d.ts +0 -23
  930. package/dist/image-generation-provider-hrRXkkGc.js +0 -152
  931. package/dist/inbound-reply-dispatch-5AYt56Yt.js +0 -147
  932. package/dist/inbound-reply-dispatch-B5weFW8i.js +0 -2
  933. package/dist/inbound-reply-dispatch-cJh4H31y.d.ts +0 -156
  934. package/dist/index-AZzJCgph.d.ts +0 -1497
  935. package/dist/infra-runtime-3_0R8nmO.js +0 -32
  936. package/dist/init-BnfkYG_k.js +0 -59
  937. package/dist/interactive-V8NfYsTW.d.ts +0 -26
  938. package/dist/isolated-agent-CgH7dfOj.js +0 -1097
  939. package/dist/isolated-agent-dBWkiw0a.js +0 -2
  940. package/dist/kernel-Ds2aqAJF.d.ts +0 -241
  941. package/dist/kimi-web-search-provider-QJT3Ftj3.js +0 -80
  942. package/dist/kimi-web-search-provider.runtime-Dj3SS4T5.js +0 -307
  943. package/dist/kimi-web-search-provider.runtime.js +0 -1
  944. package/dist/lib-Dg4yjNFQ.js +0 -871
  945. package/dist/lifecycle-B9k7QGsS.js +0 -570
  946. package/dist/list.probe-CbVHFNwf.js +0 -2
  947. package/dist/list.probe-CxiEBmyW.js +0 -451
  948. package/dist/list.status-command-DE-edGgB.js +0 -815
  949. package/dist/llm-slug-generator-DJgq9eFd.js +0 -78
  950. package/dist/loader-5AqYM9PC.d.ts +0 -142
  951. package/dist/local-dispatch.runtime-D3F4v51B.js +0 -10
  952. package/dist/manager-BWf1ks-Z.d.ts +0 -409
  953. package/dist/mcp-http-DU7Nsg4P.js +0 -583
  954. package/dist/mcp-http-iZCW6Cet.js +0 -2
  955. package/dist/media-runtime-DZ5RpQN7.d.ts +0 -261
  956. package/dist/media-understanding-DEdEyoQB.d.ts +0 -46
  957. package/dist/media-understanding-provider-4JHrQOUE.js +0 -70
  958. package/dist/media-understanding-provider-BV7O82XV.js +0 -29
  959. package/dist/media-understanding-provider-BlPRhYkx.js +0 -69
  960. package/dist/media-understanding-provider-BuX8eQLj.js +0 -13
  961. package/dist/memory-core-host-engine-embeddings-BDu5fx8E.d.ts +0 -324
  962. package/dist/memory-core-host-engine-storage-CdCuH-E2.d.ts +0 -54
  963. package/dist/message-handler-L6QLWNVP.js +0 -1806
  964. package/dist/minimax-web-search-provider-_gxeEOy8.js +0 -58
  965. package/dist/minimax-web-search-provider.runtime-BF4mGi6U.js +0 -148
  966. package/dist/minimax-web-search-provider.runtime.js +0 -1
  967. package/dist/model-catalog-DCnRkX8f.d.ts +0 -88
  968. package/dist/model-definitions-B2gY43hI.d.ts +0 -34
  969. package/dist/model-definitions-BLOyeH5h.js +0 -73
  970. package/dist/model-definitions-CoByf5mT.js +0 -243
  971. package/dist/model-definitions-WP3OmzbS.d.ts +0 -57
  972. package/dist/model-selection-DhTE6GZD.js +0 -352
  973. package/dist/models--iAR9QkZ.js +0 -175
  974. package/dist/models-8ImVEkvh.js +0 -36
  975. package/dist/models-BIDM8htk.js +0 -48
  976. package/dist/models-BRgRfrcS.js +0 -36
  977. package/dist/models-Bib5-APc.js +0 -67
  978. package/dist/models-Bl67zOoe.js +0 -36
  979. package/dist/models-BqDDYFE3.d.ts +0 -65
  980. package/dist/models-BtRQoRIu.js +0 -36
  981. package/dist/models-BvXmOXik.js +0 -48
  982. package/dist/models-C-sJciOD.d.ts +0 -9
  983. package/dist/models-COnXPdlL.js +0 -24
  984. package/dist/models-CXTmk-Da.d.ts +0 -8
  985. package/dist/models-Cz0C_8re.js +0 -36
  986. package/dist/models-DbwEIt-m.d.ts +0 -15
  987. package/dist/models-DgXkSADi.js +0 -30
  988. package/dist/models-cli-Bv3y3JgQ.js +0 -257
  989. package/dist/monitor-BiVOsbbN.js +0 -1024
  990. package/dist/monitor-BumfRp1t.js +0 -60
  991. package/dist/monitor.account-Cd6EwtuZ.js +0 -5382
  992. package/dist/music-generation-provider-ZdDMiC-c.js +0 -308
  993. package/dist/nodes-C0f8XgD5.js +0 -1483
  994. package/dist/nodes-Dk4vOgg9.js +0 -3
  995. package/dist/nodes-pending-Cjg09MXz.js +0 -211
  996. package/dist/oauth-BIO69Qw0.d.ts +0 -25
  997. package/dist/oauth-CnO10TN2.js +0 -207
  998. package/dist/onboard-B3BYT5k7.js +0 -34
  999. package/dist/onboard-BDMNV6RE.js +0 -23
  1000. package/dist/onboard-B_WNNy5F.d.ts +0 -6
  1001. package/dist/onboard-BbyMaErU.js +0 -69
  1002. package/dist/onboard-BuYPNE6j2.js +0 -23
  1003. package/dist/onboard-C394zMnM.d.ts +0 -11
  1004. package/dist/onboard-CHn4oVbY.js +0 -24
  1005. package/dist/onboard-CPpVbb0O.js +0 -73
  1006. package/dist/onboard-CWDx7Crt.js +0 -23
  1007. package/dist/onboard-CbzkwBzu.d.ts +0 -12
  1008. package/dist/onboard-D099qUd0.js +0 -23
  1009. package/dist/onboard-D7dbzfHc.js +0 -23
  1010. package/dist/onboard-DB-x0nHF.js +0 -30
  1011. package/dist/onboard-DFVrRnxJ.js +0 -23
  1012. package/dist/onboard-DFiqoOc2.d.ts +0 -7
  1013. package/dist/onboard-DJaMK3rr.d.ts +0 -6
  1014. package/dist/onboard-DMdK8D_h.js +0 -67
  1015. package/dist/onboard-J-KL-I6m.js +0 -48
  1016. package/dist/onboard-MIBU-Rmv.js +0 -39
  1017. package/dist/onboard-vmGylfFe.js +0 -23
  1018. package/dist/openai-compat-errors-Dcr5Y8bF.js +0 -136
  1019. package/dist/openai-http-CcqspzU6.js +0 -836
  1020. package/dist/openresponses-http-BnyYYvUF.js +0 -1175
  1021. package/dist/operations-H2Oq0KYz.js +0 -805
  1022. package/dist/outbound.types-BhRehecY.d.ts +0 -291
  1023. package/dist/plugin-enabled-CEIKWKrq.js +0 -232
  1024. package/dist/plugin-entry-CTVRRaaA.d.ts +0 -47
  1025. package/dist/plugin-registration-BTyO5Fwt.js +0 -97
  1026. package/dist/plugin-runtime-_XF2N_UQ.d.ts +0 -117
  1027. package/dist/plugin-sdk/bundled-channel-config-schema-BsOWCrJT.d.ts +0 -3169
  1028. package/dist/plugin-service-B91jVlmZ.d.ts +0 -24
  1029. package/dist/plugin-service-CtGwVz8V.js +0 -1249
  1030. package/dist/prepare.runtime-9dlboph7.js +0 -798
  1031. package/dist/preview-warnings-DJx4KJpC.js +0 -618
  1032. package/dist/program-CWC-NBBB.js +0 -131
  1033. package/dist/provider-api-key-auth-BmNcYRMl.d.ts +0 -27
  1034. package/dist/provider-auth-api-key-CCaFiqY3.js +0 -5
  1035. package/dist/provider-auth-result-D_E9dcVc.d.ts +0 -21
  1036. package/dist/provider-catalog-5KZLmrDO.js +0 -11
  1037. package/dist/provider-catalog-7P6AvDzS.js +0 -11
  1038. package/dist/provider-catalog-B2gyTjTU.js +0 -88
  1039. package/dist/provider-catalog-B3YBhe77.js +0 -17
  1040. package/dist/provider-catalog-B7XEeuUm.js +0 -11
  1041. package/dist/provider-catalog-BFGPRd9v.js +0 -17
  1042. package/dist/provider-catalog-BLvkIMSk.d.ts +0 -6
  1043. package/dist/provider-catalog-BPBL9mJf.d.ts +0 -5
  1044. package/dist/provider-catalog-BRkZ6-HD.d.ts +0 -5
  1045. package/dist/provider-catalog-Bfl_AoTZ.js +0 -142
  1046. package/dist/provider-catalog-BpiHWHu1.js +0 -11
  1047. package/dist/provider-catalog-C1qDLekT.d.ts +0 -5
  1048. package/dist/provider-catalog-CKWNCfry.js +0 -11
  1049. package/dist/provider-catalog-CUHB2pSt.d.ts +0 -7
  1050. package/dist/provider-catalog-CWqN2j6J.d.ts +0 -5
  1051. package/dist/provider-catalog-CZ8oYbx3.js +0 -11
  1052. package/dist/provider-catalog-CcQ5-4ZW.d.ts +0 -6
  1053. package/dist/provider-catalog-Cd16uZ0U.js +0 -20
  1054. package/dist/provider-catalog-CpF2D0VK.js +0 -61
  1055. package/dist/provider-catalog-CvXq36zW.d.ts +0 -5
  1056. package/dist/provider-catalog-D2pgEME3.js +0 -48
  1057. package/dist/provider-catalog-DPzcupEl.d.ts +0 -5
  1058. package/dist/provider-catalog-DaeI606G.d.ts +0 -9
  1059. package/dist/provider-catalog-DrOCtTb-.js +0 -11
  1060. package/dist/provider-catalog-DwZ1J2Al.d.ts +0 -6
  1061. package/dist/provider-catalog-Dy7IcHmS.js +0 -107
  1062. package/dist/provider-catalog-TsZS52nq.d.ts +0 -10
  1063. package/dist/provider-catalog-YqIFRCND.d.ts +0 -5
  1064. package/dist/provider-catalog-Ywb5jRwG.d.ts +0 -5
  1065. package/dist/provider-catalog-evknl1oN.js +0 -11
  1066. package/dist/provider-catalog-l0hFpFO2.d.ts +0 -17
  1067. package/dist/provider-catalog-shared-DsRBv0Tp.d.ts +0 -62
  1068. package/dist/provider-dispatcher-BMy9mBJ1.js +0 -22
  1069. package/dist/provider-model-shared-CPAfQBNs.d.ts +0 -143
  1070. package/dist/provider-models-Diu65OcG.d.ts +0 -18
  1071. package/dist/provider-models-LE7PlLYY.js +0 -22
  1072. package/dist/provider-onboard-CpvXEmvz.d.ts +0 -91
  1073. package/dist/provider-registration-DF-LkmNE.js +0 -235
  1074. package/dist/provider-registry-D9cTPW1F.d.ts +0 -8
  1075. package/dist/provider-registry-DI7gMKUP.d.ts +0 -8
  1076. package/dist/provider-registry-DZtgZDkl.d.ts +0 -29
  1077. package/dist/provider-self-hosted-setup-CoHvoyKm.d.ts +0 -74
  1078. package/dist/provider-stream-BpXJr5Ap.d.ts +0 -139
  1079. package/dist/provider-stream-family-Bj5aBD8w.js +0 -2
  1080. package/dist/provider-stream-shared-BaUkhUHj.d.ts +0 -132
  1081. package/dist/provider-usage-DFUhW2do.js +0 -651
  1082. package/dist/provider-web-search-contract-fields-CkXzSsWu.d.ts +0 -25
  1083. package/dist/pw-ai-9Q_dIq4B.js +0 -3064
  1084. package/dist/register.agent-CbfrlzXB.js +0 -152
  1085. package/dist/register.crestodian-CEg0rPfK.js +0 -24
  1086. package/dist/register.maintenance-k9N8I4Wg.js +0 -85
  1087. package/dist/register.subclis-CrXOeaS3.js +0 -3
  1088. package/dist/register.subclis-DfKlni8N.js +0 -31
  1089. package/dist/register.subclis-core-Bg4wbDsO.js +0 -278
  1090. package/dist/registry-Bh3-P2HL.d.ts +0 -8
  1091. package/dist/registry-types-BmEUS4d3.d.ts +0 -392
  1092. package/dist/repair-sequencing-E4yViXG9.js +0 -652
  1093. package/dist/reply-payload-S2mrc_Mh.d.ts +0 -200
  1094. package/dist/reply-turn-admission-BBoPjmGB.js +0 -2056
  1095. package/dist/reply.runtime-C5wfxVI_.js +0 -2
  1096. package/dist/result-fallback-classifier-CX4iLD1G.js +0 -98
  1097. package/dist/route-CifxcQZ1.js +0 -475
  1098. package/dist/routes-B3XAOeWo.js +0 -2
  1099. package/dist/routes-H185h3U-.js +0 -3701
  1100. package/dist/run-CTJFbwbB.js +0 -1162
  1101. package/dist/run-command-B7B53tYk.js +0 -23
  1102. package/dist/run-command-BFuxRDxS.js +0 -2
  1103. package/dist/run-context-C7im9ICg.js +0 -66
  1104. package/dist/run-embedded.runtime-TljBTbzh.js +0 -4
  1105. package/dist/run-execution-cli.runtime-Bt5zwx1W.js +0 -4
  1106. package/dist/run-executor.runtime-hmbWX2Ct.js +0 -330
  1107. package/dist/run-subagent-registry.runtime-B70X80nS.js +0 -2
  1108. package/dist/runtime-DoKE0o7v.js +0 -436
  1109. package/dist/runtime-api-Ca4Llbgf.js +0 -12
  1110. package/dist/runtime-api-pa8xcEmg.d.ts +0 -5
  1111. package/dist/runtime-channel-CFQ59svm.js +0 -148
  1112. package/dist/runtime-channel-DRwCWGUx.js +0 -2
  1113. package/dist/runtime-embedded-agent.runtime-DwmqKUVp.js +0 -2
  1114. package/dist/runtime-forwarders-BMThPHg_.d.ts +0 -39
  1115. package/dist/sdk-setup-tools-Cg_Tabrf.js +0 -8
  1116. package/dist/selection-COhr7g82.js +0 -18365
  1117. package/dist/selection-_G44EVqd.js +0 -3
  1118. package/dist/send-media-BNc67G7I.js +0 -2072
  1119. package/dist/server-5rR0RCpI.js +0 -24
  1120. package/dist/server-context-BhiPROPA.js +0 -955
  1121. package/dist/server-context-OShBAJZQ.js +0 -2
  1122. package/dist/server-cron-Bkzb9edh.js +0 -3173
  1123. package/dist/server-cron-DdR-ugiU.js +0 -2
  1124. package/dist/server-lwtC1vaS.js +0 -72
  1125. package/dist/server-methods-BY_ZqDFJ.js +0 -497
  1126. package/dist/server-node-events-CLvE94AS.js +0 -597
  1127. package/dist/server-plugin-bootstrap-cKOAH5GL.js +0 -71
  1128. package/dist/server-plugins-CPpUykw5.js +0 -435
  1129. package/dist/server-reload-handlers-uzt4VDZ-.js +0 -719
  1130. package/dist/server-restart-sentinel-CpvV0t4O.js +0 -700
  1131. package/dist/server-runtime-services-BhOHoerM.js +0 -147
  1132. package/dist/server-runtime-services-D3Ig68nC.js +0 -3
  1133. package/dist/server-startup-plugins-DslzKVHK.js +0 -127
  1134. package/dist/server-startup-post-attach-DPFBTQez.js +0 -793
  1135. package/dist/server-ws-runtime-D0zoWoiz.js +0 -374
  1136. package/dist/server.impl-CzqLQ3qt.js +0 -2622
  1137. package/dist/session-kill-http-D8JhwZVS.js +0 -121
  1138. package/dist/session-reset-service-uoi7E4Xp.js +0 -651
  1139. package/dist/session-status.runtime-CZK5IU8w.js +0 -2
  1140. package/dist/session-subagent-reactivation.runtime-BSO00-FY.js +0 -2
  1141. package/dist/session-tab-registry-DM9U7e3o.js +0 -551
  1142. package/dist/sessions-B-SkIoaa.js +0 -1917
  1143. package/dist/sessions-history-http-DCiOG4FK.js +0 -432
  1144. package/dist/sessions-patch-DlAAvQvB.js +0 -401
  1145. package/dist/sessions-resolve-DfMXookg.js +0 -180
  1146. package/dist/sessions.runtime-0V2YxKxB.js +0 -2
  1147. package/dist/snapshot-urls-Ble1-NEW.js +0 -317
  1148. package/dist/speech-core-Bk60ZS_y.d.ts +0 -49
  1149. package/dist/speech-provider-DQO9eZd0.js +0 -233
  1150. package/dist/speech-provider-DnBCla4V.js +0 -171
  1151. package/dist/speech-provider-DyYHFxT5.js +0 -227
  1152. package/dist/standalone-9EWfcxeO.js +0 -42
  1153. package/dist/startup-context-nti4X0_w.js +0 -314
  1154. package/dist/status-subagents.runtime-CPZb1EF1.js +0 -32
  1155. package/dist/status-text-C1Hf37lF.js +0 -301
  1156. package/dist/stream-9VBt1MDs.js +0 -26
  1157. package/dist/stream-B_3P7v7P.js +0 -86
  1158. package/dist/stream-CXsue2-v.d.ts +0 -9
  1159. package/dist/stream-oNBFxfKt.d.ts +0 -5
  1160. package/dist/subagent-announce-CPjQQLy8.js +0 -353
  1161. package/dist/subagent-announce-delivery-B6iBOicL.js +0 -1369
  1162. package/dist/subagent-control-DP72sk-l.js +0 -492
  1163. package/dist/subagent-hooks-B1oUIYH3.js +0 -2
  1164. package/dist/subagent-hooks-BkGj4_xI.js +0 -230
  1165. package/dist/subagent-hooks-api-D2mulK3S.js +0 -23
  1166. package/dist/subagent-registry-CEKAUB5h.js +0 -3
  1167. package/dist/subagent-registry-OUVucPAn.js +0 -2627
  1168. package/dist/subagent-session-cleanup-Bx8d3kw0.js +0 -390
  1169. package/dist/system-CelaP2zI.js +0 -111
  1170. package/dist/talk-DGOI3Lu3.js +0 -2454
  1171. package/dist/target-id-BXRG7x9x.js +0 -107
  1172. package/dist/thinking-B8V29FhB.js +0 -35
  1173. package/dist/thread-bindings-DpVdEPZ0.js +0 -228
  1174. package/dist/tool-DHzDpxE4.js +0 -143
  1175. package/dist/tool-dispatch-ClP3Rc7g.js +0 -155
  1176. package/dist/tool-resolution-CZcLod1d.js +0 -153
  1177. package/dist/tool-split-BhiQ8676.d.ts +0 -19
  1178. package/dist/tools-ZvSvbsCW.d.ts +0 -38
  1179. package/dist/tools-effective-C2mHZT-A.js +0 -442
  1180. package/dist/tools-effective-inventory-ctnM7hc6.js +0 -379
  1181. package/dist/tools-invoke-Ci6Rux2s.js +0 -51
  1182. package/dist/tools-invoke-http-CJflXcJk.js +0 -68
  1183. package/dist/tools-invoke-shared-BLu_mJEX.js +0 -200
  1184. package/dist/tts-B2rPJPij.js +0 -83
  1185. package/dist/tts-Gp9FI3_n.js +0 -163
  1186. package/dist/tts-runtime-DNi1HXPF.d.ts +0 -230
  1187. package/dist/tui-BUhfQ9vD.js +0 -3
  1188. package/dist/tui-BhH5mvLf.js +0 -2
  1189. package/dist/tui-backend-C_4ajTHI.js +0 -257
  1190. package/dist/tui-cli-BhWJ-QoB.js +0 -40
  1191. package/dist/tui-ink-run-BTWbUQGb.js +0 -7414
  1192. package/dist/tui-ink-run-DfTdivkh.js +0 -2
  1193. package/dist/types-B4fW3r5y.d.ts +0 -111
  1194. package/dist/types-DI62NfFe.d.ts +0 -7034
  1195. package/dist/types-sAih_uQb.d.ts +0 -393
  1196. package/dist/types.public-B3MKhuo2.d.ts +0 -70
  1197. package/dist/video-generation-B9c6a5cw.js +0 -207
  1198. package/dist/video-generation-BgJp7UIA.d.ts +0 -224
  1199. package/dist/video-generation-provider-BjiVjf40.js +0 -325
  1200. package/dist/video-generation-provider-CsnQJg_h.js +0 -297
  1201. package/dist/video-generation-provider-DtU-ZPqP.js +0 -64
  1202. package/dist/video-generation-provider-wZ0bzv0e.js +0 -77
  1203. package/dist/webhook-targets-Cy8e7y3g.d.ts +0 -99
  1204. package/dist/zod-schema.core-BGLctDlK.d.ts +0 -166
  1205. package/skills/canvas/SKILL.md +0 -78
  1206. package/skills/clawhub/SKILL.md +0 -77
  1207. package/skills/coding-agent/SKILL.md +0 -143
  1208. package/skills/diagram-maker/SKILL.md +0 -53
  1209. package/skills/diagram-maker/references/excalidraw-patterns.md +0 -85
  1210. package/skills/diagram-maker/references/svg-template.md +0 -112
  1211. package/skills/gemini/SKILL.md +0 -47
  1212. package/skills/gh-issues/SKILL.md +0 -213
  1213. package/skills/gifgrep/SKILL.md +0 -85
  1214. package/skills/github/SKILL.md +0 -84
  1215. package/skills/healthcheck/SKILL.md +0 -105
  1216. package/skills/mcporter/SKILL.md +0 -61
  1217. package/skills/meme-maker/SKILL.md +0 -42
  1218. package/skills/meme-maker/references/templates.json +0 -358
  1219. package/skills/meme-maker/scripts/meme.mjs +0 -398
  1220. package/skills/model-usage/SKILL.md +0 -71
  1221. package/skills/model-usage/references/codexbar-cli.md +0 -33
  1222. package/skills/model-usage/scripts/model_usage.py +0 -319
  1223. package/skills/model-usage/scripts/test_model_usage.py +0 -40
  1224. package/skills/nano-pdf/SKILL.md +0 -38
  1225. package/skills/node-connect/SKILL.md +0 -143
  1226. package/skills/node-inspect-debugger/SKILL.md +0 -85
  1227. package/skills/openai-whisper/SKILL.md +0 -38
  1228. package/skills/openai-whisper-api/SKILL.md +0 -71
  1229. package/skills/openai-whisper-api/scripts/transcribe.sh +0 -154
  1230. package/skills/oracle/SKILL.md +0 -126
  1231. package/skills/pyproject.toml +0 -10
  1232. package/skills/python-debugpy/SKILL.md +0 -73
  1233. package/skills/sag/SKILL.md +0 -87
  1234. package/skills/session-logs/SKILL.md +0 -151
  1235. package/skills/sherpa-onnx-tts/SKILL.md +0 -109
  1236. package/skills/sherpa-onnx-tts/bin/sherpa-onnx-tts +0 -178
  1237. package/skills/skill-creator/SKILL.md +0 -78
  1238. package/skills/skill-creator/license.txt +0 -202
  1239. package/skills/skill-creator/scripts/init_skill.py +0 -378
  1240. package/skills/skill-creator/scripts/package_skill.py +0 -139
  1241. package/skills/skill-creator/scripts/quick_validate.py +0 -169
  1242. package/skills/skill-creator/scripts/test_package_skill.py +0 -161
  1243. package/skills/skill-creator/scripts/test_quick_validate.py +0 -116
  1244. package/skills/spike/SKILL.md +0 -51
  1245. package/skills/summarize/SKILL.md +0 -87
  1246. package/skills/taskflow/SKILL.md +0 -149
  1247. package/skills/taskflow/examples/inbox-triage.lobster +0 -33
  1248. package/skills/taskflow/examples/pr-intake.lobster +0 -32
  1249. package/skills/taskflow-inbox-triage/SKILL.md +0 -119
  1250. package/skills/video-frames/SKILL.md +0 -46
  1251. package/skills/video-frames/scripts/frame.sh +0 -81
  1252. package/skills/voice-call/SKILL.md +0 -45
  1253. package/skills/weather/SKILL.md +0 -64
  1254. /package/dist/{acp-runtime-backend-DbchQ02o.js → acp-runtime-backend-DZ1Lnt7f.js} +0 -0
  1255. /package/dist/{delegate-k1aptKei.js → delegate-CwhxUdeb.js} +0 -0
  1256. /package/dist/{dispatch-acp-CD4YxPpf.js → dispatch-acp-BP4I5ZQf.js} +0 -0
  1257. /package/dist/{exec-approvals-ByWUCFQM.js → exec-approvals-ByWUCFQM2.js} +0 -0
  1258. /package/dist/{heartbeat-runner-CM0UZxa_.js → heartbeat-runner-CL3alQ8-.js} +0 -0
  1259. /package/dist/{index-B0VJdRJQ.d.ts → index-B0VJdRJQ2.d.ts} +0 -0
  1260. /package/dist/{library-CQ71yATP.js → library-CiTr_aqC.js} +0 -0
  1261. /package/dist/{run-session-state-DbDeH-q6.js → run-session-state-BOMUtBKZ.js} +0 -0
  1262. /package/dist/{session-subagent-reactivation-Bj91A2ms.js → session-subagent-reactivation-CH0C2I6Y.js} +0 -0
  1263. /package/dist/{types-C4HgagiY2.d.ts → types-C4HgagiY.d.ts} +0 -0
@@ -1,2627 +0,0 @@
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-Bx8d3kw0.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-CPjQQLy8.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 };