@assemblyline-agents/runtime 0.1.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 (331) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +19 -0
  3. package/dist/agent-harness.d.ts +108 -0
  4. package/dist/agent-harness.d.ts.map +1 -0
  5. package/dist/agent-harness.js +2 -0
  6. package/dist/agent-harness.js.map +1 -0
  7. package/dist/attachments-legacy.d.ts +17 -0
  8. package/dist/attachments-legacy.d.ts.map +1 -0
  9. package/dist/attachments-legacy.js +273 -0
  10. package/dist/attachments-legacy.js.map +1 -0
  11. package/dist/attachments.d.ts +49 -0
  12. package/dist/attachments.d.ts.map +1 -0
  13. package/dist/attachments.js +832 -0
  14. package/dist/attachments.js.map +1 -0
  15. package/dist/builtin-tool-executors.d.ts +96 -0
  16. package/dist/builtin-tool-executors.d.ts.map +1 -0
  17. package/dist/builtin-tool-executors.js +501 -0
  18. package/dist/builtin-tool-executors.js.map +1 -0
  19. package/dist/builtin-tools.d.ts +30 -0
  20. package/dist/builtin-tools.d.ts.map +1 -0
  21. package/dist/builtin-tools.js +690 -0
  22. package/dist/builtin-tools.js.map +1 -0
  23. package/dist/capability-catalog.d.ts +27 -0
  24. package/dist/capability-catalog.d.ts.map +1 -0
  25. package/dist/capability-catalog.js +193 -0
  26. package/dist/capability-catalog.js.map +1 -0
  27. package/dist/channel-http-util.d.ts +34 -0
  28. package/dist/channel-http-util.d.ts.map +1 -0
  29. package/dist/channel-http-util.js +93 -0
  30. package/dist/channel-http-util.js.map +1 -0
  31. package/dist/channel-ingress.d.ts +56 -0
  32. package/dist/channel-ingress.d.ts.map +1 -0
  33. package/dist/channel-ingress.js +273 -0
  34. package/dist/channel-ingress.js.map +1 -0
  35. package/dist/channel.d.ts +146 -0
  36. package/dist/channel.d.ts.map +1 -0
  37. package/dist/channel.js +2 -0
  38. package/dist/channel.js.map +1 -0
  39. package/dist/checkpoints.d.ts +34 -0
  40. package/dist/checkpoints.d.ts.map +1 -0
  41. package/dist/checkpoints.js +86 -0
  42. package/dist/checkpoints.js.map +1 -0
  43. package/dist/code-mode.d.ts +20 -0
  44. package/dist/code-mode.d.ts.map +1 -0
  45. package/dist/code-mode.js +658 -0
  46. package/dist/code-mode.js.map +1 -0
  47. package/dist/computer-relay-protocol.d.ts +36 -0
  48. package/dist/computer-relay-protocol.d.ts.map +1 -0
  49. package/dist/computer-relay-protocol.js +127 -0
  50. package/dist/computer-relay-protocol.js.map +1 -0
  51. package/dist/concurrency.d.ts +68 -0
  52. package/dist/concurrency.d.ts.map +1 -0
  53. package/dist/concurrency.js +193 -0
  54. package/dist/concurrency.js.map +1 -0
  55. package/dist/connection-auth-util.d.ts +56 -0
  56. package/dist/connection-auth-util.d.ts.map +1 -0
  57. package/dist/connection-auth-util.js +154 -0
  58. package/dist/connection-auth-util.js.map +1 -0
  59. package/dist/connection-clients.d.ts +50 -0
  60. package/dist/connection-clients.d.ts.map +1 -0
  61. package/dist/connection-clients.js +402 -0
  62. package/dist/connection-clients.js.map +1 -0
  63. package/dist/connection-stores.d.ts +108 -0
  64. package/dist/connection-stores.d.ts.map +1 -0
  65. package/dist/connection-stores.js +127 -0
  66. package/dist/connection-stores.js.map +1 -0
  67. package/dist/connection-util.d.ts +27 -0
  68. package/dist/connection-util.d.ts.map +1 -0
  69. package/dist/connection-util.js +118 -0
  70. package/dist/connection-util.js.map +1 -0
  71. package/dist/connections.d.ts +152 -0
  72. package/dist/connections.d.ts.map +1 -0
  73. package/dist/connections.js +838 -0
  74. package/dist/connections.js.map +1 -0
  75. package/dist/content-capture.d.ts +32 -0
  76. package/dist/content-capture.d.ts.map +1 -0
  77. package/dist/content-capture.js +77 -0
  78. package/dist/content-capture.js.map +1 -0
  79. package/dist/context-policy-util.d.ts +45 -0
  80. package/dist/context-policy-util.d.ts.map +1 -0
  81. package/dist/context-policy-util.js +120 -0
  82. package/dist/context-policy-util.js.map +1 -0
  83. package/dist/conversation-context.d.ts +55 -0
  84. package/dist/conversation-context.d.ts.map +1 -0
  85. package/dist/conversation-context.js +179 -0
  86. package/dist/conversation-context.js.map +1 -0
  87. package/dist/conversation-transcript.d.ts +49 -0
  88. package/dist/conversation-transcript.d.ts.map +1 -0
  89. package/dist/conversation-transcript.js +77 -0
  90. package/dist/conversation-transcript.js.map +1 -0
  91. package/dist/conversation-turn-dispatch.d.ts +46 -0
  92. package/dist/conversation-turn-dispatch.d.ts.map +1 -0
  93. package/dist/conversation-turn-dispatch.js +201 -0
  94. package/dist/conversation-turn-dispatch.js.map +1 -0
  95. package/dist/delivery-queue.d.ts +89 -0
  96. package/dist/delivery-queue.d.ts.map +1 -0
  97. package/dist/delivery-queue.js +244 -0
  98. package/dist/delivery-queue.js.map +1 -0
  99. package/dist/delivery-send.d.ts +44 -0
  100. package/dist/delivery-send.d.ts.map +1 -0
  101. package/dist/delivery-send.js +494 -0
  102. package/dist/delivery-send.js.map +1 -0
  103. package/dist/env-config.d.ts +6 -0
  104. package/dist/env-config.d.ts.map +1 -0
  105. package/dist/env-config.js +27 -0
  106. package/dist/env-config.js.map +1 -0
  107. package/dist/eval-run-options.d.ts +37 -0
  108. package/dist/eval-run-options.d.ts.map +1 -0
  109. package/dist/eval-run-options.js +106 -0
  110. package/dist/eval-run-options.js.map +1 -0
  111. package/dist/harness-continuation.d.ts +54 -0
  112. package/dist/harness-continuation.d.ts.map +1 -0
  113. package/dist/harness-continuation.js +58 -0
  114. package/dist/harness-continuation.js.map +1 -0
  115. package/dist/harness-loop.d.ts +110 -0
  116. package/dist/harness-loop.d.ts.map +1 -0
  117. package/dist/harness-loop.js +575 -0
  118. package/dist/harness-loop.js.map +1 -0
  119. package/dist/hook-dispatch.d.ts +19 -0
  120. package/dist/hook-dispatch.d.ts.map +1 -0
  121. package/dist/hook-dispatch.js +37 -0
  122. package/dist/hook-dispatch.js.map +1 -0
  123. package/dist/http.d.ts +26 -0
  124. package/dist/http.d.ts.map +1 -0
  125. package/dist/http.js +114 -0
  126. package/dist/http.js.map +1 -0
  127. package/dist/in-memory-conversation-turn-store.d.ts +29 -0
  128. package/dist/in-memory-conversation-turn-store.d.ts.map +1 -0
  129. package/dist/in-memory-conversation-turn-store.js +166 -0
  130. package/dist/in-memory-conversation-turn-store.js.map +1 -0
  131. package/dist/in-memory-run-store.d.ts +39 -0
  132. package/dist/in-memory-run-store.d.ts.map +1 -0
  133. package/dist/in-memory-run-store.js +332 -0
  134. package/dist/in-memory-run-store.js.map +1 -0
  135. package/dist/in-memory-sandbox-session-store.d.ts +33 -0
  136. package/dist/in-memory-sandbox-session-store.d.ts.map +1 -0
  137. package/dist/in-memory-sandbox-session-store.js +186 -0
  138. package/dist/in-memory-sandbox-session-store.js.map +1 -0
  139. package/dist/in-memory-small-stores.d.ts +117 -0
  140. package/dist/in-memory-small-stores.d.ts.map +1 -0
  141. package/dist/in-memory-small-stores.js +340 -0
  142. package/dist/in-memory-small-stores.js.map +1 -0
  143. package/dist/in-memory-usage-store.d.ts +15 -0
  144. package/dist/in-memory-usage-store.d.ts.map +1 -0
  145. package/dist/in-memory-usage-store.js +49 -0
  146. package/dist/in-memory-usage-store.js.map +1 -0
  147. package/dist/index.d.ts +467 -0
  148. package/dist/index.d.ts.map +1 -0
  149. package/dist/index.js +2046 -0
  150. package/dist/index.js.map +1 -0
  151. package/dist/json-util.d.ts +19 -0
  152. package/dist/json-util.d.ts.map +1 -0
  153. package/dist/json-util.js +59 -0
  154. package/dist/json-util.js.map +1 -0
  155. package/dist/local-sandbox.d.ts +16 -0
  156. package/dist/local-sandbox.d.ts.map +1 -0
  157. package/dist/local-sandbox.js +327 -0
  158. package/dist/local-sandbox.js.map +1 -0
  159. package/dist/logging.d.ts +16 -0
  160. package/dist/logging.d.ts.map +1 -0
  161. package/dist/logging.js +41 -0
  162. package/dist/logging.js.map +1 -0
  163. package/dist/mcp-client.d.ts +27 -0
  164. package/dist/mcp-client.d.ts.map +1 -0
  165. package/dist/mcp-client.js +169 -0
  166. package/dist/mcp-client.js.map +1 -0
  167. package/dist/model-harnesses.d.ts +4 -0
  168. package/dist/model-harnesses.d.ts.map +1 -0
  169. package/dist/model-harnesses.js +6 -0
  170. package/dist/model-harnesses.js.map +1 -0
  171. package/dist/model-media.d.ts +36 -0
  172. package/dist/model-media.d.ts.map +1 -0
  173. package/dist/model-media.js +234 -0
  174. package/dist/model-media.js.map +1 -0
  175. package/dist/operator-controls.d.ts +31 -0
  176. package/dist/operator-controls.d.ts.map +1 -0
  177. package/dist/operator-controls.js +71 -0
  178. package/dist/operator-controls.js.map +1 -0
  179. package/dist/pi-agent-harness.d.ts +40 -0
  180. package/dist/pi-agent-harness.d.ts.map +1 -0
  181. package/dist/pi-agent-harness.js +222 -0
  182. package/dist/pi-agent-harness.js.map +1 -0
  183. package/dist/pi-harness.d.ts +42 -0
  184. package/dist/pi-harness.d.ts.map +1 -0
  185. package/dist/pi-harness.js +142 -0
  186. package/dist/pi-harness.js.map +1 -0
  187. package/dist/relay-mcp-client.d.ts +17 -0
  188. package/dist/relay-mcp-client.d.ts.map +1 -0
  189. package/dist/relay-mcp-client.js +119 -0
  190. package/dist/relay-mcp-client.js.map +1 -0
  191. package/dist/replay-resume.d.ts +107 -0
  192. package/dist/replay-resume.d.ts.map +1 -0
  193. package/dist/replay-resume.js +495 -0
  194. package/dist/replay-resume.js.map +1 -0
  195. package/dist/resource-projection-util.d.ts +58 -0
  196. package/dist/resource-projection-util.d.ts.map +1 -0
  197. package/dist/resource-projection-util.js +298 -0
  198. package/dist/resource-projection-util.js.map +1 -0
  199. package/dist/resource-projection.d.ts +45 -0
  200. package/dist/resource-projection.d.ts.map +1 -0
  201. package/dist/resource-projection.js +481 -0
  202. package/dist/resource-projection.js.map +1 -0
  203. package/dist/run-heartbeat.d.ts +34 -0
  204. package/dist/run-heartbeat.d.ts.map +1 -0
  205. package/dist/run-heartbeat.js +62 -0
  206. package/dist/run-heartbeat.js.map +1 -0
  207. package/dist/run-outcome.d.ts +47 -0
  208. package/dist/run-outcome.d.ts.map +1 -0
  209. package/dist/run-outcome.js +92 -0
  210. package/dist/run-outcome.js.map +1 -0
  211. package/dist/run-recovery.d.ts +117 -0
  212. package/dist/run-recovery.d.ts.map +1 -0
  213. package/dist/run-recovery.js +466 -0
  214. package/dist/run-recovery.js.map +1 -0
  215. package/dist/run-resolver.d.ts +35 -0
  216. package/dist/run-resolver.d.ts.map +1 -0
  217. package/dist/run-resolver.js +84 -0
  218. package/dist/run-resolver.js.map +1 -0
  219. package/dist/run-stream.d.ts +37 -0
  220. package/dist/run-stream.d.ts.map +1 -0
  221. package/dist/run-stream.js +78 -0
  222. package/dist/run-stream.js.map +1 -0
  223. package/dist/runs-query.d.ts +29 -0
  224. package/dist/runs-query.d.ts.map +1 -0
  225. package/dist/runs-query.js +142 -0
  226. package/dist/runs-query.js.map +1 -0
  227. package/dist/runtime-bundle.d.ts +3 -0
  228. package/dist/runtime-bundle.d.ts.map +1 -0
  229. package/dist/runtime-bundle.js +18 -0
  230. package/dist/runtime-bundle.js.map +1 -0
  231. package/dist/runtime-types.d.ts +397 -0
  232. package/dist/runtime-types.d.ts.map +1 -0
  233. package/dist/runtime-types.js +2 -0
  234. package/dist/runtime-types.js.map +1 -0
  235. package/dist/runtime-util.d.ts +45 -0
  236. package/dist/runtime-util.d.ts.map +1 -0
  237. package/dist/runtime-util.js +116 -0
  238. package/dist/runtime-util.js.map +1 -0
  239. package/dist/sandbox-cli-client.d.ts +20 -0
  240. package/dist/sandbox-cli-client.d.ts.map +1 -0
  241. package/dist/sandbox-cli-client.js +97 -0
  242. package/dist/sandbox-cli-client.js.map +1 -0
  243. package/dist/sandbox-fs.d.ts +56 -0
  244. package/dist/sandbox-fs.d.ts.map +1 -0
  245. package/dist/sandbox-fs.js +276 -0
  246. package/dist/sandbox-fs.js.map +1 -0
  247. package/dist/sandbox-session-key.d.ts +8 -0
  248. package/dist/sandbox-session-key.d.ts.map +1 -0
  249. package/dist/sandbox-session-key.js +32 -0
  250. package/dist/sandbox-session-key.js.map +1 -0
  251. package/dist/sandbox-snapshot-policy.d.ts +27 -0
  252. package/dist/sandbox-snapshot-policy.d.ts.map +1 -0
  253. package/dist/sandbox-snapshot-policy.js +94 -0
  254. package/dist/sandbox-snapshot-policy.js.map +1 -0
  255. package/dist/sandbox-sync-worker.d.ts +63 -0
  256. package/dist/sandbox-sync-worker.d.ts.map +1 -0
  257. package/dist/sandbox-sync-worker.js +448 -0
  258. package/dist/sandbox-sync-worker.js.map +1 -0
  259. package/dist/schedule-execution.d.ts +59 -0
  260. package/dist/schedule-execution.d.ts.map +1 -0
  261. package/dist/schedule-execution.js +951 -0
  262. package/dist/schedule-execution.js.map +1 -0
  263. package/dist/scheduler.d.ts +19 -0
  264. package/dist/scheduler.d.ts.map +1 -0
  265. package/dist/scheduler.js +38 -0
  266. package/dist/scheduler.js.map +1 -0
  267. package/dist/security.d.ts +20 -0
  268. package/dist/security.d.ts.map +1 -0
  269. package/dist/security.js +145 -0
  270. package/dist/security.js.map +1 -0
  271. package/dist/self-improvement.d.ts +245 -0
  272. package/dist/self-improvement.d.ts.map +1 -0
  273. package/dist/self-improvement.js +554 -0
  274. package/dist/self-improvement.js.map +1 -0
  275. package/dist/source-loader.d.ts +19 -0
  276. package/dist/source-loader.d.ts.map +1 -0
  277. package/dist/source-loader.js +160 -0
  278. package/dist/source-loader.js.map +1 -0
  279. package/dist/state-store-helpers.d.ts +28 -0
  280. package/dist/state-store-helpers.d.ts.map +1 -0
  281. package/dist/state-store-helpers.js +164 -0
  282. package/dist/state-store-helpers.js.map +1 -0
  283. package/dist/state-stores.d.ts +25 -0
  284. package/dist/state-stores.d.ts.map +1 -0
  285. package/dist/state-stores.js +157 -0
  286. package/dist/state-stores.js.map +1 -0
  287. package/dist/state.d.ts +736 -0
  288. package/dist/state.d.ts.map +1 -0
  289. package/dist/state.js +46 -0
  290. package/dist/state.js.map +1 -0
  291. package/dist/storage.d.ts +188 -0
  292. package/dist/storage.d.ts.map +1 -0
  293. package/dist/storage.js +752 -0
  294. package/dist/storage.js.map +1 -0
  295. package/dist/subagent-execution.d.ts +80 -0
  296. package/dist/subagent-execution.d.ts.map +1 -0
  297. package/dist/subagent-execution.js +135 -0
  298. package/dist/subagent-execution.js.map +1 -0
  299. package/dist/telemetry.d.ts +49 -0
  300. package/dist/telemetry.d.ts.map +1 -0
  301. package/dist/telemetry.js +60 -0
  302. package/dist/telemetry.js.map +1 -0
  303. package/dist/tool-apis.d.ts +22 -0
  304. package/dist/tool-apis.d.ts.map +1 -0
  305. package/dist/tool-apis.js +344 -0
  306. package/dist/tool-apis.js.map +1 -0
  307. package/dist/tool-execution.d.ts +143 -0
  308. package/dist/tool-execution.d.ts.map +1 -0
  309. package/dist/tool-execution.js +573 -0
  310. package/dist/tool-execution.js.map +1 -0
  311. package/dist/trusted-attachments.d.ts +20 -0
  312. package/dist/trusted-attachments.d.ts.map +1 -0
  313. package/dist/trusted-attachments.js +276 -0
  314. package/dist/trusted-attachments.js.map +1 -0
  315. package/dist/usage-accounting.d.ts +37 -0
  316. package/dist/usage-accounting.d.ts.map +1 -0
  317. package/dist/usage-accounting.js +181 -0
  318. package/dist/usage-accounting.js.map +1 -0
  319. package/dist/usage-budget.d.ts +29 -0
  320. package/dist/usage-budget.d.ts.map +1 -0
  321. package/dist/usage-budget.js +145 -0
  322. package/dist/usage-budget.js.map +1 -0
  323. package/dist/usage-reconciliation.d.ts +76 -0
  324. package/dist/usage-reconciliation.d.ts.map +1 -0
  325. package/dist/usage-reconciliation.js +463 -0
  326. package/dist/usage-reconciliation.js.map +1 -0
  327. package/dist/usage-records.d.ts +24 -0
  328. package/dist/usage-records.d.ts.map +1 -0
  329. package/dist/usage-records.js +445 -0
  330. package/dist/usage-records.js.map +1 -0
  331. package/package.json +51 -0
@@ -0,0 +1,494 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { sandboxFilesystemContractMetadata } from "@assemblyline-agents/core";
3
+ import { deferFailedDelivery, deliveryFileContentType, deliveryFileName, finalDeliveryIdempotencyKey, stateSupportsDeliveryQueue } from "./delivery-queue.js";
4
+ import { evalRunOptionsForRun } from "./eval-run-options.js";
5
+ import { boundedPositiveIntEnv, resolvePositiveIntegerEnv } from "./env-config.js";
6
+ import { isJsonObject, safeJson } from "./json-util.js";
7
+ import { byteLength, stringValue, timestamp } from "./runtime-util.js";
8
+ import { isReservedWorkspacePath, RESERVED_WORKSPACE_DIRS, scanSandboxFiles } from "./sandbox-fs.js";
9
+ import { deliveryRetryDelayMs, sleepMs } from "./storage.js";
10
+ /**
11
+ * Final-delivery send path: run completion (idempotent delivery obligation
12
+ * creation, inline leased send, deferral onto the durable queue), delivery
13
+ * file preparation, channel turn lifecycle hooks, and the channel send with
14
+ * inline retry. Follows the delivery-queue/run-recovery host-delegate
15
+ * pattern: OpenEveRuntime builds a {@link DeliverySendHost} closing over
16
+ * itself and keeps thin delegate methods with unchanged signatures.
17
+ */
18
+ const DEFAULT_DELIVERY_RETRY_ATTEMPTS = 2;
19
+ const DEFAULT_DELIVERY_RETRY_MIN_MS = 250;
20
+ const DEFAULT_DELIVERY_RETRY_MAX_MS = 5_000;
21
+ const DEFAULT_DELIVERY_FILE_MAX_COUNT = 10;
22
+ const DEFAULT_DELIVERY_FILE_MAX_BYTES = 50 * 1024 * 1024;
23
+ export async function completeRunImpl(host, run, sandboxHandle, response, channel, turn, conversationId) {
24
+ let result;
25
+ try {
26
+ result = await completeRunWithOptionalSandbox(host, run, sandboxHandle.current(), response, channel, turn, conversationId);
27
+ }
28
+ finally {
29
+ const sandboxSession = sandboxHandle.current();
30
+ let shouldDispose = true;
31
+ if (sandboxSession && !host.sandboxSyncInline) {
32
+ const jobs = await host.state.listSandboxSyncJobs(run.id);
33
+ const hasDeferredSync = jobs.some((job) => job.sandboxId === sandboxSession.id &&
34
+ (job.status === "pending" || job.status === "running" || job.status === "failed"));
35
+ const sessionRecord = await host.state.getSandboxSession(host.sandboxSessionKey(run))
36
+ .catch(host.debugSwallow("sandbox session read failed during dispose decision", { runId: run.id }));
37
+ shouldDispose = !hasDeferredSync || sessionRecord?.dirty === true;
38
+ }
39
+ if (shouldDispose)
40
+ await sandboxHandle.dispose();
41
+ }
42
+ return {
43
+ ...result,
44
+ events: await host.state.listEvents(result.run.id),
45
+ toolCalls: await host.state.listToolCalls(result.run.id),
46
+ deliveries: await host.state.listDeliveries(result.run.id)
47
+ };
48
+ }
49
+ async function completeRunWithOptionalSandbox(host, run, sandboxSession, response, channel, turn, conversationId) {
50
+ const deliveryIdempotencyKey = finalDeliveryIdempotencyKey(run, channel, turn);
51
+ const deliveryReserved = await host.state.reserveIdempotencyKey(`delivery:${channel}`, deliveryIdempotencyKey, run.id);
52
+ if (!deliveryReserved) {
53
+ await host.state.appendEvent(run.id, "delivery.skipped_duplicate", {
54
+ channel,
55
+ idempotencyKey: deliveryIdempotencyKey,
56
+ eventId: turn?.eventId ?? null
57
+ });
58
+ run = await completeRunUnlessFailed(host, run, response, { duplicateDelivery: true });
59
+ return host.result(run, response, false, false);
60
+ }
61
+ const deliveryFiles = await prepareDeliveryFiles(host, run, sandboxSession);
62
+ if (conversationId) {
63
+ await host.state.appendMessage({
64
+ conversationId,
65
+ runId: run.id,
66
+ role: "assistant",
67
+ content: {
68
+ text: response,
69
+ ...(deliveryFiles.length > 0 ? { attachments: deliveryFiles } : {})
70
+ }
71
+ });
72
+ }
73
+ // Resume paths call completeRun with no `turn`, so the routing context
74
+ // (thread/conversation/provider delivery target) is only available on the
75
+ // run's original input. Fall back to it, or a resumed run would be delivered
76
+ // with null routing and misroute (or silently drop) the reply.
77
+ const deliveryPayload = {
78
+ response,
79
+ eventId: turn?.eventId ?? (typeof run.input.eventId === "string" ? run.input.eventId : null),
80
+ conversationId: turn?.conversationId ?? (typeof run.input.conversationId === "string" ? run.input.conversationId : null),
81
+ delivery: safeJson(turn?.delivery ?? run.input.delivery ?? null)
82
+ };
83
+ if (deliveryFiles.length > 0) {
84
+ deliveryPayload.files = deliveryFiles;
85
+ deliveryPayload.artifacts = deliveryFiles;
86
+ }
87
+ // When the adapter supports the durable queue, create the obligation
88
+ // already leased by this inline sender: the delivery worker (this or any
89
+ // other replica) can then never lease and send the same row concurrently.
90
+ // A crash mid-send leaves the row "sending" until the lease expires, after
91
+ // which recoverExpiredDeliveries returns it to the queue for retry.
92
+ const inlineLeaseToken = stateSupportsDeliveryQueue(host.state) ? randomUUID() : undefined;
93
+ // Lease must outlive the whole inline retry envelope (attempts x channel
94
+ // timeout + backoff), or an expired lease reopens the double-send window.
95
+ const inlineLeaseMs = Math.max(host.deliveryQueueLeaseMs, 120_000);
96
+ const delivery = await host.state.createDelivery({
97
+ runId: run.id,
98
+ channel,
99
+ payload: deliveryPayload,
100
+ idempotencyKey: deliveryIdempotencyKey,
101
+ ...(inlineLeaseToken
102
+ ? {
103
+ status: "sending",
104
+ leaseToken: inlineLeaseToken,
105
+ leaseExpiresAt: new Date(host.now().getTime() + inlineLeaseMs).toISOString(),
106
+ attemptCount: 1
107
+ }
108
+ : { status: "pending" })
109
+ });
110
+ await host.state.appendEvent(run.id, "delivery.obligation_created", { deliveryId: delivery.id });
111
+ const deliverySpanStartedAt = timestamp();
112
+ const sendResult = await sendDeliveryWithRetry(host, delivery, response, turn, run);
113
+ const deliveryAttempts = sendResult.attempts ?? 1;
114
+ if (sendResult.ok) {
115
+ const safeMetadata = safeJson(sendResult.metadata ?? {});
116
+ const deliveryMetadata = {
117
+ ...(isJsonObject(safeMetadata) ? safeMetadata : {}),
118
+ attempts: deliveryAttempts
119
+ };
120
+ if (inlineLeaseToken) {
121
+ // Token-enforced settle. If our lease expired mid-send and a worker
122
+ // re-leased the row, this throws rather than overwriting the worker's
123
+ // state; the run still completes and the settle race is logged.
124
+ await host.state.completeDeliverySend(delivery.id, inlineLeaseToken, {
125
+ payload: { ...delivery.payload, send: deliveryMetadata }
126
+ }).catch((error) => {
127
+ host.logger.warn("inline delivery settle lost its lease", {
128
+ deliveryId: delivery.id,
129
+ runId: run.id,
130
+ error: error instanceof Error ? error.message : String(error)
131
+ });
132
+ });
133
+ }
134
+ else {
135
+ await host.state.updateDelivery(delivery.id, {
136
+ status: "sent",
137
+ payload: { ...delivery.payload, send: deliveryMetadata }
138
+ });
139
+ }
140
+ await host.state.appendEvent(run.id, "delivery.sent", { deliveryId: delivery.id, metadata: deliveryMetadata });
141
+ await host.emitSpan("ai.assembly-line.delivery.send", deliverySpanStartedAt, host.runSpanAttributes(run, {
142
+ deliveryId: delivery.id,
143
+ deliveryChannel: channel,
144
+ status: "sent"
145
+ }), {
146
+ parentSpanId: host.turnSpanId(run.id),
147
+ status: "ok"
148
+ });
149
+ }
150
+ else {
151
+ // Retryable failures move onto the durable delivery queue (when the state
152
+ // adapter supports it) so a delivery worker retries after backoff — even
153
+ // in another process after a crash. Everything else stays terminal.
154
+ const deferred = sendResult.retryable !== false && stateSupportsDeliveryQueue(host.state)
155
+ ? await deferFailedDelivery({
156
+ state: host.state,
157
+ delivery,
158
+ runId: run.id,
159
+ error: sendResult.error,
160
+ attempts: deliveryAttempts,
161
+ maxAttempts: host.deliveryQueueMaxAttempts,
162
+ now: host.now()
163
+ })
164
+ : undefined;
165
+ if (!deferred) {
166
+ await host.state.updateDelivery(delivery.id, {
167
+ status: "failed",
168
+ failedAt: timestamp(),
169
+ lastError: sendResult.error,
170
+ leaseToken: undefined,
171
+ leaseExpiresAt: undefined,
172
+ payload: { ...delivery.payload, error: sendResult.error, attempts: deliveryAttempts }
173
+ });
174
+ await host.state.appendEvent(run.id, "delivery.failed", {
175
+ deliveryId: delivery.id,
176
+ error: sendResult.error,
177
+ attempts: deliveryAttempts
178
+ });
179
+ }
180
+ await host.emitSpan("ai.assembly-line.delivery.send", deliverySpanStartedAt, host.runSpanAttributes(run, {
181
+ deliveryId: delivery.id,
182
+ deliveryChannel: channel,
183
+ status: deferred ? "deferred" : "failed",
184
+ error: sendResult.error
185
+ }), {
186
+ parentSpanId: host.turnSpanId(run.id),
187
+ status: "error"
188
+ });
189
+ if (sandboxSession) {
190
+ run = await host.captureSandboxSnapshot(run, sandboxSession, deferred ? "delivery_deferred" : "delivery_failed");
191
+ }
192
+ run = await completeRunUnlessFailed(host, run, response, deferred
193
+ ? { deliveryDeferred: true, deliveryError: sendResult.error, deliveryAttempts }
194
+ : { deliveryFailed: true, deliveryError: sendResult.error, deliveryAttempts });
195
+ return host.result(run, response, false, false);
196
+ }
197
+ if (sandboxSession) {
198
+ run = await host.captureSandboxSnapshot(run, sandboxSession, "run_completed");
199
+ }
200
+ run = await completeRunUnlessFailed(host, run, response);
201
+ return host.result(run, response, false, false);
202
+ }
203
+ async function completeRunUnlessFailed(host, run, response, data = {}) {
204
+ const latest = await host.state.getRun(run.id) ?? run;
205
+ if (latest.status !== "running" && latest.status !== "created")
206
+ return latest;
207
+ const completed = await host.state.updateRun(run.id, { status: "completed" });
208
+ await host.state.appendEvent(run.id, "run.completed", { response, ...data });
209
+ return completed;
210
+ }
211
+ export async function latestRunFailureMessageImpl(host, runId) {
212
+ const run = await host.state.getRun(runId);
213
+ if (run?.terminalError)
214
+ return run.terminalError;
215
+ const events = await host.state.listEvents(runId);
216
+ for (const event of events.slice().reverse()) {
217
+ if (event.type !== "run.failed" && event.type !== "tool.execution_failed" && event.type !== "trigger.model_failed")
218
+ continue;
219
+ const error = stringValue(event.data.error);
220
+ if (error)
221
+ return error;
222
+ }
223
+ return undefined;
224
+ }
225
+ async function prepareDeliveryFiles(host, run, sandboxSession) {
226
+ const maxCount = boundedPositiveIntEnv(host.env.OPENEVE_DELIVERY_FILE_MAX_COUNT, DEFAULT_DELIVERY_FILE_MAX_COUNT, 0, 100);
227
+ const maxBytes = boundedPositiveIntEnv(host.env.OPENEVE_DELIVERY_FILE_MAX_BYTES, DEFAULT_DELIVERY_FILE_MAX_BYTES, 1, 1024 * 1024 * 1024);
228
+ if (maxCount <= 0)
229
+ return [];
230
+ if (sandboxSession) {
231
+ let indexed = 0;
232
+ let skipped = 0;
233
+ for (const file of await scanSandboxFiles(sandboxSession, "/workspace", RESERVED_WORKSPACE_DIRS)) {
234
+ if (isReservedWorkspacePath(file.relativePath))
235
+ continue;
236
+ const size = byteLength(file.contents);
237
+ if (size > maxBytes) {
238
+ skipped += 1;
239
+ await host.state.appendEvent(run.id, "delivery.file_skipped", {
240
+ path: `/workspace/${file.relativePath}`,
241
+ reason: "too_large",
242
+ sizeBytes: size,
243
+ maxBytes
244
+ });
245
+ continue;
246
+ }
247
+ const contentType = deliveryFileContentType(file.relativePath);
248
+ const blob = await host.blob.put(`artifacts/${run.id}/${file.relativePath}`, file.contents, contentType);
249
+ await host.state.recordFileIndex({
250
+ runId: run.id,
251
+ path: `/workspace/${file.relativePath}`,
252
+ kind: "artifact",
253
+ blobKey: blob.key,
254
+ sha256: blob.sha256,
255
+ sizeBytes: blob.size,
256
+ metadata: {
257
+ source: "delivery-artifact",
258
+ filename: deliveryFileName(file.relativePath),
259
+ contentType
260
+ }
261
+ });
262
+ indexed += 1;
263
+ }
264
+ if (indexed > 0 || skipped > 0) {
265
+ await host.state.appendEvent(run.id, "delivery.files_indexed", { indexed, skipped });
266
+ }
267
+ }
268
+ if (!host.state.listFileIndexes)
269
+ return [];
270
+ const indexed = await host.state.listFileIndexes(run.id);
271
+ const byPath = new Map();
272
+ for (const record of indexed) {
273
+ if (record.kind !== "artifact" || !record.path.startsWith("/workspace/"))
274
+ continue;
275
+ if (record.sizeBytes > maxBytes)
276
+ continue;
277
+ if (!byPath.has(record.path))
278
+ byPath.set(record.path, record);
279
+ }
280
+ return [...byPath.values()]
281
+ .slice(0, maxCount)
282
+ .map((record) => {
283
+ const filename = stringValue(record.metadata.filename) ?? deliveryFileName(record.path);
284
+ const contentType = stringValue(record.metadata.contentType) ?? deliveryFileContentType(filename);
285
+ return {
286
+ path: record.path,
287
+ filename,
288
+ contentType,
289
+ sizeBytes: record.sizeBytes,
290
+ sha256: record.sha256,
291
+ blobKey: record.blobKey
292
+ };
293
+ });
294
+ }
295
+ export async function enqueueSandboxSyncAfterDeliveryImpl(host, run, sandboxSession) {
296
+ const syncJob = await host.state.enqueueSandboxSyncJob({
297
+ runId: run.id,
298
+ sandboxId: sandboxSession.id,
299
+ status: "pending",
300
+ idempotencyKey: `sandbox-sync:${run.id}:${sandboxSession.id}`,
301
+ reason: "post_delivery",
302
+ maxAttempts: host.sandboxSyncMaxAttempts,
303
+ manifest: {
304
+ roots: ["/memory", "/workspace", "/skills"],
305
+ compatibilityProjection: true,
306
+ sandboxRoot: sandboxSession.root,
307
+ ...sandboxFilesystemContractMetadata(sandboxSession.provider === "local" ? "emulated" : "physical")
308
+ }
309
+ });
310
+ await host.state.appendEvent(run.id, "sandbox.sync_queued", {
311
+ jobId: syncJob.id,
312
+ sandboxId: sandboxSession.id,
313
+ reason: syncJob.reason
314
+ });
315
+ return syncJob;
316
+ }
317
+ export async function beginChannelTurnImpl(host, channelName, turn) {
318
+ if (!turn)
319
+ return { outcome: "skipped", claimed: false };
320
+ const channel = host.manifest.channels.find((candidate) => candidate.name === channelName);
321
+ if (!channel)
322
+ return { outcome: "skipped", claimed: false };
323
+ const module = await host.loadChannelModule(channel).catch((error) => {
324
+ host.logger.warn("channel module load failed during turn lifecycle", {
325
+ channel: channelName,
326
+ eventId: turn.eventId,
327
+ error: error instanceof Error ? error.message : String(error)
328
+ });
329
+ return undefined;
330
+ });
331
+ if (!module?.startTurn) {
332
+ return { outcome: "unsupported", claimed: false };
333
+ }
334
+ try {
335
+ const lifecycle = await module.startTurn(turn, host.channelContext(channel));
336
+ return {
337
+ ...(lifecycle ? { lifecycle } : {}),
338
+ outcome: "started",
339
+ claimed: false
340
+ };
341
+ }
342
+ catch (error) {
343
+ const message = error instanceof Error ? error.message : String(error);
344
+ host.logger.warn("channel startTurn failed", {
345
+ channel: channelName,
346
+ eventId: turn.eventId,
347
+ error: message
348
+ });
349
+ return { outcome: "failed", error: message, claimed: false };
350
+ }
351
+ }
352
+ export async function recordChannelTurnStartImpl(host, start, run, channelName) {
353
+ if (start.outcome === "skipped")
354
+ return;
355
+ if (start.outcome === "unsupported") {
356
+ await host.state.appendEvent(run.id, "channel.turn_lifecycle_unsupported", {
357
+ channel: channelName,
358
+ reason: "no_start_turn_export"
359
+ });
360
+ return;
361
+ }
362
+ if (start.outcome === "failed") {
363
+ await host.state.appendEvent(run.id, "channel.turn_lifecycle_start_failed", {
364
+ channel: channelName,
365
+ error: start.error ?? "unknown"
366
+ });
367
+ return;
368
+ }
369
+ await host.state.appendEvent(run.id, "channel.turn_lifecycle_started", { channel: channelName });
370
+ }
371
+ export async function stopUnclaimedChannelTurnImpl(host, start, channelName) {
372
+ if (!start || start.claimed || !start.lifecycle?.stop)
373
+ return;
374
+ start.claimed = true;
375
+ try {
376
+ await start.lifecycle.stop();
377
+ }
378
+ catch (error) {
379
+ host.logger.warn("channel turn lifecycle cleanup failed before run creation", {
380
+ channel: channelName,
381
+ error: error instanceof Error ? error.message : String(error)
382
+ });
383
+ }
384
+ }
385
+ export async function stopChannelTurnImpl(host, lifecycle, run, channelName) {
386
+ if (!lifecycle?.stop)
387
+ return;
388
+ try {
389
+ const metadata = await lifecycle.stop();
390
+ await host.state.appendEvent(run.id, "channel.turn_lifecycle_stopped", {
391
+ channel: channelName,
392
+ metadata: safeJson(metadata ?? {})
393
+ });
394
+ }
395
+ catch (error) {
396
+ await host.state.appendEvent(run.id, "channel.turn_lifecycle_stop_failed", {
397
+ channel: channelName,
398
+ error: error instanceof Error ? error.message : String(error)
399
+ });
400
+ host.logger.warn("channel turn lifecycle stop failed", {
401
+ channel: channelName,
402
+ runId: run.id,
403
+ error: error instanceof Error ? error.message : String(error)
404
+ });
405
+ }
406
+ }
407
+ async function sendDeliveryWithRetry(host, delivery, response, turn, run) {
408
+ const maxAttempts = resolvePositiveIntegerEnv(host.env.OPENEVE_DELIVERY_RETRY_ATTEMPTS, DEFAULT_DELIVERY_RETRY_ATTEMPTS);
409
+ const minDelayMs = resolvePositiveIntegerEnv(host.env.OPENEVE_DELIVERY_RETRY_MIN_MS, DEFAULT_DELIVERY_RETRY_MIN_MS);
410
+ const maxDelayMs = resolvePositiveIntegerEnv(host.env.OPENEVE_DELIVERY_RETRY_MAX_MS, DEFAULT_DELIVERY_RETRY_MAX_MS);
411
+ let lastError = "Channel delivery failed.";
412
+ let lastRetryable;
413
+ for (let attempt = 1; attempt <= maxAttempts; attempt += 1) {
414
+ const result = await sendDeliveryImpl(host, delivery, response, turn, run);
415
+ if (result.ok) {
416
+ const retried = {
417
+ ok: true,
418
+ attempts: attempt
419
+ };
420
+ if (result.metadata)
421
+ retried.metadata = result.metadata;
422
+ return retried;
423
+ }
424
+ lastError = result.error;
425
+ lastRetryable = result.retryable;
426
+ if (result.retryable === false || attempt >= maxAttempts) {
427
+ break;
428
+ }
429
+ const delayMs = deliveryRetryDelayMs(attempt, minDelayMs, maxDelayMs);
430
+ await host.state.appendEvent(run.id, "delivery.retrying", {
431
+ deliveryId: delivery.id,
432
+ attempt,
433
+ maxAttempts,
434
+ error: result.error,
435
+ nextDelayMs: delayMs
436
+ });
437
+ await sleepMs(delayMs);
438
+ }
439
+ const failed = { ok: false, error: lastError, attempts: maxAttempts };
440
+ if (lastRetryable !== undefined)
441
+ failed.retryable = lastRetryable;
442
+ return failed;
443
+ }
444
+ export async function sendDeliveryImpl(host, delivery, response, turn, run) {
445
+ if (host.deliveryMode === "record-only")
446
+ return { ok: true, metadata: { mode: "record-only" } };
447
+ // Per-run eval record-only: a stubbed/eval run on a send-mode server must
448
+ // never message real channels. Falls back to a state read when the caller
449
+ // (the queued-delivery path) has no run in hand.
450
+ const evalRun = run ?? await host.state.getRun(delivery.runId).catch(() => undefined) ?? undefined;
451
+ if (evalRunOptionsForRun(evalRun)?.recordOnlyDelivery)
452
+ return { ok: true, metadata: { mode: "record-only" } };
453
+ const channel = host.manifest.channels.find((candidate) => candidate.name === delivery.channel);
454
+ if (!channel)
455
+ return { ok: true, metadata: { mode: "no-channel-module" } };
456
+ let loadError;
457
+ const module = await host.loadChannelModule(channel).catch((error) => {
458
+ loadError = error instanceof Error ? error.message : String(error);
459
+ return undefined;
460
+ });
461
+ if (loadError !== undefined) {
462
+ host.logger.warn("channel module load failed during delivery", {
463
+ channel: channel.name,
464
+ deliveryId: delivery.id,
465
+ error: loadError
466
+ });
467
+ return { ok: false, error: `Channel ${channel.name} module failed to load: ${loadError}`, retryable: true };
468
+ }
469
+ if (!module?.send) {
470
+ if (host.devMode)
471
+ return { ok: true, metadata: { mode: "dev-no-sender" } };
472
+ if (channel.requiredEnv.length === 0)
473
+ return { ok: true, metadata: { mode: "local-no-sender" } };
474
+ return { ok: false, error: `Channel ${channel.name} has no send() export.`, retryable: false };
475
+ }
476
+ try {
477
+ const channelDelivery = {
478
+ id: delivery.id,
479
+ runId: delivery.runId,
480
+ channel: delivery.channel,
481
+ response,
482
+ payload: delivery.payload,
483
+ idempotencyKey: delivery.idempotencyKey
484
+ };
485
+ if (turn)
486
+ channelDelivery.turn = turn;
487
+ const metadata = await module.send(channelDelivery, host.channelContext(channel));
488
+ return { ok: true, metadata: safeJson(metadata ?? {}) };
489
+ }
490
+ catch (error) {
491
+ return { ok: false, error: error instanceof Error ? error.message : String(error), retryable: true };
492
+ }
493
+ }
494
+ //# sourceMappingURL=delivery-send.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delivery-send.js","sourceRoot":"","sources":["../src/delivery-send.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /** Env-string coercion helpers shared across runtime configuration intake. */
2
+ export declare function resolvePositiveIntegerEnv(value: unknown, fallback: number): number;
3
+ export declare function resolveNonNegativeIntegerEnv(value: unknown, fallback: number): number;
4
+ export declare function boundedPositiveIntEnv(value: unknown, fallback: number, min: number, max: number): number;
5
+ export declare function resolveBooleanEnv(value: unknown, fallback: boolean): boolean;
6
+ //# sourceMappingURL=env-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env-config.d.ts","sourceRoot":"","sources":["../src/env-config.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAE9E,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAIlF;AAED,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAIrF;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAIxG;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,GAAG,OAAO,CAI5E"}
@@ -0,0 +1,27 @@
1
+ /** Env-string coercion helpers shared across runtime configuration intake. */
2
+ export function resolvePositiveIntegerEnv(value, fallback) {
3
+ const number = typeof value === "string" && value.trim() !== "" ? Number(value) : value;
4
+ if (typeof number !== "number" || !Number.isFinite(number) || number <= 0)
5
+ return fallback;
6
+ return Math.floor(number);
7
+ }
8
+ export function resolveNonNegativeIntegerEnv(value, fallback) {
9
+ const number = typeof value === "string" && value.trim() !== "" ? Number(value) : value;
10
+ if (typeof number !== "number" || !Number.isFinite(number) || number < 0)
11
+ return fallback;
12
+ return Math.floor(number);
13
+ }
14
+ export function boundedPositiveIntEnv(value, fallback, min, max) {
15
+ const number = typeof value === "string" && value.trim() !== "" ? Number(value) : value;
16
+ if (typeof number !== "number" || !Number.isFinite(number))
17
+ return fallback;
18
+ return Math.min(max, Math.max(min, Math.floor(number)));
19
+ }
20
+ export function resolveBooleanEnv(value, fallback) {
21
+ if (value === "1" || value === "true")
22
+ return true;
23
+ if (value === "0" || value === "false")
24
+ return false;
25
+ return fallback;
26
+ }
27
+ //# sourceMappingURL=env-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env-config.js","sourceRoot":"","sources":["../src/env-config.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAE9E,MAAM,UAAU,yBAAyB,CAAC,KAAc,EAAE,QAAgB;IACxE,MAAM,MAAM,GAAG,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IACxF,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC;QAAE,OAAO,QAAQ,CAAC;IAC3F,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,KAAc,EAAE,QAAgB;IAC3E,MAAM,MAAM,GAAG,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IACxF,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC;QAAE,OAAO,QAAQ,CAAC;IAC1F,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,KAAc,EAAE,QAAgB,EAAE,GAAW,EAAE,GAAW;IAC9F,MAAM,MAAM,GAAG,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IACxF,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,QAAQ,CAAC;IAC5E,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAC1D,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAc,EAAE,QAAiB;IACjE,IAAI,KAAK,KAAK,GAAG,IAAI,KAAK,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC;IACnD,IAAI,KAAK,KAAK,GAAG,IAAI,KAAK,KAAK,OAAO;QAAE,OAAO,KAAK,CAAC;IACrD,OAAO,QAAQ,CAAC;AAClB,CAAC"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Per-run eval harness options. The block travels on `RunAgentOptions.eval`,
3
+ * is persisted verbatim into `RunRecord.input.eval` (crash-resume safe and
4
+ * auditable in run detail), and is honored by the tool-execution and delivery
5
+ * paths. `results` sequence cursors are intentionally in-memory: a resumed or
6
+ * subagent-child run restarts its sequence, which is acceptable for evals and
7
+ * avoids a durable write per stubbed tool call.
8
+ */
9
+ import type { JsonValue } from "@assemblyline-agents/core";
10
+ import type { RunRecord } from "./state.js";
11
+ export type EvalToolStubSpec = {
12
+ result: JsonValue;
13
+ } | {
14
+ results: JsonValue[];
15
+ } | {
16
+ error: string;
17
+ };
18
+ export interface EvalRunOptions {
19
+ /** Named tool executions replaced with canned outcomes; authored modules never load. */
20
+ toolStubs?: Record<string, EvalToolStubSpec>;
21
+ /** Record tool.approval_requested, then proceed approved in the same tick. */
22
+ autoApproveTools?: boolean;
23
+ /** Persist delivery obligations without invoking channel senders for this run. */
24
+ recordOnlyDelivery?: boolean;
25
+ }
26
+ /** Strict ingress validation; throws descriptive errors on malformed input. */
27
+ export declare function validateEvalRunOptions(value: unknown): EvalRunOptions;
28
+ /** Tolerant read of run.input.eval; returns undefined for absent or malformed blocks. */
29
+ export declare function evalRunOptionsForRun(run: RunRecord | undefined): EvalRunOptions | undefined;
30
+ /** Per-run sequence cursors for {results: [...]} stubs, keyed `${runId}:${tool}`. */
31
+ export type EvalStubCursors = Map<string, number>;
32
+ /**
33
+ * Returns an execute function for a per-run stubbed tool, or undefined when
34
+ * the run carries no stub for that tool name.
35
+ */
36
+ export declare function resolveEvalToolStub(cursors: EvalStubCursors, run: RunRecord | undefined, toolName: string): ((input: unknown) => unknown) | undefined;
37
+ //# sourceMappingURL=eval-run-options.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eval-run-options.d.ts","sourceRoot":"","sources":["../src/eval-run-options.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,MAAM,MAAM,gBAAgB,GACxB;IAAE,MAAM,EAAE,SAAS,CAAA;CAAE,GACrB;IAAE,OAAO,EAAE,SAAS,EAAE,CAAA;CAAE,GACxB;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtB,MAAM,WAAW,cAAc;IAC7B,wFAAwF;IACxF,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAC7C,8EAA8E;IAC9E,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,kFAAkF;IAClF,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAmCD,+EAA+E;AAC/E,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,cAAc,CAyBrE;AAED,yFAAyF;AACzF,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,SAAS,GAAG,SAAS,GAAG,cAAc,GAAG,SAAS,CAQ3F;AAED,qFAAqF;AACrF,MAAM,MAAM,eAAe,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAElD;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,eAAe,EACxB,GAAG,EAAE,SAAS,GAAG,SAAS,EAC1B,QAAQ,EAAE,MAAM,GACf,CAAC,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,GAAG,SAAS,CAa3C"}