@oni.bot/core 1.0.2 → 1.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/CHANGELOG.md +146 -146
- package/dist/agents/define-agent.d.ts.map +1 -1
- package/dist/agents/define-agent.js +7 -2
- package/dist/agents/define-agent.js.map +1 -1
- package/dist/checkpoint.d.ts.map +1 -1
- package/dist/checkpoint.js +7 -2
- package/dist/checkpoint.js.map +1 -1
- package/dist/checkpointers/postgres.d.ts.map +1 -1
- package/dist/checkpointers/postgres.js +45 -28
- package/dist/checkpointers/postgres.js.map +1 -1
- package/dist/circuit-breaker.d.ts +1 -0
- package/dist/circuit-breaker.d.ts.map +1 -1
- package/dist/circuit-breaker.js +13 -0
- package/dist/circuit-breaker.js.map +1 -1
- package/dist/cli/dev.d.ts.map +1 -1
- package/dist/cli/dev.js +0 -1
- package/dist/cli/dev.js.map +1 -1
- package/dist/cli/inspect.d.ts.map +1 -1
- package/dist/cli/inspect.js +4 -2
- package/dist/cli/inspect.js.map +1 -1
- package/dist/cli/run.d.ts.map +1 -1
- package/dist/cli/run.js +0 -1
- package/dist/cli/run.js.map +1 -1
- package/dist/config/loader.d.ts +1 -1
- package/dist/config/loader.js +12 -4
- package/dist/config/loader.js.map +1 -1
- package/dist/coordination/pubsub.d.ts +1 -0
- package/dist/coordination/pubsub.d.ts.map +1 -1
- package/dist/coordination/pubsub.js +31 -16
- package/dist/coordination/pubsub.js.map +1 -1
- package/dist/coordination/request-reply.d.ts +17 -2
- package/dist/coordination/request-reply.d.ts.map +1 -1
- package/dist/coordination/request-reply.js +56 -14
- package/dist/coordination/request-reply.js.map +1 -1
- package/dist/events/bus.d.ts +1 -0
- package/dist/events/bus.d.ts.map +1 -1
- package/dist/events/bus.js +17 -10
- package/dist/events/bus.js.map +1 -1
- package/dist/functional.d.ts.map +1 -1
- package/dist/functional.js +3 -0
- package/dist/functional.js.map +1 -1
- package/dist/graph.d.ts +11 -1
- package/dist/graph.d.ts.map +1 -1
- package/dist/graph.js +9 -4
- package/dist/graph.js.map +1 -1
- package/dist/guardrails/audit.d.ts +4 -1
- package/dist/guardrails/audit.d.ts.map +1 -1
- package/dist/guardrails/audit.js +18 -1
- package/dist/guardrails/audit.js.map +1 -1
- package/dist/harness/agent-loop.d.ts +1 -7
- package/dist/harness/agent-loop.d.ts.map +1 -1
- package/dist/harness/agent-loop.js +2 -523
- package/dist/harness/agent-loop.js.map +1 -1
- package/dist/harness/context-compactor.d.ts +1 -0
- package/dist/harness/context-compactor.d.ts.map +1 -1
- package/dist/harness/context-compactor.js +43 -1
- package/dist/harness/context-compactor.js.map +1 -1
- package/dist/harness/harness.d.ts +6 -0
- package/dist/harness/harness.d.ts.map +1 -1
- package/dist/harness/harness.js +32 -5
- package/dist/harness/harness.js.map +1 -1
- package/dist/harness/hooks-engine.d.ts.map +1 -1
- package/dist/harness/hooks-engine.js +12 -10
- package/dist/harness/hooks-engine.js.map +1 -1
- package/dist/harness/index.d.ts +3 -1
- package/dist/harness/index.d.ts.map +1 -1
- package/dist/harness/index.js +2 -0
- package/dist/harness/index.js.map +1 -1
- package/dist/harness/loop/hooks.d.ts +7 -0
- package/dist/harness/loop/hooks.d.ts.map +1 -0
- package/dist/harness/loop/hooks.js +46 -0
- package/dist/harness/loop/hooks.js.map +1 -0
- package/dist/harness/loop/index.d.ts +8 -0
- package/dist/harness/loop/index.d.ts.map +1 -0
- package/dist/harness/loop/index.js +257 -0
- package/dist/harness/loop/index.js.map +1 -0
- package/dist/harness/loop/inference.d.ts +19 -0
- package/dist/harness/loop/inference.d.ts.map +1 -0
- package/dist/harness/loop/inference.js +121 -0
- package/dist/harness/loop/inference.js.map +1 -0
- package/dist/harness/loop/memory.d.ts +22 -0
- package/dist/harness/loop/memory.d.ts.map +1 -0
- package/dist/harness/loop/memory.js +73 -0
- package/dist/harness/loop/memory.js.map +1 -0
- package/dist/harness/loop/safety.d.ts +8 -0
- package/dist/harness/loop/safety.d.ts.map +1 -0
- package/dist/harness/loop/safety.js +21 -0
- package/dist/harness/loop/safety.js.map +1 -0
- package/dist/harness/loop/tools.d.ts +24 -0
- package/dist/harness/loop/tools.d.ts.map +1 -0
- package/dist/harness/loop/tools.js +184 -0
- package/dist/harness/loop/tools.js.map +1 -0
- package/dist/harness/loop/types.d.ts +7 -0
- package/dist/harness/loop/types.d.ts.map +1 -0
- package/dist/harness/loop/types.js +9 -0
- package/dist/harness/loop/types.js.map +1 -0
- package/dist/harness/memory/fs-compat.d.ts +3 -0
- package/dist/harness/memory/fs-compat.d.ts.map +1 -0
- package/dist/harness/memory/fs-compat.js +26 -0
- package/dist/harness/memory/fs-compat.js.map +1 -0
- package/dist/harness/memory/index.d.ts +105 -0
- package/dist/harness/memory/index.d.ts.map +1 -0
- package/dist/harness/memory/index.js +491 -0
- package/dist/harness/memory/index.js.map +1 -0
- package/dist/harness/memory/prompter.d.ts +7 -0
- package/dist/harness/memory/prompter.d.ts.map +1 -0
- package/dist/harness/memory/prompter.js +24 -0
- package/dist/harness/memory/prompter.js.map +1 -0
- package/dist/harness/memory/ranker.d.ts +15 -0
- package/dist/harness/memory/ranker.d.ts.map +1 -0
- package/dist/harness/memory/ranker.js +72 -0
- package/dist/harness/memory/ranker.js.map +1 -0
- package/dist/harness/memory/scanner.d.ts +26 -0
- package/dist/harness/memory/scanner.d.ts.map +1 -0
- package/dist/harness/memory/scanner.js +187 -0
- package/dist/harness/memory/scanner.js.map +1 -0
- package/dist/harness/memory/types.d.ts +50 -0
- package/dist/harness/memory/types.d.ts.map +1 -0
- package/dist/harness/memory/types.js +7 -0
- package/dist/harness/memory/types.js.map +1 -0
- package/dist/harness/memory-loader.d.ts +3 -0
- package/dist/harness/memory-loader.d.ts.map +1 -0
- package/dist/harness/memory-loader.js +2 -0
- package/dist/harness/memory-loader.js.map +1 -0
- package/dist/harness/safety-gate.d.ts.map +1 -1
- package/dist/harness/safety-gate.js +47 -26
- package/dist/harness/safety-gate.js.map +1 -1
- package/dist/harness/skill-loader.d.ts +7 -0
- package/dist/harness/skill-loader.d.ts.map +1 -1
- package/dist/harness/skill-loader.js +24 -8
- package/dist/harness/skill-loader.js.map +1 -1
- package/dist/harness/todo-module.d.ts.map +1 -1
- package/dist/harness/todo-module.js +13 -6
- package/dist/harness/todo-module.js.map +1 -1
- package/dist/harness/types.d.ts +7 -0
- package/dist/harness/types.d.ts.map +1 -1
- package/dist/harness/types.js.map +1 -1
- package/dist/harness/validate-args.js +18 -3
- package/dist/harness/validate-args.js.map +1 -1
- package/dist/hitl/interrupt.d.ts +2 -2
- package/dist/hitl/interrupt.d.ts.map +1 -1
- package/dist/hitl/interrupt.js +8 -5
- package/dist/hitl/interrupt.js.map +1 -1
- package/dist/hitl/resume.d.ts +10 -0
- package/dist/hitl/resume.d.ts.map +1 -1
- package/dist/hitl/resume.js +31 -0
- package/dist/hitl/resume.js.map +1 -1
- package/dist/injected.d.ts.map +1 -1
- package/dist/injected.js.map +1 -1
- package/dist/inspect.d.ts.map +1 -1
- package/dist/inspect.js +28 -8
- package/dist/inspect.js.map +1 -1
- package/dist/lsp/client.d.ts +2 -0
- package/dist/lsp/client.d.ts.map +1 -1
- package/dist/lsp/client.js +62 -17
- package/dist/lsp/client.js.map +1 -1
- package/dist/lsp/index.d.ts.map +1 -1
- package/dist/lsp/index.js.map +1 -1
- package/dist/mcp/client.d.ts +2 -0
- package/dist/mcp/client.d.ts.map +1 -1
- package/dist/mcp/client.js +44 -13
- package/dist/mcp/client.js.map +1 -1
- package/dist/mcp/convert.js +1 -1
- package/dist/mcp/convert.js.map +1 -1
- package/dist/mcp/transport.d.ts +2 -0
- package/dist/mcp/transport.d.ts.map +1 -1
- package/dist/mcp/transport.js +33 -8
- package/dist/mcp/transport.js.map +1 -1
- package/dist/messages/index.d.ts.map +1 -1
- package/dist/messages/index.js +7 -1
- package/dist/messages/index.js.map +1 -1
- package/dist/models/anthropic.d.ts.map +1 -1
- package/dist/models/anthropic.js +25 -15
- package/dist/models/anthropic.js.map +1 -1
- package/dist/models/google.d.ts.map +1 -1
- package/dist/models/google.js +23 -7
- package/dist/models/google.js.map +1 -1
- package/dist/models/ollama.d.ts.map +1 -1
- package/dist/models/ollama.js +11 -1
- package/dist/models/ollama.js.map +1 -1
- package/dist/models/openai.d.ts.map +1 -1
- package/dist/models/openai.js +15 -3
- package/dist/models/openai.js.map +1 -1
- package/dist/models/openrouter.d.ts.map +1 -1
- package/dist/models/openrouter.js +14 -3
- package/dist/models/openrouter.js.map +1 -1
- package/dist/prebuilt/react-agent.d.ts.map +1 -1
- package/dist/prebuilt/react-agent.js +7 -2
- package/dist/prebuilt/react-agent.js.map +1 -1
- package/dist/pregel/checkpointing.d.ts +12 -0
- package/dist/pregel/checkpointing.d.ts.map +1 -0
- package/dist/pregel/checkpointing.js +60 -0
- package/dist/pregel/checkpointing.js.map +1 -0
- package/dist/pregel/execution.d.ts +7 -0
- package/dist/pregel/execution.d.ts.map +1 -0
- package/dist/pregel/execution.js +178 -0
- package/dist/pregel/execution.js.map +1 -0
- package/dist/pregel/index.d.ts +61 -0
- package/dist/pregel/index.d.ts.map +1 -0
- package/dist/pregel/index.js +154 -0
- package/dist/pregel/index.js.map +1 -0
- package/dist/pregel/interrupts.d.ts +3 -0
- package/dist/pregel/interrupts.d.ts.map +1 -0
- package/dist/pregel/interrupts.js +7 -0
- package/dist/pregel/interrupts.js.map +1 -0
- package/dist/pregel/state-helpers.d.ts +12 -0
- package/dist/pregel/state-helpers.d.ts.map +1 -0
- package/dist/pregel/state-helpers.js +71 -0
- package/dist/pregel/state-helpers.js.map +1 -0
- package/dist/pregel/streaming.d.ts +5 -0
- package/dist/pregel/streaming.d.ts.map +1 -0
- package/dist/pregel/streaming.js +462 -0
- package/dist/pregel/streaming.js.map +1 -0
- package/dist/pregel/types.d.ts +48 -0
- package/dist/pregel/types.d.ts.map +1 -0
- package/dist/pregel/types.js +5 -0
- package/dist/pregel/types.js.map +1 -0
- package/dist/pregel.d.ts +1 -63
- package/dist/pregel.d.ts.map +1 -1
- package/dist/pregel.js +2 -804
- package/dist/pregel.js.map +1 -1
- package/dist/retry.d.ts.map +1 -1
- package/dist/retry.js +7 -6
- package/dist/retry.js.map +1 -1
- package/dist/store/index.d.ts.map +1 -1
- package/dist/store/index.js +36 -9
- package/dist/store/index.js.map +1 -1
- package/dist/stream-events.d.ts.map +1 -1
- package/dist/stream-events.js +3 -9
- package/dist/stream-events.js.map +1 -1
- package/dist/swarm/agent-node.d.ts +11 -0
- package/dist/swarm/agent-node.d.ts.map +1 -0
- package/dist/swarm/agent-node.js +156 -0
- package/dist/swarm/agent-node.js.map +1 -0
- package/dist/swarm/compile-ext.d.ts +5 -0
- package/dist/swarm/compile-ext.d.ts.map +1 -0
- package/dist/swarm/compile-ext.js +126 -0
- package/dist/swarm/compile-ext.js.map +1 -0
- package/dist/swarm/config.d.ts +147 -0
- package/dist/swarm/config.d.ts.map +1 -0
- package/dist/swarm/config.js +17 -0
- package/dist/swarm/config.js.map +1 -0
- package/dist/swarm/factories.d.ts +37 -0
- package/dist/swarm/factories.d.ts.map +1 -0
- package/dist/swarm/factories.js +703 -0
- package/dist/swarm/factories.js.map +1 -0
- package/dist/swarm/graph.d.ts +16 -136
- package/dist/swarm/graph.d.ts.map +1 -1
- package/dist/swarm/graph.js +39 -897
- package/dist/swarm/graph.js.map +1 -1
- package/dist/swarm/index.d.ts +2 -1
- package/dist/swarm/index.d.ts.map +1 -1
- package/dist/swarm/index.js.map +1 -1
- package/dist/swarm/mailbox.d.ts.map +1 -1
- package/dist/swarm/mailbox.js +3 -1
- package/dist/swarm/mailbox.js.map +1 -1
- package/dist/swarm/mermaid.d.ts +2 -1
- package/dist/swarm/mermaid.d.ts.map +1 -1
- package/dist/swarm/mermaid.js +6 -3
- package/dist/swarm/mermaid.js.map +1 -1
- package/dist/swarm/pool.d.ts.map +1 -1
- package/dist/swarm/pool.js +18 -1
- package/dist/swarm/pool.js.map +1 -1
- package/dist/swarm/registry.d.ts.map +1 -1
- package/dist/swarm/registry.js +7 -0
- package/dist/swarm/registry.js.map +1 -1
- package/dist/swarm/scaling.d.ts +10 -1
- package/dist/swarm/scaling.d.ts.map +1 -1
- package/dist/swarm/scaling.js +85 -14
- package/dist/swarm/scaling.js.map +1 -1
- package/dist/swarm/snapshot.d.ts.map +1 -1
- package/dist/swarm/snapshot.js +10 -1
- package/dist/swarm/snapshot.js.map +1 -1
- package/dist/swarm/supervisor.js +20 -12
- package/dist/swarm/supervisor.js.map +1 -1
- package/dist/swarm/tracer.d.ts +3 -1
- package/dist/swarm/tracer.d.ts.map +1 -1
- package/dist/swarm/tracer.js +66 -15
- package/dist/swarm/tracer.js.map +1 -1
- package/dist/swarm/types.d.ts +1 -6
- package/dist/swarm/types.d.ts.map +1 -1
- package/dist/testing/index.d.ts +4 -4
- package/dist/testing/index.d.ts.map +1 -1
- package/dist/testing/index.js +3 -2
- package/dist/testing/index.js.map +1 -1
- package/dist/tools/define.d.ts +2 -1
- package/dist/tools/define.d.ts.map +1 -1
- package/dist/tools/define.js +3 -1
- package/dist/tools/define.js.map +1 -1
- package/dist/tools/types.d.ts.map +1 -1
- package/dist/types.d.ts +3 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
// ============================================================
|
|
2
|
+
// src/pregel/checkpointing.ts — Checkpoint persistence helpers
|
|
3
|
+
// ============================================================
|
|
4
|
+
import { applyUpdate } from "./state-helpers.js";
|
|
5
|
+
export async function saveCheckpoint(ctx, threadId, step, state, nextNodes, pendingSends, agentId, metadata, pendingWrites) {
|
|
6
|
+
const cp = (ctx._perInvocationCheckpointer.get(threadId) ?? ctx.checkpointer);
|
|
7
|
+
if (!cp)
|
|
8
|
+
return;
|
|
9
|
+
const cpSpan = ctx.tracer.startCheckpointSpan("put", { threadId });
|
|
10
|
+
try {
|
|
11
|
+
await cp.put({
|
|
12
|
+
threadId, step, state, agentId, metadata, pendingWrites,
|
|
13
|
+
nextNodes: nextNodes.map(String),
|
|
14
|
+
pendingSends: pendingSends,
|
|
15
|
+
timestamp: Date.now(),
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
finally {
|
|
19
|
+
ctx.tracer.endSpan(cpSpan);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
export async function getState(checkpointer, threadId) {
|
|
23
|
+
if (!checkpointer)
|
|
24
|
+
return null;
|
|
25
|
+
return (await checkpointer.get(threadId))?.state ?? null;
|
|
26
|
+
}
|
|
27
|
+
export async function updateState(checkpointer, channels, threadId, update) {
|
|
28
|
+
if (!checkpointer)
|
|
29
|
+
return;
|
|
30
|
+
const cp = await checkpointer.get(threadId);
|
|
31
|
+
if (!cp)
|
|
32
|
+
return;
|
|
33
|
+
await checkpointer.put({ ...cp, state: applyUpdate(channels, cp.state, update), timestamp: Date.now() });
|
|
34
|
+
}
|
|
35
|
+
export async function getStateAt(checkpointer, threadId, step) {
|
|
36
|
+
if (!checkpointer)
|
|
37
|
+
return null;
|
|
38
|
+
const history = await checkpointer.list(threadId);
|
|
39
|
+
return history.find((c) => c.step === step)?.state ?? null;
|
|
40
|
+
}
|
|
41
|
+
export async function getHistory(checkpointer, threadId) {
|
|
42
|
+
if (!checkpointer)
|
|
43
|
+
return [];
|
|
44
|
+
return checkpointer.list(threadId);
|
|
45
|
+
}
|
|
46
|
+
export async function forkFrom(checkpointer, threadId, step, newThreadId) {
|
|
47
|
+
if (!checkpointer)
|
|
48
|
+
return;
|
|
49
|
+
const cp = checkpointer;
|
|
50
|
+
if (typeof cp.fork === "function") {
|
|
51
|
+
await cp.fork(threadId, step, newThreadId);
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
const history = await checkpointer.list(threadId);
|
|
55
|
+
for (const c of history.filter((x) => x.step <= step)) {
|
|
56
|
+
await checkpointer.put({ ...c, threadId: newThreadId });
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=checkpointing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkpointing.js","sourceRoot":"","sources":["../../src/pregel/checkpointing.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { type NodeDefinition, type ONIConfig, type NodeReturn } from "../types.js";
|
|
2
|
+
import { CircuitBreaker } from "../circuit-breaker.js";
|
|
3
|
+
import { type StreamWriter } from "../context.js";
|
|
4
|
+
import type { PregelContext } from "./types.js";
|
|
5
|
+
export declare function getCircuitBreaker<S extends Record<string, unknown>>(nodeDef: NodeDefinition<S>, circuitBreakers: Map<string, CircuitBreaker>): CircuitBreaker | null;
|
|
6
|
+
export declare function executeNode<S extends Record<string, unknown>>(ctx: PregelContext<S>, nodeDef: NodeDefinition<S>, state: S, config?: ONIConfig, resumeValue?: unknown, hasResume?: boolean, writer?: StreamWriter | null, step?: number, recursionLimit?: number): Promise<NodeReturn<S>>;
|
|
7
|
+
//# sourceMappingURL=execution.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execution.d.ts","sourceRoot":"","sources":["../../src/pregel/execution.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,KAAK,cAAc,EAAE,KAAK,SAAS,EAAoB,KAAK,UAAU,EACvE,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,OAAO,EAAoC,KAAK,YAAY,EAAE,MAAM,eAAe,CAAC;AAOpF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAMhD,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjE,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC,EAC1B,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,GAC3C,cAAc,GAAG,IAAI,CAWvB;AAED,wBAAsB,WAAW,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjE,GAAG,EAAE,aAAa,CAAC,CAAC,CAAC,EACrB,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC,EAC1B,KAAK,EAAE,CAAC,EACR,MAAM,CAAC,EAAE,SAAS,EAClB,WAAW,CAAC,EAAE,OAAO,EACrB,SAAS,CAAC,EAAE,OAAO,EACnB,MAAM,CAAC,EAAE,YAAY,GAAG,IAAI,EAC5B,IAAI,CAAC,EAAE,MAAM,EACb,cAAc,CAAC,EAAE,MAAM,GACtB,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAoJxB"}
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
// ============================================================
|
|
2
|
+
// src/pregel/execution.ts — Node execution with retry/timeout/CB
|
|
3
|
+
// ============================================================
|
|
4
|
+
import { ONIError, NodeTimeoutError, NodeExecutionError, CircuitBreakerOpenError } from "../errors.js";
|
|
5
|
+
import { CircuitBreaker } from "../circuit-breaker.js";
|
|
6
|
+
import { withRetry } from "../retry.js";
|
|
7
|
+
import { _runWithContext } from "../context.js";
|
|
8
|
+
import { NodeInterruptSignal, _installInterruptContext, _clearInterruptContext, } from "../hitl/index.js";
|
|
9
|
+
import { runFilters } from "../guardrails/filters.js";
|
|
10
|
+
const DEFAULT_RECURSION_LIMIT = 25;
|
|
11
|
+
/** Maximum entries in the node result cache — oldest entries evicted FIFO when full. */
|
|
12
|
+
const NODE_CACHE_MAX_SIZE = 256;
|
|
13
|
+
export function getCircuitBreaker(nodeDef, circuitBreakers) {
|
|
14
|
+
if (!nodeDef.circuitBreaker)
|
|
15
|
+
return null;
|
|
16
|
+
let cb = circuitBreakers.get(nodeDef.name);
|
|
17
|
+
if (!cb) {
|
|
18
|
+
cb = new CircuitBreaker({
|
|
19
|
+
threshold: nodeDef.circuitBreaker.threshold,
|
|
20
|
+
resetAfter: nodeDef.circuitBreaker.resetAfter,
|
|
21
|
+
}, nodeDef.name);
|
|
22
|
+
circuitBreakers.set(nodeDef.name, cb);
|
|
23
|
+
}
|
|
24
|
+
return cb;
|
|
25
|
+
}
|
|
26
|
+
export async function executeNode(ctx, nodeDef, state, config, resumeValue, hasResume, writer, step, recursionLimit) {
|
|
27
|
+
// Check cache (compute key once, reuse for both lookup and store)
|
|
28
|
+
let cacheKey;
|
|
29
|
+
if (nodeDef.cache) {
|
|
30
|
+
const policy = typeof nodeDef.cache === "object" ? nodeDef.cache : {};
|
|
31
|
+
const keyFn = policy.key ?? ((s) => JSON.stringify(s));
|
|
32
|
+
cacheKey = `${nodeDef.name}::${keyFn(state)}`;
|
|
33
|
+
const cached = ctx.nodeCache.get(cacheKey);
|
|
34
|
+
if (cached) {
|
|
35
|
+
const ttl = policy.ttl ?? Infinity;
|
|
36
|
+
if (Date.now() - cached.timestamp < ttl) {
|
|
37
|
+
return cached.result;
|
|
38
|
+
}
|
|
39
|
+
ctx.nodeCache.delete(cacheKey);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
const _tid = config?.threadId ?? "unknown";
|
|
43
|
+
const runCtx = {
|
|
44
|
+
config: config ?? {},
|
|
45
|
+
store: ctx.store,
|
|
46
|
+
writer: writer ?? null,
|
|
47
|
+
state: state,
|
|
48
|
+
parentGraph: null,
|
|
49
|
+
parentUpdates: [],
|
|
50
|
+
step: step ?? 0,
|
|
51
|
+
recursionLimit: recursionLimit ?? DEFAULT_RECURSION_LIMIT,
|
|
52
|
+
toolPermissions: ctx.toolPermissions,
|
|
53
|
+
_recordUsage: (agentName, modelId, usage) => {
|
|
54
|
+
if (!ctx.budgetTracker)
|
|
55
|
+
return;
|
|
56
|
+
const entries = ctx.budgetTracker.record(agentName, modelId, usage);
|
|
57
|
+
for (const e of entries)
|
|
58
|
+
ctx.auditLog?.record(_tid, e);
|
|
59
|
+
},
|
|
60
|
+
_emitEvent: (event) => ctx.eventBus.emit(event),
|
|
61
|
+
_auditRecord: (entry) => ctx.auditLog?.record(_tid, entry),
|
|
62
|
+
};
|
|
63
|
+
return _runWithContext(runCtx, async () => {
|
|
64
|
+
_installInterruptContext({
|
|
65
|
+
nodeName: nodeDef.name,
|
|
66
|
+
resumeValues: hasResume ? [resumeValue] : [],
|
|
67
|
+
});
|
|
68
|
+
try {
|
|
69
|
+
// Content filter — input direction
|
|
70
|
+
if (ctx.contentFilters.length > 0) {
|
|
71
|
+
const inputStr = JSON.stringify(state);
|
|
72
|
+
const inputCheck = runFilters(ctx.contentFilters, inputStr, "input");
|
|
73
|
+
if (!inputCheck.passed) {
|
|
74
|
+
const threadId = config?.threadId ?? "unknown";
|
|
75
|
+
ctx.eventBus.emit({ type: "filter.blocked", filter: inputCheck.blockedBy, agent: nodeDef.name, direction: "input", reason: inputCheck.reason, timestamp: Date.now() });
|
|
76
|
+
ctx.auditLog?.record(threadId, { timestamp: Date.now(), agent: nodeDef.name, action: "filter.blocked", data: { filter: inputCheck.blockedBy, direction: "input", reason: inputCheck.reason } });
|
|
77
|
+
throw new Error(`Content blocked by filter "${inputCheck.blockedBy}" on input to node "${nodeDef.name}": ${inputCheck.reason}`);
|
|
78
|
+
}
|
|
79
|
+
// Apply redaction if content was rewritten by a redacting filter
|
|
80
|
+
if (inputCheck.content !== inputStr) {
|
|
81
|
+
try {
|
|
82
|
+
state = JSON.parse(inputCheck.content);
|
|
83
|
+
}
|
|
84
|
+
catch { /* leave state unchanged on parse failure */ }
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
const run = () => Promise.resolve(nodeDef.fn(state, config));
|
|
88
|
+
// Core execute call: retry-aware
|
|
89
|
+
const executeCall = async () => {
|
|
90
|
+
if (nodeDef.retry)
|
|
91
|
+
return withRetry(run, nodeDef.name, nodeDef.retry);
|
|
92
|
+
return run();
|
|
93
|
+
};
|
|
94
|
+
// Wrap with timeout if configured (per-node > global default > none)
|
|
95
|
+
const timeoutMs = nodeDef.timeout ?? ctx.defaults?.nodeTimeout;
|
|
96
|
+
const executeWithTimeout = async () => {
|
|
97
|
+
if (timeoutMs != null && timeoutMs > 0) {
|
|
98
|
+
const ac = new AbortController();
|
|
99
|
+
const timer = setTimeout(() => ac.abort(), timeoutMs);
|
|
100
|
+
try {
|
|
101
|
+
return await Promise.race([
|
|
102
|
+
executeCall(),
|
|
103
|
+
new Promise((_, reject) => {
|
|
104
|
+
ac.signal.addEventListener("abort", () => {
|
|
105
|
+
reject(new NodeTimeoutError(nodeDef.name, timeoutMs));
|
|
106
|
+
});
|
|
107
|
+
}),
|
|
108
|
+
]);
|
|
109
|
+
}
|
|
110
|
+
finally {
|
|
111
|
+
clearTimeout(timer);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
return executeCall();
|
|
115
|
+
};
|
|
116
|
+
// Wrap with circuit breaker if configured
|
|
117
|
+
const cb = getCircuitBreaker(nodeDef, ctx.circuitBreakers);
|
|
118
|
+
let result;
|
|
119
|
+
try {
|
|
120
|
+
if (cb) {
|
|
121
|
+
result = await cb.execute(executeWithTimeout);
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
result = await executeWithTimeout();
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
catch (err) {
|
|
128
|
+
// Pass through interrupt signals (thrown by interrupt() inside nodes)
|
|
129
|
+
if (err instanceof NodeInterruptSignal)
|
|
130
|
+
throw err;
|
|
131
|
+
// Circuit breaker open — invoke user fallback with real state + error
|
|
132
|
+
if (err instanceof CircuitBreakerOpenError && nodeDef.circuitBreaker?.fallback) {
|
|
133
|
+
result = nodeDef.circuitBreaker.fallback(state, err);
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
// Pass through structured ONI errors (NodeExecutionError from retry, NodeTimeoutError, etc.)
|
|
137
|
+
if (err instanceof ONIError)
|
|
138
|
+
throw err;
|
|
139
|
+
// Wrap raw errors and non-Error throws in NodeExecutionError
|
|
140
|
+
const cause = err instanceof Error ? err : new Error(String(err));
|
|
141
|
+
throw new NodeExecutionError(nodeDef.name, cause);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
// Content filter — output direction
|
|
145
|
+
if (ctx.contentFilters.length > 0 && result != null) {
|
|
146
|
+
const outputStr = JSON.stringify(result);
|
|
147
|
+
const outputCheck = runFilters(ctx.contentFilters, outputStr, "output");
|
|
148
|
+
if (!outputCheck.passed) {
|
|
149
|
+
const threadId = config?.threadId ?? "unknown";
|
|
150
|
+
ctx.eventBus.emit({ type: "filter.blocked", filter: outputCheck.blockedBy, agent: nodeDef.name, direction: "output", reason: outputCheck.reason, timestamp: Date.now() });
|
|
151
|
+
ctx.auditLog?.record(threadId, { timestamp: Date.now(), agent: nodeDef.name, action: "filter.blocked", data: { filter: outputCheck.blockedBy, direction: "output", reason: outputCheck.reason } });
|
|
152
|
+
throw new Error(`Content blocked by filter "${outputCheck.blockedBy}" on output of node "${nodeDef.name}": ${outputCheck.reason}`);
|
|
153
|
+
}
|
|
154
|
+
// Apply redaction if content was rewritten by a redacting filter
|
|
155
|
+
if (outputCheck.content !== outputStr) {
|
|
156
|
+
try {
|
|
157
|
+
result = JSON.parse(outputCheck.content);
|
|
158
|
+
}
|
|
159
|
+
catch { /* leave result unchanged on parse failure */ }
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
// Store in cache (reuse key computed above); evict oldest entry when full
|
|
163
|
+
if (nodeDef.cache && cacheKey) {
|
|
164
|
+
if (ctx.nodeCache.size >= NODE_CACHE_MAX_SIZE) {
|
|
165
|
+
const oldest = ctx.nodeCache.keys().next().value;
|
|
166
|
+
if (oldest !== undefined)
|
|
167
|
+
ctx.nodeCache.delete(oldest);
|
|
168
|
+
}
|
|
169
|
+
ctx.nodeCache.set(cacheKey, { result, timestamp: Date.now() });
|
|
170
|
+
}
|
|
171
|
+
return result;
|
|
172
|
+
}
|
|
173
|
+
finally {
|
|
174
|
+
_clearInterruptContext();
|
|
175
|
+
}
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
//# sourceMappingURL=execution.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execution.js","sourceRoot":"","sources":["../../src/pregel/execution.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { type NodeDefinition, type Edge, type ChannelSchema, type ONIConfig, type ONIStreamEvent, type StreamMode, type InterruptConfig, type ONICheckpointer, type ONICheckpoint } from "../types.js";
|
|
2
|
+
import { DeadLetterQueue, type DeadLetter } from "../dlq.js";
|
|
3
|
+
import type { BaseStore } from "../store/index.js";
|
|
4
|
+
import { HITLSessionStore } from "../hitl/index.js";
|
|
5
|
+
import { EventBus } from "../events/bus.js";
|
|
6
|
+
import type { GuardrailsConfig } from "../guardrails/types.js";
|
|
7
|
+
import type { EventListeners } from "../events/types.js";
|
|
8
|
+
import { AuditLog } from "../guardrails/audit.js";
|
|
9
|
+
import { BudgetTracker } from "../guardrails/budget.js";
|
|
10
|
+
import { ONITracer, type TracerLike } from "../telemetry.js";
|
|
11
|
+
import type { CustomStreamEvent, MessageStreamEvent } from "../types.js";
|
|
12
|
+
export declare class ONIPregelRunner<S extends Record<string, unknown>> {
|
|
13
|
+
private readonly nodes;
|
|
14
|
+
private readonly edges;
|
|
15
|
+
private readonly channels;
|
|
16
|
+
private readonly interruptConfig;
|
|
17
|
+
private readonly checkpointer;
|
|
18
|
+
private readonly store;
|
|
19
|
+
private readonly defaults?;
|
|
20
|
+
private readonly dlq;
|
|
21
|
+
private hitlStore;
|
|
22
|
+
private nodeCache;
|
|
23
|
+
private circuitBreakers;
|
|
24
|
+
/** Count of concurrent subgraph invocations active on this runner. >0 means running as subgraph. */
|
|
25
|
+
_subgraphRef: {
|
|
26
|
+
count: number;
|
|
27
|
+
};
|
|
28
|
+
/** Per-invocation parent updates from Command.PARENT, keyed by parent threadId. */
|
|
29
|
+
readonly _perInvocationParentUpdates: Map<string, Partial<unknown>[]>;
|
|
30
|
+
/** Per-invocation checkpointer override for subgraph isolation, keyed by threadId. */
|
|
31
|
+
readonly _perInvocationCheckpointer: Map<string, unknown>;
|
|
32
|
+
readonly eventBus: EventBus;
|
|
33
|
+
readonly auditLog: AuditLog | null;
|
|
34
|
+
readonly budgetTracker: BudgetTracker | null;
|
|
35
|
+
private readonly contentFilters;
|
|
36
|
+
private readonly toolPermissions;
|
|
37
|
+
readonly tracer: ONITracer;
|
|
38
|
+
/** Pre-indexed edges by source node — O(1) lookup instead of O(n) filter */
|
|
39
|
+
private readonly _edgesBySource;
|
|
40
|
+
/** Pre-computed ephemeral channel keys — avoids iterating all channels */
|
|
41
|
+
private readonly _ephemeralKeys;
|
|
42
|
+
constructor(nodes: Map<string, NodeDefinition<S>>, edges: Edge<S>[], channels: ChannelSchema<S>, interruptConfig?: InterruptConfig, checkpointer?: ONICheckpointer<S> | null, store?: BaseStore | null, guardrails?: GuardrailsConfig, listeners?: EventListeners, defaults?: {
|
|
43
|
+
nodeTimeout?: number;
|
|
44
|
+
} | undefined, dlq?: DeadLetterQueue | null, tracer?: TracerLike | null);
|
|
45
|
+
private get _ctx();
|
|
46
|
+
_stream(input: Partial<S>, config?: ONIConfig, streamMode?: StreamMode | StreamMode[]): AsyncGenerator<ONIStreamEvent<S> | CustomStreamEvent | MessageStreamEvent>;
|
|
47
|
+
invoke(input: Partial<S>, config?: ONIConfig): Promise<S>;
|
|
48
|
+
stream(input: Partial<S>, config?: ONIConfig & {
|
|
49
|
+
streamMode?: StreamMode | StreamMode[];
|
|
50
|
+
}): AsyncGenerator<ONIStreamEvent<S> | CustomStreamEvent | MessageStreamEvent>;
|
|
51
|
+
batch(inputs: Partial<S>[], config?: ONIConfig): Promise<S[]>;
|
|
52
|
+
getState(threadId: string): Promise<S | null>;
|
|
53
|
+
updateState(threadId: string, update: Partial<S>): Promise<void>;
|
|
54
|
+
getStateAt(threadId: string, step: number): Promise<S | null>;
|
|
55
|
+
getHistory(threadId: string): Promise<ONICheckpoint<S>[]>;
|
|
56
|
+
forkFrom(threadId: string, step: number, newThreadId: string): Promise<void>;
|
|
57
|
+
getPendingInterrupts(threadId: string): import("../hitl/resume.js").HITLSession<S>[];
|
|
58
|
+
hitlSessionStore(): HITLSessionStore<S>;
|
|
59
|
+
getDeadLetters(threadId: string): DeadLetter[];
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/pregel/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
// ============================================================
|
|
2
|
+
// @oni.bot/core — Pregel Execution Engine v3
|
|
3
|
+
// New: interrupt() context management, HITL resume, token streaming
|
|
4
|
+
// ============================================================
|
|
5
|
+
import { HITLSessionStore } from "../hitl/index.js";
|
|
6
|
+
import { EventBus } from "../events/bus.js";
|
|
7
|
+
import { AuditLog } from "../guardrails/audit.js";
|
|
8
|
+
import { BudgetTracker } from "../guardrails/budget.js";
|
|
9
|
+
import { ONITracer } from "../telemetry.js";
|
|
10
|
+
import { streamSupersteps } from "./streaming.js";
|
|
11
|
+
import { getState, updateState, getStateAt, getHistory, forkFrom, } from "./checkpointing.js";
|
|
12
|
+
import { getPendingInterrupts } from "./interrupts.js";
|
|
13
|
+
export class ONIPregelRunner {
|
|
14
|
+
nodes;
|
|
15
|
+
edges;
|
|
16
|
+
channels;
|
|
17
|
+
interruptConfig;
|
|
18
|
+
checkpointer;
|
|
19
|
+
store;
|
|
20
|
+
defaults;
|
|
21
|
+
dlq;
|
|
22
|
+
hitlStore = new HITLSessionStore();
|
|
23
|
+
nodeCache = new Map();
|
|
24
|
+
circuitBreakers = new Map();
|
|
25
|
+
/** Count of concurrent subgraph invocations active on this runner. >0 means running as subgraph. */
|
|
26
|
+
_subgraphRef = { count: 0 };
|
|
27
|
+
/** Per-invocation parent updates from Command.PARENT, keyed by parent threadId. */
|
|
28
|
+
_perInvocationParentUpdates = new Map();
|
|
29
|
+
/** Per-invocation checkpointer override for subgraph isolation, keyed by threadId. */
|
|
30
|
+
_perInvocationCheckpointer = new Map();
|
|
31
|
+
eventBus;
|
|
32
|
+
auditLog;
|
|
33
|
+
budgetTracker;
|
|
34
|
+
contentFilters;
|
|
35
|
+
toolPermissions;
|
|
36
|
+
tracer;
|
|
37
|
+
/** Pre-indexed edges by source node — O(1) lookup instead of O(n) filter */
|
|
38
|
+
_edgesBySource;
|
|
39
|
+
/** Pre-computed ephemeral channel keys — avoids iterating all channels */
|
|
40
|
+
_ephemeralKeys;
|
|
41
|
+
constructor(nodes, edges, channels, interruptConfig = {}, checkpointer = null, store = null, guardrails, listeners, defaults, dlq = null, tracer) {
|
|
42
|
+
this.nodes = nodes;
|
|
43
|
+
this.edges = edges;
|
|
44
|
+
this.channels = channels;
|
|
45
|
+
this.interruptConfig = interruptConfig;
|
|
46
|
+
this.checkpointer = checkpointer;
|
|
47
|
+
this.store = store;
|
|
48
|
+
this.defaults = defaults;
|
|
49
|
+
this.dlq = dlq;
|
|
50
|
+
this.eventBus = new EventBus(listeners);
|
|
51
|
+
this.auditLog = guardrails?.audit ? new AuditLog() : null;
|
|
52
|
+
this.budgetTracker = guardrails?.budget ? new BudgetTracker(guardrails.budget) : null;
|
|
53
|
+
this.contentFilters = guardrails?.filters ?? [];
|
|
54
|
+
this.toolPermissions = guardrails?.toolPermissions;
|
|
55
|
+
this.tracer = new ONITracer(tracer ?? null);
|
|
56
|
+
// Pre-index edges by source for O(1) lookups in getNextNodes
|
|
57
|
+
this._edgesBySource = new Map();
|
|
58
|
+
for (const edge of edges) {
|
|
59
|
+
const from = edge.from;
|
|
60
|
+
let list = this._edgesBySource.get(from);
|
|
61
|
+
if (!list) {
|
|
62
|
+
list = [];
|
|
63
|
+
this._edgesBySource.set(from, list);
|
|
64
|
+
}
|
|
65
|
+
list.push(edge);
|
|
66
|
+
}
|
|
67
|
+
// Pre-compute ephemeral keys to avoid scanning all channels per superstep
|
|
68
|
+
this._ephemeralKeys = Object.keys(channels).filter((k) => channels[k].ephemeral);
|
|
69
|
+
}
|
|
70
|
+
// ----------------------------------------------------------------
|
|
71
|
+
// Build PregelContext for extracted functions
|
|
72
|
+
// ----------------------------------------------------------------
|
|
73
|
+
get _ctx() {
|
|
74
|
+
return {
|
|
75
|
+
nodes: this.nodes,
|
|
76
|
+
edges: this.edges,
|
|
77
|
+
channels: this.channels,
|
|
78
|
+
interruptConfig: this.interruptConfig,
|
|
79
|
+
checkpointer: this.checkpointer,
|
|
80
|
+
store: this.store,
|
|
81
|
+
circuitBreakers: this.circuitBreakers,
|
|
82
|
+
tracer: this.tracer,
|
|
83
|
+
eventBus: this.eventBus,
|
|
84
|
+
auditLog: this.auditLog,
|
|
85
|
+
budgetTracker: this.budgetTracker,
|
|
86
|
+
contentFilters: this.contentFilters,
|
|
87
|
+
toolPermissions: this.toolPermissions,
|
|
88
|
+
dlq: this.dlq,
|
|
89
|
+
hitlStore: this.hitlStore,
|
|
90
|
+
defaults: this.defaults,
|
|
91
|
+
nodeCache: this.nodeCache,
|
|
92
|
+
_subgraphRef: this._subgraphRef,
|
|
93
|
+
_perInvocationParentUpdates: this._perInvocationParentUpdates,
|
|
94
|
+
_perInvocationCheckpointer: this._perInvocationCheckpointer,
|
|
95
|
+
_edgesBySource: this._edgesBySource,
|
|
96
|
+
_ephemeralKeys: this._ephemeralKeys,
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
// ----------------------------------------------------------------
|
|
100
|
+
// Core stream generator (delegates to streaming module)
|
|
101
|
+
// ----------------------------------------------------------------
|
|
102
|
+
async *_stream(input, config, streamMode = "updates") {
|
|
103
|
+
yield* streamSupersteps(this._ctx, input, config, streamMode);
|
|
104
|
+
}
|
|
105
|
+
// ----------------------------------------------------------------
|
|
106
|
+
// Public API
|
|
107
|
+
// ----------------------------------------------------------------
|
|
108
|
+
async invoke(input, config) {
|
|
109
|
+
let finalState;
|
|
110
|
+
for await (const evt of this._stream(input, config, "values")) {
|
|
111
|
+
if (evt.event === "state_update")
|
|
112
|
+
finalState = evt.data;
|
|
113
|
+
}
|
|
114
|
+
return finalState;
|
|
115
|
+
}
|
|
116
|
+
async *stream(input, config) {
|
|
117
|
+
yield* this._stream(input, config, config?.streamMode ?? "updates");
|
|
118
|
+
}
|
|
119
|
+
async batch(inputs, config) {
|
|
120
|
+
return Promise.all(inputs.map((inp, i) => this.invoke(inp, {
|
|
121
|
+
...config,
|
|
122
|
+
threadId: config?.threadId ? `${config.threadId}-${i}` : undefined,
|
|
123
|
+
})));
|
|
124
|
+
}
|
|
125
|
+
// ---- State ----
|
|
126
|
+
async getState(threadId) {
|
|
127
|
+
return getState(this.checkpointer, threadId);
|
|
128
|
+
}
|
|
129
|
+
async updateState(threadId, update) {
|
|
130
|
+
return updateState(this.checkpointer, this.channels, threadId, update);
|
|
131
|
+
}
|
|
132
|
+
// ---- Time-travel ----
|
|
133
|
+
async getStateAt(threadId, step) {
|
|
134
|
+
return getStateAt(this.checkpointer, threadId, step);
|
|
135
|
+
}
|
|
136
|
+
async getHistory(threadId) {
|
|
137
|
+
return getHistory(this.checkpointer, threadId);
|
|
138
|
+
}
|
|
139
|
+
async forkFrom(threadId, step, newThreadId) {
|
|
140
|
+
return forkFrom(this.checkpointer, threadId, step, newThreadId);
|
|
141
|
+
}
|
|
142
|
+
// ---- HITL ----
|
|
143
|
+
getPendingInterrupts(threadId) {
|
|
144
|
+
return getPendingInterrupts(this.hitlStore, threadId);
|
|
145
|
+
}
|
|
146
|
+
hitlSessionStore() {
|
|
147
|
+
return this.hitlStore;
|
|
148
|
+
}
|
|
149
|
+
// ---- Dead Letter Queue ----
|
|
150
|
+
getDeadLetters(threadId) {
|
|
151
|
+
return this.dlq?.getAll(threadId) ?? [];
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/pregel/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interrupts.d.ts","sourceRoot":"","sources":["../../src/pregel/interrupts.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEpD,wBAAgB,oBAAoB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACpE,SAAS,EAAE,gBAAgB,CAAC,CAAC,CAAC,EAC9B,QAAQ,EAAE,MAAM,gDAGjB"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
// ============================================================
|
|
2
|
+
// src/pregel/interrupts.ts — HITL interrupt helpers
|
|
3
|
+
// ============================================================
|
|
4
|
+
export function getPendingInterrupts(hitlStore, threadId) {
|
|
5
|
+
return hitlStore.getByThread(threadId);
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=interrupts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interrupts.js","sourceRoot":"","sources":["../../src/pregel/interrupts.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,oDAAoD;AACpD,+DAA+D;AAI/D,MAAM,UAAU,oBAAoB,CAClC,SAA8B,EAC9B,QAAgB;IAEhB,OAAO,SAAS,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;AACzC,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { type NodeName, type Edge, type ChannelSchema, type ONIConfig, type ONIStreamEvent } from "../types.js";
|
|
2
|
+
import type { PendingSend } from "./types.js";
|
|
3
|
+
export declare function buildInitialState<S extends Record<string, unknown>>(channels: ChannelSchema<S>): S;
|
|
4
|
+
export declare function applyUpdate<S extends Record<string, unknown>>(channels: ChannelSchema<S>, current: S, update: Partial<S>): S;
|
|
5
|
+
export declare function resetEphemeral<S extends Record<string, unknown>>(state: S, ephemeralKeys: (keyof S)[], channels: ChannelSchema<S>): S;
|
|
6
|
+
export declare function getNextNodes<S extends Record<string, unknown>>(fromNode: NodeName, state: S, edgesBySource: Map<string, Edge<S>[]>, config?: ONIConfig): {
|
|
7
|
+
nodes: NodeName[];
|
|
8
|
+
sends: PendingSend[];
|
|
9
|
+
};
|
|
10
|
+
export declare function checkDynamicInterrupt<S extends Record<string, unknown>>(node: string, timing: "before" | "after", state: S, config?: ONIConfig): void;
|
|
11
|
+
export declare function evt<S extends Record<string, unknown>>(event: ONIStreamEvent<S>["event"], data: Partial<S> | S, step: number, agentId?: string, node?: string): ONIStreamEvent<S>;
|
|
12
|
+
//# sourceMappingURL=state-helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state-helpers.d.ts","sourceRoot":"","sources":["../../src/pregel/state-helpers.ts"],"names":[],"mappings":"AAIA,OAAO,EAEL,KAAK,QAAQ,EAAE,KAAK,IAAI,EAAE,KAAK,aAAa,EAC5C,KAAK,SAAS,EAAE,KAAK,cAAc,EACpC,MAAM,aAAa,CAAC;AAErB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjE,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,GACzB,CAAC,CAMH;AAED,wBAAgB,WAAW,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC3D,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,EAC1B,OAAO,EAAE,CAAC,EACV,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,GACjB,CAAC,CAaH;AAED,wBAAgB,cAAc,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9D,KAAK,EAAE,CAAC,EACR,aAAa,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,EAC1B,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,GACzB,CAAC,CAOH;AAED,wBAAgB,YAAY,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5D,QAAQ,EAAE,QAAQ,EAClB,KAAK,EAAE,CAAC,EACR,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EACrC,MAAM,CAAC,EAAE,SAAS,GACjB;IAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;IAAC,KAAK,EAAE,WAAW,EAAE,CAAA;CAAE,CAkB7C;AAED,wBAAgB,qBAAqB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACrE,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,QAAQ,GAAG,OAAO,EAC1B,KAAK,EAAE,CAAC,EACR,MAAM,CAAC,EAAE,SAAS,GACjB,IAAI,CAQN;AAED,wBAAgB,GAAG,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACnD,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EACjC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,EACpB,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,MAAM,EAChB,IAAI,CAAC,EAAE,MAAM,GACZ,cAAc,CAAC,CAAC,CAAC,CAEnB"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
// ============================================================
|
|
2
|
+
// src/pregel/state-helpers.ts — Pure state helper functions
|
|
3
|
+
// ============================================================
|
|
4
|
+
import { Send, } from "../types.js";
|
|
5
|
+
import { ONIInterrupt } from "../errors.js";
|
|
6
|
+
export function buildInitialState(channels) {
|
|
7
|
+
const state = {};
|
|
8
|
+
for (const key of Object.keys(channels)) {
|
|
9
|
+
state[key] = channels[key].default();
|
|
10
|
+
}
|
|
11
|
+
return state;
|
|
12
|
+
}
|
|
13
|
+
export function applyUpdate(channels, current, update) {
|
|
14
|
+
const keys = Object.keys(update);
|
|
15
|
+
if (keys.length === 0)
|
|
16
|
+
return current;
|
|
17
|
+
const next = { ...current };
|
|
18
|
+
for (const key of keys) {
|
|
19
|
+
if (update[key] !== undefined) {
|
|
20
|
+
const ch = channels[key];
|
|
21
|
+
next[key] = ch
|
|
22
|
+
? ch.reducer(current[key], update[key])
|
|
23
|
+
: update[key];
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
return next;
|
|
27
|
+
}
|
|
28
|
+
export function resetEphemeral(state, ephemeralKeys, channels) {
|
|
29
|
+
if (ephemeralKeys.length === 0)
|
|
30
|
+
return state;
|
|
31
|
+
const next = { ...state };
|
|
32
|
+
for (const key of ephemeralKeys) {
|
|
33
|
+
next[key] = channels[key].default();
|
|
34
|
+
}
|
|
35
|
+
return next;
|
|
36
|
+
}
|
|
37
|
+
export function getNextNodes(fromNode, state, edgesBySource, config) {
|
|
38
|
+
const outgoing = edgesBySource.get(fromNode) ?? [];
|
|
39
|
+
const nodes = [];
|
|
40
|
+
const sends = [];
|
|
41
|
+
for (const edge of outgoing) {
|
|
42
|
+
if (edge.type === "static") {
|
|
43
|
+
nodes.push(edge.to);
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
const result = edge.condition(state, config);
|
|
47
|
+
const resolved = Array.isArray(result) ? result : [result];
|
|
48
|
+
for (const r of resolved) {
|
|
49
|
+
if (r instanceof Send)
|
|
50
|
+
sends.push({ node: r.node, args: r.args });
|
|
51
|
+
else
|
|
52
|
+
nodes.push(edge.pathMap?.[r] ?? r);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return { nodes, sends };
|
|
57
|
+
}
|
|
58
|
+
export function checkDynamicInterrupt(node, timing, state, config) {
|
|
59
|
+
const dynamics = config?.dynamicInterrupts;
|
|
60
|
+
if (!dynamics)
|
|
61
|
+
return;
|
|
62
|
+
for (const di of dynamics) {
|
|
63
|
+
if (di.node === node && di.timing === timing && di.condition(state)) {
|
|
64
|
+
throw new ONIInterrupt(node, timing, state);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
export function evt(event, data, step, agentId, node) {
|
|
69
|
+
return { event, data, step, timestamp: Date.now(), agentId, node };
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=state-helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state-helpers.js","sourceRoot":"","sources":["../../src/pregel/state-helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { type ONIConfig, type ONIStreamEvent, type StreamMode } from "../types.js";
|
|
2
|
+
import type { CustomStreamEvent, MessageStreamEvent } from "../types.js";
|
|
3
|
+
import type { PregelContext } from "./types.js";
|
|
4
|
+
export declare function streamSupersteps<S extends Record<string, unknown>>(ctx: PregelContext<S>, input: Partial<S>, config: ONIConfig | undefined, streamMode?: StreamMode | StreamMode[]): AsyncGenerator<ONIStreamEvent<S> | CustomStreamEvent | MessageStreamEvent>;
|
|
5
|
+
//# sourceMappingURL=streaming.d.ts.map
|