@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.
- package/LICENSE +21 -0
- package/README.md +19 -0
- package/dist/agent-harness.d.ts +108 -0
- package/dist/agent-harness.d.ts.map +1 -0
- package/dist/agent-harness.js +2 -0
- package/dist/agent-harness.js.map +1 -0
- package/dist/attachments-legacy.d.ts +17 -0
- package/dist/attachments-legacy.d.ts.map +1 -0
- package/dist/attachments-legacy.js +273 -0
- package/dist/attachments-legacy.js.map +1 -0
- package/dist/attachments.d.ts +49 -0
- package/dist/attachments.d.ts.map +1 -0
- package/dist/attachments.js +832 -0
- package/dist/attachments.js.map +1 -0
- package/dist/builtin-tool-executors.d.ts +96 -0
- package/dist/builtin-tool-executors.d.ts.map +1 -0
- package/dist/builtin-tool-executors.js +501 -0
- package/dist/builtin-tool-executors.js.map +1 -0
- package/dist/builtin-tools.d.ts +30 -0
- package/dist/builtin-tools.d.ts.map +1 -0
- package/dist/builtin-tools.js +690 -0
- package/dist/builtin-tools.js.map +1 -0
- package/dist/capability-catalog.d.ts +27 -0
- package/dist/capability-catalog.d.ts.map +1 -0
- package/dist/capability-catalog.js +193 -0
- package/dist/capability-catalog.js.map +1 -0
- package/dist/channel-http-util.d.ts +34 -0
- package/dist/channel-http-util.d.ts.map +1 -0
- package/dist/channel-http-util.js +93 -0
- package/dist/channel-http-util.js.map +1 -0
- package/dist/channel-ingress.d.ts +56 -0
- package/dist/channel-ingress.d.ts.map +1 -0
- package/dist/channel-ingress.js +273 -0
- package/dist/channel-ingress.js.map +1 -0
- package/dist/channel.d.ts +146 -0
- package/dist/channel.d.ts.map +1 -0
- package/dist/channel.js +2 -0
- package/dist/channel.js.map +1 -0
- package/dist/checkpoints.d.ts +34 -0
- package/dist/checkpoints.d.ts.map +1 -0
- package/dist/checkpoints.js +86 -0
- package/dist/checkpoints.js.map +1 -0
- package/dist/code-mode.d.ts +20 -0
- package/dist/code-mode.d.ts.map +1 -0
- package/dist/code-mode.js +658 -0
- package/dist/code-mode.js.map +1 -0
- package/dist/computer-relay-protocol.d.ts +36 -0
- package/dist/computer-relay-protocol.d.ts.map +1 -0
- package/dist/computer-relay-protocol.js +127 -0
- package/dist/computer-relay-protocol.js.map +1 -0
- package/dist/concurrency.d.ts +68 -0
- package/dist/concurrency.d.ts.map +1 -0
- package/dist/concurrency.js +193 -0
- package/dist/concurrency.js.map +1 -0
- package/dist/connection-auth-util.d.ts +56 -0
- package/dist/connection-auth-util.d.ts.map +1 -0
- package/dist/connection-auth-util.js +154 -0
- package/dist/connection-auth-util.js.map +1 -0
- package/dist/connection-clients.d.ts +50 -0
- package/dist/connection-clients.d.ts.map +1 -0
- package/dist/connection-clients.js +402 -0
- package/dist/connection-clients.js.map +1 -0
- package/dist/connection-stores.d.ts +108 -0
- package/dist/connection-stores.d.ts.map +1 -0
- package/dist/connection-stores.js +127 -0
- package/dist/connection-stores.js.map +1 -0
- package/dist/connection-util.d.ts +27 -0
- package/dist/connection-util.d.ts.map +1 -0
- package/dist/connection-util.js +118 -0
- package/dist/connection-util.js.map +1 -0
- package/dist/connections.d.ts +152 -0
- package/dist/connections.d.ts.map +1 -0
- package/dist/connections.js +838 -0
- package/dist/connections.js.map +1 -0
- package/dist/content-capture.d.ts +32 -0
- package/dist/content-capture.d.ts.map +1 -0
- package/dist/content-capture.js +77 -0
- package/dist/content-capture.js.map +1 -0
- package/dist/context-policy-util.d.ts +45 -0
- package/dist/context-policy-util.d.ts.map +1 -0
- package/dist/context-policy-util.js +120 -0
- package/dist/context-policy-util.js.map +1 -0
- package/dist/conversation-context.d.ts +55 -0
- package/dist/conversation-context.d.ts.map +1 -0
- package/dist/conversation-context.js +179 -0
- package/dist/conversation-context.js.map +1 -0
- package/dist/conversation-transcript.d.ts +49 -0
- package/dist/conversation-transcript.d.ts.map +1 -0
- package/dist/conversation-transcript.js +77 -0
- package/dist/conversation-transcript.js.map +1 -0
- package/dist/conversation-turn-dispatch.d.ts +46 -0
- package/dist/conversation-turn-dispatch.d.ts.map +1 -0
- package/dist/conversation-turn-dispatch.js +201 -0
- package/dist/conversation-turn-dispatch.js.map +1 -0
- package/dist/delivery-queue.d.ts +89 -0
- package/dist/delivery-queue.d.ts.map +1 -0
- package/dist/delivery-queue.js +244 -0
- package/dist/delivery-queue.js.map +1 -0
- package/dist/delivery-send.d.ts +44 -0
- package/dist/delivery-send.d.ts.map +1 -0
- package/dist/delivery-send.js +494 -0
- package/dist/delivery-send.js.map +1 -0
- package/dist/env-config.d.ts +6 -0
- package/dist/env-config.d.ts.map +1 -0
- package/dist/env-config.js +27 -0
- package/dist/env-config.js.map +1 -0
- package/dist/eval-run-options.d.ts +37 -0
- package/dist/eval-run-options.d.ts.map +1 -0
- package/dist/eval-run-options.js +106 -0
- package/dist/eval-run-options.js.map +1 -0
- package/dist/harness-continuation.d.ts +54 -0
- package/dist/harness-continuation.d.ts.map +1 -0
- package/dist/harness-continuation.js +58 -0
- package/dist/harness-continuation.js.map +1 -0
- package/dist/harness-loop.d.ts +110 -0
- package/dist/harness-loop.d.ts.map +1 -0
- package/dist/harness-loop.js +575 -0
- package/dist/harness-loop.js.map +1 -0
- package/dist/hook-dispatch.d.ts +19 -0
- package/dist/hook-dispatch.d.ts.map +1 -0
- package/dist/hook-dispatch.js +37 -0
- package/dist/hook-dispatch.js.map +1 -0
- package/dist/http.d.ts +26 -0
- package/dist/http.d.ts.map +1 -0
- package/dist/http.js +114 -0
- package/dist/http.js.map +1 -0
- package/dist/in-memory-conversation-turn-store.d.ts +29 -0
- package/dist/in-memory-conversation-turn-store.d.ts.map +1 -0
- package/dist/in-memory-conversation-turn-store.js +166 -0
- package/dist/in-memory-conversation-turn-store.js.map +1 -0
- package/dist/in-memory-run-store.d.ts +39 -0
- package/dist/in-memory-run-store.d.ts.map +1 -0
- package/dist/in-memory-run-store.js +332 -0
- package/dist/in-memory-run-store.js.map +1 -0
- package/dist/in-memory-sandbox-session-store.d.ts +33 -0
- package/dist/in-memory-sandbox-session-store.d.ts.map +1 -0
- package/dist/in-memory-sandbox-session-store.js +186 -0
- package/dist/in-memory-sandbox-session-store.js.map +1 -0
- package/dist/in-memory-small-stores.d.ts +117 -0
- package/dist/in-memory-small-stores.d.ts.map +1 -0
- package/dist/in-memory-small-stores.js +340 -0
- package/dist/in-memory-small-stores.js.map +1 -0
- package/dist/in-memory-usage-store.d.ts +15 -0
- package/dist/in-memory-usage-store.d.ts.map +1 -0
- package/dist/in-memory-usage-store.js +49 -0
- package/dist/in-memory-usage-store.js.map +1 -0
- package/dist/index.d.ts +467 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2046 -0
- package/dist/index.js.map +1 -0
- package/dist/json-util.d.ts +19 -0
- package/dist/json-util.d.ts.map +1 -0
- package/dist/json-util.js +59 -0
- package/dist/json-util.js.map +1 -0
- package/dist/local-sandbox.d.ts +16 -0
- package/dist/local-sandbox.d.ts.map +1 -0
- package/dist/local-sandbox.js +327 -0
- package/dist/local-sandbox.js.map +1 -0
- package/dist/logging.d.ts +16 -0
- package/dist/logging.d.ts.map +1 -0
- package/dist/logging.js +41 -0
- package/dist/logging.js.map +1 -0
- package/dist/mcp-client.d.ts +27 -0
- package/dist/mcp-client.d.ts.map +1 -0
- package/dist/mcp-client.js +169 -0
- package/dist/mcp-client.js.map +1 -0
- package/dist/model-harnesses.d.ts +4 -0
- package/dist/model-harnesses.d.ts.map +1 -0
- package/dist/model-harnesses.js +6 -0
- package/dist/model-harnesses.js.map +1 -0
- package/dist/model-media.d.ts +36 -0
- package/dist/model-media.d.ts.map +1 -0
- package/dist/model-media.js +234 -0
- package/dist/model-media.js.map +1 -0
- package/dist/operator-controls.d.ts +31 -0
- package/dist/operator-controls.d.ts.map +1 -0
- package/dist/operator-controls.js +71 -0
- package/dist/operator-controls.js.map +1 -0
- package/dist/pi-agent-harness.d.ts +40 -0
- package/dist/pi-agent-harness.d.ts.map +1 -0
- package/dist/pi-agent-harness.js +222 -0
- package/dist/pi-agent-harness.js.map +1 -0
- package/dist/pi-harness.d.ts +42 -0
- package/dist/pi-harness.d.ts.map +1 -0
- package/dist/pi-harness.js +142 -0
- package/dist/pi-harness.js.map +1 -0
- package/dist/relay-mcp-client.d.ts +17 -0
- package/dist/relay-mcp-client.d.ts.map +1 -0
- package/dist/relay-mcp-client.js +119 -0
- package/dist/relay-mcp-client.js.map +1 -0
- package/dist/replay-resume.d.ts +107 -0
- package/dist/replay-resume.d.ts.map +1 -0
- package/dist/replay-resume.js +495 -0
- package/dist/replay-resume.js.map +1 -0
- package/dist/resource-projection-util.d.ts +58 -0
- package/dist/resource-projection-util.d.ts.map +1 -0
- package/dist/resource-projection-util.js +298 -0
- package/dist/resource-projection-util.js.map +1 -0
- package/dist/resource-projection.d.ts +45 -0
- package/dist/resource-projection.d.ts.map +1 -0
- package/dist/resource-projection.js +481 -0
- package/dist/resource-projection.js.map +1 -0
- package/dist/run-heartbeat.d.ts +34 -0
- package/dist/run-heartbeat.d.ts.map +1 -0
- package/dist/run-heartbeat.js +62 -0
- package/dist/run-heartbeat.js.map +1 -0
- package/dist/run-outcome.d.ts +47 -0
- package/dist/run-outcome.d.ts.map +1 -0
- package/dist/run-outcome.js +92 -0
- package/dist/run-outcome.js.map +1 -0
- package/dist/run-recovery.d.ts +117 -0
- package/dist/run-recovery.d.ts.map +1 -0
- package/dist/run-recovery.js +466 -0
- package/dist/run-recovery.js.map +1 -0
- package/dist/run-resolver.d.ts +35 -0
- package/dist/run-resolver.d.ts.map +1 -0
- package/dist/run-resolver.js +84 -0
- package/dist/run-resolver.js.map +1 -0
- package/dist/run-stream.d.ts +37 -0
- package/dist/run-stream.d.ts.map +1 -0
- package/dist/run-stream.js +78 -0
- package/dist/run-stream.js.map +1 -0
- package/dist/runs-query.d.ts +29 -0
- package/dist/runs-query.d.ts.map +1 -0
- package/dist/runs-query.js +142 -0
- package/dist/runs-query.js.map +1 -0
- package/dist/runtime-bundle.d.ts +3 -0
- package/dist/runtime-bundle.d.ts.map +1 -0
- package/dist/runtime-bundle.js +18 -0
- package/dist/runtime-bundle.js.map +1 -0
- package/dist/runtime-types.d.ts +397 -0
- package/dist/runtime-types.d.ts.map +1 -0
- package/dist/runtime-types.js +2 -0
- package/dist/runtime-types.js.map +1 -0
- package/dist/runtime-util.d.ts +45 -0
- package/dist/runtime-util.d.ts.map +1 -0
- package/dist/runtime-util.js +116 -0
- package/dist/runtime-util.js.map +1 -0
- package/dist/sandbox-cli-client.d.ts +20 -0
- package/dist/sandbox-cli-client.d.ts.map +1 -0
- package/dist/sandbox-cli-client.js +97 -0
- package/dist/sandbox-cli-client.js.map +1 -0
- package/dist/sandbox-fs.d.ts +56 -0
- package/dist/sandbox-fs.d.ts.map +1 -0
- package/dist/sandbox-fs.js +276 -0
- package/dist/sandbox-fs.js.map +1 -0
- package/dist/sandbox-session-key.d.ts +8 -0
- package/dist/sandbox-session-key.d.ts.map +1 -0
- package/dist/sandbox-session-key.js +32 -0
- package/dist/sandbox-session-key.js.map +1 -0
- package/dist/sandbox-snapshot-policy.d.ts +27 -0
- package/dist/sandbox-snapshot-policy.d.ts.map +1 -0
- package/dist/sandbox-snapshot-policy.js +94 -0
- package/dist/sandbox-snapshot-policy.js.map +1 -0
- package/dist/sandbox-sync-worker.d.ts +63 -0
- package/dist/sandbox-sync-worker.d.ts.map +1 -0
- package/dist/sandbox-sync-worker.js +448 -0
- package/dist/sandbox-sync-worker.js.map +1 -0
- package/dist/schedule-execution.d.ts +59 -0
- package/dist/schedule-execution.d.ts.map +1 -0
- package/dist/schedule-execution.js +951 -0
- package/dist/schedule-execution.js.map +1 -0
- package/dist/scheduler.d.ts +19 -0
- package/dist/scheduler.d.ts.map +1 -0
- package/dist/scheduler.js +38 -0
- package/dist/scheduler.js.map +1 -0
- package/dist/security.d.ts +20 -0
- package/dist/security.d.ts.map +1 -0
- package/dist/security.js +145 -0
- package/dist/security.js.map +1 -0
- package/dist/self-improvement.d.ts +245 -0
- package/dist/self-improvement.d.ts.map +1 -0
- package/dist/self-improvement.js +554 -0
- package/dist/self-improvement.js.map +1 -0
- package/dist/source-loader.d.ts +19 -0
- package/dist/source-loader.d.ts.map +1 -0
- package/dist/source-loader.js +160 -0
- package/dist/source-loader.js.map +1 -0
- package/dist/state-store-helpers.d.ts +28 -0
- package/dist/state-store-helpers.d.ts.map +1 -0
- package/dist/state-store-helpers.js +164 -0
- package/dist/state-store-helpers.js.map +1 -0
- package/dist/state-stores.d.ts +25 -0
- package/dist/state-stores.d.ts.map +1 -0
- package/dist/state-stores.js +157 -0
- package/dist/state-stores.js.map +1 -0
- package/dist/state.d.ts +736 -0
- package/dist/state.d.ts.map +1 -0
- package/dist/state.js +46 -0
- package/dist/state.js.map +1 -0
- package/dist/storage.d.ts +188 -0
- package/dist/storage.d.ts.map +1 -0
- package/dist/storage.js +752 -0
- package/dist/storage.js.map +1 -0
- package/dist/subagent-execution.d.ts +80 -0
- package/dist/subagent-execution.d.ts.map +1 -0
- package/dist/subagent-execution.js +135 -0
- package/dist/subagent-execution.js.map +1 -0
- package/dist/telemetry.d.ts +49 -0
- package/dist/telemetry.d.ts.map +1 -0
- package/dist/telemetry.js +60 -0
- package/dist/telemetry.js.map +1 -0
- package/dist/tool-apis.d.ts +22 -0
- package/dist/tool-apis.d.ts.map +1 -0
- package/dist/tool-apis.js +344 -0
- package/dist/tool-apis.js.map +1 -0
- package/dist/tool-execution.d.ts +143 -0
- package/dist/tool-execution.d.ts.map +1 -0
- package/dist/tool-execution.js +573 -0
- package/dist/tool-execution.js.map +1 -0
- package/dist/trusted-attachments.d.ts +20 -0
- package/dist/trusted-attachments.d.ts.map +1 -0
- package/dist/trusted-attachments.js +276 -0
- package/dist/trusted-attachments.js.map +1 -0
- package/dist/usage-accounting.d.ts +37 -0
- package/dist/usage-accounting.d.ts.map +1 -0
- package/dist/usage-accounting.js +181 -0
- package/dist/usage-accounting.js.map +1 -0
- package/dist/usage-budget.d.ts +29 -0
- package/dist/usage-budget.d.ts.map +1 -0
- package/dist/usage-budget.js +145 -0
- package/dist/usage-budget.js.map +1 -0
- package/dist/usage-reconciliation.d.ts +76 -0
- package/dist/usage-reconciliation.d.ts.map +1 -0
- package/dist/usage-reconciliation.js +463 -0
- package/dist/usage-reconciliation.js.map +1 -0
- package/dist/usage-records.d.ts +24 -0
- package/dist/usage-records.d.ts.map +1 -0
- package/dist/usage-records.js +445 -0
- package/dist/usage-records.js.map +1 -0
- 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"}
|