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.
Files changed (329) hide show
  1. package/README.md +302 -116
  2. package/SKILL.md +193 -0
  3. package/dist/agents/index.d.ts +3 -0
  4. package/dist/agents/index.d.ts.map +1 -0
  5. package/dist/agents/index.js +5 -0
  6. package/dist/agents/index.js.map +1 -0
  7. package/dist/agents/mock-provider.d.ts +23 -0
  8. package/dist/agents/mock-provider.d.ts.map +1 -0
  9. package/dist/agents/mock-provider.js +71 -0
  10. package/dist/agents/mock-provider.js.map +1 -0
  11. package/dist/agents/types.d.ts +98 -0
  12. package/dist/agents/types.d.ts.map +1 -0
  13. package/dist/agents/types.js +44 -0
  14. package/dist/agents/types.js.map +1 -0
  15. package/dist/atlas.d.ts +196 -0
  16. package/dist/atlas.d.ts.map +1 -0
  17. package/dist/atlas.js +373 -0
  18. package/dist/atlas.js.map +1 -0
  19. package/dist/bin/cognitive-core.d.ts +18 -0
  20. package/dist/bin/cognitive-core.d.ts.map +1 -0
  21. package/dist/bin/cognitive-core.js +419 -0
  22. package/dist/bin/cognitive-core.js.map +1 -0
  23. package/dist/embeddings/bm25.d.ts +104 -0
  24. package/dist/embeddings/bm25.d.ts.map +1 -0
  25. package/dist/embeddings/bm25.js +264 -0
  26. package/dist/embeddings/bm25.js.map +1 -0
  27. package/dist/embeddings/index.d.ts +12 -0
  28. package/dist/embeddings/index.d.ts.map +1 -0
  29. package/dist/embeddings/index.js +16 -0
  30. package/dist/embeddings/index.js.map +1 -0
  31. package/dist/embeddings/manager.d.ts +112 -0
  32. package/dist/embeddings/manager.d.ts.map +1 -0
  33. package/dist/embeddings/manager.js +215 -0
  34. package/dist/embeddings/manager.js.map +1 -0
  35. package/dist/embeddings/provider.d.ts +101 -0
  36. package/dist/embeddings/provider.d.ts.map +1 -0
  37. package/dist/embeddings/provider.js +232 -0
  38. package/dist/embeddings/provider.js.map +1 -0
  39. package/dist/embeddings/vector-store.d.ts +101 -0
  40. package/dist/embeddings/vector-store.d.ts.map +1 -0
  41. package/dist/embeddings/vector-store.js +256 -0
  42. package/dist/embeddings/vector-store.js.map +1 -0
  43. package/dist/factory.d.ts +193 -0
  44. package/dist/factory.d.ts.map +1 -0
  45. package/dist/factory.js +109 -0
  46. package/dist/factory.js.map +1 -0
  47. package/dist/index.d.ts +30 -453
  48. package/dist/index.d.ts.map +1 -0
  49. package/dist/index.js +84 -509
  50. package/dist/index.js.map +1 -0
  51. package/dist/learning/analyzer.d.ts +110 -0
  52. package/dist/learning/analyzer.d.ts.map +1 -0
  53. package/dist/learning/analyzer.js +213 -0
  54. package/dist/learning/analyzer.js.map +1 -0
  55. package/dist/learning/effectiveness.d.ts +158 -0
  56. package/dist/learning/effectiveness.d.ts.map +1 -0
  57. package/dist/learning/effectiveness.js +251 -0
  58. package/dist/learning/effectiveness.js.map +1 -0
  59. package/dist/learning/index.d.ts +8 -0
  60. package/dist/learning/index.d.ts.map +1 -0
  61. package/dist/learning/index.js +11 -0
  62. package/dist/learning/index.js.map +1 -0
  63. package/dist/learning/llm-extractor.d.ts +88 -0
  64. package/dist/learning/llm-extractor.d.ts.map +1 -0
  65. package/dist/learning/llm-extractor.js +372 -0
  66. package/dist/learning/llm-extractor.js.map +1 -0
  67. package/dist/learning/meta-learner.d.ts +80 -0
  68. package/dist/learning/meta-learner.d.ts.map +1 -0
  69. package/dist/learning/meta-learner.js +355 -0
  70. package/dist/learning/meta-learner.js.map +1 -0
  71. package/dist/learning/pipeline.d.ts +65 -0
  72. package/dist/learning/pipeline.d.ts.map +1 -0
  73. package/dist/learning/pipeline.js +170 -0
  74. package/dist/learning/pipeline.js.map +1 -0
  75. package/dist/learning/playbook-extractor.d.ts +113 -0
  76. package/dist/learning/playbook-extractor.d.ts.map +1 -0
  77. package/dist/learning/playbook-extractor.js +523 -0
  78. package/dist/learning/playbook-extractor.js.map +1 -0
  79. package/dist/learning/usage-inference.d.ts +82 -0
  80. package/dist/learning/usage-inference.d.ts.map +1 -0
  81. package/dist/learning/usage-inference.js +261 -0
  82. package/dist/learning/usage-inference.js.map +1 -0
  83. package/dist/mcp/index.d.ts +6 -0
  84. package/dist/mcp/index.d.ts.map +1 -0
  85. package/dist/mcp/index.js +6 -0
  86. package/dist/mcp/index.js.map +1 -0
  87. package/dist/mcp/playbook-server.d.ts +120 -0
  88. package/dist/mcp/playbook-server.d.ts.map +1 -0
  89. package/dist/mcp/playbook-server.js +427 -0
  90. package/dist/mcp/playbook-server.js.map +1 -0
  91. package/dist/memory/curated-loader.d.ts +62 -0
  92. package/dist/memory/curated-loader.d.ts.map +1 -0
  93. package/dist/memory/curated-loader.js +106 -0
  94. package/dist/memory/curated-loader.js.map +1 -0
  95. package/dist/memory/experience.d.ts +122 -0
  96. package/dist/memory/experience.d.ts.map +1 -0
  97. package/dist/memory/experience.js +392 -0
  98. package/dist/memory/experience.js.map +1 -0
  99. package/dist/memory/index.d.ts +6 -0
  100. package/dist/memory/index.d.ts.map +1 -0
  101. package/dist/memory/index.js +9 -0
  102. package/dist/memory/index.js.map +1 -0
  103. package/dist/memory/meta.d.ts +90 -0
  104. package/dist/memory/meta.d.ts.map +1 -0
  105. package/dist/memory/meta.js +362 -0
  106. package/dist/memory/meta.js.map +1 -0
  107. package/dist/memory/playbook.d.ts +133 -0
  108. package/dist/memory/playbook.d.ts.map +1 -0
  109. package/dist/memory/playbook.js +357 -0
  110. package/dist/memory/playbook.js.map +1 -0
  111. package/dist/memory/system.d.ts +167 -0
  112. package/dist/memory/system.d.ts.map +1 -0
  113. package/dist/memory/system.js +383 -0
  114. package/dist/memory/system.js.map +1 -0
  115. package/dist/runtime/backends/acp.d.ts +67 -0
  116. package/dist/runtime/backends/acp.d.ts.map +1 -0
  117. package/dist/runtime/backends/acp.js +290 -0
  118. package/dist/runtime/backends/acp.js.map +1 -0
  119. package/dist/runtime/backends/index.d.ts +5 -0
  120. package/dist/runtime/backends/index.d.ts.map +1 -0
  121. package/dist/runtime/backends/index.js +6 -0
  122. package/dist/runtime/backends/index.js.map +1 -0
  123. package/dist/runtime/backends/mock.d.ts +67 -0
  124. package/dist/runtime/backends/mock.d.ts.map +1 -0
  125. package/dist/runtime/backends/mock.js +153 -0
  126. package/dist/runtime/backends/mock.js.map +1 -0
  127. package/dist/runtime/backends/subprocess.d.ts +56 -0
  128. package/dist/runtime/backends/subprocess.d.ts.map +1 -0
  129. package/dist/runtime/backends/subprocess.js +260 -0
  130. package/dist/runtime/backends/subprocess.js.map +1 -0
  131. package/dist/runtime/flows/learning.d.ts +73 -0
  132. package/dist/runtime/flows/learning.d.ts.map +1 -0
  133. package/dist/runtime/flows/learning.js +116 -0
  134. package/dist/runtime/flows/learning.js.map +1 -0
  135. package/dist/runtime/flows/validation.d.ts +122 -0
  136. package/dist/runtime/flows/validation.d.ts.map +1 -0
  137. package/dist/runtime/flows/validation.js +223 -0
  138. package/dist/runtime/flows/validation.js.map +1 -0
  139. package/dist/runtime/index.d.ts +6 -0
  140. package/dist/runtime/index.d.ts.map +1 -0
  141. package/dist/runtime/index.js +8 -0
  142. package/dist/runtime/index.js.map +1 -0
  143. package/dist/runtime/manager.d.ts +116 -0
  144. package/dist/runtime/manager.d.ts.map +1 -0
  145. package/dist/runtime/manager.js +416 -0
  146. package/dist/runtime/manager.js.map +1 -0
  147. package/dist/runtime/types.d.ts +138 -0
  148. package/dist/runtime/types.d.ts.map +1 -0
  149. package/dist/runtime/types.js +2 -0
  150. package/dist/runtime/types.js.map +1 -0
  151. package/dist/search/evaluator.d.ts +102 -0
  152. package/dist/search/evaluator.d.ts.map +1 -0
  153. package/dist/search/evaluator.js +352 -0
  154. package/dist/search/evaluator.js.map +1 -0
  155. package/dist/search/index.d.ts +7 -0
  156. package/dist/search/index.d.ts.map +1 -0
  157. package/dist/search/index.js +11 -0
  158. package/dist/search/index.js.map +1 -0
  159. package/dist/search/refinement-loop.d.ts +73 -0
  160. package/dist/search/refinement-loop.d.ts.map +1 -0
  161. package/dist/search/refinement-loop.js +245 -0
  162. package/dist/search/refinement-loop.js.map +1 -0
  163. package/dist/search/refinement-types.d.ts +154 -0
  164. package/dist/search/refinement-types.d.ts.map +1 -0
  165. package/dist/search/refinement-types.js +99 -0
  166. package/dist/search/refinement-types.js.map +1 -0
  167. package/dist/search/router.d.ts +61 -0
  168. package/dist/search/router.d.ts.map +1 -0
  169. package/dist/search/router.js +197 -0
  170. package/dist/search/router.js.map +1 -0
  171. package/dist/search/solver.d.ts +75 -0
  172. package/dist/search/solver.d.ts.map +1 -0
  173. package/dist/search/solver.js +216 -0
  174. package/dist/search/solver.js.map +1 -0
  175. package/dist/search/verification-runner.d.ts +125 -0
  176. package/dist/search/verification-runner.d.ts.map +1 -0
  177. package/dist/search/verification-runner.js +440 -0
  178. package/dist/search/verification-runner.js.map +1 -0
  179. package/dist/surfacing/index.d.ts +2 -0
  180. package/dist/surfacing/index.d.ts.map +1 -0
  181. package/dist/surfacing/index.js +2 -0
  182. package/dist/surfacing/index.js.map +1 -0
  183. package/dist/surfacing/skill-library.d.ts +158 -0
  184. package/dist/surfacing/skill-library.d.ts.map +1 -0
  185. package/dist/surfacing/skill-library.js +429 -0
  186. package/dist/surfacing/skill-library.js.map +1 -0
  187. package/dist/types/config.d.ts +1113 -0
  188. package/dist/types/config.d.ts.map +1 -0
  189. package/dist/types/config.js +274 -0
  190. package/dist/types/config.js.map +1 -0
  191. package/dist/types/index.d.ts +9 -0
  192. package/dist/types/index.d.ts.map +1 -0
  193. package/dist/types/index.js +14 -0
  194. package/dist/types/index.js.map +1 -0
  195. package/dist/types/memory.d.ts +339 -0
  196. package/dist/types/memory.d.ts.map +1 -0
  197. package/dist/types/memory.js +207 -0
  198. package/dist/types/memory.js.map +1 -0
  199. package/dist/types/meta.d.ts +146 -0
  200. package/dist/types/meta.d.ts.map +1 -0
  201. package/dist/types/meta.js +51 -0
  202. package/dist/types/meta.js.map +1 -0
  203. package/dist/types/outcome.d.ts +42 -0
  204. package/dist/types/outcome.d.ts.map +1 -0
  205. package/dist/types/outcome.js +50 -0
  206. package/dist/types/outcome.js.map +1 -0
  207. package/dist/types/playbook.d.ts +119 -0
  208. package/dist/types/playbook.d.ts.map +1 -0
  209. package/dist/types/playbook.js +71 -0
  210. package/dist/types/playbook.js.map +1 -0
  211. package/dist/types/step.d.ts +44 -0
  212. package/dist/types/step.d.ts.map +1 -0
  213. package/dist/types/step.js +32 -0
  214. package/dist/types/step.js.map +1 -0
  215. package/dist/types/task.d.ts +91 -0
  216. package/dist/types/task.d.ts.map +1 -0
  217. package/dist/types/task.js +39 -0
  218. package/dist/types/task.js.map +1 -0
  219. package/dist/types/trajectory.d.ts +221 -0
  220. package/dist/types/trajectory.d.ts.map +1 -0
  221. package/dist/types/trajectory.js +60 -0
  222. package/dist/types/trajectory.js.map +1 -0
  223. package/dist/utils/index.d.ts +4 -0
  224. package/dist/utils/index.d.ts.map +1 -0
  225. package/dist/utils/index.js +4 -0
  226. package/dist/utils/index.js.map +1 -0
  227. package/dist/utils/similarity.d.ts +31 -0
  228. package/dist/utils/similarity.d.ts.map +1 -0
  229. package/dist/utils/similarity.js +107 -0
  230. package/dist/utils/similarity.js.map +1 -0
  231. package/dist/utils/storage.d.ts +106 -0
  232. package/dist/utils/storage.d.ts.map +1 -0
  233. package/dist/utils/storage.js +203 -0
  234. package/dist/utils/storage.js.map +1 -0
  235. package/dist/utils/validation.d.ts +129 -0
  236. package/dist/utils/validation.d.ts.map +1 -0
  237. package/dist/utils/validation.js +171 -0
  238. package/dist/utils/validation.js.map +1 -0
  239. package/package.json +50 -34
  240. package/scripts/migrate-to-playbooks.ts +307 -0
  241. package/src/agents/index.ts +14 -0
  242. package/src/agents/mock-provider.ts +93 -0
  243. package/src/agents/types.ts +137 -0
  244. package/src/atlas.ts +560 -0
  245. package/src/bin/cognitive-core.ts +470 -0
  246. package/src/embeddings/bm25.ts +337 -0
  247. package/src/embeddings/index.ts +39 -0
  248. package/src/embeddings/manager.ts +288 -0
  249. package/src/embeddings/provider.ts +311 -0
  250. package/src/embeddings/vector-store.ts +353 -0
  251. package/src/factory.ts +263 -0
  252. package/src/index.ts +246 -0
  253. package/src/learning/analyzer.ts +335 -0
  254. package/src/learning/effectiveness.ts +428 -0
  255. package/src/learning/index.ts +58 -0
  256. package/src/learning/llm-extractor.ts +542 -0
  257. package/src/learning/meta-learner.ts +516 -0
  258. package/src/learning/pipeline.ts +244 -0
  259. package/src/learning/playbook-extractor.ts +702 -0
  260. package/src/learning/usage-inference.ts +372 -0
  261. package/src/mcp/index.ts +12 -0
  262. package/src/mcp/playbook-server.ts +565 -0
  263. package/src/memory/curated-loader.ts +160 -0
  264. package/src/memory/experience.ts +515 -0
  265. package/src/memory/index.ts +27 -0
  266. package/src/memory/meta.ts +506 -0
  267. package/src/memory/playbook.ts +493 -0
  268. package/src/memory/system.ts +551 -0
  269. package/src/runtime/backends/acp.ts +378 -0
  270. package/src/runtime/backends/index.ts +24 -0
  271. package/src/runtime/backends/mock.ts +218 -0
  272. package/src/runtime/backends/subprocess.ts +356 -0
  273. package/src/runtime/flows/learning.ts +183 -0
  274. package/src/runtime/flows/validation.ts +381 -0
  275. package/src/runtime/index.ts +53 -0
  276. package/src/runtime/manager.ts +541 -0
  277. package/src/runtime/types.ts +157 -0
  278. package/src/search/evaluator.ts +474 -0
  279. package/src/search/index.ts +59 -0
  280. package/src/search/refinement-loop.ts +363 -0
  281. package/src/search/refinement-types.ts +159 -0
  282. package/src/search/router.ts +261 -0
  283. package/src/search/solver.ts +303 -0
  284. package/src/search/verification-runner.ts +570 -0
  285. package/src/surfacing/index.ts +6 -0
  286. package/src/surfacing/skill-library.ts +594 -0
  287. package/src/types/config.ts +333 -0
  288. package/src/types/index.ts +130 -0
  289. package/src/types/memory.ts +270 -0
  290. package/src/types/meta.ts +218 -0
  291. package/src/types/outcome.ts +66 -0
  292. package/src/types/playbook.ts +196 -0
  293. package/src/types/step.ts +40 -0
  294. package/src/types/task.ts +52 -0
  295. package/src/types/trajectory.ts +80 -0
  296. package/src/utils/index.ts +38 -0
  297. package/src/utils/similarity.ts +139 -0
  298. package/src/utils/storage.ts +249 -0
  299. package/src/utils/validation.ts +286 -0
  300. package/tests/embeddings/bm25.test.ts +130 -0
  301. package/tests/embeddings/manager.test.ts +205 -0
  302. package/tests/integration/atlas.test.ts +266 -0
  303. package/tests/integration/e2e.test.ts +929 -0
  304. package/tests/learning/analyzer.test.ts +426 -0
  305. package/tests/learning/effectiveness.test.ts +542 -0
  306. package/tests/learning/pipeline.test.ts +176 -0
  307. package/tests/learning/playbook-extractor-provenance.test.ts +114 -0
  308. package/tests/learning/usage-inference.test.ts +254 -0
  309. package/tests/mcp/playbook-server.test.ts +252 -0
  310. package/tests/memory/experience.test.ts +198 -0
  311. package/tests/memory/playbook.test.ts +338 -0
  312. package/tests/memory/provenance.test.ts +639 -0
  313. package/tests/memory/system.test.ts +325 -0
  314. package/tests/runtime/agent-manager.test.ts +512 -0
  315. package/tests/runtime/mock-backend.test.ts +248 -0
  316. package/tests/search/refinement-loop.test.ts +468 -0
  317. package/tests/search/refinement.test.ts +267 -0
  318. package/tests/search/router.test.ts +427 -0
  319. package/tests/surfacing/skill-library.test.ts +292 -0
  320. package/tests/types/outcome.test.ts +147 -0
  321. package/tests/types/step.test.ts +133 -0
  322. package/tests/types/task.test.ts +158 -0
  323. package/tests/types/trajectory.test.ts +253 -0
  324. package/tests/utils/similarity.test.ts +188 -0
  325. package/tests/utils/validation.test.ts +252 -0
  326. package/tsconfig.json +25 -0
  327. package/vitest.config.ts +22 -0
  328. package/dist/index.d.mts +0 -466
  329. 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.2",
4
- "description": "TypeScript client for Cognitive Core - A meta-learning framework",
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
- "types": "./dist/index.d.ts",
11
- "import": "./dist/index.mjs",
12
- "require": "./dist/index.js"
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": "tsup src/index.ts --format cjs,esm --dts --clean",
20
- "dev": "tsup src/index.ts --format cjs,esm --dts --watch",
21
- "lint": "eslint src/",
22
- "test": "vitest run",
23
- "test:watch": "vitest",
24
- "prepublishOnly": "npm run build"
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
- "meta-learning",
29
- "ai",
30
- "agents",
31
- "trajectories",
32
- "arc-agi"
43
+ "learning",
44
+ "agent",
45
+ "memory",
46
+ "strategy",
47
+ "concept",
48
+ "skill"
33
49
  ],
34
- "author": "Alex Ngai",
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
- "tsup": "^8.0.0",
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
+ }