@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,495 @@
|
|
|
1
|
+
import { ASK_QUESTION_TOOL_NAME, runtimeToolsForManifest } from "./builtin-tools.js";
|
|
2
|
+
import { connectionAuthorizationPrompt, parseQualifiedName, RuntimeConnectionRegistry } from "./connections.js";
|
|
3
|
+
import { storedHarnessContinuation } from "./harness-continuation.js";
|
|
4
|
+
import { persistConversationTranscriptImpl } from "./conversation-transcript.js";
|
|
5
|
+
import { prepareToolModelOutput } from "./model-media.js";
|
|
6
|
+
import { crashResumeReport } from "./run-recovery.js";
|
|
7
|
+
import { applyCoreToolPolicy } from "./security.js";
|
|
8
|
+
export async function replayImpl(host, runId) {
|
|
9
|
+
const run = await host.state.getRun(runId);
|
|
10
|
+
if (!run)
|
|
11
|
+
throw new Error(`Run not found: ${runId}`);
|
|
12
|
+
return {
|
|
13
|
+
run,
|
|
14
|
+
events: await host.state.listEvents(runId),
|
|
15
|
+
toolCalls: await host.state.listToolCalls(runId),
|
|
16
|
+
checkpoints: await host.listHydratedCheckpoints(runId),
|
|
17
|
+
deliveries: await host.state.listDeliveries(runId),
|
|
18
|
+
usage: await host.state.listUsage(runId)
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
/** How long a claimed-but-unprogressed resume must sit before it may be reclaimed. */
|
|
22
|
+
const RESUME_RECLAIM_STALE_MS = 5 * 60_000;
|
|
23
|
+
/**
|
|
24
|
+
* A resume claim was already taken, but resume claims are not leases: if the
|
|
25
|
+
* claimer crashed between the claim and the run's status transition, the pause
|
|
26
|
+
* would be permanently un-resumable. A run that is still parked and has not
|
|
27
|
+
* been touched for RESUME_RECLAIM_STALE_MS has no live resumer (a live one
|
|
28
|
+
* bumps `updatedAt` immediately and heartbeats after), so a retry generation
|
|
29
|
+
* may be claimed. The reclaim bumps `updatedAt` first, keeping later retry
|
|
30
|
+
* generations distinct if this one also dies.
|
|
31
|
+
*/
|
|
32
|
+
async function reclaimStaleResume(host, run, baseKey, kind) {
|
|
33
|
+
const inProgress = new Error(`Run ${run.id} ${kind} resume is already in progress.`);
|
|
34
|
+
if (Date.parse(run.updatedAt) > Date.now() - RESUME_RECLAIM_STALE_MS)
|
|
35
|
+
throw inProgress;
|
|
36
|
+
const reclaimed = await host.state.reserveIdempotencyKey("resume", `${baseKey}:retry:${run.updatedAt}`, run.id);
|
|
37
|
+
if (!reclaimed)
|
|
38
|
+
throw inProgress;
|
|
39
|
+
await host.state.updateRun(run.id, {});
|
|
40
|
+
}
|
|
41
|
+
export async function resumeApprovalNowImpl(host, runId) {
|
|
42
|
+
host.boot();
|
|
43
|
+
await host.initializeInstrumentation();
|
|
44
|
+
let run = await host.state.getRun(runId);
|
|
45
|
+
if (!run)
|
|
46
|
+
throw new Error(`Run not found: ${runId}`);
|
|
47
|
+
if (run.status !== "waiting_for_approval")
|
|
48
|
+
throw new Error(`Run ${runId} is not waiting for approval.`);
|
|
49
|
+
const toolCall = (await host.state.listToolCalls(runId)).find((candidate) => candidate.status === "waiting_for_approval");
|
|
50
|
+
if (!toolCall)
|
|
51
|
+
throw new Error(`Run ${runId} has no approval-gated tool call to resume.`);
|
|
52
|
+
// Per-pause-generation claim: a double-clicked approval (or a concurrent
|
|
53
|
+
// replica) must execute the gated tool exactly once. `updatedAt` changes
|
|
54
|
+
// on every pause, so later legitimate pauses of the same tool call get a
|
|
55
|
+
// fresh key.
|
|
56
|
+
const resumeClaimed = await host.state.reserveIdempotencyKey("resume", `${run.id}:${toolCall.id}:${toolCall.updatedAt}`, run.id);
|
|
57
|
+
if (!resumeClaimed) {
|
|
58
|
+
await reclaimStaleResume(host, run, `${run.id}:${toolCall.id}:${toolCall.updatedAt}`, "approval");
|
|
59
|
+
}
|
|
60
|
+
if (parseQualifiedName(toolCall.toolName)) {
|
|
61
|
+
await host.state.appendEvent(run.id, "tool.approval_resumed", { toolCallId: toolCall.id, toolName: toolCall.toolName });
|
|
62
|
+
return resumeConnectionToolContinuation(host, run, toolCall);
|
|
63
|
+
}
|
|
64
|
+
const tool = runtimeToolsForManifest(host.manifest).find((candidate) => candidate.name === toolCall.toolName);
|
|
65
|
+
if (!tool)
|
|
66
|
+
throw new Error(`Tool not found: ${toolCall.toolName}`);
|
|
67
|
+
const policyTool = applyCoreToolPolicy(tool, host.coreToolPolicy);
|
|
68
|
+
if (!policyTool)
|
|
69
|
+
throw new Error(`Core tool ${tool.name} is disabled by the OpenEve core tool policy.`);
|
|
70
|
+
let currentRun = await host.state.updateRun(run.id, { status: "running" });
|
|
71
|
+
await host.state.appendEvent(currentRun.id, "tool.approval_resumed", { toolCallId: toolCall.id, toolName: policyTool.name });
|
|
72
|
+
const bundle = await host.buildContextBundle({ message: "approval resume", channel: "local", run: currentRun });
|
|
73
|
+
const sandboxHandle = host.createSandboxHandle(() => currentRun, (nextRun) => {
|
|
74
|
+
currentRun = nextRun;
|
|
75
|
+
}, () => bundle);
|
|
76
|
+
const outcome = await host.executeToolWithRecord(currentRun, policyTool, toolCall, toolCall.input, sandboxHandle, true);
|
|
77
|
+
if (outcome.waitingForInput) {
|
|
78
|
+
return host.result(outcome.run, "Human input required.", false, true);
|
|
79
|
+
}
|
|
80
|
+
// Feed the approved tool's result back into the model loop so the agent
|
|
81
|
+
// can continue reasoning, instead of ending the run with raw tool output.
|
|
82
|
+
const resumable = await restoreMatchingContinuation(host, run.id, toolCall.toolName);
|
|
83
|
+
if (resumable) {
|
|
84
|
+
const toolResult = preparedResumeToolResult(toolCall.toolName, outcome.modelOutput, host.env);
|
|
85
|
+
return resumeHarnessLoopImpl(host, outcome.run, resumable.harness, resumable.restored, {
|
|
86
|
+
toolResult
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
// No usable continuation (pre-upgrade run or non-resumable harness):
|
|
90
|
+
// degrade to completing with the tool output, observably.
|
|
91
|
+
await host.state.appendEvent(run.id, "harness.resume_degraded", {
|
|
92
|
+
reason: "approval-resume-without-continuation",
|
|
93
|
+
toolCallId: toolCall.id,
|
|
94
|
+
toolName: toolCall.toolName
|
|
95
|
+
});
|
|
96
|
+
const response = typeof outcome.modelOutput === "string" ? outcome.modelOutput : JSON.stringify(outcome.modelOutput);
|
|
97
|
+
return host.completeRun(outcome.run, sandboxHandle, response, host.runDeliveryChannel(outcome.run));
|
|
98
|
+
}
|
|
99
|
+
/** Restore the latest continuation checkpoint if it matches the resolved harness. */
|
|
100
|
+
async function restoreMatchingContinuation(host, runId, toolName) {
|
|
101
|
+
const restored = readHarnessContinuation(undefined, await host.listHydratedCheckpoints(runId), toolName);
|
|
102
|
+
if (!restored)
|
|
103
|
+
return undefined;
|
|
104
|
+
const harness = await host.resolveAgentHarness(restored.runtime.modelSpec);
|
|
105
|
+
if (restored.continuation.harness !== harness.id || restored.continuation.version !== harness.continuationVersion) {
|
|
106
|
+
await host.state.appendEvent(runId, "harness.continuation_mismatch", {
|
|
107
|
+
expectedHarness: harness.id,
|
|
108
|
+
expectedVersion: harness.continuationVersion,
|
|
109
|
+
storedHarness: restored.continuation.harness,
|
|
110
|
+
storedVersion: restored.continuation.version
|
|
111
|
+
});
|
|
112
|
+
return undefined;
|
|
113
|
+
}
|
|
114
|
+
return { harness, restored };
|
|
115
|
+
}
|
|
116
|
+
export async function completeConnectionAuthorizationCallbackImpl(host, callback) {
|
|
117
|
+
host.boot();
|
|
118
|
+
await host.initializeInstrumentation();
|
|
119
|
+
await host.ensureDynamicConnections();
|
|
120
|
+
const registry = new RuntimeConnectionRegistry({
|
|
121
|
+
connections: host.mergedConnections(),
|
|
122
|
+
env: host.env,
|
|
123
|
+
fetch: host.fetch,
|
|
124
|
+
session: { channel: "authorization" },
|
|
125
|
+
grantStore: host.connectionGrantStore,
|
|
126
|
+
authorizationSessionStore: host.connectionAuthorizationSessionStore,
|
|
127
|
+
...(host.connectionCallbackBaseUrl ? { callbackBaseUrl: host.connectionCallbackBaseUrl } : {}),
|
|
128
|
+
loadDefinition: async (connection) => host.loadConnectionDefinition(connection)
|
|
129
|
+
});
|
|
130
|
+
const session = await registry.completeAuthorization(callback);
|
|
131
|
+
if (!session.runId || !session.toolCallId) {
|
|
132
|
+
return {
|
|
133
|
+
status: 200,
|
|
134
|
+
body: {
|
|
135
|
+
ok: true,
|
|
136
|
+
connection: session.connectionName,
|
|
137
|
+
status: session.status
|
|
138
|
+
}
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
const run = await host.state.getRun(session.runId);
|
|
142
|
+
if (!run)
|
|
143
|
+
throw new Error(`Run not found for authorization callback: ${session.runId}`);
|
|
144
|
+
const toolCall = (await host.state.listToolCalls(run.id)).find((candidate) => candidate.id === session.toolCallId);
|
|
145
|
+
if (!toolCall)
|
|
146
|
+
throw new Error(`Tool call not found for authorization callback: ${session.toolCallId}`);
|
|
147
|
+
await host.state.appendEvent(run.id, "authorization.completed", {
|
|
148
|
+
connectionName: session.connectionName,
|
|
149
|
+
authorizationSessionId: session.id,
|
|
150
|
+
toolCallId: toolCall.id
|
|
151
|
+
});
|
|
152
|
+
// A replayed/double-fired OAuth callback must not execute the gated tool
|
|
153
|
+
// twice: claim this pause generation before resuming.
|
|
154
|
+
const resumeClaimed = await host.state.reserveIdempotencyKey("resume", `${run.id}:${toolCall.id}:${toolCall.updatedAt}`, run.id);
|
|
155
|
+
if (!resumeClaimed) {
|
|
156
|
+
return {
|
|
157
|
+
status: 200,
|
|
158
|
+
body: {
|
|
159
|
+
ok: true,
|
|
160
|
+
connection: session.connectionName,
|
|
161
|
+
runId: run.id,
|
|
162
|
+
runStatus: run.status,
|
|
163
|
+
response: "Authorization already processed."
|
|
164
|
+
}
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
const runResult = await host.withRunAdmission(() => resumeConnectionToolContinuation(host, run, toolCall, session));
|
|
168
|
+
return {
|
|
169
|
+
status: 200,
|
|
170
|
+
body: {
|
|
171
|
+
ok: true,
|
|
172
|
+
connection: session.connectionName,
|
|
173
|
+
runId: runResult.run.id,
|
|
174
|
+
runStatus: runResult.run.status,
|
|
175
|
+
response: runResult.response ?? ""
|
|
176
|
+
},
|
|
177
|
+
runResult
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
export async function resumeInputNowImpl(host, runId, answer) {
|
|
181
|
+
host.boot();
|
|
182
|
+
await host.initializeInstrumentation();
|
|
183
|
+
const run = await host.state.getRun(runId);
|
|
184
|
+
if (!run)
|
|
185
|
+
throw new Error(`Run not found: ${runId}`);
|
|
186
|
+
if (run.status !== "waiting_for_input")
|
|
187
|
+
throw new Error(`Run ${runId} is not waiting for input.`);
|
|
188
|
+
// The pending question is the tool call parked by HumanInputRequired.
|
|
189
|
+
const toolCall = (await host.state.listToolCalls(runId)).find((candidate) => candidate.status === "waiting_for_approval");
|
|
190
|
+
// Per-pause-generation claim so a double-submitted answer resumes once.
|
|
191
|
+
const resumeClaimed = await host.state.reserveIdempotencyKey("resume", toolCall ? `${run.id}:${toolCall.id}:${toolCall.updatedAt}` : `${run.id}:input:${run.updatedAt}`, run.id);
|
|
192
|
+
if (!resumeClaimed) {
|
|
193
|
+
await reclaimStaleResume(host, run, toolCall ? `${run.id}:${toolCall.id}:${toolCall.updatedAt}` : `${run.id}:input:${run.updatedAt}`, "input");
|
|
194
|
+
}
|
|
195
|
+
let running = await host.state.updateRun(run.id, { status: "running" });
|
|
196
|
+
await host.state.appendEvent(run.id, "human_input.received", { answer });
|
|
197
|
+
if (toolCall) {
|
|
198
|
+
await host.state.updateToolCall(toolCall.id, {
|
|
199
|
+
status: "completed",
|
|
200
|
+
result: { answer },
|
|
201
|
+
modelOutput: { answer }
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
// Feed the human's answer back into the model loop as the pending tool's
|
|
205
|
+
// result so the agent that asked actually sees it and continues.
|
|
206
|
+
const toolName = toolCall?.toolName ?? ASK_QUESTION_TOOL_NAME;
|
|
207
|
+
const resumable = await restoreMatchingContinuation(host, run.id, toolName);
|
|
208
|
+
if (resumable) {
|
|
209
|
+
return resumeHarnessLoopImpl(host, running, resumable.harness, resumable.restored, {
|
|
210
|
+
toolResult: { toolName, output: { answer } }
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
await host.state.appendEvent(run.id, "harness.resume_degraded", {
|
|
214
|
+
reason: "input-resume-without-continuation",
|
|
215
|
+
toolCallId: toolCall?.id ?? null,
|
|
216
|
+
toolName
|
|
217
|
+
});
|
|
218
|
+
const bundle = await host.buildContextBundle({ message: answer, channel: "local", run: running });
|
|
219
|
+
const sandboxHandle = host.createSandboxHandle(() => running, (nextRun) => {
|
|
220
|
+
running = nextRun;
|
|
221
|
+
}, () => bundle);
|
|
222
|
+
return host.completeRun(running, sandboxHandle, `Received input: ${answer}`, host.runDeliveryChannel(running));
|
|
223
|
+
}
|
|
224
|
+
export async function resumeSuspendedNowImpl(host, runId) {
|
|
225
|
+
host.boot();
|
|
226
|
+
await host.initializeInstrumentation();
|
|
227
|
+
await host.ensureDynamicConnections();
|
|
228
|
+
const run = await host.state.getRun(runId);
|
|
229
|
+
if (!run)
|
|
230
|
+
throw new Error(`Run not found: ${runId}`);
|
|
231
|
+
if (run.status !== "suspended")
|
|
232
|
+
throw new Error(`Run ${runId} is not suspended.`);
|
|
233
|
+
const resumeClaimed = await host.state.reserveIdempotencyKey("resume:suspended", `${run.id}:${run.updatedAt}`, run.id);
|
|
234
|
+
if (!resumeClaimed)
|
|
235
|
+
throw new Error(`Run ${runId} suspended resume is already in progress.`);
|
|
236
|
+
const restored = readHarnessContinuation(undefined, await host.listHydratedCheckpoints(runId));
|
|
237
|
+
if (!restored)
|
|
238
|
+
throw new Error(`Run ${runId} has no harness continuation to resume.`);
|
|
239
|
+
const harness = await host.resolveAgentHarness(restored.runtime.modelSpec);
|
|
240
|
+
if (restored.continuation.harness !== harness.id || restored.continuation.version !== harness.continuationVersion) {
|
|
241
|
+
await host.state.appendEvent(run.id, "harness.continuation_mismatch", {
|
|
242
|
+
expectedHarness: harness.id,
|
|
243
|
+
expectedVersion: harness.continuationVersion,
|
|
244
|
+
storedHarness: restored.continuation.harness,
|
|
245
|
+
storedVersion: restored.continuation.version
|
|
246
|
+
});
|
|
247
|
+
throw new Error(`Run ${runId} harness continuation is incompatible with the configured harness.`);
|
|
248
|
+
}
|
|
249
|
+
const running = await host.state.updateRun(run.id, { status: "running" });
|
|
250
|
+
await host.state.appendEvent(run.id, "run.resumed", { from: "suspended" });
|
|
251
|
+
return resumeHarnessLoopImpl(host, running, harness, restored, {});
|
|
252
|
+
}
|
|
253
|
+
async function resumeConnectionToolContinuation(host, run, toolCall, authorizationSession) {
|
|
254
|
+
const running = await host.state.updateRun(run.id, { status: "running" });
|
|
255
|
+
const fallbackChannel = typeof run.input.channel === "string" ? run.input.channel : "local";
|
|
256
|
+
const parsed = parseQualifiedName(toolCall.toolName);
|
|
257
|
+
const sandboxCli = parsed
|
|
258
|
+
? host.mergedConnections().find((connection) => connection.name === parsed.connectionName)?.protocol === "cli"
|
|
259
|
+
: false;
|
|
260
|
+
let sandboxRun = running;
|
|
261
|
+
let sandboxHandle;
|
|
262
|
+
if (sandboxCli) {
|
|
263
|
+
const bundle = await host.buildContextBundle({
|
|
264
|
+
message: "connection approval resume",
|
|
265
|
+
channel: fallbackChannel,
|
|
266
|
+
run: sandboxRun
|
|
267
|
+
});
|
|
268
|
+
sandboxHandle = host.createSandboxHandle(() => sandboxRun, (nextRun) => {
|
|
269
|
+
sandboxRun = nextRun;
|
|
270
|
+
}, () => bundle);
|
|
271
|
+
}
|
|
272
|
+
const registry = sandboxHandle
|
|
273
|
+
? host.createConnectionRegistryForRun(running, fallbackChannel, sandboxHandle)
|
|
274
|
+
: authorizationSession
|
|
275
|
+
? host.createConnectionRegistryForSession(authorizationSession)
|
|
276
|
+
: host.createConnectionRegistry(fallbackChannel);
|
|
277
|
+
const outcome = await host.executeConnectionToolWithRecord(running, registry, toolCall.toolName, toolCall, toolCall.input);
|
|
278
|
+
sandboxRun = outcome.run;
|
|
279
|
+
if (outcome.waitingForConnection) {
|
|
280
|
+
await sandboxHandle?.dispose();
|
|
281
|
+
return host.result(outcome.run, await connectionAuthorizationPrompt(host.connectionAuthorizationSessionStore, outcome.authorizationSessionId, ""), false, false, true);
|
|
282
|
+
}
|
|
283
|
+
let restored = readHarnessContinuation(authorizationSession?.continuation, await host.listHydratedCheckpoints(run.id), toolCall.toolName);
|
|
284
|
+
const harness = await host.resolveAgentHarness(restored?.runtime.modelSpec);
|
|
285
|
+
if (restored && (restored.continuation.harness !== harness.id || restored.continuation.version !== harness.continuationVersion)) {
|
|
286
|
+
await host.state.appendEvent(run.id, "harness.continuation_mismatch", {
|
|
287
|
+
expectedHarness: harness.id,
|
|
288
|
+
expectedVersion: harness.continuationVersion,
|
|
289
|
+
storedHarness: restored.continuation.harness,
|
|
290
|
+
storedVersion: restored.continuation.version
|
|
291
|
+
});
|
|
292
|
+
restored = undefined;
|
|
293
|
+
}
|
|
294
|
+
if (!restored) {
|
|
295
|
+
const response = typeof outcome.modelOutput === "string" ? outcome.modelOutput : JSON.stringify(outcome.modelOutput ?? {});
|
|
296
|
+
if (sandboxHandle) {
|
|
297
|
+
return host.completeRun(sandboxRun, sandboxHandle, response, host.runDeliveryChannel(sandboxRun));
|
|
298
|
+
}
|
|
299
|
+
let fallbackRun = outcome.run;
|
|
300
|
+
const bundle = await host.buildContextBundle({ message: "connection resume", channel: "local", run: fallbackRun });
|
|
301
|
+
const fallbackSandboxHandle = host.createSandboxHandle(() => fallbackRun, (nextRun) => {
|
|
302
|
+
fallbackRun = nextRun;
|
|
303
|
+
}, () => bundle);
|
|
304
|
+
return host.completeRun(fallbackRun, fallbackSandboxHandle, response, host.runDeliveryChannel(fallbackRun));
|
|
305
|
+
}
|
|
306
|
+
const toolResult = preparedResumeToolResult(toolCall.toolName, outcome.modelOutput, host.env);
|
|
307
|
+
await sandboxHandle?.dispose();
|
|
308
|
+
return resumeHarnessLoopImpl(host, outcome.run, harness, restored, { toolResult });
|
|
309
|
+
}
|
|
310
|
+
/** Resume an orphaned run in place from its latest persisted continuation checkpoint. */
|
|
311
|
+
export async function resumeRunFromContinuationImpl(host, run, context) {
|
|
312
|
+
const checkpoints = await host.listHydratedCheckpoints(run.id);
|
|
313
|
+
let restored;
|
|
314
|
+
let checkpointCreatedAt;
|
|
315
|
+
for (let index = checkpoints.length - 1; index >= 0 && !restored; index -= 1) {
|
|
316
|
+
const checkpoint = checkpoints[index];
|
|
317
|
+
if (!checkpoint || checkpoint.name !== "harness.continuation")
|
|
318
|
+
continue;
|
|
319
|
+
restored = storedHarnessContinuation(checkpoint.data);
|
|
320
|
+
if (restored)
|
|
321
|
+
checkpointCreatedAt = checkpoint.createdAt;
|
|
322
|
+
}
|
|
323
|
+
if (!restored)
|
|
324
|
+
return undefined;
|
|
325
|
+
const harness = await host.resolveAgentHarness(restored.runtime.modelSpec);
|
|
326
|
+
if (restored.continuation.harness !== harness.id || restored.continuation.version !== harness.continuationVersion) {
|
|
327
|
+
await host.state.appendEvent(run.id, "harness.continuation_mismatch", {
|
|
328
|
+
expectedHarness: harness.id,
|
|
329
|
+
expectedVersion: harness.continuationVersion,
|
|
330
|
+
storedHarness: restored.continuation.harness,
|
|
331
|
+
storedVersion: restored.continuation.version
|
|
332
|
+
});
|
|
333
|
+
return undefined;
|
|
334
|
+
}
|
|
335
|
+
await host.state.appendEvent(run.id, "run.recovery_resume_attempted", { harness: harness.id });
|
|
336
|
+
const running = await host.state.updateRun(run.id, { status: "running" });
|
|
337
|
+
// If the continuation is parked on a tool that was mid-execution at crash
|
|
338
|
+
// time, resume with an explicit interrupted result so the model knows the
|
|
339
|
+
// side effects are indeterminate instead of silently re-requesting the
|
|
340
|
+
// tool. Otherwise resume from the iteration boundary as-is.
|
|
341
|
+
const pendingToolName = restored.runtime.pendingToolName;
|
|
342
|
+
const interrupted = context?.interruptedTools?.find((tool) => tool.toolName === pendingToolName);
|
|
343
|
+
const resume = interrupted
|
|
344
|
+
? {
|
|
345
|
+
toolResult: {
|
|
346
|
+
toolName: interrupted.toolName,
|
|
347
|
+
output: {
|
|
348
|
+
interrupted: true,
|
|
349
|
+
error: "This tool execution was interrupted by a runtime restart; its side effects may or may not have happened. Verify before re-running side-effecting operations."
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
: {};
|
|
354
|
+
// Crash mid-tool-batch: the restored checkpoint predates the batch's tool
|
|
355
|
+
// calls, so surface their durable outcomes as a follow-up message rather
|
|
356
|
+
// than letting the model silently re-execute completed side effects.
|
|
357
|
+
// (The pause path above splices the pending tool directly and needs no report.)
|
|
358
|
+
if (!interrupted) {
|
|
359
|
+
const report = crashResumeReport(await host.state.listToolCalls(run.id), checkpointCreatedAt, context?.interruptedTools ?? []);
|
|
360
|
+
if (report)
|
|
361
|
+
resume.message = report;
|
|
362
|
+
}
|
|
363
|
+
try {
|
|
364
|
+
const result = await resumeHarnessLoopImpl(host, running, harness, restored, resume);
|
|
365
|
+
return result.run;
|
|
366
|
+
}
|
|
367
|
+
catch (error) {
|
|
368
|
+
// A continuation parked on a completed assistant turn (or empty context)
|
|
369
|
+
// has nothing to resume; the harness signals this by refusing to continue.
|
|
370
|
+
// That is not a resume failure — it means the run already produced its
|
|
371
|
+
// final response — so degrade to "no usable continuation" and let recovery
|
|
372
|
+
// deliver the completed response instead of logging a spurious failure.
|
|
373
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
374
|
+
if (/continue from message role/iu.test(message) || /no messages in context/iu.test(message)) {
|
|
375
|
+
await host.state.appendEvent(run.id, "run.recovery_resume_unavailable", { reason: message });
|
|
376
|
+
return undefined;
|
|
377
|
+
}
|
|
378
|
+
throw error;
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
export async function resumeHarnessLoopImpl(host, run, harness, restored, resume) {
|
|
382
|
+
const activeSkills = new Set(restored.runtime.activeSkills);
|
|
383
|
+
const defaultToolNames = new Set(restored.runtime.defaultToolNames);
|
|
384
|
+
const discoveredConnectionTools = new Map(restored.runtime.discoveredConnectionTools.map((tool) => [tool.qualifiedName, tool]));
|
|
385
|
+
let currentRun = run;
|
|
386
|
+
let pause;
|
|
387
|
+
const bundle = await host.buildContextBundle({ message: "connection resume", channel: restored.runtime.channel, run: currentRun });
|
|
388
|
+
const sandboxHandle = host.createSandboxHandle(() => currentRun, (nextRun) => {
|
|
389
|
+
currentRun = nextRun;
|
|
390
|
+
}, () => bundle);
|
|
391
|
+
const connectionRegistry = host.createConnectionRegistryForRun(run, restored.runtime.channel, sandboxHandle);
|
|
392
|
+
const session = {
|
|
393
|
+
modelSpec: restored.runtime.modelSpec,
|
|
394
|
+
reasoning: restored.runtime.reasoning,
|
|
395
|
+
systemPrompt: restored.runtime.systemPrompt,
|
|
396
|
+
outputSchema: restored.runtime.outputSchema,
|
|
397
|
+
maxIterations: restored.runtime.maxIterations,
|
|
398
|
+
sessionId: restored.runtime.sessionId,
|
|
399
|
+
channel: restored.runtime.channel,
|
|
400
|
+
activeSkills,
|
|
401
|
+
defaultToolNames,
|
|
402
|
+
discoveredConnectionTools
|
|
403
|
+
};
|
|
404
|
+
if (restored.runtime.conversationId)
|
|
405
|
+
session.conversationId = restored.runtime.conversationId;
|
|
406
|
+
const loopState = {
|
|
407
|
+
run: () => currentRun,
|
|
408
|
+
setRun: (nextRun) => {
|
|
409
|
+
currentRun = nextRun;
|
|
410
|
+
},
|
|
411
|
+
sandboxHandle,
|
|
412
|
+
activeSkills,
|
|
413
|
+
defaultToolNames,
|
|
414
|
+
connectionRegistry,
|
|
415
|
+
discoveredConnectionTools,
|
|
416
|
+
setPause: (nextPause) => {
|
|
417
|
+
// First pause wins: in a tool batch where several calls pause, the
|
|
418
|
+
// run parks on the first one and later pauses must not repoint the
|
|
419
|
+
// resume bookkeeping mid-flight.
|
|
420
|
+
pause ??= nextPause;
|
|
421
|
+
}
|
|
422
|
+
};
|
|
423
|
+
const heartbeat = host.startRunHeartbeat(run.id);
|
|
424
|
+
let policy;
|
|
425
|
+
try {
|
|
426
|
+
policy = await host.executeHarnessTurn(harness, {
|
|
427
|
+
kind: "resume",
|
|
428
|
+
continuation: restored.continuation,
|
|
429
|
+
...(resume.toolResult ? { toolResult: resume.toolResult } : {}),
|
|
430
|
+
...(resume.message !== undefined ? { message: resume.message } : {})
|
|
431
|
+
}, session, loopState, true);
|
|
432
|
+
}
|
|
433
|
+
finally {
|
|
434
|
+
heartbeat.stop();
|
|
435
|
+
}
|
|
436
|
+
const result = policy.result;
|
|
437
|
+
if (pause) {
|
|
438
|
+
await host.persistHarnessContinuation(pause.run.id, session, result.continuation, pause);
|
|
439
|
+
return host.result(pause.run, result.response, pause.waitingForApproval, pause.waitingForInput, pause.waitingForConnection);
|
|
440
|
+
}
|
|
441
|
+
if (policy.failed || policy.controlStopped) {
|
|
442
|
+
await sandboxHandle.dispose();
|
|
443
|
+
return host.result(currentRun, result.response, false, false, false);
|
|
444
|
+
}
|
|
445
|
+
const completed = await host.completeRun(currentRun, sandboxHandle, result.response, restored.runtime.channel, undefined, restored.runtime.conversationId);
|
|
446
|
+
if (policy.output !== undefined)
|
|
447
|
+
completed.output = policy.output;
|
|
448
|
+
// Keep the conversation's transcript pointer current: a paused turn that
|
|
449
|
+
// completed here would otherwise leave the pointer at the pre-pause run and
|
|
450
|
+
// the next conversation turn would resume a transcript missing this one.
|
|
451
|
+
if (restored.runtime.conversationId && result.continuation && !policy.failed && !policy.controlStopped) {
|
|
452
|
+
try {
|
|
453
|
+
await persistConversationTranscriptImpl({ state: host.state, createCheckpoint: (input) => host.createCheckpoint(input) }, {
|
|
454
|
+
runId: run.id,
|
|
455
|
+
conversationId: restored.runtime.conversationId,
|
|
456
|
+
session,
|
|
457
|
+
continuation: result.continuation,
|
|
458
|
+
...(session.lastInputTokens !== undefined ? { lastInputTokens: session.lastInputTokens } : {})
|
|
459
|
+
});
|
|
460
|
+
}
|
|
461
|
+
catch {
|
|
462
|
+
// Best-effort acceleration layer; the durable history is unaffected.
|
|
463
|
+
}
|
|
464
|
+
}
|
|
465
|
+
return completed;
|
|
466
|
+
}
|
|
467
|
+
function preparedResumeToolResult(toolName, output, env) {
|
|
468
|
+
const prepared = prepareToolModelOutput(output, env);
|
|
469
|
+
const result = {
|
|
470
|
+
toolName,
|
|
471
|
+
output: prepared.output
|
|
472
|
+
};
|
|
473
|
+
if (prepared.media.length > 0)
|
|
474
|
+
result.media = prepared.media;
|
|
475
|
+
return result;
|
|
476
|
+
}
|
|
477
|
+
function readHarnessContinuation(stored, checkpoints, toolName) {
|
|
478
|
+
if (stored)
|
|
479
|
+
return storedHarnessContinuation(stored);
|
|
480
|
+
for (let index = checkpoints.length - 1; index >= 0; index -= 1) {
|
|
481
|
+
const checkpoint = checkpoints[index];
|
|
482
|
+
if (!checkpoint)
|
|
483
|
+
continue;
|
|
484
|
+
if (checkpoint.name !== "harness.continuation")
|
|
485
|
+
continue;
|
|
486
|
+
const restored = storedHarnessContinuation(checkpoint.data);
|
|
487
|
+
if (!restored)
|
|
488
|
+
continue;
|
|
489
|
+
const pendingToolName = restored.runtime.pendingToolName;
|
|
490
|
+
if (toolName === undefined || typeof pendingToolName !== "string" || pendingToolName === toolName)
|
|
491
|
+
return restored;
|
|
492
|
+
}
|
|
493
|
+
return undefined;
|
|
494
|
+
}
|
|
495
|
+
//# sourceMappingURL=replay-resume.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"replay-resume.js","sourceRoot":"","sources":["../src/replay-resume.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAErF,OAAO,EACL,6BAA6B,EAC7B,kBAAkB,EAClB,yBAAyB,EAI1B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,yBAAyB,EAG1B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,iCAAiC,EAAE,MAAM,8BAA8B,CAAC;AAEjF,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAUtD,OAAO,EAAE,mBAAmB,EAA+B,MAAM,eAAe,CAAC;AA+GjF,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAsB,EAAE,KAAa;IACpE,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC3C,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,KAAK,EAAE,CAAC,CAAC;IACrD,OAAO;QACL,GAAG;QACH,MAAM,EAAE,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC;QAC1C,SAAS,EAAE,MAAM,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC;QAChD,WAAW,EAAE,MAAM,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC;QACtD,UAAU,EAAE,MAAM,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC;QAClD,KAAK,EAAE,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC;KACzC,CAAC;AACJ,CAAC;AAED,sFAAsF;AACtF,MAAM,uBAAuB,GAAG,CAAC,GAAG,MAAM,CAAC;AAE3C;;;;;;;;GAQG;AACH,KAAK,UAAU,kBAAkB,CAC/B,IAAsB,EACtB,GAAc,EACd,OAAe,EACf,IAA0B;IAE1B,MAAM,UAAU,GAAG,IAAI,KAAK,CAAC,OAAO,GAAG,CAAC,EAAE,IAAI,IAAI,iCAAiC,CAAC,CAAC;IACrF,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,uBAAuB;QAAE,MAAM,UAAU,CAAC;IACvF,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,QAAQ,EAAE,GAAG,OAAO,UAAU,GAAG,CAAC,SAAS,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;IAChH,IAAI,CAAC,SAAS;QAAE,MAAM,UAAU,CAAC;IACjC,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,IAAsB,EAAE,KAAa;IAC/E,IAAI,CAAC,IAAI,EAAE,CAAC;IACZ,MAAM,IAAI,CAAC,yBAAyB,EAAE,CAAC;IACvC,IAAI,GAAG,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACzC,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,KAAK,EAAE,CAAC,CAAC;IACrD,IAAI,GAAG,CAAC,MAAM,KAAK,sBAAsB;QAAE,MAAM,IAAI,KAAK,CAAC,OAAO,KAAK,+BAA+B,CAAC,CAAC;IACxG,MAAM,QAAQ,GAAG,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,KAAK,sBAAsB,CAAC,CAAC;IAC1H,IAAI,CAAC,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,OAAO,KAAK,6CAA6C,CAAC,CAAC;IAC1F,yEAAyE;IACzE,yEAAyE;IACzE,yEAAyE;IACzE,aAAa;IACb,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAC1D,QAAQ,EACR,GAAG,GAAG,CAAC,EAAE,IAAI,QAAQ,CAAC,EAAE,IAAI,QAAQ,CAAC,SAAS,EAAE,EAChD,GAAG,CAAC,EAAE,CACP,CAAC;IACF,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,MAAM,kBAAkB,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,EAAE,IAAI,QAAQ,CAAC,EAAE,IAAI,QAAQ,CAAC,SAAS,EAAE,EAAE,UAAU,CAAC,CAAC;IACpG,CAAC;IACD,IAAI,kBAAkB,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1C,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,EAAE,uBAAuB,EAAE,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC;QACxH,OAAO,gCAAgC,CAAC,IAAI,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;IAC/D,CAAC;IACD,MAAM,IAAI,GAAG,uBAAuB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC9G,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC;IACnE,MAAM,UAAU,GAAG,mBAAmB,CAAC,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;IAClE,IAAI,CAAC,UAAU;QAAE,MAAM,IAAI,KAAK,CAAC,aAAa,IAAI,CAAC,IAAI,+CAA+C,CAAC,CAAC;IACxG,IAAI,UAAU,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;IAC3E,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE,EAAE,uBAAuB,EAAE,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,EAAE,QAAQ,EAAE,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;IAC7H,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,EAAE,OAAO,EAAE,iBAAiB,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,CAAC;IAChH,MAAM,aAAa,GAAG,IAAI,CAAC,mBAAmB,CAC5C,GAAG,EAAE,CAAC,UAAU,EAChB,CAAC,OAAO,EAAE,EAAE;QACV,UAAU,GAAG,OAAO,CAAC;IACvB,CAAC,EACD,GAAG,EAAE,CAAC,MAAM,CACb,CAAC;IACF,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,CAAC,KAAK,EAAE,aAAa,EAAE,IAAI,CAAC,CAAC;IACxH,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,uBAAuB,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IACxE,CAAC;IACD,wEAAwE;IACxE,0EAA0E;IAC1E,MAAM,SAAS,GAAG,MAAM,2BAA2B,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACrF,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,UAAU,GAAG,wBAAwB,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QAC9F,OAAO,qBAAqB,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,EAAE,SAAS,CAAC,OAAO,EAAE,SAAS,CAAC,QAAQ,EAAE;YACrF,UAAU;SACX,CAAC,CAAC;IACL,CAAC;IACD,qEAAqE;IACrE,0DAA0D;IAC1D,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,EAAE,yBAAyB,EAAE;QAC9D,MAAM,EAAE,sCAAsC;QAC9C,UAAU,EAAE,QAAQ,CAAC,EAAE;QACvB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;KAC5B,CAAC,CAAC;IACH,MAAM,QAAQ,GAAG,OAAO,OAAO,CAAC,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IACrH,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,EAAE,aAAa,EAAE,QAAQ,EAAE,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;AACtG,CAAC;AAED,qFAAqF;AACrF,KAAK,UAAU,2BAA2B,CACxC,IAAsB,EACtB,KAAa,EACb,QAAgB;IAEhB,MAAM,QAAQ,GAAG,uBAAuB,CAAC,SAAS,EAAE,MAAM,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,CAAC;IACzG,IAAI,CAAC,QAAQ;QAAE,OAAO,SAAS,CAAC;IAChC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAC3E,IAAI,QAAQ,CAAC,YAAY,CAAC,OAAO,KAAK,OAAO,CAAC,EAAE,IAAI,QAAQ,CAAC,YAAY,CAAC,OAAO,KAAK,OAAO,CAAC,mBAAmB,EAAE,CAAC;QAClH,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,EAAE,+BAA+B,EAAE;YACnE,eAAe,EAAE,OAAO,CAAC,EAAE;YAC3B,eAAe,EAAE,OAAO,CAAC,mBAAmB;YAC5C,aAAa,EAAE,QAAQ,CAAC,YAAY,CAAC,OAAO;YAC5C,aAAa,EAAE,QAAQ,CAAC,YAAY,CAAC,OAAO;SAC7C,CAAC,CAAC;QACH,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;AAC/B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,2CAA2C,CAAC,IAAsB,EAAE,QAIzF;IACC,IAAI,CAAC,IAAI,EAAE,CAAC;IACZ,MAAM,IAAI,CAAC,yBAAyB,EAAE,CAAC;IACvC,MAAM,IAAI,CAAC,wBAAwB,EAAE,CAAC;IACtC,MAAM,QAAQ,GAAG,IAAI,yBAAyB,CAAC;QAC7C,WAAW,EAAE,IAAI,CAAC,iBAAiB,EAAE;QACrC,GAAG,EAAE,IAAI,CAAC,GAAG;QACb,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,OAAO,EAAE,EAAE,OAAO,EAAE,eAAe,EAAE;QACrC,UAAU,EAAE,IAAI,CAAC,oBAAoB;QACrC,yBAAyB,EAAE,IAAI,CAAC,mCAAmC;QACnE,GAAG,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,IAAI,CAAC,yBAAyB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9F,cAAc,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,CAAC,IAAI,CAAC,wBAAwB,CAAC,UAAU,CAAC;KAChF,CAAC,CAAC;IACH,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC;IAC/D,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;QAC1C,OAAO;YACL,MAAM,EAAE,GAAG;YACX,IAAI,EAAE;gBACJ,EAAE,EAAE,IAAI;gBACR,UAAU,EAAE,OAAO,CAAC,cAAc;gBAClC,MAAM,EAAE,OAAO,CAAC,MAAM;aACvB;SACF,CAAC;IACJ,CAAC;IACD,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACnD,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,6CAA6C,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;IACxF,MAAM,QAAQ,GAAG,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;IACnH,IAAI,CAAC,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,mDAAmD,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;IACxG,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,EAAE,yBAAyB,EAAE;QAC9D,cAAc,EAAE,OAAO,CAAC,cAAc;QACtC,sBAAsB,EAAE,OAAO,CAAC,EAAE;QAClC,UAAU,EAAE,QAAQ,CAAC,EAAE;KACxB,CAAC,CAAC;IACH,yEAAyE;IACzE,sDAAsD;IACtD,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAC1D,QAAQ,EACR,GAAG,GAAG,CAAC,EAAE,IAAI,QAAQ,CAAC,EAAE,IAAI,QAAQ,CAAC,SAAS,EAAE,EAChD,GAAG,CAAC,EAAE,CACP,CAAC;IACF,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,OAAO;YACL,MAAM,EAAE,GAAG;YACX,IAAI,EAAE;gBACJ,EAAE,EAAE,IAAI;gBACR,UAAU,EAAE,OAAO,CAAC,cAAc;gBAClC,KAAK,EAAE,GAAG,CAAC,EAAE;gBACb,SAAS,EAAE,GAAG,CAAC,MAAM;gBACrB,QAAQ,EAAE,kCAAkC;aAC7C;SACF,CAAC;IACJ,CAAC;IACD,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,CAAC,gCAAgC,CAAC,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;IACpH,OAAO;QACL,MAAM,EAAE,GAAG;QACX,IAAI,EAAE;YACJ,EAAE,EAAE,IAAI;YACR,UAAU,EAAE,OAAO,CAAC,cAAc;YAClC,KAAK,EAAE,SAAS,CAAC,GAAG,CAAC,EAAE;YACvB,SAAS,EAAE,SAAS,CAAC,GAAG,CAAC,MAAM;YAC/B,QAAQ,EAAE,SAAS,CAAC,QAAQ,IAAI,EAAE;SACnC;QACD,SAAS;KACV,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,IAAsB,EAAE,KAAa,EAAE,MAAc;IAC5F,IAAI,CAAC,IAAI,EAAE,CAAC;IACZ,MAAM,IAAI,CAAC,yBAAyB,EAAE,CAAC;IACvC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC3C,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,KAAK,EAAE,CAAC,CAAC;IACrD,IAAI,GAAG,CAAC,MAAM,KAAK,mBAAmB;QAAE,MAAM,IAAI,KAAK,CAAC,OAAO,KAAK,4BAA4B,CAAC,CAAC;IAClG,sEAAsE;IACtE,MAAM,QAAQ,GAAG,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,KAAK,sBAAsB,CAAC,CAAC;IAC1H,wEAAwE;IACxE,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAC1D,QAAQ,EACR,QAAQ,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,EAAE,IAAI,QAAQ,CAAC,EAAE,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,EAAE,UAAU,GAAG,CAAC,SAAS,EAAE,EAChG,GAAG,CAAC,EAAE,CACP,CAAC;IACF,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,MAAM,kBAAkB,CACtB,IAAI,EACJ,GAAG,EACH,QAAQ,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,EAAE,IAAI,QAAQ,CAAC,EAAE,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,EAAE,UAAU,GAAG,CAAC,SAAS,EAAE,EAChG,OAAO,CACR,CAAC;IACJ,CAAC;IACD,IAAI,OAAO,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;IACxE,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,EAAE,sBAAsB,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IACzE,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,EAAE;YAC3C,MAAM,EAAE,WAAW;YACnB,MAAM,EAAE,EAAE,MAAM,EAAE;YAClB,WAAW,EAAE,EAAE,MAAM,EAAE;SACxB,CAAC,CAAC;IACL,CAAC;IACD,yEAAyE;IACzE,iEAAiE;IACjE,MAAM,QAAQ,GAAG,QAAQ,EAAE,QAAQ,IAAI,sBAAsB,CAAC;IAC9D,MAAM,SAAS,GAAG,MAAM,2BAA2B,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;IAC5E,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,qBAAqB,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS,CAAC,OAAO,EAAE,SAAS,CAAC,QAAQ,EAAE;YACjF,UAAU,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,EAAE;SAC7C,CAAC,CAAC;IACL,CAAC;IACD,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,EAAE,yBAAyB,EAAE;QAC9D,MAAM,EAAE,mCAAmC;QAC3C,UAAU,EAAE,QAAQ,EAAE,EAAE,IAAI,IAAI;QAChC,QAAQ;KACT,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC;IAClG,MAAM,aAAa,GAAG,IAAI,CAAC,mBAAmB,CAC5C,GAAG,EAAE,CAAC,OAAO,EACb,CAAC,OAAO,EAAE,EAAE;QACV,OAAO,GAAG,OAAO,CAAC;IACpB,CAAC,EACD,GAAG,EAAE,CAAC,MAAM,CACb,CAAC;IACF,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,aAAa,EAAE,mBAAmB,MAAM,EAAE,EAAE,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC;AACjH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,IAAsB,EAAE,KAAa;IAChF,IAAI,CAAC,IAAI,EAAE,CAAC;IACZ,MAAM,IAAI,CAAC,yBAAyB,EAAE,CAAC;IACvC,MAAM,IAAI,CAAC,wBAAwB,EAAE,CAAC;IACtC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC3C,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,KAAK,EAAE,CAAC,CAAC;IACrD,IAAI,GAAG,CAAC,MAAM,KAAK,WAAW;QAAE,MAAM,IAAI,KAAK,CAAC,OAAO,KAAK,oBAAoB,CAAC,CAAC;IAClF,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAC1D,kBAAkB,EAClB,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,SAAS,EAAE,EAC5B,GAAG,CAAC,EAAE,CACP,CAAC;IACF,IAAI,CAAC,aAAa;QAAE,MAAM,IAAI,KAAK,CAAC,OAAO,KAAK,2CAA2C,CAAC,CAAC;IAC7F,MAAM,QAAQ,GAAG,uBAAuB,CAAC,SAAS,EAAE,MAAM,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC,CAAC;IAC/F,IAAI,CAAC,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,OAAO,KAAK,yCAAyC,CAAC,CAAC;IACtF,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAC3E,IAAI,QAAQ,CAAC,YAAY,CAAC,OAAO,KAAK,OAAO,CAAC,EAAE,IAAI,QAAQ,CAAC,YAAY,CAAC,OAAO,KAAK,OAAO,CAAC,mBAAmB,EAAE,CAAC;QAClH,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,EAAE,+BAA+B,EAAE;YACpE,eAAe,EAAE,OAAO,CAAC,EAAE;YAC3B,eAAe,EAAE,OAAO,CAAC,mBAAmB;YAC5C,aAAa,EAAE,QAAQ,CAAC,YAAY,CAAC,OAAO;YAC5C,aAAa,EAAE,QAAQ,CAAC,YAAY,CAAC,OAAO;SAC7C,CAAC,CAAC;QACH,MAAM,IAAI,KAAK,CAAC,OAAO,KAAK,oEAAoE,CAAC,CAAC;IACpG,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;IAC1E,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;IAC3E,OAAO,qBAAqB,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;AACrE,CAAC;AAED,KAAK,UAAU,gCAAgC,CAC7C,IAAsB,EACtB,GAAc,EACd,QAAwB,EACxB,oBAA2D;IAE3D,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;IAC1E,MAAM,eAAe,GAAG,OAAO,GAAG,CAAC,KAAK,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;IAC5F,MAAM,MAAM,GAAG,kBAAkB,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACrD,MAAM,UAAU,GAAG,MAAM;QACvB,CAAC,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,KAAK,MAAM,CAAC,cAAc,CAAC,EAAE,QAAQ,KAAK,KAAK;QAC9G,CAAC,CAAC,KAAK,CAAC;IACV,IAAI,UAAU,GAAG,OAAO,CAAC;IACzB,IAAI,aAA+C,CAAC;IACpD,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC;YAC3C,OAAO,EAAE,4BAA4B;YACrC,OAAO,EAAE,eAAe;YACxB,GAAG,EAAE,UAAU;SAChB,CAAC,CAAC;QACH,aAAa,GAAG,IAAI,CAAC,mBAAmB,CACtC,GAAG,EAAE,CAAC,UAAU,EAChB,CAAC,OAAO,EAAE,EAAE;YACV,UAAU,GAAG,OAAO,CAAC;QACvB,CAAC,EACD,GAAG,EAAE,CAAC,MAAM,CACb,CAAC;IACJ,CAAC;IACD,MAAM,QAAQ,GAAG,aAAa;QAC5B,CAAC,CAAC,IAAI,CAAC,8BAA8B,CAAC,OAAO,EAAE,eAAe,EAAE,aAAa,CAAC;QAC9E,CAAC,CAAC,oBAAoB;YACpB,CAAC,CAAC,IAAI,CAAC,kCAAkC,CAAC,oBAAoB,CAAC;YAC/D,CAAC,CAAC,IAAI,CAAC,wBAAwB,CAAC,eAAe,CAAC,CAAC;IACrD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,+BAA+B,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC3H,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC;IACzB,IAAI,OAAO,CAAC,oBAAoB,EAAE,CAAC;QACjC,MAAM,aAAa,EAAE,OAAO,EAAE,CAAC;QAC/B,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,6BAA6B,CAAC,IAAI,CAAC,mCAAmC,EAAE,OAAO,CAAC,sBAAsB,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IACzK,CAAC;IACD,IAAI,QAAQ,GAAG,uBAAuB,CACpC,oBAAoB,EAAE,YAAY,EAClC,MAAM,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,EAAE,CAAC,EAC1C,QAAQ,CAAC,QAAQ,CAClB,CAAC;IACF,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IAC5E,IAAI,QAAQ,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,OAAO,KAAK,OAAO,CAAC,EAAE,IAAI,QAAQ,CAAC,YAAY,CAAC,OAAO,KAAK,OAAO,CAAC,mBAAmB,CAAC,EAAE,CAAC;QAChI,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,EAAE,+BAA+B,EAAE;YACpE,eAAe,EAAE,OAAO,CAAC,EAAE;YAC3B,eAAe,EAAE,OAAO,CAAC,mBAAmB;YAC5C,aAAa,EAAE,QAAQ,CAAC,YAAY,CAAC,OAAO;YAC5C,aAAa,EAAE,QAAQ,CAAC,YAAY,CAAC,OAAO;SAC7C,CAAC,CAAC;QACH,QAAQ,GAAG,SAAS,CAAC;IACvB,CAAC;IACD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,QAAQ,GAAG,OAAO,OAAO,CAAC,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;QAC3H,IAAI,aAAa,EAAE,CAAC;YAClB,OAAO,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,aAAa,EAAE,QAAQ,EAAE,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC,CAAC;QACpG,CAAC;QACD,IAAI,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC;QAC9B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,EAAE,OAAO,EAAE,mBAAmB,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,WAAW,EAAE,CAAC,CAAC;QACnH,MAAM,qBAAqB,GAAG,IAAI,CAAC,mBAAmB,CACpD,GAAG,EAAE,CAAC,WAAW,EACjB,CAAC,OAAO,EAAE,EAAE;YACV,WAAW,GAAG,OAAO,CAAC;QACxB,CAAC,EACD,GAAG,EAAE,CAAC,MAAM,CACb,CAAC;QACF,OAAO,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,qBAAqB,EAAE,QAAQ,EAAE,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC,CAAC;IAC9G,CAAC;IACD,MAAM,UAAU,GAAG,wBAAwB,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IAC9F,MAAM,aAAa,EAAE,OAAO,EAAE,CAAC;IAC/B,OAAO,qBAAqB,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;AACrF,CAAC;AAED,yFAAyF;AACzF,MAAM,CAAC,KAAK,UAAU,6BAA6B,CACjD,IAAsB,EACtB,GAAc,EACd,OAAgF;IAEhF,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC/D,IAAI,QAA4C,CAAC;IACjD,IAAI,mBAAuC,CAAC;IAC5C,KAAK,IAAI,KAAK,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QAC7E,MAAM,UAAU,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;QACtC,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,IAAI,KAAK,sBAAsB;YAAE,SAAS;QACxE,QAAQ,GAAG,yBAAyB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACtD,IAAI,QAAQ;YAAE,mBAAmB,GAAG,UAAU,CAAC,SAAS,CAAC;IAC3D,CAAC;IACD,IAAI,CAAC,QAAQ;QAAE,OAAO,SAAS,CAAC;IAChC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAC3E,IAAI,QAAQ,CAAC,YAAY,CAAC,OAAO,KAAK,OAAO,CAAC,EAAE,IAAI,QAAQ,CAAC,YAAY,CAAC,OAAO,KAAK,OAAO,CAAC,mBAAmB,EAAE,CAAC;QAClH,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,EAAE,+BAA+B,EAAE;YACpE,eAAe,EAAE,OAAO,CAAC,EAAE;YAC3B,eAAe,EAAE,OAAO,CAAC,mBAAmB;YAC5C,aAAa,EAAE,QAAQ,CAAC,YAAY,CAAC,OAAO;YAC5C,aAAa,EAAE,QAAQ,CAAC,YAAY,CAAC,OAAO;SAC7C,CAAC,CAAC;QACH,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,EAAE,+BAA+B,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;IAC/F,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;IAC1E,0EAA0E;IAC1E,0EAA0E;IAC1E,uEAAuE;IACvE,4DAA4D;IAC5D,MAAM,eAAe,GAAG,QAAQ,CAAC,OAAO,CAAC,eAAe,CAAC;IACzD,MAAM,WAAW,GAAG,OAAO,EAAE,gBAAgB,EAAE,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,KAAK,eAAe,CAAC,CAAC;IACjG,MAAM,MAAM,GAA6E,WAAW;QAClG,CAAC,CAAC;YACE,UAAU,EAAE;gBACV,QAAQ,EAAE,WAAW,CAAC,QAAQ;gBAC9B,MAAM,EAAE;oBACN,WAAW,EAAE,IAAI;oBACjB,KAAK,EAAE,8JAA8J;iBACtK;aACF;SACF;QACH,CAAC,CAAC,EAAE,CAAC;IACP,0EAA0E;IAC1E,yEAAyE;IACzE,qEAAqE;IACrE,gFAAgF;IAChF,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,MAAM,GAAG,iBAAiB,CAC9B,MAAM,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,EACtC,mBAAmB,EACnB,OAAO,EAAE,gBAAgB,IAAI,EAAE,CAChC,CAAC;QACF,IAAI,MAAM;YAAE,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC;IACtC,CAAC;IACD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,qBAAqB,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;QACrF,OAAO,MAAM,CAAC,GAAG,CAAC;IACpB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,yEAAyE;QACzE,2EAA2E;QAC3E,uEAAuE;QACvE,2EAA2E;QAC3E,wEAAwE;QACxE,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,IAAI,8BAA8B,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,0BAA0B,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YAC7F,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,EAAE,iCAAiC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;YAC7F,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,IAAsB,EACtB,GAAc,EACd,OAAqB,EACrB,QAAgC,EAChC,MAA6G;IAE7G,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAC5D,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACpE,MAAM,yBAAyB,GAAG,IAAI,GAAG,CACvC,QAAQ,CAAC,OAAO,CAAC,yBAAyB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAU,CAAC,CAC9F,CAAC;IACF,IAAI,UAAU,GAAG,GAAG,CAAC;IACrB,IAAI,KAA+B,CAAC;IACpC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,EAAE,OAAO,EAAE,mBAAmB,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,CAAC;IACnI,MAAM,aAAa,GAAG,IAAI,CAAC,mBAAmB,CAC5C,GAAG,EAAE,CAAC,UAAU,EAChB,CAAC,OAAO,EAAE,EAAE;QACV,UAAU,GAAG,OAAO,CAAC;IACvB,CAAC,EACD,GAAG,EAAE,CAAC,MAAM,CACb,CAAC;IACF,MAAM,kBAAkB,GAAG,IAAI,CAAC,8BAA8B,CAAC,GAAG,EAAE,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;IAC7G,MAAM,OAAO,GAAuB;QAClC,SAAS,EAAE,QAAQ,CAAC,OAAO,CAAC,SAAS;QACrC,SAAS,EAAE,QAAQ,CAAC,OAAO,CAAC,SAAS;QACrC,YAAY,EAAE,QAAQ,CAAC,OAAO,CAAC,YAAY;QAC3C,YAAY,EAAE,QAAQ,CAAC,OAAO,CAAC,YAAY;QAC3C,aAAa,EAAE,QAAQ,CAAC,OAAO,CAAC,aAAa;QAC7C,SAAS,EAAE,QAAQ,CAAC,OAAO,CAAC,SAAS;QACrC,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,OAAO;QACjC,YAAY;QACZ,gBAAgB;QAChB,yBAAyB;KAC1B,CAAC;IACF,IAAI,QAAQ,CAAC,OAAO,CAAC,cAAc;QAAE,OAAO,CAAC,cAAc,GAAG,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC;IAC9F,MAAM,SAAS,GAAqB;QAClC,GAAG,EAAE,GAAG,EAAE,CAAC,UAAU;QACrB,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE;YAClB,UAAU,GAAG,OAAO,CAAC;QACvB,CAAC;QACD,aAAa;QACb,YAAY;QACZ,gBAAgB;QAChB,kBAAkB;QAClB,yBAAyB;QACzB,QAAQ,EAAE,CAAC,SAAS,EAAE,EAAE;YACtB,mEAAmE;YACnE,mEAAmE;YACnE,iCAAiC;YACjC,KAAK,KAAK,SAAS,CAAC;QACtB,CAAC;KACF,CAAC;IACF,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACjD,IAAI,MAAmE,CAAC;IACxE,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,IAAI,CAAC,kBAAkB,CACpC,OAAO,EACP;YACE,IAAI,EAAE,QAAQ;YACd,YAAY,EAAE,QAAQ,CAAC,YAAY;YACnC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/D,GAAG,CAAC,MAAM,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACrE,EACD,OAAO,EACP,SAAS,EACT,IAAI,CACL,CAAC;IACJ,CAAC;YAAS,CAAC;QACT,SAAS,CAAC,IAAI,EAAE,CAAC;IACnB,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IAC7B,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,IAAI,CAAC,0BAA0B,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;QACzF,OAAO,IAAI,CAAC,MAAM,CAChB,KAAK,CAAC,GAAG,EACT,MAAM,CAAC,QAAQ,EACf,KAAK,CAAC,kBAAkB,EACxB,KAAK,CAAC,eAAe,EACrB,KAAK,CAAC,oBAAoB,CAC3B,CAAC;IACJ,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;QAC3C,MAAM,aAAa,CAAC,OAAO,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IACvE,CAAC;IACD,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,aAAa,EAAE,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IAC3J,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS;QAAE,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IAClE,yEAAyE;IACzE,4EAA4E;IAC5E,yEAAyE;IACzE,IAAI,QAAQ,CAAC,OAAO,CAAC,cAAc,IAAI,MAAM,CAAC,YAAY,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;QACvG,IAAI,CAAC;YACH,MAAM,iCAAiC,CACrC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,gBAAgB,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,EAChF;gBACE,KAAK,EAAE,GAAG,CAAC,EAAE;gBACb,cAAc,EAAE,QAAQ,CAAC,OAAO,CAAC,cAAc;gBAC/C,OAAO;gBACP,YAAY,EAAE,MAAM,CAAC,YAAY;gBACjC,GAAG,CAAC,OAAO,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC/F,CACF,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,qEAAqE;QACvE,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,wBAAwB,CAC/B,QAAgB,EAChB,MAAe,EACf,GAAuC;IAEvC,MAAM,QAAQ,GAAG,sBAAsB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACrD,MAAM,MAAM,GAAuE;QACjF,QAAQ;QACR,MAAM,EAAE,QAAQ,CAAC,MAAM;KACxB,CAAC;IACF,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;QAAE,MAAM,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;IAC7D,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,uBAAuB,CAC9B,MAA8B,EAC9B,WAA+B,EAC/B,QAAiB;IAEjB,IAAI,MAAM;QAAE,OAAO,yBAAyB,CAAC,MAAM,CAAC,CAAC;IACrD,KAAK,IAAI,KAAK,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QAChE,MAAM,UAAU,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;QACtC,IAAI,CAAC,UAAU;YAAE,SAAS;QAC1B,IAAI,UAAU,CAAC,IAAI,KAAK,sBAAsB;YAAE,SAAS;QACzD,MAAM,QAAQ,GAAG,yBAAyB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAC5D,IAAI,CAAC,QAAQ;YAAE,SAAS;QACxB,MAAM,eAAe,GAAG,QAAQ,CAAC,OAAO,CAAC,eAAe,CAAC;QACzD,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,eAAe,KAAK,QAAQ,IAAI,eAAe,KAAK,QAAQ;YAAE,OAAO,QAAQ,CAAC;IACrH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import type { JsonObject, ResourceKind, ResourceMetadata, ResourceMutability, ResourceProjectInput, ResourceTrustLevel, SandboxSession } from "@assemblyline-agents/core";
|
|
2
|
+
import type { ContextBundle, ResolvedResource, ResolvedResourceProjectionPolicy, ResourceProjectionPolicy, ResourceProjectionSelector } from "./runtime-types.js";
|
|
3
|
+
import { type StoredSkill } from "./self-improvement.js";
|
|
4
|
+
import type { FileIndexRecord, MemoryDocument } from "./state.js";
|
|
5
|
+
/**
|
|
6
|
+
* Resource-projection leaf helpers: metadata builders for memory, skill,
|
|
7
|
+
* history, attachment, file-index, and runtime-context resources, plus the
|
|
8
|
+
* path normalization/validation rules for projecting them into the sandbox.
|
|
9
|
+
*/
|
|
10
|
+
export declare const RESOURCE_KINDS: ResourceKind[];
|
|
11
|
+
export declare const RESOURCE_ROOTS: string[];
|
|
12
|
+
export declare function isResourceKind(value: unknown): value is ResourceKind;
|
|
13
|
+
export declare function resolveResourceProjectionPolicy(policy: ResourceProjectionPolicy | undefined, env: Record<string, string | undefined>): ResolvedResourceProjectionPolicy;
|
|
14
|
+
export declare function memoryDocumentResourceMetadata(document: MemoryDocument): ResourceMetadata;
|
|
15
|
+
export declare function skillResourceMetadata(skill: StoredSkill): ResourceMetadata;
|
|
16
|
+
export declare function historyResourceMetadata(bundle: ContextBundle): ResourceMetadata[];
|
|
17
|
+
export declare function resolveHistoryResource(bundle: ContextBundle, path: string): ResolvedResource | undefined;
|
|
18
|
+
export declare function historyResource(path: string, contents: string, contentType?: string): ResolvedResource;
|
|
19
|
+
export declare function runtimeContextResourceMetadata(bundle: ContextBundle): ResourceMetadata;
|
|
20
|
+
export declare function resolveRuntimeResource(bundle: ContextBundle, path: string): ResolvedResource | undefined;
|
|
21
|
+
export declare function runtimeContextResourceBody(bundle: ContextBundle): string;
|
|
22
|
+
export declare function attachmentResourceMetadataForContents(attachment: JsonObject, contents: string | Uint8Array): ResourceMetadata;
|
|
23
|
+
export declare function fileIndexResourcePath(record: FileIndexRecord): string;
|
|
24
|
+
export declare function fileIndexResourceMetadata(record: FileIndexRecord): ResourceMetadata;
|
|
25
|
+
export declare function resourceMetadata(input: {
|
|
26
|
+
path: string;
|
|
27
|
+
kind: ResourceKind;
|
|
28
|
+
contentType: string;
|
|
29
|
+
contents: string | Uint8Array;
|
|
30
|
+
mutability: ResourceMutability;
|
|
31
|
+
trustLevel: ResourceTrustLevel;
|
|
32
|
+
source: string;
|
|
33
|
+
revision?: string;
|
|
34
|
+
tokenEstimate?: number;
|
|
35
|
+
sha256?: string;
|
|
36
|
+
}): ResourceMetadata;
|
|
37
|
+
export declare function resourceByteLength(contents: string | Uint8Array): number;
|
|
38
|
+
export declare function sandboxWriteByteLength(contents: string | Uint8Array): number;
|
|
39
|
+
export declare function resourceSha256(contents: string | Uint8Array): string;
|
|
40
|
+
export declare function resourceContentsForModel(contents: string | Uint8Array, maxBytes: number): {
|
|
41
|
+
body: string;
|
|
42
|
+
encoding: "utf8" | "base64";
|
|
43
|
+
truncated: boolean;
|
|
44
|
+
};
|
|
45
|
+
export declare function normalizeResourceProjectionSelectors(input: ResourceProjectInput): ResourceProjectionSelector[];
|
|
46
|
+
export declare function normalizeResourcePath(path: string): string;
|
|
47
|
+
export declare function normalizeProjectionSandboxPath(path: string): string;
|
|
48
|
+
export declare function skillNameFromResourcePath(path: string): string | undefined;
|
|
49
|
+
export declare function skillNameFromSandboxRelativePath(relativePath: string): string | undefined;
|
|
50
|
+
export declare function skillNameFromSkillPath(path: string): string | undefined;
|
|
51
|
+
export declare function isValidSandboxSkillName(name: string): boolean;
|
|
52
|
+
export declare function isValidSandboxSkillBody(body: string): boolean;
|
|
53
|
+
export declare function sandboxFileContentsToUtf8(contents: Uint8Array | string): string;
|
|
54
|
+
export declare function sha256Text(contents: string): string;
|
|
55
|
+
export declare function writeProjectedResourceToSandbox(sandbox: SandboxSession, path: string, contents: string | Uint8Array): Promise<void>;
|
|
56
|
+
export declare function localReadOnlyRootForProjection(sandbox: SandboxSession, path: string): string | undefined;
|
|
57
|
+
export declare function sanitizeResourcePath(path: string): string;
|
|
58
|
+
//# sourceMappingURL=resource-projection-util.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resource-projection-util.d.ts","sourceRoot":"","sources":["../src/resource-projection-util.ts"],"names":[],"mappings":"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"}
|