@agntk/core 0.1.1 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +56 -90
- package/dist/advanced/index.d.ts +9 -2
- package/dist/advanced/index.d.ts.map +1 -1
- package/dist/advanced/index.js +13 -2
- package/dist/advanced/index.js.map +1 -1
- package/dist/agent.d.ts +27 -31
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +228 -275
- package/dist/agent.js.map +1 -1
- package/dist/config/schema.d.ts +38 -38
- package/dist/evals/runner.js +16 -9
- package/dist/evals/runner.js.map +1 -1
- package/dist/evals/types.d.ts +1 -1
- package/dist/evals/types.d.ts.map +1 -1
- package/dist/index.d.ts +4 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -9
- package/dist/index.js.map +1 -1
- package/dist/observability/langfuse.d.ts +2 -2
- package/dist/observability/langfuse.d.ts.map +1 -1
- package/dist/observability/langfuse.js +39 -17
- package/dist/observability/langfuse.js.map +1 -1
- package/dist/presets/sub-agent-configs.d.ts +11 -3
- package/dist/presets/sub-agent-configs.d.ts.map +1 -1
- package/dist/presets/sub-agent-configs.js +5 -10
- package/dist/presets/sub-agent-configs.js.map +1 -1
- package/dist/presets/tools.d.ts +5 -5
- package/dist/tools/browser/tool.d.ts +2 -2
- package/dist/tools/browser/types.d.ts +2 -2
- package/dist/tools/plan/tools.d.ts +1 -1
- package/dist/tools/plan/types.d.ts +2 -2
- package/dist/tools/progress/index.d.ts +2 -2
- package/dist/tools/spawn-agent/index.d.ts +7 -9
- package/dist/tools/spawn-agent/index.d.ts.map +1 -1
- package/dist/tools/spawn-agent/index.js +2 -4
- package/dist/tools/spawn-agent/index.js.map +1 -1
- package/dist/types/agent.d.ts +69 -199
- package/dist/types/agent.d.ts.map +1 -1
- package/dist/types/agent.js +4 -2
- package/dist/types/agent.js.map +1 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/usage-limits.d.ts +1 -1
- package/dist/usage-limits.js +1 -1
- package/dist/workflow/index.d.ts +1 -5
- package/dist/workflow/index.d.ts.map +1 -1
- package/dist/workflow/index.js +1 -9
- package/dist/workflow/index.js.map +1 -1
- package/dist/wrappers/best-of-n.d.ts +1 -1
- package/dist/wrappers/best-of-n.d.ts.map +1 -1
- package/dist/wrappers/best-of-n.js +11 -6
- package/dist/wrappers/best-of-n.js.map +1 -1
- package/package.json +4 -14
- package/dist/memory/engine.d.ts +0 -130
- package/dist/memory/engine.d.ts.map +0 -1
- package/dist/memory/engine.js +0 -227
- package/dist/memory/engine.js.map +0 -1
- package/dist/memory/vectra-store.d.ts +0 -31
- package/dist/memory/vectra-store.d.ts.map +0 -1
- package/dist/memory/vectra-store.js +0 -122
- package/dist/memory/vectra-store.js.map +0 -1
- package/dist/pool/index.d.ts +0 -7
- package/dist/pool/index.d.ts.map +0 -1
- package/dist/pool/index.js +0 -6
- package/dist/pool/index.js.map +0 -1
- package/dist/pool/specialist-pool.d.ts +0 -59
- package/dist/pool/specialist-pool.d.ts.map +0 -1
- package/dist/pool/specialist-pool.js +0 -224
- package/dist/pool/specialist-pool.js.map +0 -1
- package/dist/pool/tools.d.ts +0 -63
- package/dist/pool/tools.d.ts.map +0 -1
- package/dist/pool/tools.js +0 -83
- package/dist/pool/tools.js.map +0 -1
- package/dist/pool/types.d.ts +0 -79
- package/dist/pool/types.d.ts.map +0 -1
- package/dist/pool/types.js +0 -5
- package/dist/pool/types.js.map +0 -1
- package/dist/presets/index.d.ts +0 -5
- package/dist/presets/index.d.ts.map +0 -1
- package/dist/presets/index.js +0 -5
- package/dist/presets/index.js.map +0 -1
- package/dist/presets/role-registry.d.ts +0 -41
- package/dist/presets/role-registry.d.ts.map +0 -1
- package/dist/presets/role-registry.js +0 -213
- package/dist/presets/role-registry.js.map +0 -1
- package/dist/presets/roles.d.ts +0 -105
- package/dist/presets/roles.d.ts.map +0 -1
- package/dist/presets/roles.js +0 -207
- package/dist/presets/roles.js.map +0 -1
- package/dist/prompts/templates.d.ts +0 -11
- package/dist/prompts/templates.d.ts.map +0 -1
- package/dist/prompts/templates.js +0 -115
- package/dist/prompts/templates.js.map +0 -1
- package/dist/streaming/data-parts.d.ts +0 -163
- package/dist/streaming/data-parts.d.ts.map +0 -1
- package/dist/streaming/data-parts.js +0 -14
- package/dist/streaming/data-parts.js.map +0 -1
- package/dist/streaming/index.d.ts +0 -8
- package/dist/streaming/index.d.ts.map +0 -1
- package/dist/streaming/index.js +0 -10
- package/dist/streaming/index.js.map +0 -1
- package/dist/streaming/transient.d.ts +0 -136
- package/dist/streaming/transient.d.ts.map +0 -1
- package/dist/streaming/transient.js +0 -201
- package/dist/streaming/transient.js.map +0 -1
- package/dist/tools/provider.d.ts +0 -97
- package/dist/tools/provider.d.ts.map +0 -1
- package/dist/tools/provider.js +0 -178
- package/dist/tools/provider.js.map +0 -1
- package/dist/utils/logger.d.ts +0 -35
- package/dist/utils/logger.d.ts.map +0 -1
- package/dist/utils/logger.js +0 -149
- package/dist/utils/logger.js.map +0 -1
- package/dist/workflow/builders/adapt.d.ts +0 -20
- package/dist/workflow/builders/adapt.d.ts.map +0 -1
- package/dist/workflow/builders/adapt.js +0 -33
- package/dist/workflow/builders/adapt.js.map +0 -1
- package/dist/workflow/builders/index.d.ts +0 -8
- package/dist/workflow/builders/index.d.ts.map +0 -1
- package/dist/workflow/builders/index.js +0 -7
- package/dist/workflow/builders/index.js.map +0 -1
- package/dist/workflow/builders/parallel.d.ts +0 -25
- package/dist/workflow/builders/parallel.d.ts.map +0 -1
- package/dist/workflow/builders/parallel.js +0 -60
- package/dist/workflow/builders/parallel.js.map +0 -1
- package/dist/workflow/builders/pipeline.d.ts +0 -22
- package/dist/workflow/builders/pipeline.d.ts.map +0 -1
- package/dist/workflow/builders/pipeline.js +0 -48
- package/dist/workflow/builders/pipeline.js.map +0 -1
- package/dist/workflow/builders/types.d.ts +0 -54
- package/dist/workflow/builders/types.d.ts.map +0 -1
- package/dist/workflow/builders/types.js +0 -5
- package/dist/workflow/builders/types.js.map +0 -1
- package/dist/workflow/durable-agent.d.ts +0 -128
- package/dist/workflow/durable-agent.d.ts.map +0 -1
- package/dist/workflow/durable-agent.js +0 -323
- package/dist/workflow/durable-agent.js.map +0 -1
- package/dist/workflow/schedulers.d.ts +0 -231
- package/dist/workflow/schedulers.d.ts.map +0 -1
- package/dist/workflow/schedulers.js +0 -250
- package/dist/workflow/schedulers.js.map +0 -1
- package/dist/workflow/team/create-team.d.ts +0 -34
- package/dist/workflow/team/create-team.d.ts.map +0 -1
- package/dist/workflow/team/create-team.js +0 -242
- package/dist/workflow/team/create-team.js.map +0 -1
- package/dist/workflow/team/index.d.ts +0 -9
- package/dist/workflow/team/index.d.ts.map +0 -1
- package/dist/workflow/team/index.js +0 -8
- package/dist/workflow/team/index.js.map +0 -1
- package/dist/workflow/team/machines.d.ts +0 -152
- package/dist/workflow/team/machines.d.ts.map +0 -1
- package/dist/workflow/team/machines.js +0 -197
- package/dist/workflow/team/machines.js.map +0 -1
- package/dist/workflow/team/task-board.d.ts +0 -47
- package/dist/workflow/team/task-board.d.ts.map +0 -1
- package/dist/workflow/team/task-board.js +0 -111
- package/dist/workflow/team/task-board.js.map +0 -1
- package/dist/workflow/team/tools.d.ts +0 -66
- package/dist/workflow/team/tools.d.ts.map +0 -1
- package/dist/workflow/team/tools.js +0 -100
- package/dist/workflow/team/tools.js.map +0 -1
- package/dist/workflow/team/types.d.ts +0 -109
- package/dist/workflow/team/types.d.ts.map +0 -1
- package/dist/workflow/team/types.js +0 -5
- package/dist/workflow/team/types.js.map +0 -1
- package/dist/workflow/templates.d.ts +0 -71
- package/dist/workflow/templates.d.ts.map +0 -1
- package/dist/workflow/templates.js +0 -132
- package/dist/workflow/templates.js.map +0 -1
|
@@ -1,122 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"vectra-store.js","sourceRoot":"","sources":["../../src/memory/vectra-store.ts"],"names":[],"mappings":"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"}
|
package/dist/pool/index.d.ts
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
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
|
package/dist/pool/index.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
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"}
|
package/dist/pool/index.js
DELETED
package/dist/pool/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1,59 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1,224 +0,0 @@
|
|
|
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 { createLogger } from '@agntk/logger';
|
|
8
|
-
import { loadSkillsFromPaths, buildSkillsSystemPrompt } from '../skills/index.js';
|
|
9
|
-
const log = createLogger('@agntk/core:pool');
|
|
10
|
-
// ============================================================================
|
|
11
|
-
// Constants
|
|
12
|
-
// ============================================================================
|
|
13
|
-
const DEFAULT_MAX_AGENTS = 10;
|
|
14
|
-
const DEFAULT_TTL_MS = 30 * 60 * 1000; // 30 minutes
|
|
15
|
-
const DEFAULT_HISTORY_STRATEGY = 'full';
|
|
16
|
-
const DEFAULT_WINDOW_SIZE = 20;
|
|
17
|
-
// ============================================================================
|
|
18
|
-
// SpecialistPool
|
|
19
|
-
// ============================================================================
|
|
20
|
-
export class SpecialistPool {
|
|
21
|
-
cache = new Map();
|
|
22
|
-
maxAgents;
|
|
23
|
-
ttlMs;
|
|
24
|
-
defaultHistoryStrategy;
|
|
25
|
-
defaultWindowSize;
|
|
26
|
-
createAgent;
|
|
27
|
-
constructor(config) {
|
|
28
|
-
this.maxAgents = config.maxAgents ?? DEFAULT_MAX_AGENTS;
|
|
29
|
-
this.ttlMs = config.ttlMs ?? DEFAULT_TTL_MS;
|
|
30
|
-
this.defaultHistoryStrategy = config.defaultHistoryStrategy ?? DEFAULT_HISTORY_STRATEGY;
|
|
31
|
-
this.defaultWindowSize = config.defaultWindowSize ?? DEFAULT_WINDOW_SIZE;
|
|
32
|
-
this.createAgent = config.createAgent;
|
|
33
|
-
log.info('SpecialistPool created', {
|
|
34
|
-
maxAgents: this.maxAgents,
|
|
35
|
-
ttlMs: this.ttlMs,
|
|
36
|
-
defaultHistoryStrategy: this.defaultHistoryStrategy,
|
|
37
|
-
});
|
|
38
|
-
}
|
|
39
|
-
// --------------------------------------------------------------------------
|
|
40
|
-
// Public API
|
|
41
|
-
// --------------------------------------------------------------------------
|
|
42
|
-
/**
|
|
43
|
-
* Spawn or reuse a specialist for the given domain.
|
|
44
|
-
* Returns the cached specialist if not expired; otherwise creates a new one.
|
|
45
|
-
*/
|
|
46
|
-
async spawn(config) {
|
|
47
|
-
const { domain } = config;
|
|
48
|
-
// Check for existing cached specialist
|
|
49
|
-
const existing = this.cache.get(domain);
|
|
50
|
-
if (existing && !this.isExpired(existing)) {
|
|
51
|
-
log.debug('Cache hit', { domain, useCount: existing.useCount });
|
|
52
|
-
existing.lastUsedAt = Date.now();
|
|
53
|
-
existing.useCount += 1;
|
|
54
|
-
return existing;
|
|
55
|
-
}
|
|
56
|
-
// Remove expired entry if present
|
|
57
|
-
if (existing) {
|
|
58
|
-
log.debug('Cache expired, recreating', { domain });
|
|
59
|
-
this.cache.delete(domain);
|
|
60
|
-
}
|
|
61
|
-
// Evict LRU if at capacity
|
|
62
|
-
this.evictIfNeeded();
|
|
63
|
-
// Create new specialist
|
|
64
|
-
const specialist = await this.createSpecialist(config);
|
|
65
|
-
this.cache.set(domain, specialist);
|
|
66
|
-
log.info('Specialist spawned', { domain, skills: config.skills?.length ?? 0 });
|
|
67
|
-
return specialist;
|
|
68
|
-
}
|
|
69
|
-
/**
|
|
70
|
-
* Generate a response from a specialist, managing conversation history.
|
|
71
|
-
*/
|
|
72
|
-
async generate(domain, prompt) {
|
|
73
|
-
const cached = this.cache.get(domain);
|
|
74
|
-
if (!cached) {
|
|
75
|
-
throw new Error(`No specialist found for domain: ${domain}. Call spawn() first.`);
|
|
76
|
-
}
|
|
77
|
-
if (this.isExpired(cached)) {
|
|
78
|
-
this.cache.delete(domain);
|
|
79
|
-
throw new Error(`Specialist for domain "${domain}" has expired. Call spawn() again.`);
|
|
80
|
-
}
|
|
81
|
-
cached.lastUsedAt = Date.now();
|
|
82
|
-
cached.useCount += 1;
|
|
83
|
-
// Build prompt with history context
|
|
84
|
-
const contextualPrompt = this.buildContextualPrompt(cached, prompt);
|
|
85
|
-
const result = await cached.agent.generate({ prompt: contextualPrompt });
|
|
86
|
-
const text = result.text ?? '';
|
|
87
|
-
// Update history
|
|
88
|
-
cached.history.push({ role: 'user', content: prompt, timestamp: Date.now() }, { role: 'assistant', content: text, timestamp: Date.now() });
|
|
89
|
-
return text;
|
|
90
|
-
}
|
|
91
|
-
/**
|
|
92
|
-
* List all cached specialists with their metadata.
|
|
93
|
-
*/
|
|
94
|
-
list() {
|
|
95
|
-
return Array.from(this.cache.values()).map((entry) => ({
|
|
96
|
-
domain: entry.domain,
|
|
97
|
-
createdAt: entry.createdAt,
|
|
98
|
-
lastUsedAt: entry.lastUsedAt,
|
|
99
|
-
useCount: entry.useCount,
|
|
100
|
-
historyLength: entry.history.length,
|
|
101
|
-
expired: this.isExpired(entry),
|
|
102
|
-
skills: entry.agent.skills,
|
|
103
|
-
}));
|
|
104
|
-
}
|
|
105
|
-
/**
|
|
106
|
-
* Remove a specialist from the cache.
|
|
107
|
-
*/
|
|
108
|
-
remove(domain) {
|
|
109
|
-
const deleted = this.cache.delete(domain);
|
|
110
|
-
if (deleted) {
|
|
111
|
-
log.info('Specialist removed', { domain });
|
|
112
|
-
}
|
|
113
|
-
return deleted;
|
|
114
|
-
}
|
|
115
|
-
/**
|
|
116
|
-
* Clear all cached specialists.
|
|
117
|
-
*/
|
|
118
|
-
clear() {
|
|
119
|
-
const count = this.cache.size;
|
|
120
|
-
this.cache.clear();
|
|
121
|
-
log.info('Pool cleared', { removedCount: count });
|
|
122
|
-
}
|
|
123
|
-
/**
|
|
124
|
-
* Get the current number of cached specialists.
|
|
125
|
-
*/
|
|
126
|
-
get size() {
|
|
127
|
-
return this.cache.size;
|
|
128
|
-
}
|
|
129
|
-
/**
|
|
130
|
-
* Get a cached specialist by domain (without modifying LRU state).
|
|
131
|
-
*/
|
|
132
|
-
get(domain) {
|
|
133
|
-
return this.cache.get(domain);
|
|
134
|
-
}
|
|
135
|
-
// --------------------------------------------------------------------------
|
|
136
|
-
// Private
|
|
137
|
-
// --------------------------------------------------------------------------
|
|
138
|
-
isExpired(entry) {
|
|
139
|
-
return Date.now() - entry.createdAt > this.ttlMs;
|
|
140
|
-
}
|
|
141
|
-
evictIfNeeded() {
|
|
142
|
-
while (this.cache.size >= this.maxAgents) {
|
|
143
|
-
// Find LRU: oldest lastUsedAt
|
|
144
|
-
let lruKey;
|
|
145
|
-
let lruTime = Infinity;
|
|
146
|
-
for (const [key, entry] of this.cache) {
|
|
147
|
-
if (entry.lastUsedAt < lruTime) {
|
|
148
|
-
lruTime = entry.lastUsedAt;
|
|
149
|
-
lruKey = key;
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
if (lruKey) {
|
|
153
|
-
log.info('Evicting LRU specialist', { domain: lruKey, lastUsedAt: lruTime });
|
|
154
|
-
this.cache.delete(lruKey);
|
|
155
|
-
}
|
|
156
|
-
else {
|
|
157
|
-
break;
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
async createSpecialist(config) {
|
|
162
|
-
const role = config.role ?? 'generic';
|
|
163
|
-
const skills = config.skills ?? [];
|
|
164
|
-
// Build system prompt with skills
|
|
165
|
-
let systemPrompt = config.instructions ?? '';
|
|
166
|
-
if (skills.length > 0) {
|
|
167
|
-
const loadedSkills = loadSkillsFromPaths(skills);
|
|
168
|
-
if (loadedSkills.length > 0) {
|
|
169
|
-
const skillsPrompt = buildSkillsSystemPrompt(loadedSkills);
|
|
170
|
-
systemPrompt = systemPrompt ? `${systemPrompt}\n${skillsPrompt}` : skillsPrompt;
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
// Create the agent via the factory
|
|
174
|
-
const agentOptions = {
|
|
175
|
-
role,
|
|
176
|
-
...(systemPrompt && { systemPrompt }),
|
|
177
|
-
...config.agentOptions,
|
|
178
|
-
};
|
|
179
|
-
const rawAgent = this.createAgent(agentOptions);
|
|
180
|
-
const agent = {
|
|
181
|
-
generate: rawAgent.generate,
|
|
182
|
-
domain: config.domain,
|
|
183
|
-
skills,
|
|
184
|
-
};
|
|
185
|
-
const now = Date.now();
|
|
186
|
-
return {
|
|
187
|
-
domain: config.domain,
|
|
188
|
-
agent,
|
|
189
|
-
createdAt: now,
|
|
190
|
-
lastUsedAt: now,
|
|
191
|
-
useCount: 1,
|
|
192
|
-
history: [],
|
|
193
|
-
};
|
|
194
|
-
}
|
|
195
|
-
buildContextualPrompt(cached, prompt) {
|
|
196
|
-
const history = this.getRelevantHistory(cached);
|
|
197
|
-
if (history.length === 0)
|
|
198
|
-
return prompt;
|
|
199
|
-
const historyText = history
|
|
200
|
-
.map((msg) => `${msg.role === 'user' ? 'User' : 'Assistant'}: ${msg.content}`)
|
|
201
|
-
.join('\n\n');
|
|
202
|
-
return `Previous conversation:\n${historyText}\n\nCurrent request: ${prompt}`;
|
|
203
|
-
}
|
|
204
|
-
getRelevantHistory(cached) {
|
|
205
|
-
const strategy = this.defaultHistoryStrategy;
|
|
206
|
-
const history = cached.history;
|
|
207
|
-
switch (strategy) {
|
|
208
|
-
case 'full':
|
|
209
|
-
return history;
|
|
210
|
-
case 'sliding-window': {
|
|
211
|
-
const windowSize = this.defaultWindowSize;
|
|
212
|
-
return history.slice(-windowSize);
|
|
213
|
-
}
|
|
214
|
-
case 'summary':
|
|
215
|
-
// Summary strategy: keep first message + last few for context
|
|
216
|
-
if (history.length <= 4)
|
|
217
|
-
return history;
|
|
218
|
-
return [...history.slice(0, 2), ...history.slice(-2)];
|
|
219
|
-
default:
|
|
220
|
-
return history;
|
|
221
|
-
}
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
//# sourceMappingURL=specialist-pool.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"specialist-pool.js","sourceRoot":"","sources":["../../src/pool/specialist-pool.ts"],"names":[],"mappings":"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"}
|
package/dist/pool/tools.d.ts
DELETED
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview AI SDK tools for SpecialistPool interaction.
|
|
3
|
-
*
|
|
4
|
-
* - spawn_specialist: Spawn or reuse a cached domain specialist.
|
|
5
|
-
* - list_specialists: List all cached specialists and their state.
|
|
6
|
-
*/
|
|
7
|
-
import type { SpecialistPool } from './specialist-pool.js';
|
|
8
|
-
export declare function createSpawnSpecialistTool(pool: SpecialistPool): import("ai").Tool<{
|
|
9
|
-
prompt: string;
|
|
10
|
-
domain: string;
|
|
11
|
-
role?: "generic" | "coder" | "researcher" | "analyst" | undefined;
|
|
12
|
-
skills?: string[] | undefined;
|
|
13
|
-
instructions?: string | undefined;
|
|
14
|
-
}, {
|
|
15
|
-
domain: string;
|
|
16
|
-
response: string;
|
|
17
|
-
useCount: number;
|
|
18
|
-
skills: string[];
|
|
19
|
-
fromCache: boolean;
|
|
20
|
-
}>;
|
|
21
|
-
export declare function createListSpecialistsTool(pool: SpecialistPool): import("ai").Tool<{}, {
|
|
22
|
-
count: number;
|
|
23
|
-
specialists: {
|
|
24
|
-
domain: string;
|
|
25
|
-
useCount: number;
|
|
26
|
-
historyLength: number;
|
|
27
|
-
expired: boolean;
|
|
28
|
-
skills: string[];
|
|
29
|
-
ageMs: number;
|
|
30
|
-
lastUsedMs: number;
|
|
31
|
-
}[];
|
|
32
|
-
}>;
|
|
33
|
-
/**
|
|
34
|
-
* Create all pool tools for use with an Agent's tool set.
|
|
35
|
-
*/
|
|
36
|
-
export declare function createPoolTools(pool: SpecialistPool): {
|
|
37
|
-
spawn_specialist: import("ai").Tool<{
|
|
38
|
-
prompt: string;
|
|
39
|
-
domain: string;
|
|
40
|
-
role?: "generic" | "coder" | "researcher" | "analyst" | undefined;
|
|
41
|
-
skills?: string[] | undefined;
|
|
42
|
-
instructions?: string | undefined;
|
|
43
|
-
}, {
|
|
44
|
-
domain: string;
|
|
45
|
-
response: string;
|
|
46
|
-
useCount: number;
|
|
47
|
-
skills: string[];
|
|
48
|
-
fromCache: boolean;
|
|
49
|
-
}>;
|
|
50
|
-
list_specialists: import("ai").Tool<{}, {
|
|
51
|
-
count: number;
|
|
52
|
-
specialists: {
|
|
53
|
-
domain: string;
|
|
54
|
-
useCount: number;
|
|
55
|
-
historyLength: number;
|
|
56
|
-
expired: boolean;
|
|
57
|
-
skills: string[];
|
|
58
|
-
ageMs: number;
|
|
59
|
-
lastUsedMs: number;
|
|
60
|
-
}[];
|
|
61
|
-
}>;
|
|
62
|
-
};
|
|
63
|
-
//# sourceMappingURL=tools.d.ts.map
|
package/dist/pool/tools.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/pool/tools.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAMxD,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,cAAc;;;;;;;;;;;;GAmC7D;AAMD,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,cAAc;;;;;;;;;;;GAsB7D;AAMD;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;EAKnD"}
|
package/dist/pool/tools.js
DELETED
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview AI SDK tools for SpecialistPool interaction.
|
|
3
|
-
*
|
|
4
|
-
* - spawn_specialist: Spawn or reuse a cached domain specialist.
|
|
5
|
-
* - list_specialists: List all cached specialists and their state.
|
|
6
|
-
*/
|
|
7
|
-
import { z } from 'zod';
|
|
8
|
-
import { tool } from 'ai';
|
|
9
|
-
// ============================================================================
|
|
10
|
-
// spawn_specialist
|
|
11
|
-
// ============================================================================
|
|
12
|
-
export function createSpawnSpecialistTool(pool) {
|
|
13
|
-
return tool({
|
|
14
|
-
description: 'Spawn or reuse a cached domain specialist. If a specialist for the given domain ' +
|
|
15
|
-
'already exists and has not expired, it is reused. Otherwise a new specialist is created ' +
|
|
16
|
-
'with the specified role, skills, and instructions.',
|
|
17
|
-
inputSchema: z.object({
|
|
18
|
-
domain: z.string().describe('Domain/specialty name (used as cache key).'),
|
|
19
|
-
role: z
|
|
20
|
-
.enum(['generic', 'coder', 'researcher', 'analyst'])
|
|
21
|
-
.optional()
|
|
22
|
-
.describe('Agent role. Default: generic.'),
|
|
23
|
-
skills: z
|
|
24
|
-
.array(z.string())
|
|
25
|
-
.optional()
|
|
26
|
-
.describe('Skill directory paths or skill names to inject.'),
|
|
27
|
-
instructions: z
|
|
28
|
-
.string()
|
|
29
|
-
.optional()
|
|
30
|
-
.describe('Custom system prompt instructions for this specialist.'),
|
|
31
|
-
prompt: z.string().describe('The prompt/task to send to the specialist.'),
|
|
32
|
-
}),
|
|
33
|
-
execute: async ({ domain, role, skills, instructions, prompt }) => {
|
|
34
|
-
const cached = await pool.spawn({ domain, role, skills, instructions });
|
|
35
|
-
const response = await pool.generate(domain, prompt);
|
|
36
|
-
return {
|
|
37
|
-
domain: cached.domain,
|
|
38
|
-
response,
|
|
39
|
-
useCount: cached.useCount,
|
|
40
|
-
skills: cached.agent.skills,
|
|
41
|
-
fromCache: cached.useCount > 1,
|
|
42
|
-
};
|
|
43
|
-
},
|
|
44
|
-
});
|
|
45
|
-
}
|
|
46
|
-
// ============================================================================
|
|
47
|
-
// list_specialists
|
|
48
|
-
// ============================================================================
|
|
49
|
-
export function createListSpecialistsTool(pool) {
|
|
50
|
-
return tool({
|
|
51
|
-
description: 'List all cached specialists in the pool with their domain, age, usage count, ' +
|
|
52
|
-
'history length, and expiration status.',
|
|
53
|
-
inputSchema: z.object({}),
|
|
54
|
-
execute: async () => {
|
|
55
|
-
const specialists = pool.list();
|
|
56
|
-
return {
|
|
57
|
-
count: specialists.length,
|
|
58
|
-
specialists: specialists.map((s) => ({
|
|
59
|
-
domain: s.domain,
|
|
60
|
-
useCount: s.useCount,
|
|
61
|
-
historyLength: s.historyLength,
|
|
62
|
-
expired: s.expired,
|
|
63
|
-
skills: s.skills,
|
|
64
|
-
ageMs: Date.now() - s.createdAt,
|
|
65
|
-
lastUsedMs: Date.now() - s.lastUsedAt,
|
|
66
|
-
})),
|
|
67
|
-
};
|
|
68
|
-
},
|
|
69
|
-
});
|
|
70
|
-
}
|
|
71
|
-
// ============================================================================
|
|
72
|
-
// Factory
|
|
73
|
-
// ============================================================================
|
|
74
|
-
/**
|
|
75
|
-
* Create all pool tools for use with an Agent's tool set.
|
|
76
|
-
*/
|
|
77
|
-
export function createPoolTools(pool) {
|
|
78
|
-
return {
|
|
79
|
-
spawn_specialist: createSpawnSpecialistTool(pool),
|
|
80
|
-
list_specialists: createListSpecialistsTool(pool),
|
|
81
|
-
};
|
|
82
|
-
}
|
|
83
|
-
//# sourceMappingURL=tools.js.map
|
package/dist/pool/tools.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/pool/tools.ts"],"names":[],"mappings":"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"}
|