@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
package/CHANGELOG.md
CHANGED
|
@@ -1,146 +1,146 @@
|
|
|
1
|
-
# Changelog
|
|
2
|
-
|
|
3
|
-
All notable changes to @oni.bot/core are documented here.
|
|
4
|
-
|
|
5
|
-
Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
|
|
6
|
-
This project uses [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
-
|
|
8
|
-
## [1.0.2] — 2026-03-13
|
|
9
|
-
|
|
10
|
-
### Fixed
|
|
11
|
-
- **Budget guardrails:** `BudgetTracker.record()` is now called from `defineAgent` after each `model.chat()` via a RunContext callback; throws `BudgetExceededError` when `maxTokensPerRun`/`maxTokensPerAgent`/`maxCostPerRun` is exceeded.
|
|
12
|
-
- **defineAgent ToolContext:** `store` and stream `emit` now read from the live RunContext instead of being hard-coded to `null`/noop, so tools receive the real store and can emit custom stream events.
|
|
13
|
-
- **parallelSafe enforcement:** `parallelSafe: false` is now preserved through `ToolDefinition` and respected by `defineAgent` — when any tool in a batch has `parallelSafe: false` all calls in that step execute sequentially.
|
|
14
|
-
- **pathMap compile-time validation:** `StateGraph.compile()` now validates conditional edge `pathMap` targets at compile time, throwing `NodeNotFoundError` instead of failing silently at runtime.
|
|
15
|
-
- **spawnAgent in unsupervised swarms:** `spawnAgent()` now throws a clear error when called on a swarm without a supervisor, rather than silently adding an agent that never executes.
|
|
16
|
-
- **removeAgent edge cleanup:** `removeAgent()` now removes stale static edges pointing to the removed node from `_edgesBySource`, preventing `NodeNotFoundError` when Pregel tries to route to a removed agent.
|
|
17
|
-
- **Lifecycle events from defineAgent:** `llm.request`, `llm.response`, `tool.call`, and `tool.result` events are now emitted and audit entries written for every model call and tool execution inside `defineAgent`.
|
|
18
|
-
- **toolPermissions enforcement:** `checkToolPermission()` is called before each tool execution in `defineAgent`, outside the tool's try/catch, so `ToolPermissionError` propagates as a real graph failure.
|
|
19
|
-
|
|
20
|
-
## [1.0.1] — 2026-03-13
|
|
21
|
-
|
|
22
|
-
### Fixed
|
|
23
|
-
- **Token streaming (parallel nodes):** Replaced module-level `_tokenHandler` global with `AsyncLocalStorage` — each node in a parallel fan-out now gets its own token handler, preventing tokens from being silently dropped or misrouted to the wrong node.
|
|
24
|
-
- **HITL resume:** `resume()` now looks up the session by `resumeId` (not just the first pending interrupt) and calls `markResumed()` so sessions transition from `"pending"` to `"resumed"` after being handled.
|
|
25
|
-
- **Subgraph checkpointer restore:** The child runner's original `checkpointer` is saved before being overwritten with a `NamespacedCheckpointer` and restored after the subgraph completes, preventing the child's checkpointer from leaking across invocations.
|
|
26
|
-
- **Circuit breaker fallback:** The user-supplied `fallback(state, error)` is now called with the real node state and the `CircuitBreakerOpenError` instance rather than `(undefined, undefined)`.
|
|
27
|
-
|
|
28
|
-
## [1.0.0] — 2026-03-13
|
|
29
|
-
|
|
30
|
-
### Breaking Changes
|
|
31
|
-
- `oni-code` AI coding assistant extracted to `@oni.bot/code` (separate package)
|
|
32
|
-
- `sentinel` code analysis engine extracted to `@oni.bot/sentinel` (separate package)
|
|
33
|
-
- `oni` and `oni-code` CLI binaries removed from this package (install `@oni.bot/code` for the CLI)
|
|
34
|
-
|
|
35
|
-
### Added
|
|
36
|
-
- `./config` sub-module export (`@oni.bot/core/config`) — JSONC config loader with env var substitution and hierarchical merge
|
|
37
|
-
- `"sideEffects": false` — enables full tree shaking in bundlers
|
|
38
|
-
|
|
39
|
-
### Framework
|
|
40
|
-
- 5 model adapters (anthropic, openai, openrouter, google, ollama) — zero runtime dependencies
|
|
41
|
-
- 21 total exports: root + 20 named subpaths
|
|
42
|
-
|
|
43
|
-
## [0.7.0] - 2026-03-08
|
|
44
|
-
|
|
45
|
-
### Added
|
|
46
|
-
- Structured error codes with `ONI_<CATEGORY>_<NAME>` taxonomy — every error carries code, category, recoverable flag, suggestion, and context
|
|
47
|
-
- Per-node timeouts via `addNode(name, fn, { timeout: ms })` with `NodeTimeoutError`
|
|
48
|
-
- Global default timeout via `compile({ defaults: { nodeTimeout: ms } })`
|
|
49
|
-
- Circuit breaker pattern: `addNode(name, fn, { circuitBreaker: { threshold, resetAfter, fallback? } })`
|
|
50
|
-
- Dead letter queue: `compile({ deadLetterQueue: true })` captures failed node inputs for recovery
|
|
51
|
-
- OpenTelemetry tracing adapter (`ONITracer`) — zero-dep, user brings own tracer
|
|
52
|
-
- Backpressure streaming with `BoundedBuffer` (drop-oldest and error strategies)
|
|
53
|
-
- Testing utilities: `mockModel()`, `assertGraph()`, `createTestHarness()` via `@oni.bot/core/testing`
|
|
54
|
-
- `oni init` CLI command for project scaffolding
|
|
55
|
-
- 7 new error types: `NodeTimeoutError`, `CircuitBreakerOpenError`, `SwarmDeadlockError`, `ModelRateLimitError`, `ModelContextLengthError`, `CheckpointCorruptError`, `StoreKeyNotFoundError`
|
|
56
|
-
|
|
57
|
-
### Changed
|
|
58
|
-
- `ONIError` now accepts optional `ONIErrorOptions` as second constructor parameter
|
|
59
|
-
- All existing error classes enhanced with structured codes (backward compatible)
|
|
60
|
-
|
|
61
|
-
## [0.6.3] - 2026-03-05
|
|
62
|
-
|
|
63
|
-
### Added
|
|
64
|
-
- `set()` alias for `put()` on `InMemoryStore` and `NamespacedStore`
|
|
65
|
-
|
|
66
|
-
## [0.6.2] - 2026-03-05
|
|
67
|
-
|
|
68
|
-
### Fixed
|
|
69
|
-
- `createReactAgent` now accepts `ONIModel` (auto-adapts chat to invoke)
|
|
70
|
-
|
|
71
|
-
### Changed
|
|
72
|
-
- Package renamed from `@oni-bot/core` to `@oni.bot/core`
|
|
73
|
-
|
|
74
|
-
## [0.6.1] - 2026-03-05
|
|
75
|
-
|
|
76
|
-
### Changed
|
|
77
|
-
- Removed all external framework references from codebase and documentation
|
|
78
|
-
|
|
79
|
-
### Fixed
|
|
80
|
-
- Resolved TypeScript strict errors in swarm template `Send` casts
|
|
81
|
-
|
|
82
|
-
## [0.6.0] - 2026-03-04
|
|
83
|
-
|
|
84
|
-
### Added
|
|
85
|
-
- `SwarmGraph` builder for multi-agent orchestration
|
|
86
|
-
- `SwarmGraph.hierarchical()` template — supervisor-workers pattern
|
|
87
|
-
- `SwarmGraph.fanOut()` template — parallel agent execution with reducer
|
|
88
|
-
- `SwarmGraph.pipeline()` template — linear chain with conditional transitions
|
|
89
|
-
- `SwarmGraph.peerNetwork()` template — decentralized agent handoffs
|
|
90
|
-
- `SwarmGraph.mapReduce()` template — parallel map with reducer
|
|
91
|
-
- `SwarmGraph.debate()` template — multi-round parallel debate with judge
|
|
92
|
-
- `SwarmGraph.hierarchicalMesh()` template — nested team coordination
|
|
93
|
-
- Lazy coordination auto-wiring (broker and pubsub) on `SwarmGraph`
|
|
94
|
-
- Handoff execution — agent `Handoff` returns converted to `Command` routing
|
|
95
|
-
- Retry-then-fallback — agents retry on failure, fall back to supervisor
|
|
96
|
-
|
|
97
|
-
### Changed
|
|
98
|
-
- Replaced `SwarmLLM` with `ONIModel` in supervisor routing
|
|
99
|
-
|
|
100
|
-
## [0.5.0] - 2026-03-04
|
|
101
|
-
|
|
102
|
-
### Added
|
|
103
|
-
- `ONIModel` interface and core LLM types
|
|
104
|
-
- Anthropic LLM adapter
|
|
105
|
-
- OpenAI LLM adapter
|
|
106
|
-
- Ollama LLM adapter
|
|
107
|
-
- Google Gemini LLM adapter
|
|
108
|
-
- Models export path and re-exports
|
|
109
|
-
- Tool framework with `defineTool()` and `ToolContext`
|
|
110
|
-
- `AgentContext` and agent types
|
|
111
|
-
- `defineAgent()` declarative agent factory
|
|
112
|
-
- `agent()` functional agent factory
|
|
113
|
-
- `addAgent()` on `StateGraph` to wire agent nodes
|
|
114
|
-
- Request/response and pub/sub coordination patterns
|
|
115
|
-
- Tool permission guardrails
|
|
116
|
-
- Budget tracking and cost control guardrails
|
|
117
|
-
- Content filtering guardrails
|
|
118
|
-
- Audit trail and guardrails exports
|
|
119
|
-
- `EventBus` for structured lifecycle events
|
|
120
|
-
- Guardrails and event bus wired into compile/execution pipeline
|
|
121
|
-
- Integration tests for agents, tools, and guardrails
|
|
122
|
-
|
|
123
|
-
### Removed
|
|
124
|
-
- Direct `openai` dependency (adapters are now bring-your-own-client)
|
|
125
|
-
|
|
126
|
-
## [0.4.0] - 2026-03-04
|
|
127
|
-
|
|
128
|
-
### Added
|
|
129
|
-
- `StateGraph` builder with `addNode()`, `addEdge()`, `addConditionalEdges()`
|
|
130
|
-
- Pregel execution engine (`ONIPregelRunner`) with parallel superstep execution
|
|
131
|
-
- `Command` and `Send` primitives for dynamic routing
|
|
132
|
-
- Subgraph support via `addSubgraph()`
|
|
133
|
-
- Functional API (`entrypoint`, `task`)
|
|
134
|
-
- `MemoryCheckpointer` and `NoopCheckpointer`
|
|
135
|
-
- `InMemoryStore` and `NamespacedStore` for shared key-value state
|
|
136
|
-
- Human-in-the-loop via `interrupt()` and `getUserInput()`
|
|
137
|
-
- Token streaming with `emitToken()` and `TokenStreamWriter`
|
|
138
|
-
- Stream modes: `values`, `updates`, `events`, `messages`, `custom`
|
|
139
|
-
- Graph inspection via `getGraphDef()`
|
|
140
|
-
- `createReactAgent` prebuilt for tool-calling loops
|
|
141
|
-
- `ToolNode` prebuilt for automatic tool dispatch
|
|
142
|
-
- Messages reducer (`messagesReducer`, `addMessages`, `removeMessages`)
|
|
143
|
-
- Retry policies with configurable backoff
|
|
144
|
-
- Swarm primitives: `AgentRegistry`, `AgentPool`, `Mailbox`, `Supervisor`
|
|
145
|
-
- Ephemeral channel support
|
|
146
|
-
- Map-reduce parallel fan-out pattern
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to @oni.bot/core are documented here.
|
|
4
|
+
|
|
5
|
+
Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
|
|
6
|
+
This project uses [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
|
|
8
|
+
## [1.0.2] — 2026-03-13
|
|
9
|
+
|
|
10
|
+
### Fixed
|
|
11
|
+
- **Budget guardrails:** `BudgetTracker.record()` is now called from `defineAgent` after each `model.chat()` via a RunContext callback; throws `BudgetExceededError` when `maxTokensPerRun`/`maxTokensPerAgent`/`maxCostPerRun` is exceeded.
|
|
12
|
+
- **defineAgent ToolContext:** `store` and stream `emit` now read from the live RunContext instead of being hard-coded to `null`/noop, so tools receive the real store and can emit custom stream events.
|
|
13
|
+
- **parallelSafe enforcement:** `parallelSafe: false` is now preserved through `ToolDefinition` and respected by `defineAgent` — when any tool in a batch has `parallelSafe: false` all calls in that step execute sequentially.
|
|
14
|
+
- **pathMap compile-time validation:** `StateGraph.compile()` now validates conditional edge `pathMap` targets at compile time, throwing `NodeNotFoundError` instead of failing silently at runtime.
|
|
15
|
+
- **spawnAgent in unsupervised swarms:** `spawnAgent()` now throws a clear error when called on a swarm without a supervisor, rather than silently adding an agent that never executes.
|
|
16
|
+
- **removeAgent edge cleanup:** `removeAgent()` now removes stale static edges pointing to the removed node from `_edgesBySource`, preventing `NodeNotFoundError` when Pregel tries to route to a removed agent.
|
|
17
|
+
- **Lifecycle events from defineAgent:** `llm.request`, `llm.response`, `tool.call`, and `tool.result` events are now emitted and audit entries written for every model call and tool execution inside `defineAgent`.
|
|
18
|
+
- **toolPermissions enforcement:** `checkToolPermission()` is called before each tool execution in `defineAgent`, outside the tool's try/catch, so `ToolPermissionError` propagates as a real graph failure.
|
|
19
|
+
|
|
20
|
+
## [1.0.1] — 2026-03-13
|
|
21
|
+
|
|
22
|
+
### Fixed
|
|
23
|
+
- **Token streaming (parallel nodes):** Replaced module-level `_tokenHandler` global with `AsyncLocalStorage` — each node in a parallel fan-out now gets its own token handler, preventing tokens from being silently dropped or misrouted to the wrong node.
|
|
24
|
+
- **HITL resume:** `resume()` now looks up the session by `resumeId` (not just the first pending interrupt) and calls `markResumed()` so sessions transition from `"pending"` to `"resumed"` after being handled.
|
|
25
|
+
- **Subgraph checkpointer restore:** The child runner's original `checkpointer` is saved before being overwritten with a `NamespacedCheckpointer` and restored after the subgraph completes, preventing the child's checkpointer from leaking across invocations.
|
|
26
|
+
- **Circuit breaker fallback:** The user-supplied `fallback(state, error)` is now called with the real node state and the `CircuitBreakerOpenError` instance rather than `(undefined, undefined)`.
|
|
27
|
+
|
|
28
|
+
## [1.0.0] — 2026-03-13
|
|
29
|
+
|
|
30
|
+
### Breaking Changes
|
|
31
|
+
- `oni-code` AI coding assistant extracted to `@oni.bot/code` (separate package)
|
|
32
|
+
- `sentinel` code analysis engine extracted to `@oni.bot/sentinel` (separate package)
|
|
33
|
+
- `oni` and `oni-code` CLI binaries removed from this package (install `@oni.bot/code` for the CLI)
|
|
34
|
+
|
|
35
|
+
### Added
|
|
36
|
+
- `./config` sub-module export (`@oni.bot/core/config`) — JSONC config loader with env var substitution and hierarchical merge
|
|
37
|
+
- `"sideEffects": false` — enables full tree shaking in bundlers
|
|
38
|
+
|
|
39
|
+
### Framework
|
|
40
|
+
- 5 model adapters (anthropic, openai, openrouter, google, ollama) — zero runtime dependencies
|
|
41
|
+
- 21 total exports: root + 20 named subpaths
|
|
42
|
+
|
|
43
|
+
## [0.7.0] - 2026-03-08
|
|
44
|
+
|
|
45
|
+
### Added
|
|
46
|
+
- Structured error codes with `ONI_<CATEGORY>_<NAME>` taxonomy — every error carries code, category, recoverable flag, suggestion, and context
|
|
47
|
+
- Per-node timeouts via `addNode(name, fn, { timeout: ms })` with `NodeTimeoutError`
|
|
48
|
+
- Global default timeout via `compile({ defaults: { nodeTimeout: ms } })`
|
|
49
|
+
- Circuit breaker pattern: `addNode(name, fn, { circuitBreaker: { threshold, resetAfter, fallback? } })`
|
|
50
|
+
- Dead letter queue: `compile({ deadLetterQueue: true })` captures failed node inputs for recovery
|
|
51
|
+
- OpenTelemetry tracing adapter (`ONITracer`) — zero-dep, user brings own tracer
|
|
52
|
+
- Backpressure streaming with `BoundedBuffer` (drop-oldest and error strategies)
|
|
53
|
+
- Testing utilities: `mockModel()`, `assertGraph()`, `createTestHarness()` via `@oni.bot/core/testing`
|
|
54
|
+
- `oni init` CLI command for project scaffolding
|
|
55
|
+
- 7 new error types: `NodeTimeoutError`, `CircuitBreakerOpenError`, `SwarmDeadlockError`, `ModelRateLimitError`, `ModelContextLengthError`, `CheckpointCorruptError`, `StoreKeyNotFoundError`
|
|
56
|
+
|
|
57
|
+
### Changed
|
|
58
|
+
- `ONIError` now accepts optional `ONIErrorOptions` as second constructor parameter
|
|
59
|
+
- All existing error classes enhanced with structured codes (backward compatible)
|
|
60
|
+
|
|
61
|
+
## [0.6.3] - 2026-03-05
|
|
62
|
+
|
|
63
|
+
### Added
|
|
64
|
+
- `set()` alias for `put()` on `InMemoryStore` and `NamespacedStore`
|
|
65
|
+
|
|
66
|
+
## [0.6.2] - 2026-03-05
|
|
67
|
+
|
|
68
|
+
### Fixed
|
|
69
|
+
- `createReactAgent` now accepts `ONIModel` (auto-adapts chat to invoke)
|
|
70
|
+
|
|
71
|
+
### Changed
|
|
72
|
+
- Package renamed from `@oni-bot/core` to `@oni.bot/core`
|
|
73
|
+
|
|
74
|
+
## [0.6.1] - 2026-03-05
|
|
75
|
+
|
|
76
|
+
### Changed
|
|
77
|
+
- Removed all external framework references from codebase and documentation
|
|
78
|
+
|
|
79
|
+
### Fixed
|
|
80
|
+
- Resolved TypeScript strict errors in swarm template `Send` casts
|
|
81
|
+
|
|
82
|
+
## [0.6.0] - 2026-03-04
|
|
83
|
+
|
|
84
|
+
### Added
|
|
85
|
+
- `SwarmGraph` builder for multi-agent orchestration
|
|
86
|
+
- `SwarmGraph.hierarchical()` template — supervisor-workers pattern
|
|
87
|
+
- `SwarmGraph.fanOut()` template — parallel agent execution with reducer
|
|
88
|
+
- `SwarmGraph.pipeline()` template — linear chain with conditional transitions
|
|
89
|
+
- `SwarmGraph.peerNetwork()` template — decentralized agent handoffs
|
|
90
|
+
- `SwarmGraph.mapReduce()` template — parallel map with reducer
|
|
91
|
+
- `SwarmGraph.debate()` template — multi-round parallel debate with judge
|
|
92
|
+
- `SwarmGraph.hierarchicalMesh()` template — nested team coordination
|
|
93
|
+
- Lazy coordination auto-wiring (broker and pubsub) on `SwarmGraph`
|
|
94
|
+
- Handoff execution — agent `Handoff` returns converted to `Command` routing
|
|
95
|
+
- Retry-then-fallback — agents retry on failure, fall back to supervisor
|
|
96
|
+
|
|
97
|
+
### Changed
|
|
98
|
+
- Replaced `SwarmLLM` with `ONIModel` in supervisor routing
|
|
99
|
+
|
|
100
|
+
## [0.5.0] - 2026-03-04
|
|
101
|
+
|
|
102
|
+
### Added
|
|
103
|
+
- `ONIModel` interface and core LLM types
|
|
104
|
+
- Anthropic LLM adapter
|
|
105
|
+
- OpenAI LLM adapter
|
|
106
|
+
- Ollama LLM adapter
|
|
107
|
+
- Google Gemini LLM adapter
|
|
108
|
+
- Models export path and re-exports
|
|
109
|
+
- Tool framework with `defineTool()` and `ToolContext`
|
|
110
|
+
- `AgentContext` and agent types
|
|
111
|
+
- `defineAgent()` declarative agent factory
|
|
112
|
+
- `agent()` functional agent factory
|
|
113
|
+
- `addAgent()` on `StateGraph` to wire agent nodes
|
|
114
|
+
- Request/response and pub/sub coordination patterns
|
|
115
|
+
- Tool permission guardrails
|
|
116
|
+
- Budget tracking and cost control guardrails
|
|
117
|
+
- Content filtering guardrails
|
|
118
|
+
- Audit trail and guardrails exports
|
|
119
|
+
- `EventBus` for structured lifecycle events
|
|
120
|
+
- Guardrails and event bus wired into compile/execution pipeline
|
|
121
|
+
- Integration tests for agents, tools, and guardrails
|
|
122
|
+
|
|
123
|
+
### Removed
|
|
124
|
+
- Direct `openai` dependency (adapters are now bring-your-own-client)
|
|
125
|
+
|
|
126
|
+
## [0.4.0] - 2026-03-04
|
|
127
|
+
|
|
128
|
+
### Added
|
|
129
|
+
- `StateGraph` builder with `addNode()`, `addEdge()`, `addConditionalEdges()`
|
|
130
|
+
- Pregel execution engine (`ONIPregelRunner`) with parallel superstep execution
|
|
131
|
+
- `Command` and `Send` primitives for dynamic routing
|
|
132
|
+
- Subgraph support via `addSubgraph()`
|
|
133
|
+
- Functional API (`entrypoint`, `task`)
|
|
134
|
+
- `MemoryCheckpointer` and `NoopCheckpointer`
|
|
135
|
+
- `InMemoryStore` and `NamespacedStore` for shared key-value state
|
|
136
|
+
- Human-in-the-loop via `interrupt()` and `getUserInput()`
|
|
137
|
+
- Token streaming with `emitToken()` and `TokenStreamWriter`
|
|
138
|
+
- Stream modes: `values`, `updates`, `events`, `messages`, `custom`
|
|
139
|
+
- Graph inspection via `getGraphDef()`
|
|
140
|
+
- `createReactAgent` prebuilt for tool-calling loops
|
|
141
|
+
- `ToolNode` prebuilt for automatic tool dispatch
|
|
142
|
+
- Messages reducer (`messagesReducer`, `addMessages`, `removeMessages`)
|
|
143
|
+
- Retry policies with configurable backoff
|
|
144
|
+
- Swarm primitives: `AgentRegistry`, `AgentPool`, `Mailbox`, `Supervisor`
|
|
145
|
+
- Ephemeral channel support
|
|
146
|
+
- Map-reduce parallel fan-out pattern
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"define-agent.d.ts","sourceRoot":"","sources":["../../src/agents/define-agent.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAIhE;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACrF,IAAI,EAAE,kBAAkB,GACvB,SAAS,CAAC,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"define-agent.d.ts","sourceRoot":"","sources":["../../src/agents/define-agent.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAIhE;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACrF,IAAI,EAAE,kBAAkB,GACvB,SAAS,CAAC,CAAC,CAAC,CAuLd"}
|
|
@@ -93,6 +93,7 @@ export function defineAgent(opts) {
|
|
|
93
93
|
messages,
|
|
94
94
|
tools: llmTools.length > 0 ? llmTools : undefined,
|
|
95
95
|
systemPrompt,
|
|
96
|
+
signal: config?.signal,
|
|
96
97
|
});
|
|
97
98
|
const llmDuration = Date.now() - llmStart;
|
|
98
99
|
// b. Emit llm.response + audit + budget
|
|
@@ -124,11 +125,15 @@ export function defineAgent(opts) {
|
|
|
124
125
|
if (response.toolCalls && response.toolCalls.length > 0) {
|
|
125
126
|
assistantMsg.toolCalls = response.toolCalls;
|
|
126
127
|
}
|
|
127
|
-
|
|
128
|
-
//
|
|
128
|
+
// Check maxTokens budget before pushing — if over budget with pending tool calls,
|
|
129
|
+
// push the assistant message with toolCalls stripped. An assistant+toolCalls message
|
|
130
|
+
// with no following tool results is rejected by Anthropic and OpenAI APIs, but the
|
|
131
|
+
// text content is still valid and worth preserving for conversation history continuity.
|
|
129
132
|
if (maxTokens !== undefined && totalTokens >= maxTokens) {
|
|
133
|
+
messages.push({ role: "assistant", content: assistantMsg.content });
|
|
130
134
|
break;
|
|
131
135
|
}
|
|
136
|
+
messages.push(assistantMsg);
|
|
132
137
|
// e. If no tool calls -> done
|
|
133
138
|
if (!response.toolCalls || response.toolCalls.length === 0) {
|
|
134
139
|
break;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"define-agent.js","sourceRoot":"","sources":["../../src/agents/define-agent.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"define-agent.js","sourceRoot":"","sources":["../../src/agents/define-agent.ts"],"names":[],"mappings":"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"}
|
package/dist/checkpoint.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkpoint.d.ts","sourceRoot":"","sources":["../src/checkpoint.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAMxF,qBAAa,kBAAkB,CAAC,CAAC,CAAE,YAAW,eAAe,CAAC,CAAC,CAAC;IAC9D,OAAO,CAAC,KAAK,CAAyC;IAEhD,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAMvD,GAAG,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"checkpoint.d.ts","sourceRoot":"","sources":["../src/checkpoint.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAMxF,qBAAa,kBAAkB,CAAC,CAAC,CAAE,YAAW,eAAe,CAAC,CAAC,CAAC;IAC9D,OAAO,CAAC,KAAK,CAAyC;IAEhD,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAMvD,GAAG,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAehD,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;IAiBjF,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMvC,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAK7E,iEAAiE;IAC3D,IAAI,CACR,cAAc,EAAE,MAAM,EACtB,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,OAAO,CAAC;IAWnB,KAAK,IAAI,IAAI;CACd;AAMD,qBAAa,gBAAgB,CAAC,CAAC,CAAE,YAAW,eAAe,CAAC,CAAC,CAAC;IACtD,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAC7B,GAAG,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IACvC,IAAI,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5C,MAAM,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CACvC;AAOD,8BAAsB,sBAAsB,CAAC,CAAC,CAAE,YAAW,eAAe,CAAC,CAAC,CAAC;IAC3E,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAyC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IACtG,QAAQ,CAAC,GAAG,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC,CAAC,GAA6B,OAAO,CAAC,IAAI,CAAC;IACnF,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,qBAAqB,GAAU,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;IACjG,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAsC,OAAO,CAAC,IAAI,CAAC;IAE7E,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAKvE,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CASzE"}
|
package/dist/checkpoint.js
CHANGED
|
@@ -17,10 +17,15 @@ export class MemoryCheckpointer {
|
|
|
17
17
|
const existing = this.store.get(checkpoint.threadId) ?? [];
|
|
18
18
|
// Overwrite if same step exists (idempotent)
|
|
19
19
|
const idx = existing.findIndex((c) => c.step === checkpoint.step);
|
|
20
|
-
if (idx >= 0)
|
|
20
|
+
if (idx >= 0) {
|
|
21
21
|
existing[idx] = { ...checkpoint };
|
|
22
|
-
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
23
24
|
existing.push({ ...checkpoint });
|
|
25
|
+
// Keep sorted by step so get() (which returns the last element) always
|
|
26
|
+
// returns the highest step even when steps are written out of order.
|
|
27
|
+
existing.sort((a, b) => a.step - b.step);
|
|
28
|
+
}
|
|
24
29
|
this.store.set(checkpoint.threadId, existing);
|
|
25
30
|
}
|
|
26
31
|
async list(threadId, opts) {
|
package/dist/checkpoint.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkpoint.js","sourceRoot":"","sources":["../src/checkpoint.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,mCAAmC;AACnC,wDAAwD;AACxD,+DAA+D;AAI/D,mEAAmE;AACnE,uDAAuD;AACvD,mEAAmE;AAEnE,MAAM,OAAO,kBAAkB;IACrB,KAAK,GAAG,IAAI,GAAG,EAA8B,CAAC;IAEtD,KAAK,CAAC,GAAG,CAAC,QAAgB;QACxB,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACzC,IAAI,CAAC,OAAO,EAAE,MAAM;YAAE,OAAO,IAAI,CAAC;QAClC,OAAO,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC;IAC7C,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,UAA4B;QACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QAC3D,6CAA6C;QAC7C,MAAM,GAAG,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,IAAI,CAAC,CAAC;QAClE,IAAI,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"checkpoint.js","sourceRoot":"","sources":["../src/checkpoint.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"postgres.d.ts","sourceRoot":"","sources":["../../src/checkpointers/postgres.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"postgres.d.ts","sourceRoot":"","sources":["../../src/checkpointers/postgres.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAQzF,qBAAa,oBAAoB,CAAC,CAAC,CAAE,YAAW,eAAe,CAAC,CAAC,CAAC;IAC5C,OAAO,CAAC,QAAQ,CAAC,IAAI;IAAzC,OAAO;WAEM,MAAM,CAAC,CAAC,EAAE,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC;IAiC5E,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAQvD,GAAG,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBxC,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;IA8BjF,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOvC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5B,OAAO,CAAC,WAAW;CAuBpB"}
|
|
@@ -4,31 +4,39 @@
|
|
|
4
4
|
// Production-grade checkpointer using PostgreSQL.
|
|
5
5
|
// Requires `pg` as an optional peer dependency.
|
|
6
6
|
// ============================================================
|
|
7
|
+
import { CheckpointCorruptError } from "../errors.js";
|
|
7
8
|
export class PostgresCheckpointer {
|
|
8
9
|
pool;
|
|
9
10
|
constructor(pool) {
|
|
10
11
|
this.pool = pool;
|
|
11
12
|
}
|
|
12
13
|
static async create(connectionString) {
|
|
13
|
-
// @ts-
|
|
14
|
+
// @ts-expect-error — pg is an optional peer dependency
|
|
14
15
|
const pg = await import("pg");
|
|
15
|
-
|
|
16
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
17
|
+
const Pool = pg.Pool ?? pg.default?.Pool ?? pg; // SAFE: external boundary — pg is an optional peer dependency with variable shape
|
|
16
18
|
const pool = new Pool({ connectionString });
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
19
|
+
try {
|
|
20
|
+
await pool.query(`
|
|
21
|
+
CREATE TABLE IF NOT EXISTS oni_checkpoints (
|
|
22
|
+
thread_id TEXT NOT NULL,
|
|
23
|
+
step INTEGER NOT NULL,
|
|
24
|
+
agent_id TEXT,
|
|
25
|
+
state JSONB NOT NULL,
|
|
26
|
+
next_nodes JSONB NOT NULL,
|
|
27
|
+
pending_sends JSONB NOT NULL DEFAULT '[]',
|
|
28
|
+
metadata JSONB,
|
|
29
|
+
pending_writes JSONB,
|
|
30
|
+
timestamp BIGINT NOT NULL,
|
|
31
|
+
PRIMARY KEY (thread_id, step)
|
|
32
|
+
)
|
|
33
|
+
`);
|
|
34
|
+
await pool.query(`CREATE INDEX IF NOT EXISTS idx_oni_cp_thread ON oni_checkpoints (thread_id)`);
|
|
35
|
+
}
|
|
36
|
+
catch (err) {
|
|
37
|
+
await pool.end().catch(() => { });
|
|
38
|
+
throw err;
|
|
39
|
+
}
|
|
32
40
|
return new PostgresCheckpointer(pool);
|
|
33
41
|
}
|
|
34
42
|
async get(threadId) {
|
|
@@ -36,10 +44,10 @@ export class PostgresCheckpointer {
|
|
|
36
44
|
return rows.length > 0 ? this.deserialize(rows[0]) : null;
|
|
37
45
|
}
|
|
38
46
|
async put(cp) {
|
|
39
|
-
await this.pool.query(`INSERT INTO oni_checkpoints
|
|
40
|
-
(thread_id, step, agent_id, state, next_nodes, pending_sends, metadata, pending_writes, timestamp)
|
|
41
|
-
VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9)
|
|
42
|
-
ON CONFLICT (thread_id, step)
|
|
47
|
+
await this.pool.query(`INSERT INTO oni_checkpoints
|
|
48
|
+
(thread_id, step, agent_id, state, next_nodes, pending_sends, metadata, pending_writes, timestamp)
|
|
49
|
+
VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9)
|
|
50
|
+
ON CONFLICT (thread_id, step)
|
|
43
51
|
DO UPDATE SET state=$4, next_nodes=$5, pending_sends=$6, metadata=$7, pending_writes=$8, timestamp=$9`, [
|
|
44
52
|
cp.threadId,
|
|
45
53
|
cp.step,
|
|
@@ -83,16 +91,25 @@ export class PostgresCheckpointer {
|
|
|
83
91
|
await this.pool.end();
|
|
84
92
|
}
|
|
85
93
|
deserialize(row) {
|
|
86
|
-
const
|
|
94
|
+
const threadId = row.thread_id;
|
|
95
|
+
const safeParse = (field, raw) => {
|
|
96
|
+
const val = typeof raw === "string" ? raw : JSON.stringify(raw);
|
|
97
|
+
try {
|
|
98
|
+
return JSON.parse(val);
|
|
99
|
+
}
|
|
100
|
+
catch {
|
|
101
|
+
throw new CheckpointCorruptError(threadId, `failed to parse "${field}" — data may be truncated or corrupted`);
|
|
102
|
+
}
|
|
103
|
+
};
|
|
87
104
|
return {
|
|
88
|
-
threadId
|
|
105
|
+
threadId,
|
|
89
106
|
step: row.step,
|
|
90
107
|
agentId: row.agent_id ?? undefined,
|
|
91
|
-
state:
|
|
92
|
-
nextNodes:
|
|
93
|
-
pendingSends:
|
|
94
|
-
metadata: row.metadata ?
|
|
95
|
-
pendingWrites: row.pending_writes ?
|
|
108
|
+
state: safeParse("state", row.state),
|
|
109
|
+
nextNodes: safeParse("next_nodes", row.next_nodes),
|
|
110
|
+
pendingSends: safeParse("pending_sends", row.pending_sends),
|
|
111
|
+
metadata: row.metadata ? safeParse("metadata", row.metadata) : undefined,
|
|
112
|
+
pendingWrites: row.pending_writes ? safeParse("pending_writes", row.pending_writes) : undefined,
|
|
96
113
|
timestamp: Number(row.timestamp),
|
|
97
114
|
};
|
|
98
115
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"postgres.js","sourceRoot":"","sources":["../../src/checkpointers/postgres.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,0CAA0C;AAC1C,+DAA+D;AAC/D,kDAAkD;AAClD,gDAAgD;AAChD,+DAA+D;
|
|
1
|
+
{"version":3,"file":"postgres.js","sourceRoot":"","sources":["../../src/checkpointers/postgres.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,6 +9,7 @@ export declare class CircuitBreaker {
|
|
|
9
9
|
private _state;
|
|
10
10
|
private consecutiveFailures;
|
|
11
11
|
private lastFailureTime;
|
|
12
|
+
private _probeInFlight;
|
|
12
13
|
private readonly nodeName;
|
|
13
14
|
constructor(config: CircuitBreakerConfig, nodeName?: string);
|
|
14
15
|
get state(): CircuitState;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"circuit-breaker.d.ts","sourceRoot":"","sources":["../src/circuit-breaker.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC;AAE3D,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC;CAC5C;AAED,qBAAa,cAAc;
|
|
1
|
+
{"version":3,"file":"circuit-breaker.d.ts","sourceRoot":"","sources":["../src/circuit-breaker.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC;AAE3D,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC;CAC5C;AAED,qBAAa,cAAc;IAOb,OAAO,CAAC,QAAQ,CAAC,MAAM;IANnC,OAAO,CAAC,MAAM,CAA0B;IACxC,OAAO,CAAC,mBAAmB,CAAK;IAChC,OAAO,CAAC,eAAe,CAAK;IAC5B,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;gBAEL,MAAM,EAAE,oBAAoB,EAAE,QAAQ,CAAC,EAAE,MAAM;IAI5E,IAAI,KAAK,IAAI,YAAY,CAKxB;IAEK,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAwBlD,OAAO,CAAC,SAAS;IAMjB,OAAO,CAAC,SAAS;IAWjB,KAAK,IAAI,IAAI;CAMd"}
|
package/dist/circuit-breaker.js
CHANGED
|
@@ -7,6 +7,7 @@ export class CircuitBreaker {
|
|
|
7
7
|
_state = "closed";
|
|
8
8
|
consecutiveFailures = 0;
|
|
9
9
|
lastFailureTime = 0;
|
|
10
|
+
_probeInFlight = false;
|
|
10
11
|
nodeName;
|
|
11
12
|
constructor(config, nodeName) {
|
|
12
13
|
this.config = config;
|
|
@@ -25,6 +26,15 @@ export class CircuitBreaker {
|
|
|
25
26
|
return this.config.fallback();
|
|
26
27
|
throw new CircuitBreakerOpenError(this.nodeName, this.config.resetAfter);
|
|
27
28
|
}
|
|
29
|
+
if (currentState === "half_open") {
|
|
30
|
+
if (this._probeInFlight) {
|
|
31
|
+
// Another probe is already in flight — reject additional concurrent callers
|
|
32
|
+
if (this.config.fallback)
|
|
33
|
+
return this.config.fallback();
|
|
34
|
+
throw new CircuitBreakerOpenError(this.nodeName, this.config.resetAfter);
|
|
35
|
+
}
|
|
36
|
+
this._probeInFlight = true; // Set synchronously before any await
|
|
37
|
+
}
|
|
28
38
|
try {
|
|
29
39
|
const result = await fn();
|
|
30
40
|
this.onSuccess();
|
|
@@ -38,8 +48,10 @@ export class CircuitBreaker {
|
|
|
38
48
|
onSuccess() {
|
|
39
49
|
this.consecutiveFailures = 0;
|
|
40
50
|
this._state = "closed";
|
|
51
|
+
this._probeInFlight = false;
|
|
41
52
|
}
|
|
42
53
|
onFailure() {
|
|
54
|
+
this._probeInFlight = false;
|
|
43
55
|
this.consecutiveFailures++;
|
|
44
56
|
this.lastFailureTime = Date.now();
|
|
45
57
|
if (this._state === "half_open") {
|
|
@@ -53,6 +65,7 @@ export class CircuitBreaker {
|
|
|
53
65
|
this._state = "closed";
|
|
54
66
|
this.consecutiveFailures = 0;
|
|
55
67
|
this.lastFailureTime = 0;
|
|
68
|
+
this._probeInFlight = false;
|
|
56
69
|
}
|
|
57
70
|
}
|
|
58
71
|
//# sourceMappingURL=circuit-breaker.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"circuit-breaker.js","sourceRoot":"","sources":["../src/circuit-breaker.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,kCAAkC;AAClC,+DAA+D;AAE/D,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAUtD,MAAM,OAAO,cAAc;
|
|
1
|
+
{"version":3,"file":"circuit-breaker.js","sourceRoot":"","sources":["../src/circuit-breaker.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/dev.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../../src/cli/dev.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAE/D;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,wBAAsB,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../../src/cli/dev.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAE/D;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,wBAAsB,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CA2ChE"}
|