cognitive-core 0.0.2 → 0.1.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 +302 -116
- package/SKILL.md +193 -0
- package/dist/agents/index.d.ts +3 -0
- package/dist/agents/index.d.ts.map +1 -0
- package/dist/agents/index.js +5 -0
- package/dist/agents/index.js.map +1 -0
- package/dist/agents/mock-provider.d.ts +23 -0
- package/dist/agents/mock-provider.d.ts.map +1 -0
- package/dist/agents/mock-provider.js +71 -0
- package/dist/agents/mock-provider.js.map +1 -0
- package/dist/agents/types.d.ts +98 -0
- package/dist/agents/types.d.ts.map +1 -0
- package/dist/agents/types.js +44 -0
- package/dist/agents/types.js.map +1 -0
- package/dist/atlas.d.ts +196 -0
- package/dist/atlas.d.ts.map +1 -0
- package/dist/atlas.js +373 -0
- package/dist/atlas.js.map +1 -0
- package/dist/bin/cognitive-core.d.ts +18 -0
- package/dist/bin/cognitive-core.d.ts.map +1 -0
- package/dist/bin/cognitive-core.js +419 -0
- package/dist/bin/cognitive-core.js.map +1 -0
- package/dist/embeddings/bm25.d.ts +104 -0
- package/dist/embeddings/bm25.d.ts.map +1 -0
- package/dist/embeddings/bm25.js +264 -0
- package/dist/embeddings/bm25.js.map +1 -0
- package/dist/embeddings/index.d.ts +12 -0
- package/dist/embeddings/index.d.ts.map +1 -0
- package/dist/embeddings/index.js +16 -0
- package/dist/embeddings/index.js.map +1 -0
- package/dist/embeddings/manager.d.ts +112 -0
- package/dist/embeddings/manager.d.ts.map +1 -0
- package/dist/embeddings/manager.js +215 -0
- package/dist/embeddings/manager.js.map +1 -0
- package/dist/embeddings/provider.d.ts +101 -0
- package/dist/embeddings/provider.d.ts.map +1 -0
- package/dist/embeddings/provider.js +232 -0
- package/dist/embeddings/provider.js.map +1 -0
- package/dist/embeddings/vector-store.d.ts +101 -0
- package/dist/embeddings/vector-store.d.ts.map +1 -0
- package/dist/embeddings/vector-store.js +256 -0
- package/dist/embeddings/vector-store.js.map +1 -0
- package/dist/factory.d.ts +193 -0
- package/dist/factory.d.ts.map +1 -0
- package/dist/factory.js +109 -0
- package/dist/factory.js.map +1 -0
- package/dist/index.d.ts +30 -453
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +84 -509
- package/dist/index.js.map +1 -0
- package/dist/learning/analyzer.d.ts +110 -0
- package/dist/learning/analyzer.d.ts.map +1 -0
- package/dist/learning/analyzer.js +213 -0
- package/dist/learning/analyzer.js.map +1 -0
- package/dist/learning/effectiveness.d.ts +158 -0
- package/dist/learning/effectiveness.d.ts.map +1 -0
- package/dist/learning/effectiveness.js +251 -0
- package/dist/learning/effectiveness.js.map +1 -0
- package/dist/learning/index.d.ts +8 -0
- package/dist/learning/index.d.ts.map +1 -0
- package/dist/learning/index.js +11 -0
- package/dist/learning/index.js.map +1 -0
- package/dist/learning/llm-extractor.d.ts +88 -0
- package/dist/learning/llm-extractor.d.ts.map +1 -0
- package/dist/learning/llm-extractor.js +372 -0
- package/dist/learning/llm-extractor.js.map +1 -0
- package/dist/learning/meta-learner.d.ts +80 -0
- package/dist/learning/meta-learner.d.ts.map +1 -0
- package/dist/learning/meta-learner.js +355 -0
- package/dist/learning/meta-learner.js.map +1 -0
- package/dist/learning/pipeline.d.ts +65 -0
- package/dist/learning/pipeline.d.ts.map +1 -0
- package/dist/learning/pipeline.js +170 -0
- package/dist/learning/pipeline.js.map +1 -0
- package/dist/learning/playbook-extractor.d.ts +113 -0
- package/dist/learning/playbook-extractor.d.ts.map +1 -0
- package/dist/learning/playbook-extractor.js +523 -0
- package/dist/learning/playbook-extractor.js.map +1 -0
- package/dist/learning/usage-inference.d.ts +82 -0
- package/dist/learning/usage-inference.d.ts.map +1 -0
- package/dist/learning/usage-inference.js +261 -0
- package/dist/learning/usage-inference.js.map +1 -0
- package/dist/mcp/index.d.ts +6 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +6 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/playbook-server.d.ts +120 -0
- package/dist/mcp/playbook-server.d.ts.map +1 -0
- package/dist/mcp/playbook-server.js +427 -0
- package/dist/mcp/playbook-server.js.map +1 -0
- package/dist/memory/curated-loader.d.ts +62 -0
- package/dist/memory/curated-loader.d.ts.map +1 -0
- package/dist/memory/curated-loader.js +106 -0
- package/dist/memory/curated-loader.js.map +1 -0
- package/dist/memory/experience.d.ts +122 -0
- package/dist/memory/experience.d.ts.map +1 -0
- package/dist/memory/experience.js +392 -0
- package/dist/memory/experience.js.map +1 -0
- package/dist/memory/index.d.ts +6 -0
- package/dist/memory/index.d.ts.map +1 -0
- package/dist/memory/index.js +9 -0
- package/dist/memory/index.js.map +1 -0
- package/dist/memory/meta.d.ts +90 -0
- package/dist/memory/meta.d.ts.map +1 -0
- package/dist/memory/meta.js +362 -0
- package/dist/memory/meta.js.map +1 -0
- package/dist/memory/playbook.d.ts +133 -0
- package/dist/memory/playbook.d.ts.map +1 -0
- package/dist/memory/playbook.js +357 -0
- package/dist/memory/playbook.js.map +1 -0
- package/dist/memory/system.d.ts +167 -0
- package/dist/memory/system.d.ts.map +1 -0
- package/dist/memory/system.js +383 -0
- package/dist/memory/system.js.map +1 -0
- package/dist/runtime/backends/acp.d.ts +67 -0
- package/dist/runtime/backends/acp.d.ts.map +1 -0
- package/dist/runtime/backends/acp.js +290 -0
- package/dist/runtime/backends/acp.js.map +1 -0
- package/dist/runtime/backends/index.d.ts +5 -0
- package/dist/runtime/backends/index.d.ts.map +1 -0
- package/dist/runtime/backends/index.js +6 -0
- package/dist/runtime/backends/index.js.map +1 -0
- package/dist/runtime/backends/mock.d.ts +67 -0
- package/dist/runtime/backends/mock.d.ts.map +1 -0
- package/dist/runtime/backends/mock.js +153 -0
- package/dist/runtime/backends/mock.js.map +1 -0
- package/dist/runtime/backends/subprocess.d.ts +56 -0
- package/dist/runtime/backends/subprocess.d.ts.map +1 -0
- package/dist/runtime/backends/subprocess.js +260 -0
- package/dist/runtime/backends/subprocess.js.map +1 -0
- package/dist/runtime/flows/learning.d.ts +73 -0
- package/dist/runtime/flows/learning.d.ts.map +1 -0
- package/dist/runtime/flows/learning.js +116 -0
- package/dist/runtime/flows/learning.js.map +1 -0
- package/dist/runtime/flows/validation.d.ts +122 -0
- package/dist/runtime/flows/validation.d.ts.map +1 -0
- package/dist/runtime/flows/validation.js +223 -0
- package/dist/runtime/flows/validation.js.map +1 -0
- package/dist/runtime/index.d.ts +6 -0
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/runtime/index.js +8 -0
- package/dist/runtime/index.js.map +1 -0
- package/dist/runtime/manager.d.ts +116 -0
- package/dist/runtime/manager.d.ts.map +1 -0
- package/dist/runtime/manager.js +416 -0
- package/dist/runtime/manager.js.map +1 -0
- package/dist/runtime/types.d.ts +138 -0
- package/dist/runtime/types.d.ts.map +1 -0
- package/dist/runtime/types.js +2 -0
- package/dist/runtime/types.js.map +1 -0
- package/dist/search/evaluator.d.ts +102 -0
- package/dist/search/evaluator.d.ts.map +1 -0
- package/dist/search/evaluator.js +352 -0
- package/dist/search/evaluator.js.map +1 -0
- package/dist/search/index.d.ts +7 -0
- package/dist/search/index.d.ts.map +1 -0
- package/dist/search/index.js +11 -0
- package/dist/search/index.js.map +1 -0
- package/dist/search/refinement-loop.d.ts +73 -0
- package/dist/search/refinement-loop.d.ts.map +1 -0
- package/dist/search/refinement-loop.js +245 -0
- package/dist/search/refinement-loop.js.map +1 -0
- package/dist/search/refinement-types.d.ts +154 -0
- package/dist/search/refinement-types.d.ts.map +1 -0
- package/dist/search/refinement-types.js +99 -0
- package/dist/search/refinement-types.js.map +1 -0
- package/dist/search/router.d.ts +61 -0
- package/dist/search/router.d.ts.map +1 -0
- package/dist/search/router.js +197 -0
- package/dist/search/router.js.map +1 -0
- package/dist/search/solver.d.ts +75 -0
- package/dist/search/solver.d.ts.map +1 -0
- package/dist/search/solver.js +216 -0
- package/dist/search/solver.js.map +1 -0
- package/dist/search/verification-runner.d.ts +125 -0
- package/dist/search/verification-runner.d.ts.map +1 -0
- package/dist/search/verification-runner.js +440 -0
- package/dist/search/verification-runner.js.map +1 -0
- package/dist/surfacing/index.d.ts +2 -0
- package/dist/surfacing/index.d.ts.map +1 -0
- package/dist/surfacing/index.js +2 -0
- package/dist/surfacing/index.js.map +1 -0
- package/dist/surfacing/skill-library.d.ts +158 -0
- package/dist/surfacing/skill-library.d.ts.map +1 -0
- package/dist/surfacing/skill-library.js +429 -0
- package/dist/surfacing/skill-library.js.map +1 -0
- package/dist/types/config.d.ts +1113 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +274 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/index.d.ts +9 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +14 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/memory.d.ts +339 -0
- package/dist/types/memory.d.ts.map +1 -0
- package/dist/types/memory.js +207 -0
- package/dist/types/memory.js.map +1 -0
- package/dist/types/meta.d.ts +146 -0
- package/dist/types/meta.d.ts.map +1 -0
- package/dist/types/meta.js +51 -0
- package/dist/types/meta.js.map +1 -0
- package/dist/types/outcome.d.ts +42 -0
- package/dist/types/outcome.d.ts.map +1 -0
- package/dist/types/outcome.js +50 -0
- package/dist/types/outcome.js.map +1 -0
- package/dist/types/playbook.d.ts +119 -0
- package/dist/types/playbook.d.ts.map +1 -0
- package/dist/types/playbook.js +71 -0
- package/dist/types/playbook.js.map +1 -0
- package/dist/types/step.d.ts +44 -0
- package/dist/types/step.d.ts.map +1 -0
- package/dist/types/step.js +32 -0
- package/dist/types/step.js.map +1 -0
- package/dist/types/task.d.ts +91 -0
- package/dist/types/task.d.ts.map +1 -0
- package/dist/types/task.js +39 -0
- package/dist/types/task.js.map +1 -0
- package/dist/types/trajectory.d.ts +221 -0
- package/dist/types/trajectory.d.ts.map +1 -0
- package/dist/types/trajectory.js +60 -0
- package/dist/types/trajectory.js.map +1 -0
- package/dist/utils/index.d.ts +4 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +4 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/similarity.d.ts +31 -0
- package/dist/utils/similarity.d.ts.map +1 -0
- package/dist/utils/similarity.js +107 -0
- package/dist/utils/similarity.js.map +1 -0
- package/dist/utils/storage.d.ts +106 -0
- package/dist/utils/storage.d.ts.map +1 -0
- package/dist/utils/storage.js +203 -0
- package/dist/utils/storage.js.map +1 -0
- package/dist/utils/validation.d.ts +129 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +171 -0
- package/dist/utils/validation.js.map +1 -0
- package/package.json +50 -34
- package/scripts/migrate-to-playbooks.ts +307 -0
- package/src/agents/index.ts +14 -0
- package/src/agents/mock-provider.ts +93 -0
- package/src/agents/types.ts +137 -0
- package/src/atlas.ts +560 -0
- package/src/bin/cognitive-core.ts +470 -0
- package/src/embeddings/bm25.ts +337 -0
- package/src/embeddings/index.ts +39 -0
- package/src/embeddings/manager.ts +288 -0
- package/src/embeddings/provider.ts +311 -0
- package/src/embeddings/vector-store.ts +353 -0
- package/src/factory.ts +263 -0
- package/src/index.ts +246 -0
- package/src/learning/analyzer.ts +335 -0
- package/src/learning/effectiveness.ts +428 -0
- package/src/learning/index.ts +58 -0
- package/src/learning/llm-extractor.ts +542 -0
- package/src/learning/meta-learner.ts +516 -0
- package/src/learning/pipeline.ts +244 -0
- package/src/learning/playbook-extractor.ts +702 -0
- package/src/learning/usage-inference.ts +372 -0
- package/src/mcp/index.ts +12 -0
- package/src/mcp/playbook-server.ts +565 -0
- package/src/memory/curated-loader.ts +160 -0
- package/src/memory/experience.ts +515 -0
- package/src/memory/index.ts +27 -0
- package/src/memory/meta.ts +506 -0
- package/src/memory/playbook.ts +493 -0
- package/src/memory/system.ts +551 -0
- package/src/runtime/backends/acp.ts +378 -0
- package/src/runtime/backends/index.ts +24 -0
- package/src/runtime/backends/mock.ts +218 -0
- package/src/runtime/backends/subprocess.ts +356 -0
- package/src/runtime/flows/learning.ts +183 -0
- package/src/runtime/flows/validation.ts +381 -0
- package/src/runtime/index.ts +53 -0
- package/src/runtime/manager.ts +541 -0
- package/src/runtime/types.ts +157 -0
- package/src/search/evaluator.ts +474 -0
- package/src/search/index.ts +59 -0
- package/src/search/refinement-loop.ts +363 -0
- package/src/search/refinement-types.ts +159 -0
- package/src/search/router.ts +261 -0
- package/src/search/solver.ts +303 -0
- package/src/search/verification-runner.ts +570 -0
- package/src/surfacing/index.ts +6 -0
- package/src/surfacing/skill-library.ts +594 -0
- package/src/types/config.ts +333 -0
- package/src/types/index.ts +130 -0
- package/src/types/memory.ts +270 -0
- package/src/types/meta.ts +218 -0
- package/src/types/outcome.ts +66 -0
- package/src/types/playbook.ts +196 -0
- package/src/types/step.ts +40 -0
- package/src/types/task.ts +52 -0
- package/src/types/trajectory.ts +80 -0
- package/src/utils/index.ts +38 -0
- package/src/utils/similarity.ts +139 -0
- package/src/utils/storage.ts +249 -0
- package/src/utils/validation.ts +286 -0
- package/tests/embeddings/bm25.test.ts +130 -0
- package/tests/embeddings/manager.test.ts +205 -0
- package/tests/integration/atlas.test.ts +266 -0
- package/tests/integration/e2e.test.ts +929 -0
- package/tests/learning/analyzer.test.ts +426 -0
- package/tests/learning/effectiveness.test.ts +542 -0
- package/tests/learning/pipeline.test.ts +176 -0
- package/tests/learning/playbook-extractor-provenance.test.ts +114 -0
- package/tests/learning/usage-inference.test.ts +254 -0
- package/tests/mcp/playbook-server.test.ts +252 -0
- package/tests/memory/experience.test.ts +198 -0
- package/tests/memory/playbook.test.ts +338 -0
- package/tests/memory/provenance.test.ts +639 -0
- package/tests/memory/system.test.ts +325 -0
- package/tests/runtime/agent-manager.test.ts +512 -0
- package/tests/runtime/mock-backend.test.ts +248 -0
- package/tests/search/refinement-loop.test.ts +468 -0
- package/tests/search/refinement.test.ts +267 -0
- package/tests/search/router.test.ts +427 -0
- package/tests/surfacing/skill-library.test.ts +292 -0
- package/tests/types/outcome.test.ts +147 -0
- package/tests/types/step.test.ts +133 -0
- package/tests/types/task.test.ts +158 -0
- package/tests/types/trajectory.test.ts +253 -0
- package/tests/utils/similarity.test.ts +188 -0
- package/tests/utils/validation.test.ts +252 -0
- package/tsconfig.json +25 -0
- package/vitest.config.ts +22 -0
- package/dist/index.d.mts +0 -466
- package/dist/index.mjs +0 -478
package/package.json
CHANGED
|
@@ -1,54 +1,70 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "cognitive-core",
|
|
3
|
-
"version": "0.0
|
|
4
|
-
"description": "TypeScript
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "TypeScript-native cognitive core for adaptive learning and abstraction",
|
|
5
|
+
"type": "module",
|
|
5
6
|
"main": "dist/index.js",
|
|
6
|
-
"module": "dist/index.mjs",
|
|
7
7
|
"types": "dist/index.d.ts",
|
|
8
|
+
"bin": {
|
|
9
|
+
"cognitive-core": "./dist/bin/cognitive-core.js"
|
|
10
|
+
},
|
|
8
11
|
"exports": {
|
|
9
12
|
".": {
|
|
10
|
-
"
|
|
11
|
-
"
|
|
12
|
-
|
|
13
|
+
"import": "./dist/index.js",
|
|
14
|
+
"types": "./dist/index.d.ts"
|
|
15
|
+
},
|
|
16
|
+
"./memory": {
|
|
17
|
+
"import": "./dist/memory/index.js",
|
|
18
|
+
"types": "./dist/memory/index.d.ts"
|
|
19
|
+
},
|
|
20
|
+
"./learning": {
|
|
21
|
+
"import": "./dist/learning/index.js",
|
|
22
|
+
"types": "./dist/learning/index.d.ts"
|
|
23
|
+
},
|
|
24
|
+
"./agents": {
|
|
25
|
+
"import": "./dist/agents/index.js",
|
|
26
|
+
"types": "./dist/agents/index.d.ts"
|
|
27
|
+
},
|
|
28
|
+
"./embeddings": {
|
|
29
|
+
"import": "./dist/embeddings/index.js",
|
|
30
|
+
"types": "./dist/embeddings/index.d.ts"
|
|
13
31
|
}
|
|
14
32
|
},
|
|
15
|
-
"files": [
|
|
16
|
-
"dist"
|
|
17
|
-
],
|
|
18
33
|
"scripts": {
|
|
19
|
-
"build": "
|
|
20
|
-
"dev": "
|
|
21
|
-
"
|
|
22
|
-
"test": "vitest run",
|
|
23
|
-
"
|
|
24
|
-
"
|
|
34
|
+
"build": "tsc",
|
|
35
|
+
"dev": "tsc --watch",
|
|
36
|
+
"test": "vitest",
|
|
37
|
+
"test:run": "vitest run",
|
|
38
|
+
"lint": "eslint src --ext .ts",
|
|
39
|
+
"typecheck": "tsc --noEmit"
|
|
25
40
|
},
|
|
26
41
|
"keywords": [
|
|
27
42
|
"cognitive",
|
|
28
|
-
"
|
|
29
|
-
"
|
|
30
|
-
"
|
|
31
|
-
"
|
|
32
|
-
"
|
|
43
|
+
"learning",
|
|
44
|
+
"agent",
|
|
45
|
+
"memory",
|
|
46
|
+
"strategy",
|
|
47
|
+
"concept",
|
|
48
|
+
"skill"
|
|
33
49
|
],
|
|
34
|
-
"author": "
|
|
50
|
+
"author": "",
|
|
35
51
|
"license": "MIT",
|
|
36
|
-
"repository": {
|
|
37
|
-
"type": "git",
|
|
38
|
-
"url": "https://github.com/alexngai/meta-learning-engine",
|
|
39
|
-
"directory": "ts"
|
|
40
|
-
},
|
|
41
|
-
"bugs": {
|
|
42
|
-
"url": "https://github.com/alexngai/meta-learning-engine/issues"
|
|
43
|
-
},
|
|
44
|
-
"homepage": "https://github.com/alexngai/meta-learning-engine#readme",
|
|
45
|
-
"engines": {
|
|
46
|
-
"node": ">=18.0.0"
|
|
47
|
-
},
|
|
48
52
|
"devDependencies": {
|
|
53
|
+
"@types/better-sqlite3": "^7.6.8",
|
|
49
54
|
"@types/node": "^20.10.0",
|
|
50
|
-
"
|
|
55
|
+
"eslint": "^8.55.0",
|
|
51
56
|
"typescript": "^5.3.0",
|
|
52
57
|
"vitest": "^1.0.0"
|
|
58
|
+
},
|
|
59
|
+
"dependencies": {
|
|
60
|
+
"@agentclientprotocol/sdk": "^0.13.1",
|
|
61
|
+
"@huggingface/transformers": "^3.0.0",
|
|
62
|
+
"acp-factory": "^0.1.7",
|
|
63
|
+
"better-sqlite3": "^9.0.0",
|
|
64
|
+
"sqlite-vec": "^0.1.6",
|
|
65
|
+
"zod": "^3.22.0"
|
|
66
|
+
},
|
|
67
|
+
"engines": {
|
|
68
|
+
"node": ">=18.0.0"
|
|
53
69
|
}
|
|
54
70
|
}
|
|
@@ -0,0 +1,307 @@
|
|
|
1
|
+
#!/usr/bin/env npx tsx
|
|
2
|
+
/**
|
|
3
|
+
* Migration Script: Strategy + Skill → Playbook
|
|
4
|
+
*
|
|
5
|
+
* Converts existing Strategy and Skill data to the new Playbook format.
|
|
6
|
+
* Run this script to migrate your data after updating to the new architecture.
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* npx tsx scripts/migrate-to-playbooks.ts [--data-dir=.atlas] [--dry-run]
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import { readFileSync, writeFileSync, existsSync, mkdirSync } from 'node:fs';
|
|
13
|
+
import { join } from 'node:path';
|
|
14
|
+
import type { Strategy, Skill, Playbook } from '../src/types/index.js';
|
|
15
|
+
import { createPlaybook } from '../src/types/index.js';
|
|
16
|
+
import { textSimilarity } from '../src/utils/similarity.js';
|
|
17
|
+
|
|
18
|
+
// Parse command line arguments
|
|
19
|
+
const args = process.argv.slice(2);
|
|
20
|
+
const dryRun = args.includes('--dry-run');
|
|
21
|
+
const dataDirArg = args.find((a) => a.startsWith('--data-dir='));
|
|
22
|
+
const dataDir = dataDirArg ? dataDirArg.split('=')[1] : '.atlas';
|
|
23
|
+
|
|
24
|
+
console.log('=== Playbook Migration Script ===\n');
|
|
25
|
+
console.log(`Data directory: ${dataDir}`);
|
|
26
|
+
console.log(`Dry run: ${dryRun}\n`);
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Load JSON data from a file
|
|
30
|
+
*/
|
|
31
|
+
function loadJsonData<T>(filePath: string): T | null {
|
|
32
|
+
if (!existsSync(filePath)) {
|
|
33
|
+
console.log(` File not found: ${filePath}`);
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
try {
|
|
38
|
+
const content = readFileSync(filePath, 'utf-8');
|
|
39
|
+
return JSON.parse(content) as T;
|
|
40
|
+
} catch (error) {
|
|
41
|
+
console.error(` Error reading ${filePath}:`, error);
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Save JSON data to a file
|
|
48
|
+
*/
|
|
49
|
+
function saveJsonData(filePath: string, data: unknown): void {
|
|
50
|
+
if (dryRun) {
|
|
51
|
+
console.log(` [DRY RUN] Would write to: ${filePath}`);
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
const dir = filePath.substring(0, filePath.lastIndexOf('/'));
|
|
56
|
+
if (!existsSync(dir)) {
|
|
57
|
+
mkdirSync(dir, { recursive: true });
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
writeFileSync(filePath, JSON.stringify(data, null, 2));
|
|
61
|
+
console.log(` Written: ${filePath}`);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Generate a kebab-case playbook name
|
|
66
|
+
*/
|
|
67
|
+
function generatePlaybookName(text: string): string {
|
|
68
|
+
return text
|
|
69
|
+
.toLowerCase()
|
|
70
|
+
.replace(/[^\w\s]/g, '')
|
|
71
|
+
.split(/\s+/)
|
|
72
|
+
.filter((w) => w.length > 2)
|
|
73
|
+
.slice(0, 4)
|
|
74
|
+
.join('-') || `playbook-${Date.now()}`;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Convert a Skill to a Playbook
|
|
79
|
+
*/
|
|
80
|
+
function skillToPlaybook(skill: Skill): Playbook {
|
|
81
|
+
return createPlaybook({
|
|
82
|
+
id: `playbook-skill-${skill.id}`,
|
|
83
|
+
name: skill.name,
|
|
84
|
+
applicability: {
|
|
85
|
+
situations: [skill.description],
|
|
86
|
+
triggers: skill.triggers || [],
|
|
87
|
+
antiPatterns: [],
|
|
88
|
+
domains: skill.domain ? [skill.domain] : [],
|
|
89
|
+
},
|
|
90
|
+
guidance: {
|
|
91
|
+
strategy: skill.description,
|
|
92
|
+
tactics: skill.solution || [],
|
|
93
|
+
steps: skill.solution || [],
|
|
94
|
+
},
|
|
95
|
+
verification: {
|
|
96
|
+
successIndicators: skill.verification ? [skill.verification] : [],
|
|
97
|
+
failureIndicators: [],
|
|
98
|
+
},
|
|
99
|
+
evolution: {
|
|
100
|
+
version: skill.version || '1.0.0',
|
|
101
|
+
createdFrom: [],
|
|
102
|
+
failures: [],
|
|
103
|
+
refinements: [],
|
|
104
|
+
successCount: Math.round((skill.usageCount || 0) * (skill.successRate || 0.5)),
|
|
105
|
+
failureCount: Math.round((skill.usageCount || 0) * (1 - (skill.successRate || 0.5))),
|
|
106
|
+
},
|
|
107
|
+
confidence: skill.successRate || 0.5,
|
|
108
|
+
complexity: (skill.solution?.length || 0) > 5 ? 'complex' : 'moderate',
|
|
109
|
+
estimatedEffort: skill.solution?.length || 3,
|
|
110
|
+
createdAt: skill.createdAt ? new Date(skill.createdAt) : new Date(),
|
|
111
|
+
updatedAt: skill.updatedAt ? new Date(skill.updatedAt) : new Date(),
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* Convert a Strategy to a Playbook
|
|
117
|
+
*/
|
|
118
|
+
function strategyToPlaybook(strategy: Strategy): Playbook {
|
|
119
|
+
return createPlaybook({
|
|
120
|
+
id: `playbook-strategy-${strategy.id}`,
|
|
121
|
+
name: generatePlaybookName(strategy.situation),
|
|
122
|
+
applicability: {
|
|
123
|
+
situations: [strategy.situation],
|
|
124
|
+
triggers: [], // Strategies are more abstract, fewer triggers
|
|
125
|
+
antiPatterns: [],
|
|
126
|
+
domains: strategy.domain ? [strategy.domain] : [],
|
|
127
|
+
},
|
|
128
|
+
guidance: {
|
|
129
|
+
strategy: strategy.suggestion,
|
|
130
|
+
tactics: (strategy.parameters as Record<string, unknown>)?.steps as string[] || [],
|
|
131
|
+
},
|
|
132
|
+
verification: {
|
|
133
|
+
successIndicators: [],
|
|
134
|
+
failureIndicators: [],
|
|
135
|
+
},
|
|
136
|
+
evolution: {
|
|
137
|
+
version: '1.0.0',
|
|
138
|
+
createdFrom: strategy.sourceTrajectoryIds || [],
|
|
139
|
+
failures: [],
|
|
140
|
+
refinements: [],
|
|
141
|
+
successCount: Math.round((strategy.usageCount || 0) * (strategy.successRate || 0.5)),
|
|
142
|
+
failureCount: Math.round((strategy.usageCount || 0) * (1 - (strategy.successRate || 0.5))),
|
|
143
|
+
},
|
|
144
|
+
confidence: strategy.confidence || 0.5,
|
|
145
|
+
complexity: 'moderate',
|
|
146
|
+
estimatedEffort: 3,
|
|
147
|
+
createdAt: strategy.createdAt ? new Date(strategy.createdAt) : new Date(),
|
|
148
|
+
updatedAt: strategy.updatedAt ? new Date(strategy.updatedAt) : new Date(),
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
/**
|
|
153
|
+
* Merge similar playbooks
|
|
154
|
+
*/
|
|
155
|
+
function mergePlaybooks(playbooks: Playbook[]): Playbook[] {
|
|
156
|
+
const merged: Playbook[] = [];
|
|
157
|
+
const used = new Set<string>();
|
|
158
|
+
|
|
159
|
+
for (const playbook of playbooks) {
|
|
160
|
+
if (used.has(playbook.id)) continue;
|
|
161
|
+
|
|
162
|
+
// Find similar playbooks
|
|
163
|
+
let current = playbook;
|
|
164
|
+
for (const other of playbooks) {
|
|
165
|
+
if (used.has(other.id) || other.id === current.id) continue;
|
|
166
|
+
|
|
167
|
+
// Check similarity
|
|
168
|
+
const situationSimilarity = Math.max(
|
|
169
|
+
...current.applicability.situations.flatMap((s1) =>
|
|
170
|
+
other.applicability.situations.map((s2) => textSimilarity(s1, s2))
|
|
171
|
+
),
|
|
172
|
+
0
|
|
173
|
+
);
|
|
174
|
+
|
|
175
|
+
if (situationSimilarity > 0.85) {
|
|
176
|
+
// Merge
|
|
177
|
+
console.log(` Merging: ${other.name} into ${current.name}`);
|
|
178
|
+
current = {
|
|
179
|
+
...current,
|
|
180
|
+
applicability: {
|
|
181
|
+
...current.applicability,
|
|
182
|
+
situations: [...new Set([...current.applicability.situations, ...other.applicability.situations])],
|
|
183
|
+
triggers: [...new Set([...current.applicability.triggers, ...other.applicability.triggers])],
|
|
184
|
+
domains: [...new Set([...current.applicability.domains, ...other.applicability.domains])],
|
|
185
|
+
},
|
|
186
|
+
guidance: {
|
|
187
|
+
...current.guidance,
|
|
188
|
+
tactics: [...new Set([...current.guidance.tactics, ...other.guidance.tactics])],
|
|
189
|
+
},
|
|
190
|
+
evolution: {
|
|
191
|
+
...current.evolution,
|
|
192
|
+
createdFrom: [...new Set([...current.evolution.createdFrom, ...other.evolution.createdFrom])],
|
|
193
|
+
successCount: current.evolution.successCount + other.evolution.successCount,
|
|
194
|
+
failureCount: current.evolution.failureCount + other.evolution.failureCount,
|
|
195
|
+
},
|
|
196
|
+
confidence: Math.max(current.confidence, other.confidence),
|
|
197
|
+
};
|
|
198
|
+
used.add(other.id);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
merged.push(current);
|
|
203
|
+
used.add(current.id);
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
return merged;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
/**
|
|
210
|
+
* Main migration function
|
|
211
|
+
*/
|
|
212
|
+
async function migrate(): Promise<void> {
|
|
213
|
+
console.log('Step 1: Loading existing data...\n');
|
|
214
|
+
|
|
215
|
+
// Load strategies
|
|
216
|
+
const strategiesPath = join(dataDir, 'strategies.json');
|
|
217
|
+
const strategiesData = loadJsonData<Record<string, Strategy>>(strategiesPath);
|
|
218
|
+
const strategies = strategiesData ? Object.values(strategiesData) : [];
|
|
219
|
+
console.log(` Found ${strategies.length} strategies`);
|
|
220
|
+
|
|
221
|
+
// Load skills
|
|
222
|
+
const skillsPath = join(dataDir, 'skills.json');
|
|
223
|
+
const skillsData = loadJsonData<Record<string, Skill>>(skillsPath);
|
|
224
|
+
const skills = skillsData ? Object.values(skillsData) : [];
|
|
225
|
+
console.log(` Found ${skills.length} skills`);
|
|
226
|
+
|
|
227
|
+
if (strategies.length === 0 && skills.length === 0) {
|
|
228
|
+
console.log('\nNo data to migrate. Exiting.');
|
|
229
|
+
return;
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
console.log('\nStep 2: Converting to playbooks...\n');
|
|
233
|
+
|
|
234
|
+
// Convert skills first (they're more concrete)
|
|
235
|
+
const fromSkills = skills.map(skillToPlaybook);
|
|
236
|
+
console.log(` Converted ${fromSkills.length} skills to playbooks`);
|
|
237
|
+
|
|
238
|
+
// Convert strategies
|
|
239
|
+
const fromStrategies = strategies.map(strategyToPlaybook);
|
|
240
|
+
console.log(` Converted ${fromStrategies.length} strategies to playbooks`);
|
|
241
|
+
|
|
242
|
+
// Combine
|
|
243
|
+
const allPlaybooks = [...fromSkills, ...fromStrategies];
|
|
244
|
+
|
|
245
|
+
console.log('\nStep 3: Merging similar playbooks...\n');
|
|
246
|
+
const mergedPlaybooks = mergePlaybooks(allPlaybooks);
|
|
247
|
+
console.log(` Merged to ${mergedPlaybooks.length} unique playbooks`);
|
|
248
|
+
|
|
249
|
+
console.log('\nStep 4: Saving playbooks...\n');
|
|
250
|
+
|
|
251
|
+
// Create playbooks record
|
|
252
|
+
const playbooksRecord: Record<string, Playbook> = {};
|
|
253
|
+
for (const playbook of mergedPlaybooks) {
|
|
254
|
+
playbooksRecord[playbook.id] = playbook;
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
// Save playbooks
|
|
258
|
+
const playbooksPath = join(dataDir, 'playbooks.json');
|
|
259
|
+
saveJsonData(playbooksPath, playbooksRecord);
|
|
260
|
+
|
|
261
|
+
console.log('\nStep 5: Creating migration report...\n');
|
|
262
|
+
|
|
263
|
+
const report = {
|
|
264
|
+
timestamp: new Date().toISOString(),
|
|
265
|
+
dryRun,
|
|
266
|
+
source: {
|
|
267
|
+
strategiesCount: strategies.length,
|
|
268
|
+
skillsCount: skills.length,
|
|
269
|
+
},
|
|
270
|
+
result: {
|
|
271
|
+
playbooksCount: mergedPlaybooks.length,
|
|
272
|
+
mergedCount: allPlaybooks.length - mergedPlaybooks.length,
|
|
273
|
+
},
|
|
274
|
+
playbooks: mergedPlaybooks.map((p) => ({
|
|
275
|
+
id: p.id,
|
|
276
|
+
name: p.name,
|
|
277
|
+
domains: p.applicability.domains,
|
|
278
|
+
confidence: p.confidence,
|
|
279
|
+
successCount: p.evolution.successCount,
|
|
280
|
+
})),
|
|
281
|
+
};
|
|
282
|
+
|
|
283
|
+
const reportPath = join(dataDir, 'migration-report.json');
|
|
284
|
+
saveJsonData(reportPath, report);
|
|
285
|
+
|
|
286
|
+
console.log('\n=== Migration Complete ===\n');
|
|
287
|
+
console.log('Summary:');
|
|
288
|
+
console.log(` - Strategies migrated: ${strategies.length}`);
|
|
289
|
+
console.log(` - Skills migrated: ${skills.length}`);
|
|
290
|
+
console.log(` - Playbooks created: ${mergedPlaybooks.length}`);
|
|
291
|
+
console.log(` - Playbooks merged: ${allPlaybooks.length - mergedPlaybooks.length}`);
|
|
292
|
+
|
|
293
|
+
if (dryRun) {
|
|
294
|
+
console.log('\n[DRY RUN] No files were modified. Run without --dry-run to apply changes.');
|
|
295
|
+
} else {
|
|
296
|
+
console.log('\nPlaybooks saved to:', playbooksPath);
|
|
297
|
+
console.log('Migration report saved to:', reportPath);
|
|
298
|
+
console.log('\nNote: Original strategy and skill files were not modified.');
|
|
299
|
+
console.log('You can delete them after verifying the migration.');
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
// Run migration
|
|
304
|
+
migrate().catch((error) => {
|
|
305
|
+
console.error('Migration failed:', error);
|
|
306
|
+
process.exit(1);
|
|
307
|
+
});
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
// Types and base classes
|
|
2
|
+
export {
|
|
3
|
+
Agent,
|
|
4
|
+
type LLMProvider,
|
|
5
|
+
type Message,
|
|
6
|
+
type CompletionOptions,
|
|
7
|
+
type AgentConfig,
|
|
8
|
+
type ToolDefinition,
|
|
9
|
+
type ToolCall,
|
|
10
|
+
type ToolAgent,
|
|
11
|
+
} from './types.js';
|
|
12
|
+
|
|
13
|
+
// Mock provider for testing
|
|
14
|
+
export { MockLLMProvider, createMockProvider } from './mock-provider.js';
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import type { LLMProvider, Message, CompletionOptions } from './types.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Mock LLM provider for testing
|
|
5
|
+
* Returns predefined responses based on input patterns
|
|
6
|
+
*/
|
|
7
|
+
export class MockLLMProvider implements LLMProvider {
|
|
8
|
+
readonly name = 'mock';
|
|
9
|
+
|
|
10
|
+
private responses: Map<RegExp, string> = new Map();
|
|
11
|
+
|
|
12
|
+
constructor() {
|
|
13
|
+
// Default mock responses
|
|
14
|
+
this.addResponse(
|
|
15
|
+
/extract.*strateg/i,
|
|
16
|
+
`STRATEGY:
|
|
17
|
+
- Situation: When facing a debugging task with unclear error messages
|
|
18
|
+
- Suggestion: Start by reproducing the issue, then use binary search to isolate the problem
|
|
19
|
+
- Parameters: error_message, codebase_size
|
|
20
|
+
- Confidence: 0.7`
|
|
21
|
+
);
|
|
22
|
+
|
|
23
|
+
this.addResponse(
|
|
24
|
+
/extract.*concept/i,
|
|
25
|
+
`CONCEPT:
|
|
26
|
+
- Name: error-handler
|
|
27
|
+
- Description: Generic error handling wrapper function
|
|
28
|
+
- Code: \`\`\`typescript
|
|
29
|
+
function handleError<T>(fn: () => T): T | null {
|
|
30
|
+
try {
|
|
31
|
+
return fn();
|
|
32
|
+
} catch (e) {
|
|
33
|
+
console.error(e);
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
\`\`\`
|
|
38
|
+
- Signature: (() => T) -> T | null`
|
|
39
|
+
);
|
|
40
|
+
|
|
41
|
+
this.addResponse(
|
|
42
|
+
/extract.*skill|codify.*skill/i,
|
|
43
|
+
`SKILL:
|
|
44
|
+
- Name: fix-typescript-import-error
|
|
45
|
+
- Problem: Resolve TypeScript module import errors
|
|
46
|
+
- Triggers: Cannot find module, Module not found, TS2307
|
|
47
|
+
- Steps:
|
|
48
|
+
1. Check if the module is installed in package.json
|
|
49
|
+
2. Verify the import path is correct
|
|
50
|
+
3. Check tsconfig.json module resolution settings
|
|
51
|
+
4. Run npm install or yarn if module is missing
|
|
52
|
+
- Verification: Run tsc --noEmit to verify no import errors`
|
|
53
|
+
);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Add a custom response pattern
|
|
58
|
+
*/
|
|
59
|
+
addResponse(pattern: RegExp, response: string): void {
|
|
60
|
+
this.responses.set(pattern, response);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Generate a completion (mock)
|
|
65
|
+
*/
|
|
66
|
+
async complete(
|
|
67
|
+
messages: Message[],
|
|
68
|
+
_options?: CompletionOptions
|
|
69
|
+
): Promise<string> {
|
|
70
|
+
// Get the last user message
|
|
71
|
+
const lastMessage = messages.filter((m) => m.role === 'user').pop();
|
|
72
|
+
if (!lastMessage) {
|
|
73
|
+
return 'No user message found.';
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
// Check patterns
|
|
77
|
+
for (const [pattern, response] of this.responses) {
|
|
78
|
+
if (pattern.test(lastMessage.content)) {
|
|
79
|
+
return response;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
// Default response
|
|
84
|
+
return 'No matching pattern found for this request.';
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* Create a mock provider for testing
|
|
90
|
+
*/
|
|
91
|
+
export function createMockProvider(): MockLLMProvider {
|
|
92
|
+
return new MockLLMProvider();
|
|
93
|
+
}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent types and protocols for Atlas
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Message in a conversation
|
|
7
|
+
*/
|
|
8
|
+
export interface Message {
|
|
9
|
+
role: 'system' | 'user' | 'assistant';
|
|
10
|
+
content: string;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* LLM completion options
|
|
15
|
+
*/
|
|
16
|
+
export interface CompletionOptions {
|
|
17
|
+
temperature?: number;
|
|
18
|
+
maxTokens?: number;
|
|
19
|
+
stopSequences?: string[];
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* LLM provider interface
|
|
24
|
+
* Implement this to use different LLM backends
|
|
25
|
+
*/
|
|
26
|
+
export interface LLMProvider {
|
|
27
|
+
/**
|
|
28
|
+
* Generate a completion
|
|
29
|
+
*/
|
|
30
|
+
complete(
|
|
31
|
+
messages: Message[],
|
|
32
|
+
options?: CompletionOptions
|
|
33
|
+
): Promise<string>;
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Get the provider name
|
|
37
|
+
*/
|
|
38
|
+
readonly name: string;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Agent configuration
|
|
43
|
+
*/
|
|
44
|
+
export interface AgentConfig {
|
|
45
|
+
/** Name of this agent */
|
|
46
|
+
name: string;
|
|
47
|
+
/** System prompt */
|
|
48
|
+
systemPrompt: string;
|
|
49
|
+
/** LLM provider to use */
|
|
50
|
+
provider: LLMProvider;
|
|
51
|
+
/** Default completion options */
|
|
52
|
+
defaultOptions?: CompletionOptions;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Base agent class
|
|
57
|
+
*/
|
|
58
|
+
export abstract class Agent {
|
|
59
|
+
protected config: AgentConfig;
|
|
60
|
+
protected conversationHistory: Message[] = [];
|
|
61
|
+
|
|
62
|
+
constructor(config: AgentConfig) {
|
|
63
|
+
this.config = config;
|
|
64
|
+
this.reset();
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Reset the agent state
|
|
69
|
+
*/
|
|
70
|
+
reset(): void {
|
|
71
|
+
this.conversationHistory = [
|
|
72
|
+
{ role: 'system', content: this.config.systemPrompt },
|
|
73
|
+
];
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Send a message and get a response
|
|
78
|
+
*/
|
|
79
|
+
async chat(content: string, options?: CompletionOptions): Promise<string> {
|
|
80
|
+
this.conversationHistory.push({ role: 'user', content });
|
|
81
|
+
|
|
82
|
+
const response = await this.config.provider.complete(
|
|
83
|
+
this.conversationHistory,
|
|
84
|
+
{ ...this.config.defaultOptions, ...options }
|
|
85
|
+
);
|
|
86
|
+
|
|
87
|
+
this.conversationHistory.push({ role: 'assistant', content: response });
|
|
88
|
+
|
|
89
|
+
return response;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Get conversation history
|
|
94
|
+
*/
|
|
95
|
+
getHistory(): Message[] {
|
|
96
|
+
return [...this.conversationHistory];
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Get agent name
|
|
101
|
+
*/
|
|
102
|
+
get name(): string {
|
|
103
|
+
return this.config.name;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Tool definition for function calling
|
|
109
|
+
*/
|
|
110
|
+
export interface ToolDefinition {
|
|
111
|
+
name: string;
|
|
112
|
+
description: string;
|
|
113
|
+
parameters: Record<string, unknown>;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Tool call result
|
|
118
|
+
*/
|
|
119
|
+
export interface ToolCall {
|
|
120
|
+
name: string;
|
|
121
|
+
arguments: Record<string, unknown>;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* Agent with tool use capabilities
|
|
126
|
+
*/
|
|
127
|
+
export interface ToolAgent extends Agent {
|
|
128
|
+
/**
|
|
129
|
+
* Available tools
|
|
130
|
+
*/
|
|
131
|
+
readonly tools: ToolDefinition[];
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* Execute a tool
|
|
135
|
+
*/
|
|
136
|
+
executeTool(call: ToolCall): Promise<unknown>;
|
|
137
|
+
}
|