@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,37 @@
|
|
|
1
|
+
export function createHookDispatcher(options) {
|
|
2
|
+
let loaded;
|
|
3
|
+
const load = async () => {
|
|
4
|
+
const hooks = [];
|
|
5
|
+
for (const hook of options.hooks) {
|
|
6
|
+
try {
|
|
7
|
+
const module = await options.loadModule(hook.source);
|
|
8
|
+
const events = module.default?.events;
|
|
9
|
+
if (!events || typeof events !== "object") {
|
|
10
|
+
options.logger.warn("hook.invalid", { hook: hook.name, detail: "default export must declare an events map" });
|
|
11
|
+
continue;
|
|
12
|
+
}
|
|
13
|
+
hooks.push({ name: hook.name, events });
|
|
14
|
+
}
|
|
15
|
+
catch (error) {
|
|
16
|
+
options.logger.warn("hook.load_failed", { hook: hook.name, error: String(error) });
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
return hooks;
|
|
20
|
+
};
|
|
21
|
+
return async (runId, event) => {
|
|
22
|
+
loaded ??= load();
|
|
23
|
+
const hooks = await loaded;
|
|
24
|
+
for (const hook of hooks) {
|
|
25
|
+
const handlers = [hook.events[event.type], hook.events["*"]].filter((handler) => typeof handler === "function");
|
|
26
|
+
for (const handler of handlers) {
|
|
27
|
+
try {
|
|
28
|
+
await handler({ type: event.type, timestamp: event.timestamp, data: event.data, ...(event.sequence !== undefined ? { sequence: event.sequence } : {}) }, { runId, agent: { name: options.agentName } });
|
|
29
|
+
}
|
|
30
|
+
catch (error) {
|
|
31
|
+
options.logger.warn("hook.failed", { hook: hook.name, eventType: event.type, error: String(error) });
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=hook-dispatch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hook-dispatch.js","sourceRoot":"","sources":["../src/hook-dispatch.ts"],"names":[],"mappings":"AA0BA,MAAM,UAAU,oBAAoB,CAAC,OAA8B;IACjE,IAAI,MAAyC,CAAC;IAE9C,MAAM,IAAI,GAAG,KAAK,IAA2B,EAAE;QAC7C,MAAM,KAAK,GAAiB,EAAE,CAAC;QAC/B,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YACjC,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,UAAU,CAA+B,IAAI,CAAC,MAAM,CAAC,CAAC;gBACnF,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC;gBACtC,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;oBAC1C,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,2CAA2C,EAAE,CAAC,CAAC;oBAC9G,SAAS;gBACX,CAAC;gBACD,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;YAC1C,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACrF,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;IAEF,OAAO,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;QAC5B,MAAM,KAAK,IAAI,EAAE,CAAC;QAClB,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC;QAC3B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CACjE,CAAC,OAAO,EAA+B,EAAE,CAAC,OAAO,OAAO,KAAK,UAAU,CACxE,CAAC;YACF,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;gBAC/B,IAAI,CAAC;oBACH,MAAM,OAAO,CACX,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EACzI,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,SAAS,EAAE,EAAE,CAC9C,CAAC;gBACJ,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBACvG,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
|
package/dist/http.d.ts
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { JsonObject } from "@assemblyline-agents/core";
|
|
2
|
+
export interface HttpRequestPolicy {
|
|
3
|
+
timeoutMs?: number;
|
|
4
|
+
maxAttempts?: number;
|
|
5
|
+
minDelayMs?: number;
|
|
6
|
+
maxDelayMs?: number;
|
|
7
|
+
maxResponseBytes?: number;
|
|
8
|
+
retryOn?: (response: Response) => boolean;
|
|
9
|
+
/** Override the retry delay for a response-based retry (e.g. Telegram's parameters.retry_after in the body). */
|
|
10
|
+
retryDelayMsFor?: (response: Response, attempt: number) => number | undefined;
|
|
11
|
+
}
|
|
12
|
+
export interface HttpJsonResult {
|
|
13
|
+
response: Response;
|
|
14
|
+
status: number;
|
|
15
|
+
ok: boolean;
|
|
16
|
+
json: JsonObject;
|
|
17
|
+
text: string;
|
|
18
|
+
}
|
|
19
|
+
export declare class HttpResponseTooLargeError extends Error {
|
|
20
|
+
constructor(limitBytes: number);
|
|
21
|
+
}
|
|
22
|
+
export declare function retryAfterMs(response: Response, fallbackMs: number, capMs: number): number;
|
|
23
|
+
export declare function fetchWithPolicy(fetchImpl: typeof fetch, url: string, init?: RequestInit, policy?: HttpRequestPolicy): Promise<Response>;
|
|
24
|
+
export declare function readBodyCapped(response: Response, maxBytes?: number): Promise<string>;
|
|
25
|
+
export declare function fetchJson(fetchImpl: typeof fetch, url: string, init?: RequestInit, policy?: HttpRequestPolicy): Promise<HttpJsonResult>;
|
|
26
|
+
//# sourceMappingURL=http.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAQ5D,MAAM,WAAW,iBAAiB;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,OAAO,CAAC;IAC1C,gHAAgH;IAChH,eAAe,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;CAC/E;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,QAAQ,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,OAAO,CAAC;IACZ,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,qBAAa,yBAA0B,SAAQ,KAAK;gBACtC,UAAU,EAAE,MAAM;CAI/B;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAS1F;AAED,wBAAsB,eAAe,CACnC,SAAS,EAAE,OAAO,KAAK,EACvB,GAAG,EAAE,MAAM,EACX,IAAI,GAAE,WAAgB,EACtB,MAAM,GAAE,iBAAsB,GAC7B,OAAO,CAAC,QAAQ,CAAC,CAqCnB;AAED,wBAAsB,cAAc,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,GAAE,MAAmC,GAAG,OAAO,CAAC,MAAM,CAAC,CAmBvH;AAED,wBAAsB,SAAS,CAC7B,SAAS,EAAE,OAAO,KAAK,EACvB,GAAG,EAAE,MAAM,EACX,IAAI,GAAE,WAAgB,EACtB,MAAM,GAAE,iBAAsB,GAC7B,OAAO,CAAC,cAAc,CAAC,CAazB"}
|
package/dist/http.js
ADDED
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
const DEFAULT_TIMEOUT_MS = 15_000;
|
|
2
|
+
const DEFAULT_MAX_ATTEMPTS = 3;
|
|
3
|
+
const DEFAULT_MIN_DELAY_MS = 250;
|
|
4
|
+
const DEFAULT_MAX_DELAY_MS = 30_000;
|
|
5
|
+
const DEFAULT_MAX_RESPONSE_BYTES = 512 * 1024;
|
|
6
|
+
export class HttpResponseTooLargeError extends Error {
|
|
7
|
+
constructor(limitBytes) {
|
|
8
|
+
super(`HTTP response exceeded the ${limitBytes}-byte limit.`);
|
|
9
|
+
this.name = "HttpResponseTooLargeError";
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
export function retryAfterMs(response, fallbackMs, capMs) {
|
|
13
|
+
const header = response.headers.get("retry-after");
|
|
14
|
+
if (header) {
|
|
15
|
+
const seconds = Number(header);
|
|
16
|
+
if (Number.isFinite(seconds) && seconds >= 0)
|
|
17
|
+
return Math.min(seconds * 1000, capMs);
|
|
18
|
+
const dateMs = Date.parse(header);
|
|
19
|
+
if (Number.isFinite(dateMs))
|
|
20
|
+
return Math.min(Math.max(dateMs - Date.now(), 0), capMs);
|
|
21
|
+
}
|
|
22
|
+
return Math.min(fallbackMs, capMs);
|
|
23
|
+
}
|
|
24
|
+
export async function fetchWithPolicy(fetchImpl, url, init = {}, policy = {}) {
|
|
25
|
+
const timeoutMs = policy.timeoutMs ?? DEFAULT_TIMEOUT_MS;
|
|
26
|
+
const maxAttempts = Math.max(1, policy.maxAttempts ?? DEFAULT_MAX_ATTEMPTS);
|
|
27
|
+
const minDelayMs = policy.minDelayMs ?? DEFAULT_MIN_DELAY_MS;
|
|
28
|
+
const maxDelayMs = policy.maxDelayMs ?? DEFAULT_MAX_DELAY_MS;
|
|
29
|
+
const shouldRetry = policy.retryOn ?? ((response) => response.status === 429 || response.status >= 500);
|
|
30
|
+
let lastError;
|
|
31
|
+
for (let attempt = 1; attempt <= maxAttempts; attempt += 1) {
|
|
32
|
+
const controller = new AbortController();
|
|
33
|
+
const timer = setTimeout(() => controller.abort(new Error(`HTTP request timed out after ${timeoutMs}ms.`)), timeoutMs);
|
|
34
|
+
const upstreamAbort = init.signal;
|
|
35
|
+
const onUpstreamAbort = () => controller.abort(upstreamAbort?.reason);
|
|
36
|
+
if (upstreamAbort) {
|
|
37
|
+
if (upstreamAbort.aborted)
|
|
38
|
+
controller.abort(upstreamAbort.reason);
|
|
39
|
+
else
|
|
40
|
+
upstreamAbort.addEventListener("abort", onUpstreamAbort, { once: true });
|
|
41
|
+
}
|
|
42
|
+
try {
|
|
43
|
+
const response = await fetchImpl(url, { ...init, signal: controller.signal });
|
|
44
|
+
if (!shouldRetry(response) || attempt >= maxAttempts)
|
|
45
|
+
return response;
|
|
46
|
+
const overrideDelay = policy.retryDelayMsFor?.(response, attempt);
|
|
47
|
+
const delayMs = overrideDelay !== undefined
|
|
48
|
+
? Math.min(overrideDelay, maxDelayMs)
|
|
49
|
+
: retryAfterMs(response, backoffDelayMs(attempt, minDelayMs, maxDelayMs), maxDelayMs);
|
|
50
|
+
await response.body?.cancel().catch(() => undefined);
|
|
51
|
+
await sleep(delayMs);
|
|
52
|
+
}
|
|
53
|
+
catch (error) {
|
|
54
|
+
if (upstreamAbort?.aborted)
|
|
55
|
+
throw error;
|
|
56
|
+
lastError = error;
|
|
57
|
+
if (attempt >= maxAttempts)
|
|
58
|
+
throw error;
|
|
59
|
+
await sleep(backoffDelayMs(attempt, minDelayMs, maxDelayMs));
|
|
60
|
+
}
|
|
61
|
+
finally {
|
|
62
|
+
clearTimeout(timer);
|
|
63
|
+
if (upstreamAbort)
|
|
64
|
+
upstreamAbort.removeEventListener("abort", onUpstreamAbort);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
throw lastError instanceof Error ? lastError : new Error("HTTP request failed.");
|
|
68
|
+
}
|
|
69
|
+
export async function readBodyCapped(response, maxBytes = DEFAULT_MAX_RESPONSE_BYTES) {
|
|
70
|
+
const body = response.body;
|
|
71
|
+
if (!body)
|
|
72
|
+
return "";
|
|
73
|
+
const reader = body.getReader();
|
|
74
|
+
const chunks = [];
|
|
75
|
+
let total = 0;
|
|
76
|
+
for (;;) {
|
|
77
|
+
const { done, value } = await reader.read();
|
|
78
|
+
if (done)
|
|
79
|
+
break;
|
|
80
|
+
if (value) {
|
|
81
|
+
total += value.byteLength;
|
|
82
|
+
if (total > maxBytes) {
|
|
83
|
+
await reader.cancel().catch(() => undefined);
|
|
84
|
+
throw new HttpResponseTooLargeError(maxBytes);
|
|
85
|
+
}
|
|
86
|
+
chunks.push(value);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return Buffer.concat(chunks).toString("utf8");
|
|
90
|
+
}
|
|
91
|
+
export async function fetchJson(fetchImpl, url, init = {}, policy = {}) {
|
|
92
|
+
const response = await fetchWithPolicy(fetchImpl, url, init, policy);
|
|
93
|
+
const text = await readBodyCapped(response, policy.maxResponseBytes ?? DEFAULT_MAX_RESPONSE_BYTES);
|
|
94
|
+
let json = {};
|
|
95
|
+
if (text.length > 0) {
|
|
96
|
+
try {
|
|
97
|
+
const parsed = JSON.parse(text);
|
|
98
|
+
if (parsed && typeof parsed === "object" && !Array.isArray(parsed))
|
|
99
|
+
json = parsed;
|
|
100
|
+
}
|
|
101
|
+
catch {
|
|
102
|
+
// Non-JSON bodies are surfaced through `text`; callers decide how strict to be.
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
return { response, status: response.status, ok: response.ok, json, text };
|
|
106
|
+
}
|
|
107
|
+
function backoffDelayMs(attempt, minDelayMs, maxDelayMs) {
|
|
108
|
+
const exponential = Math.min(minDelayMs * 2 ** (attempt - 1), maxDelayMs);
|
|
109
|
+
return Math.floor(exponential / 2 + Math.random() * (exponential / 2));
|
|
110
|
+
}
|
|
111
|
+
function sleep(ms) {
|
|
112
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=http.js.map
|
package/dist/http.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http.js","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { ConversationTurnRecord, ConversationTurnStatus, ConversationTurnStore } from "./state.js";
|
|
2
|
+
export declare class InMemoryConversationTurnStore implements ConversationTurnStore {
|
|
3
|
+
private readonly persist;
|
|
4
|
+
turns: Map<string, ConversationTurnRecord>;
|
|
5
|
+
constructor(persist?: () => Promise<void>);
|
|
6
|
+
enqueueConversationTurn(input: Parameters<ConversationTurnStore["enqueueConversationTurn"]>[0]): Promise<{
|
|
7
|
+
turn: ConversationTurnRecord;
|
|
8
|
+
inserted: boolean;
|
|
9
|
+
}>;
|
|
10
|
+
leaseNextConversationTurn(options: Parameters<ConversationTurnStore["leaseNextConversationTurn"]>[0]): Promise<ConversationTurnRecord | undefined>;
|
|
11
|
+
attachConversationTurnRun(id: string, leaseToken: string, runId: string): Promise<ConversationTurnRecord>;
|
|
12
|
+
settleConversationTurn(id: string, leaseToken: string, status: "blocked" | "completed" | "failed" | "cancelled", options?: {
|
|
13
|
+
runId?: string;
|
|
14
|
+
error?: string;
|
|
15
|
+
}): Promise<ConversationTurnRecord>;
|
|
16
|
+
settleConversationTurnByRunId(runId: string, status: "blocked" | "completed" | "failed" | "cancelled", options?: {
|
|
17
|
+
error?: string;
|
|
18
|
+
}): Promise<ConversationTurnRecord | undefined>;
|
|
19
|
+
retryConversationTurn(id: string, leaseToken: string, error: string): Promise<ConversationTurnRecord>;
|
|
20
|
+
recoverExpiredConversationTurns(now?: Date): Promise<ConversationTurnRecord[]>;
|
|
21
|
+
listConversationTurns(options?: {
|
|
22
|
+
agentScope?: string;
|
|
23
|
+
conversationId?: string;
|
|
24
|
+
status?: ConversationTurnStatus;
|
|
25
|
+
}): Promise<ConversationTurnRecord[]>;
|
|
26
|
+
private requireLease;
|
|
27
|
+
private settle;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=in-memory-conversation-turn-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"in-memory-conversation-turn-store.d.ts","sourceRoot":"","sources":["../src/in-memory-conversation-turn-store.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,sBAAsB,EACtB,sBAAsB,EACtB,qBAAqB,EACtB,MAAM,YAAY,CAAC;AAapB,qBAAa,6BAA8B,YAAW,qBAAqB;IAG7D,OAAO,CAAC,QAAQ,CAAC,OAAO;IAFpC,KAAK,sCAA6C;gBAErB,OAAO,GAAE,MAAM,OAAO,CAAC,IAAI,CAAa;IAE/D,uBAAuB,CAAC,KAAK,EAAE,UAAU,CAAC,qBAAqB,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,CAAC;;;;IA6B9F,yBAAyB,CAC7B,OAAO,EAAE,UAAU,CAAC,qBAAqB,CAAC,2BAA2B,CAAC,CAAC,CAAC,CAAC,CAAC,GACzE,OAAO,CAAC,sBAAsB,GAAG,SAAS,CAAC;IAiCxC,yBAAyB,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAQzG,sBAAsB,CAC1B,EAAE,EAAE,MAAM,EACV,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,WAAW,EACxD,OAAO,GAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAO,GAC/C,OAAO,CAAC,sBAAsB,CAAC;IAK5B,6BAA6B,CACjC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,WAAW,EACxD,OAAO,GAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAO,GAC/B,OAAO,CAAC,sBAAsB,GAAG,SAAS,CAAC;IAQxC,qBAAqB,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAoBrG,+BAA+B,CAAC,GAAG,OAAa,GAAG,OAAO,CAAC,sBAAsB,EAAE,CAAC;IAyBpF,qBAAqB,CAAC,OAAO,GAAE;QACnC,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,MAAM,CAAC,EAAE,sBAAsB,CAAC;KAC5B,GAAG,OAAO,CAAC,sBAAsB,EAAE,CAAC;IAS1C,OAAO,CAAC,YAAY;YASN,MAAM;CAkBrB"}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
import { noPersist, timestamp } from "./state-store-helpers.js";
|
|
3
|
+
const ACTIVE_STATUSES = new Set(["running", "blocked"]);
|
|
4
|
+
function clone(record) {
|
|
5
|
+
return structuredClone(record);
|
|
6
|
+
}
|
|
7
|
+
function retryDelayMs(attemptCount) {
|
|
8
|
+
return Math.min(60_000, 1_000 * (2 ** Math.max(0, attemptCount - 1)));
|
|
9
|
+
}
|
|
10
|
+
export class InMemoryConversationTurnStore {
|
|
11
|
+
persist;
|
|
12
|
+
turns = new Map();
|
|
13
|
+
constructor(persist = noPersist) {
|
|
14
|
+
this.persist = persist;
|
|
15
|
+
}
|
|
16
|
+
async enqueueConversationTurn(input) {
|
|
17
|
+
const existing = [...this.turns.values()].find((turn) => turn.agentScope === input.agentScope &&
|
|
18
|
+
turn.idempotencyScope === input.idempotencyScope &&
|
|
19
|
+
turn.idempotencyKey === input.idempotencyKey);
|
|
20
|
+
if (existing)
|
|
21
|
+
return { turn: clone(existing), inserted: false };
|
|
22
|
+
const now = timestamp();
|
|
23
|
+
const turn = {
|
|
24
|
+
id: randomUUID(),
|
|
25
|
+
agentScope: input.agentScope,
|
|
26
|
+
conversationId: input.conversationId,
|
|
27
|
+
channel: input.channel,
|
|
28
|
+
eventId: input.eventId,
|
|
29
|
+
payload: structuredClone(input.payload),
|
|
30
|
+
idempotencyScope: input.idempotencyScope,
|
|
31
|
+
idempotencyKey: input.idempotencyKey,
|
|
32
|
+
status: "pending",
|
|
33
|
+
attemptCount: 0,
|
|
34
|
+
maxAttempts: Math.max(1, Math.floor(input.maxAttempts ?? 5)),
|
|
35
|
+
nextAttemptAt: now,
|
|
36
|
+
createdAt: now,
|
|
37
|
+
updatedAt: now
|
|
38
|
+
};
|
|
39
|
+
this.turns.set(turn.id, turn);
|
|
40
|
+
await this.persist();
|
|
41
|
+
return { turn: clone(turn), inserted: true };
|
|
42
|
+
}
|
|
43
|
+
async leaseNextConversationTurn(options) {
|
|
44
|
+
const now = options.now ?? new Date();
|
|
45
|
+
const nowIso = now.toISOString();
|
|
46
|
+
const activeConversations = new Set([...this.turns.values()]
|
|
47
|
+
.filter((turn) => turn.agentScope === options.agentScope && ACTIVE_STATUSES.has(turn.status))
|
|
48
|
+
.map((turn) => turn.conversationId));
|
|
49
|
+
const candidate = [...this.turns.values()]
|
|
50
|
+
.filter((turn) => turn.agentScope === options.agentScope &&
|
|
51
|
+
turn.status === "pending" &&
|
|
52
|
+
turn.nextAttemptAt <= nowIso &&
|
|
53
|
+
!activeConversations.has(turn.conversationId))
|
|
54
|
+
// Map iteration and modern Array#sort are stable, preserving insertion
|
|
55
|
+
// order when multiple events arrive in the same clock millisecond.
|
|
56
|
+
.sort((a, b) => a.createdAt.localeCompare(b.createdAt))[0];
|
|
57
|
+
if (!candidate)
|
|
58
|
+
return undefined;
|
|
59
|
+
const leaseToken = randomUUID();
|
|
60
|
+
const updated = {
|
|
61
|
+
...candidate,
|
|
62
|
+
status: "running",
|
|
63
|
+
attemptCount: candidate.attemptCount + 1,
|
|
64
|
+
leaseToken,
|
|
65
|
+
leaseExpiresAt: new Date(now.getTime() + Math.max(1, options.leaseForMs)).toISOString(),
|
|
66
|
+
updatedAt: nowIso
|
|
67
|
+
};
|
|
68
|
+
this.turns.set(updated.id, updated);
|
|
69
|
+
await this.persist();
|
|
70
|
+
return clone(updated);
|
|
71
|
+
}
|
|
72
|
+
async attachConversationTurnRun(id, leaseToken, runId) {
|
|
73
|
+
const current = this.requireLease(id, leaseToken);
|
|
74
|
+
const updated = { ...current, runId, updatedAt: timestamp() };
|
|
75
|
+
this.turns.set(id, updated);
|
|
76
|
+
await this.persist();
|
|
77
|
+
return clone(updated);
|
|
78
|
+
}
|
|
79
|
+
async settleConversationTurn(id, leaseToken, status, options = {}) {
|
|
80
|
+
const current = this.requireLease(id, leaseToken);
|
|
81
|
+
return this.settle(current, status, options);
|
|
82
|
+
}
|
|
83
|
+
async settleConversationTurnByRunId(runId, status, options = {}) {
|
|
84
|
+
const current = [...this.turns.values()].find((turn) => turn.runId === runId && ACTIVE_STATUSES.has(turn.status));
|
|
85
|
+
if (!current)
|
|
86
|
+
return undefined;
|
|
87
|
+
return this.settle(current, status, options);
|
|
88
|
+
}
|
|
89
|
+
async retryConversationTurn(id, leaseToken, error) {
|
|
90
|
+
const current = this.requireLease(id, leaseToken);
|
|
91
|
+
const now = new Date();
|
|
92
|
+
const exhausted = current.attemptCount >= current.maxAttempts;
|
|
93
|
+
const updated = {
|
|
94
|
+
...current,
|
|
95
|
+
status: exhausted ? "failed" : "pending",
|
|
96
|
+
nextAttemptAt: exhausted
|
|
97
|
+
? now.toISOString()
|
|
98
|
+
: new Date(now.getTime() + retryDelayMs(current.attemptCount)).toISOString(),
|
|
99
|
+
lastError: error,
|
|
100
|
+
updatedAt: now.toISOString()
|
|
101
|
+
};
|
|
102
|
+
delete updated.leaseToken;
|
|
103
|
+
delete updated.leaseExpiresAt;
|
|
104
|
+
this.turns.set(id, updated);
|
|
105
|
+
await this.persist();
|
|
106
|
+
return clone(updated);
|
|
107
|
+
}
|
|
108
|
+
async recoverExpiredConversationTurns(now = new Date()) {
|
|
109
|
+
const recovered = [];
|
|
110
|
+
for (const current of this.turns.values()) {
|
|
111
|
+
if (current.status !== "running" ||
|
|
112
|
+
!current.leaseExpiresAt ||
|
|
113
|
+
current.leaseExpiresAt > now.toISOString() ||
|
|
114
|
+
current.runId)
|
|
115
|
+
continue;
|
|
116
|
+
const updated = {
|
|
117
|
+
...current,
|
|
118
|
+
status: current.attemptCount >= current.maxAttempts ? "failed" : "pending",
|
|
119
|
+
nextAttemptAt: now.toISOString(),
|
|
120
|
+
updatedAt: now.toISOString(),
|
|
121
|
+
lastError: current.lastError ?? "Conversation turn lease expired before a run was attached."
|
|
122
|
+
};
|
|
123
|
+
delete updated.leaseToken;
|
|
124
|
+
delete updated.leaseExpiresAt;
|
|
125
|
+
this.turns.set(updated.id, updated);
|
|
126
|
+
recovered.push(clone(updated));
|
|
127
|
+
}
|
|
128
|
+
if (recovered.length > 0)
|
|
129
|
+
await this.persist();
|
|
130
|
+
return recovered;
|
|
131
|
+
}
|
|
132
|
+
async listConversationTurns(options = {}) {
|
|
133
|
+
return [...this.turns.values()]
|
|
134
|
+
.filter((turn) => !options.agentScope || turn.agentScope === options.agentScope)
|
|
135
|
+
.filter((turn) => !options.conversationId || turn.conversationId === options.conversationId)
|
|
136
|
+
.filter((turn) => !options.status || turn.status === options.status)
|
|
137
|
+
.sort((a, b) => a.createdAt.localeCompare(b.createdAt))
|
|
138
|
+
.map(clone);
|
|
139
|
+
}
|
|
140
|
+
requireLease(id, leaseToken) {
|
|
141
|
+
const current = this.turns.get(id);
|
|
142
|
+
if (!current)
|
|
143
|
+
throw new Error(`Conversation turn not found: ${id}`);
|
|
144
|
+
if (current.status !== "running" || current.leaseToken !== leaseToken) {
|
|
145
|
+
throw new Error(`Conversation turn lease mismatch: ${id}`);
|
|
146
|
+
}
|
|
147
|
+
return current;
|
|
148
|
+
}
|
|
149
|
+
async settle(current, status, options) {
|
|
150
|
+
const updated = {
|
|
151
|
+
...current,
|
|
152
|
+
status,
|
|
153
|
+
updatedAt: timestamp()
|
|
154
|
+
};
|
|
155
|
+
if (options.runId)
|
|
156
|
+
updated.runId = options.runId;
|
|
157
|
+
if (options.error)
|
|
158
|
+
updated.lastError = options.error;
|
|
159
|
+
delete updated.leaseToken;
|
|
160
|
+
delete updated.leaseExpiresAt;
|
|
161
|
+
this.turns.set(updated.id, updated);
|
|
162
|
+
await this.persist();
|
|
163
|
+
return clone(updated);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
//# sourceMappingURL=in-memory-conversation-turn-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"in-memory-conversation-turn-store.js","sourceRoot":"","sources":["../src/in-memory-conversation-turn-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAMzC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAEhE,MAAM,eAAe,GAAG,IAAI,GAAG,CAAyB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;AAEhF,SAAS,KAAK,CAAC,MAA8B;IAC3C,OAAO,eAAe,CAAC,MAAM,CAAC,CAAC;AACjC,CAAC;AAED,SAAS,YAAY,CAAC,YAAoB;IACxC,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACxE,CAAC;AAED,MAAM,OAAO,6BAA6B;IAGX;IAF7B,KAAK,GAAG,IAAI,GAAG,EAAkC,CAAC;IAElD,YAA6B,UAA+B,SAAS;QAAxC,YAAO,GAAP,OAAO,CAAiC;IAAG,CAAC;IAEzE,KAAK,CAAC,uBAAuB,CAAC,KAAsE;QAClG,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CACtD,IAAI,CAAC,UAAU,KAAK,KAAK,CAAC,UAAU;YACpC,IAAI,CAAC,gBAAgB,KAAK,KAAK,CAAC,gBAAgB;YAChD,IAAI,CAAC,cAAc,KAAK,KAAK,CAAC,cAAc,CAC7C,CAAC;QACF,IAAI,QAAQ;YAAE,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;QAChE,MAAM,GAAG,GAAG,SAAS,EAAE,CAAC;QACxB,MAAM,IAAI,GAA2B;YACnC,EAAE,EAAE,UAAU,EAAE;YAChB,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,cAAc,EAAE,KAAK,CAAC,cAAc;YACpC,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,OAAO,EAAE,eAAe,CAAC,KAAK,CAAC,OAAO,CAAC;YACvC,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;YACxC,cAAc,EAAE,KAAK,CAAC,cAAc;YACpC,MAAM,EAAE,SAAS;YACjB,YAAY,EAAE,CAAC;YACf,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,IAAI,CAAC,CAAC,CAAC;YAC5D,aAAa,EAAE,GAAG;YAClB,SAAS,EAAE,GAAG;YACd,SAAS,EAAE,GAAG;SACf,CAAC;QACF,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QAC9B,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QACrB,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC/C,CAAC;IAED,KAAK,CAAC,yBAAyB,CAC7B,OAA0E;QAE1E,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC;QACtC,MAAM,MAAM,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;QACjC,MAAM,mBAAmB,GAAG,IAAI,GAAG,CACjC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;aACrB,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,KAAK,OAAO,CAAC,UAAU,IAAI,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;aAC5F,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,CACtC,CAAC;QACF,MAAM,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;aACvC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CACf,IAAI,CAAC,UAAU,KAAK,OAAO,CAAC,UAAU;YACtC,IAAI,CAAC,MAAM,KAAK,SAAS;YACzB,IAAI,CAAC,aAAa,IAAI,MAAM;YAC5B,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,CAC9C;YACD,uEAAuE;YACvE,mEAAmE;aAClE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7D,IAAI,CAAC,SAAS;YAAE,OAAO,SAAS,CAAC;QACjC,MAAM,UAAU,GAAG,UAAU,EAAE,CAAC;QAChC,MAAM,OAAO,GAA2B;YACtC,GAAG,SAAS;YACZ,MAAM,EAAE,SAAS;YACjB,YAAY,EAAE,SAAS,CAAC,YAAY,GAAG,CAAC;YACxC,UAAU;YACV,cAAc,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,EAAE;YACvF,SAAS,EAAE,MAAM;SAClB,CAAC;QACF,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QACpC,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QACrB,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,yBAAyB,CAAC,EAAU,EAAE,UAAkB,EAAE,KAAa;QAC3E,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;QAClD,MAAM,OAAO,GAAG,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,CAAC;QAC9D,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QAC5B,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QACrB,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,sBAAsB,CAC1B,EAAU,EACV,UAAkB,EAClB,MAAwD,EACxD,UAA8C,EAAE;QAEhD,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;QAClD,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/C,CAAC;IAED,KAAK,CAAC,6BAA6B,CACjC,KAAa,EACb,MAAwD,EACxD,UAA8B,EAAE;QAEhC,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CACrD,IAAI,CAAC,KAAK,KAAK,KAAK,IAAI,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CACzD,CAAC;QACF,IAAI,CAAC,OAAO;YAAE,OAAO,SAAS,CAAC;QAC/B,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/C,CAAC;IAED,KAAK,CAAC,qBAAqB,CAAC,EAAU,EAAE,UAAkB,EAAE,KAAa;QACvE,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;QAClD,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,SAAS,GAAG,OAAO,CAAC,YAAY,IAAI,OAAO,CAAC,WAAW,CAAC;QAC9D,MAAM,OAAO,GAA2B;YACtC,GAAG,OAAO;YACV,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;YACxC,aAAa,EAAE,SAAS;gBACtB,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE;gBACnB,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,YAAY,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,WAAW,EAAE;YAC9E,SAAS,EAAE,KAAK;YAChB,SAAS,EAAE,GAAG,CAAC,WAAW,EAAE;SAC7B,CAAC;QACF,OAAO,OAAO,CAAC,UAAU,CAAC;QAC1B,OAAO,OAAO,CAAC,cAAc,CAAC;QAC9B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QAC5B,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QACrB,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,+BAA+B,CAAC,GAAG,GAAG,IAAI,IAAI,EAAE;QACpD,MAAM,SAAS,GAA6B,EAAE,CAAC;QAC/C,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;YAC1C,IACE,OAAO,CAAC,MAAM,KAAK,SAAS;gBAC5B,CAAC,OAAO,CAAC,cAAc;gBACvB,OAAO,CAAC,cAAc,GAAG,GAAG,CAAC,WAAW,EAAE;gBAC1C,OAAO,CAAC,KAAK;gBACb,SAAS;YACX,MAAM,OAAO,GAA2B;gBACtC,GAAG,OAAO;gBACV,MAAM,EAAE,OAAO,CAAC,YAAY,IAAI,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;gBAC1E,aAAa,EAAE,GAAG,CAAC,WAAW,EAAE;gBAChC,SAAS,EAAE,GAAG,CAAC,WAAW,EAAE;gBAC5B,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,4DAA4D;aAC7F,CAAC;YACF,OAAO,OAAO,CAAC,UAAU,CAAC;YAC1B,OAAO,OAAO,CAAC,cAAc,CAAC;YAC9B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;YACpC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QACjC,CAAC;QACD,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC;YAAE,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QAC/C,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,KAAK,CAAC,qBAAqB,CAAC,UAIxB,EAAE;QACJ,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;aAC5B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,KAAK,OAAO,CAAC,UAAU,CAAC;aAC/E,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,KAAK,OAAO,CAAC,cAAc,CAAC;aAC3F,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC;aACnE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;aACtD,GAAG,CAAC,KAAK,CAAC,CAAC;IAChB,CAAC;IAEO,YAAY,CAAC,EAAU,EAAE,UAAkB;QACjD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACnC,IAAI,CAAC,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,EAAE,EAAE,CAAC,CAAC;QACpE,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,IAAI,OAAO,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;YACtE,MAAM,IAAI,KAAK,CAAC,qCAAqC,EAAE,EAAE,CAAC,CAAC;QAC7D,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,KAAK,CAAC,MAAM,CAClB,OAA+B,EAC/B,MAAwD,EACxD,OAA2C;QAE3C,MAAM,OAAO,GAA2B;YACtC,GAAG,OAAO;YACV,MAAM;YACN,SAAS,EAAE,SAAS,EAAE;SACvB,CAAC;QACF,IAAI,OAAO,CAAC,KAAK;YAAE,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QACjD,IAAI,OAAO,CAAC,KAAK;YAAE,OAAO,CAAC,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC;QACrD,OAAO,OAAO,CAAC,UAAU,CAAC;QAC1B,OAAO,OAAO,CAAC,cAAc,CAAC;QAC9B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QACpC,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QACrB,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC;IACxB,CAAC;CACF"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { JsonObject } from "@assemblyline-agents/core";
|
|
2
|
+
import { type DeliveryFailureInput, type DeliveryLeaseOptions, type DeliveryObligationInput, type DeliveryObligationPatch } from "./delivery-queue.js";
|
|
3
|
+
import type { CheckpointRecord, CheckpointRetentionOptions, CheckpointRetentionResult, DeliveryObligation, RunEvent, RunEventType, RunRecord, RunControlIntent, RunStore, ToolCallRecord } from "./state.js";
|
|
4
|
+
export declare class InMemoryRunStore implements RunStore {
|
|
5
|
+
private readonly persist;
|
|
6
|
+
runs: Map<string, RunRecord>;
|
|
7
|
+
events: RunEvent[];
|
|
8
|
+
toolCalls: Map<string, ToolCallRecord>;
|
|
9
|
+
checkpoints: CheckpointRecord[];
|
|
10
|
+
deliveries: Map<string, DeliveryObligation>;
|
|
11
|
+
idempotency: Set<string>;
|
|
12
|
+
constructor(persist?: () => Promise<void>);
|
|
13
|
+
createRun(input: Omit<RunRecord, "id" | "createdAt" | "updatedAt">): Promise<RunRecord>;
|
|
14
|
+
updateRun(id: string, patch: Partial<Omit<RunRecord, "id" | "createdAt">>): Promise<RunRecord>;
|
|
15
|
+
touchRun(id: string): Promise<void>;
|
|
16
|
+
requestRunControl(id: string, intent: RunControlIntent): Promise<RunRecord>;
|
|
17
|
+
settleRunControl(id: string): Promise<RunRecord>;
|
|
18
|
+
getRun(id: string): Promise<RunRecord | undefined>;
|
|
19
|
+
listRuns(): Promise<RunRecord[]>;
|
|
20
|
+
appendEvent(runId: string, type: RunEventType, data?: JsonObject): Promise<RunEvent>;
|
|
21
|
+
listEvents(runId: string): Promise<RunEvent[]>;
|
|
22
|
+
createToolCall(input: Omit<ToolCallRecord, "id" | "createdAt" | "updatedAt">): Promise<ToolCallRecord>;
|
|
23
|
+
updateToolCall(id: string, patch: Partial<Omit<ToolCallRecord, "id" | "createdAt">>): Promise<ToolCallRecord>;
|
|
24
|
+
listToolCalls(runId: string): Promise<ToolCallRecord[]>;
|
|
25
|
+
createCheckpoint(input: Omit<CheckpointRecord, "id" | "createdAt">): Promise<CheckpointRecord>;
|
|
26
|
+
listCheckpoints(runId: string): Promise<CheckpointRecord[]>;
|
|
27
|
+
compactCheckpoints(options?: CheckpointRetentionOptions): Promise<CheckpointRetentionResult>;
|
|
28
|
+
createDelivery(input: DeliveryObligationInput): Promise<DeliveryObligation>;
|
|
29
|
+
updateDelivery(id: string, patch: DeliveryObligationPatch): Promise<DeliveryObligation>;
|
|
30
|
+
listDeliveries(runId: string): Promise<DeliveryObligation[]>;
|
|
31
|
+
leaseDueDeliveries(options?: DeliveryLeaseOptions): Promise<DeliveryObligation[]>;
|
|
32
|
+
completeDeliverySend(id: string, leaseToken: string, patch?: {
|
|
33
|
+
payload?: JsonObject;
|
|
34
|
+
}): Promise<DeliveryObligation>;
|
|
35
|
+
failDeliverySend(id: string, leaseToken: string, failure: DeliveryFailureInput): Promise<DeliveryObligation>;
|
|
36
|
+
recoverExpiredDeliveries(now?: Date): Promise<DeliveryObligation[]>;
|
|
37
|
+
reserveIdempotencyKey(scope: string, key: string, _ownerId?: string): Promise<boolean>;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=in-memory-run-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"in-memory-run-store.d.ts","sourceRoot":"","sources":["../src/in-memory-run-store.ts"],"names":[],"mappings":"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"}
|