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.
Files changed (332) hide show
  1. package/README.md +311 -0
  2. package/dist/agent/agent.d.ts +14 -0
  3. package/dist/agent/agent.js +25 -0
  4. package/dist/agent/agent.js.map +1 -0
  5. package/dist/agent/builder.d.ts +28 -0
  6. package/dist/agent/builder.js +178 -0
  7. package/dist/agent/builder.js.map +1 -0
  8. package/dist/agent/create-agent.d.ts +2 -0
  9. package/dist/agent/create-agent.js +29 -0
  10. package/dist/agent/create-agent.js.map +1 -0
  11. package/dist/agent/index.d.ts +8 -0
  12. package/dist/agent/index.js +8 -0
  13. package/dist/agent/index.js.map +1 -0
  14. package/dist/agent/integrations/session-context-source.d.ts +12 -0
  15. package/dist/agent/integrations/session-context-source.js +84 -0
  16. package/dist/agent/integrations/session-context-source.js.map +1 -0
  17. package/dist/agent/integrations/session-run-recorder.d.ts +17 -0
  18. package/dist/agent/integrations/session-run-recorder.js +60 -0
  19. package/dist/agent/integrations/session-run-recorder.js.map +1 -0
  20. package/dist/agent/loop-factory.d.ts +11 -0
  21. package/dist/agent/loop-factory.js +16 -0
  22. package/dist/agent/loop-factory.js.map +1 -0
  23. package/dist/agent/run-manager.d.ts +38 -0
  24. package/dist/agent/run-manager.js +96 -0
  25. package/dist/agent/run-manager.js.map +1 -0
  26. package/dist/agent/types.d.ts +38 -0
  27. package/dist/agent/types.js +2 -0
  28. package/dist/agent/types.js.map +1 -0
  29. package/dist/cli/main.d.ts +2 -0
  30. package/dist/cli/main.js +88 -0
  31. package/dist/cli/main.js.map +1 -0
  32. package/dist/cli/renderer.d.ts +2 -0
  33. package/dist/cli/renderer.js +36 -0
  34. package/dist/cli/renderer.js.map +1 -0
  35. package/dist/compaction/budget.d.ts +14 -0
  36. package/dist/compaction/budget.js +28 -0
  37. package/dist/compaction/budget.js.map +1 -0
  38. package/dist/compaction/deterministic.d.ts +9 -0
  39. package/dist/compaction/deterministic.js +106 -0
  40. package/dist/compaction/deterministic.js.map +1 -0
  41. package/dist/compaction/index.d.ts +5 -0
  42. package/dist/compaction/index.js +5 -0
  43. package/dist/compaction/index.js.map +1 -0
  44. package/dist/compaction/manager.d.ts +22 -0
  45. package/dist/compaction/manager.js +111 -0
  46. package/dist/compaction/manager.js.map +1 -0
  47. package/dist/compaction/semantic.d.ts +13 -0
  48. package/dist/compaction/semantic.js +234 -0
  49. package/dist/compaction/semantic.js.map +1 -0
  50. package/dist/compaction/strategy.d.ts +1 -0
  51. package/dist/compaction/strategy.js +2 -0
  52. package/dist/compaction/strategy.js.map +1 -0
  53. package/dist/compaction/types.d.ts +40 -0
  54. package/dist/compaction/types.js +2 -0
  55. package/dist/compaction/types.js.map +1 -0
  56. package/dist/context/budget.d.ts +12 -0
  57. package/dist/context/budget.js +13 -0
  58. package/dist/context/budget.js.map +1 -0
  59. package/dist/context/controller.d.ts +17 -0
  60. package/dist/context/controller.js +78 -0
  61. package/dist/context/controller.js.map +1 -0
  62. package/dist/context/index.d.ts +14 -0
  63. package/dist/context/index.js +13 -0
  64. package/dist/context/index.js.map +1 -0
  65. package/dist/context/manager.d.ts +10 -0
  66. package/dist/context/manager.js +65 -0
  67. package/dist/context/manager.js.map +1 -0
  68. package/dist/context/pipeline.d.ts +16 -0
  69. package/dist/context/pipeline.js +45 -0
  70. package/dist/context/pipeline.js.map +1 -0
  71. package/dist/context/projection.d.ts +8 -0
  72. package/dist/context/projection.js +10 -0
  73. package/dist/context/projection.js.map +1 -0
  74. package/dist/context/source.d.ts +6 -0
  75. package/dist/context/source.js +2 -0
  76. package/dist/context/source.js.map +1 -0
  77. package/dist/context/sources/dynamic.d.ts +10 -0
  78. package/dist/context/sources/dynamic.js +13 -0
  79. package/dist/context/sources/dynamic.js.map +1 -0
  80. package/dist/context/sources/project.d.ts +19 -0
  81. package/dist/context/sources/project.js +75 -0
  82. package/dist/context/sources/project.js.map +1 -0
  83. package/dist/context/sources/system.d.ts +14 -0
  84. package/dist/context/sources/system.js +23 -0
  85. package/dist/context/sources/system.js.map +1 -0
  86. package/dist/context/sources/user.d.ts +14 -0
  87. package/dist/context/sources/user.js +23 -0
  88. package/dist/context/sources/user.js.map +1 -0
  89. package/dist/context/stages/deduplicate.d.ts +7 -0
  90. package/dist/context/stages/deduplicate.js +19 -0
  91. package/dist/context/stages/deduplicate.js.map +1 -0
  92. package/dist/context/stages/expiration.d.ts +5 -0
  93. package/dist/context/stages/expiration.js +14 -0
  94. package/dist/context/stages/expiration.js.map +1 -0
  95. package/dist/context/stages/visibility.d.ts +5 -0
  96. package/dist/context/stages/visibility.js +7 -0
  97. package/dist/context/stages/visibility.js.map +1 -0
  98. package/dist/context/types.d.ts +72 -0
  99. package/dist/context/types.js +2 -0
  100. package/dist/context/types.js.map +1 -0
  101. package/dist/errors/codes.d.ts +1 -0
  102. package/dist/errors/codes.js +2 -0
  103. package/dist/errors/codes.js.map +1 -0
  104. package/dist/errors/index.d.ts +4 -0
  105. package/dist/errors/index.js +4 -0
  106. package/dist/errors/index.js.map +1 -0
  107. package/dist/errors/normalize.d.ts +2 -0
  108. package/dist/errors/normalize.js +32 -0
  109. package/dist/errors/normalize.js.map +1 -0
  110. package/dist/errors/runtime-error.d.ts +18 -0
  111. package/dist/errors/runtime-error.js +21 -0
  112. package/dist/errors/runtime-error.js.map +1 -0
  113. package/dist/errors/serialize.d.ts +2 -0
  114. package/dist/errors/serialize.js +12 -0
  115. package/dist/errors/serialize.js.map +1 -0
  116. package/dist/events/bus.d.ts +17 -0
  117. package/dist/events/bus.js +52 -0
  118. package/dist/events/bus.js.map +1 -0
  119. package/dist/events/index.d.ts +6 -0
  120. package/dist/events/index.js +5 -0
  121. package/dist/events/index.js.map +1 -0
  122. package/dist/events/publisher.d.ts +12 -0
  123. package/dist/events/publisher.js +22 -0
  124. package/dist/events/publisher.js.map +1 -0
  125. package/dist/events/sequence.d.ts +6 -0
  126. package/dist/events/sequence.js +14 -0
  127. package/dist/events/sequence.js.map +1 -0
  128. package/dist/events/sink.d.ts +5 -0
  129. package/dist/events/sink.js +2 -0
  130. package/dist/events/sink.js.map +1 -0
  131. package/dist/events/stream.d.ts +12 -0
  132. package/dist/events/stream.js +46 -0
  133. package/dist/events/stream.js.map +1 -0
  134. package/dist/events/types.d.ts +42 -0
  135. package/dist/events/types.js +2 -0
  136. package/dist/events/types.js.map +1 -0
  137. package/dist/hooks/bus.d.ts +14 -0
  138. package/dist/hooks/bus.js +104 -0
  139. package/dist/hooks/bus.js.map +1 -0
  140. package/dist/hooks/index.d.ts +5 -0
  141. package/dist/hooks/index.js +5 -0
  142. package/dist/hooks/index.js.map +1 -0
  143. package/dist/hooks/policy.d.ts +3 -0
  144. package/dist/hooks/policy.js +33 -0
  145. package/dist/hooks/policy.js.map +1 -0
  146. package/dist/hooks/registry.d.ts +13 -0
  147. package/dist/hooks/registry.js +31 -0
  148. package/dist/hooks/registry.js.map +1 -0
  149. package/dist/hooks/timeout.d.ts +2 -0
  150. package/dist/hooks/timeout.js +63 -0
  151. package/dist/hooks/timeout.js.map +1 -0
  152. package/dist/hooks/types.d.ts +40 -0
  153. package/dist/hooks/types.js +2 -0
  154. package/dist/hooks/types.js.map +1 -0
  155. package/dist/index.d.ts +13 -0
  156. package/dist/index.js +14 -0
  157. package/dist/index.js.map +1 -0
  158. package/dist/loop/index.d.ts +7 -0
  159. package/dist/loop/index.js +6 -0
  160. package/dist/loop/index.js.map +1 -0
  161. package/dist/loop/loop.d.ts +22 -0
  162. package/dist/loop/loop.js +623 -0
  163. package/dist/loop/loop.js.map +1 -0
  164. package/dist/loop/policy.d.ts +21 -0
  165. package/dist/loop/policy.js +54 -0
  166. package/dist/loop/policy.js.map +1 -0
  167. package/dist/loop/recorder.d.ts +9 -0
  168. package/dist/loop/recorder.js +2 -0
  169. package/dist/loop/recorder.js.map +1 -0
  170. package/dist/loop/state.d.ts +18 -0
  171. package/dist/loop/state.js +81 -0
  172. package/dist/loop/state.js.map +1 -0
  173. package/dist/loop/stream-assembler.d.ts +12 -0
  174. package/dist/loop/stream-assembler.js +76 -0
  175. package/dist/loop/stream-assembler.js.map +1 -0
  176. package/dist/loop/transition.d.ts +2 -0
  177. package/dist/loop/transition.js +27 -0
  178. package/dist/loop/transition.js.map +1 -0
  179. package/dist/loop/types.d.ts +53 -0
  180. package/dist/loop/types.js +2 -0
  181. package/dist/loop/types.js.map +1 -0
  182. package/dist/model/index.d.ts +6 -0
  183. package/dist/model/index.js +5 -0
  184. package/dist/model/index.js.map +1 -0
  185. package/dist/model/provider.d.ts +6 -0
  186. package/dist/model/provider.js +2 -0
  187. package/dist/model/provider.js.map +1 -0
  188. package/dist/model/providers/openai-compatible/adapter.d.ts +3 -0
  189. package/dist/model/providers/openai-compatible/adapter.js +92 -0
  190. package/dist/model/providers/openai-compatible/adapter.js.map +1 -0
  191. package/dist/model/providers/openai-compatible/errors.d.ts +3 -0
  192. package/dist/model/providers/openai-compatible/errors.js +68 -0
  193. package/dist/model/providers/openai-compatible/errors.js.map +1 -0
  194. package/dist/model/providers/openai-compatible/provider.d.ts +18 -0
  195. package/dist/model/providers/openai-compatible/provider.js +182 -0
  196. package/dist/model/providers/openai-compatible/provider.js.map +1 -0
  197. package/dist/model/providers/openai-compatible/stream-parser.d.ts +1 -0
  198. package/dist/model/providers/openai-compatible/stream-parser.js +45 -0
  199. package/dist/model/providers/openai-compatible/stream-parser.js.map +1 -0
  200. package/dist/model/registry.d.ts +9 -0
  201. package/dist/model/registry.js +35 -0
  202. package/dist/model/registry.js.map +1 -0
  203. package/dist/model/types.d.ts +49 -0
  204. package/dist/model/types.js +2 -0
  205. package/dist/model/types.js.map +1 -0
  206. package/dist/session/factory.d.ts +13 -0
  207. package/dist/session/factory.js +14 -0
  208. package/dist/session/factory.js.map +1 -0
  209. package/dist/session/index.d.ts +8 -0
  210. package/dist/session/index.js +7 -0
  211. package/dist/session/index.js.map +1 -0
  212. package/dist/session/jsonl-store.d.ts +20 -0
  213. package/dist/session/jsonl-store.js +264 -0
  214. package/dist/session/jsonl-store.js.map +1 -0
  215. package/dist/session/projector.d.ts +4 -0
  216. package/dist/session/projector.js +104 -0
  217. package/dist/session/projector.js.map +1 -0
  218. package/dist/session/serializer.d.ts +5 -0
  219. package/dist/session/serializer.js +126 -0
  220. package/dist/session/serializer.js.map +1 -0
  221. package/dist/session/session.d.ts +32 -0
  222. package/dist/session/session.js +129 -0
  223. package/dist/session/session.js.map +1 -0
  224. package/dist/session/store.d.ts +9 -0
  225. package/dist/session/store.js +2 -0
  226. package/dist/session/store.js.map +1 -0
  227. package/dist/session/types.d.ts +29 -0
  228. package/dist/session/types.js +2 -0
  229. package/dist/session/types.js.map +1 -0
  230. package/dist/settings/defaults.d.ts +7 -0
  231. package/dist/settings/defaults.js +40 -0
  232. package/dist/settings/defaults.js.map +1 -0
  233. package/dist/settings/env-source.d.ts +8 -0
  234. package/dist/settings/env-source.js +26 -0
  235. package/dist/settings/env-source.js.map +1 -0
  236. package/dist/settings/file-source.d.ts +9 -0
  237. package/dist/settings/file-source.js +32 -0
  238. package/dist/settings/file-source.js.map +1 -0
  239. package/dist/settings/index.d.ts +8 -0
  240. package/dist/settings/index.js +7 -0
  241. package/dist/settings/index.js.map +1 -0
  242. package/dist/settings/resolver.d.ts +5 -0
  243. package/dist/settings/resolver.js +29 -0
  244. package/dist/settings/resolver.js.map +1 -0
  245. package/dist/settings/runtime-source.d.ts +8 -0
  246. package/dist/settings/runtime-source.js +11 -0
  247. package/dist/settings/runtime-source.js.map +1 -0
  248. package/dist/settings/schema.d.ts +37 -0
  249. package/dist/settings/schema.js +47 -0
  250. package/dist/settings/schema.js.map +1 -0
  251. package/dist/settings/source.d.ts +5 -0
  252. package/dist/settings/source.js +2 -0
  253. package/dist/settings/source.js.map +1 -0
  254. package/dist/settings/types.d.ts +46 -0
  255. package/dist/settings/types.js +2 -0
  256. package/dist/settings/types.js.map +1 -0
  257. package/dist/tools/builtin/list-directory.d.ts +17 -0
  258. package/dist/tools/builtin/list-directory.js +31 -0
  259. package/dist/tools/builtin/list-directory.js.map +1 -0
  260. package/dist/tools/builtin/read-file.d.ts +14 -0
  261. package/dist/tools/builtin/read-file.js +23 -0
  262. package/dist/tools/builtin/read-file.js.map +1 -0
  263. package/dist/tools/builtin/run-command.d.ts +19 -0
  264. package/dist/tools/builtin/run-command.js +46 -0
  265. package/dist/tools/builtin/run-command.js.map +1 -0
  266. package/dist/tools/builtin/write-file.d.ts +20 -0
  267. package/dist/tools/builtin/write-file.js +29 -0
  268. package/dist/tools/builtin/write-file.js.map +1 -0
  269. package/dist/tools/executor.d.ts +29 -0
  270. package/dist/tools/executor.js +212 -0
  271. package/dist/tools/executor.js.map +1 -0
  272. package/dist/tools/index.d.ts +10 -0
  273. package/dist/tools/index.js +9 -0
  274. package/dist/tools/index.js.map +1 -0
  275. package/dist/tools/registry.d.ts +19 -0
  276. package/dist/tools/registry.js +42 -0
  277. package/dist/tools/registry.js.map +1 -0
  278. package/dist/tools/result-processor.d.ts +4 -0
  279. package/dist/tools/result-processor.js +122 -0
  280. package/dist/tools/result-processor.js.map +1 -0
  281. package/dist/tools/tool.d.ts +8 -0
  282. package/dist/tools/tool.js +2 -0
  283. package/dist/tools/tool.js.map +1 -0
  284. package/dist/tools/types.d.ts +44 -0
  285. package/dist/tools/types.js +2 -0
  286. package/dist/tools/types.js.map +1 -0
  287. package/dist/tools/validator.d.ts +5 -0
  288. package/dist/tools/validator.js +112 -0
  289. package/dist/tools/validator.js.map +1 -0
  290. package/dist/types/compaction.d.ts +22 -0
  291. package/dist/types/compaction.js +2 -0
  292. package/dist/types/compaction.js.map +1 -0
  293. package/dist/types/error.d.ts +10 -0
  294. package/dist/types/error.js +2 -0
  295. package/dist/types/error.js.map +1 -0
  296. package/dist/types/ids.d.ts +12 -0
  297. package/dist/types/ids.js +2 -0
  298. package/dist/types/ids.js.map +1 -0
  299. package/dist/types/index.d.ts +9 -0
  300. package/dist/types/index.js +2 -0
  301. package/dist/types/index.js.map +1 -0
  302. package/dist/types/json.d.ts +7 -0
  303. package/dist/types/json.js +2 -0
  304. package/dist/types/json.js.map +1 -0
  305. package/dist/types/message.d.ts +39 -0
  306. package/dist/types/message.js +2 -0
  307. package/dist/types/message.js.map +1 -0
  308. package/dist/types/metadata.d.ts +2 -0
  309. package/dist/types/metadata.js +2 -0
  310. package/dist/types/metadata.js.map +1 -0
  311. package/dist/types/runtime.d.ts +20 -0
  312. package/dist/types/runtime.js +2 -0
  313. package/dist/types/runtime.js.map +1 -0
  314. package/dist/types/tool.d.ts +12 -0
  315. package/dist/types/tool.js +2 -0
  316. package/dist/types/tool.js.map +1 -0
  317. package/dist/types/usage.d.ts +17 -0
  318. package/dist/types/usage.js +2 -0
  319. package/dist/types/usage.js.map +1 -0
  320. package/dist/utils/deep.d.ts +2 -0
  321. package/dist/utils/deep.js +34 -0
  322. package/dist/utils/deep.js.map +1 -0
  323. package/dist/utils/id.d.ts +10 -0
  324. package/dist/utils/id.js +14 -0
  325. package/dist/utils/id.js.map +1 -0
  326. package/dist/utils/index.d.ts +3 -0
  327. package/dist/utils/index.js +4 -0
  328. package/dist/utils/index.js.map +1 -0
  329. package/dist/utils/message.d.ts +11 -0
  330. package/dist/utils/message.js +31 -0
  331. package/dist/utils/message.js.map +1 -0
  332. 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,2 @@
1
+ import type { Agent, CreateAgentOptions } from "./types.js";
2
+ export declare function createAgent(options?: CreateAgentOptions): Promise<Agent>;
@@ -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
+ }