@myagentroam/agent 0.11.33 → 0.11.35

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 (862) hide show
  1. package/dist/cli/catalog-file.d.ts +78 -0
  2. package/dist/cli/catalog-file.js +102 -0
  3. package/dist/cli/codex-auth-file.d.ts +1 -1
  4. package/dist/cli/codex-auth-file.js +9 -10
  5. package/dist/cli/main.js +44 -54
  6. package/dist/error.d.ts +15 -0
  7. package/dist/error.js +74 -0
  8. package/dist/extensions/agents.d.ts +100 -0
  9. package/dist/extensions/agents.js +121 -0
  10. package/dist/extensions/capabilities.d.ts +4 -0
  11. package/dist/extensions/commands.d.ts +23 -0
  12. package/dist/extensions/commands.js +45 -0
  13. package/dist/extensions/compaction.d.ts +36 -0
  14. package/dist/extensions/contracts.d.ts +147 -0
  15. package/dist/extensions/data.d.ts +81 -0
  16. package/dist/extensions/data.js +78 -0
  17. package/dist/extensions/environment.d.ts +39 -0
  18. package/dist/extensions/environment.js +52 -0
  19. package/dist/extensions/files.d.ts +68 -0
  20. package/dist/extensions/files.js +26 -0
  21. package/dist/extensions/hooks.d.ts +32 -0
  22. package/dist/extensions/host-ports.d.ts +24 -0
  23. package/dist/extensions/manager.d.ts +42 -0
  24. package/dist/extensions/manager.js +457 -0
  25. package/dist/extensions/mcp.d.ts +116 -0
  26. package/dist/extensions/mcp.js +434 -0
  27. package/dist/extensions/model-request.d.ts +65 -0
  28. package/dist/extensions/model-request.js +197 -0
  29. package/dist/extensions/model-stream.d.ts +18 -0
  30. package/dist/extensions/model-stream.js +108 -0
  31. package/dist/extensions/models.d.ts +46 -0
  32. package/dist/extensions/models.js +7 -0
  33. package/dist/extensions/network.d.ts +40 -0
  34. package/dist/extensions/network.js +97 -0
  35. package/dist/extensions/operation.d.ts +32 -0
  36. package/dist/extensions/processes.d.ts +64 -0
  37. package/dist/extensions/processes.js +284 -0
  38. package/dist/extensions/prompt-composition.d.ts +38 -0
  39. package/dist/extensions/prompt-composition.js +100 -0
  40. package/dist/extensions/prompt-input.d.ts +30 -0
  41. package/dist/extensions/prompt-input.js +48 -0
  42. package/dist/extensions/prompts.d.ts +31 -0
  43. package/dist/extensions/prompts.js +88 -0
  44. package/dist/extensions/resources.d.ts +26 -0
  45. package/dist/extensions/resources.js +221 -0
  46. package/dist/extensions/services.d.ts +31 -0
  47. package/dist/extensions/services.js +61 -0
  48. package/dist/extensions/session-api.d.ts +6 -0
  49. package/dist/extensions/session-api.js +52 -0
  50. package/dist/extensions/session-input.d.ts +184 -0
  51. package/dist/extensions/session-input.js +422 -0
  52. package/dist/extensions/session-messages.d.ts +41 -0
  53. package/dist/extensions/session-messages.js +76 -0
  54. package/dist/extensions/session-tools.d.ts +32 -0
  55. package/dist/extensions/session-tools.js +208 -0
  56. package/dist/extensions/session.d.ts +60 -0
  57. package/dist/extensions/session.js +265 -0
  58. package/dist/extensions/settings.d.ts +76 -0
  59. package/dist/extensions/settings.js +115 -0
  60. package/dist/extensions/store.d.ts +10 -0
  61. package/dist/extensions/store.js +131 -0
  62. package/dist/extensions/tool-runtime.d.ts +16 -0
  63. package/dist/extensions/tools.d.ts +80 -0
  64. package/dist/extensions/tools.js +270 -0
  65. package/dist/extensions.d.ts +22 -0
  66. package/dist/host/contracts.d.ts +58 -0
  67. package/dist/host/contracts.js +18 -0
  68. package/dist/host/description.d.ts +19 -0
  69. package/dist/host/local-agent-host.d.ts +96 -0
  70. package/dist/host/local-agent-host.js +429 -0
  71. package/dist/host/local-exec-tool.d.ts +26 -0
  72. package/dist/host/local-exec-tool.js +686 -0
  73. package/dist/host/local-file-access.d.ts +30 -0
  74. package/dist/host/local-file-access.js +107 -0
  75. package/dist/host/local-network-access.d.ts +6 -0
  76. package/dist/host/local-network-access.js +101 -0
  77. package/dist/host/local-process-executor.d.ts +5 -0
  78. package/dist/host/local-process-executor.js +17 -0
  79. package/dist/host/local-session-environment.d.ts +18 -0
  80. package/dist/host/local-shell.d.ts +3 -0
  81. package/dist/host/local-tool-registry.d.ts +34 -0
  82. package/dist/host/local-tool-registry.js +134 -0
  83. package/dist/host/network.d.ts +5 -0
  84. package/dist/host/network.js +42 -0
  85. package/dist/host/process-control.d.ts +2 -0
  86. package/dist/host/process-control.js +26 -0
  87. package/dist/host/skill-contract.d.ts +6 -0
  88. package/dist/host.d.ts +17 -0
  89. package/dist/host.js +3 -0
  90. package/dist/index.d.ts +26 -51
  91. package/dist/index.js +9 -12
  92. package/dist/model/anthropic-messages.d.ts +10 -0
  93. package/dist/model/anthropic-messages.js +692 -0
  94. package/dist/model/anthropic-thinking.js +33 -0
  95. package/dist/model/configuration.d.ts +111 -0
  96. package/dist/model/configuration.js +201 -0
  97. package/dist/model/contracts.d.ts +229 -0
  98. package/dist/model/http.d.ts +13 -0
  99. package/dist/model/http.js +119 -0
  100. package/dist/model/image-contract.d.ts +10 -0
  101. package/dist/model/image.d.ts +9 -0
  102. package/dist/model/inline-media-budget.d.ts +7 -0
  103. package/dist/model/inline-media-budget.js +36 -0
  104. package/dist/model/input-images.d.ts +3 -0
  105. package/dist/model/input-images.js +16 -0
  106. package/dist/model/openai-responses.d.ts +59 -0
  107. package/dist/model/openai-responses.js +1586 -0
  108. package/dist/model/recovery.js +80 -0
  109. package/dist/model/request-configuration.d.ts +17 -0
  110. package/dist/model/request-configuration.js +47 -0
  111. package/dist/model/responses-event-projection.d.ts +24 -0
  112. package/dist/model/responses-event-projection.js +194 -0
  113. package/dist/model/responses-request.d.ts +5 -0
  114. package/dist/model/responses-request.js +363 -0
  115. package/dist/model/responses-session-cache.d.ts +33 -0
  116. package/dist/model/responses-session-cache.js +64 -0
  117. package/dist/model/runtime-credential.d.ts +1 -0
  118. package/dist/model/runtime-credential.js +1 -0
  119. package/dist/model/sse.js +281 -0
  120. package/dist/model/text-blocks.js +40 -0
  121. package/dist/model/tool-declarations.d.ts +4 -0
  122. package/dist/model/tool-definition-projection.d.ts +6 -0
  123. package/dist/model/tool-definition-projection.js +11 -0
  124. package/dist/model/tool-schema.d.ts +2 -0
  125. package/dist/model/tool-schema.js +17 -0
  126. package/dist/model/transport-test.d.ts +10 -0
  127. package/dist/model/transport-test.js +27 -0
  128. package/dist/model/usage-observer.d.ts +5 -0
  129. package/dist/model/usage.d.ts +40 -0
  130. package/dist/network/credential-runtime.d.ts +8 -0
  131. package/dist/network/credential-runtime.js +72 -0
  132. package/dist/network/credentials.d.ts +20 -0
  133. package/dist/network/credentials.js +18 -0
  134. package/dist/network/http.d.ts +20 -0
  135. package/dist/network/http.js +421 -0
  136. package/dist/network/product-user-agent.d.ts +5 -0
  137. package/dist/network/product-user-agent.js +22 -0
  138. package/dist/network/transport-error.d.ts +5 -0
  139. package/dist/network/transport-error.js +31 -0
  140. package/dist/process/contracts.d.ts +26 -0
  141. package/dist/prompts/index.d.ts +20 -0
  142. package/dist/prompts/index.js +49 -0
  143. package/dist/prompts/prompt-sections.d.ts +6 -0
  144. package/dist/prompts/prompt-sections.js +6 -0
  145. package/dist/prompts/read-context.js +152 -0
  146. package/dist/runtime/compaction/contracts.d.ts +23 -0
  147. package/dist/runtime/compaction/coordinator.js +88 -0
  148. package/dist/runtime/compaction/generate.d.ts +31 -0
  149. package/dist/runtime/compaction/generate.js +84 -0
  150. package/dist/runtime/compaction/history.d.ts +16 -0
  151. package/dist/runtime/compaction/operation.d.ts +30 -0
  152. package/dist/runtime/compaction/operation.js +131 -0
  153. package/dist/runtime/compaction/requests.d.ts +16 -0
  154. package/dist/runtime/compaction/requests.js +114 -0
  155. package/dist/runtime/compaction/retained-context.d.ts +6 -0
  156. package/dist/runtime/compaction/retained-context.js +48 -0
  157. package/dist/runtime/compaction/smart.d.ts +14 -0
  158. package/dist/runtime/compaction/smart.js +59 -0
  159. package/dist/runtime/context/contextual-blocks.d.ts +31 -0
  160. package/dist/runtime/context/contextual-blocks.js +158 -0
  161. package/dist/runtime/context/environment.d.ts +5 -0
  162. package/dist/runtime/context/gc-candidates-code.d.ts +6 -0
  163. package/dist/runtime/context/gc-candidates-code.js +102 -0
  164. package/dist/runtime/context/gc-candidates-exec.d.ts +6 -0
  165. package/dist/runtime/context/gc-candidates-exec.js +131 -0
  166. package/dist/runtime/context/gc-candidates-read-patch.d.ts +7 -0
  167. package/dist/runtime/context/gc-candidates-read-patch.js +118 -0
  168. package/dist/runtime/context/gc-candidates-subagent.d.ts +6 -0
  169. package/dist/runtime/context/gc-candidates-subagent.js +100 -0
  170. package/dist/runtime/context/gc-candidates-web.d.ts +6 -0
  171. package/dist/runtime/context/gc-candidates-web.js +58 -0
  172. package/dist/runtime/context/gc-candidates.d.ts +12 -0
  173. package/dist/runtime/context/gc-candidates.js +192 -0
  174. package/dist/runtime/context/gc-contracts.d.ts +57 -0
  175. package/dist/runtime/context/gc-economics.d.ts +48 -0
  176. package/dist/runtime/context/gc-economics.js +161 -0
  177. package/dist/runtime/context/gc-runtime.d.ts +43 -0
  178. package/dist/runtime/context/gc-tokens.d.ts +26 -0
  179. package/dist/runtime/context/gc-tokens.js +106 -0
  180. package/dist/runtime/context/gc.d.ts +7 -0
  181. package/dist/runtime/context/gc.js +552 -0
  182. package/dist/runtime/context/instructions.d.ts +37 -0
  183. package/dist/runtime/context/instructions.js +297 -0
  184. package/dist/runtime/context/normalize.d.ts +5 -0
  185. package/dist/runtime/context/projection.d.ts +23 -0
  186. package/dist/runtime/context/projection.js +284 -0
  187. package/dist/runtime/context/request-budget.d.ts +5 -0
  188. package/dist/runtime/context/request-budget.js +25 -0
  189. package/dist/runtime/context/restore.d.ts +27 -0
  190. package/dist/runtime/context/restore.js +186 -0
  191. package/dist/runtime/context/usage.d.ts +17 -0
  192. package/dist/runtime/context/usage.js +124 -0
  193. package/dist/runtime/context/world-state.d.ts +34 -0
  194. package/dist/runtime/context/world-state.js +232 -0
  195. package/dist/runtime/contracts.d.ts +29 -0
  196. package/dist/runtime/event-projection.d.ts +14 -0
  197. package/dist/runtime/event-projection.js +87 -0
  198. package/dist/runtime/events.d.ts +195 -0
  199. package/dist/runtime/execution-handle.d.ts +12 -0
  200. package/dist/runtime/execution-handle.js +1 -0
  201. package/dist/runtime/execution.d.ts +55 -0
  202. package/dist/runtime/execution.js +444 -0
  203. package/dist/runtime/model-progress.js +85 -0
  204. package/dist/runtime/resource-publication.d.ts +27 -0
  205. package/dist/runtime/resource-publication.js +60 -0
  206. package/dist/runtime/tool-round-contract.d.ts +19 -0
  207. package/dist/runtime/tool-round-contract.js +1 -0
  208. package/dist/runtime/wait.js +82 -0
  209. package/dist/sandbox/linux/bubblewrap-sandbox-executor.d.ts +1 -1
  210. package/dist/sandbox/linux/bubblewrap-sandbox-executor.js +8 -8
  211. package/dist/sdk/agent.d.ts +7 -0
  212. package/dist/sdk/agent.js +321 -0
  213. package/dist/sdk/execution-code-mode.d.ts +18 -0
  214. package/dist/sdk/execution-code-mode.js +51 -0
  215. package/dist/sdk/execution-compact-commit.d.ts +23 -0
  216. package/dist/sdk/execution-compact-commit.js +41 -0
  217. package/dist/sdk/execution-compact-extension.d.ts +12 -0
  218. package/dist/sdk/execution-compact-extension.js +46 -0
  219. package/dist/sdk/execution-compact-generation.d.ts +17 -0
  220. package/dist/sdk/execution-compact-generation.js +30 -0
  221. package/dist/sdk/execution-compaction-flight.d.ts +31 -0
  222. package/dist/sdk/execution-compaction-flight.js +50 -0
  223. package/dist/sdk/execution-compaction.d.ts +47 -0
  224. package/dist/sdk/execution-compaction.js +121 -0
  225. package/dist/sdk/execution-context-coordinator.d.ts +56 -0
  226. package/dist/sdk/execution-context-coordinator.js +102 -0
  227. package/dist/sdk/execution-input.d.ts +58 -0
  228. package/dist/sdk/execution-input.js +266 -0
  229. package/dist/sdk/execution-model-context.d.ts +52 -0
  230. package/dist/sdk/execution-model-context.js +156 -0
  231. package/dist/sdk/execution-model-lifecycle.d.ts +39 -0
  232. package/dist/sdk/execution-model-lifecycle.js +73 -0
  233. package/dist/sdk/execution-model-request.d.ts +40 -0
  234. package/dist/sdk/execution-model-request.js +45 -0
  235. package/dist/sdk/execution-round-preparation.d.ts +11 -0
  236. package/dist/sdk/execution-round-preparation.js +18 -0
  237. package/dist/sdk/execution-round-request.d.ts +30 -0
  238. package/dist/sdk/execution-round-request.js +31 -0
  239. package/dist/sdk/execution-tool-catalog.d.ts +46 -0
  240. package/dist/sdk/execution-tool-catalog.js +103 -0
  241. package/dist/sdk/execution-tool-scope.d.ts +67 -0
  242. package/dist/sdk/execution-tool-scope.js +147 -0
  243. package/dist/sdk/extension-agent-controller.d.ts +3 -0
  244. package/dist/sdk/extension-agent-controller.js +69 -0
  245. package/dist/sdk/extension-agents.d.ts +9 -0
  246. package/dist/sdk/extension-agents.js +58 -0
  247. package/dist/sdk/extension-models.d.ts +17 -0
  248. package/dist/sdk/extension-models.js +142 -0
  249. package/dist/sdk/extension-session-launch.d.ts +18 -0
  250. package/dist/sdk/extension-session-launch.js +73 -0
  251. package/dist/sdk/extension-session.d.ts +30 -0
  252. package/dist/sdk/extension-session.js +107 -0
  253. package/dist/sdk/extension-tool-runtime.d.ts +2 -0
  254. package/dist/sdk/extension-tool-runtime.js +14 -0
  255. package/dist/sdk/extension-tools.d.ts +16 -0
  256. package/dist/sdk/extension-tools.js +126 -0
  257. package/dist/sdk/model-input-projection.d.ts +4 -0
  258. package/dist/sdk/model-input-projection.js +27 -0
  259. package/dist/sdk/model-runtime.d.ts +21 -0
  260. package/dist/sdk/model-runtime.js +91 -0
  261. package/dist/sdk/native-steer.d.ts +20 -0
  262. package/dist/sdk/native-steer.js +84 -0
  263. package/dist/sdk/request-preparation.d.ts +9 -0
  264. package/dist/sdk/resource-input.d.ts +33 -0
  265. package/dist/sdk/resource-input.js +402 -0
  266. package/dist/sdk/session-catalog.d.ts +2 -0
  267. package/dist/sdk/session-catalog.js +12 -0
  268. package/dist/sdk/session-composition.d.ts +54 -0
  269. package/dist/sdk/session-composition.js +1 -0
  270. package/dist/sdk/session-execution-factory.d.ts +43 -0
  271. package/dist/sdk/session-execution-factory.js +937 -0
  272. package/dist/sdk/session-execution.d.ts +163 -0
  273. package/dist/sdk/session-execution.js +388 -0
  274. package/dist/sdk/session-extension-messages.d.ts +16 -0
  275. package/dist/sdk/session-extension-messages.js +64 -0
  276. package/dist/sdk/session-extension-prompt.d.ts +35 -0
  277. package/dist/sdk/session-extension-prompt.js +62 -0
  278. package/dist/sdk/session-maintenance.d.ts +25 -0
  279. package/dist/sdk/session-maintenance.js +205 -0
  280. package/dist/sdk/session-model-adapters.d.ts +28 -0
  281. package/dist/sdk/session-model-adapters.js +96 -0
  282. package/dist/sdk/session-open.d.ts +22 -0
  283. package/dist/sdk/session-open.js +44 -0
  284. package/dist/sdk/session-registry.d.ts +17 -0
  285. package/dist/sdk/session-registry.js +83 -0
  286. package/dist/sdk/session-runtime.d.ts +72 -0
  287. package/dist/sdk/session-runtime.js +205 -0
  288. package/dist/sdk/session.d.ts +3 -0
  289. package/dist/sdk/session.js +313 -0
  290. package/dist/sdk/subagent-backend.d.ts +3 -0
  291. package/dist/sdk/subagent-backend.js +49 -0
  292. package/dist/sdk/types.d.ts +80 -0
  293. package/dist/sdk/types.js +1 -0
  294. package/dist/session/catalog.d.ts +70 -0
  295. package/dist/session/catalog.js +194 -0
  296. package/dist/session/code-observation-contract.d.ts +40 -0
  297. package/dist/session/code-observation-contract.js +1 -0
  298. package/dist/session/code-observation-projection.d.ts +54 -0
  299. package/dist/session/code-observation-projection.js +165 -0
  300. package/dist/session/code-state.d.ts +27 -0
  301. package/dist/session/code-state.js +89 -0
  302. package/dist/session/context-gc-checkpoint.d.ts +26 -0
  303. package/dist/session/context-gc-checkpoint.js +935 -0
  304. package/dist/session/context-gc-contract.d.ts +141 -0
  305. package/dist/session/context-gc-contract.js +1 -0
  306. package/dist/session/context-gc-observations.d.ts +58 -0
  307. package/dist/session/context-gc-observations.js +187 -0
  308. package/dist/session/context-gc-replacements.d.ts +63 -0
  309. package/dist/session/context-gc-subagent.d.ts +54 -0
  310. package/dist/session/deferred-input.d.ts +5 -0
  311. package/dist/session/deferred-input.js +74 -0
  312. package/dist/session/extension-checkpoint.d.ts +8 -0
  313. package/dist/session/extension-checkpoint.js +30 -0
  314. package/dist/session/history-input-limits.d.ts +4 -0
  315. package/dist/session/history-input-limits.js +4 -0
  316. package/dist/session/inline-media-contract.d.ts +16 -0
  317. package/dist/session/inline-media-contract.js +1 -0
  318. package/dist/session/inline-media.d.ts +26 -0
  319. package/dist/session/inline-media.js +138 -0
  320. package/dist/session/model-request.d.ts +14 -0
  321. package/dist/session/model-request.js +1 -0
  322. package/dist/session/record-contract.d.ts +19 -0
  323. package/dist/session/record-contract.js +1 -0
  324. package/dist/session/record-projection.d.ts +6 -0
  325. package/dist/session/record-projection.js +80 -0
  326. package/dist/session/resource-contract.d.ts +9 -0
  327. package/dist/session/resource-contract.js +1 -0
  328. package/dist/session/rollback.d.ts +13 -0
  329. package/dist/session/rollback.js +46 -0
  330. package/dist/session/store/contracts.d.ts +160 -0
  331. package/dist/session/store/contracts.js +1 -0
  332. package/dist/session/store/current-state.d.ts +17 -0
  333. package/dist/session/store/current-state.js +53 -0
  334. package/dist/session/store/execution-state.d.ts +13 -0
  335. package/dist/session/store/execution-state.js +103 -0
  336. package/dist/session/store/index.d.ts +4 -0
  337. package/dist/session/store/index.js +2 -0
  338. package/dist/session/store/jsonl/directory-index.d.ts +26 -0
  339. package/dist/session/store/jsonl/directory-index.js +283 -0
  340. package/dist/session/store/jsonl/fork-session.d.ts +19 -0
  341. package/dist/session/store/jsonl/fork-session.js +142 -0
  342. package/dist/session/store/jsonl/fs-durability.d.ts +3 -0
  343. package/dist/session/store/jsonl/fs-durability.js +17 -0
  344. package/dist/session/store/jsonl/history-replacement.d.ts +48 -0
  345. package/dist/session/store/jsonl/history-replacement.js +147 -0
  346. package/dist/session/store/jsonl/history.d.ts +25 -0
  347. package/dist/session/store/jsonl/history.js +181 -0
  348. package/dist/session/store/jsonl/images.d.ts +19 -0
  349. package/dist/session/store/jsonl/images.js +122 -0
  350. package/dist/session/store/jsonl/index-transaction.d.ts +13 -0
  351. package/dist/session/store/jsonl/index-transaction.js +87 -0
  352. package/dist/session/store/jsonl/jsonl-admission.d.ts +10 -0
  353. package/dist/session/store/jsonl/jsonl-admission.js +205 -0
  354. package/dist/session/store/jsonl/jsonl-codec.d.ts +11 -0
  355. package/dist/session/store/jsonl/jsonl-codec.js +138 -0
  356. package/dist/session/store/jsonl/jsonl-migration.d.ts +12 -0
  357. package/dist/session/store/jsonl/jsonl-migration.js +105 -0
  358. package/dist/session/store/jsonl/jsonl-store.d.ts +171 -0
  359. package/dist/session/store/jsonl/jsonl-store.js +2395 -0
  360. package/dist/session/store/jsonl/open-recovery.d.ts +13 -0
  361. package/dist/session/store/jsonl/open-recovery.js +131 -0
  362. package/dist/session/store/jsonl/read-pins.d.ts +4 -0
  363. package/dist/session/store/jsonl/read-pins.js +131 -0
  364. package/dist/session/store/jsonl/record-append.d.ts +16 -0
  365. package/dist/session/store/jsonl/record-append.js +49 -0
  366. package/dist/session/store/jsonl/records.d.ts +30 -0
  367. package/dist/session/store/jsonl/records.js +313 -0
  368. package/dist/session/store/jsonl/resources.d.ts +19 -0
  369. package/dist/session/store/jsonl/resources.js +209 -0
  370. package/dist/session/store/jsonl/store-pool.d.ts +12 -0
  371. package/dist/session/store/jsonl/store-pool.js +55 -0
  372. package/dist/session/store/jsonl/transaction-recovery.d.ts +48 -0
  373. package/dist/session/store/jsonl/transaction-recovery.js +374 -0
  374. package/dist/session/store/jsonl/tree-maintenance.d.ts +12 -0
  375. package/dist/session/store/jsonl/tree-maintenance.js +59 -0
  376. package/dist/session/store/types.d.ts +69 -0
  377. package/dist/session/store/types.js +1 -0
  378. package/dist/session/summary.d.ts +18 -0
  379. package/dist/session/summary.js +1 -0
  380. package/dist/session/todo.d.ts +11 -0
  381. package/dist/session/todo.js +30 -0
  382. package/dist/session/tool-result-resources.d.ts +27 -0
  383. package/dist/session/tool-result-resources.js +255 -0
  384. package/dist/session/types.js +1 -0
  385. package/dist/session/user-history.d.ts +17 -0
  386. package/dist/session/user-history.js +1 -0
  387. package/dist/session-store.d.ts +2 -0
  388. package/dist/session-store.js +1 -0
  389. package/dist/shared/auto-title.d.ts +3 -3
  390. package/dist/shared/auto-title.js +6 -6
  391. package/dist/shared/model-text.d.ts +8 -8
  392. package/dist/shared/model-text.js +8 -7
  393. package/dist/storage/file-lock.js +83 -0
  394. package/dist/subagent/contracts.d.ts +107 -0
  395. package/dist/subagent/contracts.js +1 -0
  396. package/dist/subagent/limits.d.ts +17 -0
  397. package/dist/subagent/limits.js +17 -0
  398. package/dist/subagent/model-update.js +81 -0
  399. package/dist/subagent/session-controller.d.ts +87 -0
  400. package/dist/subagent/session-controller.js +1343 -0
  401. package/dist/subagent/task.d.ts +134 -0
  402. package/dist/subagent/task.js +436 -0
  403. package/dist/subagent/turn-contracts.d.ts +64 -0
  404. package/dist/subagent/turn-contracts.js +1 -0
  405. package/dist/subagent/wait-targets.d.ts +10 -0
  406. package/dist/subagent/wait-targets.js +26 -0
  407. package/dist/subagent/wait.d.ts +26 -0
  408. package/dist/subagent/wait.js +73 -0
  409. package/dist/tools/agent/agent-cancel.d.ts +7 -0
  410. package/dist/tools/agent/agent-cancel.js +29 -0
  411. package/dist/tools/agent/agent-message.d.ts +7 -0
  412. package/dist/tools/agent/agent-message.js +57 -0
  413. package/dist/tools/agent/agent-start.d.ts +12 -0
  414. package/dist/tools/agent/agent-start.js +106 -0
  415. package/dist/tools/agent/agent-wait.d.ts +7 -0
  416. package/dist/tools/agent/agent-wait.js +91 -0
  417. package/dist/tools/agent/question.d.ts +7 -0
  418. package/dist/tools/agent/question.js +125 -0
  419. package/dist/tools/agent/skill.d.ts +11 -0
  420. package/dist/tools/agent/skill.js +38 -0
  421. package/dist/tools/agent/sleep.d.ts +9 -0
  422. package/dist/tools/agent/sleep.js +54 -0
  423. package/dist/tools/agent/smart-compact.d.ts +9 -0
  424. package/dist/tools/agent/smart-compact.js +23 -0
  425. package/dist/tools/agent/todo-read.d.ts +14 -0
  426. package/dist/tools/agent/todo-write.d.ts +14 -0
  427. package/dist/tools/agent/todo-write.js +66 -0
  428. package/dist/tools/agent/todo.d.ts +25 -0
  429. package/dist/tools/agent/todo.js +32 -0
  430. package/dist/tools/callers.d.ts +7 -0
  431. package/dist/tools/callers.js +39 -0
  432. package/dist/tools/code-mode/cells.d.ts +29 -0
  433. package/dist/tools/code-mode/cells.js +338 -0
  434. package/dist/tools/code-mode/dispatch.d.ts +20 -0
  435. package/dist/tools/code-mode/dispatch.js +80 -0
  436. package/dist/tools/code-mode/engine.d.ts +60 -0
  437. package/dist/tools/code-mode/engine.js +1 -0
  438. package/dist/tools/code-mode/index.d.ts +31 -0
  439. package/dist/tools/code-mode/index.js +751 -0
  440. package/dist/tools/code-mode/observations.d.ts +8 -0
  441. package/dist/tools/code-mode/observations.js +64 -0
  442. package/dist/tools/code-mode/worker.d.ts +1 -0
  443. package/dist/tools/contracts.d.ts +193 -0
  444. package/dist/tools/contracts.js +1 -0
  445. package/dist/tools/definition-projection.d.ts +1 -0
  446. package/dist/tools/definition-projection.js +1 -0
  447. package/dist/tools/execution-limits.d.ts +69 -0
  448. package/dist/tools/execution-limits.js +58 -0
  449. package/dist/tools/execution.d.ts +30 -0
  450. package/dist/tools/execution.js +191 -0
  451. package/dist/tools/local/apply-patch-parser.js +177 -0
  452. package/dist/tools/local/apply-patch.d.ts +19 -0
  453. package/dist/tools/local/apply-patch.js +489 -0
  454. package/dist/tools/local/exec.d.ts +28 -0
  455. package/dist/tools/local/exec.js +194 -0
  456. package/dist/tools/local/image-processing.js +146 -0
  457. package/dist/tools/local/read.d.ts +43 -0
  458. package/dist/tools/local/read.js +470 -0
  459. package/dist/tools/local/view-image.d.ts +15 -0
  460. package/dist/tools/local/view-image.js +317 -0
  461. package/dist/tools/mcp/catalog.js +220 -0
  462. package/dist/tools/mcp/history.d.ts +4 -0
  463. package/dist/tools/mcp/tool-search.d.ts +45 -0
  464. package/dist/tools/mcp/tool-search.js +294 -0
  465. package/dist/tools/output-projection.d.ts +18 -0
  466. package/dist/tools/output-projection.js +341 -0
  467. package/dist/tools/permission-contract.d.ts +25 -0
  468. package/dist/tools/permission-contract.js +1 -0
  469. package/dist/tools/permissions.d.ts +61 -0
  470. package/dist/tools/permissions.js +237 -0
  471. package/dist/tools/registry.d.ts +7 -0
  472. package/dist/tools/result-extension-contract.d.ts +37 -0
  473. package/dist/tools/result-extension-contract.js +32 -0
  474. package/dist/tools/result-extensions.d.ts +12 -0
  475. package/dist/tools/result-extensions.js +104 -0
  476. package/dist/tools/runtime-context.d.ts +89 -0
  477. package/dist/tools/runtime-context.js +1 -0
  478. package/dist/tools/runtime-resource-handles.js +28 -0
  479. package/dist/tools/runtime.js +77 -0
  480. package/dist/tools/scheduler.d.ts +12 -0
  481. package/dist/tools/shared/path-resolver.js +133 -0
  482. package/dist/tools/wait.d.ts +1 -0
  483. package/dist/tools/wait.js +1 -0
  484. package/package.json +15 -3
  485. package/dist/agent-core/error.d.ts +0 -15
  486. package/dist/agent-core/error.js +0 -74
  487. package/dist/agent-core/extensions/agents.d.ts +0 -79
  488. package/dist/agent-core/extensions/agents.js +0 -186
  489. package/dist/agent-core/extensions/compaction.d.ts +0 -48
  490. package/dist/agent-core/extensions/contracts.d.ts +0 -265
  491. package/dist/agent-core/extensions/data.d.ts +0 -84
  492. package/dist/agent-core/extensions/data.js +0 -83
  493. package/dist/agent-core/extensions/environment.d.ts +0 -27
  494. package/dist/agent-core/extensions/environment.js +0 -52
  495. package/dist/agent-core/extensions/files.d.ts +0 -64
  496. package/dist/agent-core/extensions/files.js +0 -26
  497. package/dist/agent-core/extensions/hooks.d.ts +0 -32
  498. package/dist/agent-core/extensions/manager.d.ts +0 -39
  499. package/dist/agent-core/extensions/manager.js +0 -458
  500. package/dist/agent-core/extensions/mcp.d.ts +0 -99
  501. package/dist/agent-core/extensions/mcp.js +0 -433
  502. package/dist/agent-core/extensions/model-request.d.ts +0 -56
  503. package/dist/agent-core/extensions/model-request.js +0 -197
  504. package/dist/agent-core/extensions/model-stream.d.ts +0 -9
  505. package/dist/agent-core/extensions/model-stream.js +0 -108
  506. package/dist/agent-core/extensions/models.d.ts +0 -43
  507. package/dist/agent-core/extensions/network.d.ts +0 -32
  508. package/dist/agent-core/extensions/network.js +0 -97
  509. package/dist/agent-core/extensions/operation.d.ts +0 -30
  510. package/dist/agent-core/extensions/processes.d.ts +0 -52
  511. package/dist/agent-core/extensions/processes.js +0 -284
  512. package/dist/agent-core/extensions/prompt-composition.d.ts +0 -24
  513. package/dist/agent-core/extensions/prompt-composition.js +0 -106
  514. package/dist/agent-core/extensions/prompt-input.d.ts +0 -23
  515. package/dist/agent-core/extensions/prompt-input.js +0 -48
  516. package/dist/agent-core/extensions/resources.d.ts +0 -27
  517. package/dist/agent-core/extensions/resources.js +0 -221
  518. package/dist/agent-core/extensions/services.d.ts +0 -31
  519. package/dist/agent-core/extensions/services.js +0 -61
  520. package/dist/agent-core/extensions/session-input.d.ts +0 -163
  521. package/dist/agent-core/extensions/session-input.js +0 -411
  522. package/dist/agent-core/extensions/session-messages.d.ts +0 -41
  523. package/dist/agent-core/extensions/session-messages.js +0 -76
  524. package/dist/agent-core/extensions/session.d.ts +0 -69
  525. package/dist/agent-core/extensions/session.js +0 -607
  526. package/dist/agent-core/extensions/settings.d.ts +0 -59
  527. package/dist/agent-core/extensions/settings.js +0 -115
  528. package/dist/agent-core/extensions/store.d.ts +0 -10
  529. package/dist/agent-core/extensions/store.js +0 -131
  530. package/dist/agent-core/extensions/tools.d.ts +0 -61
  531. package/dist/agent-core/extensions/tools.js +0 -269
  532. package/dist/agent-core/host/contracts.d.ts +0 -100
  533. package/dist/agent-core/host/contracts.js +0 -18
  534. package/dist/agent-core/host/local-agent-host.d.ts +0 -96
  535. package/dist/agent-core/host/local-agent-host.js +0 -425
  536. package/dist/agent-core/host/local-file-access.d.ts +0 -30
  537. package/dist/agent-core/host/local-file-access.js +0 -107
  538. package/dist/agent-core/host/local-network-access.d.ts +0 -6
  539. package/dist/agent-core/host/local-network-access.js +0 -101
  540. package/dist/agent-core/host/local-process-executor.d.ts +0 -29
  541. package/dist/agent-core/host/local-process-executor.js +0 -41
  542. package/dist/agent-core/host/local-session-environment.d.ts +0 -18
  543. package/dist/agent-core/host/local-shell.d.ts +0 -3
  544. package/dist/agent-core/host/network.d.ts +0 -4
  545. package/dist/agent-core/host/network.js +0 -6
  546. package/dist/agent-core/model/anthropic-messages.d.ts +0 -10
  547. package/dist/agent-core/model/anthropic-messages.js +0 -707
  548. package/dist/agent-core/model/anthropic-thinking.js +0 -33
  549. package/dist/agent-core/model/catalog-file.d.ts +0 -80
  550. package/dist/agent-core/model/catalog-file.js +0 -103
  551. package/dist/agent-core/model/configuration.d.ts +0 -127
  552. package/dist/agent-core/model/configuration.js +0 -168
  553. package/dist/agent-core/model/contracts.d.ts +0 -229
  554. package/dist/agent-core/model/http.d.ts +0 -27
  555. package/dist/agent-core/model/http.js +0 -534
  556. package/dist/agent-core/model/image.d.ts +0 -17
  557. package/dist/agent-core/model/openai-responses.d.ts +0 -77
  558. package/dist/agent-core/model/openai-responses.js +0 -2123
  559. package/dist/agent-core/model/product-user-agent.d.ts +0 -5
  560. package/dist/agent-core/model/product-user-agent.js +0 -22
  561. package/dist/agent-core/model/recovery.js +0 -80
  562. package/dist/agent-core/model/request-configuration.d.ts +0 -17
  563. package/dist/agent-core/model/request-configuration.js +0 -47
  564. package/dist/agent-core/model/runtime-credential.d.ts +0 -8
  565. package/dist/agent-core/model/runtime-credential.js +0 -72
  566. package/dist/agent-core/model/sse.js +0 -281
  567. package/dist/agent-core/model/text-blocks.js +0 -40
  568. package/dist/agent-core/model/tool-declarations.d.ts +0 -4
  569. package/dist/agent-core/model/transport-test.d.ts +0 -3
  570. package/dist/agent-core/model/transport-test.js +0 -23
  571. package/dist/agent-core/model/usage-observer.d.ts +0 -31
  572. package/dist/agent-core/prompts/index.d.ts +0 -20
  573. package/dist/agent-core/prompts/index.js +0 -49
  574. package/dist/agent-core/runtime/compaction/coordinator.js +0 -88
  575. package/dist/agent-core/runtime/compaction/generate.d.ts +0 -28
  576. package/dist/agent-core/runtime/compaction/generate.js +0 -84
  577. package/dist/agent-core/runtime/compaction/history.d.ts +0 -16
  578. package/dist/agent-core/runtime/compaction/operation.d.ts +0 -29
  579. package/dist/agent-core/runtime/compaction/operation.js +0 -131
  580. package/dist/agent-core/runtime/compaction/requests.d.ts +0 -16
  581. package/dist/agent-core/runtime/compaction/requests.js +0 -114
  582. package/dist/agent-core/runtime/compaction/retained-context.d.ts +0 -6
  583. package/dist/agent-core/runtime/compaction/retained-context.js +0 -47
  584. package/dist/agent-core/runtime/compaction/smart.d.ts +0 -14
  585. package/dist/agent-core/runtime/compaction/smart.js +0 -59
  586. package/dist/agent-core/runtime/context/contextual-blocks.d.ts +0 -30
  587. package/dist/agent-core/runtime/context/contextual-blocks.js +0 -146
  588. package/dist/agent-core/runtime/context/environment.d.ts +0 -5
  589. package/dist/agent-core/runtime/context/gc-runtime.d.ts +0 -38
  590. package/dist/agent-core/runtime/context/gc-tokens.d.ts +0 -25
  591. package/dist/agent-core/runtime/context/gc-tokens.js +0 -103
  592. package/dist/agent-core/runtime/context/gc.d.ts +0 -75
  593. package/dist/agent-core/runtime/context/gc.js +0 -1386
  594. package/dist/agent-core/runtime/context/instructions.d.ts +0 -37
  595. package/dist/agent-core/runtime/context/instructions.js +0 -297
  596. package/dist/agent-core/runtime/context/normalize.d.ts +0 -5
  597. package/dist/agent-core/runtime/context/projection.d.ts +0 -23
  598. package/dist/agent-core/runtime/context/projection.js +0 -284
  599. package/dist/agent-core/runtime/context/request-budget.d.ts +0 -4
  600. package/dist/agent-core/runtime/context/request-budget.js +0 -25
  601. package/dist/agent-core/runtime/context/restore.d.ts +0 -25
  602. package/dist/agent-core/runtime/context/restore.js +0 -186
  603. package/dist/agent-core/runtime/context/usage.d.ts +0 -17
  604. package/dist/agent-core/runtime/context/usage.js +0 -124
  605. package/dist/agent-core/runtime/context/world-state.d.ts +0 -33
  606. package/dist/agent-core/runtime/context/world-state.js +0 -232
  607. package/dist/agent-core/runtime/contracts.d.ts +0 -41
  608. package/dist/agent-core/runtime/event-projection.d.ts +0 -14
  609. package/dist/agent-core/runtime/event-projection.js +0 -87
  610. package/dist/agent-core/runtime/events.d.ts +0 -197
  611. package/dist/agent-core/runtime/execution-handle.d.ts +0 -12
  612. package/dist/agent-core/runtime/execution.d.ts +0 -50
  613. package/dist/agent-core/runtime/execution.js +0 -445
  614. package/dist/agent-core/runtime/model-progress.js +0 -85
  615. package/dist/agent-core/runtime/resource-publication.d.ts +0 -8
  616. package/dist/agent-core/runtime/resource-publication.js +0 -60
  617. package/dist/agent-core/sdk/agent.d.ts +0 -11
  618. package/dist/agent-core/sdk/agent.js +0 -474
  619. package/dist/agent-core/sdk/extension-agents.d.ts +0 -9
  620. package/dist/agent-core/sdk/extension-agents.js +0 -58
  621. package/dist/agent-core/sdk/extension-models.d.ts +0 -13
  622. package/dist/agent-core/sdk/extension-models.js +0 -137
  623. package/dist/agent-core/sdk/extension-session.d.ts +0 -30
  624. package/dist/agent-core/sdk/extension-session.js +0 -105
  625. package/dist/agent-core/sdk/extension-tools.d.ts +0 -16
  626. package/dist/agent-core/sdk/extension-tools.js +0 -126
  627. package/dist/agent-core/sdk/model-runtime.d.ts +0 -18
  628. package/dist/agent-core/sdk/model-runtime.js +0 -93
  629. package/dist/agent-core/sdk/native-steer.d.ts +0 -20
  630. package/dist/agent-core/sdk/native-steer.js +0 -84
  631. package/dist/agent-core/sdk/request-preparation.d.ts +0 -7
  632. package/dist/agent-core/sdk/resource-input.d.ts +0 -32
  633. package/dist/agent-core/sdk/resource-input.js +0 -403
  634. package/dist/agent-core/sdk/session.d.ts +0 -94
  635. package/dist/agent-core/sdk/session.js +0 -2377
  636. package/dist/agent-core/sdk/subagent-backend.d.ts +0 -3
  637. package/dist/agent-core/sdk/subagent-backend.js +0 -49
  638. package/dist/agent-core/sdk/types.d.ts +0 -81
  639. package/dist/agent-core/session/catalog.d.ts +0 -99
  640. package/dist/agent-core/session/catalog.js +0 -200
  641. package/dist/agent-core/session/context-gc-checkpoint.d.ts +0 -165
  642. package/dist/agent-core/session/context-gc-checkpoint.js +0 -935
  643. package/dist/agent-core/session/context-gc-observations.d.ts +0 -60
  644. package/dist/agent-core/session/context-gc-observations.js +0 -187
  645. package/dist/agent-core/session/context-gc-replacements.d.ts +0 -62
  646. package/dist/agent-core/session/context-gc-subagent.d.ts +0 -53
  647. package/dist/agent-core/session/deferred-input.d.ts +0 -5
  648. package/dist/agent-core/session/deferred-input.js +0 -74
  649. package/dist/agent-core/session/inline-media.d.ts +0 -45
  650. package/dist/agent-core/session/inline-media.js +0 -163
  651. package/dist/agent-core/session/rollback.d.ts +0 -13
  652. package/dist/agent-core/session/rollback.js +0 -46
  653. package/dist/agent-core/session/store/contracts.d.ts +0 -158
  654. package/dist/agent-core/session/store/current-state.d.ts +0 -17
  655. package/dist/agent-core/session/store/current-state.js +0 -53
  656. package/dist/agent-core/session/store/directory-index.d.ts +0 -18
  657. package/dist/agent-core/session/store/directory-index.js +0 -169
  658. package/dist/agent-core/session/store/execution-state.d.ts +0 -18
  659. package/dist/agent-core/session/store/execution-state.js +0 -175
  660. package/dist/agent-core/session/store/history.d.ts +0 -25
  661. package/dist/agent-core/session/store/history.js +0 -181
  662. package/dist/agent-core/session/store/images.d.ts +0 -19
  663. package/dist/agent-core/session/store/images.js +0 -110
  664. package/dist/agent-core/session/store/index.d.ts +0 -4
  665. package/dist/agent-core/session/store/index.js +0 -2
  666. package/dist/agent-core/session/store/jsonl-store.d.ts +0 -171
  667. package/dist/agent-core/session/store/jsonl-store.js +0 -2078
  668. package/dist/agent-core/session/store/records.d.ts +0 -23
  669. package/dist/agent-core/session/store/records.js +0 -261
  670. package/dist/agent-core/session/store/resources.d.ts +0 -26
  671. package/dist/agent-core/session/store/resources.js +0 -197
  672. package/dist/agent-core/session/store/types.d.ts +0 -82
  673. package/dist/agent-core/session/tool-result-resources.d.ts +0 -26
  674. package/dist/agent-core/session/tool-result-resources.js +0 -256
  675. package/dist/agent-core/session/transaction-recovery.d.ts +0 -16
  676. package/dist/agent-core/session/transaction-recovery.js +0 -135
  677. package/dist/agent-core/storage/file-lock.js +0 -83
  678. package/dist/agent-core/subagent/contracts.d.ts +0 -117
  679. package/dist/agent-core/subagent/model-update.js +0 -81
  680. package/dist/agent-core/subagent/scheduler.d.ts +0 -135
  681. package/dist/agent-core/subagent/scheduler.js +0 -369
  682. package/dist/agent-core/subagent/session-controller.d.ts +0 -138
  683. package/dist/agent-core/subagent/session-controller.js +0 -1594
  684. package/dist/agent-core/subagent/wait.d.ts +0 -14
  685. package/dist/agent-core/subagent/wait.js +0 -32
  686. package/dist/agent-core/tools/agent/agent-cancel.d.ts +0 -7
  687. package/dist/agent-core/tools/agent/agent-cancel.js +0 -29
  688. package/dist/agent-core/tools/agent/agent-message.d.ts +0 -7
  689. package/dist/agent-core/tools/agent/agent-message.js +0 -57
  690. package/dist/agent-core/tools/agent/agent-start.d.ts +0 -12
  691. package/dist/agent-core/tools/agent/agent-start.js +0 -106
  692. package/dist/agent-core/tools/agent/agent-wait.d.ts +0 -7
  693. package/dist/agent-core/tools/agent/agent-wait.js +0 -91
  694. package/dist/agent-core/tools/agent/question.d.ts +0 -7
  695. package/dist/agent-core/tools/agent/question.js +0 -125
  696. package/dist/agent-core/tools/agent/skill.d.ts +0 -11
  697. package/dist/agent-core/tools/agent/skill.js +0 -38
  698. package/dist/agent-core/tools/agent/sleep.d.ts +0 -12
  699. package/dist/agent-core/tools/agent/sleep.js +0 -54
  700. package/dist/agent-core/tools/agent/smart-compact.d.ts +0 -9
  701. package/dist/agent-core/tools/agent/smart-compact.js +0 -23
  702. package/dist/agent-core/tools/agent/todo-read.d.ts +0 -14
  703. package/dist/agent-core/tools/agent/todo-write.d.ts +0 -14
  704. package/dist/agent-core/tools/agent/todo-write.js +0 -66
  705. package/dist/agent-core/tools/agent/todo.d.ts +0 -26
  706. package/dist/agent-core/tools/agent/todo.js +0 -60
  707. package/dist/agent-core/tools/callers.d.ts +0 -6
  708. package/dist/agent-core/tools/callers.js +0 -39
  709. package/dist/agent-core/tools/code-mode/cells.d.ts +0 -29
  710. package/dist/agent-core/tools/code-mode/cells.js +0 -337
  711. package/dist/agent-core/tools/code-mode/dispatch.d.ts +0 -20
  712. package/dist/agent-core/tools/code-mode/dispatch.js +0 -80
  713. package/dist/agent-core/tools/code-mode/engine.d.ts +0 -60
  714. package/dist/agent-core/tools/code-mode/index.d.ts +0 -29
  715. package/dist/agent-core/tools/code-mode/index.js +0 -749
  716. package/dist/agent-core/tools/code-mode/observations.d.ts +0 -98
  717. package/dist/agent-core/tools/code-mode/observations.js +0 -228
  718. package/dist/agent-core/tools/code-mode/state.d.ts +0 -9
  719. package/dist/agent-core/tools/code-mode/state.js +0 -82
  720. package/dist/agent-core/tools/contracts.d.ts +0 -211
  721. package/dist/agent-core/tools/definition-projection.d.ts +0 -7
  722. package/dist/agent-core/tools/definition-projection.js +0 -26
  723. package/dist/agent-core/tools/execution-limits.d.ts +0 -69
  724. package/dist/agent-core/tools/execution-limits.js +0 -69
  725. package/dist/agent-core/tools/execution.d.ts +0 -46
  726. package/dist/agent-core/tools/execution.js +0 -191
  727. package/dist/agent-core/tools/local/apply-patch-parser.js +0 -177
  728. package/dist/agent-core/tools/local/apply-patch.d.ts +0 -19
  729. package/dist/agent-core/tools/local/apply-patch.js +0 -489
  730. package/dist/agent-core/tools/local/exec.d.ts +0 -53
  731. package/dist/agent-core/tools/local/exec.js +0 -877
  732. package/dist/agent-core/tools/local/image-processing.js +0 -146
  733. package/dist/agent-core/tools/local/read-context.js +0 -152
  734. package/dist/agent-core/tools/local/read.d.ts +0 -43
  735. package/dist/agent-core/tools/local/read.js +0 -470
  736. package/dist/agent-core/tools/local/registry.d.ts +0 -34
  737. package/dist/agent-core/tools/local/registry.js +0 -132
  738. package/dist/agent-core/tools/local/view-image.d.ts +0 -15
  739. package/dist/agent-core/tools/local/view-image.js +0 -317
  740. package/dist/agent-core/tools/local/workspace-tools.d.ts +0 -12
  741. package/dist/agent-core/tools/local/workspace-tools.js +0 -28
  742. package/dist/agent-core/tools/mcp/catalog.js +0 -220
  743. package/dist/agent-core/tools/mcp/history.d.ts +0 -4
  744. package/dist/agent-core/tools/mcp/tool-search.d.ts +0 -45
  745. package/dist/agent-core/tools/mcp/tool-search.js +0 -294
  746. package/dist/agent-core/tools/output-projection.d.ts +0 -18
  747. package/dist/agent-core/tools/output-projection.js +0 -341
  748. package/dist/agent-core/tools/permissions.d.ts +0 -85
  749. package/dist/agent-core/tools/permissions.js +0 -237
  750. package/dist/agent-core/tools/registry.d.ts +0 -7
  751. package/dist/agent-core/tools/result-extensions.d.ts +0 -46
  752. package/dist/agent-core/tools/result-extensions.js +0 -134
  753. package/dist/agent-core/tools/runtime-context.d.ts +0 -74
  754. package/dist/agent-core/tools/runtime-resource-handles.js +0 -28
  755. package/dist/agent-core/tools/runtime.js +0 -77
  756. package/dist/agent-core/tools/scheduler.d.ts +0 -12
  757. package/dist/agent-core/tools/shared/path-resolver.js +0 -133
  758. package/dist/agent-core/tools/wait.js +0 -82
  759. /package/dist/{agent-core/extensions/models.js → extensions/capabilities.js} +0 -0
  760. /package/dist/{agent-core/extensions → extensions}/compaction.js +0 -0
  761. /package/dist/{agent-core/model → extensions}/contracts.js +0 -0
  762. /package/dist/{agent-core/extensions → extensions}/hooks.js +0 -0
  763. /package/dist/{agent-core/runtime/context/contracts.js → extensions/host-ports.js} +0 -0
  764. /package/dist/{agent-core/extensions → extensions}/operation.js +0 -0
  765. /package/dist/{agent-core/runtime/contracts.js → extensions/tool-runtime.js} +0 -0
  766. /package/dist/{agent-core/extensions/contracts.js → extensions.js} +0 -0
  767. /package/dist/{agent-core/runtime/events.js → host/description.js} +0 -0
  768. /package/dist/{agent-core/host → host}/local-session-environment.js +0 -0
  769. /package/dist/{agent-core/host → host}/local-shell.js +0 -0
  770. /package/dist/{agent-core/runtime/execution-handle.js → host/skill-contract.js} +0 -0
  771. /package/dist/{agent-core/model → model}/anthropic-thinking.d.ts +0 -0
  772. /package/dist/{agent-core/model → model}/attempt-diagnostics.d.ts +0 -0
  773. /package/dist/{agent-core/model → model}/attempt-diagnostics.js +0 -0
  774. /package/dist/{agent-core/session/store → model}/contracts.js +0 -0
  775. /package/dist/{agent-core/sdk/types.js → model/image-contract.js} +0 -0
  776. /package/dist/{agent-core/model → model}/image.js +0 -0
  777. /package/dist/{agent-core/model → model}/native-context.d.ts +0 -0
  778. /package/dist/{agent-core/model → model}/native-context.js +0 -0
  779. /package/dist/{agent-core/model → model}/recovery.d.ts +0 -0
  780. /package/dist/{agent-core/model → model}/sse.d.ts +0 -0
  781. /package/dist/{agent-core/model → model}/text-blocks.d.ts +0 -0
  782. /package/dist/{agent-core/model → model}/tool-declarations.js +0 -0
  783. /package/dist/{agent-core/model → model}/tool-input.d.ts +0 -0
  784. /package/dist/{agent-core/model → model}/tool-input.js +0 -0
  785. /package/dist/{agent-core/model → model}/usage-observer.js +0 -0
  786. /package/dist/{agent-core/session/store/types.js → model/usage.js} +0 -0
  787. /package/dist/{agent-core/subagent → process}/contracts.js +0 -0
  788. /package/dist/{agent-core/prompts → prompts}/compact.d.ts +0 -0
  789. /package/dist/{agent-core/prompts → prompts}/compact.js +0 -0
  790. /package/dist/{agent-core/prompts → prompts}/core.d.ts +0 -0
  791. /package/dist/{agent-core/prompts → prompts}/core.js +0 -0
  792. /package/dist/{agent-core/prompts → prompts}/markup.d.ts +0 -0
  793. /package/dist/{agent-core/prompts → prompts}/markup.js +0 -0
  794. /package/dist/{agent-core/prompts → prompts}/modes.d.ts +0 -0
  795. /package/dist/{agent-core/prompts → prompts}/modes.js +0 -0
  796. /package/dist/{agent-core/prompts → prompts}/output.d.ts +0 -0
  797. /package/dist/{agent-core/prompts → prompts}/output.js +0 -0
  798. /package/dist/{agent-core/prompts → prompts}/permissions.d.ts +0 -0
  799. /package/dist/{agent-core/prompts → prompts}/permissions.js +0 -0
  800. /package/dist/{agent-core/tools/local → prompts}/read-context.d.ts +0 -0
  801. /package/dist/{agent-core/prompts → prompts}/resources.d.ts +0 -0
  802. /package/dist/{agent-core/prompts → prompts}/resources.js +0 -0
  803. /package/dist/{agent-core/prompts → prompts}/subagent.d.ts +0 -0
  804. /package/dist/{agent-core/prompts → prompts}/subagent.js +0 -0
  805. /package/dist/{agent-core/prompts → prompts}/workflow.d.ts +0 -0
  806. /package/dist/{agent-core/prompts → prompts}/workflow.js +0 -0
  807. /package/dist/{agent-core/runtime → runtime}/async-queue.d.ts +0 -0
  808. /package/dist/{agent-core/runtime → runtime}/async-queue.js +0 -0
  809. /package/dist/{agent-core/tools → runtime/compaction}/contracts.js +0 -0
  810. /package/dist/{agent-core/runtime → runtime}/compaction/coordinator.d.ts +0 -0
  811. /package/dist/{agent-core/runtime → runtime}/compaction/history.js +0 -0
  812. /package/dist/{agent-core/runtime → runtime}/context/contracts.d.ts +0 -0
  813. /package/dist/{agent-core/session/types.js → runtime/context/contracts.js} +0 -0
  814. /package/dist/{agent-core/runtime → runtime}/context/environment.js +0 -0
  815. /package/dist/{agent-core/tools/code-mode/engine.js → runtime/context/gc-contracts.js} +0 -0
  816. /package/dist/{agent-core/runtime → runtime}/context/gc-runtime.js +0 -0
  817. /package/dist/{agent-core/runtime → runtime}/context/normalize.js +0 -0
  818. /package/dist/{agent-core/tools/code-mode/worker.d.ts → runtime/contracts.js} +0 -0
  819. /package/dist/{agent-core/tools/runtime-context.js → runtime/events.js} +0 -0
  820. /package/dist/{agent-core/runtime → runtime}/execution-policy.d.ts +0 -0
  821. /package/dist/{agent-core/runtime → runtime}/execution-policy.js +0 -0
  822. /package/dist/{agent-core/runtime → runtime}/model-generation-timing.d.ts +0 -0
  823. /package/dist/{agent-core/runtime → runtime}/model-generation-timing.js +0 -0
  824. /package/dist/{agent-core/runtime → runtime}/model-progress.d.ts +0 -0
  825. /package/dist/{agent-core/runtime → runtime}/plan-output.d.ts +0 -0
  826. /package/dist/{agent-core/runtime → runtime}/plan-output.js +0 -0
  827. /package/dist/{agent-core/tools/public-metadata.d.ts → runtime/public-tool-metadata.d.ts} +0 -0
  828. /package/dist/{agent-core/tools/public-metadata.js → runtime/public-tool-metadata.js} +0 -0
  829. /package/dist/{agent-core/runtime → runtime}/token-budget.d.ts +0 -0
  830. /package/dist/{agent-core/runtime → runtime}/token-budget.js +0 -0
  831. /package/dist/{agent-core/tools → runtime}/wait.d.ts +0 -0
  832. /package/dist/{agent-core/sdk → sdk}/request-preparation.js +0 -0
  833. /package/dist/{agent-core/session → session}/context-gc-markup.d.ts +0 -0
  834. /package/dist/{agent-core/session → session}/context-gc-markup.js +0 -0
  835. /package/dist/{agent-core/session → session}/context-gc-replacements.js +0 -0
  836. /package/dist/{agent-core/session → session}/context-gc-subagent.js +0 -0
  837. /package/dist/{agent-core/session → session}/types.d.ts +0 -0
  838. /package/dist/{agent-core/storage → storage}/file-lock.d.ts +0 -0
  839. /package/dist/{agent-core/subagent → subagent}/model-update.d.ts +0 -0
  840. /package/dist/{agent-core/tools → tools}/agent/todo-read.js +0 -0
  841. /package/dist/{agent-core/tools → tools}/code-mode/quickjs-engine.d.ts +0 -0
  842. /package/dist/{agent-core/tools → tools}/code-mode/quickjs-engine.js +0 -0
  843. /package/dist/{agent-core/tools → tools}/code-mode/text-output.d.ts +0 -0
  844. /package/dist/{agent-core/tools → tools}/code-mode/text-output.js +0 -0
  845. /package/dist/{agent-core/tools → tools}/code-mode/worker.js +0 -0
  846. /package/dist/{agent-core/tools → tools}/file-change-diff.d.ts +0 -0
  847. /package/dist/{agent-core/tools → tools}/file-change-diff.js +0 -0
  848. /package/dist/{agent-core/tools → tools}/input-diagnostics/source-preview.d.ts +0 -0
  849. /package/dist/{agent-core/tools → tools}/input-diagnostics/source-preview.js +0 -0
  850. /package/dist/{agent-core/tools → tools}/input.d.ts +0 -0
  851. /package/dist/{agent-core/tools → tools}/input.js +0 -0
  852. /package/dist/{agent-core/tools → tools}/local/apply-patch-parser.d.ts +0 -0
  853. /package/dist/{agent-core/tools → tools}/local/image-processing.d.ts +0 -0
  854. /package/dist/{agent-core/tools → tools}/mcp/catalog.d.ts +0 -0
  855. /package/dist/{agent-core/tools → tools}/mcp/history.js +0 -0
  856. /package/dist/{agent-core/tools → tools}/registry.js +0 -0
  857. /package/dist/{agent-core/tools → tools}/runtime-resource-handles.d.ts +0 -0
  858. /package/dist/{agent-core/tools → tools}/runtime.d.ts +0 -0
  859. /package/dist/{agent-core/tools → tools}/scheduler.js +0 -0
  860. /package/dist/{agent-core/tools → tools}/shared/patch-result.d.ts +0 -0
  861. /package/dist/{agent-core/tools → tools}/shared/patch-result.js +0 -0
  862. /package/dist/{agent-core/tools → tools}/shared/path-resolver.d.ts +0 -0
@@ -1,1594 +0,0 @@
1
- import { waitForToolCondition, waitMetadata } from '../tools/wait.js';
2
- import { AsyncLocalStorage } from 'node:async_hooks';
3
- import { randomUUID } from 'node:crypto';
4
- import { MarAgentError, describeMarAgentError } from '../error.js';
5
- import { TOOL_EXECUTION_LIMITS } from '../tools/execution-limits.js';
6
- import { parseAgentWaitTargets, waitForAgentCondition } from './wait.js';
7
- const RECENT_TERMINAL_RESOURCE_LIMIT = 16;
8
- const DETAIL_FIELDS = [
9
- 'latestMessage',
10
- 'latestActivity',
11
- 'summary',
12
- 'changedFiles',
13
- 'verification',
14
- 'evidence',
15
- 'permissionStop',
16
- 'errorMessage'
17
- ];
18
- export class SubagentSessionController {
19
- parentSessionId;
20
- rootSessionId;
21
- backend;
22
- limits;
23
- #agents = new Map();
24
- // Discovery order is independent of the order in which history is requested.
25
- #discovered = new Map();
26
- #loading = new Map();
27
- #readers = new Map();
28
- #allReaders = 0;
29
- #queue = [];
30
- #completionWaiters = new Set();
31
- #activityWaiters = new Set();
32
- modelMessages = {
33
- pending: () => [...this.#agents.values()].some((state) => state.messageRevision > state.observedMessageRevision),
34
- subscribe: (listener) => {
35
- const notify = (activity) => {
36
- if (activity.kind === 'message')
37
- listener();
38
- };
39
- this.#activityWaiters.add(notify);
40
- return () => {
41
- this.#activityWaiters.delete(notify);
42
- };
43
- }
44
- };
45
- #nativeObservations = new Map();
46
- #activityRevision = 0;
47
- #resourceRevision = 0;
48
- #running = 0;
49
- #disposed = false;
50
- #creationBudget = { count: 0 };
51
- #retainedExecution = new AsyncLocalStorage();
52
- #execution;
53
- #pendingDeliveries = new Set();
54
- constructor(parentSessionId, rootSessionId, backend, limits = { maxTasks: 16, maxConcurrent: 16 }) {
55
- this.parentSessionId = parentSessionId;
56
- this.rootSessionId = rootSessionId;
57
- this.backend = backend;
58
- this.limits = limits;
59
- }
60
- static async open(input) {
61
- const controller = new SubagentSessionController(input.parentSessionId, input.rootSessionId, input.backend, input.limits);
62
- const sessions = await input.backend.listChildren(input.parentSessionId);
63
- // Map insertion order is creation order; values independently rank activity.
64
- for (const session of sessions)
65
- controller.#discovered.set(session.id, 0);
66
- for (const session of [...sessions].sort((a, b) => a.lastActivityAt.localeCompare(b.lastActivityAt))) {
67
- controller.#discovered.set(session.id, ++controller.#resourceRevision);
68
- }
69
- return controller;
70
- }
71
- async beginParentExecution(execution) {
72
- if (this.#disposed)
73
- throw new MarAgentError('MAR_AGENT_SUBAGENT_LIMIT', 'Subagent controller is disposed.');
74
- this.#execution = execution;
75
- this.#creationBudget = { count: 0 };
76
- for (const state of this.#agents.values())
77
- await this.#publishTerminal(state);
78
- this.#releaseOldDetails();
79
- }
80
- /** A retained cell must not borrow a later model Execution's identity or task budget. */
81
- captureExecution(executionId) {
82
- const enter = this.captureParentFrame(executionId);
83
- return {
84
- run: (input, options) => enter(() => this.run(input, options)),
85
- message: (id, message, options) => enter(() => this.message(id, message, options)),
86
- output: (id, options) => this.output(id, options),
87
- outputAny: (options) => this.outputAny(options),
88
- outputMany: (ids, options) => this.outputMany(ids, options),
89
- cancel: (id) => this.cancel(id),
90
- listSessionResources: () => this.listSessionResources(),
91
- dispose: () => this.dispose()
92
- };
93
- }
94
- /** SDK physical tool ingress shares the same captured parent as its model controls. */
95
- captureParentFrame(executionId) {
96
- const execution = executionId === undefined ? this.#requireExecution() : this.#execution;
97
- if (!execution || (executionId !== undefined && execution.executionId !== executionId))
98
- throw new MarAgentError('MAR_AGENT_SUBAGENT_FAILED', 'Parent Execution source is unavailable.');
99
- const context = (executionId === undefined
100
- ? this.#retainedExecution.getStore()
101
- : undefined) ?? {
102
- execution,
103
- budget: this.#creationBudget
104
- };
105
- return (run) => this.#retainedExecution.run(context, run);
106
- }
107
- withOperation(operation, run) {
108
- operation.signal.throwIfAborted();
109
- if (!operation.operationId.trim())
110
- throw new MarAgentError('MAR_AGENT_SUBAGENT_FAILED', 'Parent operation identity is invalid.');
111
- return this.#retainedExecution.run({ execution: operation, budget: { count: 0 }, native: true }, run);
112
- }
113
- async inspect(agentId) {
114
- return this.#using([agentId], async () => {
115
- return this.#snapshot(await this.#find(agentId), { full: true });
116
- });
117
- }
118
- inspectAll() {
119
- if (this.#disposed)
120
- throw new MarAgentError('MAR_AGENT_DISPOSED', 'Subagent controller is disposed.');
121
- return this.#orderedStates().map((state) => this.#snapshot(state, { full: true }));
122
- }
123
- async list(signal) {
124
- return this.#using(undefined, async () => {
125
- await this.prepareAll(signal);
126
- return this.inspectAll();
127
- });
128
- }
129
- /** Full listing is explicit; ordinary opens and executions never require it. */
130
- async prepareAll(signal) {
131
- for (const id of this.#discovered.keys()) {
132
- signal?.throwIfAborted();
133
- await this.#restoreDiscovered(id);
134
- }
135
- signal?.throwIfAborted();
136
- }
137
- async prepareSessionResources(signal) {
138
- const candidates = [...this.#discovered]
139
- .filter(([id]) => {
140
- const state = this.#agents.get(id);
141
- return !state || isTerminalState(state);
142
- })
143
- .sort(([a, ar], [b, br]) => (this.#agents.get(b)?.resourceRevision ?? br) -
144
- (this.#agents.get(a)?.resourceRevision ?? ar));
145
- let prepared = 0;
146
- for (const [id] of candidates) {
147
- signal?.throwIfAborted();
148
- const state = await this.#restoreDiscovered(id);
149
- if (state && isTerminalState(state) && ++prepared === RECENT_TERMINAL_RESOURCE_LIMIT)
150
- break;
151
- }
152
- signal?.throwIfAborted();
153
- this.#releaseOldDetails();
154
- }
155
- async #restoreDiscovered(agentId) {
156
- try {
157
- return await this.#find(agentId);
158
- }
159
- catch (error) {
160
- if (!(error instanceof MarAgentError) || error.code !== 'MAR_AGENT_SUBAGENT_NOT_FOUND')
161
- throw error;
162
- this.#discovered.delete(agentId);
163
- return undefined;
164
- }
165
- }
166
- #orderedStates() {
167
- return [...this.#discovered.keys()].flatMap((id) => {
168
- const state = this.#agents.get(id);
169
- return state ? [state] : [];
170
- });
171
- }
172
- collectModelUpdates() {
173
- return [...this.#agents.values()]
174
- .filter((state) => state.messageRevision > state.observedMessageRevision ||
175
- (isTerminalState(state) &&
176
- state.terminalRevision !== undefined &&
177
- state.terminalRevision > state.observedTerminalRevision))
178
- .sort((left, right) => left.resourceRevision - right.resourceRevision)
179
- .slice(0, TOOL_EXECUTION_LIMITS.agentWaitMaxAgents)
180
- .map((state) => {
181
- const messageRevision = state.messageRevision;
182
- const terminalRevision = isTerminalState(state) ? state.terminalRevision : undefined;
183
- const includeTerminalDetails = terminalRevision !== undefined && terminalRevision > state.observedTerminalRevision;
184
- const snapshot = this.#snapshot(state, {
185
- includeLatestMessage: messageRevision > state.observedMessageRevision,
186
- includeTerminalDetails,
187
- full: false
188
- });
189
- return {
190
- snapshot,
191
- truncated: snapshot.latestMessage?.truncated === true ||
192
- (includeTerminalDetails &&
193
- (snapshot.summary !== state.summary ||
194
- (snapshot.changedFiles?.length ?? 0) < state.changedFiles.length)),
195
- acknowledge: () => {
196
- state.observedMessageRevision = Math.max(state.observedMessageRevision, messageRevision);
197
- if (includeTerminalDetails)
198
- state.observedTerminalRevision = Math.max(state.observedTerminalRevision, terminalRevision);
199
- }
200
- };
201
- });
202
- }
203
- async cancelOwned(ownerInstanceId) {
204
- for (const pending of this.#pendingDeliveries)
205
- if (pending.ownerInstanceId === ownerInstanceId)
206
- pending.delivery.settled?.('cancelled');
207
- const results = await Promise.allSettled([...this.#agents.values()]
208
- .filter((state) => state.turn?.ownerInstanceId === ownerInstanceId)
209
- .map((state) => this.#control(state, async () => {
210
- if (state.turn?.ownerInstanceId === ownerInstanceId)
211
- await this.#cancelState(state);
212
- })));
213
- const failure = results.find((result) => result.status === 'rejected');
214
- this.#nativeObservations.delete(ownerInstanceId);
215
- if (failure?.status === 'rejected')
216
- throw failure.reason;
217
- }
218
- endParentExecution(executionId) {
219
- if (this.#execution?.executionId === executionId)
220
- this.#execution = undefined;
221
- }
222
- parentExecution(executionId) {
223
- const execution = this.#retainedExecution.getStore()?.execution ?? this.#execution;
224
- return execution?.executionId === executionId ? { ...execution, executionId } : undefined;
225
- }
226
- async run(input, options = {}) {
227
- options.signal?.throwIfAborted();
228
- options.turnSignal?.throwIfAborted();
229
- if (options.waitFor !== undefined &&
230
- options.waitFor !== 'start' &&
231
- options.waitFor !== 'completion')
232
- throw new MarAgentError('MAR_AGENT_TOOL_INPUT_INVALID', 'Task start wait is invalid.');
233
- const execution = this.#requireExecution();
234
- const native = this.#retainedExecution.getStore()?.native === true;
235
- validateTaskInput(input, native);
236
- if (!native &&
237
- (this.#retainedExecution.getStore()?.budget ?? this.#creationBudget).count >=
238
- this.limits.maxTasks)
239
- throw new MarAgentError('MAR_AGENT_SUBAGENT_LIMIT', 'Subagent task limit was reached.');
240
- const source = {
241
- type: 'subagent',
242
- parentSessionId: this.parentSessionId,
243
- rootSessionId: this.rootSessionId,
244
- ...(execution.executionId === undefined ? {} : { parentExecutionId: execution.executionId }),
245
- ...(native && 'operationId' in execution
246
- ? {
247
- parentOperationId: execution.operationId,
248
- ...(execution.ownerInstanceId === undefined
249
- ? {}
250
- : { ownerInstanceId: execution.ownerInstanceId }),
251
- ...(execution.extensionId === undefined ? {} : { extensionId: execution.extensionId })
252
- }
253
- : {}),
254
- role: input.role,
255
- description: input.description.trim()
256
- };
257
- const created = await this.backend.createSession({
258
- title: input.description.trim(),
259
- source
260
- });
261
- try {
262
- if (this.#disposed)
263
- throw new MarAgentError('MAR_AGENT_DISPOSED', 'Subagent controller is disposed.');
264
- this.#requireExecution();
265
- options.signal?.throwIfAborted();
266
- options.turnSignal?.throwIfAborted();
267
- }
268
- catch (error) {
269
- await this.#deleteUnstartedSession(created.id, error);
270
- }
271
- return this.#using([created.id], async () => {
272
- const state = {
273
- agentId: created.id,
274
- description: source.description,
275
- role: input.role,
276
- ...(source.ownerInstanceId === undefined
277
- ? {}
278
- : { ownerInstanceId: source.ownerInstanceId }),
279
- ...(source.extensionId === undefined ? {} : { extensionId: source.extensionId }),
280
- status: 'queued',
281
- messageRevision: 0,
282
- observedMessageRevision: 0,
283
- latestMessageActivityRevision: 0,
284
- changedFiles: [],
285
- verification: [],
286
- evidence: [],
287
- terminalPending: false,
288
- observedTerminalRevision: -1,
289
- resourceRevision: ++this.#resourceRevision
290
- };
291
- if (!native)
292
- (this.#retainedExecution.getStore()?.budget ?? this.#creationBudget).count++;
293
- this.#agents.set(state.agentId, state);
294
- this.#discovered.set(state.agentId, state.resourceRevision);
295
- const knownModel = execution.models.get(input.modelId ?? execution.modelId);
296
- if (knownModel) {
297
- state.modelId = knownModel.id;
298
- state.modelName = knownModel.name;
299
- }
300
- try {
301
- const selected = resolveModel(execution, input);
302
- state.modelId = selected.id;
303
- state.modelName = selected.name;
304
- state.reasoningEffort = selected.reasoningEffort;
305
- }
306
- catch (error) {
307
- this.#setFailure(state, error);
308
- }
309
- try {
310
- await options.onCreated?.(this.#receiptSnapshot(state));
311
- if (this.#disposed)
312
- throw new MarAgentError('MAR_AGENT_DISPOSED', 'Subagent controller is disposed.');
313
- this.#requireExecution();
314
- options.signal?.throwIfAborted();
315
- }
316
- catch (error) {
317
- await this.#deleteUnstartedSession(state.agentId, error);
318
- }
319
- if (state.status === 'failed') {
320
- await this.#publishTerminal(state);
321
- this.#observeTerminal(state);
322
- return this.#snapshot(state);
323
- }
324
- this.#queueTurn(state, input.prompt, execution, [], undefined, undefined, options.signal, options.turnSignal);
325
- if (options.waitFor === 'start' || (options.waitFor === undefined && input.background))
326
- return this.#receiptSnapshot(state);
327
- await waitForPromise(state.turn.completion, options.signal);
328
- const includeLatestMessage = this.#hasUnreadMessage(state);
329
- const includeTerminalDetails = this.#observeTerminal(state);
330
- this.#observeLatestMessage(state);
331
- return this.#snapshot(state, { includeLatestMessage, includeTerminalDetails });
332
- });
333
- }
334
- async output(agentId, options = {}) {
335
- return this.#using([agentId], async () => {
336
- options.signal?.throwIfAborted();
337
- const state = await this.#find(agentId);
338
- options.signal?.throwIfAborted();
339
- validateOutputOptions(options, this.#retainedExecution.getStore()?.native === true);
340
- if (options.untilSettled) {
341
- if (state.turn)
342
- await waitForPromise(state.turn.completion, options.signal);
343
- options.signal?.throwIfAborted();
344
- const includeLatestMessage = this.#hasUnreadMessage(state);
345
- const includeTerminalDetails = this.#observeTerminal(state);
346
- this.#observeLatestMessage(state);
347
- return {
348
- ...this.#snapshot(state, { includeLatestMessage, includeTerminalDetails }),
349
- waitOutcome: 'completion'
350
- };
351
- }
352
- if (options.waitMs === undefined || options.waitMs === 0)
353
- return {
354
- ...this.#snapshot(state, {
355
- includeLatestMessage: false,
356
- includeTerminalDetails: false
357
- }),
358
- waitOutcome: 'snapshot'
359
- };
360
- if (isTerminalState(state)) {
361
- const includeLatestMessage = this.#hasUnreadMessage(state);
362
- const includeTerminalDetails = this.#observeTerminal(state);
363
- this.#observeLatestMessage(state);
364
- return {
365
- ...this.#snapshot(state, { includeLatestMessage, includeTerminalDetails }),
366
- waitOutcome: 'completion'
367
- };
368
- }
369
- const waitFor = options.waitFor ?? 'completion';
370
- if (waitFor === 'message' && this.#hasUnreadMessage(state)) {
371
- this.#observeLatestMessage(state);
372
- return { ...this.#snapshot(state), waitOutcome: 'message' };
373
- }
374
- const waitMs = this.#retainedExecution.getStore()?.native
375
- ? options.waitMs
376
- : Math.max(options.waitMs, TOOL_EXECUTION_LIMITS.agentWaitWaitFloorMs);
377
- if (waitFor === 'completion') {
378
- const completed = await this.#waitForCompletion(state, waitMs, options.signal, options.waitInterrupt);
379
- options.signal?.throwIfAborted();
380
- const includeLatestMessage = this.#hasUnreadMessage(state);
381
- const includeTerminalDetails = completed ? this.#observeTerminal(state) : false;
382
- if (includeLatestMessage)
383
- this.#observeLatestMessage(state);
384
- return {
385
- ...this.#snapshot(state, { includeLatestMessage, includeTerminalDetails }),
386
- ...waitMetadata(completed ? 'completion' : options.waitInterrupt?.pending() ? 'interrupted' : 'timeout')
387
- };
388
- }
389
- const activity = await this.#waitForMessageOrCompletion([state], waitMs, options.signal, options.waitInterrupt);
390
- options.signal?.throwIfAborted();
391
- const includeLatestMessage = activity?.kind === 'message' ||
392
- (activity?.kind === 'completion' && this.#hasUnreadMessage(activity.state));
393
- const includeTerminalDetails = activity?.kind === 'completion' ? this.#observeTerminal(activity.state) : false;
394
- if (activity)
395
- this.#observeLatestMessage(activity.state);
396
- return {
397
- ...this.#snapshot(activity?.state ?? state, {
398
- includeLatestMessage,
399
- includeTerminalDetails
400
- }),
401
- ...waitMetadata(activity?.kind ?? (options.waitInterrupt?.pending() ? 'interrupted' : 'timeout'))
402
- };
403
- });
404
- }
405
- async outputAny(options = {}) {
406
- return this.#using(undefined, async () => {
407
- options.signal?.throwIfAborted();
408
- if (options.untilSettled)
409
- throw new MarAgentError('MAR_AGENT_TOOL_INPUT_INVALID', 'An unbounded wait requires an agent id.');
410
- validateOutputOptions(options, this.#retainedExecution.getStore()?.native === true);
411
- const hasLive = [...this.#agents.values()].some((state) => !isTerminalState(state));
412
- if (!hasLive) {
413
- for (const id of [...this.#discovered.keys()].reverse()) {
414
- options.signal?.throwIfAborted();
415
- if (await this.#restoreDiscovered(id))
416
- break;
417
- }
418
- }
419
- options.signal?.throwIfAborted();
420
- const states = this.#orderedStates();
421
- if (states.length === 0)
422
- throw new MarAgentError('MAR_AGENT_SUBAGENT_NOT_FOUND', 'Subagent was not found.');
423
- const live = states.filter((state) => state.status === 'queued' || state.status === 'running');
424
- if (options.waitMs === undefined || options.waitMs === 0)
425
- return {
426
- ...this.#snapshot(live.at(-1) ?? states.at(-1), {
427
- includeLatestMessage: false,
428
- includeTerminalDetails: false
429
- }),
430
- waitOutcome: 'snapshot'
431
- };
432
- if (live.length === 0) {
433
- const state = states.at(-1);
434
- const includeLatestMessage = this.#hasUnreadMessage(state);
435
- const includeTerminalDetails = this.#observeTerminal(state);
436
- this.#observeLatestMessage(state);
437
- return {
438
- ...this.#snapshot(state, { includeLatestMessage, includeTerminalDetails }),
439
- waitOutcome: 'completion'
440
- };
441
- }
442
- const waitFor = options.waitFor ?? 'completion';
443
- if (waitFor === 'message') {
444
- const pending = this.#oldestUnreadMessage(live);
445
- if (pending) {
446
- this.#observeLatestMessage(pending);
447
- return { ...this.#snapshot(pending), waitOutcome: 'message' };
448
- }
449
- }
450
- const waitMs = this.#retainedExecution.getStore()?.native
451
- ? options.waitMs
452
- : Math.max(options.waitMs, TOOL_EXECUTION_LIMITS.agentWaitWaitFloorMs);
453
- if (waitFor === 'message') {
454
- const activity = await this.#waitForMessageOrCompletion(live, waitMs, options.signal, options.waitInterrupt);
455
- options.signal?.throwIfAborted();
456
- const includeLatestMessage = activity?.kind === 'message' ||
457
- (activity?.kind === 'completion' && this.#hasUnreadMessage(activity.state));
458
- const includeTerminalDetails = activity?.kind === 'completion' ? this.#observeTerminal(activity.state) : false;
459
- if (activity)
460
- this.#observeLatestMessage(activity.state);
461
- return {
462
- ...this.#snapshot(activity?.state ?? live.at(-1), {
463
- includeLatestMessage,
464
- includeTerminalDetails
465
- }),
466
- ...waitMetadata(activity?.kind ?? (options.waitInterrupt?.pending() ? 'interrupted' : 'timeout'))
467
- };
468
- }
469
- const completed = await this.#waitForAnyCompletion(live, waitMs, options.signal, options.waitInterrupt);
470
- options.signal?.throwIfAborted();
471
- const state = completed ?? this.#oldestUnreadMessage(live) ?? live.at(-1);
472
- const includeLatestMessage = this.#hasUnreadMessage(state);
473
- const includeTerminalDetails = completed ? this.#observeTerminal(state) : false;
474
- if (includeLatestMessage)
475
- this.#observeLatestMessage(state);
476
- return {
477
- ...this.#snapshot(state, {
478
- includeLatestMessage,
479
- includeTerminalDetails
480
- }),
481
- ...waitMetadata(completed ? 'completion' : options.waitInterrupt?.pending() ? 'interrupted' : 'timeout')
482
- };
483
- });
484
- }
485
- async outputMany(agentIds, options = {}) {
486
- options.signal?.throwIfAborted();
487
- const { agentIds: ids, mode = 'any' } = parseAgentWaitTargets({ agentIds, mode: options.mode }, this.#retainedExecution.getStore()?.native
488
- ? Infinity
489
- : TOOL_EXECUTION_LIMITS.agentWaitMaxAgents);
490
- validateOutputOptions(options, this.#retainedExecution.getStore()?.native === true);
491
- if (!ids || 'untilSettled' in options)
492
- throw new MarAgentError('MAR_AGENT_TOOL_INPUT_INVALID', 'Group waits require a bounded deadline.');
493
- return this.#using(ids, async () => {
494
- const states = await Promise.all(ids.map((id) => this.#find(id)));
495
- options.signal?.throwIfAborted();
496
- const waitFor = options.waitFor ?? 'completion';
497
- const targets = states.map((state) => ({
498
- state,
499
- turn: state.turn,
500
- view: copyWaitState(state),
501
- observation: this.#nativeObservation(state)
502
- }));
503
- const refresh = () => {
504
- for (const target of targets) {
505
- if (!isTerminalState(target.view) &&
506
- (target.state.turn === target.turn ||
507
- (target.state.turn === undefined && isTerminalState(target.state))))
508
- target.view = copyWaitState(target.state);
509
- }
510
- };
511
- const unread = (target) => target.view.messageRevision >
512
- (target.observation?.messageRevision ?? target.state.observedMessageRevision);
513
- const ready = (target) => isTerminalState(target.view) || (waitFor === 'message' && unread(target));
514
- const snapshot = options.waitMs === undefined || options.waitMs === 0;
515
- let satisfied = false;
516
- if (!snapshot) {
517
- const waitMs = this.#retainedExecution.getStore()?.native
518
- ? options.waitMs
519
- : Math.max(options.waitMs, TOOL_EXECUTION_LIMITS.agentWaitWaitFloorMs);
520
- satisfied = await waitForAgentCondition({
521
- waitMs,
522
- signal: options.signal,
523
- interrupt: options.waitInterrupt,
524
- ready: () => {
525
- refresh();
526
- return mode === 'all' ? targets.every(ready) : targets.some(ready);
527
- },
528
- subscribe: (notify) => {
529
- const listener = () => notify();
530
- this.#activityWaiters.add(listener);
531
- return () => this.#activityWaiters.delete(listener);
532
- }
533
- });
534
- options.signal?.throwIfAborted();
535
- }
536
- refresh();
537
- if (!snapshot)
538
- satisfied = mode === 'all' ? targets.every(ready) : targets.some(ready);
539
- const pendingAgentIds = targets
540
- .filter((target) => !ready(target))
541
- .map((target) => target.state.agentId);
542
- const agents = targets.map((target) => {
543
- const { state, view, observation } = target;
544
- const terminal = isTerminalState(view);
545
- const outcome = snapshot
546
- ? 'snapshot'
547
- : terminal
548
- ? 'completion'
549
- : ready(target)
550
- ? 'message'
551
- : satisfied
552
- ? 'snapshot'
553
- : options.waitInterrupt?.pending()
554
- ? 'interrupted'
555
- : 'timeout';
556
- const includeLatestMessage = outcome !== 'snapshot' && unread(target);
557
- const includeTerminalDetails = outcome === 'completion' &&
558
- (observation
559
- ? observation.terminalRevision < view.resourceRevision
560
- : state.observedTerminalRevision < view.resourceRevision);
561
- const result = {
562
- ...this.#snapshot(view, { includeLatestMessage, includeTerminalDetails }),
563
- ...(target.turn === undefined ? {} : { turnId: target.turn.turnId }),
564
- ...waitMetadata(outcome)
565
- };
566
- if (includeLatestMessage) {
567
- if (observation)
568
- observation.messageRevision = Math.max(observation.messageRevision, view.messageRevision);
569
- else
570
- state.observedMessageRevision = Math.max(state.observedMessageRevision, view.messageRevision);
571
- }
572
- if (includeTerminalDetails) {
573
- if (observation)
574
- observation.terminalRevision = Math.max(observation.terminalRevision, view.resourceRevision);
575
- else
576
- state.observedTerminalRevision = Math.max(state.observedTerminalRevision, view.resourceRevision);
577
- }
578
- return result;
579
- });
580
- return {
581
- mode,
582
- waitFor,
583
- agents,
584
- pendingAgentIds,
585
- ...waitMetadata(snapshot
586
- ? 'snapshot'
587
- : !satisfied
588
- ? options.waitInterrupt?.pending()
589
- ? 'interrupted'
590
- : 'timeout'
591
- : agents.some((agent) => agent.waitOutcome === 'message')
592
- ? 'message'
593
- : 'completion')
594
- };
595
- });
596
- }
597
- async message(agentId, message, options = {}) {
598
- return this.#using([agentId], async () => {
599
- const execution = this.#requireExecution();
600
- if (typeof message !== 'string' ||
601
- message.trim().length === 0 ||
602
- (this.#retainedExecution.getStore()?.native !== true &&
603
- Buffer.byteLength(message) > TOOL_EXECUTION_LIMITS.subagentMessageMaxBytes) ||
604
- (options.delivery !== undefined &&
605
- options.delivery !== 'append' &&
606
- options.delivery !== 'replace'))
607
- throw new MarAgentError('MAR_AGENT_TOOL_INPUT_INVALID', 'Agent message input is invalid.');
608
- const state = await this.#find(agentId);
609
- return this.#control(state, async () => {
610
- this.#requireExecution();
611
- options.signal?.throwIfAborted();
612
- // Resolve before cancelling so an unavailable model does not stop valid work.
613
- const selected = resolveExistingModel(execution, state);
614
- if (options.delivery === 'replace')
615
- await this.#cancelState(state);
616
- this.#requireExecution();
617
- options.signal?.throwIfAborted();
618
- const turnId = state.turn?.turnId ?? randomUUID();
619
- const receipt = { messageId: randomUUID(), turnId, deliveryStatus: 'accepted' };
620
- const mutableReceipt = receipt;
621
- const delivery = this.#createDelivery(state, execution, mutableReceipt, options.signal);
622
- try {
623
- if (state.status === 'running' && state.turn) {
624
- const turn = state.turn;
625
- if (!turn.handle)
626
- await turn.handleReady;
627
- this.#requireExecution();
628
- options.signal?.throwIfAborted();
629
- delivery.signal?.throwIfAborted();
630
- if (state.status === 'running' &&
631
- state.turn === turn &&
632
- turn.handle?.enqueueMessage(message, delivery)) {
633
- delivery.accepted();
634
- state.receipt = mutableReceipt;
635
- return this.#messageReceiptSnapshot(state);
636
- }
637
- await turn.completion;
638
- }
639
- else if (state.status === 'queued' && state.turn) {
640
- delivery.accepted();
641
- state.turn.pendingMessages.push({ text: message, delivery });
642
- state.receipt = mutableReceipt;
643
- return this.#messageReceiptSnapshot(state);
644
- }
645
- this.#requireExecution();
646
- options.signal?.throwIfAborted();
647
- delivery.signal?.throwIfAborted();
648
- state.modelId = selected.id;
649
- state.modelName = selected.name;
650
- state.reasoningEffort = selected.reasoningEffort;
651
- // A closing turn may have rejected append; reserve a fresh identity for its successor.
652
- mutableReceipt.turnId = randomUUID();
653
- delivery.accepted();
654
- state.receipt = mutableReceipt;
655
- this.#queueTurn(state, message, execution, [], mutableReceipt.turnId, delivery, options.signal);
656
- return this.#messageReceiptSnapshot(state);
657
- }
658
- catch (error) {
659
- delivery.settled?.(options.signal?.aborted || ('signal' in execution && execution.signal.aborted)
660
- ? 'cancelled'
661
- : 'failed');
662
- throw error;
663
- }
664
- });
665
- });
666
- }
667
- async cancel(agentId) {
668
- return this.#using([agentId], async () => {
669
- const state = await this.#find(agentId);
670
- await this.#control(state, () => this.#cancelState(state));
671
- const includeLatestMessage = this.#hasUnreadMessage(state);
672
- const includeTerminalDetails = this.#observeTerminal(state);
673
- this.#observeLatestMessage(state);
674
- return this.#snapshot(state, { includeLatestMessage, includeTerminalDetails });
675
- });
676
- }
677
- #control(state, operation) {
678
- const result = (state.controlTail ?? Promise.resolve()).then(operation);
679
- const tail = result.then(() => undefined, () => undefined);
680
- state.controlTail = tail;
681
- void tail.then(() => {
682
- if (state.controlTail === tail)
683
- delete state.controlTail;
684
- });
685
- return result;
686
- }
687
- async #cancelState(state) {
688
- if (state.status === 'queued' && state.turn) {
689
- const index = this.#queue.indexOf(state);
690
- if (index >= 0)
691
- this.#queue.splice(index, 1);
692
- state.status = 'cancelled';
693
- this.#touchResource(state, true);
694
- this.#closeReceipt(state);
695
- state.terminalPending = true;
696
- await this.#publishTerminal(state);
697
- state.turn.resolveHandleReady();
698
- state.turn.resolve();
699
- this.#notifyCompletion(state);
700
- delete state.turn;
701
- this.#drain();
702
- }
703
- else if (state.status === 'running' && state.turn) {
704
- const turn = state.turn;
705
- if (turn.handle)
706
- turn.handle.cancel();
707
- else {
708
- turn.cancelRequested = true;
709
- await turn.handleReady;
710
- }
711
- await turn.completion;
712
- }
713
- }
714
- listSessionResources() {
715
- const states = [...this.#agents.values()];
716
- const active = states
717
- .filter((state) => state.status === 'queued' || state.status === 'running')
718
- .sort((left, right) => right.resourceRevision - left.resourceRevision);
719
- const terminal = states
720
- .filter((state) => state.status !== 'queued' && state.status !== 'running')
721
- .sort((left, right) => right.resourceRevision - left.resourceRevision)
722
- .slice(0, RECENT_TERMINAL_RESOURCE_LIMIT);
723
- return [...active, ...terminal].map((state) => ({
724
- agentId: state.agentId,
725
- status: state.status,
726
- description: state.description
727
- }));
728
- }
729
- async dispose() {
730
- if (this.#disposed)
731
- return;
732
- this.#disposed = true;
733
- for (const pending of this.#pendingDeliveries)
734
- pending.delivery.settled?.('cancelled');
735
- for (const state of this.#queue.splice(0)) {
736
- state.status = 'cancelled';
737
- this.#closeReceipt(state);
738
- state.turn?.resolveHandleReady();
739
- state.turn?.resolve();
740
- this.#notifyCompletion(state);
741
- delete state.turn;
742
- }
743
- for (const state of this.#agents.values()) {
744
- if (state.status !== 'running' || !state.turn)
745
- continue;
746
- if (state.turn.handle)
747
- state.turn.handle.cancel();
748
- else
749
- state.turn.cancelRequested = true;
750
- }
751
- await Promise.allSettled([...this.#agents.values()].flatMap((state) => state.turn === undefined ? [] : [state.turn.completion]));
752
- this.#execution = undefined;
753
- this.#nativeObservations.clear();
754
- }
755
- #queueTurn(state, prompt, execution, pendingMessages, turnId = randomUUID(), delivery, signal, turnSignal) {
756
- let resolve;
757
- let resolveHandleReady;
758
- const completion = new Promise((done) => (resolve = done));
759
- const handleReady = new Promise((done) => (resolveHandleReady = done));
760
- const native = this.#retainedExecution.getStore()?.native === true && 'operationId' in execution
761
- ? execution
762
- : undefined;
763
- const sourceSignal = turnSignal ??
764
- (native === undefined
765
- ? undefined
766
- : signal === undefined
767
- ? native.signal
768
- : AbortSignal.any([native.signal, signal]));
769
- state.status = 'queued';
770
- state.restorable = false;
771
- this.#touchResource(state);
772
- delete state.summary;
773
- delete state.permissionStop;
774
- delete state.errorCode;
775
- delete state.errorMessage;
776
- state.changedFiles = [];
777
- state.verification = [];
778
- state.evidence = [];
779
- state.terminalPending = false;
780
- state.turn = {
781
- turnId,
782
- ...(native?.ownerInstanceId === undefined ? {} : { ownerInstanceId: native.ownerInstanceId }),
783
- ...(native?.origin === undefined
784
- ? {}
785
- : { origin: Object.freeze({ ...native.origin, signal: sourceSignal }) }),
786
- ...(delivery === undefined ? {} : { delivery }),
787
- prompt,
788
- start: execution.startTurn,
789
- pendingMessages,
790
- handleReady,
791
- completion,
792
- resolve: () => {
793
- sourceSignal?.removeEventListener('abort', abort);
794
- resolve();
795
- },
796
- resolveHandleReady
797
- };
798
- const turn = state.turn;
799
- const abort = () => {
800
- void this.#control(state, async () => {
801
- if (state.turn === turn)
802
- await this.#cancelState(state);
803
- }).catch(() => undefined);
804
- };
805
- sourceSignal?.addEventListener('abort', abort, { once: true });
806
- this.#queue.push(state);
807
- this.#drain();
808
- if (sourceSignal?.aborted)
809
- abort();
810
- }
811
- #drain() {
812
- while (!this.#disposed && this.#running < this.limits.maxConcurrent && this.#queue.length > 0) {
813
- const state = this.#queue.shift();
814
- const turn = state.turn;
815
- if (!turn || state.status !== 'queued')
816
- continue;
817
- state.status = 'running';
818
- this.#touchResource(state);
819
- this.#running++;
820
- void this.#startAndConsumeTurn(state, turn);
821
- }
822
- }
823
- async #startAndConsumeTurn(state, turn) {
824
- try {
825
- turn.handle = await turn.start({
826
- turnId: turn.turnId,
827
- ...(turn.delivery === undefined ? {} : { delivery: turn.delivery }),
828
- ...(turn.origin === undefined ? {} : { origin: turn.origin }),
829
- sessionId: state.agentId,
830
- prompt: turn.prompt,
831
- modelId: state.modelId,
832
- reasoningEffort: state.reasoningEffort,
833
- role: state.role,
834
- initialMailbox: turn.pendingMessages.splice(0)
835
- });
836
- }
837
- catch (error) {
838
- turn.resolveHandleReady();
839
- await this.#failTurn(state, error);
840
- return;
841
- }
842
- if (turn.cancelRequested)
843
- turn.handle.cancel();
844
- turn.resolveHandleReady();
845
- await this.#consumeTurn(state, turn);
846
- }
847
- async #consumeTurn(state, turn) {
848
- const previousActivity = state.latestActivity;
849
- const previousMessageRevision = state.messageRevision;
850
- let terminal;
851
- try {
852
- const consume = (async () => {
853
- for await (const event of turn.handle) {
854
- if (event.type === 'execution.completed')
855
- terminal = 'completed';
856
- else if (event.type === 'execution.failed')
857
- terminal = 'failed';
858
- else if (event.type === 'execution.cancelled')
859
- terminal = 'cancelled';
860
- if (!observeAgentEvent(state, event))
861
- continue;
862
- state.messageRevision++;
863
- state.latestMessageActivityRevision = ++this.#activityRevision;
864
- this.#touchResource(state);
865
- this.#notifyActivity({ state, kind: 'message' });
866
- }
867
- })();
868
- const result = await turn.handle.result();
869
- await consume;
870
- if (result.status === 'completed') {
871
- state.status = 'completed';
872
- state.summary = result.finalAnswer;
873
- if (result.permissionStop)
874
- state.permissionStop = result.permissionStop;
875
- else
876
- delete state.permissionStop;
877
- }
878
- else if (result.status === 'cancelled')
879
- state.status = 'cancelled';
880
- else {
881
- state.status = 'failed';
882
- state.errorCode = result.errorCode ?? 'MAR_AGENT_SUBAGENT_FAILED';
883
- state.errorMessage = result.errorMessage ?? 'Subagent execution failed.';
884
- }
885
- state.restorable =
886
- turn.handle.persistedEvents === true &&
887
- terminal === state.status &&
888
- (previousActivity === undefined || state.latestActivity !== previousActivity) &&
889
- (state.latestMessage === undefined || state.messageRevision > previousMessageRevision) &&
890
- (state.status !== 'completed' ||
891
- (state.latestMessage?.phase === 'final_answer' &&
892
- state.summary === state.latestMessage.text));
893
- state.terminalPending = true;
894
- this.#touchResource(state, true);
895
- this.#closeReceipt(state);
896
- await this.#publishTerminal(state);
897
- }
898
- catch (error) {
899
- this.#setFailure(state, error);
900
- this.#closeReceipt(state);
901
- await this.#publishTerminal(state);
902
- }
903
- finally {
904
- this.#closeReceipt(state);
905
- this.#running--;
906
- turn.resolve();
907
- this.#notifyCompletion(state);
908
- if (state.turn === turn)
909
- delete state.turn;
910
- this.#drain();
911
- }
912
- }
913
- async #failTurn(state, error) {
914
- this.#setFailure(state, error);
915
- this.#closeReceipt(state);
916
- const turn = state.turn;
917
- delete state.turn;
918
- this.#running--;
919
- turn?.resolve();
920
- this.#notifyCompletion(state);
921
- await this.#publishTerminal(state);
922
- this.#drain();
923
- }
924
- #setFailure(state, error) {
925
- const diagnostic = describeMarAgentError(error, 'MAR_AGENT_SUBAGENT_FAILED');
926
- state.status = 'failed';
927
- state.restorable = false;
928
- state.errorCode = diagnostic.code;
929
- state.errorMessage = diagnostic.message;
930
- state.terminalPending = true;
931
- this.#touchResource(state, true);
932
- }
933
- #touchResource(state, terminal = false) {
934
- state.resourceRevision = ++this.#resourceRevision;
935
- if (terminal)
936
- state.terminalRevision = state.resourceRevision;
937
- }
938
- #waitForAnyCompletion(candidates, waitMs, signal, interrupt) {
939
- return waitForNotification(this.#completionWaiters, (state) => candidates.includes(state), () => candidates.find(isTerminalState), waitMs, signal, interrupt);
940
- }
941
- #waitForCompletion(state, waitMs, signal, interrupt) {
942
- return waitForNotification(this.#completionWaiters, (completed) => completed === state, () => (isTerminalState(state) ? state : undefined), waitMs, signal, interrupt);
943
- }
944
- #notifyCompletion(state) {
945
- for (const waiter of this.#completionWaiters)
946
- waiter(state);
947
- this.#notifyActivity({ state, kind: 'completion' });
948
- }
949
- #waitForMessageOrCompletion(candidates, waitMs, signal, interrupt) {
950
- return waitForNotification(this.#activityWaiters, (activity) => candidates.includes(activity.state), () => {
951
- const pending = this.#oldestUnreadMessage(candidates);
952
- if (pending)
953
- return { state: pending, kind: 'message' };
954
- const terminal = candidates.find(isTerminalState);
955
- return terminal ? { state: terminal, kind: 'completion' } : undefined;
956
- }, waitMs, signal, interrupt);
957
- }
958
- #notifyActivity(activity) {
959
- for (const waiter of this.#activityWaiters)
960
- waiter(activity);
961
- }
962
- #hasUnreadMessage(state) {
963
- return (state.messageRevision >
964
- (this.#nativeObservation(state)?.messageRevision ?? state.observedMessageRevision));
965
- }
966
- #nativeObservation(state) {
967
- const context = this.#retainedExecution.getStore();
968
- if (!context?.native || !('operationId' in context.execution))
969
- return undefined;
970
- const owner = context.execution.ownerInstanceId ?? context.execution.operationId;
971
- let observations = this.#nativeObservations.get(owner);
972
- if (!observations)
973
- this.#nativeObservations.set(owner, (observations = new Map()));
974
- let observation = observations.get(state.agentId);
975
- if (!observation)
976
- observations.set(state.agentId, (observation = { messageRevision: 0, terminalRevision: 0 }));
977
- return observation;
978
- }
979
- #oldestUnreadMessage(states) {
980
- return states
981
- .filter((state) => this.#hasUnreadMessage(state))
982
- .sort((left, right) => left.latestMessageActivityRevision - right.latestMessageActivityRevision)
983
- .at(0);
984
- }
985
- #observeLatestMessage(state) {
986
- const native = this.#nativeObservation(state);
987
- if (native)
988
- native.messageRevision = state.messageRevision;
989
- else
990
- state.observedMessageRevision = state.messageRevision;
991
- }
992
- #observeTerminal(state) {
993
- const native = this.#nativeObservation(state);
994
- if (native) {
995
- if (!isTerminalState(state) || native.terminalRevision === state.resourceRevision)
996
- return false;
997
- native.terminalRevision = state.resourceRevision;
998
- return true;
999
- }
1000
- if (!isTerminalState(state) || state.observedTerminalRevision >= state.resourceRevision)
1001
- return false;
1002
- state.observedTerminalRevision = state.resourceRevision;
1003
- return true;
1004
- }
1005
- #createDelivery(state, execution, receipt, signal) {
1006
- const native = this.#retainedExecution.getStore()?.native === true && 'operationId' in execution
1007
- ? execution
1008
- : undefined;
1009
- const sourceSignal = native === undefined
1010
- ? undefined
1011
- : signal === undefined
1012
- ? native.signal
1013
- : AbortSignal.any([native.signal, signal]);
1014
- const controller = new AbortController();
1015
- const release = () => {
1016
- sourceSignal?.removeEventListener('abort', abort);
1017
- this.#pendingDeliveries.delete(pending);
1018
- };
1019
- const delivery = {
1020
- accepted: () => {
1021
- pending.admitted = true;
1022
- },
1023
- messageId: receipt.messageId,
1024
- ...(native?.origin === undefined ? {} : { origin: native.origin }),
1025
- ...(native === undefined ? {} : { signal: controller.signal }),
1026
- applied: () => {
1027
- // A durable commit remains applied even if cancellation races its completion callback.
1028
- receipt.deliveryStatus = 'applied';
1029
- release();
1030
- },
1031
- settled: (status) => {
1032
- if (receipt.deliveryStatus !== 'accepted')
1033
- return;
1034
- receipt.deliveryStatus = status;
1035
- controller.abort(new MarAgentError('MAR_AGENT_CANCELLED', 'Agent message was cancelled.'));
1036
- release();
1037
- }
1038
- };
1039
- const pending = {
1040
- state,
1041
- receipt,
1042
- delivery,
1043
- admitted: false,
1044
- ...(native?.ownerInstanceId === undefined ? {} : { ownerInstanceId: native.ownerInstanceId })
1045
- };
1046
- const abort = () => delivery.settled?.('cancelled');
1047
- this.#pendingDeliveries.add(pending);
1048
- sourceSignal?.addEventListener('abort', abort, { once: true });
1049
- if (sourceSignal?.aborted)
1050
- abort();
1051
- return delivery;
1052
- }
1053
- #closeReceipt(state) {
1054
- for (const pending of this.#pendingDeliveries)
1055
- if (pending.admitted &&
1056
- pending.state === state &&
1057
- pending.receipt.turnId === state.turn?.turnId)
1058
- pending.delivery.settled?.(state.status === 'cancelled' ? 'cancelled' : 'failed');
1059
- }
1060
- async #deleteUnstartedSession(agentId, error) {
1061
- this.#agents.delete(agentId);
1062
- this.#discovered.delete(agentId);
1063
- try {
1064
- await this.backend.deleteSession(agentId);
1065
- }
1066
- catch (cleanupError) {
1067
- const original = describeMarAgentError(error, 'MAR_AGENT_SUBAGENT_FAILED');
1068
- const cleanup = describeMarAgentError(cleanupError, 'MAR_AGENT_SUBAGENT_FAILED');
1069
- throw new MarAgentError(original.code, `${original.message} Cleanup also failed: ${cleanup.message}`, { cause: cleanupError });
1070
- }
1071
- throw error;
1072
- }
1073
- async #using(ids, operation) {
1074
- if (ids === undefined)
1075
- this.#allReaders++;
1076
- else
1077
- for (const id of ids)
1078
- this.#readers.set(id, (this.#readers.get(id) ?? 0) + 1);
1079
- try {
1080
- return await operation();
1081
- }
1082
- finally {
1083
- if (ids === undefined)
1084
- this.#allReaders--;
1085
- else
1086
- for (const id of ids) {
1087
- const count = this.#readers.get(id) - 1;
1088
- if (count)
1089
- this.#readers.set(id, count);
1090
- else
1091
- this.#readers.delete(id);
1092
- }
1093
- }
1094
- }
1095
- #releaseOldDetails() {
1096
- if (this.#allReaders)
1097
- return;
1098
- const terminal = [...this.#agents.values()]
1099
- .filter(isTerminalState)
1100
- .sort((a, b) => b.resourceRevision - a.resourceRevision);
1101
- for (const state of terminal.slice(RECENT_TERMINAL_RESOURCE_LIMIT)) {
1102
- if (state.detailsEvicted ||
1103
- !state.restorable ||
1104
- state.turn ||
1105
- state.controlTail ||
1106
- this.#readers.has(state.agentId) ||
1107
- this.#loading.has(state.agentId) ||
1108
- state.terminalPending ||
1109
- state.messageRevision > state.observedMessageRevision ||
1110
- (state.terminalRevision !== undefined &&
1111
- state.terminalRevision > state.observedTerminalRevision) ||
1112
- [...this.#pendingDeliveries].some((pending) => pending.state === state))
1113
- continue;
1114
- // Keep identity and cursors for old acknowledgements; only the disk-backed body unloads.
1115
- for (const key of DETAIL_FIELDS)
1116
- delete state[key];
1117
- state.changedFiles = [];
1118
- state.verification = [];
1119
- state.evidence = [];
1120
- state.detailsEvicted = true;
1121
- }
1122
- }
1123
- async #find(agentId) {
1124
- if (this.#disposed)
1125
- throw new MarAgentError('MAR_AGENT_DISPOSED', 'Subagent controller is disposed.');
1126
- const known = this.#agents.get(agentId);
1127
- if (known && !known.detailsEvicted)
1128
- return known;
1129
- const pending = this.#loading.get(agentId);
1130
- if (pending)
1131
- return pending;
1132
- const load = (async () => {
1133
- const persisted = await this.backend.loadChild(this.parentSessionId, agentId);
1134
- if (this.#disposed)
1135
- throw new MarAgentError('MAR_AGENT_DISPOSED', 'Subagent controller is disposed.');
1136
- if (!persisted) {
1137
- this.#agents.delete(agentId);
1138
- this.#discovered.delete(agentId);
1139
- throw new MarAgentError('MAR_AGENT_SUBAGENT_NOT_FOUND', 'Subagent was not found.');
1140
- }
1141
- const existing = this.#agents.get(agentId);
1142
- if (existing && !existing.detailsEvicted)
1143
- return existing;
1144
- const restored = restoreAgentState(persisted);
1145
- if (existing) {
1146
- for (const key of DETAIL_FIELDS) {
1147
- if (key in restored)
1148
- Object.assign(existing, { [key]: restored[key] });
1149
- else
1150
- delete existing[key];
1151
- }
1152
- delete existing.detailsEvicted;
1153
- return existing;
1154
- }
1155
- let revision = this.#discovered.get(agentId);
1156
- if (revision === undefined) {
1157
- revision = ++this.#resourceRevision;
1158
- this.#discovered.set(agentId, revision);
1159
- }
1160
- restored.resourceRevision = revision;
1161
- this.#agents.set(agentId, restored);
1162
- return restored;
1163
- })();
1164
- this.#loading.set(agentId, load);
1165
- try {
1166
- return await load;
1167
- }
1168
- finally {
1169
- if (this.#loading.get(agentId) === load)
1170
- this.#loading.delete(agentId);
1171
- }
1172
- }
1173
- #requireExecution() {
1174
- if (this.#disposed)
1175
- throw new MarAgentError('MAR_AGENT_DISPOSED', 'Subagent controller is disposed.');
1176
- const execution = this.#retainedExecution.getStore()?.execution ?? this.#execution;
1177
- if (!execution)
1178
- throw new MarAgentError('MAR_AGENT_SUBAGENT_FAILED', 'Subagent control requires an active parent execution.');
1179
- if ('signal' in execution)
1180
- execution.signal.throwIfAborted();
1181
- return execution;
1182
- }
1183
- #receiptSnapshot(state) {
1184
- return this.#snapshot(state, {
1185
- includeLatestMessage: false,
1186
- includeLatestActivity: false,
1187
- includeTerminalDetails: false
1188
- });
1189
- }
1190
- #messageReceiptSnapshot(state) {
1191
- // A follow-up starts a new observation boundary; messages from the preceding state
1192
- // must not be returned later as fresh progress for the newly requested work.
1193
- this.#observeLatestMessage(state);
1194
- return this.#receiptSnapshot(state);
1195
- }
1196
- #snapshot(state, options = {}) {
1197
- const terminal = state.status === 'completed' ||
1198
- state.status === 'failed' ||
1199
- state.status === 'cancelled' ||
1200
- state.status === 'interrupted';
1201
- const includeLatestMessage = options.includeLatestMessage ?? true;
1202
- const includeLatestActivity = options.includeLatestActivity ?? true;
1203
- const includeTerminalDetails = options.includeTerminalDetails ?? true;
1204
- const full = options.full ?? this.#retainedExecution.getStore()?.native === true;
1205
- const latestMessage = !includeLatestMessage || state.latestMessage === undefined
1206
- ? undefined
1207
- : full
1208
- ? { ...state.latestMessage }
1209
- : projectLatestMessage(state.latestMessage, terminal);
1210
- const summary = !includeTerminalDetails || state.summary === undefined
1211
- ? undefined
1212
- : full
1213
- ? state.summary
1214
- : truncateUtf8(state.summary, TOOL_EXECUTION_LIMITS.subagentSummaryMaxBytes);
1215
- const omitDuplicateMessage = !full &&
1216
- terminal &&
1217
- latestMessage?.phase === 'final_answer' &&
1218
- summary !== undefined &&
1219
- summary === state.latestMessage?.text &&
1220
- (state.receipt === undefined || state.receipt.turnId === latestMessage.turnId);
1221
- return {
1222
- agentId: state.agentId,
1223
- description: state.description,
1224
- status: state.status,
1225
- ...(full && this.#retainedExecution.getStore()?.native === true
1226
- ? {
1227
- role: state.role,
1228
- ...(state.extensionId === undefined ? {} : { extensionId: state.extensionId })
1229
- }
1230
- : {}),
1231
- ...(includeTerminalDetails && state.permissionStop
1232
- ? { permissionStop: state.permissionStop }
1233
- : {}),
1234
- ...state.receipt,
1235
- ...(omitDuplicateMessage ? { turnId: latestMessage.turnId } : {}),
1236
- ...(state.modelId === undefined ? {} : { modelId: state.modelId }),
1237
- ...(state.modelName === undefined ? {} : { modelName: state.modelName }),
1238
- ...(state.reasoningEffort === undefined ? {} : { reasoningEffort: state.reasoningEffort }),
1239
- ...(latestMessage === undefined || omitDuplicateMessage ? {} : { latestMessage }),
1240
- ...(!includeLatestActivity || state.latestActivity === undefined
1241
- ? {}
1242
- : { latestActivity: { ...state.latestActivity } }),
1243
- ...(summary === undefined ? {} : { summary }),
1244
- ...(!includeTerminalDetails || !terminal || state.changedFiles.length === 0
1245
- ? {}
1246
- : {
1247
- changedFiles: full
1248
- ? [...state.changedFiles]
1249
- : state.changedFiles.slice(0, TOOL_EXECUTION_LIMITS.subagentChangedFilesMaxItems)
1250
- }),
1251
- ...(!full || !includeTerminalDetails || !terminal || state.verification.length === 0
1252
- ? {}
1253
- : { verification: [...state.verification] }),
1254
- ...(!full || !includeTerminalDetails || !terminal || state.evidence.length === 0
1255
- ? {}
1256
- : { evidence: state.evidence.map((item) => ({ ...item })) }),
1257
- ...(state.errorCode === undefined ? {} : { errorCode: state.errorCode }),
1258
- ...(state.errorMessage === undefined ? {} : { errorMessage: state.errorMessage })
1259
- };
1260
- }
1261
- async #publishTerminal(state) {
1262
- if (!state.terminalPending || !this.#execution)
1263
- return;
1264
- try {
1265
- await this.#execution.emitTerminal(this.#snapshot(state, { full: false }));
1266
- state.terminalPending = false;
1267
- }
1268
- catch {
1269
- // Keep the terminal transition pending for a later active parent Execution.
1270
- }
1271
- }
1272
- }
1273
- function projectLatestMessage(message, terminal) {
1274
- const text = truncateCharacters(message.text, !terminal && message.phase === 'commentary'
1275
- ? TOOL_EXECUTION_LIMITS.subagentRunningLatestMessageMaxCharacters
1276
- : 10_000);
1277
- return {
1278
- ...message,
1279
- text,
1280
- truncated: message.truncated === true || text !== message.text
1281
- };
1282
- }
1283
- function validateTaskInput(input, native = false) {
1284
- if (!input ||
1285
- typeof input !== 'object' ||
1286
- typeof input.description !== 'string' ||
1287
- typeof input.prompt !== 'string' ||
1288
- (input.role !== 'general-purpose' && input.role !== 'explore') ||
1289
- input.parentSubagentId ||
1290
- !input.description.trim() ||
1291
- (!native &&
1292
- input.description.length > TOOL_EXECUTION_LIMITS.subagentDescriptionMaxCharacters) ||
1293
- !input.prompt.trim() ||
1294
- (!native && Buffer.byteLength(input.prompt) > TOOL_EXECUTION_LIMITS.subagentPromptMaxBytes))
1295
- throw new MarAgentError(input?.parentSubagentId
1296
- ? 'MAR_AGENT_SUBAGENT_RECURSION_DISABLED'
1297
- : 'MAR_AGENT_TOOL_INPUT_INVALID', input?.parentSubagentId ? 'Subagents cannot create subagents.' : 'Subagent task is invalid.');
1298
- }
1299
- function resolveModel(execution, input) {
1300
- const modelId = input.modelId ?? execution.modelId;
1301
- const model = execution.models.get(modelId);
1302
- if (!model || model.conversationModel === false)
1303
- throw new MarAgentError('MAR_AGENT_SUBAGENT_MODEL_UNAVAILABLE', 'Selected model is unavailable for subagents.');
1304
- if (input.reasoningEffort !== undefined &&
1305
- !model.reasoningEfforts.includes(input.reasoningEffort))
1306
- throw new MarAgentError('MAR_AGENT_SUBAGENT_REASONING_EFFORT_UNAVAILABLE', 'Selected reasoning effort is unavailable for the subagent model.', {
1307
- details: {
1308
- modelId,
1309
- reasoningEffort: input.reasoningEffort,
1310
- supportedReasoningEfforts: model.reasoningEfforts
1311
- }
1312
- });
1313
- const reasoningEffort = input.reasoningEffort ??
1314
- (model.reasoningEfforts.includes(execution.reasoningEffort)
1315
- ? execution.reasoningEffort
1316
- : model.defaultReasoningEffort);
1317
- return { ...model, reasoningEffort };
1318
- }
1319
- function resolveExistingModel(execution, state) {
1320
- const model = execution.models.get(state.modelId ?? execution.modelId);
1321
- if (!model)
1322
- throw new MarAgentError('MAR_AGENT_SUBAGENT_MODEL_UNAVAILABLE', 'The subagent model is no longer available.');
1323
- return {
1324
- ...model,
1325
- reasoningEffort: state.reasoningEffort && model.reasoningEfforts.includes(state.reasoningEffort)
1326
- ? state.reasoningEffort
1327
- : model.defaultReasoningEffort
1328
- };
1329
- }
1330
- function restoreAgentState(session) {
1331
- const delivered = session.records.findLast((record) => (record.type === 'turn.user' || record.type === 'extension.input') &&
1332
- isRecord(record.payload) &&
1333
- typeof record.payload.messageId === 'string' &&
1334
- typeof record.turnId === 'string');
1335
- const latestExecutionStart = session.records.findLastIndex((record) => eventType(record) === 'execution.started');
1336
- const currentRecords = latestExecutionStart < 0 ? session.records : session.records.slice(latestExecutionStart);
1337
- const header = session.records.findLast((record) => record.type === 'execution.header' && isRecord(record.payload))?.payload;
1338
- const terminal = currentRecords.findLast((record) => ['execution.completed', 'execution.failed', 'execution.cancelled'].includes(eventType(record) ?? ''));
1339
- const terminalType = eventType(terminal);
1340
- const state = {
1341
- restorable: true,
1342
- agentId: session.id,
1343
- description: session.source.description,
1344
- role: session.source.role,
1345
- ...(session.source.ownerInstanceId === undefined
1346
- ? {}
1347
- : { ownerInstanceId: session.source.ownerInstanceId }),
1348
- ...(session.source.extensionId === undefined
1349
- ? {}
1350
- : { extensionId: session.source.extensionId }),
1351
- status: terminalType === 'execution.completed'
1352
- ? 'completed'
1353
- : terminalType === 'execution.failed'
1354
- ? 'failed'
1355
- : terminalType === 'execution.cancelled'
1356
- ? 'cancelled'
1357
- : 'interrupted',
1358
- ...(delivered && isRecord(delivered.payload)
1359
- ? {
1360
- receipt: {
1361
- messageId: delivered.payload.messageId,
1362
- turnId: delivered.turnId,
1363
- deliveryStatus: 'applied'
1364
- }
1365
- }
1366
- : {}),
1367
- ...(typeof header?.modelId === 'string' ? { modelId: header.modelId } : {}),
1368
- ...(typeof header?.modelName === 'string' ? { modelName: header.modelName } : {}),
1369
- ...(isReasoningEffort(header?.reasoningEffort)
1370
- ? { reasoningEffort: header.reasoningEffort }
1371
- : {}),
1372
- messageRevision: 0,
1373
- observedMessageRevision: 0,
1374
- latestMessageActivityRevision: 0,
1375
- changedFiles: [],
1376
- verification: [],
1377
- evidence: [],
1378
- terminalPending: false,
1379
- observedTerminalRevision: -1,
1380
- resourceRevision: 0
1381
- };
1382
- if (terminalType === 'execution.completed' && terminal) {
1383
- const event = terminal.payload;
1384
- if (event.permissionStop)
1385
- state.permissionStop = event.permissionStop;
1386
- }
1387
- for (const record of currentRecords) {
1388
- if (!isRecord(record.payload) ||
1389
- !['message.completed', 'tool.started', 'tool.completed', 'tool.failed'].includes(eventType(record) ?? ''))
1390
- continue;
1391
- const event = record.payload;
1392
- if (observeAgentEvent(state, event))
1393
- state.messageRevision++;
1394
- }
1395
- state.observedMessageRevision = state.messageRevision;
1396
- if (state.status === 'completed' && state.latestMessage?.phase === 'final_answer')
1397
- state.summary = state.latestMessage.text;
1398
- if (state.status === 'failed' && terminal && isRecord(terminal.payload)) {
1399
- if (typeof terminal.payload.code === 'string')
1400
- state.errorCode = terminal.payload.code;
1401
- if (typeof terminal.payload.message === 'string')
1402
- state.errorMessage = terminal.payload.message;
1403
- }
1404
- return state;
1405
- }
1406
- function observeAgentEvent(state, event) {
1407
- if (event.type === 'message.completed') {
1408
- state.latestMessage = latestMessageFromEvent(event);
1409
- state.latestActivity = {
1410
- kind: 'message',
1411
- timestamp: event.timestamp,
1412
- phase: event.phase
1413
- };
1414
- return true;
1415
- }
1416
- if (event.type === 'tool.started') {
1417
- state.latestActivity = {
1418
- kind: 'tool',
1419
- timestamp: event.timestamp,
1420
- toolName: event.toolName,
1421
- status: 'started'
1422
- };
1423
- return false;
1424
- }
1425
- if (event.type === 'tool.failed') {
1426
- state.latestActivity = {
1427
- kind: 'tool',
1428
- timestamp: event.timestamp,
1429
- toolName: event.toolName,
1430
- status: 'failed'
1431
- };
1432
- return false;
1433
- }
1434
- if (event.type !== 'tool.completed')
1435
- return false;
1436
- state.latestActivity = {
1437
- kind: 'tool',
1438
- timestamp: event.timestamp,
1439
- toolName: event.toolName,
1440
- status: 'completed'
1441
- };
1442
- if (event.toolName === 'apply_patch' && isRecord(event.data)) {
1443
- const data = event.data;
1444
- const files = Array.isArray(data.files) ? data.files : [];
1445
- for (const file of files) {
1446
- if (!isRecord(file))
1447
- continue;
1448
- for (const path of [file.path, file.targetPath])
1449
- if (typeof path === 'string' && path.length > 0 && !state.changedFiles.includes(path))
1450
- state.changedFiles.push(path);
1451
- }
1452
- }
1453
- else if (event.toolName === 'read' && isRecord(event.data)) {
1454
- const data = event.data;
1455
- const results = Array.isArray(data.results) ? data.results : [];
1456
- for (const result of results) {
1457
- if (!isRecord(result) || typeof result.path !== 'string' || result.error !== undefined)
1458
- continue;
1459
- const evidence = {
1460
- path: result.path,
1461
- ...(isPositiveInteger(result.startLine) ? { startLine: result.startLine } : {}),
1462
- ...(isPositiveInteger(result.endLine) ? { endLine: result.endLine } : {})
1463
- };
1464
- if (!state.evidence.some((item) => JSON.stringify(item) === JSON.stringify(evidence)))
1465
- state.evidence.push(evidence);
1466
- }
1467
- }
1468
- else if (event.toolName === 'exec')
1469
- state.verification.push(event.summary);
1470
- return false;
1471
- }
1472
- function eventType(record) {
1473
- return record && isRecord(record.payload) && typeof record.payload.type === 'string'
1474
- ? record.payload.type
1475
- : undefined;
1476
- }
1477
- function latestMessageFromEvent(event) {
1478
- const text = event.text;
1479
- return {
1480
- itemId: event.itemId,
1481
- turnId: event.turnId ?? '',
1482
- phase: event.phase,
1483
- text,
1484
- timestamp: event.timestamp,
1485
- truncated: text !== event.text
1486
- };
1487
- }
1488
- function isReasoningEffort(value) {
1489
- return (value === 'low' ||
1490
- value === 'medium' ||
1491
- value === 'high' ||
1492
- value === 'xhigh' ||
1493
- value === 'max' ||
1494
- value === 'ultra');
1495
- }
1496
- function isRecord(value) {
1497
- return value !== null && typeof value === 'object' && !Array.isArray(value);
1498
- }
1499
- function isPositiveInteger(value) {
1500
- return typeof value === 'number' && Number.isInteger(value) && value >= 1;
1501
- }
1502
- function truncateUtf8(value, maximumBytes) {
1503
- const bytes = Buffer.from(value);
1504
- if (bytes.length <= maximumBytes)
1505
- return value;
1506
- let end = maximumBytes;
1507
- while (end > 0 && (bytes[end] & 0xc0) === 0x80)
1508
- end--;
1509
- return bytes.subarray(0, end).toString('utf8');
1510
- }
1511
- function truncateCharacters(value, maximumCharacters) {
1512
- const characters = [...value];
1513
- return characters.length <= maximumCharacters
1514
- ? value
1515
- : characters.slice(0, maximumCharacters).join('');
1516
- }
1517
- async function waitForNotification(waiters, accepts, current, waitMs, signal, interrupt) {
1518
- let value;
1519
- await waitForToolCondition({
1520
- ready: () => {
1521
- value ??= current();
1522
- return value !== undefined;
1523
- },
1524
- subscribe: (notify) => {
1525
- const listener = (next) => {
1526
- if (accepts(next)) {
1527
- value = next;
1528
- notify();
1529
- }
1530
- };
1531
- waiters.add(listener);
1532
- return () => {
1533
- waiters.delete(listener);
1534
- };
1535
- },
1536
- waitMs,
1537
- signal,
1538
- interrupt
1539
- });
1540
- return value;
1541
- }
1542
- function validateOutputOptions(options, native = false) {
1543
- if ((options.untilSettled !== undefined && options.untilSettled !== true) ||
1544
- (options.untilSettled === true && options.waitFor === 'message') ||
1545
- (options.waitFor !== undefined &&
1546
- options.waitFor !== 'completion' &&
1547
- options.waitFor !== 'message') ||
1548
- (options.waitMs !== undefined &&
1549
- (!Number.isSafeInteger(options.waitMs) ||
1550
- options.waitMs < TOOL_EXECUTION_LIMITS.agentWaitMinWaitMs ||
1551
- (!native && options.waitMs > TOOL_EXECUTION_LIMITS.agentWaitMaxWaitMs))))
1552
- throw new MarAgentError('MAR_AGENT_TOOL_INPUT_INVALID', 'Task wait is invalid.');
1553
- }
1554
- function isTerminalState(state) {
1555
- return (state.status === 'completed' ||
1556
- state.status === 'failed' ||
1557
- state.status === 'cancelled' ||
1558
- state.status === 'interrupted');
1559
- }
1560
- function waitForPromise(promise, signal) {
1561
- signal?.throwIfAborted();
1562
- if (signal === undefined)
1563
- return promise;
1564
- return new Promise((resolve, reject) => {
1565
- let settled = false;
1566
- const finish = (result) => {
1567
- if (settled)
1568
- return;
1569
- settled = true;
1570
- signal.removeEventListener('abort', abort);
1571
- if ('error' in result)
1572
- reject(result.error);
1573
- else
1574
- resolve(result.value);
1575
- };
1576
- const abort = () => finish({
1577
- error: signal.reason ??
1578
- new MarAgentError('MAR_AGENT_EXECUTION_CANCELLED', 'Execution cancelled.')
1579
- });
1580
- signal.addEventListener('abort', abort, { once: true });
1581
- promise.then((value) => finish({ value }), (error) => finish({ error }));
1582
- if (signal.aborted)
1583
- abort();
1584
- });
1585
- }
1586
- /** Retain the waited Turn's evidence when the live Session moves on to another Turn. */
1587
- function copyWaitState(state) {
1588
- return {
1589
- ...state,
1590
- changedFiles: [...state.changedFiles],
1591
- verification: [...state.verification],
1592
- evidence: state.evidence.map((item) => ({ ...item }))
1593
- };
1594
- }