@agntk/core 0.2.0 → 0.3.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 (190) hide show
  1. package/dist/agent-v2.d.ts +48 -0
  2. package/dist/agent-v2.d.ts.map +1 -0
  3. package/dist/agent-v2.js +365 -0
  4. package/dist/agent-v2.js.map +1 -0
  5. package/dist/agent.d.ts.map +1 -1
  6. package/dist/agent.js +61 -43
  7. package/dist/agent.js.map +1 -1
  8. package/dist/config/defaults.d.ts.map +1 -1
  9. package/dist/config/defaults.js +16 -4
  10. package/dist/config/defaults.js.map +1 -1
  11. package/dist/config/loader.d.ts +14 -6
  12. package/dist/config/loader.d.ts.map +1 -1
  13. package/dist/config/loader.js +38 -16
  14. package/dist/config/loader.js.map +1 -1
  15. package/dist/config/schema.d.ts +14 -14
  16. package/dist/config/schema.d.ts.map +1 -1
  17. package/dist/config/schema.js +1 -1
  18. package/dist/config/schema.js.map +1 -1
  19. package/dist/guardrails/runner.d.ts.map +1 -1
  20. package/dist/guardrails/runner.js +4 -0
  21. package/dist/guardrails/runner.js.map +1 -1
  22. package/dist/index.d.ts +5 -1
  23. package/dist/index.d.ts.map +1 -1
  24. package/dist/index.js +9 -1
  25. package/dist/index.js.map +1 -1
  26. package/dist/memory/engine.d.ts +130 -0
  27. package/dist/memory/engine.d.ts.map +1 -0
  28. package/dist/memory/engine.js +227 -0
  29. package/dist/memory/engine.js.map +1 -0
  30. package/dist/memory/vectra-store.d.ts +31 -0
  31. package/dist/memory/vectra-store.d.ts.map +1 -0
  32. package/dist/memory/vectra-store.js +122 -0
  33. package/dist/memory/vectra-store.js.map +1 -0
  34. package/dist/models.d.ts +24 -1
  35. package/dist/models.d.ts.map +1 -1
  36. package/dist/models.js +50 -4
  37. package/dist/models.js.map +1 -1
  38. package/dist/pool/index.d.ts +7 -0
  39. package/dist/pool/index.d.ts.map +1 -0
  40. package/dist/pool/index.js +6 -0
  41. package/dist/pool/index.js.map +1 -0
  42. package/dist/pool/specialist-pool.d.ts +59 -0
  43. package/dist/pool/specialist-pool.d.ts.map +1 -0
  44. package/dist/pool/specialist-pool.js +224 -0
  45. package/dist/pool/specialist-pool.js.map +1 -0
  46. package/dist/pool/tools.d.ts +63 -0
  47. package/dist/pool/tools.d.ts.map +1 -0
  48. package/dist/pool/tools.js +83 -0
  49. package/dist/pool/tools.js.map +1 -0
  50. package/dist/pool/types.d.ts +79 -0
  51. package/dist/pool/types.d.ts.map +1 -0
  52. package/dist/pool/types.js +5 -0
  53. package/dist/pool/types.js.map +1 -0
  54. package/dist/presets/index.d.ts +5 -0
  55. package/dist/presets/index.d.ts.map +1 -0
  56. package/dist/presets/index.js +5 -0
  57. package/dist/presets/index.js.map +1 -0
  58. package/dist/presets/role-registry.d.ts +41 -0
  59. package/dist/presets/role-registry.d.ts.map +1 -0
  60. package/dist/presets/role-registry.js +213 -0
  61. package/dist/presets/role-registry.js.map +1 -0
  62. package/dist/presets/roles.d.ts +105 -0
  63. package/dist/presets/roles.d.ts.map +1 -0
  64. package/dist/presets/roles.js +207 -0
  65. package/dist/presets/roles.js.map +1 -0
  66. package/dist/presets/tools.d.ts +2 -2
  67. package/dist/prompts/templates.d.ts +11 -0
  68. package/dist/prompts/templates.d.ts.map +1 -0
  69. package/dist/prompts/templates.js +115 -0
  70. package/dist/prompts/templates.js.map +1 -0
  71. package/dist/provider-resolver.d.ts +38 -0
  72. package/dist/provider-resolver.d.ts.map +1 -0
  73. package/dist/provider-resolver.js +142 -0
  74. package/dist/provider-resolver.js.map +1 -0
  75. package/dist/reflection.d.ts +5 -2
  76. package/dist/reflection.d.ts.map +1 -1
  77. package/dist/reflection.js +8 -3
  78. package/dist/reflection.js.map +1 -1
  79. package/dist/skills/loader.d.ts +18 -0
  80. package/dist/skills/loader.d.ts.map +1 -1
  81. package/dist/skills/loader.js +58 -2
  82. package/dist/skills/loader.js.map +1 -1
  83. package/dist/streaming/data-parts.d.ts +163 -0
  84. package/dist/streaming/data-parts.d.ts.map +1 -0
  85. package/dist/streaming/data-parts.js +14 -0
  86. package/dist/streaming/data-parts.js.map +1 -0
  87. package/dist/streaming/index.d.ts +8 -0
  88. package/dist/streaming/index.d.ts.map +1 -0
  89. package/dist/streaming/index.js +10 -0
  90. package/dist/streaming/index.js.map +1 -0
  91. package/dist/streaming/transient.d.ts +136 -0
  92. package/dist/streaming/transient.d.ts.map +1 -0
  93. package/dist/streaming/transient.js +201 -0
  94. package/dist/streaming/transient.js.map +1 -0
  95. package/dist/system-detect.d.ts +59 -0
  96. package/dist/system-detect.d.ts.map +1 -0
  97. package/dist/system-detect.js +193 -0
  98. package/dist/system-detect.js.map +1 -0
  99. package/dist/tools/browser/tool.d.ts +2 -2
  100. package/dist/tools/browser/types.d.ts +2 -2
  101. package/dist/tools/file/tools.d.ts.map +1 -1
  102. package/dist/tools/file/tools.js +30 -1
  103. package/dist/tools/file/tools.js.map +1 -1
  104. package/dist/tools/index.d.ts +0 -1
  105. package/dist/tools/index.d.ts.map +1 -1
  106. package/dist/tools/index.js +0 -2
  107. package/dist/tools/index.js.map +1 -1
  108. package/dist/tools/progress/index.d.ts +1 -1
  109. package/dist/tools/provider.d.ts +97 -0
  110. package/dist/tools/provider.d.ts.map +1 -0
  111. package/dist/tools/provider.js +178 -0
  112. package/dist/tools/provider.js.map +1 -0
  113. package/dist/tools/shell/background.d.ts.map +1 -1
  114. package/dist/tools/shell/background.js +45 -3
  115. package/dist/tools/shell/background.js.map +1 -1
  116. package/dist/tools/shell/tools.d.ts.map +1 -1
  117. package/dist/tools/shell/tools.js +9 -2
  118. package/dist/tools/shell/tools.js.map +1 -1
  119. package/dist/tools/utils/shell.d.ts +14 -0
  120. package/dist/tools/utils/shell.d.ts.map +1 -1
  121. package/dist/tools/utils/shell.js +171 -12
  122. package/dist/tools/utils/shell.js.map +1 -1
  123. package/dist/types/agent-v2.d.ts +83 -0
  124. package/dist/types/agent-v2.d.ts.map +1 -0
  125. package/dist/types/agent-v2.js +8 -0
  126. package/dist/types/agent-v2.js.map +1 -0
  127. package/dist/types/agent.d.ts +10 -0
  128. package/dist/types/agent.d.ts.map +1 -1
  129. package/dist/utils/logger.d.ts +35 -0
  130. package/dist/utils/logger.d.ts.map +1 -0
  131. package/dist/utils/logger.js +149 -0
  132. package/dist/utils/logger.js.map +1 -0
  133. package/dist/workflow/builders/adapt.d.ts +20 -0
  134. package/dist/workflow/builders/adapt.d.ts.map +1 -0
  135. package/dist/workflow/builders/adapt.js +33 -0
  136. package/dist/workflow/builders/adapt.js.map +1 -0
  137. package/dist/workflow/builders/index.d.ts +8 -0
  138. package/dist/workflow/builders/index.d.ts.map +1 -0
  139. package/dist/workflow/builders/index.js +7 -0
  140. package/dist/workflow/builders/index.js.map +1 -0
  141. package/dist/workflow/builders/parallel.d.ts +25 -0
  142. package/dist/workflow/builders/parallel.d.ts.map +1 -0
  143. package/dist/workflow/builders/parallel.js +60 -0
  144. package/dist/workflow/builders/parallel.js.map +1 -0
  145. package/dist/workflow/builders/pipeline.d.ts +22 -0
  146. package/dist/workflow/builders/pipeline.d.ts.map +1 -0
  147. package/dist/workflow/builders/pipeline.js +48 -0
  148. package/dist/workflow/builders/pipeline.js.map +1 -0
  149. package/dist/workflow/builders/types.d.ts +54 -0
  150. package/dist/workflow/builders/types.d.ts.map +1 -0
  151. package/dist/workflow/builders/types.js +5 -0
  152. package/dist/workflow/builders/types.js.map +1 -0
  153. package/dist/workflow/durable-agent.d.ts +128 -0
  154. package/dist/workflow/durable-agent.d.ts.map +1 -0
  155. package/dist/workflow/durable-agent.js +323 -0
  156. package/dist/workflow/durable-agent.js.map +1 -0
  157. package/dist/workflow/schedulers.d.ts +231 -0
  158. package/dist/workflow/schedulers.d.ts.map +1 -0
  159. package/dist/workflow/schedulers.js +250 -0
  160. package/dist/workflow/schedulers.js.map +1 -0
  161. package/dist/workflow/team/create-team.d.ts +34 -0
  162. package/dist/workflow/team/create-team.d.ts.map +1 -0
  163. package/dist/workflow/team/create-team.js +242 -0
  164. package/dist/workflow/team/create-team.js.map +1 -0
  165. package/dist/workflow/team/index.d.ts +9 -0
  166. package/dist/workflow/team/index.d.ts.map +1 -0
  167. package/dist/workflow/team/index.js +8 -0
  168. package/dist/workflow/team/index.js.map +1 -0
  169. package/dist/workflow/team/machines.d.ts +152 -0
  170. package/dist/workflow/team/machines.d.ts.map +1 -0
  171. package/dist/workflow/team/machines.js +197 -0
  172. package/dist/workflow/team/machines.js.map +1 -0
  173. package/dist/workflow/team/task-board.d.ts +47 -0
  174. package/dist/workflow/team/task-board.d.ts.map +1 -0
  175. package/dist/workflow/team/task-board.js +111 -0
  176. package/dist/workflow/team/task-board.js.map +1 -0
  177. package/dist/workflow/team/tools.d.ts +66 -0
  178. package/dist/workflow/team/tools.d.ts.map +1 -0
  179. package/dist/workflow/team/tools.js +100 -0
  180. package/dist/workflow/team/tools.js.map +1 -0
  181. package/dist/workflow/team/types.d.ts +109 -0
  182. package/dist/workflow/team/types.d.ts.map +1 -0
  183. package/dist/workflow/team/types.js +5 -0
  184. package/dist/workflow/team/types.js.map +1 -0
  185. package/dist/workflow/templates.d.ts +71 -0
  186. package/dist/workflow/templates.d.ts.map +1 -0
  187. package/dist/workflow/templates.js +132 -0
  188. package/dist/workflow/templates.js.map +1 -0
  189. package/package.json +13 -13
  190. package/LICENSE +0 -22
@@ -0,0 +1,227 @@
1
+ /**
2
+ * @agntk/core - Unified Memory Engine
3
+ *
4
+ * Single write path: remember() → LLM extraction → parallel writes to Vectra + Graph.
5
+ * Implements Mem0 ADD/UPDATE/DELETE/NOOP pattern with Hindsight 4-network taxonomy.
6
+ *
7
+ * Architecture:
8
+ * - VectorStore: Semantic similarity search (Vectra)
9
+ * - GraphStore: Structural relationships (Graphology via QueryPort)
10
+ * - ExtractionModel: LLM-powered fact extraction
11
+ * - ContradictionDetector: Write-time conflict detection
12
+ */
13
+ import { createLogger } from '@agntk/logger';
14
+ import { extractFacts, } from './extraction.js';
15
+ const log = createLogger('@agntk/core:memory-engine');
16
+ // ============================================================================
17
+ // Implementation
18
+ // ============================================================================
19
+ /**
20
+ * Create a unified memory engine.
21
+ *
22
+ * @example
23
+ * ```typescript
24
+ * const engine = createMemoryEngine({
25
+ * vectorStore: await createMemoryStore({ path: './.memory' }),
26
+ * graphStore: new GraphologyAdapter(),
27
+ * extractionModel: openai('gpt-4o-mini'),
28
+ * });
29
+ *
30
+ * // Single remember() does extraction + parallel writes
31
+ * const result = await engine.remember('TypeScript 5.3 supports import attributes');
32
+ * ```
33
+ */
34
+ export function createMemoryEngine(config) {
35
+ const { vectorStore, graphStore, extractionModel, contradictionDetector, defaultTopK = 5, defaultThreshold = 0.7, } = config;
36
+ return {
37
+ async remember(text, metadata) {
38
+ const writeId = generateWriteId();
39
+ const timestamp = new Date().toISOString();
40
+ log.debug('remember() — unified write path', { writeId, textLength: text.length });
41
+ // Step 1: Extract facts via LLM (if model provided)
42
+ let facts = [];
43
+ if (extractionModel) {
44
+ try {
45
+ const done = log.time('extraction');
46
+ const result = await extractFacts(text, { model: extractionModel });
47
+ facts = result.facts;
48
+ done();
49
+ log.info('Extraction complete', { factCount: facts.length });
50
+ }
51
+ catch (error) {
52
+ log.warn('Extraction failed, continuing with raw text', { error: String(error) });
53
+ }
54
+ }
55
+ // Step 2: Check for contradictions against existing memories
56
+ let contradictionResult;
57
+ if (contradictionDetector && facts.length > 0) {
58
+ try {
59
+ contradictionResult = await detectContradictions(facts, vectorStore, contradictionDetector, graphStore, defaultTopK, defaultThreshold);
60
+ }
61
+ catch (error) {
62
+ log.warn('Contradiction detection failed, continuing', { error: String(error) });
63
+ }
64
+ }
65
+ // Step 3: Determine operation type
66
+ const operation = contradictionResult ? 'UPDATE' : 'ADD';
67
+ // Step 4: Parallel writes to vector store + graph store
68
+ const writePromises = [];
69
+ let vectorStoreId;
70
+ let graphStoreId;
71
+ // Vector store: store the raw text + extracted facts as metadata
72
+ writePromises.push(vectorStore.remember(text, {
73
+ ...metadata,
74
+ writeId,
75
+ timestamp,
76
+ operation,
77
+ networks: facts.map((f) => f.network),
78
+ factCount: facts.length,
79
+ facts: facts.map((f) => f.fact),
80
+ }).then((id) => { vectorStoreId = id; }));
81
+ // Graph store: create episode + link entities
82
+ if (graphStore && facts.length > 0) {
83
+ const episodeType = classifyEpisodeType(facts);
84
+ const entityNames = [...new Set(facts.flatMap((f) => f.entities.map((e) => e.name)))];
85
+ const relationshipStrings = facts.flatMap((f) => f.relationships.map((r) => `${r.from}-[${r.type}]->${r.to}`));
86
+ writePromises.push((async () => {
87
+ await graphStore.upsertEpisode({
88
+ id: writeId,
89
+ timestamp,
90
+ type: episodeType,
91
+ summary: facts.map((f) => f.fact).join('; '),
92
+ content: text,
93
+ entities: entityNames,
94
+ relationships: relationshipStrings,
95
+ });
96
+ graphStoreId = writeId;
97
+ // Link entities to the episode
98
+ for (const entityName of entityNames) {
99
+ await graphStore.linkEpisodeEntity(writeId, entityName);
100
+ }
101
+ })());
102
+ }
103
+ await Promise.all(writePromises);
104
+ log.info('Unified write complete', {
105
+ writeId,
106
+ operation,
107
+ factCount: facts.length,
108
+ vectorStoreId,
109
+ graphStoreId,
110
+ hasContradiction: !!contradictionResult,
111
+ });
112
+ return {
113
+ id: writeId,
114
+ operation,
115
+ facts,
116
+ vectorStoreId,
117
+ graphStoreId,
118
+ contradiction: contradictionResult,
119
+ };
120
+ },
121
+ async recall(query, options) {
122
+ return vectorStore.recall(query, {
123
+ topK: options?.topK ?? defaultTopK,
124
+ threshold: options?.threshold ?? defaultThreshold,
125
+ });
126
+ },
127
+ async queryKnowledge(query, limit = 10) {
128
+ if (!graphStore) {
129
+ log.debug('queryKnowledge called without graph store — returning empty');
130
+ return [];
131
+ }
132
+ const episodes = await graphStore.getEpisodesByQuery(query, limit);
133
+ return episodes.map((ep) => ({
134
+ id: ep.id ?? ep.properties?.id,
135
+ summary: ep.summary ?? ep.properties?.summary,
136
+ content: ep.content ?? ep.properties?.content,
137
+ timestamp: ep.timestamp ?? ep.properties?.timestamp,
138
+ type: ep.type ?? ep.properties?.type,
139
+ }));
140
+ },
141
+ async forget(id) {
142
+ return vectorStore.forget(id);
143
+ },
144
+ async count() {
145
+ return vectorStore.count();
146
+ },
147
+ async close() {
148
+ await vectorStore.close();
149
+ },
150
+ };
151
+ }
152
+ // ============================================================================
153
+ // Helpers
154
+ // ============================================================================
155
+ function generateWriteId() {
156
+ return `mem_${Date.now()}_${Math.random().toString(36).slice(2, 11)}`;
157
+ }
158
+ /**
159
+ * Classify the episode type based on the dominant memory network.
160
+ */
161
+ function classifyEpisodeType(facts) {
162
+ const counts = {
163
+ world_fact: 0,
164
+ experience: 0,
165
+ entity_summary: 0,
166
+ belief: 0,
167
+ };
168
+ for (const fact of facts) {
169
+ counts[fact.network]++;
170
+ }
171
+ // Map network types to episode types
172
+ if (counts.experience > 0)
173
+ return 'action';
174
+ if (counts.belief > 0)
175
+ return 'decision';
176
+ if (counts.entity_summary > counts.world_fact)
177
+ return 'observation';
178
+ return 'learning';
179
+ }
180
+ /**
181
+ * Check new facts against existing memories for contradictions.
182
+ */
183
+ async function detectContradictions(newFacts, vectorStore, detector, graphStore, topK, threshold) {
184
+ // For each new world_fact or belief, check against similar existing memories
185
+ const checkableFacts = newFacts.filter((f) => f.network === 'world_fact' || f.network === 'belief');
186
+ for (const newFact of checkableFacts) {
187
+ const existing = await vectorStore.recall(newFact.fact, { topK, threshold });
188
+ for (const match of existing) {
189
+ const contradiction = detector.detect(match.item.text, newFact.fact, { id: match.item.id, source: 'memory', timestamp: match.item.timestamp.toISOString() }, { id: 'new', source: 'input', timestamp: new Date().toISOString() });
190
+ if (contradiction) {
191
+ log.info('Contradiction detected', {
192
+ existing: match.item.text.slice(0, 80),
193
+ new: newFact.fact.slice(0, 80),
194
+ });
195
+ // Store the contradiction in graph store if available
196
+ if (graphStore) {
197
+ try {
198
+ await graphStore.upsertContradiction({
199
+ id: contradiction.id,
200
+ detectedAt: contradiction.detectedAt,
201
+ resolution_winner: null,
202
+ resolution_reasoning: null,
203
+ factA_id: match.item.id,
204
+ factA_statement: match.item.text,
205
+ factA_source: 'memory',
206
+ factA_timestamp: match.item.timestamp.toISOString(),
207
+ factB_id: 'new',
208
+ factB_statement: newFact.fact,
209
+ factB_source: 'input',
210
+ factB_timestamp: new Date().toISOString(),
211
+ });
212
+ }
213
+ catch (error) {
214
+ log.warn('Failed to store contradiction in graph', { error: String(error) });
215
+ }
216
+ }
217
+ return {
218
+ id: contradiction.id,
219
+ existingFact: match.item.text,
220
+ newFact: newFact.fact,
221
+ };
222
+ }
223
+ }
224
+ }
225
+ return undefined;
226
+ }
227
+ //# sourceMappingURL=engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/memory/engine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * @agntk/core - Vectra Memory Store
3
+ *
4
+ * Portable in-memory vector database using Vectra.
5
+ * Zero native dependencies, file-based persistence.
6
+ */
7
+ import type { MemoryOptions } from '../types/agent.js';
8
+ export interface MemoryItem {
9
+ id: string;
10
+ text: string;
11
+ metadata?: Record<string, unknown>;
12
+ timestamp: Date;
13
+ }
14
+ export interface MemorySearchResult {
15
+ item: MemoryItem;
16
+ score: number;
17
+ }
18
+ export interface MemoryStore {
19
+ remember: (text: string, metadata?: Record<string, unknown>) => Promise<string>;
20
+ recall: (query: string, options?: {
21
+ topK?: number;
22
+ threshold?: number;
23
+ }) => Promise<MemorySearchResult[]>;
24
+ forget: (id: string) => Promise<boolean>;
25
+ forgetAll: (filter?: (item: MemoryItem) => boolean) => Promise<number>;
26
+ count: () => Promise<number>;
27
+ close: () => Promise<void>;
28
+ }
29
+ export declare function createMemoryStore(options?: MemoryOptions): Promise<MemoryStore>;
30
+ export type { MemoryOptions };
31
+ //# sourceMappingURL=vectra-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vectra-store.d.ts","sourceRoot":"","sources":["../../src/memory/vectra-store.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAcH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAQpD,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAChF,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAAC;IAC1G,MAAM,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACzC,SAAS,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,OAAO,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACvE,KAAK,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IAC7B,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5B;AAqCD,wBAAsB,iBAAiB,CAAC,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,WAAW,CAAC,CAkGzF;AAMD,YAAY,EAAE,aAAa,EAAE,CAAC"}
@@ -0,0 +1,122 @@
1
+ /**
2
+ * @agntk/core - Vectra Memory Store
3
+ *
4
+ * Portable in-memory vector database using Vectra.
5
+ * Zero native dependencies, file-based persistence.
6
+ */
7
+ import { LocalIndex } from 'vectra';
8
+ import * as path from 'node:path';
9
+ import * as fs from 'node:fs/promises';
10
+ import { createLogger } from '@agntk/logger';
11
+ import { getConfig } from '../config/index.js';
12
+ import { DEFAULT_EMBEDDING_URL, DEFAULT_EMBEDDING_MODEL, DEFAULT_MEMORY_PATH, DEFAULT_MEMORY_TOP_K, DEFAULT_MEMORY_SIMILARITY_THRESHOLD, } from '../constants.js';
13
+ const log = createLogger('@agntk/core:memory');
14
+ // ============================================================================
15
+ // Embedding - Using OpenAI directly
16
+ // ============================================================================
17
+ async function getEmbedding(text, modelName, embeddingUrl) {
18
+ const apiKey = process.env['OPENAI_API_KEY'];
19
+ if (!apiKey) {
20
+ throw new Error('OPENAI_API_KEY required for memory embeddings');
21
+ }
22
+ const url = embeddingUrl ?? DEFAULT_EMBEDDING_URL;
23
+ const response = await fetch(url, {
24
+ method: 'POST',
25
+ headers: {
26
+ 'Content-Type': 'application/json',
27
+ 'Authorization': `Bearer ${apiKey}`,
28
+ },
29
+ body: JSON.stringify({
30
+ model: modelName ?? DEFAULT_EMBEDDING_MODEL,
31
+ input: text,
32
+ }),
33
+ });
34
+ if (!response.ok) {
35
+ throw new Error(`Embedding failed: ${response.statusText}`);
36
+ }
37
+ const data = await response.json();
38
+ return data.data[0].embedding;
39
+ }
40
+ // ============================================================================
41
+ // Memory Store Implementation
42
+ // ============================================================================
43
+ export async function createMemoryStore(options = {}) {
44
+ // Merge with config values
45
+ const config = getConfig();
46
+ const memoryConfig = (config.memory ?? {});
47
+ const { path: storagePath = memoryConfig.path ?? DEFAULT_MEMORY_PATH, embedModel = memoryConfig.embedModel ?? DEFAULT_EMBEDDING_MODEL, topK = memoryConfig.topK ?? DEFAULT_MEMORY_TOP_K, similarityThreshold = memoryConfig.similarityThreshold ?? DEFAULT_MEMORY_SIMILARITY_THRESHOLD, } = options;
48
+ log.info('Creating memory store', { path: storagePath, embedModel, topK });
49
+ const absolutePath = path.resolve(storagePath);
50
+ await fs.mkdir(absolutePath, { recursive: true });
51
+ const index = new LocalIndex(absolutePath);
52
+ if (!await index.isIndexCreated()) {
53
+ await index.createIndex();
54
+ }
55
+ const store = {
56
+ async remember(text, metadata) {
57
+ const id = generateId();
58
+ const vector = await getEmbedding(text, embedModel);
59
+ await index.insertItem({
60
+ id,
61
+ vector,
62
+ metadata: { text, timestamp: new Date().toISOString(), ...metadata },
63
+ });
64
+ return id;
65
+ },
66
+ async recall(query, opts) {
67
+ const queryVector = await getEmbedding(query, embedModel);
68
+ const k = opts?.topK ?? topK;
69
+ const threshold = opts?.threshold ?? similarityThreshold;
70
+ const results = await index.queryItems(queryVector, k);
71
+ return results
72
+ .filter(r => r.score >= threshold)
73
+ .map(r => ({
74
+ item: {
75
+ id: r.item.id,
76
+ text: r.item.metadata?.text ?? '',
77
+ metadata: r.item.metadata,
78
+ timestamp: new Date(r.item.metadata?.timestamp ?? Date.now()),
79
+ },
80
+ score: r.score,
81
+ }));
82
+ },
83
+ async forget(id) {
84
+ try {
85
+ await index.deleteItem(id);
86
+ return true;
87
+ }
88
+ catch (_e) {
89
+ return false;
90
+ }
91
+ },
92
+ async forgetAll(filter) {
93
+ const items = await index.listItems();
94
+ let deleted = 0;
95
+ for (const item of items) {
96
+ const memoryItem = {
97
+ id: item.id,
98
+ text: item.metadata?.text ?? '',
99
+ metadata: item.metadata,
100
+ timestamp: new Date(item.metadata?.timestamp ?? Date.now()),
101
+ };
102
+ if (!filter || filter(memoryItem)) {
103
+ await index.deleteItem(item.id);
104
+ deleted++;
105
+ }
106
+ }
107
+ return deleted;
108
+ },
109
+ async count() {
110
+ const items = await index.listItems();
111
+ return items.length;
112
+ },
113
+ async close() {
114
+ // Vectra auto-persists
115
+ },
116
+ };
117
+ return store;
118
+ }
119
+ function generateId() {
120
+ return `mem_${Date.now()}_${Math.random().toString(36).slice(2, 11)}`;
121
+ }
122
+ //# sourceMappingURL=vectra-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vectra-store.js","sourceRoot":"","sources":["../../src/memory/vectra-store.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EACL,qBAAqB,EACrB,uBAAuB,EACvB,mBAAmB,EACnB,oBAAoB,EACpB,mCAAmC,GACpC,MAAM,cAAc,CAAC;AAGtB,MAAM,GAAG,GAAG,YAAY,CAAC,oBAAoB,CAAC,CAAC;AA2B/C,+EAA+E;AAC/E,oCAAoC;AACpC,+EAA+E;AAE/E,KAAK,UAAU,YAAY,CAAC,IAAY,EAAE,SAAkB,EAAE,YAAqB;IACjF,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAC7C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;IACnE,CAAC;IAED,MAAM,GAAG,GAAG,YAAY,IAAI,qBAAqB,CAAC;IAClD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;QAChC,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;YAClC,eAAe,EAAE,UAAU,MAAM,EAAE;SACpC;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACnB,KAAK,EAAE,SAAS,IAAI,uBAAuB;YAC3C,KAAK,EAAE,IAAI;SACZ,CAAC;KACH,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,qBAAqB,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAyC,CAAC;IAC1E,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAChC,CAAC;AAED,+EAA+E;AAC/E,8BAA8B;AAC9B,+EAA+E;AAE/E,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,UAAyB,EAAE;IACjE,2BAA2B;IAC3B,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,MAAM,YAAY,GAAG,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAA4B,CAAC;IAEtE,MAAM,EACJ,IAAI,EAAE,WAAW,GAAI,YAAY,CAAC,IAAe,IAAI,mBAAmB,EACxE,UAAU,GAAI,YAAY,CAAC,UAAqB,IAAI,uBAAuB,EAC3E,IAAI,GAAI,YAAY,CAAC,IAAe,IAAI,oBAAoB,EAC5D,mBAAmB,GAAI,YAAY,CAAC,mBAA8B,IAAI,mCAAmC,GAC1G,GAAG,OAAO,CAAC;IAEZ,GAAG,CAAC,IAAI,CAAC,uBAAuB,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;IAE3E,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAC/C,MAAM,EAAE,CAAC,KAAK,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAElD,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,YAAY,CAAC,CAAC;IAE3C,IAAI,CAAC,MAAM,KAAK,CAAC,cAAc,EAAE,EAAE,CAAC;QAClC,MAAM,KAAK,CAAC,WAAW,EAAE,CAAC;IAC5B,CAAC;IAED,MAAM,KAAK,GAAgB;QACzB,KAAK,CAAC,QAAQ,CAAC,IAAY,EAAE,QAAkC;YAC7D,MAAM,EAAE,GAAG,UAAU,EAAE,CAAC;YACxB,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;YAEpD,MAAM,KAAK,CAAC,UAAU,CAAC;gBACrB,EAAE;gBACF,MAAM;gBACN,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,GAAG,QAAQ,EAAE;aACrE,CAAC,CAAC;YAEH,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,KAAK,CAAC,MAAM,CAAC,KAAa,EAAE,IAA4C;YACtE,MAAM,WAAW,GAAG,MAAM,YAAY,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;YAC1D,MAAM,CAAC,GAAG,IAAI,EAAE,IAAI,IAAI,IAAI,CAAC;YAC7B,MAAM,SAAS,GAAG,IAAI,EAAE,SAAS,IAAI,mBAAmB,CAAC;YAEzD,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;YAEvD,OAAO,OAAO;iBACX,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,SAAS,CAAC;iBACjC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBACT,IAAI,EAAE;oBACJ,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE;oBACb,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAc,IAAI,EAAE;oBAC3C,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,QAAmC;oBACpD,SAAS,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAmB,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;iBACxE;gBACD,KAAK,EAAE,CAAC,CAAC,KAAK;aACf,CAAC,CAAC,CAAC;QACR,CAAC;QAED,KAAK,CAAC,MAAM,CAAC,EAAU;YACrB,IAAI,CAAC;gBACH,MAAM,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;gBAC3B,OAAO,IAAI,CAAC;YACd,CAAC;YAAC,OAAO,EAAW,EAAE,CAAC;gBACrB,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;QAED,KAAK,CAAC,SAAS,CAAC,MAAsC;YACpD,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,SAAS,EAAE,CAAC;YACtC,IAAI,OAAO,GAAG,CAAC,CAAC;YAEhB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,MAAM,UAAU,GAAe;oBAC7B,EAAE,EAAE,IAAI,CAAC,EAAE;oBACX,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAc,IAAI,EAAE;oBACzC,QAAQ,EAAE,IAAI,CAAC,QAAmC;oBAClD,SAAS,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAmB,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;iBACtE,CAAC;gBAEF,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;oBAClC,MAAM,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBAChC,OAAO,EAAE,CAAC;gBACZ,CAAC;YACH,CAAC;YAED,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,KAAK,CAAC,KAAK;YACT,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,SAAS,EAAE,CAAC;YACtC,OAAO,KAAK,CAAC,MAAM,CAAC;QACtB,CAAC;QAED,KAAK,CAAC,KAAK;YACT,uBAAuB;QACzB,CAAC;KACF,CAAC;IAEF,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,UAAU;IACjB,OAAO,OAAO,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;AACxE,CAAC"}
package/dist/models.d.ts CHANGED
@@ -6,7 +6,30 @@
6
6
  */
7
7
  import type { LanguageModel } from 'ai';
8
8
  export type ModelTier = 'fast' | 'standard' | 'reasoning' | 'powerful';
9
- export type ModelProvider = 'openrouter' | 'ollama' | 'openai' | (string & {});
9
+ export type ModelProvider = 'openrouter' | 'ollama' | 'openai' | 'cerebras' | 'agntk-free' | (string & {});
10
+ export interface ResolvedProvider {
11
+ provider: string;
12
+ source: string;
13
+ isFree: boolean;
14
+ /** Hardware-aware Ollama model recommendations (when provider is 'ollama') */
15
+ ollamaModels?: {
16
+ tier: string;
17
+ fast: string;
18
+ standard: string;
19
+ reasoning: string;
20
+ powerful: string;
21
+ reason: string;
22
+ };
23
+ }
24
+ /**
25
+ * Set the resolved provider. Called once by the CLI after running the cascade.
26
+ * Bridges async resolution to sync model creation functions.
27
+ */
28
+ export declare function setResolvedProvider(resolved: ResolvedProvider): void;
29
+ /**
30
+ * Get the currently resolved provider, or null if not yet resolved.
31
+ */
32
+ export declare function getResolvedProviderState(): ResolvedProvider | null;
10
33
  export interface ModelConfig {
11
34
  provider: ModelProvider;
12
35
  name: string;
@@ -1 +1 @@
1
- {"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../src/models.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AAkFxC,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,UAAU,GAAG,WAAW,GAAG,UAAU,CAAC;AACvE,MAAM,MAAM,aAAa,GAAG,YAAY,GAAG,QAAQ,GAAG,QAAQ,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAE/E,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,aAAa,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;CACd;AA4CD,eAAO,MAAM,MAAM;gBACP,aAAa;oBACT,aAAa;qBACZ,aAAa;oBACd,aAAa;CAC5B,CAAC;AAMF,MAAM,WAAW,sBAAsB;IACrC,iCAAiC;IACjC,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,+BAA+B;IAC/B,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,oDAAoD;IACpD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,OAAO,GAAE,sBAA2B,GAAG,aAAa,CAsBhF"}
1
+ {"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../src/models.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AA+FxC,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,UAAU,GAAG,WAAW,GAAG,UAAU,CAAC;AACvE,MAAM,MAAM,aAAa,GAAG,YAAY,GAAG,QAAQ,GAAG,QAAQ,GAAG,UAAU,GAAG,YAAY,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAM3G,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,8EAA8E;IAC9E,YAAY,CAAC,EAAE;QACb,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;CACH;AAID;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,gBAAgB,GAAG,IAAI,CAGpE;AAED;;GAEG;AACH,wBAAgB,wBAAwB,IAAI,gBAAgB,GAAG,IAAI,CAElE;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,aAAa,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;CACd;AAkED,eAAO,MAAM,MAAM;gBACP,aAAa;oBACT,aAAa;qBACZ,aAAa;oBACd,aAAa;CAC5B,CAAC;AAMF,MAAM,WAAW,sBAAsB;IACrC,iCAAiC;IACjC,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,+BAA+B;IAC/B,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,oDAAoD;IACpD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,OAAO,GAAE,sBAA2B,GAAG,aAAa,CAsBhF"}
package/dist/models.js CHANGED
@@ -24,6 +24,16 @@ const PROVIDER_CONFIGS = {
24
24
  baseURL: 'https://api.openai.com/v1',
25
25
  apiKeyEnv: 'OPENAI_API_KEY',
26
26
  },
27
+ cerebras: {
28
+ name: 'cerebras',
29
+ baseURL: 'https://api.cerebras.ai/v1',
30
+ apiKeyEnv: 'CEREBRAS_API_KEY',
31
+ },
32
+ 'agntk-free': {
33
+ name: 'agntk-free',
34
+ baseURL: 'https://api.agntk.dev/api/v1',
35
+ apiKeyEnv: 'AGNTK_FREE_TIER_KEY',
36
+ },
27
37
  };
28
38
  // ============================================================================
29
39
  // Provider Instances (Lazy Initialization)
@@ -52,7 +62,10 @@ function getProvider(providerName) {
52
62
  else {
53
63
  throw new Error(`Unknown provider: ${providerName}. Configure it in models.customProviders.`);
54
64
  }
55
- const apiKey = process.env[providerConfig.apiKeyEnv] || '';
65
+ // For the free tier proxy, use a static identifier token (proxy holds the real key)
66
+ const apiKey = providerConfig.name === 'agntk-free'
67
+ ? 'agntk-free-v1'
68
+ : (process.env[providerConfig.apiKeyEnv] || '');
56
69
  log.debug('Initializing provider', { name: providerConfig.name, baseURL: providerConfig.baseURL });
57
70
  instance = createOpenAICompatible({
58
71
  name: providerConfig.name,
@@ -63,6 +76,21 @@ function getProvider(providerName) {
63
76
  providerInstances.set(providerName, instance);
64
77
  return instance;
65
78
  }
79
+ let _resolvedProvider = null;
80
+ /**
81
+ * Set the resolved provider. Called once by the CLI after running the cascade.
82
+ * Bridges async resolution to sync model creation functions.
83
+ */
84
+ export function setResolvedProvider(resolved) {
85
+ _resolvedProvider = resolved;
86
+ log.info('Provider set', { provider: resolved.provider, source: resolved.source });
87
+ }
88
+ /**
89
+ * Get the currently resolved provider, or null if not yet resolved.
90
+ */
91
+ export function getResolvedProviderState() {
92
+ return _resolvedProvider;
93
+ }
66
94
  // ============================================================================
67
95
  // Environment Variable Model Overrides
68
96
  // ============================================================================
@@ -85,13 +113,31 @@ function createModelForProvider(provider, modelName) {
85
113
  // Model Tier Functions
86
114
  // ============================================================================
87
115
  /**
88
- * Create a model for a given tier, respecting env overrides and Ollama fallback.
116
+ * Create a model for a given tier, respecting env overrides, resolved provider, and Ollama fallback.
117
+ *
118
+ * For Ollama providers, model selection is hardware-aware:
119
+ * the provider resolver attaches an ollamaModels recommendation that
120
+ * maps each tier to the largest model the system can run.
89
121
  */
90
122
  function createTierModel(tier) {
123
+ // 1. Use resolved provider if available (new zero-config path)
124
+ if (_resolvedProvider) {
125
+ const providerName = _resolvedProvider.provider;
126
+ // For Ollama: check env override → hardware-detected models → static defaults
127
+ const ollamaRecommended = _resolvedProvider.ollamaModels;
128
+ const modelName = getEnvModel(tier)
129
+ || (providerName === 'ollama' ? getOllamaEnvModel(tier) : undefined)
130
+ || (providerName === 'ollama' && ollamaRecommended ? ollamaRecommended[tier] : undefined)
131
+ || DEFAULT_MODELS[providerName]?.[tier]
132
+ || DEFAULT_MODELS[DEFAULT_PROVIDER][tier];
133
+ return createModelForProvider(providerName, modelName);
134
+ }
135
+ // 2. Legacy path: explicit OLLAMA_ENABLED
91
136
  if (process.env['OLLAMA_ENABLED'] === 'true') {
92
137
  const modelName = getOllamaEnvModel(tier) || DEFAULT_MODELS.ollama[tier];
93
138
  return createModelForProvider('ollama', modelName);
94
139
  }
140
+ // 3. Legacy path: default to openrouter
95
141
  const modelName = getEnvModel(tier) || DEFAULT_MODELS.openrouter[tier];
96
142
  return createModelForProvider('openrouter', modelName);
97
143
  }
@@ -122,8 +168,8 @@ export function resolveModel(options = {}) {
122
168
  log.info('Resolving model (OpenRouter format)', { modelName });
123
169
  return createModelForProvider('openrouter', modelName);
124
170
  }
125
- // Use tier-based selection from config
126
- const effectiveProvider = provider ?? config.models?.defaultProvider ?? DEFAULT_PROVIDER;
171
+ // Use tier-based selection from config, falling back to resolved provider
172
+ const effectiveProvider = provider ?? config.models?.defaultProvider ?? _resolvedProvider?.provider ?? DEFAULT_PROVIDER;
127
173
  const effectiveModel = getModelForTier(tier, effectiveProvider);
128
174
  log.info('Resolving model (tier-based)', { tier, provider: effectiveProvider, model: effectiveModel });
129
175
  return createModelForProvider(effectiveProvider, effectiveModel);
@@ -1 +1 @@
1
- {"version":3,"file":"models.js","sourceRoot":"","sources":["../src/models.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"models.js","sourceRoot":"","sources":["../src/models.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @fileoverview Pool module barrel exports.
3
+ */
4
+ export { SpecialistPool } from './specialist-pool.js';
5
+ export { createPoolTools, createSpawnSpecialistTool, createListSpecialistsTool } from './tools.js';
6
+ export type { SpecialistPoolConfig, SpecialistConfig, CachedSpecialist, ConversationMessage, SpecialistAgent, HistoryStrategy, } from './types.js';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/pool/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,MAAM,SAAS,CAAC;AAChG,YAAY,EACV,oBAAoB,EACpB,gBAAgB,EAChB,gBAAgB,EAChB,mBAAmB,EACnB,eAAe,EACf,eAAe,GAChB,MAAM,SAAS,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @fileoverview Pool module barrel exports.
3
+ */
4
+ export { SpecialistPool } from './specialist-pool.js';
5
+ export { createPoolTools, createSpawnSpecialistTool, createListSpecialistsTool } from './tools.js';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/pool/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,MAAM,SAAS,CAAC"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * @fileoverview SpecialistPool — LRU+TTL cache of domain specialists.
3
+ *
4
+ * Spawns (or reuses) specialist agents keyed by domain name.
5
+ * Each specialist can have skills injected and maintains conversation history.
6
+ */
7
+ import type { SpecialistPoolConfig, SpecialistConfig, CachedSpecialist } from './types.js';
8
+ export declare class SpecialistPool {
9
+ private cache;
10
+ private readonly maxAgents;
11
+ private readonly ttlMs;
12
+ private readonly defaultHistoryStrategy;
13
+ private readonly defaultWindowSize;
14
+ private readonly createAgent;
15
+ constructor(config: SpecialistPoolConfig);
16
+ /**
17
+ * Spawn or reuse a specialist for the given domain.
18
+ * Returns the cached specialist if not expired; otherwise creates a new one.
19
+ */
20
+ spawn(config: SpecialistConfig): Promise<CachedSpecialist>;
21
+ /**
22
+ * Generate a response from a specialist, managing conversation history.
23
+ */
24
+ generate(domain: string, prompt: string): Promise<string>;
25
+ /**
26
+ * List all cached specialists with their metadata.
27
+ */
28
+ list(): Array<{
29
+ domain: string;
30
+ createdAt: number;
31
+ lastUsedAt: number;
32
+ useCount: number;
33
+ historyLength: number;
34
+ expired: boolean;
35
+ skills: string[];
36
+ }>;
37
+ /**
38
+ * Remove a specialist from the cache.
39
+ */
40
+ remove(domain: string): boolean;
41
+ /**
42
+ * Clear all cached specialists.
43
+ */
44
+ clear(): void;
45
+ /**
46
+ * Get the current number of cached specialists.
47
+ */
48
+ get size(): number;
49
+ /**
50
+ * Get a cached specialist by domain (without modifying LRU state).
51
+ */
52
+ get(domain: string): CachedSpecialist | undefined;
53
+ private isExpired;
54
+ private evictIfNeeded;
55
+ private createSpecialist;
56
+ private buildContextualPrompt;
57
+ private getRelevantHistory;
58
+ }
59
+ //# sourceMappingURL=specialist-pool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"specialist-pool.d.ts","sourceRoot":"","sources":["../../src/pool/specialist-pool.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EACV,oBAAoB,EACpB,gBAAgB,EAChB,gBAAgB,EAIjB,MAAM,SAAS,CAAC;AAmBjB,qBAAa,cAAc;IACzB,OAAO,CAAC,KAAK,CAAuC;IACpD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAkB;IACzD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAS;IAC3C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAsC;gBAEtD,MAAM,EAAE,oBAAoB;IAkBxC;;;OAGG;IACG,KAAK,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IA6BhE;;OAEG;IACG,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA6B/D;;OAEG;IACH,IAAI,IAAI,KAAK,CAAC;QACZ,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,MAAM,CAAC;QACnB,QAAQ,EAAE,MAAM,CAAC;QACjB,aAAa,EAAE,MAAM,CAAC;QACtB,OAAO,EAAE,OAAO,CAAC;QACjB,MAAM,EAAE,MAAM,EAAE,CAAC;KAClB,CAAC;IAYF;;OAEG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAQ/B;;OAEG;IACH,KAAK,IAAI,IAAI;IAMb;;OAEG;IACH,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED;;OAEG;IACH,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS;IAQjD,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,aAAa;YAsBP,gBAAgB;IAwC9B,OAAO,CAAC,qBAAqB;IAW7B,OAAO,CAAC,kBAAkB;CAsB3B"}