general-agent-runtime 0.0.1
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/README.md +311 -0
- package/dist/agent/agent.d.ts +14 -0
- package/dist/agent/agent.js +25 -0
- package/dist/agent/agent.js.map +1 -0
- package/dist/agent/builder.d.ts +28 -0
- package/dist/agent/builder.js +178 -0
- package/dist/agent/builder.js.map +1 -0
- package/dist/agent/create-agent.d.ts +2 -0
- package/dist/agent/create-agent.js +29 -0
- package/dist/agent/create-agent.js.map +1 -0
- package/dist/agent/index.d.ts +8 -0
- package/dist/agent/index.js +8 -0
- package/dist/agent/index.js.map +1 -0
- package/dist/agent/integrations/session-context-source.d.ts +12 -0
- package/dist/agent/integrations/session-context-source.js +84 -0
- package/dist/agent/integrations/session-context-source.js.map +1 -0
- package/dist/agent/integrations/session-run-recorder.d.ts +17 -0
- package/dist/agent/integrations/session-run-recorder.js +60 -0
- package/dist/agent/integrations/session-run-recorder.js.map +1 -0
- package/dist/agent/loop-factory.d.ts +11 -0
- package/dist/agent/loop-factory.js +16 -0
- package/dist/agent/loop-factory.js.map +1 -0
- package/dist/agent/run-manager.d.ts +38 -0
- package/dist/agent/run-manager.js +96 -0
- package/dist/agent/run-manager.js.map +1 -0
- package/dist/agent/types.d.ts +38 -0
- package/dist/agent/types.js +2 -0
- package/dist/agent/types.js.map +1 -0
- package/dist/cli/main.d.ts +2 -0
- package/dist/cli/main.js +88 -0
- package/dist/cli/main.js.map +1 -0
- package/dist/cli/renderer.d.ts +2 -0
- package/dist/cli/renderer.js +36 -0
- package/dist/cli/renderer.js.map +1 -0
- package/dist/compaction/budget.d.ts +14 -0
- package/dist/compaction/budget.js +28 -0
- package/dist/compaction/budget.js.map +1 -0
- package/dist/compaction/deterministic.d.ts +9 -0
- package/dist/compaction/deterministic.js +106 -0
- package/dist/compaction/deterministic.js.map +1 -0
- package/dist/compaction/index.d.ts +5 -0
- package/dist/compaction/index.js +5 -0
- package/dist/compaction/index.js.map +1 -0
- package/dist/compaction/manager.d.ts +22 -0
- package/dist/compaction/manager.js +111 -0
- package/dist/compaction/manager.js.map +1 -0
- package/dist/compaction/semantic.d.ts +13 -0
- package/dist/compaction/semantic.js +234 -0
- package/dist/compaction/semantic.js.map +1 -0
- package/dist/compaction/strategy.d.ts +1 -0
- package/dist/compaction/strategy.js +2 -0
- package/dist/compaction/strategy.js.map +1 -0
- package/dist/compaction/types.d.ts +40 -0
- package/dist/compaction/types.js +2 -0
- package/dist/compaction/types.js.map +1 -0
- package/dist/context/budget.d.ts +12 -0
- package/dist/context/budget.js +13 -0
- package/dist/context/budget.js.map +1 -0
- package/dist/context/controller.d.ts +17 -0
- package/dist/context/controller.js +78 -0
- package/dist/context/controller.js.map +1 -0
- package/dist/context/index.d.ts +14 -0
- package/dist/context/index.js +13 -0
- package/dist/context/index.js.map +1 -0
- package/dist/context/manager.d.ts +10 -0
- package/dist/context/manager.js +65 -0
- package/dist/context/manager.js.map +1 -0
- package/dist/context/pipeline.d.ts +16 -0
- package/dist/context/pipeline.js +45 -0
- package/dist/context/pipeline.js.map +1 -0
- package/dist/context/projection.d.ts +8 -0
- package/dist/context/projection.js +10 -0
- package/dist/context/projection.js.map +1 -0
- package/dist/context/source.d.ts +6 -0
- package/dist/context/source.js +2 -0
- package/dist/context/source.js.map +1 -0
- package/dist/context/sources/dynamic.d.ts +10 -0
- package/dist/context/sources/dynamic.js +13 -0
- package/dist/context/sources/dynamic.js.map +1 -0
- package/dist/context/sources/project.d.ts +19 -0
- package/dist/context/sources/project.js +75 -0
- package/dist/context/sources/project.js.map +1 -0
- package/dist/context/sources/system.d.ts +14 -0
- package/dist/context/sources/system.js +23 -0
- package/dist/context/sources/system.js.map +1 -0
- package/dist/context/sources/user.d.ts +14 -0
- package/dist/context/sources/user.js +23 -0
- package/dist/context/sources/user.js.map +1 -0
- package/dist/context/stages/deduplicate.d.ts +7 -0
- package/dist/context/stages/deduplicate.js +19 -0
- package/dist/context/stages/deduplicate.js.map +1 -0
- package/dist/context/stages/expiration.d.ts +5 -0
- package/dist/context/stages/expiration.js +14 -0
- package/dist/context/stages/expiration.js.map +1 -0
- package/dist/context/stages/visibility.d.ts +5 -0
- package/dist/context/stages/visibility.js +7 -0
- package/dist/context/stages/visibility.js.map +1 -0
- package/dist/context/types.d.ts +72 -0
- package/dist/context/types.js +2 -0
- package/dist/context/types.js.map +1 -0
- package/dist/errors/codes.d.ts +1 -0
- package/dist/errors/codes.js +2 -0
- package/dist/errors/codes.js.map +1 -0
- package/dist/errors/index.d.ts +4 -0
- package/dist/errors/index.js +4 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/errors/normalize.d.ts +2 -0
- package/dist/errors/normalize.js +32 -0
- package/dist/errors/normalize.js.map +1 -0
- package/dist/errors/runtime-error.d.ts +18 -0
- package/dist/errors/runtime-error.js +21 -0
- package/dist/errors/runtime-error.js.map +1 -0
- package/dist/errors/serialize.d.ts +2 -0
- package/dist/errors/serialize.js +12 -0
- package/dist/errors/serialize.js.map +1 -0
- package/dist/events/bus.d.ts +17 -0
- package/dist/events/bus.js +52 -0
- package/dist/events/bus.js.map +1 -0
- package/dist/events/index.d.ts +6 -0
- package/dist/events/index.js +5 -0
- package/dist/events/index.js.map +1 -0
- package/dist/events/publisher.d.ts +12 -0
- package/dist/events/publisher.js +22 -0
- package/dist/events/publisher.js.map +1 -0
- package/dist/events/sequence.d.ts +6 -0
- package/dist/events/sequence.js +14 -0
- package/dist/events/sequence.js.map +1 -0
- package/dist/events/sink.d.ts +5 -0
- package/dist/events/sink.js +2 -0
- package/dist/events/sink.js.map +1 -0
- package/dist/events/stream.d.ts +12 -0
- package/dist/events/stream.js +46 -0
- package/dist/events/stream.js.map +1 -0
- package/dist/events/types.d.ts +42 -0
- package/dist/events/types.js +2 -0
- package/dist/events/types.js.map +1 -0
- package/dist/hooks/bus.d.ts +14 -0
- package/dist/hooks/bus.js +104 -0
- package/dist/hooks/bus.js.map +1 -0
- package/dist/hooks/index.d.ts +5 -0
- package/dist/hooks/index.js +5 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/policy.d.ts +3 -0
- package/dist/hooks/policy.js +33 -0
- package/dist/hooks/policy.js.map +1 -0
- package/dist/hooks/registry.d.ts +13 -0
- package/dist/hooks/registry.js +31 -0
- package/dist/hooks/registry.js.map +1 -0
- package/dist/hooks/timeout.d.ts +2 -0
- package/dist/hooks/timeout.js +63 -0
- package/dist/hooks/timeout.js.map +1 -0
- package/dist/hooks/types.d.ts +40 -0
- package/dist/hooks/types.js +2 -0
- package/dist/hooks/types.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.js +14 -0
- package/dist/index.js.map +1 -0
- package/dist/loop/index.d.ts +7 -0
- package/dist/loop/index.js +6 -0
- package/dist/loop/index.js.map +1 -0
- package/dist/loop/loop.d.ts +22 -0
- package/dist/loop/loop.js +623 -0
- package/dist/loop/loop.js.map +1 -0
- package/dist/loop/policy.d.ts +21 -0
- package/dist/loop/policy.js +54 -0
- package/dist/loop/policy.js.map +1 -0
- package/dist/loop/recorder.d.ts +9 -0
- package/dist/loop/recorder.js +2 -0
- package/dist/loop/recorder.js.map +1 -0
- package/dist/loop/state.d.ts +18 -0
- package/dist/loop/state.js +81 -0
- package/dist/loop/state.js.map +1 -0
- package/dist/loop/stream-assembler.d.ts +12 -0
- package/dist/loop/stream-assembler.js +76 -0
- package/dist/loop/stream-assembler.js.map +1 -0
- package/dist/loop/transition.d.ts +2 -0
- package/dist/loop/transition.js +27 -0
- package/dist/loop/transition.js.map +1 -0
- package/dist/loop/types.d.ts +53 -0
- package/dist/loop/types.js +2 -0
- package/dist/loop/types.js.map +1 -0
- package/dist/model/index.d.ts +6 -0
- package/dist/model/index.js +5 -0
- package/dist/model/index.js.map +1 -0
- package/dist/model/provider.d.ts +6 -0
- package/dist/model/provider.js +2 -0
- package/dist/model/provider.js.map +1 -0
- package/dist/model/providers/openai-compatible/adapter.d.ts +3 -0
- package/dist/model/providers/openai-compatible/adapter.js +92 -0
- package/dist/model/providers/openai-compatible/adapter.js.map +1 -0
- package/dist/model/providers/openai-compatible/errors.d.ts +3 -0
- package/dist/model/providers/openai-compatible/errors.js +68 -0
- package/dist/model/providers/openai-compatible/errors.js.map +1 -0
- package/dist/model/providers/openai-compatible/provider.d.ts +18 -0
- package/dist/model/providers/openai-compatible/provider.js +182 -0
- package/dist/model/providers/openai-compatible/provider.js.map +1 -0
- package/dist/model/providers/openai-compatible/stream-parser.d.ts +1 -0
- package/dist/model/providers/openai-compatible/stream-parser.js +45 -0
- package/dist/model/providers/openai-compatible/stream-parser.js.map +1 -0
- package/dist/model/registry.d.ts +9 -0
- package/dist/model/registry.js +35 -0
- package/dist/model/registry.js.map +1 -0
- package/dist/model/types.d.ts +49 -0
- package/dist/model/types.js +2 -0
- package/dist/model/types.js.map +1 -0
- package/dist/session/factory.d.ts +13 -0
- package/dist/session/factory.js +14 -0
- package/dist/session/factory.js.map +1 -0
- package/dist/session/index.d.ts +8 -0
- package/dist/session/index.js +7 -0
- package/dist/session/index.js.map +1 -0
- package/dist/session/jsonl-store.d.ts +20 -0
- package/dist/session/jsonl-store.js +264 -0
- package/dist/session/jsonl-store.js.map +1 -0
- package/dist/session/projector.d.ts +4 -0
- package/dist/session/projector.js +104 -0
- package/dist/session/projector.js.map +1 -0
- package/dist/session/serializer.d.ts +5 -0
- package/dist/session/serializer.js +126 -0
- package/dist/session/serializer.js.map +1 -0
- package/dist/session/session.d.ts +32 -0
- package/dist/session/session.js +129 -0
- package/dist/session/session.js.map +1 -0
- package/dist/session/store.d.ts +9 -0
- package/dist/session/store.js +2 -0
- package/dist/session/store.js.map +1 -0
- package/dist/session/types.d.ts +29 -0
- package/dist/session/types.js +2 -0
- package/dist/session/types.js.map +1 -0
- package/dist/settings/defaults.d.ts +7 -0
- package/dist/settings/defaults.js +40 -0
- package/dist/settings/defaults.js.map +1 -0
- package/dist/settings/env-source.d.ts +8 -0
- package/dist/settings/env-source.js +26 -0
- package/dist/settings/env-source.js.map +1 -0
- package/dist/settings/file-source.d.ts +9 -0
- package/dist/settings/file-source.js +32 -0
- package/dist/settings/file-source.js.map +1 -0
- package/dist/settings/index.d.ts +8 -0
- package/dist/settings/index.js +7 -0
- package/dist/settings/index.js.map +1 -0
- package/dist/settings/resolver.d.ts +5 -0
- package/dist/settings/resolver.js +29 -0
- package/dist/settings/resolver.js.map +1 -0
- package/dist/settings/runtime-source.d.ts +8 -0
- package/dist/settings/runtime-source.js +11 -0
- package/dist/settings/runtime-source.js.map +1 -0
- package/dist/settings/schema.d.ts +37 -0
- package/dist/settings/schema.js +47 -0
- package/dist/settings/schema.js.map +1 -0
- package/dist/settings/source.d.ts +5 -0
- package/dist/settings/source.js +2 -0
- package/dist/settings/source.js.map +1 -0
- package/dist/settings/types.d.ts +46 -0
- package/dist/settings/types.js +2 -0
- package/dist/settings/types.js.map +1 -0
- package/dist/tools/builtin/list-directory.d.ts +17 -0
- package/dist/tools/builtin/list-directory.js +31 -0
- package/dist/tools/builtin/list-directory.js.map +1 -0
- package/dist/tools/builtin/read-file.d.ts +14 -0
- package/dist/tools/builtin/read-file.js +23 -0
- package/dist/tools/builtin/read-file.js.map +1 -0
- package/dist/tools/builtin/run-command.d.ts +19 -0
- package/dist/tools/builtin/run-command.js +46 -0
- package/dist/tools/builtin/run-command.js.map +1 -0
- package/dist/tools/builtin/write-file.d.ts +20 -0
- package/dist/tools/builtin/write-file.js +29 -0
- package/dist/tools/builtin/write-file.js.map +1 -0
- package/dist/tools/executor.d.ts +29 -0
- package/dist/tools/executor.js +212 -0
- package/dist/tools/executor.js.map +1 -0
- package/dist/tools/index.d.ts +10 -0
- package/dist/tools/index.js +9 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/registry.d.ts +19 -0
- package/dist/tools/registry.js +42 -0
- package/dist/tools/registry.js.map +1 -0
- package/dist/tools/result-processor.d.ts +4 -0
- package/dist/tools/result-processor.js +122 -0
- package/dist/tools/result-processor.js.map +1 -0
- package/dist/tools/tool.d.ts +8 -0
- package/dist/tools/tool.js +2 -0
- package/dist/tools/tool.js.map +1 -0
- package/dist/tools/types.d.ts +44 -0
- package/dist/tools/types.js +2 -0
- package/dist/tools/types.js.map +1 -0
- package/dist/tools/validator.d.ts +5 -0
- package/dist/tools/validator.js +112 -0
- package/dist/tools/validator.js.map +1 -0
- package/dist/types/compaction.d.ts +22 -0
- package/dist/types/compaction.js +2 -0
- package/dist/types/compaction.js.map +1 -0
- package/dist/types/error.d.ts +10 -0
- package/dist/types/error.js +2 -0
- package/dist/types/error.js.map +1 -0
- package/dist/types/ids.d.ts +12 -0
- package/dist/types/ids.js +2 -0
- package/dist/types/ids.js.map +1 -0
- package/dist/types/index.d.ts +9 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/json.d.ts +7 -0
- package/dist/types/json.js +2 -0
- package/dist/types/json.js.map +1 -0
- package/dist/types/message.d.ts +39 -0
- package/dist/types/message.js +2 -0
- package/dist/types/message.js.map +1 -0
- package/dist/types/metadata.d.ts +2 -0
- package/dist/types/metadata.js +2 -0
- package/dist/types/metadata.js.map +1 -0
- package/dist/types/runtime.d.ts +20 -0
- package/dist/types/runtime.js +2 -0
- package/dist/types/runtime.js.map +1 -0
- package/dist/types/tool.d.ts +12 -0
- package/dist/types/tool.js +2 -0
- package/dist/types/tool.js.map +1 -0
- package/dist/types/usage.d.ts +17 -0
- package/dist/types/usage.js +2 -0
- package/dist/types/usage.js.map +1 -0
- package/dist/utils/deep.d.ts +2 -0
- package/dist/utils/deep.js +34 -0
- package/dist/utils/deep.js.map +1 -0
- package/dist/utils/id.d.ts +10 -0
- package/dist/utils/id.js +14 -0
- package/dist/utils/id.js.map +1 -0
- package/dist/utils/index.d.ts +3 -0
- package/dist/utils/index.js +4 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/message.d.ts +11 -0
- package/dist/utils/message.js +31 -0
- package/dist/utils/message.js.map +1 -0
- package/package.json +59 -0
package/README.md
ADDED
|
@@ -0,0 +1,311 @@
|
|
|
1
|
+
# General Agent Runtime
|
|
2
|
+
|
|
3
|
+
A small, composable TypeScript runtime for building tool-using AI agents with streaming events, persistent sessions, hooks, and long-context compaction.
|
|
4
|
+
|
|
5
|
+
## Status
|
|
6
|
+
|
|
7
|
+
The core v0 Runtime architecture is complete through Phase 11.
|
|
8
|
+
|
|
9
|
+
Current verification baseline:
|
|
10
|
+
|
|
11
|
+
```text
|
|
12
|
+
npm run typecheck ✅
|
|
13
|
+
npm test ✅ 15 files / 121 tests
|
|
14
|
+
npm run test:coverage ✅ 88.22% statements / 80.83% branches / 93.56% functions
|
|
15
|
+
npm run build ✅
|
|
16
|
+
git diff --check ✅
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
v0 is complete: the core Runtime, public-API examples, live integration tests, and minimal CLI have all been implemented and verified against a real OpenAI-compatible llama.cpp endpoint. MCP, Skills, Memory, Approval, and SubAgent are intentionally v1+.
|
|
20
|
+
|
|
21
|
+
## Installation
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
npm install general-agent-runtime
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
The package is ESM-only and requires Node.js 22 or newer.
|
|
28
|
+
|
|
29
|
+
## Quick start
|
|
30
|
+
|
|
31
|
+
Set an OpenAI-compatible endpoint:
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
set AGENT_BASE_URL=https://api.openai.com/v1
|
|
35
|
+
set AGENT_API_KEY=your-key
|
|
36
|
+
set AGENT_MODEL=gpt-5.6
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
Then:
|
|
40
|
+
|
|
41
|
+
```ts
|
|
42
|
+
import { createAgent } from "general-agent-runtime";
|
|
43
|
+
|
|
44
|
+
const agent = await createAgent();
|
|
45
|
+
|
|
46
|
+
for await (const event of agent.run("Explain what this project does in one paragraph.")) {
|
|
47
|
+
if (event.type === "message_delta") {
|
|
48
|
+
process.stdout.write(event.data.delta);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
`createAgent()` resolves defaults, `agent.config.json`, environment variables, and explicit runtime overrides, then assembles the default Runtime.
|
|
54
|
+
|
|
55
|
+
## Agent API
|
|
56
|
+
|
|
57
|
+
The main SDK surface is intentionally small:
|
|
58
|
+
|
|
59
|
+
```ts
|
|
60
|
+
interface Agent {
|
|
61
|
+
run(input, options?): AsyncIterable<AgentEvent>;
|
|
62
|
+
resume(sessionId, options?): Promise<void>;
|
|
63
|
+
abort(runId): void;
|
|
64
|
+
getState(runId): Readonly<AgentRunState> | undefined;
|
|
65
|
+
}
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### Streaming events
|
|
69
|
+
|
|
70
|
+
`agent.run()` returns an `AsyncIterable<AgentEvent>`. Common events include:
|
|
71
|
+
|
|
72
|
+
```text
|
|
73
|
+
run_start
|
|
74
|
+
turn_start
|
|
75
|
+
message_start
|
|
76
|
+
message_delta
|
|
77
|
+
tool_start
|
|
78
|
+
tool_end
|
|
79
|
+
compact_start
|
|
80
|
+
compact_end
|
|
81
|
+
message_end
|
|
82
|
+
turn_end
|
|
83
|
+
error
|
|
84
|
+
run_end
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
The same logical event sequence is visible to registered Event sinks and the Agent stream.
|
|
88
|
+
|
|
89
|
+
### Session resume
|
|
90
|
+
|
|
91
|
+
A new run creates a JSONL Session automatically. Capture its `sessionId` from the event stream and pass it back later:
|
|
92
|
+
|
|
93
|
+
```ts
|
|
94
|
+
let sessionId;
|
|
95
|
+
|
|
96
|
+
for await (const event of agent.run("Remember that the project codename is Atlas.")) {
|
|
97
|
+
sessionId ??= event.sessionId;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
await agent.resume(sessionId);
|
|
101
|
+
|
|
102
|
+
for await (const event of agent.run(
|
|
103
|
+
"What is the project codename?",
|
|
104
|
+
{ sessionId },
|
|
105
|
+
)) {
|
|
106
|
+
if (event.type === "message_delta") {
|
|
107
|
+
process.stdout.write(event.data.delta);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
`resume()` validates that the persisted Session can be reopened and projected. Continuing the conversation is still done through `run(..., { sessionId })`.
|
|
113
|
+
|
|
114
|
+
### Abort
|
|
115
|
+
|
|
116
|
+
Use an `AbortSignal` when the caller owns cancellation:
|
|
117
|
+
|
|
118
|
+
```ts
|
|
119
|
+
const controller = new AbortController();
|
|
120
|
+
|
|
121
|
+
const stream = agent.run("Do a long task", {
|
|
122
|
+
signal: controller.signal,
|
|
123
|
+
});
|
|
124
|
+
|
|
125
|
+
controller.abort("user_cancelled");
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
When a `runId` is already known, `agent.abort(runId)` can cancel that active run directly.
|
|
129
|
+
|
|
130
|
+
## Tools
|
|
131
|
+
|
|
132
|
+
The default builder registers four core tools:
|
|
133
|
+
|
|
134
|
+
- `read_file`
|
|
135
|
+
- `write_file`
|
|
136
|
+
- `list_directory`
|
|
137
|
+
- `run_command`
|
|
138
|
+
|
|
139
|
+
All model tool calls pass through `ToolExecutor` for input validation, Hook control, timeout/abort handling, bounded parallelism, error normalization, and output truncation.
|
|
140
|
+
|
|
141
|
+
For custom composition, use the public `DefaultAgentBuilder` API:
|
|
142
|
+
|
|
143
|
+
```ts
|
|
144
|
+
import {
|
|
145
|
+
DefaultAgentBuilder,
|
|
146
|
+
type Tool,
|
|
147
|
+
} from "general-agent-runtime";
|
|
148
|
+
|
|
149
|
+
const echoTool: Tool = {
|
|
150
|
+
name: "echo",
|
|
151
|
+
description: "Echo a JSON value.",
|
|
152
|
+
inputSchema: {
|
|
153
|
+
type: "object",
|
|
154
|
+
properties: {
|
|
155
|
+
text: { type: "string" },
|
|
156
|
+
},
|
|
157
|
+
required: ["text"],
|
|
158
|
+
additionalProperties: false,
|
|
159
|
+
},
|
|
160
|
+
async execute(input) {
|
|
161
|
+
return input;
|
|
162
|
+
},
|
|
163
|
+
};
|
|
164
|
+
|
|
165
|
+
const agent = new DefaultAgentBuilder()
|
|
166
|
+
.withTool(echoTool)
|
|
167
|
+
.build();
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
Use `createAgent()` for normal application setup; use `DefaultAgentBuilder` when replacing or extending Runtime components. The Builder uses the config you give it (or built-in defaults); unlike `createAgent()`, it does not automatically resolve file/environment configuration sources.
|
|
171
|
+
|
|
172
|
+
## Hooks
|
|
173
|
+
|
|
174
|
+
Hooks form the Runtime control plane. They can observe or control lifecycle points without placing policy inside the Loop.
|
|
175
|
+
|
|
176
|
+
Typical uses:
|
|
177
|
+
|
|
178
|
+
- modify or block a tool call with `before_tool`;
|
|
179
|
+
- inspect tool output with `after_tool`;
|
|
180
|
+
- modify the final model request with `before_model`;
|
|
181
|
+
- stop a run at lifecycle boundaries;
|
|
182
|
+
- observe compaction and errors.
|
|
183
|
+
|
|
184
|
+
`before_model` may modify messages, tools, temperature, max output tokens, and provider options, but it cannot change the resolved model.
|
|
185
|
+
|
|
186
|
+
## Long-context handling
|
|
187
|
+
|
|
188
|
+
The Runtime separates projection from compaction:
|
|
189
|
+
|
|
190
|
+
```text
|
|
191
|
+
Context sources
|
|
192
|
+
↓
|
|
193
|
+
Context snapshot
|
|
194
|
+
↓
|
|
195
|
+
Projection
|
|
196
|
+
↓
|
|
197
|
+
Budget evaluation
|
|
198
|
+
↓
|
|
199
|
+
Compaction when required
|
|
200
|
+
↓
|
|
201
|
+
ModelRequest
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
Compaction supports deterministic compression, semantic compaction, durable checkpoints, and bounded reactive recovery from provider context-limit errors. Original Session history remains append-only.
|
|
205
|
+
|
|
206
|
+
## Examples
|
|
207
|
+
|
|
208
|
+
```text
|
|
209
|
+
examples/basic-chat.ts
|
|
210
|
+
examples/tool-call.ts
|
|
211
|
+
examples/resume-session.ts
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
Run one with:
|
|
215
|
+
|
|
216
|
+
```bash
|
|
217
|
+
npm run dev -- examples/basic-chat.ts "Hello"
|
|
218
|
+
npm run dev -- examples/tool-call.ts
|
|
219
|
+
npm run dev -- examples/resume-session.ts
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
## CLI
|
|
223
|
+
|
|
224
|
+
From this repository, run the minimal interactive CLI with:
|
|
225
|
+
|
|
226
|
+
```bash
|
|
227
|
+
npm run cli
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
After installing the npm package, run:
|
|
231
|
+
|
|
232
|
+
```bash
|
|
233
|
+
npx general-agent-runtime
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
Continue an existing Session:
|
|
237
|
+
|
|
238
|
+
```bash
|
|
239
|
+
npx general-agent-runtime --session <session-id>
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
The CLI only consumes the public Agent API and Agent events. It does not implement Runtime behavior.
|
|
243
|
+
|
|
244
|
+
## Tests
|
|
245
|
+
|
|
246
|
+
Default tests are deterministic unit tests:
|
|
247
|
+
|
|
248
|
+
```bash
|
|
249
|
+
npm test
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
Coverage uses V8 and enforces minimum global thresholds:
|
|
253
|
+
|
|
254
|
+
```bash
|
|
255
|
+
npm run test:coverage
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
Current thresholds are 87% statements/lines, 80% branches, and 93% functions. Pure TypeScript declarations and the CLI process entrypoint are excluded from the core Runtime coverage denominator; executable Runtime modules remain included.
|
|
259
|
+
|
|
260
|
+
Live OpenAI-compatible integration tests are separate:
|
|
261
|
+
|
|
262
|
+
```bash
|
|
263
|
+
npm run test:integration
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
Live tests read the same Runtime configuration as the SDK. Configure `agent.config.json`, or provide `AGENT_BASE_URL` and `AGENT_MODEL` environment variables; set `AGENT_API_KEY` when the endpoint requires authentication. If neither explicit file nor environment configuration is present, live tests skip.
|
|
267
|
+
|
|
268
|
+
## Package verification
|
|
269
|
+
|
|
270
|
+
Before publishing, build a real tarball and verify it from a clean TypeScript consumer:
|
|
271
|
+
|
|
272
|
+
```bash
|
|
273
|
+
npm run test:package
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
`test:package` creates the real tarball in a temporary directory, installs it into a clean consumer, checks TypeScript declaration resolution, verifies the root ESM import, and runs the installed CLI. `prepack` automatically runs a clean build, typecheck, and unit tests before npm creates the package. The published tarball is restricted to `dist/`, `README.md`, and npm metadata; tests, examples, local configuration, sessions, coverage, design documents, and release scripts are not published.
|
|
277
|
+
|
|
278
|
+
Publish with:
|
|
279
|
+
|
|
280
|
+
```bash
|
|
281
|
+
npm publish
|
|
282
|
+
```
|
|
283
|
+
|
|
284
|
+
The current package name is `general-agent-runtime`. Confirm the name is still available immediately before the first publish.
|
|
285
|
+
|
|
286
|
+
## Architecture
|
|
287
|
+
|
|
288
|
+
The main ownership model is:
|
|
289
|
+
|
|
290
|
+
```text
|
|
291
|
+
createAgent / DefaultAgentBuilder
|
|
292
|
+
↓
|
|
293
|
+
Agent
|
|
294
|
+
↓
|
|
295
|
+
RunManager
|
|
296
|
+
↓
|
|
297
|
+
AgentLoop
|
|
298
|
+
↙ ↓ ↘
|
|
299
|
+
Context Model Tools
|
|
300
|
+
↓
|
|
301
|
+
Compaction
|
|
302
|
+
```
|
|
303
|
+
|
|
304
|
+
The Loop owns orchestration and state transitions, not component algorithms. Session and Context integration are bridged through top-level adapters, preserving one-way core dependencies.
|
|
305
|
+
|
|
306
|
+
## Design documents
|
|
307
|
+
|
|
308
|
+
- `ARCHITECTURE.md`
|
|
309
|
+
- `INTERFACE_DESIGN.md`
|
|
310
|
+
- `IMPLEMENTATION_PLAN.md`
|
|
311
|
+
- `REFACTOR_PLAN.md`
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { AgentMessage, AgentRunState, RunId } from "../types/index.js";
|
|
2
|
+
import type { RunManager } from "./run-manager.js";
|
|
3
|
+
import type { Agent, AgentRunOptions } from "./types.js";
|
|
4
|
+
export interface DefaultAgentDependencies {
|
|
5
|
+
readonly runManager: RunManager;
|
|
6
|
+
}
|
|
7
|
+
export declare class DefaultAgent implements Agent {
|
|
8
|
+
private readonly dependencies;
|
|
9
|
+
constructor(dependencies: DefaultAgentDependencies);
|
|
10
|
+
run(input: string | AgentMessage, options?: AgentRunOptions): AsyncGenerator<import("../index.js").AgentEvent, void, any>;
|
|
11
|
+
resume(sessionId: Parameters<Agent["resume"]>[0], options?: Parameters<Agent["resume"]>[1]): Promise<void>;
|
|
12
|
+
abort(runId: RunId): void;
|
|
13
|
+
getState(runId: RunId): Readonly<AgentRunState> | undefined;
|
|
14
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { createUserMessage } from "../utils/message.js";
|
|
2
|
+
export class DefaultAgent {
|
|
3
|
+
dependencies;
|
|
4
|
+
constructor(dependencies) {
|
|
5
|
+
this.dependencies = dependencies;
|
|
6
|
+
}
|
|
7
|
+
async *run(input, options = {}) {
|
|
8
|
+
const message = typeof input === "string"
|
|
9
|
+
? createUserMessage(input, options.metadata === undefined
|
|
10
|
+
? undefined
|
|
11
|
+
: structuredClone(options.metadata))
|
|
12
|
+
: structuredClone(input);
|
|
13
|
+
yield* this.dependencies.runManager.run(message, options);
|
|
14
|
+
}
|
|
15
|
+
resume(sessionId, options = {}) {
|
|
16
|
+
return this.dependencies.runManager.resume(sessionId, options);
|
|
17
|
+
}
|
|
18
|
+
abort(runId) {
|
|
19
|
+
this.dependencies.runManager.abort(runId);
|
|
20
|
+
}
|
|
21
|
+
getState(runId) {
|
|
22
|
+
return this.dependencies.runManager.getState(runId);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=agent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/agent/agent.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAWxD,MAAM,OAAO,YAAY;IACM;IAA7B,YAA6B,YAAsC;QAAtC,iBAAY,GAAZ,YAAY,CAA0B;IAAG,CAAC;IAEvE,KAAK,CAAC,CAAC,GAAG,CACR,KAA4B,EAC5B,UAA2B,EAAE;QAE7B,MAAM,OAAO,GACX,OAAO,KAAK,KAAK,QAAQ;YACvB,CAAC,CAAC,iBAAiB,CACf,KAAK,EACL,OAAO,CAAC,QAAQ,KAAK,SAAS;gBAC5B,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC,CACtC;YACH,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAE7B,KAAK,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC5D,CAAC;IAED,MAAM,CACJ,SAAyC,EACzC,UAA0C,EAAE;QAE5C,OAAO,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACjE,CAAC;IAED,KAAK,CAAC,KAAY;QAChB,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC5C,CAAC;IAED,QAAQ,CAAC,KAAY;QACnB,OAAO,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACtD,CAAC;CACF"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { type CompactionStrategy } from "../compaction/index.js";
|
|
2
|
+
import { type ContextSource } from "../context/index.js";
|
|
3
|
+
import { type EventSink } from "../events/index.js";
|
|
4
|
+
import { type Hook } from "../hooks/index.js";
|
|
5
|
+
import { type ModelProvider } from "../model/index.js";
|
|
6
|
+
import { type SessionStore } from "../session/index.js";
|
|
7
|
+
import { type RuntimeConfig } from "../settings/index.js";
|
|
8
|
+
import { type Tool } from "../tools/index.js";
|
|
9
|
+
import type { Agent, AgentBuilder } from "./types.js";
|
|
10
|
+
export declare class DefaultAgentBuilder implements AgentBuilder {
|
|
11
|
+
private config;
|
|
12
|
+
private modelProvider?;
|
|
13
|
+
private sessionStore?;
|
|
14
|
+
private readonly contextSources;
|
|
15
|
+
private readonly tools;
|
|
16
|
+
private readonly hooks;
|
|
17
|
+
private readonly eventSinks;
|
|
18
|
+
private readonly compactionStrategies;
|
|
19
|
+
withConfig(config: RuntimeConfig): AgentBuilder;
|
|
20
|
+
withModelProvider(provider: ModelProvider): AgentBuilder;
|
|
21
|
+
withSessionStore(store: SessionStore): AgentBuilder;
|
|
22
|
+
withContextSource(source: ContextSource): AgentBuilder;
|
|
23
|
+
withTool(tool: Tool): AgentBuilder;
|
|
24
|
+
withHook(hook: Hook): AgentBuilder;
|
|
25
|
+
withEventSink(sink: EventSink): AgentBuilder;
|
|
26
|
+
withCompactionStrategy(strategy: CompactionStrategy): AgentBuilder;
|
|
27
|
+
build(): Agent;
|
|
28
|
+
}
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
import { DefaultCompactionManager, DeterministicCompactionStrategy, SemanticCompactionStrategy, } from "../compaction/index.js";
|
|
2
|
+
import { DefaultContextManager, DefaultProjectionBudgetPolicy, DefaultProjectionPipeline, } from "../context/index.js";
|
|
3
|
+
import { DefaultEventBus, DefaultEventPublisher, } from "../events/index.js";
|
|
4
|
+
import { DefaultHookBus, DefaultHookRegistry, } from "../hooks/index.js";
|
|
5
|
+
import { createDefaultLoopPolicy } from "../loop/index.js";
|
|
6
|
+
import { OpenAICompatibleProvider, } from "../model/index.js";
|
|
7
|
+
import { DefaultSessionFactory, DefaultSessionProjector, JsonlSessionStore, SESSION_SCHEMA_VERSION, } from "../session/index.js";
|
|
8
|
+
import { DEFAULT_RUNTIME_CONFIG, } from "../settings/index.js";
|
|
9
|
+
import { DefaultToolExecutor, DefaultToolRegistry, DefaultToolResultProcessor, JsonSchemaToolInputValidator, ListDirectoryTool, ReadFileTool, RunCommandTool, WriteFileTool, } from "../tools/index.js";
|
|
10
|
+
import { RuntimeError } from "../errors/runtime-error.js";
|
|
11
|
+
import { DefaultAgent } from "./agent.js";
|
|
12
|
+
import { DefaultAgentLoopFactory } from "./loop-factory.js";
|
|
13
|
+
import { DefaultRunManager } from "./run-manager.js";
|
|
14
|
+
import { SessionContextSource } from "./integrations/session-context-source.js";
|
|
15
|
+
import { SessionRunRecorderFactory } from "./integrations/session-run-recorder.js";
|
|
16
|
+
function createDefaultProvider(config) {
|
|
17
|
+
if (config.model.provider !== "openai-compatible") {
|
|
18
|
+
throw new RuntimeError({
|
|
19
|
+
code: "CONFIG_INVALID",
|
|
20
|
+
category: "config",
|
|
21
|
+
message: `No default provider implementation for: ${config.model.provider}`,
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
return new OpenAICompatibleProvider({
|
|
25
|
+
baseUrl: config.model.baseUrl ?? "https://api.openai.com/v1",
|
|
26
|
+
...(config.model.apiKey === undefined
|
|
27
|
+
? {}
|
|
28
|
+
: { apiKey: config.model.apiKey }),
|
|
29
|
+
defaultCapabilities: {
|
|
30
|
+
...(config.model.maxOutputTokens === undefined
|
|
31
|
+
? {}
|
|
32
|
+
: { maxOutputTokens: config.model.maxOutputTokens }),
|
|
33
|
+
},
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
function coreTools() {
|
|
37
|
+
return [
|
|
38
|
+
new ReadFileTool(),
|
|
39
|
+
new WriteFileTool(),
|
|
40
|
+
new ListDirectoryTool(),
|
|
41
|
+
new RunCommandTool(),
|
|
42
|
+
];
|
|
43
|
+
}
|
|
44
|
+
function withDefaultCompactionStrategies(custom, provider) {
|
|
45
|
+
const strategies = [...custom];
|
|
46
|
+
if (!strategies.some((strategy) => strategy.supports("soft_limit"))) {
|
|
47
|
+
strategies.push(new DeterministicCompactionStrategy());
|
|
48
|
+
}
|
|
49
|
+
const semanticReasons = [
|
|
50
|
+
"hard_limit",
|
|
51
|
+
"provider_context_error",
|
|
52
|
+
"manual",
|
|
53
|
+
];
|
|
54
|
+
if (semanticReasons.some((reason) => !strategies.some((strategy) => strategy.supports(reason)))) {
|
|
55
|
+
strategies.push(new SemanticCompactionStrategy(provider));
|
|
56
|
+
}
|
|
57
|
+
return strategies;
|
|
58
|
+
}
|
|
59
|
+
export class DefaultAgentBuilder {
|
|
60
|
+
config = structuredClone(DEFAULT_RUNTIME_CONFIG);
|
|
61
|
+
modelProvider;
|
|
62
|
+
sessionStore;
|
|
63
|
+
contextSources = [];
|
|
64
|
+
tools = [];
|
|
65
|
+
hooks = [];
|
|
66
|
+
eventSinks = [];
|
|
67
|
+
compactionStrategies = [];
|
|
68
|
+
withConfig(config) {
|
|
69
|
+
this.config = structuredClone(config);
|
|
70
|
+
return this;
|
|
71
|
+
}
|
|
72
|
+
withModelProvider(provider) {
|
|
73
|
+
this.modelProvider = provider;
|
|
74
|
+
return this;
|
|
75
|
+
}
|
|
76
|
+
withSessionStore(store) {
|
|
77
|
+
this.sessionStore = store;
|
|
78
|
+
return this;
|
|
79
|
+
}
|
|
80
|
+
withContextSource(source) {
|
|
81
|
+
this.contextSources.push(source);
|
|
82
|
+
return this;
|
|
83
|
+
}
|
|
84
|
+
withTool(tool) {
|
|
85
|
+
this.tools.push(tool);
|
|
86
|
+
return this;
|
|
87
|
+
}
|
|
88
|
+
withHook(hook) {
|
|
89
|
+
this.hooks.push(hook);
|
|
90
|
+
return this;
|
|
91
|
+
}
|
|
92
|
+
withEventSink(sink) {
|
|
93
|
+
this.eventSinks.push(sink);
|
|
94
|
+
return this;
|
|
95
|
+
}
|
|
96
|
+
withCompactionStrategy(strategy) {
|
|
97
|
+
this.compactionStrategies.push(strategy);
|
|
98
|
+
return this;
|
|
99
|
+
}
|
|
100
|
+
build() {
|
|
101
|
+
const config = structuredClone(this.config);
|
|
102
|
+
if (config.session.schemaVersion !== SESSION_SCHEMA_VERSION) {
|
|
103
|
+
throw new RuntimeError({
|
|
104
|
+
code: "CONFIG_INVALID",
|
|
105
|
+
category: "config",
|
|
106
|
+
message: `Unsupported session schema version: ${config.session.schemaVersion}; supported version: ${SESSION_SCHEMA_VERSION}`,
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
const provider = this.modelProvider ?? createDefaultProvider(config);
|
|
110
|
+
const store = this.sessionStore ?? new JsonlSessionStore(config.session.directory);
|
|
111
|
+
const hookRegistry = new DefaultHookRegistry();
|
|
112
|
+
for (const hook of this.hooks) {
|
|
113
|
+
hookRegistry.register(hook);
|
|
114
|
+
}
|
|
115
|
+
const hookBus = new DefaultHookBus(hookRegistry, {
|
|
116
|
+
defaultTimeoutMs: config.hooks.defaultTimeoutMs,
|
|
117
|
+
});
|
|
118
|
+
const toolRegistry = new DefaultToolRegistry();
|
|
119
|
+
for (const tool of this.tools) {
|
|
120
|
+
toolRegistry.register(tool);
|
|
121
|
+
}
|
|
122
|
+
for (const tool of coreTools()) {
|
|
123
|
+
if (toolRegistry.get(tool.name) === undefined) {
|
|
124
|
+
toolRegistry.register(tool);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
const toolExecutor = new DefaultToolExecutor(toolRegistry, new JsonSchemaToolInputValidator(), new DefaultToolResultProcessor(), hookBus, {
|
|
128
|
+
timeoutMs: config.tools.timeoutMs,
|
|
129
|
+
maxParallel: config.tools.parallelism,
|
|
130
|
+
maxResultChars: config.tools.maxOutputChars,
|
|
131
|
+
maxResultLines: config.tools.maxOutputLines,
|
|
132
|
+
});
|
|
133
|
+
const projector = new DefaultSessionProjector();
|
|
134
|
+
const sources = [...this.contextSources];
|
|
135
|
+
if (!sources.some((source) => source.scope === "session")) {
|
|
136
|
+
sources.push(new SessionContextSource(store, projector));
|
|
137
|
+
}
|
|
138
|
+
const contextManager = new DefaultContextManager(sources, new DefaultProjectionPipeline());
|
|
139
|
+
const eventBus = new DefaultEventBus();
|
|
140
|
+
for (const sink of this.eventSinks) {
|
|
141
|
+
eventBus.subscribe(sink);
|
|
142
|
+
}
|
|
143
|
+
const eventPublisher = new DefaultEventPublisher(eventBus);
|
|
144
|
+
const compactionManager = new DefaultCompactionManager(withDefaultCompactionStrategies(this.compactionStrategies, provider), undefined, {
|
|
145
|
+
enabled: config.compaction.enabled,
|
|
146
|
+
softLimitRatio: config.compaction.softLimitRatio,
|
|
147
|
+
hardLimitRatio: config.compaction.hardLimitRatio,
|
|
148
|
+
retainRecentTokens: config.compaction.retainRecentTokens,
|
|
149
|
+
});
|
|
150
|
+
const loopFactory = new DefaultAgentLoopFactory({
|
|
151
|
+
modelProvider: provider,
|
|
152
|
+
contextManager,
|
|
153
|
+
compactionManager,
|
|
154
|
+
projectionBudgetPolicy: new DefaultProjectionBudgetPolicy(),
|
|
155
|
+
toolExecutor,
|
|
156
|
+
toolRegistry,
|
|
157
|
+
hookBus,
|
|
158
|
+
eventPublisher,
|
|
159
|
+
policy: createDefaultLoopPolicy({
|
|
160
|
+
maxTurns: config.loop.maxTurns,
|
|
161
|
+
maxToolRounds: config.loop.maxToolRounds,
|
|
162
|
+
}),
|
|
163
|
+
}, {
|
|
164
|
+
maxReactiveCompactions: config.compaction.maxReactiveCompactions,
|
|
165
|
+
maxCompactionReprojects: config.compaction.maxCompactionReprojects,
|
|
166
|
+
});
|
|
167
|
+
const runManager = new DefaultRunManager({
|
|
168
|
+
config,
|
|
169
|
+
modelProvider: provider,
|
|
170
|
+
sessionFactory: new DefaultSessionFactory(store),
|
|
171
|
+
sessionProjector: projector,
|
|
172
|
+
recorderFactory: new SessionRunRecorderFactory(),
|
|
173
|
+
loopFactory,
|
|
174
|
+
});
|
|
175
|
+
return new DefaultAgent({ runManager });
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
//# sourceMappingURL=builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"builder.js","sourceRoot":"","sources":["../../src/agent/builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { DefaultConfigResolver, DefaultConfigSource, EnvironmentConfigSource, FileConfigSource, RuntimeOverrideSource, } from "../settings/index.js";
|
|
2
|
+
import { DefaultAgentBuilder } from "./builder.js";
|
|
3
|
+
function runtimeOverrides(options) {
|
|
4
|
+
const overrides = options?.config === undefined
|
|
5
|
+
? {}
|
|
6
|
+
: structuredClone(options.config);
|
|
7
|
+
const model = {
|
|
8
|
+
...(overrides.model ?? {}),
|
|
9
|
+
...(options?.model === undefined ? {} : { model: options.model }),
|
|
10
|
+
...(options?.apiKey === undefined ? {} : { apiKey: options.apiKey }),
|
|
11
|
+
...(options?.baseUrl === undefined ? {} : { baseUrl: options.baseUrl }),
|
|
12
|
+
};
|
|
13
|
+
if (Object.keys(model).length > 0) {
|
|
14
|
+
overrides.model = model;
|
|
15
|
+
}
|
|
16
|
+
return overrides;
|
|
17
|
+
}
|
|
18
|
+
export async function createAgent(options) {
|
|
19
|
+
const config = await new DefaultConfigResolver().resolve([
|
|
20
|
+
new DefaultConfigSource(),
|
|
21
|
+
new FileConfigSource(),
|
|
22
|
+
new EnvironmentConfigSource(),
|
|
23
|
+
new RuntimeOverrideSource(runtimeOverrides(options)),
|
|
24
|
+
]);
|
|
25
|
+
return new DefaultAgentBuilder()
|
|
26
|
+
.withConfig(config)
|
|
27
|
+
.build();
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=create-agent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-agent.js","sourceRoot":"","sources":["../../src/agent/create-agent.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,uBAAuB,EACvB,gBAAgB,EAChB,qBAAqB,GAGtB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAMnD,SAAS,gBAAgB,CACvB,OAAuC;IAEvC,MAAM,SAAS,GACb,OAAO,EAAE,MAAM,KAAK,SAAS;QAC3B,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAEtC,MAAM,KAAK,GAAG;QACZ,GAAG,CAAC,SAAS,CAAC,KAAK,IAAI,EAAE,CAAC;QAC1B,GAAG,CAAC,OAAO,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC;QACjE,GAAG,CAAC,OAAO,EAAE,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;QACpE,GAAG,CAAC,OAAO,EAAE,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC;KACxE,CAAC;IAEF,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClC,SAAS,CAAC,KAAK,GAAG,KAAK,CAAC;IAC1B,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,OAA4B;IAE5B,MAAM,MAAM,GAAG,MAAM,IAAI,qBAAqB,EAAE,CAAC,OAAO,CAAC;QACvD,IAAI,mBAAmB,EAAE;QACzB,IAAI,gBAAgB,EAAE;QACtB,IAAI,uBAAuB,EAAE;QAC7B,IAAI,qBAAqB,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;KACrD,CAAC,CAAC;IAEH,OAAO,IAAI,mBAAmB,EAAE;SAC7B,UAAU,CAAC,MAAM,CAAC;SAClB,KAAK,EAAE,CAAC;AACb,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export type * from "./types.js";
|
|
2
|
+
export { DefaultAgent, type DefaultAgentDependencies, } from "./agent.js";
|
|
3
|
+
export { DefaultAgentBuilder } from "./builder.js";
|
|
4
|
+
export { createAgent } from "./create-agent.js";
|
|
5
|
+
export { DefaultAgentLoopFactory, type AgentLoopFactory, type DefaultAgentLoopFactoryDependencies, } from "./loop-factory.js";
|
|
6
|
+
export { DefaultRunManager, type RunManager, type RunRecorderFactory, type DefaultRunManagerDependencies, } from "./run-manager.js";
|
|
7
|
+
export { SessionRunRecorder, SessionRunRecorderFactory, } from "./integrations/session-run-recorder.js";
|
|
8
|
+
export { SessionContextSource } from "./integrations/session-context-source.js";
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { DefaultAgent, } from "./agent.js";
|
|
2
|
+
export { DefaultAgentBuilder } from "./builder.js";
|
|
3
|
+
export { createAgent } from "./create-agent.js";
|
|
4
|
+
export { DefaultAgentLoopFactory, } from "./loop-factory.js";
|
|
5
|
+
export { DefaultRunManager, } from "./run-manager.js";
|
|
6
|
+
export { SessionRunRecorder, SessionRunRecorderFactory, } from "./integrations/session-run-recorder.js";
|
|
7
|
+
export { SessionContextSource } from "./integrations/session-context-source.js";
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/agent/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,YAAY,GAEb,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EACL,uBAAuB,GAGxB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,iBAAiB,GAIlB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,kBAAkB,EAClB,yBAAyB,GAC1B,MAAM,wCAAwC,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,0CAA0C,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { ContextSource } from "../../context/source.js";
|
|
2
|
+
import type { ContextItem, ContextLoadRequest } from "../../context/types.js";
|
|
3
|
+
import type { SessionStore } from "../../session/store.js";
|
|
4
|
+
import type { SessionProjector } from "../../session/types.js";
|
|
5
|
+
export declare class SessionContextSource implements ContextSource {
|
|
6
|
+
private readonly store;
|
|
7
|
+
private readonly projector;
|
|
8
|
+
readonly id = "session";
|
|
9
|
+
readonly scope: "session";
|
|
10
|
+
constructor(store: SessionStore, projector: SessionProjector);
|
|
11
|
+
load(request: ContextLoadRequest, signal?: AbortSignal): Promise<readonly ContextItem[]>;
|
|
12
|
+
}
|