network-ai 4.15.2 → 5.0.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.
Files changed (204) hide show
  1. package/INTEGRATION_GUIDE.md +11 -4
  2. package/QUICKSTART.md +31 -4
  3. package/README.md +37 -15
  4. package/bin/dashboard.ts +146 -0
  5. package/bin/mcp-server.ts +3 -2
  6. package/dist/adapters/adapter-registry.d.ts +33 -1
  7. package/dist/adapters/adapter-registry.d.ts.map +1 -1
  8. package/dist/adapters/adapter-registry.js +49 -0
  9. package/dist/adapters/adapter-registry.js.map +1 -1
  10. package/dist/adapters/anthropic-computer-use-adapter.d.ts +132 -0
  11. package/dist/adapters/anthropic-computer-use-adapter.d.ts.map +1 -0
  12. package/dist/adapters/anthropic-computer-use-adapter.js +180 -0
  13. package/dist/adapters/anthropic-computer-use-adapter.js.map +1 -0
  14. package/dist/adapters/browser-agent-adapter.d.ts +121 -0
  15. package/dist/adapters/browser-agent-adapter.d.ts.map +1 -0
  16. package/dist/adapters/browser-agent-adapter.js +219 -0
  17. package/dist/adapters/browser-agent-adapter.js.map +1 -0
  18. package/dist/adapters/copilot-adapter.d.ts +59 -0
  19. package/dist/adapters/copilot-adapter.d.ts.map +1 -0
  20. package/dist/adapters/copilot-adapter.js +132 -0
  21. package/dist/adapters/copilot-adapter.js.map +1 -0
  22. package/dist/adapters/index.d.ts +15 -1
  23. package/dist/adapters/index.d.ts.map +1 -1
  24. package/dist/adapters/index.js +22 -1
  25. package/dist/adapters/index.js.map +1 -1
  26. package/dist/adapters/langgraph-adapter.d.ts +70 -0
  27. package/dist/adapters/langgraph-adapter.d.ts.map +1 -0
  28. package/dist/adapters/langgraph-adapter.js +119 -0
  29. package/dist/adapters/langgraph-adapter.js.map +1 -0
  30. package/dist/adapters/openai-agents-adapter.d.ts +100 -0
  31. package/dist/adapters/openai-agents-adapter.d.ts.map +1 -0
  32. package/dist/adapters/openai-agents-adapter.js +118 -0
  33. package/dist/adapters/openai-agents-adapter.js.map +1 -0
  34. package/dist/adapters/pydantic-ai-adapter.d.ts +104 -0
  35. package/dist/adapters/pydantic-ai-adapter.d.ts.map +1 -0
  36. package/dist/adapters/pydantic-ai-adapter.js +163 -0
  37. package/dist/adapters/pydantic-ai-adapter.js.map +1 -0
  38. package/dist/adapters/vertex-ai-adapter.d.ts +122 -0
  39. package/dist/adapters/vertex-ai-adapter.d.ts.map +1 -0
  40. package/dist/adapters/vertex-ai-adapter.js +166 -0
  41. package/dist/adapters/vertex-ai-adapter.js.map +1 -0
  42. package/dist/bin/dashboard.d.ts +11 -0
  43. package/dist/bin/dashboard.d.ts.map +1 -0
  44. package/dist/bin/dashboard.js +135 -0
  45. package/dist/bin/dashboard.js.map +1 -0
  46. package/dist/bin/mcp-server.js +3 -2
  47. package/dist/bin/mcp-server.js.map +1 -1
  48. package/dist/index.d.ts +103 -559
  49. package/dist/index.d.ts.map +1 -1
  50. package/dist/index.js +295 -1074
  51. package/dist/index.js.map +1 -1
  52. package/dist/lib/adapter-test-harness.d.ts +88 -0
  53. package/dist/lib/adapter-test-harness.d.ts.map +1 -0
  54. package/dist/lib/adapter-test-harness.js +118 -0
  55. package/dist/lib/adapter-test-harness.js.map +1 -0
  56. package/dist/lib/agent-conversation.d.ts +115 -0
  57. package/dist/lib/agent-conversation.d.ts.map +1 -0
  58. package/dist/lib/agent-conversation.js +155 -0
  59. package/dist/lib/agent-conversation.js.map +1 -0
  60. package/dist/lib/agent-debate.d.ts +115 -0
  61. package/dist/lib/agent-debate.d.ts.map +1 -0
  62. package/dist/lib/agent-debate.js +146 -0
  63. package/dist/lib/agent-debate.js.map +1 -0
  64. package/dist/lib/agent-memory.d.ts +157 -0
  65. package/dist/lib/agent-memory.d.ts.map +1 -0
  66. package/dist/lib/agent-memory.js +336 -0
  67. package/dist/lib/agent-memory.js.map +1 -0
  68. package/dist/lib/agent-vcr.d.ts +133 -0
  69. package/dist/lib/agent-vcr.d.ts.map +1 -0
  70. package/dist/lib/agent-vcr.js +218 -0
  71. package/dist/lib/agent-vcr.js.map +1 -0
  72. package/dist/lib/anomaly-detector.d.ts +112 -0
  73. package/dist/lib/anomaly-detector.d.ts.map +1 -0
  74. package/dist/lib/anomaly-detector.js +178 -0
  75. package/dist/lib/anomaly-detector.js.map +1 -0
  76. package/dist/lib/approval-inbox.d.ts +147 -0
  77. package/dist/lib/approval-inbox.d.ts.map +1 -0
  78. package/dist/lib/approval-inbox.js +385 -0
  79. package/dist/lib/approval-inbox.js.map +1 -0
  80. package/dist/lib/auth-guardian.d.ts +170 -0
  81. package/dist/lib/auth-guardian.d.ts.map +1 -0
  82. package/dist/lib/auth-guardian.js +604 -0
  83. package/dist/lib/auth-guardian.js.map +1 -0
  84. package/dist/lib/auth-validator.d.ts +70 -0
  85. package/dist/lib/auth-validator.d.ts.map +1 -0
  86. package/dist/lib/auth-validator.js +32 -0
  87. package/dist/lib/auth-validator.js.map +1 -0
  88. package/dist/lib/blackboard-validator.d.ts +56 -0
  89. package/dist/lib/blackboard-validator.d.ts.map +1 -1
  90. package/dist/lib/blackboard-validator.js +181 -4
  91. package/dist/lib/blackboard-validator.js.map +1 -1
  92. package/dist/lib/comparison-runner.d.ts +99 -0
  93. package/dist/lib/comparison-runner.d.ts.map +1 -0
  94. package/dist/lib/comparison-runner.js +138 -0
  95. package/dist/lib/comparison-runner.js.map +1 -0
  96. package/dist/lib/config-watcher.d.ts +109 -0
  97. package/dist/lib/config-watcher.d.ts.map +1 -0
  98. package/dist/lib/config-watcher.js +215 -0
  99. package/dist/lib/config-watcher.js.map +1 -0
  100. package/dist/lib/cost-governor.d.ts +105 -0
  101. package/dist/lib/cost-governor.d.ts.map +1 -0
  102. package/dist/lib/cost-governor.js +128 -0
  103. package/dist/lib/cost-governor.js.map +1 -0
  104. package/dist/lib/cost-heatmap.d.ts +104 -0
  105. package/dist/lib/cost-heatmap.d.ts.map +1 -0
  106. package/dist/lib/cost-heatmap.js +161 -0
  107. package/dist/lib/cost-heatmap.js.map +1 -0
  108. package/dist/lib/coverage-reporter.d.ts +92 -0
  109. package/dist/lib/coverage-reporter.d.ts.map +1 -0
  110. package/dist/lib/coverage-reporter.js +177 -0
  111. package/dist/lib/coverage-reporter.js.map +1 -0
  112. package/dist/lib/dashboard-server.d.ts +71 -0
  113. package/dist/lib/dashboard-server.d.ts.map +1 -0
  114. package/dist/lib/dashboard-server.js +403 -0
  115. package/dist/lib/dashboard-server.js.map +1 -0
  116. package/dist/lib/dry-run.d.ts +73 -0
  117. package/dist/lib/dry-run.d.ts.map +1 -0
  118. package/dist/lib/dry-run.js +130 -0
  119. package/dist/lib/dry-run.js.map +1 -0
  120. package/dist/lib/errors.d.ts +15 -0
  121. package/dist/lib/errors.d.ts.map +1 -1
  122. package/dist/lib/errors.js +38 -0
  123. package/dist/lib/errors.js.map +1 -1
  124. package/dist/lib/event-bus.d.ts +167 -0
  125. package/dist/lib/event-bus.d.ts.map +1 -0
  126. package/dist/lib/event-bus.js +229 -0
  127. package/dist/lib/event-bus.js.map +1 -0
  128. package/dist/lib/explainability.d.ts +85 -0
  129. package/dist/lib/explainability.d.ts.map +1 -0
  130. package/dist/lib/explainability.js +102 -0
  131. package/dist/lib/explainability.js.map +1 -0
  132. package/dist/lib/goal-dsl.d.ts +157 -0
  133. package/dist/lib/goal-dsl.d.ts.map +1 -0
  134. package/dist/lib/goal-dsl.js +392 -0
  135. package/dist/lib/goal-dsl.js.map +1 -0
  136. package/dist/lib/job-queue.d.ts +183 -0
  137. package/dist/lib/job-queue.d.ts.map +1 -0
  138. package/dist/lib/job-queue.js +310 -0
  139. package/dist/lib/job-queue.js.map +1 -0
  140. package/dist/lib/learning-loop.d.ts +113 -0
  141. package/dist/lib/learning-loop.d.ts.map +1 -0
  142. package/dist/lib/learning-loop.js +181 -0
  143. package/dist/lib/learning-loop.js.map +1 -0
  144. package/dist/lib/lifecycle-hooks.d.ts +116 -0
  145. package/dist/lib/lifecycle-hooks.d.ts.map +1 -0
  146. package/dist/lib/lifecycle-hooks.js +148 -0
  147. package/dist/lib/lifecycle-hooks.js.map +1 -0
  148. package/dist/lib/locked-blackboard.d.ts.map +1 -1
  149. package/dist/lib/locked-blackboard.js +9 -5
  150. package/dist/lib/locked-blackboard.js.map +1 -1
  151. package/dist/lib/mcp-tool-consumer.d.ts +153 -0
  152. package/dist/lib/mcp-tool-consumer.d.ts.map +1 -0
  153. package/dist/lib/mcp-tool-consumer.js +320 -0
  154. package/dist/lib/mcp-tool-consumer.js.map +1 -0
  155. package/dist/lib/metrics.d.ts +119 -0
  156. package/dist/lib/metrics.d.ts.map +1 -0
  157. package/dist/lib/metrics.js +284 -0
  158. package/dist/lib/metrics.js.map +1 -0
  159. package/dist/lib/orchestrator-types.d.ts +309 -0
  160. package/dist/lib/orchestrator-types.d.ts.map +1 -0
  161. package/dist/lib/orchestrator-types.js +61 -0
  162. package/dist/lib/orchestrator-types.js.map +1 -0
  163. package/dist/lib/otel-bridge.d.ts +74 -0
  164. package/dist/lib/otel-bridge.d.ts.map +1 -0
  165. package/dist/lib/otel-bridge.js +167 -0
  166. package/dist/lib/otel-bridge.js.map +1 -0
  167. package/dist/lib/playground.d.ts +76 -0
  168. package/dist/lib/playground.d.ts.map +1 -0
  169. package/dist/lib/playground.js +224 -0
  170. package/dist/lib/playground.js.map +1 -0
  171. package/dist/lib/quadtree.d.ts +114 -0
  172. package/dist/lib/quadtree.d.ts.map +1 -0
  173. package/dist/lib/quadtree.js +259 -0
  174. package/dist/lib/quadtree.js.map +1 -0
  175. package/dist/lib/shared-blackboard.d.ts +101 -0
  176. package/dist/lib/shared-blackboard.d.ts.map +1 -0
  177. package/dist/lib/shared-blackboard.js +249 -0
  178. package/dist/lib/shared-blackboard.js.map +1 -0
  179. package/dist/lib/speculative-executor.d.ts +89 -0
  180. package/dist/lib/speculative-executor.d.ts.map +1 -0
  181. package/dist/lib/speculative-executor.js +107 -0
  182. package/dist/lib/speculative-executor.js.map +1 -0
  183. package/dist/lib/swarm-transport.d.ts +150 -0
  184. package/dist/lib/swarm-transport.d.ts.map +1 -0
  185. package/dist/lib/swarm-transport.js +307 -0
  186. package/dist/lib/swarm-transport.js.map +1 -0
  187. package/dist/lib/task-decomposer.d.ts +41 -0
  188. package/dist/lib/task-decomposer.d.ts.map +1 -0
  189. package/dist/lib/task-decomposer.js +272 -0
  190. package/dist/lib/task-decomposer.js.map +1 -0
  191. package/dist/lib/timeline-scrubber.d.ts +84 -0
  192. package/dist/lib/timeline-scrubber.d.ts.map +1 -0
  193. package/dist/lib/timeline-scrubber.js +173 -0
  194. package/dist/lib/timeline-scrubber.js.map +1 -0
  195. package/dist/lib/topology.d.ts +361 -0
  196. package/dist/lib/topology.d.ts.map +1 -0
  197. package/dist/lib/topology.js +591 -0
  198. package/dist/lib/topology.js.map +1 -0
  199. package/dist/security.d.ts +95 -0
  200. package/dist/security.d.ts.map +1 -1
  201. package/dist/security.js +267 -5
  202. package/dist/security.js.map +1 -1
  203. package/package.json +7 -5
  204. package/types/agent-adapter.d.ts +5 -0
@@ -0,0 +1,336 @@
1
+ "use strict";
2
+ /**
3
+ * AgentMemory — Multi-layer memory system for agents.
4
+ *
5
+ * Three memory layers:
6
+ * - **Episodic**: per-run short-term memory with time-based decay
7
+ * - **Procedural**: persistent skill/chain patterns (e.g. SkillComposer recipes)
8
+ * - **Shared long-term**: cross-agent knowledge base with relevance scoring
9
+ *
10
+ * @module AgentMemory
11
+ */
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.AgentMemory = exports.SharedLongTermMemory = exports.ProceduralMemory = exports.EpisodicMemory = void 0;
14
+ // ============================================================================
15
+ // EPISODIC MEMORY
16
+ // ============================================================================
17
+ /**
18
+ * Short-term, per-run memory with exponential time decay.
19
+ * Entries lose relevance over time; stale entries are pruned.
20
+ */
21
+ class EpisodicMemory {
22
+ entries = new Map();
23
+ maxEntries;
24
+ defaultHalfLifeMs;
25
+ constructor(options = {}) {
26
+ this.maxEntries = options.maxEntries ?? 500;
27
+ this.defaultHalfLifeMs = options.defaultHalfLifeMs ?? 600_000; // 10 minutes
28
+ }
29
+ /** Store a new episodic memory */
30
+ store(content, tags = [], metadata = {}, halfLifeMs) {
31
+ const id = `ep_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;
32
+ const now = Date.now();
33
+ this.entries.set(id, {
34
+ id,
35
+ content,
36
+ tags,
37
+ createdAt: now,
38
+ lastAccessed: now,
39
+ accessCount: 0,
40
+ score: 1.0,
41
+ metadata,
42
+ halfLifeMs: halfLifeMs ?? this.defaultHalfLifeMs,
43
+ });
44
+ this.evict();
45
+ return id;
46
+ }
47
+ /** Recall entries matching criteria, scored by recency and decay */
48
+ recall(options = {}) {
49
+ const now = Date.now();
50
+ const results = [];
51
+ for (const entry of this.entries.values()) {
52
+ // Apply decay
53
+ const elapsed = now - entry.createdAt;
54
+ const decayFactor = Math.pow(0.5, elapsed / entry.halfLifeMs);
55
+ entry.score = decayFactor;
56
+ if (options.minScore !== undefined && entry.score < options.minScore)
57
+ continue;
58
+ if (options.since !== undefined && entry.createdAt < options.since)
59
+ continue;
60
+ if (options.tags && options.tags.length > 0) {
61
+ const matches = options.tags.some(t => entry.tags.includes(t));
62
+ if (!matches)
63
+ continue;
64
+ }
65
+ entry.lastAccessed = now;
66
+ entry.accessCount++;
67
+ results.push(entry);
68
+ }
69
+ results.sort((a, b) => b.score - a.score);
70
+ return results.slice(0, options.maxResults ?? 20);
71
+ }
72
+ /** Remove a specific entry */
73
+ remove(id) {
74
+ return this.entries.delete(id);
75
+ }
76
+ /** Clear all entries */
77
+ clear() {
78
+ this.entries.clear();
79
+ }
80
+ /** Number of stored entries */
81
+ size() {
82
+ return this.entries.size;
83
+ }
84
+ /** Prune entries below a score threshold */
85
+ prune(minScore = 0.01) {
86
+ const now = Date.now();
87
+ let pruned = 0;
88
+ for (const [id, entry] of this.entries) {
89
+ const elapsed = now - entry.createdAt;
90
+ const decayFactor = Math.pow(0.5, elapsed / entry.halfLifeMs);
91
+ if (decayFactor < minScore) {
92
+ this.entries.delete(id);
93
+ pruned++;
94
+ }
95
+ }
96
+ return pruned;
97
+ }
98
+ evict() {
99
+ if (this.entries.size <= this.maxEntries)
100
+ return;
101
+ // Remove oldest entries
102
+ const sorted = [...this.entries.entries()].sort((a, b) => a[1].createdAt - b[1].createdAt);
103
+ const toRemove = sorted.slice(0, this.entries.size - this.maxEntries);
104
+ for (const [id] of toRemove)
105
+ this.entries.delete(id);
106
+ }
107
+ }
108
+ exports.EpisodicMemory = EpisodicMemory;
109
+ // ============================================================================
110
+ // PROCEDURAL MEMORY
111
+ // ============================================================================
112
+ /**
113
+ * Persistent memory for successful skill/chain patterns.
114
+ * Agents learn which patterns work and prefer them in future.
115
+ */
116
+ class ProceduralMemory {
117
+ entries = new Map();
118
+ maxEntries;
119
+ constructor(options = {}) {
120
+ this.maxEntries = options.maxEntries ?? 1000;
121
+ }
122
+ /** Register a pattern (chain/batch/loop/verify) */
123
+ register(id, content, patternType, tags = [], metadata = {}) {
124
+ const now = Date.now();
125
+ const existing = this.entries.get(id);
126
+ if (existing) {
127
+ existing.lastAccessed = now;
128
+ existing.accessCount++;
129
+ return existing;
130
+ }
131
+ const entry = {
132
+ id,
133
+ content,
134
+ tags,
135
+ patternType,
136
+ createdAt: now,
137
+ lastAccessed: now,
138
+ accessCount: 0,
139
+ score: 0.5,
140
+ metadata,
141
+ successCount: 0,
142
+ failureCount: 0,
143
+ };
144
+ this.entries.set(id, entry);
145
+ this.evict();
146
+ return entry;
147
+ }
148
+ /** Record success for a pattern — increases its score */
149
+ recordSuccess(id) {
150
+ const entry = this.entries.get(id);
151
+ if (!entry)
152
+ return;
153
+ entry.successCount++;
154
+ entry.score = entry.successCount / (entry.successCount + entry.failureCount);
155
+ entry.lastAccessed = Date.now();
156
+ }
157
+ /** Record failure for a pattern — decreases its score */
158
+ recordFailure(id) {
159
+ const entry = this.entries.get(id);
160
+ if (!entry)
161
+ return;
162
+ entry.failureCount++;
163
+ entry.score = entry.successCount / (entry.successCount + entry.failureCount);
164
+ entry.lastAccessed = Date.now();
165
+ }
166
+ /** Recall top-scoring patterns matching criteria */
167
+ recall(options = {}) {
168
+ const results = [];
169
+ for (const entry of this.entries.values()) {
170
+ if (options.patternType && entry.patternType !== options.patternType)
171
+ continue;
172
+ if (options.minScore !== undefined && entry.score < options.minScore)
173
+ continue;
174
+ if (options.tags && options.tags.length > 0) {
175
+ const matches = options.tags.some(t => entry.tags.includes(t));
176
+ if (!matches)
177
+ continue;
178
+ }
179
+ entry.lastAccessed = Date.now();
180
+ entry.accessCount++;
181
+ results.push(entry);
182
+ }
183
+ results.sort((a, b) => b.score - a.score);
184
+ return results.slice(0, options.maxResults ?? 20);
185
+ }
186
+ /** Get a specific pattern by ID */
187
+ get(id) {
188
+ return this.entries.get(id);
189
+ }
190
+ /** Number of stored patterns */
191
+ size() {
192
+ return this.entries.size;
193
+ }
194
+ /** Clear all patterns */
195
+ clear() {
196
+ this.entries.clear();
197
+ }
198
+ evict() {
199
+ if (this.entries.size <= this.maxEntries)
200
+ return;
201
+ const sorted = [...this.entries.entries()].sort((a, b) => a[1].score - b[1].score);
202
+ const toRemove = sorted.slice(0, this.entries.size - this.maxEntries);
203
+ for (const [id] of toRemove)
204
+ this.entries.delete(id);
205
+ }
206
+ }
207
+ exports.ProceduralMemory = ProceduralMemory;
208
+ // ============================================================================
209
+ // SHARED LONG-TERM MEMORY
210
+ // ============================================================================
211
+ /**
212
+ * Cross-agent shared knowledge base.
213
+ * Any agent can contribute; all agents can query.
214
+ * Relevance scored by tag overlap and access frequency.
215
+ */
216
+ class SharedLongTermMemory {
217
+ entries = new Map();
218
+ maxEntries;
219
+ constructor(options = {}) {
220
+ this.maxEntries = options.maxEntries ?? 5000;
221
+ }
222
+ /** Contribute knowledge to the shared store */
223
+ contribute(sourceAgent, content, tags = [], metadata = {}) {
224
+ const id = `shared_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;
225
+ const now = Date.now();
226
+ this.entries.set(id, {
227
+ id,
228
+ content,
229
+ tags,
230
+ createdAt: now,
231
+ lastAccessed: now,
232
+ accessCount: 0,
233
+ score: 0.5,
234
+ metadata,
235
+ sourceAgent,
236
+ accessedBy: new Set(),
237
+ });
238
+ this.evict();
239
+ return id;
240
+ }
241
+ /** Query shared memory, scored by tag overlap and recency */
242
+ query(agentId, options = {}) {
243
+ const results = [];
244
+ const queryTags = options.tags ?? [];
245
+ for (const entry of this.entries.values()) {
246
+ if (options.since !== undefined && entry.createdAt < options.since)
247
+ continue;
248
+ // Score by tag overlap
249
+ let tagScore = 0;
250
+ if (queryTags.length > 0) {
251
+ const overlap = queryTags.filter(t => entry.tags.includes(t)).length;
252
+ tagScore = overlap / queryTags.length;
253
+ if (overlap === 0)
254
+ continue; // no tag overlap = skip
255
+ }
256
+ else {
257
+ tagScore = 0.5; // no filter = moderate relevance
258
+ }
259
+ // Boost by access frequency
260
+ const freqBoost = Math.min(entry.accessCount / 10, 1.0) * 0.3;
261
+ entry.score = tagScore * 0.7 + freqBoost;
262
+ if (options.minScore !== undefined && entry.score < options.minScore)
263
+ continue;
264
+ entry.lastAccessed = Date.now();
265
+ entry.accessCount++;
266
+ entry.accessedBy.add(agentId);
267
+ results.push(entry);
268
+ }
269
+ results.sort((a, b) => b.score - a.score);
270
+ return results.slice(0, options.maxResults ?? 20);
271
+ }
272
+ /** Get all entries contributed by a specific agent */
273
+ getByAgent(sourceAgent) {
274
+ return [...this.entries.values()].filter(e => e.sourceAgent === sourceAgent);
275
+ }
276
+ /** Number of stored entries */
277
+ size() {
278
+ return this.entries.size;
279
+ }
280
+ /** Clear all entries */
281
+ clear() {
282
+ this.entries.clear();
283
+ }
284
+ evict() {
285
+ if (this.entries.size <= this.maxEntries)
286
+ return;
287
+ const sorted = [...this.entries.entries()].sort((a, b) => a[1].score - b[1].score);
288
+ const toRemove = sorted.slice(0, this.entries.size - this.maxEntries);
289
+ for (const [id] of toRemove)
290
+ this.entries.delete(id);
291
+ }
292
+ }
293
+ exports.SharedLongTermMemory = SharedLongTermMemory;
294
+ // ============================================================================
295
+ // UNIFIED AGENT MEMORY
296
+ // ============================================================================
297
+ /**
298
+ * Unified memory system combining all three layers.
299
+ * Instantiate per-agent for episodic, share ProceduralMemory and
300
+ * SharedLongTermMemory across agents.
301
+ *
302
+ * @example
303
+ * ```ts
304
+ * const procedural = new ProceduralMemory();
305
+ * const shared = new SharedLongTermMemory();
306
+ *
307
+ * const agentMemory = new AgentMemory('agent-1', { procedural, shared });
308
+ * agentMemory.episodic.store('Completed code review', ['review', 'code']);
309
+ * agentMemory.procedural.recordSuccess('chain-review-fix');
310
+ * agentMemory.shared.contribute('agent-1', 'Auth service uses JWT', ['auth']);
311
+ * ```
312
+ */
313
+ class AgentMemory {
314
+ agentId;
315
+ episodic;
316
+ procedural;
317
+ shared;
318
+ constructor(agentId, options = {}) {
319
+ this.agentId = agentId;
320
+ this.episodic = options.episodic ?? new EpisodicMemory();
321
+ this.procedural = options.procedural ?? new ProceduralMemory();
322
+ this.shared = options.shared ?? new SharedLongTermMemory();
323
+ }
324
+ /** Recall across all layers, merged and ranked by score */
325
+ recallAll(options = {}) {
326
+ const results = [
327
+ ...this.episodic.recall(options),
328
+ ...this.procedural.recall(options),
329
+ ...this.shared.query(this.agentId, options),
330
+ ];
331
+ results.sort((a, b) => b.score - a.score);
332
+ return results.slice(0, options.maxResults ?? 30);
333
+ }
334
+ }
335
+ exports.AgentMemory = AgentMemory;
336
+ //# sourceMappingURL=agent-memory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-memory.js","sourceRoot":"","sources":["../../lib/agent-memory.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;;AAmDH,+EAA+E;AAC/E,kBAAkB;AAClB,+EAA+E;AAE/E;;;GAGG;AACH,MAAa,cAAc;IACjB,OAAO,GAA+B,IAAI,GAAG,EAAE,CAAC;IAChD,UAAU,CAAS;IACnB,iBAAiB,CAAS;IAElC,YAAY,UAA+D,EAAE;QAC3E,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,GAAG,CAAC;QAC5C,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,IAAI,OAAO,CAAC,CAAC,aAAa;IAC9E,CAAC;IAED,kCAAkC;IAClC,KAAK,CAAC,OAAe,EAAE,OAAiB,EAAE,EAAE,WAAoC,EAAE,EAAE,UAAmB;QACrG,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;QACxE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE;YACnB,EAAE;YACF,OAAO;YACP,IAAI;YACJ,SAAS,EAAE,GAAG;YACd,YAAY,EAAE,GAAG;YACjB,WAAW,EAAE,CAAC;YACd,KAAK,EAAE,GAAG;YACV,QAAQ;YACR,UAAU,EAAE,UAAU,IAAI,IAAI,CAAC,iBAAiB;SACjD,CAAC,CAAC;QACH,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,oEAAoE;IACpE,MAAM,CAAC,UAAyB,EAAE;QAChC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,OAAO,GAAoB,EAAE,CAAC;QAEpC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;YAC1C,cAAc;YACd,MAAM,OAAO,GAAG,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC;YACtC,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC;YAC9D,KAAK,CAAC,KAAK,GAAG,WAAW,CAAC;YAE1B,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS,IAAI,KAAK,CAAC,KAAK,GAAG,OAAO,CAAC,QAAQ;gBAAE,SAAS;YAC/E,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,SAAS,GAAG,OAAO,CAAC,KAAK;gBAAE,SAAS;YAC7E,IAAI,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC5C,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC/D,IAAI,CAAC,OAAO;oBAAE,SAAS;YACzB,CAAC;YAED,KAAK,CAAC,YAAY,GAAG,GAAG,CAAC;YACzB,KAAK,CAAC,WAAW,EAAE,CAAC;YACpB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;QAC1C,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC;IACpD,CAAC;IAED,8BAA8B;IAC9B,MAAM,CAAC,EAAU;QACf,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACjC,CAAC;IAED,wBAAwB;IACxB,KAAK;QACH,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;IAED,+BAA+B;IAC/B,IAAI;QACF,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;IAC3B,CAAC;IAED,4CAA4C;IAC5C,KAAK,CAAC,QAAQ,GAAG,IAAI;QACnB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,KAAK,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACvC,MAAM,OAAO,GAAG,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC;YACtC,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC;YAC9D,IAAI,WAAW,GAAG,QAAQ,EAAE,CAAC;gBAC3B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBACxB,MAAM,EAAE,CAAC;YACX,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,KAAK;QACX,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU;YAAE,OAAO;QACjD,wBAAwB;QACxB,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAC3F,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;QACtE,KAAK,MAAM,CAAC,EAAE,CAAC,IAAI,QAAQ;YAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACvD,CAAC;CACF;AA7FD,wCA6FC;AAED,+EAA+E;AAC/E,oBAAoB;AACpB,+EAA+E;AAE/E;;;GAGG;AACH,MAAa,gBAAgB;IACnB,OAAO,GAAiC,IAAI,GAAG,EAAE,CAAC;IAClD,UAAU,CAAS;IAE3B,YAAY,UAAmC,EAAE;QAC/C,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,IAAI,CAAC;IAC/C,CAAC;IAED,mDAAmD;IACnD,QAAQ,CACN,EAAU,EACV,OAAe,EACf,WAAmB,EACnB,OAAiB,EAAE,EACnB,WAAoC,EAAE;QAEtC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACtC,IAAI,QAAQ,EAAE,CAAC;YACb,QAAQ,CAAC,YAAY,GAAG,GAAG,CAAC;YAC5B,QAAQ,CAAC,WAAW,EAAE,CAAC;YACvB,OAAO,QAAQ,CAAC;QAClB,CAAC;QACD,MAAM,KAAK,GAAoB;YAC7B,EAAE;YACF,OAAO;YACP,IAAI;YACJ,WAAW;YACX,SAAS,EAAE,GAAG;YACd,YAAY,EAAE,GAAG;YACjB,WAAW,EAAE,CAAC;YACd,KAAK,EAAE,GAAG;YACV,QAAQ;YACR,YAAY,EAAE,CAAC;YACf,YAAY,EAAE,CAAC;SAChB,CAAC;QACF,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QAC5B,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,OAAO,KAAK,CAAC;IACf,CAAC;IAED,yDAAyD;IACzD,aAAa,CAAC,EAAU;QACtB,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACnC,IAAI,CAAC,KAAK;YAAE,OAAO;QACnB,KAAK,CAAC,YAAY,EAAE,CAAC;QACrB,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,YAAY,GAAG,CAAC,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC,CAAC;QAC7E,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAClC,CAAC;IAED,yDAAyD;IACzD,aAAa,CAAC,EAAU;QACtB,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACnC,IAAI,CAAC,KAAK;YAAE,OAAO;QACnB,KAAK,CAAC,YAAY,EAAE,CAAC;QACrB,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,YAAY,GAAG,CAAC,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC,CAAC;QAC7E,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAClC,CAAC;IAED,oDAAoD;IACpD,MAAM,CAAC,UAAoD,EAAE;QAC3D,MAAM,OAAO,GAAsB,EAAE,CAAC;QACtC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;YAC1C,IAAI,OAAO,CAAC,WAAW,IAAI,KAAK,CAAC,WAAW,KAAK,OAAO,CAAC,WAAW;gBAAE,SAAS;YAC/E,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS,IAAI,KAAK,CAAC,KAAK,GAAG,OAAO,CAAC,QAAQ;gBAAE,SAAS;YAC/E,IAAI,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC5C,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC/D,IAAI,CAAC,OAAO;oBAAE,SAAS;YACzB,CAAC;YACD,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAChC,KAAK,CAAC,WAAW,EAAE,CAAC;YACpB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;QAC1C,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC;IACpD,CAAC;IAED,mCAAmC;IACnC,GAAG,CAAC,EAAU;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC9B,CAAC;IAED,gCAAgC;IAChC,IAAI;QACF,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;IAC3B,CAAC;IAED,yBAAyB;IACzB,KAAK;QACH,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;IAEO,KAAK;QACX,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU;YAAE,OAAO;QACjD,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACnF,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;QACtE,KAAK,MAAM,CAAC,EAAE,CAAC,IAAI,QAAQ;YAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACvD,CAAC;CACF;AAlGD,4CAkGC;AAED,+EAA+E;AAC/E,0BAA0B;AAC1B,+EAA+E;AAE/E;;;;GAIG;AACH,MAAa,oBAAoB;IACvB,OAAO,GAA6B,IAAI,GAAG,EAAE,CAAC;IAC9C,UAAU,CAAS;IAE3B,YAAY,UAAmC,EAAE;QAC/C,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,IAAI,CAAC;IAC/C,CAAC;IAED,+CAA+C;IAC/C,UAAU,CACR,WAAmB,EACnB,OAAe,EACf,OAAiB,EAAE,EACnB,WAAoC,EAAE;QAEtC,MAAM,EAAE,GAAG,UAAU,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;QAC5E,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE;YACnB,EAAE;YACF,OAAO;YACP,IAAI;YACJ,SAAS,EAAE,GAAG;YACd,YAAY,EAAE,GAAG;YACjB,WAAW,EAAE,CAAC;YACd,KAAK,EAAE,GAAG;YACV,QAAQ;YACR,WAAW;YACX,UAAU,EAAE,IAAI,GAAG,EAAE;SACtB,CAAC,CAAC;QACH,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,6DAA6D;IAC7D,KAAK,CAAC,OAAe,EAAE,UAAyB,EAAE;QAChD,MAAM,OAAO,GAAkB,EAAE,CAAC;QAClC,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC;QAErC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;YAC1C,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,SAAS,GAAG,OAAO,CAAC,KAAK;gBAAE,SAAS;YAE7E,uBAAuB;YACvB,IAAI,QAAQ,GAAG,CAAC,CAAC;YACjB,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACzB,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;gBACrE,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC;gBACtC,IAAI,OAAO,KAAK,CAAC;oBAAE,SAAS,CAAC,wBAAwB;YACvD,CAAC;iBAAM,CAAC;gBACN,QAAQ,GAAG,GAAG,CAAC,CAAC,iCAAiC;YACnD,CAAC;YAED,4BAA4B;YAC5B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,GAAG,EAAE,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC;YAC9D,KAAK,CAAC,KAAK,GAAG,QAAQ,GAAG,GAAG,GAAG,SAAS,CAAC;YAEzC,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS,IAAI,KAAK,CAAC,KAAK,GAAG,OAAO,CAAC,QAAQ;gBAAE,SAAS;YAE/E,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAChC,KAAK,CAAC,WAAW,EAAE,CAAC;YACpB,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAC9B,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;QAC1C,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC;IACpD,CAAC;IAED,sDAAsD;IACtD,UAAU,CAAC,WAAmB;QAC5B,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,KAAK,WAAW,CAAC,CAAC;IAC/E,CAAC;IAED,+BAA+B;IAC/B,IAAI;QACF,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;IAC3B,CAAC;IAED,wBAAwB;IACxB,KAAK;QACH,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;IAEO,KAAK;QACX,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU;YAAE,OAAO;QACjD,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACnF,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;QACtE,KAAK,MAAM,CAAC,EAAE,CAAC,IAAI,QAAQ;YAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACvD,CAAC;CACF;AAxFD,oDAwFC;AAED,+EAA+E;AAC/E,uBAAuB;AACvB,+EAA+E;AAE/E;;;;;;;;;;;;;;;GAeG;AACH,MAAa,WAAW;IACN,OAAO,CAAS;IAChB,QAAQ,CAAiB;IACzB,UAAU,CAAmB;IAC7B,MAAM,CAAuB;IAE7C,YACE,OAAe,EACf,UAII,EAAE;QAEN,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,IAAI,cAAc,EAAE,CAAC;QACzD,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,IAAI,gBAAgB,EAAE,CAAC;QAC/D,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,IAAI,oBAAoB,EAAE,CAAC;IAC7D,CAAC;IAED,2DAA2D;IAC3D,SAAS,CAAC,UAAyB,EAAE;QACnC,MAAM,OAAO,GAAkB;YAC7B,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC;YAChC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC;YAClC,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC;SAC5C,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;QAC1C,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC;IACpD,CAAC;CACF;AA9BD,kCA8BC"}
@@ -0,0 +1,133 @@
1
+ /**
2
+ * VCR — Record and replay LLM/agent interactions for testing
3
+ *
4
+ * Provides a VCR (Video Cassette Recorder) pattern for capturing
5
+ * agent execution calls and replaying them deterministically in tests.
6
+ *
7
+ * Modes:
8
+ * - `record` — Intercepts calls, forwards to real handler, saves cassette
9
+ * - `replay` — Matches calls to recorded cassettes, returns saved results
10
+ * - `passthrough` — Disabled, all calls go to real handler
11
+ *
12
+ * Features:
13
+ * - Cassettes stored as JSON files
14
+ * - Request matching by agent ID + action + params hash
15
+ * - Configurable matching strictness
16
+ * - Call ordering enforcement (optional)
17
+ * - Missing cassette detection with helpful errors
18
+ *
19
+ * Usage:
20
+ * const vcr = new AgentVCR({ mode: 'record', cassettePath: './fixtures' });
21
+ * const result = await vcr.execute('agent-1', payload, realHandler);
22
+ * await vcr.save('my-test'); // Saves cassette to ./fixtures/my-test.json
23
+ *
24
+ * // Later in tests:
25
+ * const vcr2 = new AgentVCR({ mode: 'replay', cassettePath: './fixtures' });
26
+ * await vcr2.load('my-test');
27
+ * const result2 = await vcr2.execute('agent-1', payload); // Returns recorded result
28
+ *
29
+ * @module AgentVCR
30
+ * @version 1.0.0
31
+ */
32
+ /** VCR operating mode */
33
+ export type VCRMode = 'record' | 'replay' | 'passthrough';
34
+ /** A single recorded interaction */
35
+ export interface VCRInteraction {
36
+ /** Request fingerprint for matching */
37
+ fingerprint: string;
38
+ /** Agent ID */
39
+ agentId: string;
40
+ /** Action/instruction */
41
+ action: string;
42
+ /** Params hash (for matching) */
43
+ paramsHash: string;
44
+ /** Full request payload (for debugging) */
45
+ request: Record<string, unknown>;
46
+ /** Recorded response */
47
+ response: Record<string, unknown>;
48
+ /** When this was recorded */
49
+ recordedAt: number;
50
+ /** Execution duration in ms */
51
+ durationMs: number;
52
+ }
53
+ /** A cassette file — collection of recorded interactions */
54
+ export interface VCRCassette {
55
+ /** Cassette name */
56
+ name: string;
57
+ /** When the cassette was created */
58
+ createdAt: number;
59
+ /** Recorded interactions */
60
+ interactions: VCRInteraction[];
61
+ /** Metadata */
62
+ metadata?: Record<string, unknown>;
63
+ }
64
+ /** VCR configuration */
65
+ export interface VCRConfig {
66
+ /** Operating mode */
67
+ mode: VCRMode;
68
+ /** Directory for cassette files */
69
+ cassettePath: string;
70
+ /** Match strictness: 'exact' matches full params, 'fuzzy' matches agent+action only */
71
+ matchMode?: 'exact' | 'fuzzy';
72
+ /** Whether to enforce call ordering in replay (default: false) */
73
+ ordered?: boolean;
74
+ /** Whether to throw on missing cassette in replay (default: true) */
75
+ throwOnMissing?: boolean;
76
+ }
77
+ /** Real execution handler — wraps the actual agent call */
78
+ export type VCRHandler = (agentId: string, payload: Record<string, unknown>) => Promise<Record<string, unknown>>;
79
+ /** Match result for debugging */
80
+ export interface VCRMatchResult {
81
+ matched: boolean;
82
+ fingerprint: string;
83
+ candidates: number;
84
+ bestMatch?: VCRInteraction;
85
+ }
86
+ /**
87
+ * Agent VCR — Record and replay agent execution calls.
88
+ *
89
+ * In `record` mode, calls are forwarded to the real handler and saved.
90
+ * In `replay` mode, calls are matched to saved cassettes.
91
+ */
92
+ export declare class AgentVCR {
93
+ private cassette;
94
+ private replayIndex;
95
+ private readonly config;
96
+ constructor(config: VCRConfig);
97
+ /** Get current mode */
98
+ get mode(): VCRMode;
99
+ /** Set mode at runtime */
100
+ setMode(mode: VCRMode): void;
101
+ /**
102
+ * Execute an agent call through the VCR.
103
+ *
104
+ * @param agentId - The agent to call
105
+ * @param payload - The request payload
106
+ * @param handler - Real handler (required in record/passthrough mode)
107
+ */
108
+ execute(agentId: string, payload: Record<string, unknown>, handler?: VCRHandler): Promise<Record<string, unknown>>;
109
+ /**
110
+ * Load a cassette from disk.
111
+ */
112
+ load(name: string): Promise<VCRCassette>;
113
+ /**
114
+ * Save the current recording as a named cassette.
115
+ */
116
+ save(name: string): Promise<void>;
117
+ /** Get the current cassette */
118
+ getCassette(): VCRCassette | null;
119
+ /** Reset the VCR (clear cassette and replay index) */
120
+ reset(): void;
121
+ /** Get number of recorded interactions */
122
+ get interactionCount(): number;
123
+ /**
124
+ * Try to match a request to a recorded interaction.
125
+ * Useful for debugging match failures.
126
+ */
127
+ findMatch(agentId: string, payload: Record<string, unknown>): VCRMatchResult;
128
+ private recordExecution;
129
+ private replayExecution;
130
+ private computeFingerprint;
131
+ private hashParams;
132
+ }
133
+ //# sourceMappingURL=agent-vcr.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-vcr.d.ts","sourceRoot":"","sources":["../../lib/agent-vcr.ts"],"names":[],"mappings":"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"}