eve 0.75.0 → 0.76.0

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 (658) hide show
  1. package/CHANGELOG.md +54 -0
  2. package/dist/src/_virtual/_rolldown/runtime.js +1 -1
  3. package/dist/src/acp/adapter.js +1 -1
  4. package/dist/src/channel/task-card.js +1 -1
  5. package/dist/src/channel/tool-eligibility.d.ts +1 -2
  6. package/dist/src/chunks/{use-eve-agent-B2Kne9z6.js → use-eve-agent-D2V9UhLt.js} +68 -10
  7. package/dist/src/chunks/{use-eve-agent-DK_T88EP.js → use-eve-agent-QmriPA-w.js} +68 -10
  8. package/dist/src/cli/commands/deploy.js +1 -1
  9. package/dist/src/cli/commands/link.d.ts +2 -1
  10. package/dist/src/cli/commands/link.js +1 -1
  11. package/dist/src/cli/commands/registry.js +1 -1
  12. package/dist/src/cli/commands/vercel-non-interactive.d.ts +6 -4
  13. package/dist/src/cli/commands/vercel-non-interactive.js +1 -1
  14. package/dist/src/cli/dev/environment.d.ts +0 -6
  15. package/dist/src/cli/dev/environment.js +1 -1
  16. package/dist/src/cli/dev/tui/conversation-view.js +1 -1
  17. package/dist/src/cli/dev/tui/runner.js +1 -1
  18. package/dist/src/cli/dev/tui/tool-presentation.js +1 -1
  19. package/dist/src/cli/dev/tui/transcript.js +1 -1
  20. package/dist/src/client/message-action-parts.d.ts +3 -0
  21. package/dist/src/client/message-action-parts.js +1 -1
  22. package/dist/src/client/message-reducer-types.d.ts +6 -1
  23. package/dist/src/client/message-reducer.js +1 -1
  24. package/dist/src/compiled/.vendor-stamp.json +9 -8
  25. package/dist/src/compiled/@eve/catalog/index.js +1 -1
  26. package/dist/src/compiled/@vercel/queue/index.d.ts +1066 -0
  27. package/dist/src/compiled/@vercel/queue/index.js +47 -0
  28. package/dist/src/compiled/@workflow/core/global.d.ts +10 -0
  29. package/dist/src/compiled/@workflow/core/index.js +1 -1
  30. package/dist/src/compiled/@workflow/core/private.d.ts +11 -0
  31. package/dist/src/compiled/@workflow/core/private.js +1 -1
  32. package/dist/src/compiled/@workflow/core/runtime/constants.d.ts +36 -8
  33. package/dist/src/compiled/@workflow/core/runtime/helpers.js +1 -1
  34. package/dist/src/compiled/@workflow/core/runtime/lifecycle-hooks.d.ts +10 -6
  35. package/dist/src/compiled/@workflow/core/runtime/out-of-band-observation.d.ts +159 -0
  36. package/dist/src/compiled/@workflow/core/runtime/vm-mode.d.ts +28 -4
  37. package/dist/src/compiled/@workflow/core/runtime.js +4 -4
  38. package/dist/src/compiled/@workflow/core/serialization.js +1 -1
  39. package/dist/src/compiled/@workflow/core/version.d.ts +1 -1
  40. package/dist/src/compiled/@workflow/core/workflow.js +1 -1
  41. package/dist/src/compiled/@workflow/world-local/index.js +5 -5
  42. package/dist/src/compiled/@workflow/world-vercel/index.js +4 -4
  43. package/dist/src/compiled/_chunks/workflow/{attribute-changes-CSqvJx6j.js → attribute-changes-BW-kbMMn.js} +1 -1
  44. package/dist/src/compiled/_chunks/workflow/dist-CyBgVS7g.js +1 -0
  45. package/dist/src/compiled/_chunks/workflow/{helpers-BXCuoPUb.js → helpers-DlLD3ov_.js} +1 -1
  46. package/dist/src/compiled/_chunks/workflow/private-tQUuwBoQ.js +1 -0
  47. package/dist/src/compiled/_chunks/workflow/{resume-hook-CvENCrxc.js → resume-hook-DMsV_b4n.js} +1 -1
  48. package/dist/src/compiled/_chunks/workflow/{run-8pLWuR2U.js → run-DzdAqdb1.js} +1 -1
  49. package/dist/src/compiled/_chunks/workflow/{serialization-vDozzDhh.js → serialization-DPdYS_w2.js} +2 -2
  50. package/dist/src/compiled/_chunks/workflow/sleep-BY6leHh8.js +1 -0
  51. package/dist/src/compiled/_chunks/workflow/{token-BKeK6DmC.js → token-D5ugC3PI.js} +1 -1
  52. package/dist/src/compiled/_chunks/workflow/{token-util-CddTZ_ef.js → token-util-Bla5Z0G9.js} +1 -1
  53. package/dist/src/compiled/_chunks/workflow/undici-D-ILjOKD.js +95 -0
  54. package/dist/src/compiled/_chunks/workflow/{wait-until-A344L2AG.js → wait-until-xbRRDuUf.js} +1 -1
  55. package/dist/src/compiler/connection-ownership.d.ts +6 -0
  56. package/dist/src/compiler/connection-ownership.js +1 -0
  57. package/dist/src/compiler/default-tool-policy.d.ts +0 -3
  58. package/dist/src/compiler/default-tool-policy.js +1 -1
  59. package/dist/src/compiler/extension-compatibility.d.ts +21 -20
  60. package/dist/src/compiler/extension-compatibility.js +1 -1
  61. package/dist/src/compiler/manifest.d.ts +9 -6
  62. package/dist/src/compiler/manifest.js +1 -1
  63. package/dist/src/compiler/normalize-connection.js +1 -1
  64. package/dist/src/compiler/normalize-manifest.js +1 -1
  65. package/dist/src/compiler/normalize-skill.d.ts +5 -0
  66. package/dist/src/compiler/normalize-skill.js +1 -1
  67. package/dist/src/compiler/normalize-subagent.d.ts +2 -1
  68. package/dist/src/compiler/normalize-subagent.js +1 -1
  69. package/dist/src/compiler/normalize-tool.js +1 -1
  70. package/dist/src/compiler/remote-agent-node.d.ts +2 -1
  71. package/dist/src/compiler/remote-agent-node.js +1 -1
  72. package/dist/src/connections/ownership.d.ts +18 -0
  73. package/dist/src/connections/ownership.js +1 -0
  74. package/dist/src/context/build-dynamic-tools.d.ts +3 -9
  75. package/dist/src/context/build-dynamic-tools.js +1 -1
  76. package/dist/src/context/dynamic-connection-lifecycle.js +1 -1
  77. package/dist/src/context/dynamic-skill-lifecycle.d.ts +2 -11
  78. package/dist/src/context/dynamic-skill-lifecycle.js +1 -1
  79. package/dist/src/context/dynamic-subagent-lifecycle.js +1 -1
  80. package/dist/src/context/dynamic-tool-lifecycle.js +1 -1
  81. package/dist/src/context/dynamic-tool-metadata.d.ts +1 -0
  82. package/dist/src/context/keys.d.ts +5 -4
  83. package/dist/src/context/memory-tools.js +1 -1
  84. package/dist/src/context/schedule-collection-tools.js +1 -1
  85. package/dist/src/discover/grammar.d.ts +11 -0
  86. package/dist/src/discover/grammar.js +1 -1
  87. package/dist/src/discover/manifest.d.ts +1 -0
  88. package/dist/src/discover/manifest.js +1 -1
  89. package/dist/src/discover/skills.d.ts +1 -0
  90. package/dist/src/discover/skills.js +1 -1
  91. package/dist/src/dynamic/definition.d.ts +7 -5
  92. package/dist/src/evals/assertions/collector.d.ts +4 -0
  93. package/dist/src/evals/assertions/collector.js +1 -1
  94. package/dist/src/evals/assertions/run.d.ts +2 -3
  95. package/dist/src/evals/assertions/run.js +2 -2
  96. package/dist/src/evals/assertions/scoped.js +1 -1
  97. package/dist/src/evals/index.d.ts +1 -1
  98. package/dist/src/evals/match.d.ts +9 -6
  99. package/dist/src/evals/reported-tool-name.d.ts +9 -0
  100. package/dist/src/evals/reported-tool-name.js +1 -0
  101. package/dist/src/evals/runner/derive-run-facts.d.ts +3 -3
  102. package/dist/src/evals/runner/derive-run-facts.js +1 -1
  103. package/dist/src/evals/runner/execute-task.js +1 -1
  104. package/dist/src/evals/runner/reporters/braintrust.js +1 -1
  105. package/dist/src/evals/runner/reporters/datadog-runtime-trace-links.d.ts +11 -0
  106. package/dist/src/evals/runner/reporters/datadog-runtime-trace-links.js +1 -0
  107. package/dist/src/evals/runner/reporters/datadog.js +2 -2
  108. package/dist/src/evals/session.js +2 -2
  109. package/dist/src/evals/target.d.ts +7 -0
  110. package/dist/src/evals/target.js +1 -1
  111. package/dist/src/evals/types.d.ts +17 -1
  112. package/dist/src/eve-channel/request.js +1 -1
  113. package/dist/src/execution/agent-sessions/remote.js +1 -1
  114. package/dist/src/execution/catalog/connection-auth.d.ts +41 -0
  115. package/dist/src/execution/catalog/connection-auth.js +1 -0
  116. package/dist/src/execution/catalog/connection-entry.d.ts +16 -0
  117. package/dist/src/execution/catalog/connection-entry.js +1 -0
  118. package/dist/src/execution/catalog/listing.d.ts +9 -0
  119. package/dist/src/execution/catalog/listing.js +3 -0
  120. package/dist/src/execution/catalog/rank.d.ts +44 -0
  121. package/dist/src/execution/catalog/rank.js +1 -0
  122. package/dist/src/execution/catalog/search.d.ts +28 -0
  123. package/dist/src/execution/catalog/search.js +1 -0
  124. package/dist/src/execution/catalog/signatures.d.ts +11 -0
  125. package/dist/src/execution/catalog/signatures.js +1 -0
  126. package/dist/src/execution/catalog/skills.d.ts +24 -0
  127. package/dist/src/execution/catalog/skills.js +1 -0
  128. package/dist/src/execution/catalog/step-catalog.d.ts +51 -0
  129. package/dist/src/execution/catalog/step-catalog.js +1 -0
  130. package/dist/src/execution/coordination-dispatch-shared.js +1 -1
  131. package/dist/src/execution/dynamic-connections.js +1 -1
  132. package/dist/src/execution/dynamic-workflow/tool.js +1 -1
  133. package/dist/src/execution/invoke-tool.js +1 -1
  134. package/dist/src/execution/ndjson-stream.d.ts +6 -6
  135. package/dist/src/execution/ndjson-stream.js +3 -3
  136. package/dist/src/execution/node-step.js +1 -1
  137. package/dist/src/execution/session/active-turn.d.ts +1 -1
  138. package/dist/src/execution/session/pending-turn-state.js +1 -1
  139. package/dist/src/execution/session/turn-step.js +1 -1
  140. package/dist/src/execution/session/turn.d.ts +5 -5
  141. package/dist/src/execution/session/turn.js +1 -1
  142. package/dist/src/execution/session.js +1 -1
  143. package/dist/src/execution/skills/instructions.d.ts +20 -10
  144. package/dist/src/execution/skills/instructions.js +2 -2
  145. package/dist/src/execution/tasks/calls.d.ts +6 -5
  146. package/dist/src/execution/tasks/calls.js +1 -1
  147. package/dist/src/execution/tasks/model-step.d.ts +10 -10
  148. package/dist/src/execution/tasks/model-step.js +1 -1
  149. package/dist/src/execution/tasks/render.d.ts +3 -3
  150. package/dist/src/execution/tasks/render.js +3 -3
  151. package/dist/src/execution/tasks/session.d.ts +2 -1
  152. package/dist/src/execution/tasks/table.d.ts +1 -1
  153. package/dist/src/execution/tasks/tool-entry-point.d.ts +1 -1
  154. package/dist/src/execution/tool-auth.js +1 -1
  155. package/dist/src/execution/tools/agent-router-workflow.js +1 -1
  156. package/dist/src/execution/tools/workflow/harness-definition.js +1 -1
  157. package/dist/src/extensions/code/extension/extension.d.ts +4 -18
  158. package/dist/src/extensions/code/extension/instructions/github.d.ts +3 -0
  159. package/dist/src/extensions/code/extension/instructions/github.js +1 -0
  160. package/dist/src/extensions/code/extension/instructions.md +1 -13
  161. package/dist/src/extensions/code/extension/lib/diagnostics.d.ts +4 -2
  162. package/dist/src/extensions/code/extension/lib/diagnostics.js +3 -3
  163. package/dist/src/extensions/code/extension/lib/github-compat.d.ts +28 -0
  164. package/dist/src/extensions/code/extension/lib/github-compat.js +1 -0
  165. package/dist/src/extensions/code/extension/lib/grep-search.d.ts +3 -13
  166. package/dist/src/extensions/code/extension/lib/grep-search.js +2 -2
  167. package/dist/src/extensions/code/extension/lib/patch.d.ts +8 -2
  168. package/dist/src/extensions/code/extension/lib/patch.js +4 -4
  169. package/dist/src/extensions/code/extension/lib/repository-root.d.ts +3 -4
  170. package/dist/src/extensions/code/extension/lib/repository-root.js +1 -1
  171. package/dist/src/extensions/code/extension/lib/sandbox.d.ts +2 -1
  172. package/dist/src/extensions/code/extension/lib/sandbox.js +1 -1
  173. package/dist/src/extensions/code/extension/lib/tooling.d.ts +4 -4
  174. package/dist/src/extensions/code/extension/lib/tooling.js +7 -7
  175. package/dist/src/extensions/code/extension/lib/workspace-root.d.ts +31 -0
  176. package/dist/src/extensions/code/extension/lib/workspace-root.js +1 -0
  177. package/dist/src/extensions/code/extension/skills/pr.d.ts +6 -0
  178. package/dist/src/extensions/code/extension/skills/pr.js +1 -0
  179. package/dist/src/extensions/code/extension/tools/apply_patch.d.ts +2 -2
  180. package/dist/src/extensions/code/extension/tools/apply_patch.js +2 -2
  181. package/dist/src/extensions/code/extension/tools/gh.d.ts +4 -3
  182. package/dist/src/extensions/code/extension/tools/gh.js +1 -1
  183. package/dist/src/extensions/code/extension/tools/grep.js +1 -1
  184. package/dist/src/extensions/code/tools.d.ts +2 -1
  185. package/dist/src/extensions/code/tools.js +1 -1
  186. package/dist/src/extensions/git/extension/extension.d.ts +12 -0
  187. package/dist/src/extensions/git/extension/extension.js +1 -0
  188. package/dist/src/extensions/git/extension/instructions/github.d.ts +2 -0
  189. package/dist/src/extensions/git/extension/instructions/github.js +1 -0
  190. package/dist/src/extensions/git/extension/lib/gh-tool.d.ts +29 -0
  191. package/dist/src/extensions/git/extension/lib/gh-tool.js +1 -0
  192. package/dist/src/extensions/git/extension/lib/github-guidance.d.ts +3 -0
  193. package/dist/src/extensions/git/extension/lib/github-guidance.js +49 -0
  194. package/dist/src/extensions/{code → git}/extension/lib/github-shell.d.ts +1 -1
  195. package/dist/src/extensions/git/extension/lib/github-shell.js +1 -0
  196. package/dist/src/extensions/git/extension/lib/repository-root.d.ts +5 -0
  197. package/dist/src/extensions/git/extension/lib/repository-root.js +1 -0
  198. package/dist/src/extensions/git/extension/lib/sandbox.d.ts +6 -0
  199. package/dist/src/extensions/git/extension/lib/sandbox.js +1 -0
  200. package/dist/src/extensions/git/extension/lib/shell.d.ts +1 -0
  201. package/dist/src/extensions/git/extension/lib/shell.js +1 -0
  202. package/dist/src/extensions/git/extension/lib/tooling.d.ts +4 -0
  203. package/dist/src/extensions/git/extension/lib/tooling.js +1 -0
  204. package/dist/src/extensions/git/extension/skills/pr.d.ts +5 -0
  205. package/dist/src/extensions/git/extension/skills/pr.js +1 -0
  206. package/dist/src/extensions/git/extension/tools/gh.d.ts +28 -0
  207. package/dist/src/extensions/git/extension/tools/gh.js +1 -0
  208. package/dist/src/extensions/git/tools.d.ts +27 -0
  209. package/dist/src/extensions/git/tools.js +1 -0
  210. package/dist/src/framework/sources/registry.js +1 -1
  211. package/dist/src/harness/action-presentation.d.ts +2 -2
  212. package/dist/src/harness/action-result-helpers.d.ts +10 -2
  213. package/dist/src/harness/action-result-helpers.js +1 -1
  214. package/dist/src/harness/announcements.d.ts +2 -8
  215. package/dist/src/harness/announcements.js +1 -1
  216. package/dist/src/harness/compaction/engine.d.ts +8 -19
  217. package/dist/src/harness/compaction/engine.js +1 -1
  218. package/dist/src/harness/compaction/step.d.ts +7 -1
  219. package/dist/src/harness/compaction/step.js +1 -1
  220. package/dist/src/harness/coordination.d.ts +11 -11
  221. package/dist/src/harness/coordination.js +1 -1
  222. package/dist/src/harness/current-messages.d.ts +1 -5
  223. package/dist/src/harness/current-messages.js +1 -1
  224. package/dist/src/harness/emission.d.ts +2 -2
  225. package/dist/src/harness/emission.js +1 -1
  226. package/dist/src/harness/execute-call.d.ts +48 -0
  227. package/dist/src/harness/execute-call.js +1 -0
  228. package/dist/src/harness/execute-tool.d.ts +3 -1
  229. package/dist/src/harness/final-output.d.ts +2 -6
  230. package/dist/src/harness/final-output.js +1 -1
  231. package/dist/src/harness/hitl/approvals.d.ts +5 -0
  232. package/dist/src/harness/hitl/approvals.js +1 -1
  233. package/dist/src/harness/hitl/approved-calls.d.ts +3 -2
  234. package/dist/src/harness/hitl/approved-calls.js +1 -1
  235. package/dist/src/harness/hitl/candidates.d.ts +13 -2
  236. package/dist/src/harness/hitl/candidates.js +1 -1
  237. package/dist/src/harness/hitl/coordinator.d.ts +3 -3
  238. package/dist/src/harness/hitl/coordinator.js +1 -1
  239. package/dist/src/harness/hitl/index.d.ts +6 -4
  240. package/dist/src/harness/hitl/index.js +1 -1
  241. package/dist/src/harness/hitl/intake.d.ts +3 -3
  242. package/dist/src/harness/hitl/intake.js +1 -1
  243. package/dist/src/harness/input-extraction.d.ts +4 -1
  244. package/dist/src/harness/input-extraction.js +1 -1
  245. package/dist/src/harness/input-request-resolution.d.ts +15 -0
  246. package/dist/src/harness/input-request-resolution.js +1 -1
  247. package/dist/src/harness/model-call/call.d.ts +5 -8
  248. package/dist/src/harness/model-call/call.js +1 -1
  249. package/dist/src/harness/model-call/errors.js +1 -1
  250. package/dist/src/harness/model-call/model.d.ts +4 -5
  251. package/dist/src/harness/model-call/model.js +1 -1
  252. package/dist/src/harness/model-call/request.d.ts +4 -4
  253. package/dist/src/harness/model-call/request.js +1 -1
  254. package/dist/src/harness/model-call/response.d.ts +2 -1
  255. package/dist/src/harness/model-call/response.js +1 -1
  256. package/dist/src/harness/model-call/retry.d.ts +1 -1
  257. package/dist/src/harness/model-call/retry.js +1 -1
  258. package/dist/src/harness/model-call/run.d.ts +5 -3
  259. package/dist/src/harness/model-call/run.js +1 -1
  260. package/dist/src/harness/model-call/tools.d.ts +14 -24
  261. package/dist/src/harness/model-call/tools.js +1 -1
  262. package/dist/src/harness/model-call/usage.js +1 -1
  263. package/dist/src/harness/model-profile.d.ts +28 -0
  264. package/dist/src/harness/model-profile.js +1 -0
  265. package/dist/src/harness/prompt-cache.d.ts +5 -53
  266. package/dist/src/harness/prompt-cache.js +1 -1
  267. package/dist/src/harness/provider-safety.d.ts +3 -5
  268. package/dist/src/harness/provider-safety.js +1 -1
  269. package/dist/src/harness/provider-tools.d.ts +7 -14
  270. package/dist/src/harness/provider-tools.js +1 -1
  271. package/dist/src/harness/session-machine/commit.js +1 -1
  272. package/dist/src/harness/session-machine/transitions.d.ts +5 -2
  273. package/dist/src/harness/session-machine/transitions.js +1 -1
  274. package/dist/src/harness/step/after-model.js +1 -1
  275. package/dist/src/harness/step-hooks.d.ts +6 -9
  276. package/dist/src/harness/step-hooks.js +1 -1
  277. package/dist/src/harness/tool-call-input-errors.d.ts +2 -2
  278. package/dist/src/harness/tool-call-io.d.ts +3 -0
  279. package/dist/src/harness/tool-call-io.js +1 -1
  280. package/dist/src/harness/tools.d.ts +24 -22
  281. package/dist/src/harness/tools.js +1 -1
  282. package/dist/src/harness/turn-tag-state.d.ts +12 -0
  283. package/dist/src/harness/turn-tag-state.js +1 -1
  284. package/dist/src/harness/types.d.ts +14 -0
  285. package/dist/src/instrumentation/lifecycle.d.ts +0 -1
  286. package/dist/src/instrumentation/native-events.js +1 -1
  287. package/dist/src/instrumentation/runtime.d.ts +2 -1
  288. package/dist/src/internal/application/package.js +1 -1
  289. package/dist/src/internal/authored-definition/core.js +1 -1
  290. package/dist/src/internal/authored-definition/schedule-collection.js +1 -1
  291. package/dist/src/internal/authored-definition/schema-backed.d.ts +2 -2
  292. package/dist/src/internal/authored-definition/schema-backed.js +1 -1
  293. package/dist/src/internal/authored-module.d.ts +2 -1
  294. package/dist/src/internal/authored-module.js +1 -1
  295. package/dist/src/internal/gateway.d.ts +0 -13
  296. package/dist/src/internal/gateway.js +1 -1
  297. package/dist/src/internal/helpers/markdown.js +1 -1
  298. package/dist/src/internal/mcp/skills.js +1 -1
  299. package/dist/src/internal/nitro/host/create-application-nitro.js +1 -1
  300. package/dist/src/internal/nitro/host/dev-host-fingerprint.js +1 -1
  301. package/dist/src/internal/nitro/host/local-schedules-runtime-plugin.d.ts +5 -0
  302. package/dist/src/internal/nitro/host/local-schedules-runtime-plugin.js +1 -0
  303. package/dist/src/internal/nitro/routes/schedule-collection-consumer.d.ts +6 -0
  304. package/dist/src/internal/nitro/routes/schedule-collection-consumer.js +1 -1
  305. package/dist/src/internal/schedules/consumer-route.d.ts +2 -0
  306. package/dist/src/internal/schedules/consumer-route.js +1 -1
  307. package/dist/src/internal/schedules/dev-environment.d.ts +2 -0
  308. package/dist/src/internal/schedules/dev-environment.js +1 -0
  309. package/dist/src/internal/vercel-agent-summary.d.ts +2 -2
  310. package/dist/src/internal/workflow/vercel-world-defaults.d.ts +1 -1
  311. package/dist/src/internal/workflow/vercel-world-defaults.js +1 -1
  312. package/dist/src/protocol/catalog-tools.d.ts +12 -0
  313. package/dist/src/protocol/catalog-tools.js +1 -0
  314. package/dist/src/protocol/message-version.js +1 -1
  315. package/dist/src/protocol/message.d.ts +1 -1
  316. package/dist/src/protocol/remote-agent-protocol.d.ts +2 -0
  317. package/dist/src/protocol/remote-agent-protocol.js +1 -1
  318. package/dist/src/protocol/reply-tool.d.ts +2 -0
  319. package/dist/src/protocol/reply-tool.js +1 -0
  320. package/dist/src/protocol/runtime-tools.d.ts +6 -0
  321. package/dist/src/protocol/runtime-tools.js +1 -0
  322. package/dist/src/protocol/session-projection.js +1 -1
  323. package/dist/src/protocol/task-tools.d.ts +4 -4
  324. package/dist/src/protocol/task-tools.js +1 -1
  325. package/dist/src/public/channels/chat-sdk/chatSdkChannel.js +1 -1
  326. package/dist/src/public/channels/linear/defaults.js +2 -2
  327. package/dist/src/public/channels/slack/action-status.d.ts +0 -9
  328. package/dist/src/public/channels/slack/action-status.js +1 -1
  329. package/dist/src/public/channels/slack/defaults.js +2 -2
  330. package/dist/src/public/channels/slack/task-card.d.ts +1 -1
  331. package/dist/src/public/definitions/connections/mcp.d.ts +4 -4
  332. package/dist/src/public/definitions/connections/openapi.d.ts +6 -7
  333. package/dist/src/public/definitions/remote-agent.d.ts +6 -3
  334. package/dist/src/public/definitions/workspace-agent.d.ts +6 -3
  335. package/dist/src/public/experimental/schedules/index.d.ts +1 -1
  336. package/dist/src/public/schedules/providers/in-memory.js +1 -1
  337. package/dist/src/public/schedules/providers/vercel.js +1 -1
  338. package/dist/src/public/schedules/subscription.d.ts +36 -16
  339. package/dist/src/public/tools/web-search.d.ts +1 -1
  340. package/dist/src/runtime/agent/bootstrap.d.ts +2 -1
  341. package/dist/src/runtime/agent/bootstrap.js +1 -1
  342. package/dist/src/runtime/agent/mock-model-adapter.js +2 -2
  343. package/dist/src/runtime/agent/mock-model-fixtures.js +2 -2
  344. package/dist/src/runtime/agent/mock-model-skill-selection.d.ts +2 -0
  345. package/dist/src/runtime/agent/mock-model-skill-selection.js +2 -2
  346. package/dist/src/runtime/agent/mock-structured-output.d.ts +1 -1
  347. package/dist/src/runtime/connections/mcp-client.js +1 -1
  348. package/dist/src/runtime/connections/registry.js +1 -1
  349. package/dist/src/runtime/connections/scoped-authorization.js +1 -1
  350. package/dist/src/runtime/connections/tool-result.d.ts +2 -2
  351. package/dist/src/runtime/resolve-agent-graph.js +1 -1
  352. package/dist/src/runtime/resolve-tool.js +1 -1
  353. package/dist/src/runtime/schedules/collection-client.d.ts +12 -3
  354. package/dist/src/runtime/schedules/collection-client.js +1 -1
  355. package/dist/src/runtime/subagents/dynamic-agent-config.d.ts +2 -2
  356. package/dist/src/runtime/subagents/dynamic-remote-agent-config.d.ts +2 -1
  357. package/dist/src/runtime/subagents/dynamic-remote-agent-config.js +1 -1
  358. package/dist/src/runtime/subagents/registry.d.ts +2 -1
  359. package/dist/src/runtime/subagents/registry.js +1 -1
  360. package/dist/src/runtime/tools/registry.d.ts +2 -0
  361. package/dist/src/runtime/tools/registry.js +1 -1
  362. package/dist/src/runtime/types.d.ts +3 -3
  363. package/dist/src/setup/connection-connector.js +1 -2
  364. package/dist/src/setup/index.d.ts +1 -1
  365. package/dist/src/setup/index.js +1 -1
  366. package/dist/src/setup/integrations/slack/setup.d.ts +23 -3
  367. package/dist/src/setup/integrations/slack/setup.js +1 -1
  368. package/dist/src/setup/primitives/process-output.d.ts +5 -0
  369. package/dist/src/setup/primitives/process-output.js +2 -1
  370. package/dist/src/setup/scaffold/create/project.js +1 -1
  371. package/dist/src/setup/scaffold/create/web-template.d.ts +3 -2
  372. package/dist/src/setup/scaffold/create/web-template.js +384 -412
  373. package/dist/src/setup/scaffold/update/update-slack-channel.d.ts +17 -0
  374. package/dist/src/setup/scaffold/update/update-slack-channel.js +1 -1
  375. package/dist/src/setup/slack-connect-create.d.ts +10 -2
  376. package/dist/src/setup/slack-connect-create.js +1 -1
  377. package/dist/src/setup/slack-connect-lifecycle.d.ts +92 -44
  378. package/dist/src/setup/slack-connect-lifecycle.js +1 -1
  379. package/dist/src/setup/slack-connect.d.ts +30 -11
  380. package/dist/src/setup/slack-connect.js +1 -1
  381. package/dist/src/setup/slack-setup-plan.d.ts +72 -0
  382. package/dist/src/setup/slack-setup-plan.js +1 -0
  383. package/dist/src/setup/slackbot.d.ts +75 -35
  384. package/dist/src/setup/slackbot.js +2 -1
  385. package/dist/src/setup/vercel-project.d.ts +1 -1
  386. package/dist/src/setup/vercel-project.js +0 -0
  387. package/dist/src/shared/action-label.d.ts +10 -0
  388. package/dist/src/shared/action-label.js +1 -0
  389. package/dist/src/shared/action-request-name.d.ts +3 -1
  390. package/dist/src/shared/action-request-name.js +1 -1
  391. package/dist/src/shared/action-types.d.ts +7 -8
  392. package/dist/src/shared/action-types.js +1 -1
  393. package/dist/src/shared/agent-definition.d.ts +11 -3
  394. package/dist/src/shared/development-env-files.d.ts +4 -0
  395. package/dist/src/shared/development-env-files.js +1 -0
  396. package/dist/src/shared/input.d.ts +0 -1
  397. package/dist/src/shared/map-with-concurrency.d.ts +2 -0
  398. package/dist/src/shared/map-with-concurrency.js +1 -0
  399. package/dist/src/shared/skill-definition.d.ts +6 -0
  400. package/dist/src/shared/skill-package.d.ts +1 -0
  401. package/dist/src/shared/skill-package.js +1 -1
  402. package/dist/src/shared/web-search.d.ts +15 -2
  403. package/dist/src/shared/web-search.js +1 -1
  404. package/dist/src/svelte/index.js +1 -1
  405. package/dist/src/svelte/use-eve-agent.js +1 -1
  406. package/dist/src/tool-stubs/execute.d.ts +0 -3
  407. package/dist/src/tool-stubs/execute.js +1 -1
  408. package/dist/src/tool-stubs/rules.js +1 -1
  409. package/dist/src/tool-stubs/validate-targets.js +1 -1
  410. package/dist/src/tools/behavior.d.ts +3 -6
  411. package/dist/src/tools/definition.d.ts +5 -0
  412. package/dist/src/tools/dynamic.d.ts +5 -2
  413. package/dist/src/tools/provided/ask-question-workflow.js +1 -1
  414. package/dist/src/tools/provided/sleep-workflow.js +1 -1
  415. package/dist/src/tools/provided/task-cancel.d.ts +1 -1
  416. package/dist/src/tools/provided/task-wait.d.ts +1 -1
  417. package/dist/src/tools/provided/web-search.d.ts +20 -7
  418. package/dist/src/tools/provided/web-search.js +1 -1
  419. package/dist/src/tools/schema.d.ts +5 -0
  420. package/dist/src/tools/schema.js +1 -1
  421. package/dist/src/{runtime/connections/tool-signature.d.ts → tools/signature.d.ts} +2 -2
  422. package/dist/src/tools/workflow-definition.d.ts +1 -1
  423. package/dist/src/tracing/agent-approval-instrumentation.js +1 -1
  424. package/dist/src/tracing/agent-otel-provider.js +2 -2
  425. package/dist/src/tracing/agent-otel-runtime-context.d.ts +1 -0
  426. package/dist/src/tracing/agent-otel-runtime-context.js +1 -1
  427. package/dist/src/tracing/agent-otel-turn-state.d.ts +6 -0
  428. package/dist/src/tracing/agent-otel-turn-state.js +1 -0
  429. package/dist/src/tracing/agent-tool-instrumentation.js +1 -1
  430. package/dist/src/tracing/agent-trace-context-codec.js +1 -1
  431. package/dist/src/tracing/agent-trace-state.d.ts +4 -1
  432. package/dist/src/vue/index.js +1 -1
  433. package/dist/src/vue/use-eve-agent.js +1 -1
  434. package/docs/agent-config.md +8 -8
  435. package/docs/channels/chat-sdk.mdx +1 -1
  436. package/docs/channels/slack.mdx +32 -82
  437. package/docs/code-extension.mdx +28 -7
  438. package/docs/concepts/built-in-tools.md +43 -43
  439. package/docs/concepts/context-control.md +1 -1
  440. package/docs/concepts/execution-model-and-durability.mdx +1 -1
  441. package/docs/concepts/sessions-runs-and-streaming.md +4 -4
  442. package/docs/connections/mcp.mdx +5 -5
  443. package/docs/connections/openapi.mdx +1 -1
  444. package/docs/connections/overview.mdx +4 -2
  445. package/docs/evals/assertions.mdx +5 -3
  446. package/docs/evals/reporters.mdx +3 -1
  447. package/docs/evals/tool-stubs.mdx +3 -1
  448. package/docs/extensions.md +2 -0
  449. package/docs/guides/dev-tui.md +2 -2
  450. package/docs/guides/dynamic-capabilities.md +14 -4
  451. package/docs/guides/frontend/overview.mdx +1 -1
  452. package/docs/guides/remote-agents.md +10 -3
  453. package/docs/instructions.mdx +5 -5
  454. package/docs/reference/cli.md +2 -2
  455. package/docs/reference/typescript-api.md +3 -3
  456. package/docs/skills.mdx +19 -4
  457. package/docs/subagents/index.mdx +5 -3
  458. package/docs/tools/overview.mdx +22 -1
  459. package/docs/tools/tasks-upgrade.md +1 -1
  460. package/docs/tools/tasks.md +32 -32
  461. package/docs/tools/workflows.mdx +6 -6
  462. package/docs/tutorial/team-playbooks.mdx +2 -2
  463. package/package.json +27 -11
  464. package/dist/src/compiled/_chunks/workflow/dist-DmXynLVH.js +0 -1
  465. package/dist/src/compiled/_chunks/workflow/private-Dlf90Zvn.js +0 -1
  466. package/dist/src/compiled/_chunks/workflow/signal-exit-iIdjQcCK.js +0 -95
  467. package/dist/src/compiled/_chunks/workflow/sleep-BMqbraZM.js +0 -1
  468. package/dist/src/execution/connection-announcement.d.ts +0 -7
  469. package/dist/src/execution/connection-announcement.js +0 -4
  470. package/dist/src/execution/tools/connection-approval.d.ts +0 -25
  471. package/dist/src/execution/tools/connection-approval.js +0 -1
  472. package/dist/src/execution/tools/connection-search-rank.d.ts +0 -21
  473. package/dist/src/execution/tools/connection-search-rank.js +0 -1
  474. package/dist/src/execution/tools/connection-target.d.ts +0 -18
  475. package/dist/src/execution/tools/connection-target.js +0 -1
  476. package/dist/src/execution/tools/connection-tools.d.ts +0 -4
  477. package/dist/src/execution/tools/connection-tools.js +0 -2
  478. package/dist/src/execution/tools/load-skill.d.ts +0 -10
  479. package/dist/src/execution/tools/load-skill.js +0 -1
  480. package/dist/src/extensions/code/extension/lib/github-shell.js +0 -1
  481. package/dist/src/extensions/code/extension/skills/pr/SKILL.md +0 -53
  482. package/dist/src/extensions/code/extension/subagents/worker/tools/load_skill.d.ts +0 -2
  483. package/dist/src/extensions/code/extension/subagents/worker/tools/load_skill.js +0 -1
  484. package/dist/src/harness/advertised-tools.d.ts +0 -26
  485. package/dist/src/harness/advertised-tools.js +0 -1
  486. package/dist/src/harness/nested-actions.d.ts +0 -23
  487. package/dist/src/harness/nested-actions.js +0 -1
  488. package/dist/src/node_modules/.pnpm/@vercel_cli-config@0.2.0/node_modules/@vercel/cli-config/dist/cli-config.js +0 -1
  489. package/dist/src/node_modules/.pnpm/@vercel_cli-config@0.2.0/node_modules/@vercel/cli-config/dist/cred-storage.js +0 -1
  490. package/dist/src/node_modules/.pnpm/@vercel_cli-config@0.2.0/node_modules/@vercel/cli-config/dist/index.js +0 -1
  491. package/dist/src/node_modules/.pnpm/@vercel_cli-config@0.2.0/node_modules/@vercel/cli-config/dist/schema.js +0 -1
  492. package/dist/src/node_modules/.pnpm/@vercel_cli-config@0.2.0/node_modules/@vercel/cli-config/dist/schema.zod.js +0 -1
  493. package/dist/src/node_modules/.pnpm/@vercel_cli-config@0.2.0/node_modules/@vercel/cli-config/dist/types.js +0 -1
  494. package/dist/src/node_modules/.pnpm/@vercel_cli-exec@1.0.0/node_modules/@vercel/cli-exec/dist/envpath.js +0 -1
  495. package/dist/src/node_modules/.pnpm/@vercel_cli-exec@1.0.0/node_modules/@vercel/cli-exec/dist/errors.js +0 -2
  496. package/dist/src/node_modules/.pnpm/@vercel_cli-exec@1.0.0/node_modules/@vercel/cli-exec/dist/errutils.js +0 -1
  497. package/dist/src/node_modules/.pnpm/@vercel_cli-exec@1.0.0/node_modules/@vercel/cli-exec/dist/exec.js +0 -1
  498. package/dist/src/node_modules/.pnpm/@vercel_cli-exec@1.0.0/node_modules/@vercel/cli-exec/dist/fsutils.js +0 -1
  499. package/dist/src/node_modules/.pnpm/@vercel_cli-exec@1.0.0/node_modules/@vercel/cli-exec/dist/index.js +0 -1
  500. package/dist/src/node_modules/.pnpm/@vercel_cli-exec@1.0.0/node_modules/@vercel/cli-exec/dist/lookup.js +0 -1
  501. package/dist/src/node_modules/.pnpm/@vercel_cli-exec@1.0.0/node_modules/@vercel/cli-exec/dist/safety.js +0 -1
  502. package/dist/src/node_modules/.pnpm/@vercel_oidc@3.8.0/node_modules/@vercel/oidc/dist/auth-errors.js +0 -1
  503. package/dist/src/node_modules/.pnpm/@vercel_oidc@3.8.0/node_modules/@vercel/oidc/dist/exchange-vercel-oidc-token.js +0 -1
  504. package/dist/src/node_modules/.pnpm/@vercel_oidc@3.8.0/node_modules/@vercel/oidc/dist/get-context.js +0 -1
  505. package/dist/src/node_modules/.pnpm/@vercel_oidc@3.8.0/node_modules/@vercel/oidc/dist/get-vercel-oidc-token-sync.js +0 -1
  506. package/dist/src/node_modules/.pnpm/@vercel_oidc@3.8.0/node_modules/@vercel/oidc/dist/get-vercel-oidc-token-with-refresh.js +0 -2
  507. package/dist/src/node_modules/.pnpm/@vercel_oidc@3.8.0/node_modules/@vercel/oidc/dist/index.js +0 -1
  508. package/dist/src/node_modules/.pnpm/@vercel_oidc@3.8.0/node_modules/@vercel/oidc/dist/oauth.js +0 -1
  509. package/dist/src/node_modules/.pnpm/@vercel_oidc@3.8.0/node_modules/@vercel/oidc/dist/token-error.js +0 -1
  510. package/dist/src/node_modules/.pnpm/@vercel_oidc@3.8.0/node_modules/@vercel/oidc/dist/token-io.js +0 -1
  511. package/dist/src/node_modules/.pnpm/@vercel_oidc@3.8.0/node_modules/@vercel/oidc/dist/token-util.js +0 -2
  512. package/dist/src/node_modules/.pnpm/@vercel_oidc@3.8.0/node_modules/@vercel/oidc/dist/token.js +0 -1
  513. package/dist/src/node_modules/.pnpm/@vercel_oidc@3.8.0/node_modules/@vercel/oidc/dist/verify-vercel-oidc-token.js +0 -1
  514. package/dist/src/node_modules/.pnpm/@vercel_oidc@3.8.0/node_modules/@vercel/oidc/dist/version.js +0 -1
  515. package/dist/src/node_modules/.pnpm/@vercel_queue@0.5.1_@opentelemetry_api@1.9.1/node_modules/@vercel/queue/dist/index.js +0 -36
  516. package/dist/src/node_modules/.pnpm/balanced-match@4.0.4/node_modules/balanced-match/dist/esm/index.js +0 -1
  517. package/dist/src/node_modules/.pnpm/brace-expansion@5.0.12/node_modules/brace-expansion/dist/esm/index.js +0 -1
  518. package/dist/src/node_modules/.pnpm/cross-spawn@7.0.6/node_modules/cross-spawn/index.js +0 -1
  519. package/dist/src/node_modules/.pnpm/cross-spawn@7.0.6/node_modules/cross-spawn/lib/enoent.js +0 -1
  520. package/dist/src/node_modules/.pnpm/cross-spawn@7.0.6/node_modules/cross-spawn/lib/parse.js +0 -1
  521. package/dist/src/node_modules/.pnpm/cross-spawn@7.0.6/node_modules/cross-spawn/lib/util/escape.js +0 -1
  522. package/dist/src/node_modules/.pnpm/cross-spawn@7.0.6/node_modules/cross-spawn/lib/util/readShebang.js +0 -1
  523. package/dist/src/node_modules/.pnpm/cross-spawn@7.0.6/node_modules/cross-spawn/lib/util/resolveCommand.js +0 -1
  524. package/dist/src/node_modules/.pnpm/execa@5.1.1/node_modules/execa/index.js +0 -1
  525. package/dist/src/node_modules/.pnpm/execa@5.1.1/node_modules/execa/lib/command.js +0 -1
  526. package/dist/src/node_modules/.pnpm/execa@5.1.1/node_modules/execa/lib/error.js +0 -2
  527. package/dist/src/node_modules/.pnpm/execa@5.1.1/node_modules/execa/lib/kill.js +0 -1
  528. package/dist/src/node_modules/.pnpm/execa@5.1.1/node_modules/execa/lib/promise.js +0 -1
  529. package/dist/src/node_modules/.pnpm/execa@5.1.1/node_modules/execa/lib/stdio.js +0 -1
  530. package/dist/src/node_modules/.pnpm/execa@5.1.1/node_modules/execa/lib/stream.js +0 -1
  531. package/dist/src/node_modules/.pnpm/get-stream@6.0.1/node_modules/get-stream/buffer-stream.js +0 -1
  532. package/dist/src/node_modules/.pnpm/get-stream@6.0.1/node_modules/get-stream/index.js +0 -1
  533. package/dist/src/node_modules/.pnpm/human-signals@2.1.0/node_modules/human-signals/build/src/core.js +0 -1
  534. package/dist/src/node_modules/.pnpm/human-signals@2.1.0/node_modules/human-signals/build/src/main.js +0 -1
  535. package/dist/src/node_modules/.pnpm/human-signals@2.1.0/node_modules/human-signals/build/src/realtime.js +0 -1
  536. package/dist/src/node_modules/.pnpm/human-signals@2.1.0/node_modules/human-signals/build/src/signals.js +0 -1
  537. package/dist/src/node_modules/.pnpm/is-stream@2.0.1/node_modules/is-stream/index.js +0 -1
  538. package/dist/src/node_modules/.pnpm/isexe@2.0.0/node_modules/isexe/index.js +0 -1
  539. package/dist/src/node_modules/.pnpm/isexe@2.0.0/node_modules/isexe/mode.js +0 -1
  540. package/dist/src/node_modules/.pnpm/isexe@2.0.0/node_modules/isexe/windows.js +0 -1
  541. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/index.js +0 -1
  542. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jwe/compact/decrypt.js +0 -1
  543. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jwe/compact/encrypt.js +0 -1
  544. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jwe/flattened/decrypt.js +0 -1
  545. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jwe/flattened/encrypt.js +0 -1
  546. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jwe/general/decrypt.js +0 -1
  547. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jwe/general/encrypt.js +0 -1
  548. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jwk/embedded.js +0 -1
  549. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jwk/thumbprint.js +0 -1
  550. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jwks/local.js +0 -1
  551. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jwks/remote.js +0 -1
  552. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jws/compact/sign.js +0 -1
  553. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jws/compact/verify.js +0 -1
  554. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jws/flattened/sign.js +0 -1
  555. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jws/flattened/verify.js +0 -1
  556. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jws/general/sign.js +0 -1
  557. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jws/general/verify.js +0 -1
  558. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jwt/decrypt.js +0 -1
  559. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jwt/encrypt.js +0 -1
  560. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jwt/produce.js +0 -1
  561. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jwt/sign.js +0 -1
  562. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jwt/unsecured.js +0 -1
  563. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jwt/verify.js +0 -1
  564. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/key/export.js +0 -1
  565. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/key/generate_key_pair.js +0 -1
  566. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/key/generate_secret.js +0 -1
  567. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/key/import.js +0 -1
  568. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/aesgcmkw.js +0 -1
  569. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/buffer_utils.js +0 -1
  570. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/cek.js +0 -1
  571. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/check_iv_length.js +0 -1
  572. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/check_key_type.js +0 -1
  573. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/check_p2s.js +0 -1
  574. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/crypto_key.js +0 -1
  575. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/decrypt_key_management.js +0 -1
  576. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/encrypt_key_management.js +0 -1
  577. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/epoch.js +0 -1
  578. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/invalid_key_input.js +0 -1
  579. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/is_disjoint.js +0 -1
  580. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/is_jwk.js +0 -1
  581. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/is_object.js +0 -1
  582. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/iv.js +0 -1
  583. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/jwt_claims_set.js +0 -1
  584. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/private_symbols.js +0 -1
  585. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/secs.js +0 -1
  586. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/validate_algorithms.js +0 -1
  587. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/validate_crit.js +0 -1
  588. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/aeskw.js +0 -1
  589. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/asn1.js +0 -1
  590. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/base64url.js +0 -1
  591. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/cbc_tag.js +0 -1
  592. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/check_cek_length.js +0 -1
  593. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/check_key_length.js +0 -1
  594. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/ciphers.js +0 -1
  595. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/decrypt.js +0 -1
  596. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/digest.js +0 -1
  597. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/dsa_digest.js +0 -1
  598. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/ecdhes.js +0 -1
  599. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/encrypt.js +0 -1
  600. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/fetch_jwks.js +0 -1
  601. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/generate.js +0 -1
  602. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/get_named_curve.js +0 -1
  603. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/get_sign_verify_key.js +0 -1
  604. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/hmac_digest.js +0 -1
  605. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/is_key_like.js +0 -1
  606. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/is_key_object.js +0 -1
  607. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/jwk_to_key.js +0 -1
  608. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/key_to_jwk.js +0 -1
  609. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/node_key.js +0 -1
  610. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/normalize_key.js +0 -1
  611. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/pbes2kw.js +0 -1
  612. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/random.js +0 -1
  613. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/rsaes.js +0 -1
  614. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/runtime.js +0 -1
  615. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/sign.js +0 -1
  616. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/timing_safe_equal.js +0 -1
  617. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/verify.js +0 -1
  618. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/webcrypto.js +0 -1
  619. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/util/base64url.js +0 -1
  620. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/util/decode_jwt.js +0 -1
  621. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/util/decode_protected_header.js +0 -1
  622. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/util/errors.js +0 -1
  623. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/util/runtime.js +0 -1
  624. package/dist/src/node_modules/.pnpm/merge-stream@2.0.0/node_modules/merge-stream/index.js +0 -1
  625. package/dist/src/node_modules/.pnpm/mimic-fn@2.1.0/node_modules/mimic-fn/index.js +0 -1
  626. package/dist/src/node_modules/.pnpm/minimatch@10.2.6/node_modules/minimatch/dist/esm/assert-valid-pattern.js +0 -1
  627. package/dist/src/node_modules/.pnpm/minimatch@10.2.6/node_modules/minimatch/dist/esm/ast.js +0 -1
  628. package/dist/src/node_modules/.pnpm/minimatch@10.2.6/node_modules/minimatch/dist/esm/brace-expressions.js +0 -1
  629. package/dist/src/node_modules/.pnpm/minimatch@10.2.6/node_modules/minimatch/dist/esm/escape.js +0 -1
  630. package/dist/src/node_modules/.pnpm/minimatch@10.2.6/node_modules/minimatch/dist/esm/index.js +0 -1
  631. package/dist/src/node_modules/.pnpm/minimatch@10.2.6/node_modules/minimatch/dist/esm/unescape.js +0 -1
  632. package/dist/src/node_modules/.pnpm/mixpart@0.0.6/node_modules/mixpart/dist/index.js +0 -7
  633. package/dist/src/node_modules/.pnpm/npm-run-path@4.0.1/node_modules/npm-run-path/index.js +0 -1
  634. package/dist/src/node_modules/.pnpm/onetime@5.1.2/node_modules/onetime/index.js +0 -1
  635. package/dist/src/node_modules/.pnpm/os-paths@4.4.0/node_modules/os-paths/src/lib/index.js +0 -1
  636. package/dist/src/node_modules/.pnpm/path-key@3.1.1/node_modules/path-key/index.js +0 -1
  637. package/dist/src/node_modules/.pnpm/picocolors@1.1.1/node_modules/picocolors/picocolors.js +0 -1
  638. package/dist/src/node_modules/.pnpm/shebang-command@2.0.0/node_modules/shebang-command/index.js +0 -1
  639. package/dist/src/node_modules/.pnpm/shebang-regex@3.0.0/node_modules/shebang-regex/index.js +0 -1
  640. package/dist/src/node_modules/.pnpm/signal-exit@3.0.7/node_modules/signal-exit/index.js +0 -1
  641. package/dist/src/node_modules/.pnpm/signal-exit@3.0.7/node_modules/signal-exit/signals.js +0 -1
  642. package/dist/src/node_modules/.pnpm/strip-final-newline@2.0.0/node_modules/strip-final-newline/index.js +0 -2
  643. package/dist/src/node_modules/.pnpm/which@2.0.2/node_modules/which/which.js +0 -1
  644. package/dist/src/node_modules/.pnpm/xdg-app-paths@5.5.1/node_modules/xdg-app-paths/src/lib/index.js +0 -1
  645. package/dist/src/node_modules/.pnpm/xdg-portable@7.3.0/node_modules/xdg-portable/src/lib/index.js +0 -1
  646. package/dist/src/public/tools/load-skill.d.ts +0 -3
  647. package/dist/src/public/tools/load-skill.js +0 -1
  648. package/dist/src/runtime/skills/fragment-context.d.ts +0 -4
  649. package/dist/src/runtime/skills/fragment-context.js +0 -1
  650. package/dist/src/tools/framework/connection-tools.d.ts +0 -3
  651. package/dist/src/tools/framework/connection-tools.js +0 -1
  652. package/dist/src/tools/provided/load-skill.d.ts +0 -2
  653. package/dist/src/tools/provided/load-skill.js +0 -1
  654. /package/dist/src/extensions/{code → git}/extension/lib/github-shell-schema.d.ts +0 -0
  655. /package/dist/src/extensions/{code → git}/extension/lib/github-shell-schema.js +0 -0
  656. /package/dist/src/extensions/{code → git}/extension/lib/signed-commit.d.ts +0 -0
  657. /package/dist/src/extensions/{code → git}/extension/lib/signed-commit.js +0 -0
  658. /package/dist/src/{runtime/connections/tool-signature.js → tools/signature.js} +0 -0
@@ -1 +1 @@
1
- import{toError}from"#shared/errors.js";import{parseJsonValue}from"#shared/json.js";import{authorizationPendingAsJsonObject,isAuthorizationPendingModelOutput,isAuthorizationSignal}from"#harness/authorization.js";import{withToolOutputSerializationError}from"#harness/tool-output-serialization.js";function toJsonValue(e){return isAuthorizationSignal(e)?parseJsonValue(authorizationPendingAsJsonObject({connections:e.challenges.map(e=>e.name)})):isAuthorizationPendingModelOutput(e)?parseJsonValue(authorizationPendingAsJsonObject(e)):parseJsonValue(e===void 0?null:e)}function createRuntimeToolResultFromValue(e){let t={callId:e.callId,kind:`tool-result`,output:toolResultOutputToJsonValue({output:{type:e.isError===!0?`error-json`:`json`,value:e.isError===!0&&e.output instanceof Error?e.output.message:e.output},toolCallId:e.callId,toolName:e.toolName}),toolName:e.toolName};return e.isError===!0?{...t,isError:!0}:t}function createRuntimeToolResultFromStepResult(e){return createRuntimeToolResultFromValue({callId:e.toolCallId,output:e.output,toolName:e.toolName})}function createRuntimeToolResultFromToolError(e){return createRuntimeToolResultFromValue({callId:e.toolCallId,isError:!0,output:toError(e.error),toolName:e.toolName})}function createToolResultMessagePartFromToolError(e){return{type:`tool-result`,toolCallId:e.toolCallId,toolName:e.toolName,output:{type:`error-text`,value:toError(e.error).message}}}function createRuntimeToolResultFromMessagePart(e){return createRuntimeToolResultFromValue({callId:e.toolCallId,output:toolResultOutputToJsonValue({output:e.output,toolCallId:e.toolCallId,toolName:e.toolName}),toolName:e.toolName,isError:isToolResultError(e.output)})}function toolResultOutputToJsonValue(e){return withToolOutputSerializationError({boundary:`action.result`,toolCallId:e.toolCallId,toolName:e.toolName},()=>{switch(e.output.type){case`text`:case`error-text`:return e.output.value;case`json`:case`error-json`:return toJsonValue(e.output.value);case`execution-denied`:return{code:`TOOL_EXECUTION_DENIED`,message:e.output.reason??`Tool execution was denied.`};case`content`:return toJsonValue(e.output.value)}})}function isToolResultError(e){return e.type===`error-json`||e.type===`error-text`||e.type===`execution-denied`}export{createRuntimeToolResultFromMessagePart,createRuntimeToolResultFromStepResult,createRuntimeToolResultFromToolError,createRuntimeToolResultFromValue,createToolResultMessagePartFromToolError,isToolResultError};
1
+ import{skillTarget}from"#shared/action-request-name.js";import{toError}from"#shared/errors.js";import{SKILL_ENTRY_NAME}from"#protocol/catalog-tools.js";import{parseJsonValue}from"#shared/json.js";import{authorizationPendingAsJsonObject,isAuthorizationPendingModelOutput,isAuthorizationSignal}from"#harness/authorization.js";import{withToolOutputSerializationError}from"#harness/tool-output-serialization.js";function toJsonValue(e){return isAuthorizationSignal(e)?parseJsonValue(authorizationPendingAsJsonObject({connections:e.challenges.map(e=>e.name)})):isAuthorizationPendingModelOutput(e)?parseJsonValue(authorizationPendingAsJsonObject(e)):parseJsonValue(e===void 0?null:e)}function createRuntimeToolResultFromValue(e){let t={callId:e.callId,kind:`tool-result`,output:toolResultOutputToJsonValue({output:{type:e.isError===!0?`error-json`:`json`,value:e.isError===!0&&e.output instanceof Error?e.output.message:e.output},toolCallId:e.callId,toolName:e.toolName}),toolName:e.toolName};return e.isError===!0?{...t,isError:!0}:t}function createRuntimeToolResultFromStepResult(e){return createRuntimeToolResultFromValue({callId:e.toolCallId,output:e.output,toolName:e.toolName})}function createRuntimeToolResultFromToolError(e){return createRuntimeToolResultFromValue({callId:e.toolCallId,isError:!0,output:toError(e.error),toolName:e.toolName})}function toActionResult(e,t){let n=e.toolName===SKILL_ENTRY_NAME?skillTarget(t):void 0;return n===void 0?e:{callId:e.callId,isError:e.isError,kind:`load-skill-result`,name:n,output:e.output}}function createToolResultMessagePartFromToolError(e){return{type:`tool-result`,toolCallId:e.toolCallId,toolName:e.toolName,output:{type:`error-text`,value:toError(e.error).message}}}function createRuntimeToolResultFromMessagePart(e,t){return createRuntimeToolResultFromValue({callId:e.toolCallId,output:toolResultOutputToJsonValue({output:e.output,toolCallId:e.toolCallId,toolName:t}),toolName:t,isError:isToolResultError(e.output)})}function toolResultOutputToJsonValue(e){return withToolOutputSerializationError({boundary:`action.result`,toolCallId:e.toolCallId,toolName:e.toolName},()=>{switch(e.output.type){case`text`:case`error-text`:return e.output.value;case`json`:case`error-json`:return toJsonValue(e.output.value);case`execution-denied`:return{code:`TOOL_EXECUTION_DENIED`,message:e.output.reason??`Tool execution was denied.`};case`content`:return toJsonValue(e.output.value)}})}function isToolResultError(e){return e.type===`error-json`||e.type===`error-text`||e.type===`execution-denied`}export{createRuntimeToolResultFromMessagePart,createRuntimeToolResultFromStepResult,createRuntimeToolResultFromToolError,createRuntimeToolResultFromValue,createToolResultMessagePartFromToolError,isToolResultError,toActionResult};
@@ -1,4 +1,3 @@
1
- import type { ContextContainer } from "#context/container.js";
2
1
  /**
3
2
  * Framework state announced to the model as an append-only `context.state`
4
3
  * message. The harness appends a message only when `value` differs from the
@@ -11,12 +10,7 @@ export interface Announcement {
11
10
  readonly value: string;
12
11
  /**
13
12
  * Renders the message for `value`. `previous` is the last announced value,
14
- * or `undefined` for a baseline. Returning `undefined` records the value
15
- * without adding a message.
13
+ * or `undefined` for a baseline.
16
14
  */
17
- render(previous: string | undefined): string | undefined;
15
+ render(previous: string | undefined): string;
18
16
  }
19
- /** Sets or clears the announcement `key` for the current step. */
20
- export declare function setPendingAnnouncement(ctx: ContextContainer, key: string, announcement: Announcement | undefined): void;
21
- /** The announcements set for the current step. */
22
- export declare function getPendingAnnouncements(ctx: Pick<ContextContainer, "get"> | undefined): Readonly<Record<string, Announcement>>;
@@ -1 +1 @@
1
- import{ContextKey}from"#context/key.js";const PendingAnnouncementsKey=new ContextKey(`eve.pendingAnnouncements`);function setPendingAnnouncement(e,t,n){let{[t]:r,...i}=e.get(PendingAnnouncementsKey)??{};e.setVirtualContext(PendingAnnouncementsKey,n===void 0?i:{...i,[t]:n})}function getPendingAnnouncements(e){return e?.get(PendingAnnouncementsKey)??{}}export{getPendingAnnouncements,setPendingAnnouncement};
1
+ export{};
@@ -1,6 +1,5 @@
1
- import { generateText, type LanguageModel, type ModelMessage, type TelemetryOptions } from "ai";
2
- import type { RuntimeModelReference } from "#runtime/agent/bootstrap.js";
3
- import type { CompactionConfig, ToolLoopHarnessConfig } from "#harness/types.js";
1
+ import type { ModelMessage } from "ai";
2
+ import type { CompactionConfig } from "#harness/types.js";
4
3
  /**
5
4
  * Best available input-token count: the model-reported count from the last
6
5
  * step, plus a rough character-based estimate of whatever messages have been
@@ -12,25 +11,15 @@ export declare function getInputTokenCount(messages: readonly ModelMessage[], co
12
11
  * exceed the compaction threshold.
13
12
  */
14
13
  export declare function shouldCompact(messages: readonly ModelMessage[], config: CompactionConfig, requestEnvelopeTokens?: number, previousEnvelopeTokens?: number): boolean;
15
- /**
16
- * Resolves the model used to summarize older context during compaction.
17
- *
18
- * Reuses the active turn model when compaction should summarize with the same
19
- * reference, and resolves the authored compaction model only when configured.
20
- */
21
- export declare function resolveCompactionModel(input: {
22
- readonly compactionModelReference?: RuntimeModelReference;
23
- readonly model: LanguageModel;
24
- readonly modelReference: RuntimeModelReference;
25
- readonly resolveModel: ToolLoopHarnessConfig["resolveModel"];
26
- }): Promise<{
27
- readonly model: LanguageModel;
28
- readonly providerOptions: Parameters<typeof generateText>[0]["providerOptions"];
29
- }>;
14
+ /** Summarizes one compaction prompt with the compaction model, returning the summary text. */
15
+ export type CompactionSummarizer = (prompt: {
16
+ readonly messages: ModelMessage[];
17
+ readonly system: string;
18
+ }) => Promise<string>;
30
19
  /**
31
20
  * Compacts messages by escalation: try each {@link CompactionHeuristic} in
32
21
  * order, then fall back to summarizing the older region with the compaction
33
22
  * model — keeping the recent tail verbatim when it fits, degrading it to
34
23
  * text-only, then shrinking the window.
35
24
  */
36
- export declare function compactMessages(messages: ModelMessage[], model: LanguageModel, config: CompactionConfig, providerOptions?: Parameters<typeof generateText>[0]["providerOptions"], telemetry?: TelemetryOptions, headers?: Record<string, string>, abortSignal?: AbortSignal, forceSummary?: boolean, historyInputTokenCount?: number): Promise<ModelMessage[]>;
25
+ export declare function compactMessages(messages: ModelMessage[], config: CompactionConfig, summarize: CompactionSummarizer, forceSummary?: boolean, historyInputTokenCount?: number): Promise<ModelMessage[]>;
@@ -1 +1 @@
1
- import{generateText}from"ai";import{createFrameworkUserMessage,isFrameworkUserMessage}from"#harness/messages.js";import{COMPACTION_CHECKPOINT_MARKER,COMPACTION_PROMPT_ENVELOPE,COMPACTION_RESUMPTION_MESSAGE,TRANSCRIPT_PAYLOAD_LIMIT,createCompactionPrompt,sliceUtf16Safe,stubContentOutputFileParts}from"#harness/compaction/prompt.js";import{estimateTokens}from"#harness/token-estimate.js";const COMPACTION_PROMPT_OVERHEAD_TOKENS=estimateTokens([{content:COMPACTION_PROMPT_ENVELOPE.system,role:`system`},createFrameworkUserMessage(`context.compaction`,COMPACTION_PROMPT_ENVELOPE.prompt)]);function getInputTokenCount(e,t,n=0,r=0){let i=t.lastKnownInputTokens,a=t.lastKnownPromptMessageCount;return i===void 0||a===void 0||!Number.isInteger(a)||a<0||a>e.length?estimateTokens(e)+n:i+estimateTokens(e.slice(a))+Math.max(0,n-r)}function shouldCompact(e,t,n=0,r=0){return e.length>0&&getInputTokenCount(e,t,n,r)+COMPACTION_PROMPT_OVERHEAD_TOKENS>t.threshold}async function resolveCompactionModel(e){let t=e.compactionModelReference??e.modelReference;return{model:t===e.modelReference?e.model:await e.resolveModel(t),providerOptions:t.providerOptions}}const COMPACTION_HEURISTICS=[toolResultCapHeuristic];function toolResultCapHeuristic(e){let t=withResumptionGuard([...e.previousCheckpoint===void 0?[]:[createFrameworkUserMessage(`context.compaction`,COMPACTION_CHECKPOINT_MARKER),{content:e.previousCheckpoint,role:`assistant`}],...capToolResults(e.older),...e.recent],e.conversation,e.config.threshold);return evaluateThreshold(t,e.config,`should-compact`,e.tokenEstimateAdjustment).type===`within-limit`?{messages:t,type:`within-limit`}:{type:`insufficient`}}function evaluateThreshold(e,t,n,r=0){let i=n===`should-compact`?COMPACTION_PROMPT_OVERHEAD_TOKENS:0,a=estimateTokens(e)+i+r;return{estimatedTokens:a,type:a<=t.threshold?`within-limit`:`over-limit`}}async function compactMessages(e,t,n,r,i,a,o,s=!1,c){let{conversation:l,previousCheckpoint:u}=extractPreviousCheckpoint(e),d=selectRecentWindowSize(l,s?{...n,recentWindowSize:1}:n);if(!s){let{older:t,recent:r}=splitMessagesForCompaction(l,d);if(t.length===0&&u===void 0)return keepNonToolResultMessages(r);let i=Math.max(0,(c??getInputTokenCount(e,n))-estimateTokens(e));for(let e of COMPACTION_HEURISTICS){let a=e({config:n,conversation:l,older:t,previousCheckpoint:u,recent:r,tokenEstimateAdjustment:i});if(a.type===`within-limit`)return a.messages}}for(;;){let{older:e,recent:s}=splitMessagesForCompaction(l,d),c=createCompactionPrompt({messages:e,previousCheckpoint:u,transcriptBudgetTokens:n.threshold}),f=await generateText({abortSignal:o,headers:a,messages:[createFrameworkUserMessage(`context.compaction`,c.prompt)],model:t,providerOptions:r,system:c.system,telemetry:i?{...i,functionId:`eve.compaction`}:void 0});if(f.text.trim().length===0)throw Error(`The compaction model returned an empty summary. Finish reason: ${f.finishReason}.`);let p=[createFrameworkUserMessage(`context.compaction`,COMPACTION_CHECKPOINT_MARKER),{content:f.text,role:`assistant`}],m=withResumptionGuard([...p,...s],l,n.threshold);if(evaluateThreshold(m,n,`estimate`).type===`within-limit`)return m;let h=withResumptionGuard([...p,...keepNonToolResultMessages(s)],l,n.threshold);if(evaluateThreshold(h,n,`estimate`).type===`within-limit`||d===0)return h;--d}}function capToolResults(e){return e.map(e=>{if(e.role!==`tool`||typeof e.content==`string`)return e;let t=!1,n=e.content.map(e=>{if(e.type!==`tool-result`)return e;let n=stubContentOutputFileParts(e.output),r=JSON.stringify(n)??``;return r.length<=TRANSCRIPT_PAYLOAD_LIMIT?n===e.output?e:(t=!0,{...e,output:n}):(t=!0,{...e,output:{type:`text`,value:`[Truncated by eve: tool result reduced during context compaction. Re-run the tool if you need the full output.]\n\n${sliceUtf16Safe(r,TRANSCRIPT_PAYLOAD_LIMIT)}`}})});return t?{...e,content:n}:e})}function withResumptionGuard(e,t,n){let r=e.at(-1)?.role,i=findLastRealUserMessage(t),a=i!==void 0&&e.some(e=>e.role===`user`&&e.content===i.content);return r!==void 0&&r!==`assistant`?r===`tool`&&i!==void 0&&!a&&estimateTokens([i])<=n?[...e,i]:e:[...e,i!==void 0&&!a?i:createFrameworkUserMessage(`execution.continuation`,COMPACTION_RESUMPTION_MESSAGE)]}function findLastRealUserMessage(e){for(let t=e.length-1;t>=0;--t){let n=e[t];if(n?.role===`user`&&typeof n.content==`string`&&!isFrameworkUserMessage(n))return n}}function extractPreviousCheckpoint(e){let t=e[0],n=e[1];return t?.role!==`user`||t.content!==COMPACTION_CHECKPOINT_MARKER||n?.role!==`assistant`?{conversation:[...e],previousCheckpoint:void 0}:{conversation:e.slice(2),previousCheckpoint:assistantMessageText(n)}}function keepNonToolResultMessages(e){let t=[];for(let n of e)if(n.role!==`tool`){if(n.role===`assistant`){let e=assistantMessageText(n);e.length>0&&t.push({content:e,role:`assistant`});continue}t.push(n)}return t}function assistantMessageText(e){return typeof e.content==`string`?e.content.trim():e.content.filter(e=>e.type===`text`).map(e=>e.text).join(``).trim()}function selectRecentWindowSize(e,t){let n=Math.min(t.recentWindowSize,Math.max(e.length-1,0)),r=resolveCompactionSummaryReserve(t),i=0,a=0;for(let o=e.length-1;o>=0&&i<n;--o){let n=e[o];if(n===void 0)continue;let s=estimateTokens([n]);if(a+s+r>t.threshold)break;a+=s,i+=1}return i}function resolveCompactionSummaryReserve(e){return Math.min(2048,Math.max(64,Math.floor(e.threshold/4)))}function splitMessagesForCompaction(e,t){if(t<=0)return{older:[...e],recent:[]};let n=e.length-t;for(;n<e.length&&e[n]?.role===`tool`;)n+=1;return{older:e.slice(0,n),recent:e.slice(n)}}export{compactMessages,getInputTokenCount,resolveCompactionModel,shouldCompact};
1
+ import{createFrameworkUserMessage,isFrameworkUserMessage}from"#harness/messages.js";import{COMPACTION_CHECKPOINT_MARKER,COMPACTION_PROMPT_ENVELOPE,COMPACTION_RESUMPTION_MESSAGE,TRANSCRIPT_PAYLOAD_LIMIT,createCompactionPrompt,sliceUtf16Safe,stubContentOutputFileParts}from"#harness/compaction/prompt.js";import{estimateTokens}from"#harness/token-estimate.js";const COMPACTION_PROMPT_OVERHEAD_TOKENS=estimateTokens([{content:COMPACTION_PROMPT_ENVELOPE.system,role:`system`},createFrameworkUserMessage(`context.compaction`,COMPACTION_PROMPT_ENVELOPE.prompt)]);function getInputTokenCount(e,t,n=0,r=0){let i=t.lastKnownInputTokens,a=t.lastKnownPromptMessageCount;return i===void 0||a===void 0||!Number.isInteger(a)||a<0||a>e.length?estimateTokens(e)+n:i+estimateTokens(e.slice(a))+Math.max(0,n-r)}function shouldCompact(e,t,n=0,r=0){return e.length>0&&getInputTokenCount(e,t,n,r)+COMPACTION_PROMPT_OVERHEAD_TOKENS>t.threshold}const COMPACTION_HEURISTICS=[toolResultCapHeuristic];function toolResultCapHeuristic(e){let t=withResumptionGuard([...e.previousCheckpoint===void 0?[]:[createFrameworkUserMessage(`context.compaction`,COMPACTION_CHECKPOINT_MARKER),{content:e.previousCheckpoint,role:`assistant`}],...capToolResults(e.older),...e.recent],e.conversation,e.config.threshold);return evaluateThreshold(t,e.config,`should-compact`,e.tokenEstimateAdjustment).type===`within-limit`?{messages:t,type:`within-limit`}:{type:`insufficient`}}function evaluateThreshold(e,t,n,r=0){let i=n===`should-compact`?COMPACTION_PROMPT_OVERHEAD_TOKENS:0,a=estimateTokens(e)+i+r;return{estimatedTokens:a,type:a<=t.threshold?`within-limit`:`over-limit`}}async function compactMessages(e,t,n,r=!1,i){let{conversation:a,previousCheckpoint:o}=extractPreviousCheckpoint(e),s=selectRecentWindowSize(a,r?{...t,recentWindowSize:1}:t);if(!r){let{older:n,recent:r}=splitMessagesForCompaction(a,s);if(n.length===0&&o===void 0)return keepNonToolResultMessages(r);let c=Math.max(0,(i??getInputTokenCount(e,t))-estimateTokens(e));for(let e of COMPACTION_HEURISTICS){let i=e({config:t,conversation:a,older:n,previousCheckpoint:o,recent:r,tokenEstimateAdjustment:c});if(i.type===`within-limit`)return i.messages}}for(;;){let{older:e,recent:r}=splitMessagesForCompaction(a,s),i=createCompactionPrompt({messages:e,previousCheckpoint:o,transcriptBudgetTokens:t.threshold}),c=await n({messages:[createFrameworkUserMessage(`context.compaction`,i.prompt)],system:i.system}),l=[createFrameworkUserMessage(`context.compaction`,COMPACTION_CHECKPOINT_MARKER),{content:c,role:`assistant`}],u=withResumptionGuard([...l,...r],a,t.threshold);if(evaluateThreshold(u,t,`estimate`).type===`within-limit`)return u;let d=withResumptionGuard([...l,...keepNonToolResultMessages(r)],a,t.threshold);if(evaluateThreshold(d,t,`estimate`).type===`within-limit`||s===0)return d;--s}}function capToolResults(e){return e.map(e=>{if(e.role!==`tool`||typeof e.content==`string`)return e;let t=!1,n=e.content.map(e=>{if(e.type!==`tool-result`)return e;let n=stubContentOutputFileParts(e.output),r=JSON.stringify(n)??``;return r.length<=TRANSCRIPT_PAYLOAD_LIMIT?n===e.output?e:(t=!0,{...e,output:n}):(t=!0,{...e,output:{type:`text`,value:`[Truncated by eve: tool result reduced during context compaction. Re-run the tool if you need the full output.]\n\n${sliceUtf16Safe(r,TRANSCRIPT_PAYLOAD_LIMIT)}`}})});return t?{...e,content:n}:e})}function withResumptionGuard(e,t,n){let r=e.at(-1)?.role,i=findLastRealUserMessage(t),a=i!==void 0&&e.some(e=>e.role===`user`&&e.content===i.content);return r!==void 0&&r!==`assistant`?r===`tool`&&i!==void 0&&!a&&estimateTokens([i])<=n?[...e,i]:e:[...e,i!==void 0&&!a?i:createFrameworkUserMessage(`execution.continuation`,COMPACTION_RESUMPTION_MESSAGE)]}function findLastRealUserMessage(e){for(let t=e.length-1;t>=0;--t){let n=e[t];if(n?.role===`user`&&typeof n.content==`string`&&!isFrameworkUserMessage(n))return n}}function extractPreviousCheckpoint(e){let t=e[0],n=e[1];return t?.role!==`user`||t.content!==COMPACTION_CHECKPOINT_MARKER||n?.role!==`assistant`?{conversation:[...e],previousCheckpoint:void 0}:{conversation:e.slice(2),previousCheckpoint:assistantMessageText(n)}}function keepNonToolResultMessages(e){let t=[];for(let n of e)if(n.role!==`tool`){if(n.role===`assistant`){let e=assistantMessageText(n);e.length>0&&t.push({content:e,role:`assistant`});continue}t.push(n)}return t}function assistantMessageText(e){return typeof e.content==`string`?e.content.trim():e.content.filter(e=>e.type===`text`).map(e=>e.text).join(``).trim()}function selectRecentWindowSize(e,t){let n=Math.min(t.recentWindowSize,Math.max(e.length-1,0)),r=resolveCompactionSummaryReserve(t),i=0,a=0;for(let o=e.length-1;o>=0&&i<n;--o){let n=e[o];if(n===void 0)continue;let s=estimateTokens([n]);if(a+s+r>t.threshold)break;a+=s,i+=1}return i}function resolveCompactionSummaryReserve(e){return Math.min(2048,Math.max(64,Math.floor(e.threshold/4)))}function splitMessagesForCompaction(e,t){if(t<=0)return{older:[...e],recent:[]};let n=e.length-t;for(;n<e.length&&e[n]?.role===`tool`;)n+=1;return{older:e.slice(0,n),recent:e.slice(n)}}export{compactMessages,getInputTokenCount,shouldCompact};
@@ -1,4 +1,4 @@
1
- import type { LanguageModel, TelemetryOptions } from "ai";
1
+ import { type LanguageModel, type TelemetryOptions } from "ai";
2
2
  import { type HarnessSession, type StepResult, type ToolLoopHarnessConfig } from "#harness/types.js";
3
3
  import { type HarnessModelMessage } from "#harness/messages.js";
4
4
  import type { HistoryViewProjector } from "#shared/history-view.js";
@@ -26,6 +26,8 @@ export declare function replaceSessionHistory(session: HarnessSession, history:
26
26
  export declare function maybeCompact(input: {
27
27
  readonly abortSignal?: AbortSignal;
28
28
  readonly auth: SessionAuthContext | null;
29
+ /** A manual compaction runs between turns, so no turn's usage reports its summary calls. */
30
+ readonly betweenTurns?: boolean;
29
31
  readonly emissionState: TurnPosition;
30
32
  readonly force?: boolean;
31
33
  readonly historyProjector?: HistoryViewProjector;
@@ -41,6 +43,10 @@ export declare function maybeCompact(input: {
41
43
  readonly telemetry?: TelemetryOptions;
42
44
  }): Promise<{
43
45
  readonly compacted: boolean;
46
+ /** The summary failed; `session` still counts the summary calls that finished. */
47
+ readonly failure?: {
48
+ readonly error: unknown;
49
+ };
44
50
  readonly messages: HarnessModelMessage[];
45
51
  readonly session: HarnessSession;
46
52
  }>;
@@ -1 +1 @@
1
- import{createLogger,logError}from"#internal/logging.js";import{contextStorage}from"#context/container.js";import{AuthKey,HistoryStateKey}from"#context/keys.js";import{createCompactionCompletedEvent,createCompactionRequestedEvent}from"#protocol/message.js";import{validateHarnessModelMessages}from"#harness/messages.js";import{drainMemoryCommit,prepareMemoryCompaction}from"#context/memory-lifecycle.js";import{canonicalizeMemoryRecords,shouldCanonicalizeMemory}from"#shared/memory-state.js";import{activeTurnId}from"#harness/session-machine/view.js";import{resolveConversationId}from"#shared/conversation-identity.js";import{idle}from"#harness/session-machine/transitions.js";import{stepStartedForResolvers}from"#harness/session-machine/resolver-events.js";import{requireSessionModelReference}from"#harness/types.js";import{buildGatewayAttributionHeaders,resolveEffectiveRuntimeModel}from"#harness/model-call/model.js";import{compactMessages,getInputTokenCount,resolveCompactionModel,shouldCompact}from"#harness/compaction/engine.js";import{gatewayModelId}from"#harness/model-call/usage.js";import{getRequestEnvelopeTokens}from"#harness/request-envelope.js";import{resolveCallProviderOptions}from"#harness/provider-safety.js";const log=createLogger(`harness.tool-loop`);async function compactHistory(e){let{config:t}=e;if(e.session.history.length>0)try{if(e.ctx!==void 0&&t.dispatchDynamicModelEvent!==void 0){let n=e.position();await t.dispatchDynamicModelEvent({ctx:e.ctx,event:stepStartedForResolvers({modelId:e.session.agent.modelReference?.id??`dynamic`,sequence:n.sequence,stepIndex:n.stepIndex,turnId:activeTurnId(n)}),messages:validateHarnessModelMessages(e.projectHistory(e.session.history))})}let n=await resolveEffectiveRuntimeModel({config:t,ctx:e.ctx,session:e.session});e.session=n.session;let r=e.position();e.session=(await maybeCompact({abortSignal:t.abortSignal,auth:e.ctx?.get(AuthKey)??null,emissionState:{...r,turnId:activeTurnId(r)},force:!0,historyProjector:t.historyProjector,messages:[...e.session.history],model:n.model,publish:e.publish,requestEnvelopeTokens:getRequestEnvelopeTokens(e.session),resolveModel:t.resolveModel,runtimeIdentity:t.runtimeIdentity,session:e.session,telemetry:e.instrumentation?.telemetry()})).session}catch(t){logError(log,`manual session compaction failed`,t,{sessionId:e.session.sessionId})}return await e.apply(idle(e.view())),{next:null,session:e.session}}function replaceSessionHistory(e,t){return contextStorage.getStore()?.delete(HistoryStateKey),{...e,history:t,compaction:{recentWindowSize:e.compaction.recentWindowSize,threshold:e.compaction.threshold,thresholdPercent:e.compaction.thresholdPercent}}}async function maybeCompact(e){let{emissionState:t,publish:n}=e,r=e.messages,i=e.session,a=e.promptMessages??r,o=validateHarnessModelMessages(e.historyProjector?.({messages:a,state:i.state})??a),s=e.force===!0||shouldCompact(o,i.compaction,e.requestEnvelopeTokens,getRequestEnvelopeTokens(i)),c=shouldCanonicalizeMemory(r);if(!s&&!c)return{compacted:!1,messages:r,session:i};let l=await resolveCompactionModel({compactionModelReference:i.agent.compactionModelReference,model:e.model,modelReference:requireSessionModelReference(i),resolveModel:e.resolveModel}),u=i.agent.compactionModelReference??requireSessionModelReference(i),d=resolveCallProviderOptions({auth:e.auth,conversationId:resolveConversationId(i.rootSessionId??i.sessionId),model:l.model,modelReference:u,providerOptions:l.providerOptions});{let a=contextStorage.getStore();a!==void 0&&prepareMemoryCompaction(a,{history:r,state:i.state}),await n(createCompactionRequestedEvent({modelId:gatewayModelId(l.model)??`unknown`,sequence:t.sequence,sessionId:i.sessionId,stepIndex:t.stepIndex,turnId:t.turnId,usageInputTokens:getInputTokenCount(o,i.compaction,e.requestEnvelopeTokens,getRequestEnvelopeTokens(i))}),o)}let f=canonicalizeMemoryRecords(r),p=validateHarnessModelMessages(e.historyProjector?.({messages:f.ordinary,state:i.state})??f.ordinary),m=e.requestEnvelopeTokens??0,h={...i.compaction,threshold:Math.max(1,i.compaction.threshold-m),lastKnownInputTokens:i.compaction.lastKnownInputTokens===void 0?void 0:Math.max(0,i.compaction.lastKnownInputTokens-Math.min(getRequestEnvelopeTokens(i)??0,m))},g=s?await compactMessages([...p],l.model,h,d,e.telemetry,buildGatewayAttributionHeaders(l.model,e.runtimeIdentity),e.abortSignal,e.force===!0,e.requestEnvelopeTokens===void 0?void 0:Math.max(0,getInputTokenCount(o,i.compaction,m,getRequestEnvelopeTokens(i))-m)):[...p];r=validateHarnessModelMessages([...f.memory,...g]);{let a=contextStorage.getStore();if(a!==void 0&&prepareMemoryCompaction(a,{history:r,state:i.state}),await n(createCompactionCompletedEvent({modelId:gatewayModelId(l.model)??`unknown`,sequence:t.sequence,sessionId:i.sessionId,stepIndex:t.stepIndex,turnId:t.turnId}),e.historyProjector?.({messages:r,state:i.state})??r),a!==void 0){let e=drainMemoryCommit(a);e!==void 0&&(r=validateHarnessModelMessages([...r,...e.recalledMessages]),i={...i,state:e.state})}}return{compacted:!0,messages:r,session:replaceSessionHistory(i,r)}}export{compactHistory,maybeCompact,replaceSessionHistory};
1
+ import{streamText}from"ai";import{createLogger,logError}from"#internal/logging.js";import{contextStorage}from"#context/container.js";import{AuthKey,HistoryStateKey}from"#context/keys.js";import{createCompactionCompletedEvent,createCompactionRequestedEvent}from"#protocol/message.js";import{validateHarnessModelMessages}from"#harness/messages.js";import{drainMemoryCommit,prepareMemoryCompaction}from"#context/memory-lifecycle.js";import{canonicalizeMemoryRecords,shouldCanonicalizeMemory}from"#shared/memory-state.js";import{activeTurnId}from"#harness/session-machine/view.js";import{resolveConversationId}from"#shared/conversation-identity.js";import{addTurnUsage,addUsageOutsideTurns}from"#harness/turn-tag-state.js";import{idle}from"#harness/session-machine/transitions.js";import{stepStartedForResolvers}from"#harness/session-machine/resolver-events.js";import{requireSessionModelReference}from"#harness/types.js";import{buildGatewayAttributionHeaders,resolveEffectiveRuntimeModel}from"#harness/model-call/model.js";import{compactMessages,getInputTokenCount,shouldCompact}from"#harness/compaction/engine.js";import{normalizeModelStreamError}from"#harness/model-call/errors.js";import{runModelCallWithRetries}from"#harness/model-call/retry.js";import{extractGatewayCostUsd,extractTokenUsageDelta,gatewayModelId}from"#harness/model-call/usage.js";import{resolveModelProfile}from"#harness/model-profile.js";import{getRequestEnvelopeTokens}from"#harness/request-envelope.js";import{resolveCallProviderOptions}from"#harness/provider-safety.js";const log=createLogger(`harness.tool-loop`);async function compactHistory(e){let{config:t}=e;if(e.session.history.length>0)try{if(e.ctx!==void 0&&t.dispatchDynamicModelEvent!==void 0){let n=e.position();await t.dispatchDynamicModelEvent({ctx:e.ctx,event:stepStartedForResolvers({modelId:e.session.agent.modelReference?.id??`dynamic`,sequence:n.sequence,stepIndex:n.stepIndex,turnId:activeTurnId(n)}),messages:validateHarnessModelMessages(e.projectHistory(e.session.history))})}let n=await resolveEffectiveRuntimeModel({config:t,ctx:e.ctx,session:e.session});e.session=n.session;let r=e.position(),i=await maybeCompact({abortSignal:t.abortSignal,auth:e.ctx?.get(AuthKey)??null,betweenTurns:!0,emissionState:{...r,turnId:activeTurnId(r)},force:!0,historyProjector:t.historyProjector,messages:[...e.session.history],model:n.model,publish:e.publish,requestEnvelopeTokens:getRequestEnvelopeTokens(e.session),resolveModel:t.resolveModel,runtimeIdentity:t.runtimeIdentity,session:e.session,telemetry:e.instrumentation?.telemetry()});if(e.session=i.session,i.failure!==void 0)throw i.failure.error}catch(t){logError(log,`manual session compaction failed`,t,{sessionId:e.session.sessionId})}return await e.apply(idle(e.view())),{next:null,session:e.session}}function replaceSessionHistory(e,t){return contextStorage.getStore()?.delete(HistoryStateKey),{...e,history:t,compaction:{recentWindowSize:e.compaction.recentWindowSize,threshold:e.compaction.threshold,thresholdPercent:e.compaction.thresholdPercent}}}async function maybeCompact(e){let{emissionState:t,publish:n}=e,r=e.messages,i=e.session,a=e.promptMessages??r,o=validateHarnessModelMessages(e.historyProjector?.({messages:a,state:i.state})??a),s=e.force===!0||shouldCompact(o,i.compaction,e.requestEnvelopeTokens,getRequestEnvelopeTokens(i)),c=shouldCanonicalizeMemory(r);if(!s&&!c)return{compacted:!1,messages:r,session:i};let l=requireSessionModelReference(i),u=i.agent.compactionModelReference??l,d=u===l?e.model:await e.resolveModel(u),f=resolveModelProfile(d),p=resolveCallProviderOptions({auth:e.auth,conversationId:resolveConversationId(i.rootSessionId??i.sessionId),profile:f,providerOptions:u.providerOptions}),m={abortSignal:e.abortSignal,headers:buildGatewayAttributionHeaders(f,e.runtimeIdentity),model:d,providerOptions:p,telemetry:e.telemetry&&{...e.telemetry,functionId:`eve.compaction`}},h=[],summarize=async n=>{let r=await runModelCallWithRetries(()=>streamCompactionSummary({...m,...n}),{sessionId:i.sessionId,turnId:t.turnId},e.abortSignal);if(h.push(r.usage),r.text.trim().length===0)throw Error(`The compaction model returned an empty summary. Finish reason: ${r.finishReason}.`);return r.text};{let a=contextStorage.getStore();a!==void 0&&prepareMemoryCompaction(a,{history:r,state:i.state}),await n(createCompactionRequestedEvent({modelId:gatewayModelId(d)??`unknown`,sequence:t.sequence,sessionId:i.sessionId,stepIndex:t.stepIndex,turnId:t.turnId,usageInputTokens:getInputTokenCount(o,i.compaction,e.requestEnvelopeTokens,getRequestEnvelopeTokens(i))}),o)}let g=canonicalizeMemoryRecords(r),_=validateHarnessModelMessages(e.historyProjector?.({messages:g.ordinary,state:i.state})??g.ordinary),v=e.requestEnvelopeTokens??0,y={...i.compaction,threshold:Math.max(1,i.compaction.threshold-v),lastKnownInputTokens:i.compaction.lastKnownInputTokens===void 0?void 0:Math.max(0,i.compaction.lastKnownInputTokens-Math.min(getRequestEnvelopeTokens(i)??0,v))},b=[..._],x;try{s&&(b=await compactMessages([..._],y,summarize,e.force===!0,e.requestEnvelopeTokens===void 0?void 0:Math.max(0,getInputTokenCount(o,i.compaction,v,getRequestEnvelopeTokens(i))-v)))}catch(e){x={error:e}}for(let n of h)i=e.betweenTurns===!0?addUsageOutsideTurns(i,n):addTurnUsage(i,t.turnId,n);if(x!==void 0)return{compacted:!1,failure:x,messages:e.messages,session:i};r=validateHarnessModelMessages([...g.memory,...b]);{let a=contextStorage.getStore();if(a!==void 0&&prepareMemoryCompaction(a,{history:r,state:i.state}),await n(createCompactionCompletedEvent({modelId:gatewayModelId(d)??`unknown`,sequence:t.sequence,sessionId:i.sessionId,stepIndex:t.stepIndex,turnId:t.turnId}),e.historyProjector?.({messages:r,state:i.state})??r),a!==void 0){let e=drainMemoryCommit(a);e!==void 0&&(r=validateHarnessModelMessages([...r,...e.recalledMessages]),i={...i,state:e.state})}}return{compacted:!0,messages:r,session:replaceSessionHistory(i,r)}}async function streamCompactionSummary(e){let t=streamText({...e,onError:()=>{}});for await(let e of t.fullStream)if(e.type===`error`)throw normalizeModelStreamError(e.error);let[n,r,i,a]=await Promise.all([t.text,t.finishReason,t.usage,t.providerMetadata]);return{finishReason:r,text:n,usage:extractTokenUsageDelta({costUsd:extractGatewayCostUsd(a),usage:i})}}export{compactHistory,maybeCompact,replaceSessionHistory};
@@ -1,7 +1,7 @@
1
1
  import type { ModelMessage } from "ai";
2
2
  import type { RuntimeActionRequest, RuntimeActionResult, RuntimeWorkflowTaskRequest, WorkflowToolCallEntry } from "#shared/action-types.js";
3
3
  import { type JsonObject } from "#shared/json.js";
4
- import type { HarnessSession, HarnessToolMap } from "#harness/types.js";
4
+ import type { HarnessSession, HarnessToolLookup } from "#harness/types.js";
5
5
  type ToolResponsePart = Extract<ModelMessage, {
6
6
  role: "tool";
7
7
  }>["content"][number];
@@ -21,19 +21,19 @@ export declare function forgetFinishedRuns(session: HarnessSession, results: rea
21
21
  readonly session: HarnessSession;
22
22
  };
23
23
  /** Each runtime result as the model reads it, beside the result the stream reports. */
24
- export declare function runtimeResultCalls(results: readonly RuntimeActionResult[], tools: HarnessToolMap | undefined): Promise<{
24
+ export declare function runtimeResultCalls(results: readonly RuntimeActionResult[], tools: HarnessToolLookup | undefined): Promise<{
25
25
  readonly part: ToolResultPart;
26
26
  readonly result: RuntimeActionResult;
27
27
  }[]>;
28
28
  /**
29
- * Turns a step's deferred calls into workflow runs, committing a task record
30
- * for each call that starts a task. Task tool calls stay in the response
31
- * alone: the session reads them from there.
29
+ * Turns a step's workflow tool calls into workflow runs, committing a task
30
+ * record for each call that starts a task. Task tool calls stay in the
31
+ * response alone: the session reads them from there.
32
32
  */
33
- export declare function collectDeferredCalls(input: {
33
+ export declare function collectWorkflowCalls(input: {
34
34
  readonly session: HarnessSession;
35
35
  readonly toolCalls: readonly CoordinationToolCall[];
36
- readonly tools: HarnessToolMap;
36
+ readonly tools: HarnessToolLookup;
37
37
  readonly turnId: string;
38
38
  }): {
39
39
  readonly session: HarnessSession;
@@ -50,17 +50,17 @@ export interface CoordinationToolCall {
50
50
  */
51
51
  export declare function createRuntimeActionRequestFromToolCall(input: {
52
52
  readonly toolCall: CoordinationToolCall;
53
- readonly tools: HarnessToolMap;
53
+ readonly tools: HarnessToolLookup;
54
54
  }): RuntimeActionRequest;
55
55
  /**
56
- * Projects one deferred harness tool call into a workflow run request. The
57
- * input is the tool's own, without anything eve added to its model input.
56
+ * Projects one workflow tool call into a workflow run request. The input is
57
+ * the tool's own, without anything eve added to its model input.
58
58
  */
59
59
  export declare function createCoordinationRequestFromToolCall(input: {
60
60
  readonly entry: WorkflowToolCallEntry;
61
61
  readonly input: JsonObject;
62
62
  readonly toolCall: CoordinationToolCall;
63
- readonly tools: HarnessToolMap;
63
+ readonly tools: HarnessToolLookup;
64
64
  }): RuntimeWorkflowTaskRequest;
65
65
  /**
66
66
  * Coerces an AI SDK tool-call `input` into the runtime-action `JsonObject`
@@ -1 +1 @@
1
- import{parseJsonObject}from"#shared/json.js";import{findBlockingWorkflowToolRun,removeBlockingWorkflowToolRuns}from"#harness/workflow-tool-runs.js";import{getProxyInputRequests}from"#harness/proxy-input-requests.js";import{normalizeToolModelOutput}from"#harness/tool-model-output.js";import{observeToolOutput}from"#tool-stubs/execute.js";import{startsTasks}from"#execution/tasks/tool-entry-point.js";import{markRuntimeWorkflowToolAction}from"#shared/action-types.js";import{commitCallEntry,isTaskTool}from"#execution/tasks/model-step.js";function assertUniqueCoordinationCallIds(e){let t=new Set;for(let n of e){if(t.has(n.callId))throw Error(`Coordination batch contains duplicate callId "${n.callId}".`);t.add(n.callId)}}function forgetFinishedRuns(e,t,n){let r=e,i=[];for(let e of t){if(e.kind!==`tool-result`)continue;let t=findBlockingWorkflowToolRun(r.state,e.callId,n);if(t!==void 0){for(let[e,n]of getProxyInputRequests(r.state))n.runId===t.address.runId&&i.push(e);r=removeBlockingWorkflowToolRuns(r,n,t.callId)}}return{requestIds:i,session:r}}async function runtimeResultCalls(e,t){let n=[];for(let r of e){switch(r.kind){case`load-skill-result`:n.push({part:toolResult(r,`load_skill`,toToolResultOutput(r)),result:r});continue;case`subagent-result`:n.push({part:toolResult(r,r.subagentName,toToolResultOutput(r)),result:r});continue;case`tool-result`:n.push({part:toolResult(r,r.toolName,await projectToolResultOutput(r,t?.get(r.toolName))),result:r});continue}throw Error(`Unsupported runtime action result kind "${String(r)}".`)}return n}function toolResult(e,t,n){return{output:n,toolCallId:e.callId,toolName:t,type:`tool-result`}}function collectDeferredCalls(e){let{session:t}=e,n=[];for(let r of e.toolCalls){let i=e.tools.get(r.toolName);if(isTaskTool(i))continue;let a=commitCallEntry(t,{callId:r.toolCallId,definition:i,input:resolveToolCallInputObject(r.input,{callId:r.toolCallId,toolName:r.toolName}),toolName:r.toolName,turnId:e.turnId});t=a.session,n.push(createCoordinationRequestFromToolCall({entry:a.entry,input:a.input,toolCall:r,tools:e.tools}))}return{session:t,workflowRequests:n}}function createRuntimeActionRequestFromToolCall(e){let t=e.tools.get(e.toolCall.toolName),n=resolveToolCallInputObject(e.toolCall.input,{callId:e.toolCall.toolCallId,toolName:e.toolCall.toolName});if(t?.frameworkAction===`load-skill`)return{callId:e.toolCall.toolCallId,input:n,kind:`load-skill`};let r=t?.behavior?.handling;if(t!==void 0&&r?.kind===`dispatch`&&r.target.kind!==`workflow-tool-call`){let i=r.target,a={callId:e.toolCall.toolCallId,description:t.description,input:n,name:e.toolCall.toolName,nodeId:i.nodeId};return i.kind===`remote-agent-call`?{...a,kind:`remote-agent-call`,remoteAgentName:i.remoteAgentName}:{...a,kind:`subagent-call`,subagentName:i.subagentName}}let i={callId:e.toolCall.toolCallId,input:n,kind:`tool-call`,toolName:e.toolCall.toolName};return t?.workflowId===void 0?i:markRuntimeWorkflowToolAction(i)}function createCoordinationRequestFromToolCall(e){let t=e.tools.get(e.toolCall.toolName);if(t?.workflowId===void 0)throw Error(`Deferred tool "${e.toolCall.toolName}" has no workflow.`);return{callId:e.toolCall.toolCallId,entry:e.entry,executeInput:t.executeInput?.(e.input),input:e.input,kind:`workflow-task`,toolName:e.toolCall.toolName,workflowId:t.workflowId}}function resolveToolCallInputObject(e,t){if(e==null||typeof e==`string`&&e.trim()===``)return{};try{return parseJsonObject(typeof e==`string`?parseJsonStringInput(e):e)}catch(e){let n=e instanceof Error?e.message:String(e);throw TypeError(`Failed to parse tool-call arguments for "${t.toolName}" (${t.callId}): ${n}`,{cause:e})}}function parseJsonStringInput(e){return JSON.parse(e)}async function projectToolResultOutput(e,t){return e.isError===!0||t?.toModelOutput===void 0||startsTasks(t)?toToolResultOutput(e):await observeToolOutput(e.toolName,[{callId:e.callId}],async()=>normalizeToolModelOutput({output:await t.toModelOutput(e.output),toolCallId:e.callId,toolName:e.toolName}))}function toToolResultOutput(e){return typeof e.output==`string`?e.isError===!0?{type:`error-text`,value:e.output}:{type:`text`,value:e.output}:e.isError===!0?{type:`error-json`,value:toMutableJsonValue(e.output)}:{type:`json`,value:toMutableJsonValue(e.output)}}function toMutableJsonValue(e){if(e===null||typeof e==`string`||typeof e==`number`||typeof e==`boolean`)return e;if(Array.isArray(e))return e.map(e=>toMutableJsonValue(e));let t={};for(let[n,r]of Object.entries(e))t[n]=toMutableJsonValue(r);return t}export{assertUniqueCoordinationCallIds,collectDeferredCalls,createCoordinationRequestFromToolCall,createRuntimeActionRequestFromToolCall,forgetFinishedRuns,resolveToolCallInputObject,runtimeResultCalls};
1
+ import{skillTarget}from"#shared/action-request-name.js";import{SKILL_ENTRY_NAME,SKILL_TOOL_NAME}from"#protocol/catalog-tools.js";import{parseJsonObject}from"#shared/json.js";import{findBlockingWorkflowToolRun,removeBlockingWorkflowToolRuns}from"#harness/workflow-tool-runs.js";import{startsTasks}from"#execution/tasks/tool-entry-point.js";import{commitCallEntry,isTaskTool}from"#execution/tasks/model-step.js";import{getProxyInputRequests}from"#harness/proxy-input-requests.js";import{normalizeToolModelOutput}from"#harness/tool-model-output.js";import{observeToolOutput}from"#tool-stubs/execute.js";import{markRuntimeWorkflowToolAction}from"#shared/action-types.js";function assertUniqueCoordinationCallIds(e){let t=new Set;for(let n of e){if(t.has(n.callId))throw Error(`Coordination batch contains duplicate callId "${n.callId}".`);t.add(n.callId)}}function forgetFinishedRuns(e,t,n){let r=e,i=[];for(let e of t){if(e.kind!==`tool-result`)continue;let t=findBlockingWorkflowToolRun(r.state,e.callId,n);if(t!==void 0){for(let[e,n]of getProxyInputRequests(r.state))n.runId===t.address.runId&&i.push(e);r=removeBlockingWorkflowToolRuns(r,n,t.callId)}}return{requestIds:i,session:r}}async function runtimeResultCalls(e,t){let n=[];for(let r of e){switch(r.kind){case`load-skill-result`:n.push({part:toolResult(r,SKILL_TOOL_NAME,toToolResultOutput(r)),result:r});continue;case`subagent-result`:n.push({part:toolResult(r,r.subagentName,toToolResultOutput(r)),result:r});continue;case`tool-result`:n.push({part:toolResult(r,r.toolName,await projectToolResultOutput(r,t?.get(r.toolName))),result:r});continue}throw Error(`Unsupported runtime action result kind "${String(r)}".`)}return n}function toolResult(e,t,n){return{output:n,toolCallId:e.callId,toolName:t,type:`tool-result`}}function collectWorkflowCalls(e){let{session:t}=e,n=[];for(let r of e.toolCalls){let i=e.tools.get(r.toolName);if(isTaskTool(i))continue;let a=commitCallEntry(t,{callId:r.toolCallId,definition:i,input:resolveToolCallInputObject(r.input,{callId:r.toolCallId,toolName:r.toolName}),toolName:r.toolName,turnId:e.turnId});t=a.session,n.push(createCoordinationRequestFromToolCall({entry:a.entry,input:a.input,toolCall:r,tools:e.tools}))}return{session:t,workflowRequests:n}}function createRuntimeActionRequestFromToolCall(e){let t=e.tools.get(e.toolCall.toolName),n=resolveToolCallInputObject(e.toolCall.input,{callId:e.toolCall.toolCallId,toolName:e.toolCall.toolName}),r=e.toolCall.toolName===SKILL_ENTRY_NAME?skillTarget(n):void 0;if(r!==void 0)return{callId:e.toolCall.toolCallId,input:n,kind:`load-skill`,name:r};let i=t?.behavior?.handling;if(t!==void 0&&i?.kind===`dispatch`&&i.target.kind!==`workflow-tool-call`){let r=i.target,a={callId:e.toolCall.toolCallId,description:t.description,input:n,name:e.toolCall.toolName,nodeId:r.nodeId};return r.kind===`remote-agent-call`?{...a,kind:`remote-agent-call`,remoteAgentName:r.remoteAgentName}:{...a,kind:`subagent-call`,subagentName:r.subagentName}}let a={callId:e.toolCall.toolCallId,input:n,kind:`tool-call`,toolName:e.toolCall.toolName};return t?.workflowId===void 0?a:markRuntimeWorkflowToolAction(a)}function createCoordinationRequestFromToolCall(e){let t=e.tools.get(e.toolCall.toolName);if(t?.workflowId===void 0)throw Error(`Workflow tool "${e.toolCall.toolName}" has no workflow.`);return{callId:e.toolCall.toolCallId,entry:e.entry,executeInput:t.executeInput?.(e.input),input:e.input,kind:`workflow-task`,toolName:e.toolCall.toolName,workflowId:t.workflowId}}function resolveToolCallInputObject(e,t){if(e==null||typeof e==`string`&&e.trim()===``)return{};try{return parseJsonObject(typeof e==`string`?parseJsonStringInput(e):e)}catch(e){let n=e instanceof Error?e.message:String(e);throw TypeError(`Failed to parse tool-call arguments for "${t.toolName}" (${t.callId}): ${n}`,{cause:e})}}function parseJsonStringInput(e){return JSON.parse(e)}async function projectToolResultOutput(e,t){return e.isError===!0||t?.toModelOutput===void 0||startsTasks(t)?toToolResultOutput(e):await observeToolOutput(e.toolName,[{callId:e.callId}],async()=>normalizeToolModelOutput({output:await t.toModelOutput(e.output),toolCallId:e.callId,toolName:e.toolName}))}function toToolResultOutput(e){return typeof e.output==`string`?e.isError===!0?{type:`error-text`,value:e.output}:{type:`text`,value:e.output}:e.isError===!0?{type:`error-json`,value:toMutableJsonValue(e.output)}:{type:`json`,value:toMutableJsonValue(e.output)}}function toMutableJsonValue(e){if(e===null||typeof e==`string`||typeof e==`number`||typeof e==`boolean`)return e;if(Array.isArray(e))return e.map(e=>toMutableJsonValue(e));let t={};for(let[n,r]of Object.entries(e))t[n]=toMutableJsonValue(r);return t}export{assertUniqueCoordinationCallIds,collectWorkflowCalls,createCoordinationRequestFromToolCall,createRuntimeActionRequestFromToolCall,forgetFinishedRuns,resolveToolCallInputObject,runtimeResultCalls};
@@ -5,10 +5,6 @@ import { type FrameworkMessageKind, type HarnessModelMessage } from "#harness/me
5
5
  interface AddCurrentMessageOptions {
6
6
  readonly cacheFriendly?: boolean;
7
7
  }
8
- interface CurrentAnnouncements {
9
- readonly availableSkills?: string;
10
- readonly keyed?: Readonly<Record<string, Announcement>>;
11
- }
12
8
  interface CurrentMessagesOptions {
13
9
  readonly historyState?: HistoryState;
14
10
  readonly currentTurnMessages?: readonly HarnessModelMessage[];
@@ -21,7 +17,7 @@ export declare function createCurrentMessages(history: readonly HarnessModelMess
21
17
  readonly nonSystemMessages: readonly HarnessModelMessage[];
22
18
  readonly systemMessages: readonly SystemModelMessage[];
23
19
  add(message: string, kind: FrameworkMessageKind, options?: AddCurrentMessageOptions): void;
24
- addAnnouncements(announcements: CurrentAnnouncements): void;
20
+ addAnnouncements(announcements: Readonly<Record<string, Announcement>>): void;
25
21
  addSystem(messages: SystemModelMessage | readonly SystemModelMessage[]): void;
26
22
  };
27
23
  export {};
@@ -1 +1 @@
1
- import{createFrameworkUserMessage}from"#harness/messages.js";function createCurrentMessages(e,t={}){let n=[...e],r={...t.historyState},i=[],a=[],o=new Set(t.currentTurnMessages),s;for(let n of t.projectedMessages??e)s===void 0&&o.has(n)&&(s=a.length),n.role===`system`?i.push(n):a.push(n);let c=s??a.length,l=e.findIndex(e=>o.has(e)),u=l===-1?e.length:l;function appendUserMessage(e,t){let r=createFrameworkUserMessage(t,e);a.splice(c,0,r),n.splice(u,0,r),c+=1,u+=1}function add(e,t,{cacheFriendly:n=!0}={}){if(n){appendUserMessage(e,t);return}i.push({role:`system`,content:e})}return{add,addAnnouncements(e){let t=e.availableSkills;t!==void 0&&t.length>0&&r.availableSkills!==t&&(appendUserMessage(t,`context.state`),r.availableSkills=t);let n=e.keyed??{};for(let e of Object.keys(n).sort()){let t=n[e],i=r.announcements?.[e];if(i===t.value)continue;let a=t.render(i);a!==void 0&&appendUserMessage(a,`context.state`),r.announcements={...r.announcements,[e]:t.value}}},addSystem(e){i.push(...Array.isArray(e)?e:[e])},get nonSystemMessages(){return[...a]},get history(){return[...n]},get historyState(){return{...r}},get systemMessages(){return[...i]}}}export{createCurrentMessages};
1
+ import{createFrameworkUserMessage}from"#harness/messages.js";function createCurrentMessages(e,t={}){let n=[...e],r={...t.historyState},i=[],a=[],o=new Set(t.currentTurnMessages),s;for(let n of t.projectedMessages??e)s===void 0&&o.has(n)&&(s=a.length),n.role===`system`?i.push(n):a.push(n);let c=s??a.length,l=e.findIndex(e=>o.has(e)),u=l===-1?e.length:l;function appendUserMessage(e,t){let r=createFrameworkUserMessage(t,e);a.splice(c,0,r),n.splice(u,0,r),c+=1,u+=1}function add(e,t,{cacheFriendly:n=!0}={}){if(n){appendUserMessage(e,t);return}i.push({role:`system`,content:e})}return{add,addAnnouncements(e){for(let t of Object.keys(e).sort()){let n=e[t],i=r.announcements?.[t];i!==n.value&&(appendUserMessage(n.render(i),`context.state`),r.announcements={...r.announcements,[t]:n.value})}},addSystem(e){i.push(...Array.isArray(e)?e:[e])},get nonSystemMessages(){return[...a]},get history(){return[...n]},get historyState(){return{...r}},get systemMessages(){return[...i]}}}export{createCurrentMessages};
@@ -6,7 +6,7 @@ type InlineToolResultPart = Extract<ToolResponsePart, {
6
6
  type: "tool-result";
7
7
  }>;
8
8
  import type { TurnPosition } from "#harness/session-machine/view.js";
9
- import type { HarnessEmitFn, HarnessToolMap } from "#harness/types.js";
9
+ import type { HarnessEmitFn, HarnessToolLookup } from "#harness/types.js";
10
10
  /**
11
11
  * Result of consuming one step's `fullStream`.
12
12
  *
@@ -28,7 +28,7 @@ interface StreamActionEmissionOptions {
28
28
  * as the reply.
29
29
  */
30
30
  readonly hidesHeldText?: boolean;
31
- readonly tools: HarnessToolMap;
31
+ readonly tools: HarnessToolLookup;
32
32
  readonly unsettledActionToolNames?: Map<string, string>;
33
33
  }
34
34
  /**
@@ -1 +1 @@
1
- import{createActionInputAppendedEvent,createActionPartialEvent,createActionResultEvent,createActionsRequestedEvent,createMessageAppendedEvent,createMessageCompletedEvent,createReasoningAppendedEvent,createReasoningCompletedEvent}from"#protocol/message.js";import{createRuntimeToolResultFromStepResult,createRuntimeToolResultFromToolError,createToolResultMessagePartFromToolError}from"#harness/action-result-helpers.js";import{emitNestedToolActions}from"#harness/nested-actions.js";import{createInvalidToolCallInputError,isInvalidToolCall,resolveProviderToolCallRequest}from"#harness/tool-call-input-errors.js";import{collectActionPresentation,createPresentedRuntimeActionRequestFromToolCall}from"#harness/action-presentation.js";import{projectDeltaPresentation,projectResultPresentation}from"#harness/tool-presentation.js";import{createProviderStreamActionBatch}from"#harness/stream-actions.js";import{normalizeModelStreamError}from"#harness/model-call/errors.js";import{createOrderedStreamEmitter}from"#harness/ordered-stream-emitter.js";import{interruptStreamOnFailure}from"#harness/interruptible-stream.js";import{isInlineAuthorizationToolResult}from"#harness/inline-tool-authorization.js";import{normalizeAssistantStepFinishReason}from"#harness/finish-reason.js";async function emitStreamContent(e,t,n,r){let i=createOrderedStreamEmitter(e),a=createProviderStreamActionBatch({emitFn:i.emit,onActionsEmitted:e=>{for(let{request:t,toolName:n}of e)r?.unsettledActionToolNames?.set(t.action.callId,n)},state:t});try{return await consumeStreamContent(i.emit,t,interruptStreamOnFailure(n,i.failureSignal),a,r)}finally{try{await a.cancel()}finally{await i.closeAndDrain()}}}function reportedFinishReason(e,t){return t&&e===`stop`?`tool-calls`:e}async function consumeStreamContent(e,t,n,r,i){let a=``,o=``,s=`stop`,c,l=new Set,u=new Set,d=new Set,f=new Set,p=new Set,m=new Set,h=[],g=[],_=new Map,v=new Map,flushCurrentMessage=async()=>{o.length!==0&&(await e(createMessageCompletedEvent({finishReason:`tool-calls`,message:o,sequence:t.sequence,stepIndex:t.stepIndex,turnId:t.turnId})),o=``)},emitActionInput=async(n,r,a)=>{await e(createActionInputAppendedEvent({callId:n,inputTextDelta:a,sequence:t.sequence,stepIndex:t.stepIndex,toolName:r,turnId:t.turnId})),i?.unsettledActionToolNames?.set(n,r)},emitActionRequest=async(n,r)=>{let{action:a}=n;u.has(a.callId)||(o.trim().length>0&&await flushCurrentMessage(),u.add(a.callId),_.set(a.callId,a.input),await e(createActionsRequestedEvent({actions:[a],presentation:collectActionPresentation([n]),sequence:t.sequence,stepIndex:t.stepIndex,turnId:t.turnId})),i?.unsettledActionToolNames?.set(a.callId,r))},collectProviderToolCall=async e=>{if(f.has(e.toolCallId)||(f.add(e.toolCallId),u.has(e.toolCallId)))return;u.add(e.toolCallId),o.trim().length>0&&await flushCurrentMessage();let t=resolveProviderToolCallRequest(e,i?.tools??new Map);if(t.toolError!==void 0){m.add(e.toolCallId),await emitActionResult(createRuntimeToolResultFromToolError(t.toolError)),p.add(e.toolCallId),g.push(createToolResultMessagePartFromToolError(t.toolError));return}_.set(t.request.action.callId,t.request.action.input),r.observe(t.request,e.toolName)},emitActionResult=async n=>{if(d.has(n.callId))return;d.add(n.callId),await emitNestedToolActions(e,t,n.callId);let r=n.isError===!0?void 0:projectResultPresentation(i?.tools.get(n.toolName),n.callId,_.get(n.callId),n.output);await e(createActionResultEvent({presentation:r,result:n,sequence:t.sequence,stepIndex:t.stepIndex,turnId:t.turnId})),i?.unsettledActionToolNames?.delete(n.callId)},emitActionPartial=async n=>{let r=projectDeltaPresentation(i?.tools.get(n.toolName),n.callId,_.get(n.callId),n.output);await e(createActionPartialEvent({presentation:r,result:n,sequence:t.sequence,stepIndex:t.stepIndex,turnId:t.turnId}))},emitToolCall=async e=>{if(isInvalidToolCall(e)){m.add(e.toolCallId);return}if(!(i===void 0||i.excludedActionToolNames.has(e.toolName)))try{await emitActionRequest(createPresentedRuntimeActionRequestFromToolCall({toolCall:e,tools:i.tools}),e.toolName)}catch(t){if(t instanceof TypeError){let n=createInvalidToolCallInputError({error:t,toolCall:e});m.add(e.toolCallId),o.trim().length>0&&await flushCurrentMessage(),await emitActionResult(createRuntimeToolResultFromToolError(n)),p.add(e.toolCallId),g.push(createToolResultMessagePartFromToolError(n));return}throw t}};for await(let d of n)if(c===void 0)switch(d.type){case`reasoning-delta`:await r.flush(),a+=d.text,await e(createReasoningAppendedEvent({reasoningDelta:d.text,sequence:t.sequence,stepIndex:t.stepIndex,turnId:t.turnId}));break;case`text-delta`:await r.flush(),a.trim().length>0&&(await e(createReasoningCompletedEvent({reasoning:a,sequence:t.sequence,stepIndex:t.stepIndex,turnId:t.turnId})),a=``),o+=d.text,await e(createMessageAppendedEvent({messageDelta:d.text,sequence:t.sequence,stepIndex:t.stepIndex,turnId:t.turnId}));break;case`tool-input-start`:if(i===void 0||d.providerExecuted===!0||i.excludedActionToolNames.has(d.toolName)){v.delete(d.id);break}await r.flush(),o.trim().length>0&&await flushCurrentMessage(),v.set(d.id,{toolName:d.toolName});break;case`tool-input-delta`:{let e=v.get(d.id);if(e===void 0)break;await r.flush(),await emitActionInput(d.id,e.toolName,d.delta);break}case`tool-input-end`:v.delete(d.id);break;case`tool-call`:{let e=d;v.delete(e.toolCallId),l.add(e.toolCallId),e.providerExecuted===!0?await collectProviderToolCall(e):(await r.flush(),await emitToolCall(e));break}case`tool-result`:{let e=d;if(e.preliminary===!0){e.providerExecuted!==!0&&await emitActionPartial(createRuntimeToolResultFromStepResult(e));break}if(e.providerExecuted===!0){await collectProviderToolCall({input:`input`in e?e.input:void 0,toolCallId:e.toolCallId,toolName:e.toolName}),await r.flush(),await emitActionResult(createRuntimeToolResultFromStepResult(e));break}if(l.has(d.toolCallId)){if(isInlineAuthorizationToolResult(e))break;u.has(d.toolCallId)&&(await emitActionResult(createRuntimeToolResultFromStepResult(e)),p.add(d.toolCallId));break}if(await r.flush(),await flushCurrentMessage(),isInlineAuthorizationToolResult(e)){p.add(d.toolCallId),h.push(e);break}await emitActionResult(createRuntimeToolResultFromStepResult(e)),p.add(d.toolCallId);break}case`tool-error`:{let e=d;e.providerExecuted===!0?(await collectProviderToolCall(e),await r.flush(),await emitActionResult(createRuntimeToolResultFromToolError(e))):u.has(e.toolCallId)&&(await emitActionResult(createRuntimeToolResultFromToolError(e)),p.add(e.toolCallId),g.push(createToolResultMessagePartFromToolError(e)));break}case`finish-step`:s=normalizeAssistantStepFinishReason(d.finishReason),await r.flush();break;case`error`:c=normalizeModelStreamError(d.error);break;case`abort`:throw new DOMException(d.reason??`The model stream was aborted.`,`AbortError`)}if(await r.flush(),c!==void 0)throw c;return a.trim().length>0&&await e(createReasoningCompletedEvent({reasoning:a,sequence:t.sequence,stepIndex:t.stepIndex,turnId:t.turnId})),s!==`content-filter`&&o.trim().length>0&&await e(createMessageCompletedEvent({finishReason:reportedFinishReason(s,i?.hidesHeldText===!0),message:o,sequence:t.sequence,stepIndex:t.stepIndex,turnId:t.turnId})),{emittedActionCallIds:u,handledInlineToolResultCallIds:p,invalidInputToolCallIds:m,inlineAuthorizationResults:h,trailingInlineToolResultParts:g}}export{emitStreamContent};
1
+ import{createActionInputAppendedEvent,createActionPartialEvent,createActionResultEvent,createActionsRequestedEvent,createMessageAppendedEvent,createMessageCompletedEvent,createReasoningAppendedEvent,createReasoningCompletedEvent}from"#protocol/message.js";import{createRuntimeToolResultFromStepResult,createRuntimeToolResultFromToolError,createToolResultMessagePartFromToolError,toActionResult}from"#harness/action-result-helpers.js";import{normalizeModelStreamError}from"#harness/model-call/errors.js";import{createInvalidToolCallInputError,isInvalidToolCall,resolveProviderToolCallRequest}from"#harness/tool-call-input-errors.js";import{collectActionPresentation,createPresentedRuntimeActionRequestFromToolCall}from"#harness/action-presentation.js";import{projectDeltaPresentation,projectResultPresentation}from"#harness/tool-presentation.js";import{createProviderStreamActionBatch}from"#harness/stream-actions.js";import{createOrderedStreamEmitter}from"#harness/ordered-stream-emitter.js";import{interruptStreamOnFailure}from"#harness/interruptible-stream.js";import{isInlineAuthorizationToolResult}from"#harness/inline-tool-authorization.js";import{normalizeAssistantStepFinishReason}from"#harness/finish-reason.js";async function emitStreamContent(e,t,n,r){let i=createOrderedStreamEmitter(e),a=createProviderStreamActionBatch({emitFn:i.emit,onActionsEmitted:e=>{for(let{request:t,toolName:n}of e)r?.unsettledActionToolNames?.set(t.action.callId,n)},state:t});try{return await consumeStreamContent(i.emit,t,interruptStreamOnFailure(n,i.failureSignal),a,r)}finally{try{await a.cancel()}finally{await i.closeAndDrain()}}}function reportedFinishReason(e,t){return t&&e===`stop`?`tool-calls`:e}async function consumeStreamContent(e,t,n,r,i){let a=``,o=``,s=`stop`,c,l=new Set,u=new Set,d=new Set,f=new Set,p=new Set,m=new Set,h=[],g=[],_=new Map,v=new Map,flushCurrentMessage=async()=>{o.length!==0&&(await e(createMessageCompletedEvent({finishReason:`tool-calls`,message:o,sequence:t.sequence,stepIndex:t.stepIndex,turnId:t.turnId})),o=``)},emitActionInput=async(n,r,a)=>{await e(createActionInputAppendedEvent({callId:n,inputTextDelta:a,sequence:t.sequence,stepIndex:t.stepIndex,toolName:r,turnId:t.turnId})),i?.unsettledActionToolNames?.set(n,r)},emitActionRequest=async(n,r)=>{let{action:a}=n;u.has(a.callId)||(o.trim().length>0&&await flushCurrentMessage(),u.add(a.callId),_.set(a.callId,a.input),await e(createActionsRequestedEvent({actions:[a],presentation:collectActionPresentation([n]),sequence:t.sequence,stepIndex:t.stepIndex,turnId:t.turnId})),i?.unsettledActionToolNames?.set(a.callId,r))},collectProviderToolCall=async e=>{if(f.has(e.toolCallId)||(f.add(e.toolCallId),u.has(e.toolCallId)))return;u.add(e.toolCallId),o.trim().length>0&&await flushCurrentMessage();let t=resolveProviderToolCallRequest(e,i?.tools??new Map);if(t.toolError!==void 0){m.add(e.toolCallId),await emitActionResult(createRuntimeToolResultFromToolError(t.toolError)),p.add(e.toolCallId),g.push(createToolResultMessagePartFromToolError(t.toolError));return}_.set(t.request.action.callId,t.request.action.input),r.observe(t.request,e.toolName)},emitActionResult=async n=>{if(d.has(n.callId))return;d.add(n.callId);let r=n.isError===!0?void 0:projectResultPresentation(i?.tools.get(n.toolName),n.callId,_.get(n.callId),n.output);await e(createActionResultEvent({presentation:r,result:toActionResult(n,_.get(n.callId)),sequence:t.sequence,stepIndex:t.stepIndex,turnId:t.turnId})),i?.unsettledActionToolNames?.delete(n.callId)},emitActionPartial=async n=>{let r=projectDeltaPresentation(i?.tools.get(n.toolName),n.callId,_.get(n.callId),n.output);await e(createActionPartialEvent({presentation:r,result:n,sequence:t.sequence,stepIndex:t.stepIndex,turnId:t.turnId}))},emitToolCall=async e=>{if(isInvalidToolCall(e)){m.add(e.toolCallId);return}if(!(i===void 0||i.excludedActionToolNames.has(e.toolName)))try{await emitActionRequest(createPresentedRuntimeActionRequestFromToolCall({toolCall:e,tools:i.tools}),e.toolName)}catch(t){if(t instanceof TypeError){let n=createInvalidToolCallInputError({error:t,toolCall:e});m.add(e.toolCallId),o.trim().length>0&&await flushCurrentMessage(),await emitActionResult(createRuntimeToolResultFromToolError(n)),p.add(e.toolCallId),g.push(createToolResultMessagePartFromToolError(n));return}throw t}};for await(let d of n)if(c===void 0)switch(d.type){case`reasoning-delta`:await r.flush(),a+=d.text,await e(createReasoningAppendedEvent({reasoningDelta:d.text,sequence:t.sequence,stepIndex:t.stepIndex,turnId:t.turnId}));break;case`text-delta`:await r.flush(),a.trim().length>0&&(await e(createReasoningCompletedEvent({reasoning:a,sequence:t.sequence,stepIndex:t.stepIndex,turnId:t.turnId})),a=``),o+=d.text,await e(createMessageAppendedEvent({messageDelta:d.text,sequence:t.sequence,stepIndex:t.stepIndex,turnId:t.turnId}));break;case`tool-input-start`:if(i===void 0||d.providerExecuted===!0||i.excludedActionToolNames.has(d.toolName)){v.delete(d.id);break}await r.flush(),o.trim().length>0&&await flushCurrentMessage(),v.set(d.id,{toolName:d.toolName});break;case`tool-input-delta`:{let e=v.get(d.id);if(e===void 0)break;await r.flush(),await emitActionInput(d.id,e.toolName,d.delta);break}case`tool-input-end`:v.delete(d.id);break;case`tool-call`:{let e=d;v.delete(e.toolCallId),l.add(e.toolCallId),e.providerExecuted===!0?await collectProviderToolCall(e):(await r.flush(),await emitToolCall(e));break}case`tool-result`:{let e=d;if(e.preliminary===!0){e.providerExecuted!==!0&&await emitActionPartial(createRuntimeToolResultFromStepResult(e));break}if(e.providerExecuted===!0){await collectProviderToolCall({input:`input`in e?e.input:void 0,toolCallId:e.toolCallId,toolName:e.toolName}),await r.flush(),await emitActionResult(createRuntimeToolResultFromStepResult(e));break}if(l.has(d.toolCallId)){if(isInlineAuthorizationToolResult(e))break;u.has(d.toolCallId)&&(await emitActionResult(createRuntimeToolResultFromStepResult(e)),p.add(d.toolCallId));break}if(await r.flush(),await flushCurrentMessage(),isInlineAuthorizationToolResult(e)){p.add(d.toolCallId),h.push(e);break}await emitActionResult(createRuntimeToolResultFromStepResult(e)),p.add(d.toolCallId);break}case`tool-error`:{let e=d;e.providerExecuted===!0?(await collectProviderToolCall(e),await r.flush(),await emitActionResult(createRuntimeToolResultFromToolError(e))):u.has(e.toolCallId)&&(await emitActionResult(createRuntimeToolResultFromToolError(e)),p.add(e.toolCallId),g.push(createToolResultMessagePartFromToolError(e)));break}case`finish-step`:s=normalizeAssistantStepFinishReason(d.finishReason),await r.flush();break;case`error`:c=normalizeModelStreamError(d.error);break;case`abort`:throw new DOMException(d.reason??`The model stream was aborted.`,`AbortError`)}if(await r.flush(),c!==void 0)throw c;return a.trim().length>0&&await e(createReasoningCompletedEvent({reasoning:a,sequence:t.sequence,stepIndex:t.stepIndex,turnId:t.turnId})),s!==`content-filter`&&o.trim().length>0&&await e(createMessageCompletedEvent({finishReason:reportedFinishReason(s,i?.hidesHeldText===!0),message:o,sequence:t.sequence,stepIndex:t.stepIndex,turnId:t.turnId})),{emittedActionCallIds:u,handledInlineToolResultCallIds:p,invalidInputToolCallIds:m,inlineAuthorizationResults:h,trailingInlineToolResultParts:g}}export{emitStreamContent};
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Catalog calls in the harness. Once a step's calls enter the harness, every
3
+ * seam reads an `eve__tool` or `eve__skill` call as the call to the entry it
4
+ * names. Model history keeps the model's own calls.
5
+ */
6
+ import type { ModelMessage, TelemetryOptions, TextStreamPart, ToolSet } from "ai";
7
+ import type { HarnessToolDefinition } from "#harness/execute-tool.js";
8
+ import type { HarnessStepResult } from "#harness/step-hooks.js";
9
+ import { toolCallModelOutput } from "#harness/tool-call-io.js";
10
+ import type { CallResolver, ResolvedCall, ToolCallLike } from "#harness/types.js";
11
+ import type { ToolExecuteOptions } from "#tools/definition.js";
12
+ /**
13
+ * The name each tool call has in model history, by call id. A result written
14
+ * to history carries its call's name there, which is the catalog tool for a
15
+ * call made through one.
16
+ */
17
+ export declare function historyCallNames(messages: readonly ModelMessage[]): ReadonlyMap<string, string>;
18
+ /** Whether a call runs as a workflow tool or agent the harness dispatches after the step. */
19
+ export declare function dispatchesAfterStep(resolved: ResolvedCall<ToolCallLike> | undefined): boolean;
20
+ /** Runs a resolved catalog call, or stands in for one the harness dispatches. */
21
+ export declare function runEntryCall(resolved: ResolvedCall<ToolCallLike>, options: ToolExecuteOptions): unknown;
22
+ /**
23
+ * The call a tool stub matches. An `eve__tool` call matches as the call to its
24
+ * entry, with the entry's input, so a stub applies to it exactly as to a direct
25
+ * call. A call the harness dispatches after the step has none here: its
26
+ * dispatch applies the stub, as it does for a direct call.
27
+ */
28
+ export declare function stubbedCall(call: ToolCallLike, resolved: ResolvedCall<ToolCallLike> | undefined): ToolCallLike | undefined;
29
+ /** The model output of a call's result; a stand-in's output is dropped with it. */
30
+ export declare function entryModelOutput(definition: Pick<HarnessToolDefinition, "name" | "toModelOutput">, output: unknown, toolCallId: string | undefined): ReturnType<typeof toolCallModelOutput>;
31
+ /**
32
+ * The step as the harness reads it: catalog calls become calls to
33
+ * their entries and stand-in results are dropped. The response messages, which
34
+ * become history, keep the model's own calls.
35
+ */
36
+ export declare function toEntryStep<T extends ModelMessage>(step: HarnessStepResult, responseMessages: readonly T[], resolve: CallResolver): readonly [HarnessStepResult, T[]];
37
+ /**
38
+ * The stream as the harness reads it, as {@link toEntryStep} reads the step.
39
+ * A catalog call's input stream is dropped: its entry is known only once the
40
+ * input is complete.
41
+ */
42
+ export declare function toEntryStream(stream: AsyncIterable<TextStreamPart<ToolSet>>, resolve: CallResolver): AsyncIterable<TextStreamPart<ToolSet>>;
43
+ /**
44
+ * Telemetry as the harness reports it. Integrations see each catalog call as
45
+ * the call to its entry, and never see a stand-in run: a direct
46
+ * call to the same entry never runs in the SDK.
47
+ */
48
+ export declare function toEntryTelemetry(telemetry: TelemetryOptions | undefined, resolve: CallResolver): TelemetryOptions | undefined;
@@ -0,0 +1 @@
1
+ import{CALL_TOOL_NAME,SKILL_TOOL_NAME}from"#protocol/catalog-tools.js";import{isWorkflowTool}from"#execution/tasks/model-step.js";import{toolCallModelOutput}from"#harness/tool-call-io.js";function historyCallNames(e){let t=new Map;for(let n of e)if(n.role===`assistant`&&Array.isArray(n.content))for(let e of n.content)e.type===`tool-call`&&t.set(e.toolCallId,e.toolName);return t}const DISPATCHED=Object.freeze({dispatched:!0});function dispatchesAfterStep(e){return e!==void 0&&isWorkflowTool(e.definition)}function runEntryCall(e,t){if(dispatchesAfterStep(e))return DISPATCHED;let{call:n,definition:r}=e;if(r.execute===void 0)throw Error(`"${n.toolName}" cannot run.`);return r.execute(n.input,t)}function stubbedCall(e,t){return t===void 0?e:dispatchesAfterStep(t)?void 0:t.call}function entryModelOutput(e,t,n){return t===DISPATCHED?Promise.resolve({type:`json`,value:null}):toolCallModelOutput(e,t,n)}function toEntryStep(e,t,n){let r=new Set((e.toolResults??[]).filter(e=>e.output===DISPATCHED).map(e=>e.toolCallId)),kept=e=>e.type!==`tool-result`||!r.has(e.toolCallId);return[{content:(e.content??[]).filter(kept).map(e=>toEntryPart(e,n)),finishReason:e.finishReason,invalidInputToolCallIds:e.invalidInputToolCallIds,providerMetadata:e.providerMetadata,response:{...e.response,messages:withoutResults(e.response.messages,kept)},text:e.text,toolCalls:(e.toolCalls??[]).map(e=>entryCallOf(e,n)),toolResults:(e.toolResults??[]).filter(kept).map(e=>entryCallOf(e,n)),usage:e.usage},withoutResults(t,kept)]}async function*toEntryStream(e,t){let n=new Set;for await(let r of e){if(r.type===`tool-input-start`&&(r.toolName===CALL_TOOL_NAME||r.toolName===SKILL_TOOL_NAME)){n.add(r.id);continue}r.type===`tool-input-delta`&&n.has(r.id)||r.type===`tool-input-end`&&n.delete(r.id)||(r.type!==`tool-result`||r.output!==DISPATCHED)&&(yield toEntryPart(r,t))}}function toEntryTelemetry(e,t){let n=e?.integrations;if(n===void 0)return e;let r=Array.isArray(n)?n:[n],i=new Set;return{...e,integrations:r.map(e=>entryToolExecutions(e,t,i))}}function entryToolExecutions(e,t,n){let{executeTool:r,onToolExecutionEnd:i,onToolExecutionStart:a}=e;if(!r&&!i&&!a)return e;let reportAsEntry=r=>i=>{let a=t(i.toolCall);if(dispatchesAfterStep(a)){n.add(i.toolCall.toolCallId);return}return r?.call(e,{...i,toolCall:a?.call??i.toolCall})};return Object.create(e,{executeTool:{value(t){return n.has(t.toolCallId)||r===void 0?t.execute():r.call(e,t)}},onToolExecutionEnd:{value:reportAsEntry(i)},onToolExecutionStart:{value:reportAsEntry(a)}})}function entryCallOf(e,t){return t(e)?.call??e}function toEntryPart(e,t){switch(e.type){case`tool-call`:case`tool-result`:case`tool-error`:return entryCallOf(e,t);case`tool-approval-request`:{let n=e;return n.toolCall===void 0?e:{...n,toolCall:entryCallOf(n.toolCall,t)}}default:return e}}function withoutResults(e,t){return e.flatMap(e=>{if(e.role!==`tool`)return[e];let n=e.content.filter(t);return n.length===0?[]:[{...e,content:n}]})}export{dispatchesAfterStep,entryModelOutput,historyCallNames,runEntryCall,stubbedCall,toEntryStep,toEntryStream,toEntryTelemetry};
@@ -11,6 +11,8 @@ export interface HarnessToolDefinition {
11
11
  readonly label?: InternalToolLabelDefinition;
12
12
  readonly approvalKey?: (toolInput: Readonly<Record<string, unknown>>) => string;
13
13
  readonly behavior?: PreparedToolBehavior;
14
+ /** Kept out of the model's tool list; the model reaches it through `eve__search` and `eve__tool`. */
15
+ readonly deferred?: boolean;
14
16
  readonly description: string;
15
17
  /** A successful call ends the turn without a final reply; see `ToolDefinition.endsTurn`. */
16
18
  readonly endsTurn?: InternalToolDefinition["endsTurn"];
@@ -18,7 +20,7 @@ export interface HarnessToolDefinition {
18
20
  /** Optional JSON input substituted when this tool starts its workflow body. */
19
21
  readonly executeInput?: (input: unknown) => JsonValue;
20
22
  readonly frameworkTool?: boolean;
21
- readonly frameworkAction?: "load-skill" | "task-cancel" | "task-wait";
23
+ readonly frameworkAction?: "task-cancel" | "task-wait";
22
24
  readonly inputSchema: FlexibleSchema;
23
25
  readonly name: string;
24
26
  readonly approval?: Approval;
@@ -1,16 +1,12 @@
1
1
  import type { Tool } from "ai";
2
2
  import type { JsonObject } from "#shared/json.js";
3
- /**
4
- * Stable model-visible name for the kernel structured-output interception.
5
- */
6
- export declare const FINAL_OUTPUT_TOOL_NAME = "final_output";
7
3
  /**
8
4
  * What the model reads when it gives its final output beside calls whose results it hasn't seen:
9
5
  * the turn can't end on an answer written before them, so it answers again once they arrive.
10
6
  */
11
- export declare const FINAL_OUTPUT_BESIDE_PENDING_CALLS = "Your final output wasn't delivered because other calls in this response were still running. Use their results, then call final_output again.";
7
+ export declare const FINAL_OUTPUT_BESIDE_PENDING_CALLS = "Your reply wasn't delivered because other calls in this response were still running. Use their results, then call eve__reply again.";
12
8
  /**
13
- * Builds the model-facing `final_output` tool from a lowered output schema.
9
+ * Builds the model-facing `eve__reply` tool from a lowered output schema.
14
10
  *
15
11
  * The tool has no `execute`: calling it is the terminal signal the harness
16
12
  * intercepts to surface the structured result. Its input is provider-constrained
@@ -1 +1 @@
1
- import{defineJsonSchema,toModelSchema}from"#tools/schema.js";const FINAL_OUTPUT_TOOL_NAME=`final_output`,FINAL_OUTPUT_BESIDE_PENDING_CALLS=`Your final output wasn't delivered because other calls in this response were still running. Use their results, then call final_output again.`;function buildFinalOutputTool(e){let t=toModelSchema(defineJsonSchema(e),`input`);return{description:`Deliver your final answer in the required structure by calling this tool. Call it exactly once, when you are done; do not answer in prose.`,inputSchema:t,outputSchema:t}}export{FINAL_OUTPUT_BESIDE_PENDING_CALLS,FINAL_OUTPUT_TOOL_NAME,buildFinalOutputTool};
1
+ import{REPLY_TOOL_NAME}from"#protocol/reply-tool.js";import{defineJsonSchema,toModelSchema}from"#tools/schema.js";const FINAL_OUTPUT_BESIDE_PENDING_CALLS=`Your reply wasn't delivered because other calls in this response were still running. Use their results, then call ${REPLY_TOOL_NAME} again.`;function buildFinalOutputTool(e){let t=toModelSchema(defineJsonSchema(e),`input`);return{description:`Reply with your final answer in the required structure by calling this tool. Call it when you are done, as your final step; do not answer in prose.`,inputSchema:t,outputSchema:t}}export{FINAL_OUTPUT_BESIDE_PENDING_CALLS,buildFinalOutputTool};
@@ -76,6 +76,11 @@ export declare function answer(view: SessionView, input: {
76
76
  /** The delivery merged the queue in, so the queue empties. */
77
77
  readonly takeQueued: boolean;
78
78
  readonly approvalKey: (request: InputRequest) => string | undefined;
79
+ /**
80
+ * Whether the request's restored step has `eve__search`, which a call whose
81
+ * tool is gone can use to find another.
82
+ */
83
+ readonly searchable: (request: InputRequest) => boolean;
79
84
  }): Answered;
80
85
  /** Queued input that can run now, rather than wait for more answers. */
81
86
  export declare function hasRunnableQueue(view: SessionView): boolean;
@@ -1 +1 @@
1
- import{canonicalize,compactInput,hasInput,isEmptyInput,resolveTextInput,withoutResponses,withoutTurnInput}from"./delivery.js";import{openInputs,turnCoordinates}from"#protocol/session-projection.js";import{readClientContext}from"#internal/client-context.js";import{createActionResultEvent,createApprovalCandidateEvent,createApprovalSettledEvent,createAuthorizationCompletedEvent,createAuthorizationRequiredEvent,createInputRequestedEvent,createInputResolvedEvent,createMessageCompletedEvent}from"#protocol/message.js";import{coalesceTurnInputs,createFrameworkUserMessage}from"#harness/messages.js";import{turnPosition}from"#harness/session-machine/view.js";import{renderPendingApprovalsSnippet}from"#harness/hitl/approval-prompt.js";import{finishTurn,hold,ownOpenRequestIds,settle,stepCallIds,suspend,withResult,withoutApproved}from"#harness/session-machine/transitions.js";import{supersededChallenges,withSignIns}from"#harness/authorization.js";import{withoutCalls}from"#harness/inline-tool-authorization.js";import{isApprovalRequest}from"#harness/input-request-class.js";import{authorizationEventFields}from"#harness/authorization-event-fields.js";import{TOOL_EXECUTION_DENIED_MESSAGE,resolveApprovalOutcome,resolveInputOutcome}from"#harness/input-request-resolution.js";import{resolveSessionLimitContinuation}from"#harness/hitl/budget-request.js";import{signInWithdrawn}from"#harness/session-machine/events.js";function parkOnApprovals(e,t){let n=t.requester?.principalType===`anonymous`?null:t.requester,r=t.messages.findIndex(e=>e.role!==`tool`),i=r===-1?t.messages:t.messages.slice(0,r),a=renderPendingApprovalsSnippet(t.requests),o=suspend(e.turn,{event:t.event,messages:t.messages.slice(i.length),requester:n,requests:t.requests,responseAuthRequiredRequestIds:t.responseAuthRequiredRequestIds,tasks:t.tasks});return{commit:[...i,...a===void 0?[]:[createFrameworkUserMessage(`context.state`,a)]],events:t.tasks.length>0?[]:[createInputRequestedEvent({requests:t.requests,...t.event})],turn:o}}function dispatch(e,t){let n=e.turn.suspended.map(e=>{let n=stepCallIds(e),r=t.tasks.filter(e=>n.has(e.callId));if(r.length===0)return e;let i=withoutApproved(e,new Set(r.map(e=>e.callId))),a={...e.approvers};for(let{callId:e}of r){let n=t.approvers[e];n!==void 0&&(a[e]=n)}return{...i,tasks:[...e.tasks,...r],...Object.keys(a).length>0&&{approvers:a}}});return{events:[],turn:{...e.turn,suspended:n}}}function deferInput(e,t){return{events:[],turn:withQueued(e.turn,t)}}function withQueued(e,t){return t===void 0||isEmptyInput(t)?e:{...e,queued:e.queued===void 0?t:coalesceTurnInputs(e.queued,t)}}function answer(e,t){let{policy:n}=t,{projection:r}=e,i=turnPosition(r),a=[...n.feedback.map(e=>createMessageCompletedEvent({message:e,sequence:i.sequence,stepIndex:i.stepIndex,turnId:i.turnId})),...reportApprovalProgress(r,n.audit,n.challengesAtStart)],o=t.takeQueued?{...e.turn,queued:void 0}:e.turn,done=e=>({events:a,resolved:[],turn:o,...e}),queue=e=>{o=withQueued(o,e)};if(n.kind===`park`)return done({next:`park`});if(n.kind===`continue-coordination`)return queue(n.stepInput),done({next:`repeat`});if(n.challenges.length>0)return done({next:`sign-in`});let s=t.delivery,c=openInputs(r).find(t=>t.request.kind===`session-limit`&&ownOpenRequestIds(e).has(t.request.requestId)),l=o.suspended.filter(e=>e.requests.length>0);if(c===void 0&&l.length===0)return done({input:s,next:`continue`});let u=c===void 0?s:resolveTextInput({requests:[c.request]},s),d=canonicalize(u?.inputResponses??[]),f=new Map(d.map(e=>[e.requestId,e])),p=l.filter(e=>e.requests.every(e=>f.has(e.requestId))),leftoverFor=e=>d.filter(t=>e.some(e=>e.requests.some(e=>e.requestId===t.requestId))),park=()=>(queue(compactInput(u)),done({next:`park`}));if(d.length===0&&u?.message===void 0)return park();if(c!==void 0){let e=f.get(c.request.requestId);if(e===void 0)return hasInput(s)?(queue(withoutTurnInput(u)),done({input:u,next:`defer-message`})):(queue(compactInput(u)),done({next:`park`}));let t={event:{sequence:c.sequence,stepIndex:c.stepIndex,turnId:c.turnId},inputs:[{outcome:resolveInputOutcome(c.request.kind,e),request:c.request,response:e}]};a.push(resolvedEvent(t));let n=leftoverFor(l);return n.length>0&&queue({inputResponses:n}),done({consumedMessage:u?.messageConsumed,input:withoutResponses(u),limit:resolveSessionLimitContinuation({requests:[c.request],responses:d}),next:`continue`,resolved:[t]})}if(p.length===0&&u?.message===void 0)return park();p.length===0&&p.push(l[0]);let m=leftoverFor(l.filter(e=>!p.includes(e)));m.length>0&&queue({inputResponses:m});let h=new Set(o.grants),g=[],_=[],v=o.suspended.map(e=>{if(!p.includes(e))return e;let n=e.messages,r=[];for(let i of e.requests){let{approved:a,reason:o,status:s}=resolveApprovalOutcome(f.get(i.requestId));if(a){h.add(t.approvalKey(i)??i.action.toolName),r.push(i);continue}n=withResult(n,{output:{reason:o,type:`execution-denied`},toolCallId:i.action.callId,toolName:i.action.toolName,type:`tool-result`}),_.push(createActionResultEvent({rejected:!0,result:{callId:i.action.callId,isError:!0,kind:`tool-result`,output:{approval:{requestId:i.requestId,status:s},code:`TOOL_EXECUTION_DENIED`,message:o??TOOL_EXECUTION_DENIED_MESSAGE,tool:{result:`not_run`}},toolName:i.action.toolName},...e.event}))}g.push({event:e.event,inputs:e.requests.map(e=>{let t=f.get(e.requestId);return{outcome:resolveInputOutcome(e.kind,t),request:e,response:t}})});let i=[...e.approved??[],...r];return{...e,messages:n,requests:[],...i.length>0&&{approved:i}}});return a.push(...g.map(resolvedEvent),..._),o={...o,grants:[...h],suspended:v},done({consumedMessage:u?.messageConsumed,input:withoutResponses(u),next:`continue`,resolved:g})}function resolvedEvent(e){return createInputResolvedEvent({resolutions:e.inputs.map(e=>{let t={kind:e.request.kind,outcome:e.outcome,requestId:e.request.requestId};return e.response===void 0?t:{...t,response:e.response}}),...e.event})}function reportApprovalProgress(e,t,n){let r=turnCoordinates(e),isOpen=t=>{let n=e.inputs[t];return n!==void 0&&n.status!==`settled`},i=[];for(let a of n){let n=t.candidateHistory.some(e=>e.candidateId===a.candidateId&&e.status===`timed-out`),o=e.authorizations[a.attemptId??a.name];n&&o?.status===`required`&&i.push(createAuthorizationCompletedEvent({...authorizationEventFields(a),outcome:`failed`,reason:`The approval response expired. Please submit a new response.`,...r}))}for(let n of t.activeCandidates)e.candidates[n.candidateId]===void 0&&isOpen(n.requestId)&&i.push(createApprovalCandidateEvent({candidateId:n.candidateId,outcome:`pending`,requestId:n.requestId,responderPrincipalId:n.responder.principalId,...r}));for(let n of t.candidateHistory)n.status!==`allowed`&&n.status!==`authorization-required`&&e.inputs[n.requestId]!==void 0&&e.candidates[n.candidateId]?.outcome!==n.status&&i.push(createApprovalCandidateEvent({candidateId:n.candidateId,outcome:n.status,requestId:n.requestId,responderPrincipalId:n.responder.principalId,reason:n.reason,...r}));for(let e of t.settlements)isOpen(e.requestId)&&i.push(createApprovalSettledEvent({outcome:e.outcome===`allowed`?`approved`:`cancelled`,requestId:e.requestId,responderPrincipalId:e.actor.principalId,...r}));return i}function hasRunnableQueue(e){let t=e.turn.queued;if(t===void 0)return!1;if(t.message!==void 0||(t.context?.length??0)>0||readClientContext(t)!==void 0||t.outputSchema!==void 0||(t.runtimeActionResults?.length??0)>0)return!0;let n=[...t.inputResponses??[],...(t.attributedInputResponses??[]).map(({response:e})=>e)];if(n.length===0)return!1;let r=new Set(n.map(e=>e.requestId)),i=openInputs(e.projection).find(e=>e.request.kind===`session-limit`);return i===void 0?e.turn.suspended.some(e=>e.requests.length>0&&e.requests.every(e=>r.has(e.requestId))):r.has(i.request.requestId)}function grantedApprovalKeys(e,t){let n=new Set(e.turn.grants);for(let r of e.turn.suspended)for(let e of r.requests)isApprovalRequest(e)&&n.delete(t(e)??e.action.toolName);return n}function approvingSteps(e,t){let n=e.turn.suspended.filter(e=>e.requests.length>0),r=new Map((t?.inputResponses??[]).map(e=>[e.requestId,e.optionId]));return n.filter(e=>e.requests.every(e=>r.has(e.requestId))&&e.requests.some(e=>isApprovalRequest(e)&&r.get(e.requestId)===`approve`))}function stepForRequest(e,t){return e.turn.suspended.find(e=>e.requests.some(e=>e.requestId===t))}function withdrawSignIns(e,t){return{events:e.signIns.flatMap(n=>{let r=e.projection.authorizations[n.attemptId??n.name];return r?.status===`required`?[signInWithdrawn(r,t)]:[]}),signIns:[],turn:e.turn}}function requestLimit(e,t){let n=turnPosition(e.projection);return{events:[createInputRequestedEvent({requests:[t.request],sequence:n.sequence,stepIndex:n.stepIndex,turnId:n.turnId}),...finishTurn(e).events],turn:e.turn}}function requireSignIn(e,t){let n=turnPosition(e.projection),r={sequence:n.sequence,stepIndex:n.stepIndex,turnId:n.turnId},i=[...supersededChallenges(e.signIns,t.challenges).map(e=>createAuthorizationCompletedEvent({...authorizationEventFields(e),outcome:`failed`,reason:`Superseded by a newer authorization attempt.`,...r})),...t.challenges.map(e=>createAuthorizationRequiredEvent({...authorizationEventFields(e),description:e.challenge.instructions??`Authorization required for ${e.name}`,webhookUrl:e.hookUrl,...r}))];i.push(...hold(e,{on:`input`}).events);let a=t.queued===void 0?e.turn.queued:e.turn.queued===void 0?t.queued:coalesceTurnInputs(e.turn.queued,t.queued),o=withSignIns(e.signIns,t.challenges),s=new Set([...t.callIdsByName?.values()??[]].flat()),c=e.turn.suspended.map(e=>[...stepCallIds(e)].some(e=>s.has(e))?{...e,messages:withoutCalls(e.messages,s)}:e);if(c.every((t,n)=>t===e.turn.suspended[n]))return{events:i,signIns:o,turn:{...e.turn,queued:a}};let l=settle({...e,turn:{...e.turn,queued:a,suspended:c}},{results:[]});return{commit:l.commit,events:i,signIns:o,turn:l.turn}}export{answer,approvingSteps,deferInput,dispatch,grantedApprovalKeys,hasRunnableQueue,parkOnApprovals,requestLimit,requireSignIn,stepForRequest,withdrawSignIns};
1
+ import{canonicalize,compactInput,hasInput,isEmptyInput,resolveTextInput,withoutResponses,withoutTurnInput}from"./delivery.js";import{openInputs,turnCoordinates}from"#protocol/session-projection.js";import{readClientContext}from"#internal/client-context.js";import{createActionResultEvent,createApprovalCandidateEvent,createApprovalSettledEvent,createAuthorizationCompletedEvent,createAuthorizationRequiredEvent,createInputRequestedEvent,createInputResolvedEvent,createMessageCompletedEvent}from"#protocol/message.js";import{coalesceTurnInputs,createFrameworkUserMessage}from"#harness/messages.js";import{turnPosition}from"#harness/session-machine/view.js";import{renderPendingApprovalsSnippet}from"#harness/hitl/approval-prompt.js";import{supersededChallenges,withSignIns}from"#harness/authorization.js";import{finishTurn,hold,ownOpenRequestIds,settle,stepCallIds,suspend,withResult,withoutApproved}from"#harness/session-machine/transitions.js";import{withoutCalls}from"#harness/inline-tool-authorization.js";import{isApprovalRequest}from"#harness/input-request-class.js";import{authorizationEventFields}from"#harness/authorization-event-fields.js";import{TOOL_EXECUTION_DENIED_MESSAGE,failedCall,resolveApprovalOutcome,resolveInputOutcome,unavailableToolMessage}from"#harness/input-request-resolution.js";import{resolveSessionLimitContinuation}from"#harness/hitl/budget-request.js";import{signInWithdrawn}from"#harness/session-machine/events.js";function parkOnApprovals(e,t){let n=t.requester?.principalType===`anonymous`?null:t.requester,r=t.messages.findIndex(e=>e.role!==`tool`),i=r===-1?t.messages:t.messages.slice(0,r),a=renderPendingApprovalsSnippet(t.requests),o=suspend(e.turn,{event:t.event,messages:t.messages.slice(i.length),requester:n,requests:t.requests,responseAuthRequiredRequestIds:t.responseAuthRequiredRequestIds,tasks:t.tasks});return{commit:[...i,...a===void 0?[]:[createFrameworkUserMessage(`context.state`,a)]],events:t.tasks.length>0?[]:[createInputRequestedEvent({requests:t.requests,...t.event})],turn:o}}function dispatch(e,t){let n=e.turn.suspended.map(e=>{let n=stepCallIds(e),r=t.tasks.filter(e=>n.has(e.callId));if(r.length===0)return e;let i=withoutApproved(e,new Set(r.map(e=>e.callId))),a={...e.approvers};for(let{callId:e}of r){let n=t.approvers[e];n!==void 0&&(a[e]=n)}return{...i,tasks:[...e.tasks,...r],...Object.keys(a).length>0&&{approvers:a}}});return{events:[],turn:{...e.turn,suspended:n}}}function deferInput(e,t){return{events:[],turn:withQueued(e.turn,t)}}function withQueued(e,t){return t===void 0||isEmptyInput(t)?e:{...e,queued:e.queued===void 0?t:coalesceTurnInputs(e.queued,t)}}function answer(e,t){let{policy:n}=t,{projection:r}=e,i=turnPosition(r),a=[...n.feedback.map(e=>createMessageCompletedEvent({message:e,sequence:i.sequence,stepIndex:i.stepIndex,turnId:i.turnId})),...reportApprovalProgress(r,n.audit,n.challengesAtStart)],o=t.takeQueued?{...e.turn,queued:void 0}:e.turn,done=e=>({events:a,resolved:[],turn:o,...e}),queue=e=>{o=withQueued(o,e)};if(n.kind===`park`)return done({next:`park`});if(n.kind===`continue-coordination`)return queue(n.stepInput),done({next:`repeat`});if(n.challenges.length>0)return done({next:`sign-in`});let s=t.delivery,c=openInputs(r).find(t=>t.request.kind===`session-limit`&&ownOpenRequestIds(e).has(t.request.requestId)),l=o.suspended.filter(e=>e.requests.length>0);if(c===void 0&&l.length===0)return done({input:s,next:`continue`});let u=c===void 0?s:resolveTextInput({requests:[c.request]},s),d=canonicalize(u?.inputResponses??[]),f=new Map(d.map(e=>[e.requestId,e])),p=l.filter(e=>e.requests.every(e=>f.has(e.requestId))),leftoverFor=e=>d.filter(t=>e.some(e=>e.requests.some(e=>e.requestId===t.requestId))),park=()=>(queue(compactInput(u)),done({next:`park`}));if(d.length===0&&u?.message===void 0)return park();if(c!==void 0){let e=f.get(c.request.requestId);if(e===void 0)return hasInput(s)?(queue(withoutTurnInput(u)),done({input:u,next:`defer-message`})):(queue(compactInput(u)),done({next:`park`}));let t={event:{sequence:c.sequence,stepIndex:c.stepIndex,turnId:c.turnId},inputs:[{outcome:resolveInputOutcome(c.request.kind,e),request:c.request,response:e}]};a.push(resolvedEvent(t));let n=leftoverFor(l);return n.length>0&&queue({inputResponses:n}),done({consumedMessage:u?.messageConsumed,input:withoutResponses(u),limit:resolveSessionLimitContinuation({requests:[c.request],responses:d}),next:`continue`,resolved:[t]})}if(p.length===0&&u?.message===void 0)return park();p.length===0&&p.push(l[0]);let m=leftoverFor(l.filter(e=>!p.includes(e)));m.length>0&&queue({inputResponses:m});let h=new Set(o.grants),g=[],_=[],v=new Set(n.audit.settlements.filter(e=>e.outcome===`unavailable`).map(e=>e.requestId)),y=o.suspended.map(e=>{if(!p.includes(e))return e;let n=e.messages,r=[];for(let i of e.requests){let{callId:a,toolName:o}=i.action;if(v.has(i.requestId)){let r=failedCall({callId:a,message:unavailableToolMessage(o,t.searchable(i)),toolName:o});n=withResult(n,r.part),_.push(createActionResultEvent({result:r.result,...e.event}));continue}let{approved:s,reason:c,status:l}=resolveApprovalOutcome(f.get(i.requestId));if(s){h.add(t.approvalKey(i)??o),r.push(i);continue}n=withResult(n,{output:{reason:c,type:`execution-denied`},toolCallId:a,toolName:o,type:`tool-result`}),_.push(createActionResultEvent({rejected:!0,result:{callId:a,isError:!0,kind:`tool-result`,output:{approval:{requestId:i.requestId,status:l},code:`TOOL_EXECUTION_DENIED`,message:c??TOOL_EXECUTION_DENIED_MESSAGE,tool:{result:`not_run`}},toolName:o},...e.event}))}g.push({event:e.event,inputs:e.requests.map(e=>{let t=f.get(e.requestId);return{outcome:resolveInputOutcome(e.kind,t),request:e,response:t}})});let i=[...e.approved??[],...r];return{...e,messages:n,requests:[],...i.length>0&&{approved:i}}});return a.push(...g.map(resolvedEvent),..._),o={...o,grants:[...h],suspended:y},done({consumedMessage:u?.messageConsumed,input:withoutResponses(u),next:`continue`,resolved:g})}function resolvedEvent(e){return createInputResolvedEvent({resolutions:e.inputs.map(e=>{let t={kind:e.request.kind,outcome:e.outcome,requestId:e.request.requestId};return e.response===void 0?t:{...t,response:e.response}}),...e.event})}function reportApprovalProgress(e,t,n){let r=turnCoordinates(e),isOpen=t=>{let n=e.inputs[t];return n!==void 0&&n.status!==`settled`},i=[];for(let a of n){let n=t.candidateHistory.some(e=>e.candidateId===a.candidateId&&e.status===`timed-out`),o=e.authorizations[a.attemptId??a.name];n&&o?.status===`required`&&i.push(createAuthorizationCompletedEvent({...authorizationEventFields(a),outcome:`failed`,reason:`The approval response expired. Please submit a new response.`,...r}))}for(let n of t.activeCandidates)e.candidates[n.candidateId]===void 0&&isOpen(n.requestId)&&i.push(createApprovalCandidateEvent({candidateId:n.candidateId,outcome:`pending`,requestId:n.requestId,responderPrincipalId:n.responder.principalId,...r}));for(let n of t.candidateHistory)n.status!==`allowed`&&n.status!==`authorization-required`&&e.inputs[n.requestId]!==void 0&&e.candidates[n.candidateId]?.outcome!==n.status&&i.push(createApprovalCandidateEvent({candidateId:n.candidateId,outcome:n.status,requestId:n.requestId,responderPrincipalId:n.responder.principalId,reason:n.reason,...r}));for(let e of t.settlements)isOpen(e.requestId)&&e.outcome!==`unavailable`&&i.push(createApprovalSettledEvent({outcome:e.outcome===`allowed`?`approved`:`cancelled`,requestId:e.requestId,responderPrincipalId:e.actor.principalId,...r}));return i}function hasRunnableQueue(e){let t=e.turn.queued;if(t===void 0)return!1;if(t.message!==void 0||(t.context?.length??0)>0||readClientContext(t)!==void 0||t.outputSchema!==void 0||(t.runtimeActionResults?.length??0)>0)return!0;let n=[...t.inputResponses??[],...(t.attributedInputResponses??[]).map(({response:e})=>e)];if(n.length===0)return!1;let r=new Set(n.map(e=>e.requestId)),i=openInputs(e.projection).find(e=>e.request.kind===`session-limit`);return i===void 0?e.turn.suspended.some(e=>e.requests.length>0&&e.requests.every(e=>r.has(e.requestId))):r.has(i.request.requestId)}function grantedApprovalKeys(e,t){let n=new Set(e.turn.grants);for(let r of e.turn.suspended)for(let e of r.requests)isApprovalRequest(e)&&n.delete(t(e)??e.action.toolName);return n}function approvingSteps(e,t){let n=e.turn.suspended.filter(e=>e.requests.length>0),r=new Map((t?.inputResponses??[]).map(e=>[e.requestId,e.optionId]));return n.filter(e=>e.requests.every(e=>r.has(e.requestId))&&e.requests.some(e=>isApprovalRequest(e)&&r.get(e.requestId)===`approve`))}function stepForRequest(e,t){return e.turn.suspended.find(e=>e.requests.some(e=>e.requestId===t))}function withdrawSignIns(e,t){return{events:e.signIns.flatMap(n=>{let r=e.projection.authorizations[n.attemptId??n.name];return r?.status===`required`?[signInWithdrawn(r,t)]:[]}),signIns:[],turn:e.turn}}function requestLimit(e,t){let n=turnPosition(e.projection);return{events:[createInputRequestedEvent({requests:[t.request],sequence:n.sequence,stepIndex:n.stepIndex,turnId:n.turnId}),...finishTurn(e).events],turn:e.turn}}function requireSignIn(e,t){let n=turnPosition(e.projection),r={sequence:n.sequence,stepIndex:n.stepIndex,turnId:n.turnId},i=[...supersededChallenges(e.signIns,t.challenges).map(e=>createAuthorizationCompletedEvent({...authorizationEventFields(e),outcome:`failed`,reason:`Superseded by a newer authorization attempt.`,...r})),...t.challenges.map(e=>createAuthorizationRequiredEvent({...authorizationEventFields(e),description:e.challenge.instructions??`Authorization required for ${e.name}`,webhookUrl:e.hookUrl,...r}))];i.push(...hold(e,{on:`input`}).events);let a=t.queued===void 0?e.turn.queued:e.turn.queued===void 0?t.queued:coalesceTurnInputs(e.turn.queued,t.queued),o=withSignIns(e.signIns,t.challenges),s=new Set([...t.callIdsByName?.values()??[]].flat()),c=e.turn.suspended.map(e=>[...stepCallIds(e)].some(e=>s.has(e))?{...e,messages:withoutCalls(e.messages,s)}:e);if(c.every((t,n)=>t===e.turn.suspended[n]))return{events:i,signIns:o,turn:{...e.turn,queued:a}};let l=settle({...e,turn:{...e.turn,queued:a,suspended:c}},{results:[]});return{commit:l.commit,events:i,signIns:o,turn:l.turn}}export{answer,approvingSteps,deferInput,dispatch,grantedApprovalKeys,hasRunnableQueue,parkOnApprovals,requestLimit,requireSignIn,stepForRequest,withdrawSignIns};
@@ -1,5 +1,5 @@
1
1
  import { type ModelMessage, type TelemetryOptions, type ToolSet, type TypedToolResult } from "ai";
2
- import type { HarnessToolMap } from "#harness/types.js";
2
+ import type { HarnessToolLookup } from "#harness/types.js";
3
3
  import type { InputRequest } from "#shared/input.js";
4
4
  import type { HandleEventFn } from "#harness/types.js";
5
5
  type ToolResponsePart = Extract<ModelMessage, {
@@ -19,7 +19,8 @@ export declare const APPROVED_CALL_INTERRUPTED_MESSAGE = "The turn was cancelled
19
19
  */
20
20
  export declare function runApprovedCalls(input: {
21
21
  readonly requests: readonly InputRequest[];
22
- readonly tools: HarnessToolMap;
22
+ /** The entries of the step that asked, which the approved calls run. */
23
+ readonly tools: HarnessToolLookup;
23
24
  readonly approvedTools?: ReadonlySet<string>;
24
25
  /** The conversation the tools read as `ctx.messages`. */
25
26
  readonly messages: readonly ModelMessage[];
@@ -1 +1 @@
1
- import{asSchema}from"ai";import{createLogger,logError}from"#internal/logging.js";import{toError}from"#shared/errors.js";import{createActionPartialEvent,createActionResultEvent}from"#protocol/message.js";import{parseJsonObject}from"#shared/json.js";import{isAsyncIterable}from"#shared/async-iterable.js";import{throwIfTurnAborted}from"#harness/turn-cancellation.js";import{createRuntimeToolResultFromValue}from"#harness/action-result-helpers.js";import{emitNestedToolActions}from"#harness/nested-actions.js";import{projectDeltaPresentation,projectResultPresentation}from"#harness/tool-presentation.js";import{isInlineAuthorizationToolResult}from"#harness/inline-tool-authorization.js";import{TOOL_EXECUTION_DENIED_MESSAGE}from"#harness/input-request-resolution.js";import{buildToolSet,recheckApprovedCall}from"#harness/tools.js";const log=createLogger(`harness.tool-loop`),APPROVED_CALL_INTERRUPTED_MESSAGE=`The turn was cancelled while this approved tool call was running. It may have partially run; it was not retried.`;async function runApprovedCalls(e){let t=buildToolSet({tools:e.tools,approvedTools:e.approvedTools}),n=e.requests.map(n=>{let r=e.tools.get(n.action.toolName),i=t[n.action.toolName];if(r?.execute===void 0||i?.execute===void 0||i.toModelOutput===void 0)throw Error(`The approved tool is no longer available. Request a new tool call and approval.`);return{request:n,definition:r,tool:i}}),r={sequence:e.position.sequence,stepIndex:e.position.stepIndex,turnId:e.position.turnId},i=await Promise.allSettled(n.map(async({request:t,definition:n,tool:i})=>{let a=[],o=[],{callId:s,toolName:c,input:l}=t.action,u=!1,d;try{if(throwIfTurnAborted(e.abortSignal),(await asSchema(i.inputSchema).validate?.(l))?.success===!1){let t=`The approved input is no longer valid for tool "${c}". Request a new tool call and approval.`;return await e.publish(createActionResultEvent({...r,result:createRuntimeToolResultFromValue({callId:s,isError:!0,output:t,toolName:c})})),{settled:[{part:{type:`tool-result`,toolCallId:s,toolName:c,output:{type:`error-text`,value:t}}}],toolResults:o}}let t=await recheckApprovedCall(n,{abortSignal:e.abortSignal,callId:s,input:l,approvedTools:e.approvedTools});if(t.denied)return await e.publish(createActionResultEvent({...r,rejected:!0,result:{callId:s,isError:!0,kind:`tool-result`,output:{code:`TOOL_EXECUTION_DENIED`,message:t.reason??TOOL_EXECUTION_DENIED_MESSAGE,tool:{result:`not_run`}},toolName:c}})),a.push({part:{output:{reason:t.reason,type:`execution-denied`},toolCallId:s,toolName:c,type:`tool-result`}}),{settled:a,toolResults:o};let f,p=!1,m=toolTelemetry(e.telemetry,{messages:[...e.messages],toolCall:{input:l,toolCallId:s,toolName:c,type:`tool-call`}});await m.started();let h=0;try{await m.execute(async()=>{let t=performance.now();try{u=!0;let t=i.execute(l,{abortSignal:e.abortSignal,context:void 0,messages:[...e.messages],toolCallId:s});if(isAsyncIterable(t))for await(let i of t)f=i,await e.publish(createActionPartialEvent({...r,presentation:projectDeltaPresentation(n,s,parseJsonObject(l),i),result:createRuntimeToolResultFromValue({callId:s,output:i,toolName:c})}));else f=await t}finally{h=performance.now()-t}})}catch(t){await m.ended({error:t,input:l,toolCallId:s,toolName:c,type:`tool-error`},h),throwIfTurnAborted(e.abortSignal),logError(log,`tool execution failed`,t,{toolName:c,toolCallId:s}),p=!0,f=toError(t).message}p||await m.ended({input:l,output:f,toolCallId:s,toolName:c,type:`tool-result`},h);let g={input:l,output:f,toolCallId:s,toolName:c,type:`tool-result`};return o.push(g),isInlineAuthorizationToolResult(g)?{settled:a,toolResults:o}:(await emitNestedToolActions(e.publish,e.position,s),d={part:{output:p?{type:`error-text`,value:String(f)}:await i.toModelOutput({input:l,output:f,toolCallId:s}),toolCallId:s,toolName:c,type:`tool-result`}},a.push(d),await e.publish(createActionResultEvent({...r,presentation:p?void 0:projectResultPresentation(n,s,parseJsonObject(l),f),result:createRuntimeToolResultFromValue({callId:s,isError:p,output:f,toolName:c})})),{settled:a,toolResults:o})}catch(t){if(e.abortSignal?.aborted===!0)return u||throwIfTurnAborted(e.abortSignal),d===void 0?{settled:[interruptedResult(s,c)],toolResults:o}:{settled:[d],toolResults:o};let n=toError(t).message;return logError(log,`approved tool failed`,t,{toolName:c,toolCallId:s}),await e.publish(createActionResultEvent({...r,result:createRuntimeToolResultFromValue({callId:s,isError:!0,output:n,toolName:c})})),{settled:[{part:{type:`tool-result`,toolCallId:s,toolName:c,output:{type:`error-text`,value:n}}}],toolResults:o}}})),a=i.find(e=>e.status===`rejected`);if(a?.status===`rejected`&&e.abortSignal?.aborted!==!0)throw a.reason;let o=i.flatMap(e=>e.status===`fulfilled`?[e.value]:[]);return{settled:o.flatMap(e=>e.settled),toolResults:o.flatMap(e=>e.toolResults)}}function interruptedResult(e,t){return{part:{output:{type:`error-text`,value:APPROVED_CALL_INTERRUPTED_MESSAGE},toolCallId:e,toolName:t,type:`tool-result`}}}function toolTelemetry(e,t){let n=e===void 0||e.isEnabled===!1?[]:[e.integrations??[]].flat(),r={...t,callId:`approved:${t.toolCall.toolCallId}`,functionId:e?.functionId,recordInputs:e?.recordInputs,recordOutputs:e?.recordOutputs,toolContext:void 0},notify=async e=>{await Promise.allSettled(n.map(async t=>await e(t)))};return{started:()=>notify(e=>e.onToolExecutionStart?.(r)),execute:async e=>{let wrapped=e;for(let e of n){if(e.executeTool===void 0)continue;let n=wrapped;wrapped=()=>e.executeTool({...r,execute:n,toolCallId:t.toolCall.toolCallId})}await wrapped()},ended:(e,t)=>notify(n=>n.onToolExecutionEnd?.({...r,toolExecutionMs:t,toolOutput:e}))}}export{APPROVED_CALL_INTERRUPTED_MESSAGE,runApprovedCalls};
1
+ import{asSchema}from"ai";import{createLogger,logError}from"#internal/logging.js";import{toError}from"#shared/errors.js";import{createActionPartialEvent,createActionResultEvent}from"#protocol/message.js";import{SEARCH_TOOL_NAME}from"#protocol/catalog-tools.js";import{toModelSchema}from"#tools/schema.js";import{parseJsonObject}from"#shared/json.js";import{toolCallModelOutput}from"#harness/tool-call-io.js";import{isAsyncIterable}from"#shared/async-iterable.js";import{throwIfTurnAborted}from"#harness/turn-cancellation.js";import{createRuntimeToolResultFromValue}from"#harness/action-result-helpers.js";import{projectDeltaPresentation,projectResultPresentation}from"#harness/tool-presentation.js";import{isInlineAuthorizationToolResult}from"#harness/inline-tool-authorization.js";import{TOOL_EXECUTION_DENIED_MESSAGE,failedCall,unavailableToolMessage}from"#harness/input-request-resolution.js";import{recheckApprovedCall,wrapToolExecute}from"#harness/tools.js";const log=createLogger(`harness.tool-loop`),APPROVED_CALL_INTERRUPTED_MESSAGE=`The turn was cancelled while this approved tool call was running. It may have partially run; it was not retried.`;async function runApprovedCalls(e){let t={sequence:e.position.sequence,stepIndex:e.position.stepIndex,turnId:e.position.turnId},settleFailure=async(n,r,i)=>{let a=failedCall({callId:n,message:i,toolName:r});return await e.publish(createActionResultEvent({...t,result:a.result})),{part:a.part}},n=await Promise.allSettled(e.requests.map(async n=>{let r=[],i=[],{callId:a,toolName:o,input:s}=n.action,c=e.tools.get(o),l=c===void 0?void 0:wrapToolExecute(c),u=!1,d;try{if(throwIfTurnAborted(e.abortSignal),c===void 0||l===void 0)return{settled:[await settleFailure(a,o,unavailableToolMessage(o,e.tools.get(SEARCH_TOOL_NAME)!==void 0))],toolResults:i};if((await asSchema(toModelSchema(c.inputSchema,`input`)).validate?.(s))?.success===!1){let e=`The approved input is no longer valid for tool "${o}". Request a new tool call and approval.`;return{settled:[await settleFailure(a,o,e)],toolResults:i}}let n=await recheckApprovedCall(c,{abortSignal:e.abortSignal,callId:a,input:s,approvedTools:e.approvedTools});if(n.denied)return await e.publish(createActionResultEvent({...t,rejected:!0,result:{callId:a,isError:!0,kind:`tool-result`,output:{code:`TOOL_EXECUTION_DENIED`,message:n.reason??TOOL_EXECUTION_DENIED_MESSAGE,tool:{result:`not_run`}},toolName:o}})),r.push({part:{output:{reason:n.reason,type:`execution-denied`},toolCallId:a,toolName:o,type:`tool-result`}}),{settled:r,toolResults:i};let f,p=!1,m=toolTelemetry(e.telemetry,{messages:[...e.messages],toolCall:{input:s,toolCallId:a,toolName:o,type:`tool-call`}});await m.started();let h=0;try{await m.execute(async()=>{let n=performance.now();try{u=!0;let n=l(s,{abortSignal:e.abortSignal,messages:[...e.messages],toolCallId:a});if(isAsyncIterable(n))for await(let r of n)f=r,await e.publish(createActionPartialEvent({...t,presentation:projectDeltaPresentation(c,a,parseJsonObject(s),r),result:createRuntimeToolResultFromValue({callId:a,output:r,toolName:o})}));else f=await n}finally{h=performance.now()-n}})}catch(t){await m.ended({error:t,input:s,toolCallId:a,toolName:o,type:`tool-error`},h),throwIfTurnAborted(e.abortSignal),logError(log,`tool execution failed`,t,{toolName:o,toolCallId:a}),p=!0,f=toError(t).message}p||await m.ended({input:s,output:f,toolCallId:a,toolName:o,type:`tool-result`},h);let g={input:s,output:f,toolCallId:a,toolName:o,type:`tool-result`};return i.push(g),isInlineAuthorizationToolResult(g)?{settled:r,toolResults:i}:(d={part:{output:p?{type:`error-text`,value:String(f)}:await toolCallModelOutput(c,f,a),toolCallId:a,toolName:o,type:`tool-result`}},r.push(d),await e.publish(createActionResultEvent({...t,presentation:p?void 0:projectResultPresentation(c,a,parseJsonObject(s),f),result:createRuntimeToolResultFromValue({callId:a,isError:p,output:f,toolName:o})})),{settled:r,toolResults:i})}catch(t){return e.abortSignal?.aborted===!0?(u||throwIfTurnAborted(e.abortSignal),d===void 0?{settled:[interruptedResult(a,o)],toolResults:i}:{settled:[d],toolResults:i}):(logError(log,`approved tool failed`,t,{toolName:o,toolCallId:a}),{settled:[await settleFailure(a,o,toError(t).message)],toolResults:i})}})),r=n.find(e=>e.status===`rejected`);if(r?.status===`rejected`&&e.abortSignal?.aborted!==!0)throw r.reason;let i=n.flatMap(e=>e.status===`fulfilled`?[e.value]:[]);return{settled:i.flatMap(e=>e.settled),toolResults:i.flatMap(e=>e.toolResults)}}function interruptedResult(e,t){return{part:{output:{type:`error-text`,value:APPROVED_CALL_INTERRUPTED_MESSAGE},toolCallId:e,toolName:t,type:`tool-result`}}}function toolTelemetry(e,t){let n=e===void 0||e.isEnabled===!1?[]:[e.integrations??[]].flat(),r={...t,callId:`approved:${t.toolCall.toolCallId}`,functionId:e?.functionId,recordInputs:e?.recordInputs,recordOutputs:e?.recordOutputs,toolContext:void 0},notify=async e=>{await Promise.allSettled(n.map(async t=>await e(t)))};return{started:()=>notify(e=>e.onToolExecutionStart?.(r)),execute:async e=>{let wrapped=e;for(let e of n){if(e.executeTool===void 0)continue;let n=wrapped;wrapped=()=>e.executeTool({...r,execute:n,toolCallId:t.toolCall.toolCallId})}await wrapped()},ended:(e,t)=>notify(n=>n.onToolExecutionEnd?.({...r,toolExecutionMs:t,toolOutput:e}))}}export{APPROVED_CALL_INTERRUPTED_MESSAGE,runApprovedCalls};
@@ -23,9 +23,10 @@ export interface ApprovalResponderIdentity {
23
23
  }
24
24
  export interface ApprovalSettlementAuditRecord {
25
25
  readonly actor: ApprovalResponderIdentity;
26
- /** The approver's full auth, which the approved call runs as. Absent for cancellations. */
26
+ /** The approver's full auth, which the approved call runs as. Present only when allowed. */
27
27
  readonly approver?: SessionAuthContext;
28
- readonly outcome: "allowed" | "cancelled";
28
+ /** `unavailable`: the request's entry was gone, so its call is reported unavailable, never run. */
29
+ readonly outcome: "allowed" | "cancelled" | "unavailable";
29
30
  readonly requestId: string;
30
31
  readonly settledAt: number;
31
32
  readonly candidateId?: string;
@@ -83,6 +84,16 @@ export declare function settleAllowedCandidate(input: {
83
84
  readonly settledAt: number;
84
85
  readonly state: SessionStateMap | undefined;
85
86
  }): ApprovalStateTransition;
87
+ /**
88
+ * Settles a request whose entry is gone, which no response can approve and no call can run: the
89
+ * candidate fails with `reason`, its competitors go stale, and the call is reported unavailable.
90
+ */
91
+ export declare function settleUnavailableCandidate(input: {
92
+ readonly candidateId: string;
93
+ readonly reason: string;
94
+ readonly settledAt: number;
95
+ readonly state: SessionStateMap | undefined;
96
+ }): ApprovalStateTransition;
86
97
  /** Atomically settles a direct authenticated approval response. */
87
98
  export declare function settleDirectApprovalResponse(input: {
88
99
  readonly actor: SessionAuthContext;