cognitive-core 0.0.2 → 0.1.2

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 (857) hide show
  1. package/.claude/settings.json +88 -0
  2. package/.claude/settings.local.json +11 -0
  3. package/.entire/settings.json +4 -0
  4. package/README.md +563 -107
  5. package/SKILL.md +193 -0
  6. package/dist/agents/index.d.ts +3 -0
  7. package/dist/agents/index.d.ts.map +1 -0
  8. package/dist/agents/index.js +5 -0
  9. package/dist/agents/index.js.map +1 -0
  10. package/dist/agents/mock-provider.d.ts +23 -0
  11. package/dist/agents/mock-provider.d.ts.map +1 -0
  12. package/dist/agents/mock-provider.js +71 -0
  13. package/dist/agents/mock-provider.js.map +1 -0
  14. package/dist/agents/types.d.ts +98 -0
  15. package/dist/agents/types.d.ts.map +1 -0
  16. package/dist/agents/types.js +44 -0
  17. package/dist/agents/types.js.map +1 -0
  18. package/dist/atlas.d.ts +334 -0
  19. package/dist/atlas.d.ts.map +1 -0
  20. package/dist/atlas.js +702 -0
  21. package/dist/atlas.js.map +1 -0
  22. package/dist/bin/cognitive-core.d.ts +18 -0
  23. package/dist/bin/cognitive-core.d.ts.map +1 -0
  24. package/dist/bin/cognitive-core.js +419 -0
  25. package/dist/bin/cognitive-core.js.map +1 -0
  26. package/dist/embeddings/bm25.d.ts +104 -0
  27. package/dist/embeddings/bm25.d.ts.map +1 -0
  28. package/dist/embeddings/bm25.js +264 -0
  29. package/dist/embeddings/bm25.js.map +1 -0
  30. package/dist/embeddings/index.d.ts +12 -0
  31. package/dist/embeddings/index.d.ts.map +1 -0
  32. package/dist/embeddings/index.js +16 -0
  33. package/dist/embeddings/index.js.map +1 -0
  34. package/dist/embeddings/manager.d.ts +112 -0
  35. package/dist/embeddings/manager.d.ts.map +1 -0
  36. package/dist/embeddings/manager.js +215 -0
  37. package/dist/embeddings/manager.js.map +1 -0
  38. package/dist/embeddings/provider.d.ts +101 -0
  39. package/dist/embeddings/provider.d.ts.map +1 -0
  40. package/dist/embeddings/provider.js +235 -0
  41. package/dist/embeddings/provider.js.map +1 -0
  42. package/dist/embeddings/vector-store.d.ts +101 -0
  43. package/dist/embeddings/vector-store.d.ts.map +1 -0
  44. package/dist/embeddings/vector-store.js +256 -0
  45. package/dist/embeddings/vector-store.js.map +1 -0
  46. package/dist/factory.d.ts +193 -0
  47. package/dist/factory.d.ts.map +1 -0
  48. package/dist/factory.js +109 -0
  49. package/dist/factory.js.map +1 -0
  50. package/dist/index.d.ts +32 -453
  51. package/dist/index.d.ts.map +1 -0
  52. package/dist/index.js +115 -509
  53. package/dist/index.js.map +1 -0
  54. package/dist/learning/analyzer.d.ts +110 -0
  55. package/dist/learning/analyzer.d.ts.map +1 -0
  56. package/dist/learning/analyzer.js +213 -0
  57. package/dist/learning/analyzer.js.map +1 -0
  58. package/dist/learning/effectiveness.d.ts +158 -0
  59. package/dist/learning/effectiveness.d.ts.map +1 -0
  60. package/dist/learning/effectiveness.js +251 -0
  61. package/dist/learning/effectiveness.js.map +1 -0
  62. package/dist/learning/index.d.ts +12 -0
  63. package/dist/learning/index.d.ts.map +1 -0
  64. package/dist/learning/index.js +17 -0
  65. package/dist/learning/index.js.map +1 -0
  66. package/dist/learning/knowledge-extractor.d.ts +56 -0
  67. package/dist/learning/knowledge-extractor.d.ts.map +1 -0
  68. package/dist/learning/knowledge-extractor.js +336 -0
  69. package/dist/learning/knowledge-extractor.js.map +1 -0
  70. package/dist/learning/llm-extractor.d.ts +88 -0
  71. package/dist/learning/llm-extractor.d.ts.map +1 -0
  72. package/dist/learning/llm-extractor.js +372 -0
  73. package/dist/learning/llm-extractor.js.map +1 -0
  74. package/dist/learning/meta-learner.d.ts +87 -0
  75. package/dist/learning/meta-learner.d.ts.map +1 -0
  76. package/dist/learning/meta-learner.js +398 -0
  77. package/dist/learning/meta-learner.js.map +1 -0
  78. package/dist/learning/pipeline.d.ts +89 -0
  79. package/dist/learning/pipeline.d.ts.map +1 -0
  80. package/dist/learning/pipeline.js +236 -0
  81. package/dist/learning/pipeline.js.map +1 -0
  82. package/dist/learning/playbook-extractor.d.ts +113 -0
  83. package/dist/learning/playbook-extractor.d.ts.map +1 -0
  84. package/dist/learning/playbook-extractor.js +523 -0
  85. package/dist/learning/playbook-extractor.js.map +1 -0
  86. package/dist/learning/team-ingester.d.ts +152 -0
  87. package/dist/learning/team-ingester.d.ts.map +1 -0
  88. package/dist/learning/team-ingester.js +333 -0
  89. package/dist/learning/team-ingester.js.map +1 -0
  90. package/dist/learning/team-meta-learner.d.ts +50 -0
  91. package/dist/learning/team-meta-learner.d.ts.map +1 -0
  92. package/dist/learning/team-meta-learner.js +417 -0
  93. package/dist/learning/team-meta-learner.js.map +1 -0
  94. package/dist/learning/team-pipeline.d.ts +76 -0
  95. package/dist/learning/team-pipeline.d.ts.map +1 -0
  96. package/dist/learning/team-pipeline.js +266 -0
  97. package/dist/learning/team-pipeline.js.map +1 -0
  98. package/dist/learning/trajectory-sources/dataclaw.d.ts +41 -0
  99. package/dist/learning/trajectory-sources/dataclaw.d.ts.map +1 -0
  100. package/dist/learning/trajectory-sources/dataclaw.js +330 -0
  101. package/dist/learning/trajectory-sources/dataclaw.js.map +1 -0
  102. package/dist/learning/trajectory-sources/entire.d.ts +28 -0
  103. package/dist/learning/trajectory-sources/entire.d.ts.map +1 -0
  104. package/dist/learning/trajectory-sources/entire.js +182 -0
  105. package/dist/learning/trajectory-sources/entire.js.map +1 -0
  106. package/dist/learning/trajectory-sources/file.d.ts +23 -0
  107. package/dist/learning/trajectory-sources/file.d.ts.map +1 -0
  108. package/dist/learning/trajectory-sources/file.js +101 -0
  109. package/dist/learning/trajectory-sources/file.js.map +1 -0
  110. package/dist/learning/trajectory-sources/huggingface.d.ts +36 -0
  111. package/dist/learning/trajectory-sources/huggingface.d.ts.map +1 -0
  112. package/dist/learning/trajectory-sources/huggingface.js +157 -0
  113. package/dist/learning/trajectory-sources/huggingface.js.map +1 -0
  114. package/dist/learning/trajectory-sources/in-memory.d.ts +21 -0
  115. package/dist/learning/trajectory-sources/in-memory.d.ts.map +1 -0
  116. package/dist/learning/trajectory-sources/in-memory.js +43 -0
  117. package/dist/learning/trajectory-sources/in-memory.js.map +1 -0
  118. package/dist/learning/trajectory-sources/index.d.ts +7 -0
  119. package/dist/learning/trajectory-sources/index.d.ts.map +1 -0
  120. package/dist/learning/trajectory-sources/index.js +7 -0
  121. package/dist/learning/trajectory-sources/index.js.map +1 -0
  122. package/dist/learning/trajectory-sources/pipeline.d.ts +24 -0
  123. package/dist/learning/trajectory-sources/pipeline.d.ts.map +1 -0
  124. package/dist/learning/trajectory-sources/pipeline.js +47 -0
  125. package/dist/learning/trajectory-sources/pipeline.js.map +1 -0
  126. package/dist/learning/usage-inference.d.ts +82 -0
  127. package/dist/learning/usage-inference.d.ts.map +1 -0
  128. package/dist/learning/usage-inference.js +261 -0
  129. package/dist/learning/usage-inference.js.map +1 -0
  130. package/dist/mcp/index.d.ts +6 -0
  131. package/dist/mcp/index.d.ts.map +1 -0
  132. package/dist/mcp/index.js +6 -0
  133. package/dist/mcp/index.js.map +1 -0
  134. package/dist/mcp/playbook-server.d.ts +120 -0
  135. package/dist/mcp/playbook-server.d.ts.map +1 -0
  136. package/dist/mcp/playbook-server.js +427 -0
  137. package/dist/mcp/playbook-server.js.map +1 -0
  138. package/dist/memory/curated-loader.d.ts +62 -0
  139. package/dist/memory/curated-loader.d.ts.map +1 -0
  140. package/dist/memory/curated-loader.js +106 -0
  141. package/dist/memory/curated-loader.js.map +1 -0
  142. package/dist/memory/experience.d.ts +122 -0
  143. package/dist/memory/experience.d.ts.map +1 -0
  144. package/dist/memory/experience.js +392 -0
  145. package/dist/memory/experience.js.map +1 -0
  146. package/dist/memory/graph-layers/base.d.ts +29 -0
  147. package/dist/memory/graph-layers/base.d.ts.map +1 -0
  148. package/dist/memory/graph-layers/base.js +143 -0
  149. package/dist/memory/graph-layers/base.js.map +1 -0
  150. package/dist/memory/graph-layers/causal.d.ts +14 -0
  151. package/dist/memory/graph-layers/causal.d.ts.map +1 -0
  152. package/dist/memory/graph-layers/causal.js +14 -0
  153. package/dist/memory/graph-layers/causal.js.map +1 -0
  154. package/dist/memory/graph-layers/entity.d.ts +14 -0
  155. package/dist/memory/graph-layers/entity.d.ts.map +1 -0
  156. package/dist/memory/graph-layers/entity.js +14 -0
  157. package/dist/memory/graph-layers/entity.js.map +1 -0
  158. package/dist/memory/graph-layers/index.d.ts +6 -0
  159. package/dist/memory/graph-layers/index.d.ts.map +1 -0
  160. package/dist/memory/graph-layers/index.js +6 -0
  161. package/dist/memory/graph-layers/index.js.map +1 -0
  162. package/dist/memory/graph-layers/semantic.d.ts +14 -0
  163. package/dist/memory/graph-layers/semantic.d.ts.map +1 -0
  164. package/dist/memory/graph-layers/semantic.js +14 -0
  165. package/dist/memory/graph-layers/semantic.js.map +1 -0
  166. package/dist/memory/graph-layers/temporal.d.ts +14 -0
  167. package/dist/memory/graph-layers/temporal.d.ts.map +1 -0
  168. package/dist/memory/graph-layers/temporal.js +14 -0
  169. package/dist/memory/graph-layers/temporal.js.map +1 -0
  170. package/dist/memory/index.d.ts +14 -0
  171. package/dist/memory/index.d.ts.map +1 -0
  172. package/dist/memory/index.js +19 -0
  173. package/dist/memory/index.js.map +1 -0
  174. package/dist/memory/knowledge-bank.d.ts +220 -0
  175. package/dist/memory/knowledge-bank.d.ts.map +1 -0
  176. package/dist/memory/knowledge-bank.js +1003 -0
  177. package/dist/memory/knowledge-bank.js.map +1 -0
  178. package/dist/memory/knowledge-defrag.d.ts +49 -0
  179. package/dist/memory/knowledge-defrag.d.ts.map +1 -0
  180. package/dist/memory/knowledge-defrag.js +257 -0
  181. package/dist/memory/knowledge-defrag.js.map +1 -0
  182. package/dist/memory/knowledge-graph.d.ts +41 -0
  183. package/dist/memory/knowledge-graph.d.ts.map +1 -0
  184. package/dist/memory/knowledge-graph.js +273 -0
  185. package/dist/memory/knowledge-graph.js.map +1 -0
  186. package/dist/memory/meta.d.ts +90 -0
  187. package/dist/memory/meta.d.ts.map +1 -0
  188. package/dist/memory/meta.js +362 -0
  189. package/dist/memory/meta.js.map +1 -0
  190. package/dist/memory/playbook.d.ts +133 -0
  191. package/dist/memory/playbook.d.ts.map +1 -0
  192. package/dist/memory/playbook.js +357 -0
  193. package/dist/memory/playbook.js.map +1 -0
  194. package/dist/memory/search-provider.d.ts +31 -0
  195. package/dist/memory/search-provider.d.ts.map +1 -0
  196. package/dist/memory/search-provider.js +2 -0
  197. package/dist/memory/search-provider.js.map +1 -0
  198. package/dist/memory/search-providers/index.d.ts +3 -0
  199. package/dist/memory/search-providers/index.d.ts.map +1 -0
  200. package/dist/memory/search-providers/index.js +3 -0
  201. package/dist/memory/search-providers/index.js.map +1 -0
  202. package/dist/memory/search-providers/minimem.d.ts +43 -0
  203. package/dist/memory/search-providers/minimem.d.ts.map +1 -0
  204. package/dist/memory/search-providers/minimem.js +56 -0
  205. package/dist/memory/search-providers/minimem.js.map +1 -0
  206. package/dist/memory/search-providers/text-similarity.d.ts +15 -0
  207. package/dist/memory/search-providers/text-similarity.d.ts.map +1 -0
  208. package/dist/memory/search-providers/text-similarity.js +21 -0
  209. package/dist/memory/search-providers/text-similarity.js.map +1 -0
  210. package/dist/memory/skill-exporter.d.ts +75 -0
  211. package/dist/memory/skill-exporter.d.ts.map +1 -0
  212. package/dist/memory/skill-exporter.js +248 -0
  213. package/dist/memory/skill-exporter.js.map +1 -0
  214. package/dist/memory/system.d.ts +179 -0
  215. package/dist/memory/system.d.ts.map +1 -0
  216. package/dist/memory/system.js +421 -0
  217. package/dist/memory/system.js.map +1 -0
  218. package/dist/memory/team-experience.d.ts +298 -0
  219. package/dist/memory/team-experience.d.ts.map +1 -0
  220. package/dist/memory/team-experience.js +355 -0
  221. package/dist/memory/team-experience.js.map +1 -0
  222. package/dist/runtime/backends/acp-protocol.d.ts +49 -0
  223. package/dist/runtime/backends/acp-protocol.d.ts.map +1 -0
  224. package/dist/runtime/backends/acp-protocol.js +166 -0
  225. package/dist/runtime/backends/acp-protocol.js.map +1 -0
  226. package/dist/runtime/backends/acp.d.ts +67 -0
  227. package/dist/runtime/backends/acp.d.ts.map +1 -0
  228. package/dist/runtime/backends/acp.js +166 -0
  229. package/dist/runtime/backends/acp.js.map +1 -0
  230. package/dist/runtime/backends/index.d.ts +7 -0
  231. package/dist/runtime/backends/index.d.ts.map +1 -0
  232. package/dist/runtime/backends/index.js +8 -0
  233. package/dist/runtime/backends/index.js.map +1 -0
  234. package/dist/runtime/backends/macro-agent.d.ts +104 -0
  235. package/dist/runtime/backends/macro-agent.d.ts.map +1 -0
  236. package/dist/runtime/backends/macro-agent.js +107 -0
  237. package/dist/runtime/backends/macro-agent.js.map +1 -0
  238. package/dist/runtime/backends/mock.d.ts +67 -0
  239. package/dist/runtime/backends/mock.d.ts.map +1 -0
  240. package/dist/runtime/backends/mock.js +153 -0
  241. package/dist/runtime/backends/mock.js.map +1 -0
  242. package/dist/runtime/backends/subprocess.d.ts +56 -0
  243. package/dist/runtime/backends/subprocess.d.ts.map +1 -0
  244. package/dist/runtime/backends/subprocess.js +260 -0
  245. package/dist/runtime/backends/subprocess.js.map +1 -0
  246. package/dist/runtime/compute-provider.d.ts +87 -0
  247. package/dist/runtime/compute-provider.d.ts.map +1 -0
  248. package/dist/runtime/compute-provider.js +87 -0
  249. package/dist/runtime/compute-provider.js.map +1 -0
  250. package/dist/runtime/flows/learning.d.ts +73 -0
  251. package/dist/runtime/flows/learning.d.ts.map +1 -0
  252. package/dist/runtime/flows/learning.js +116 -0
  253. package/dist/runtime/flows/learning.js.map +1 -0
  254. package/dist/runtime/flows/validation.d.ts +122 -0
  255. package/dist/runtime/flows/validation.d.ts.map +1 -0
  256. package/dist/runtime/flows/validation.js +223 -0
  257. package/dist/runtime/flows/validation.js.map +1 -0
  258. package/dist/runtime/index.d.ts +7 -0
  259. package/dist/runtime/index.d.ts.map +1 -0
  260. package/dist/runtime/index.js +10 -0
  261. package/dist/runtime/index.js.map +1 -0
  262. package/dist/runtime/manager.d.ts +149 -0
  263. package/dist/runtime/manager.d.ts.map +1 -0
  264. package/dist/runtime/manager.js +535 -0
  265. package/dist/runtime/manager.js.map +1 -0
  266. package/dist/runtime/types.d.ts +176 -0
  267. package/dist/runtime/types.d.ts.map +1 -0
  268. package/dist/runtime/types.js +2 -0
  269. package/dist/runtime/types.js.map +1 -0
  270. package/dist/search/evaluator.d.ts +109 -0
  271. package/dist/search/evaluator.d.ts.map +1 -0
  272. package/dist/search/evaluator.js +372 -0
  273. package/dist/search/evaluator.js.map +1 -0
  274. package/dist/search/index.d.ts +8 -0
  275. package/dist/search/index.d.ts.map +1 -0
  276. package/dist/search/index.js +13 -0
  277. package/dist/search/index.js.map +1 -0
  278. package/dist/search/refinement-loop.d.ts +90 -0
  279. package/dist/search/refinement-loop.d.ts.map +1 -0
  280. package/dist/search/refinement-loop.js +316 -0
  281. package/dist/search/refinement-loop.js.map +1 -0
  282. package/dist/search/refinement-types.d.ts +154 -0
  283. package/dist/search/refinement-types.d.ts.map +1 -0
  284. package/dist/search/refinement-types.js +99 -0
  285. package/dist/search/refinement-types.js.map +1 -0
  286. package/dist/search/router.d.ts +61 -0
  287. package/dist/search/router.d.ts.map +1 -0
  288. package/dist/search/router.js +197 -0
  289. package/dist/search/router.js.map +1 -0
  290. package/dist/search/solver.d.ts +75 -0
  291. package/dist/search/solver.d.ts.map +1 -0
  292. package/dist/search/solver.js +216 -0
  293. package/dist/search/solver.js.map +1 -0
  294. package/dist/search/team-router.d.ts +91 -0
  295. package/dist/search/team-router.d.ts.map +1 -0
  296. package/dist/search/team-router.js +315 -0
  297. package/dist/search/team-router.js.map +1 -0
  298. package/dist/search/verification-runner.d.ts +125 -0
  299. package/dist/search/verification-runner.d.ts.map +1 -0
  300. package/dist/search/verification-runner.js +440 -0
  301. package/dist/search/verification-runner.js.map +1 -0
  302. package/dist/session-bank/git-reader.d.ts +39 -0
  303. package/dist/session-bank/git-reader.d.ts.map +1 -0
  304. package/dist/session-bank/git-reader.js +165 -0
  305. package/dist/session-bank/git-reader.js.map +1 -0
  306. package/dist/session-bank/index.d.ts +5 -0
  307. package/dist/session-bank/index.d.ts.map +1 -0
  308. package/dist/session-bank/index.js +4 -0
  309. package/dist/session-bank/index.js.map +1 -0
  310. package/dist/session-bank/parser.d.ts +39 -0
  311. package/dist/session-bank/parser.d.ts.map +1 -0
  312. package/dist/session-bank/parser.js +231 -0
  313. package/dist/session-bank/parser.js.map +1 -0
  314. package/dist/session-bank/session-bank.d.ts +35 -0
  315. package/dist/session-bank/session-bank.d.ts.map +1 -0
  316. package/dist/session-bank/session-bank.js +326 -0
  317. package/dist/session-bank/session-bank.js.map +1 -0
  318. package/dist/session-bank/types.d.ts +129 -0
  319. package/dist/session-bank/types.d.ts.map +1 -0
  320. package/dist/session-bank/types.js +7 -0
  321. package/dist/session-bank/types.js.map +1 -0
  322. package/dist/surfacing/index.d.ts +6 -0
  323. package/dist/surfacing/index.d.ts.map +1 -0
  324. package/dist/surfacing/index.js +5 -0
  325. package/dist/surfacing/index.js.map +1 -0
  326. package/dist/surfacing/publisher.d.ts +22 -0
  327. package/dist/surfacing/publisher.d.ts.map +1 -0
  328. package/dist/surfacing/publisher.js +9 -0
  329. package/dist/surfacing/publisher.js.map +1 -0
  330. package/dist/surfacing/skill-library.d.ts +170 -0
  331. package/dist/surfacing/skill-library.d.ts.map +1 -0
  332. package/dist/surfacing/skill-library.js +455 -0
  333. package/dist/surfacing/skill-library.js.map +1 -0
  334. package/dist/surfacing/skill-publisher.d.ts +43 -0
  335. package/dist/surfacing/skill-publisher.d.ts.map +1 -0
  336. package/dist/surfacing/skill-publisher.js +197 -0
  337. package/dist/surfacing/skill-publisher.js.map +1 -0
  338. package/dist/surfacing/sqlite-storage-adapter.d.ts +42 -0
  339. package/dist/surfacing/sqlite-storage-adapter.d.ts.map +1 -0
  340. package/dist/surfacing/sqlite-storage-adapter.js +207 -0
  341. package/dist/surfacing/sqlite-storage-adapter.js.map +1 -0
  342. package/dist/surfacing/team-skill-library.d.ts +180 -0
  343. package/dist/surfacing/team-skill-library.d.ts.map +1 -0
  344. package/dist/surfacing/team-skill-library.js +384 -0
  345. package/dist/surfacing/team-skill-library.js.map +1 -0
  346. package/dist/types/config.d.ts +2287 -0
  347. package/dist/types/config.d.ts.map +1 -0
  348. package/dist/types/config.js +490 -0
  349. package/dist/types/config.js.map +1 -0
  350. package/dist/types/dataclaw.d.ts +286 -0
  351. package/dist/types/dataclaw.d.ts.map +1 -0
  352. package/dist/types/dataclaw.js +84 -0
  353. package/dist/types/dataclaw.js.map +1 -0
  354. package/dist/types/index.d.ts +16 -0
  355. package/dist/types/index.d.ts.map +1 -0
  356. package/dist/types/index.js +26 -0
  357. package/dist/types/index.js.map +1 -0
  358. package/dist/types/knowledge-graph.d.ts +148 -0
  359. package/dist/types/knowledge-graph.d.ts.map +1 -0
  360. package/dist/types/knowledge-graph.js +40 -0
  361. package/dist/types/knowledge-graph.js.map +1 -0
  362. package/dist/types/knowledge.d.ts +280 -0
  363. package/dist/types/knowledge.d.ts.map +1 -0
  364. package/dist/types/knowledge.js +191 -0
  365. package/dist/types/knowledge.js.map +1 -0
  366. package/dist/types/memory.d.ts +339 -0
  367. package/dist/types/memory.d.ts.map +1 -0
  368. package/dist/types/memory.js +207 -0
  369. package/dist/types/memory.js.map +1 -0
  370. package/dist/types/meta.d.ts +146 -0
  371. package/dist/types/meta.d.ts.map +1 -0
  372. package/dist/types/meta.js +51 -0
  373. package/dist/types/meta.js.map +1 -0
  374. package/dist/types/outcome.d.ts +42 -0
  375. package/dist/types/outcome.d.ts.map +1 -0
  376. package/dist/types/outcome.js +50 -0
  377. package/dist/types/outcome.js.map +1 -0
  378. package/dist/types/playbook.d.ts +119 -0
  379. package/dist/types/playbook.d.ts.map +1 -0
  380. package/dist/types/playbook.js +71 -0
  381. package/dist/types/playbook.js.map +1 -0
  382. package/dist/types/step.d.ts +44 -0
  383. package/dist/types/step.d.ts.map +1 -0
  384. package/dist/types/step.js +32 -0
  385. package/dist/types/step.js.map +1 -0
  386. package/dist/types/task.d.ts +91 -0
  387. package/dist/types/task.d.ts.map +1 -0
  388. package/dist/types/task.js +39 -0
  389. package/dist/types/task.js.map +1 -0
  390. package/dist/types/team-meta.d.ts +160 -0
  391. package/dist/types/team-meta.d.ts.map +1 -0
  392. package/dist/types/team-meta.js +42 -0
  393. package/dist/types/team-meta.js.map +1 -0
  394. package/dist/types/team-playbook.d.ts +276 -0
  395. package/dist/types/team-playbook.d.ts.map +1 -0
  396. package/dist/types/team-playbook.js +85 -0
  397. package/dist/types/team-playbook.js.map +1 -0
  398. package/dist/types/team-trajectory.d.ts +305 -0
  399. package/dist/types/team-trajectory.d.ts.map +1 -0
  400. package/dist/types/team-trajectory.js +304 -0
  401. package/dist/types/team-trajectory.js.map +1 -0
  402. package/dist/types/trajectory-source.d.ts +39 -0
  403. package/dist/types/trajectory-source.d.ts.map +1 -0
  404. package/dist/types/trajectory-source.js +2 -0
  405. package/dist/types/trajectory-source.js.map +1 -0
  406. package/dist/types/trajectory.d.ts +221 -0
  407. package/dist/types/trajectory.d.ts.map +1 -0
  408. package/dist/types/trajectory.js +60 -0
  409. package/dist/types/trajectory.js.map +1 -0
  410. package/dist/utils/frontmatter.d.ts +34 -0
  411. package/dist/utils/frontmatter.d.ts.map +1 -0
  412. package/dist/utils/frontmatter.js +93 -0
  413. package/dist/utils/frontmatter.js.map +1 -0
  414. package/dist/utils/index.d.ts +5 -0
  415. package/dist/utils/index.d.ts.map +1 -0
  416. package/dist/utils/index.js +5 -0
  417. package/dist/utils/index.js.map +1 -0
  418. package/dist/utils/similarity.d.ts +31 -0
  419. package/dist/utils/similarity.d.ts.map +1 -0
  420. package/dist/utils/similarity.js +107 -0
  421. package/dist/utils/similarity.js.map +1 -0
  422. package/dist/utils/storage.d.ts +106 -0
  423. package/dist/utils/storage.d.ts.map +1 -0
  424. package/dist/utils/storage.js +203 -0
  425. package/dist/utils/storage.js.map +1 -0
  426. package/dist/utils/validation.d.ts +129 -0
  427. package/dist/utils/validation.d.ts.map +1 -0
  428. package/dist/utils/validation.js +171 -0
  429. package/dist/utils/validation.js.map +1 -0
  430. package/dist/workspace/index.d.ts +6 -0
  431. package/dist/workspace/index.d.ts.map +1 -0
  432. package/dist/workspace/index.js +11 -0
  433. package/dist/workspace/index.js.map +1 -0
  434. package/dist/workspace/runner.d.ts +50 -0
  435. package/dist/workspace/runner.d.ts.map +1 -0
  436. package/dist/workspace/runner.js +219 -0
  437. package/dist/workspace/runner.js.map +1 -0
  438. package/dist/workspace/skill-converter.d.ts +18 -0
  439. package/dist/workspace/skill-converter.d.ts.map +1 -0
  440. package/dist/workspace/skill-converter.js +257 -0
  441. package/dist/workspace/skill-converter.js.map +1 -0
  442. package/dist/workspace/templates/index.d.ts +11 -0
  443. package/dist/workspace/templates/index.d.ts.map +1 -0
  444. package/dist/workspace/templates/index.js +21 -0
  445. package/dist/workspace/templates/index.js.map +1 -0
  446. package/dist/workspace/templates/knowledge-defrag.d.ts +25 -0
  447. package/dist/workspace/templates/knowledge-defrag.d.ts.map +1 -0
  448. package/dist/workspace/templates/knowledge-defrag.js +154 -0
  449. package/dist/workspace/templates/knowledge-defrag.js.map +1 -0
  450. package/dist/workspace/templates/knowledge-extraction.d.ts +25 -0
  451. package/dist/workspace/templates/knowledge-extraction.d.ts.map +1 -0
  452. package/dist/workspace/templates/knowledge-extraction.js +246 -0
  453. package/dist/workspace/templates/knowledge-extraction.js.map +1 -0
  454. package/dist/workspace/templates/meta-reflection.d.ts +47 -0
  455. package/dist/workspace/templates/meta-reflection.d.ts.map +1 -0
  456. package/dist/workspace/templates/meta-reflection.js +135 -0
  457. package/dist/workspace/templates/meta-reflection.js.map +1 -0
  458. package/dist/workspace/templates/playbook-extraction.d.ts +20 -0
  459. package/dist/workspace/templates/playbook-extraction.d.ts.map +1 -0
  460. package/dist/workspace/templates/playbook-extraction.js +189 -0
  461. package/dist/workspace/templates/playbook-extraction.js.map +1 -0
  462. package/dist/workspace/templates/refinement-analysis.d.ts +31 -0
  463. package/dist/workspace/templates/refinement-analysis.d.ts.map +1 -0
  464. package/dist/workspace/templates/refinement-analysis.js +107 -0
  465. package/dist/workspace/templates/refinement-analysis.js.map +1 -0
  466. package/dist/workspace/templates/solution-evaluation.d.ts +21 -0
  467. package/dist/workspace/templates/solution-evaluation.d.ts.map +1 -0
  468. package/dist/workspace/templates/solution-evaluation.js +131 -0
  469. package/dist/workspace/templates/solution-evaluation.js.map +1 -0
  470. package/dist/workspace/templates/team-playbook-extraction.d.ts +44 -0
  471. package/dist/workspace/templates/team-playbook-extraction.d.ts.map +1 -0
  472. package/dist/workspace/templates/team-playbook-extraction.js +497 -0
  473. package/dist/workspace/templates/team-playbook-extraction.js.map +1 -0
  474. package/dist/workspace/templates/team-trajectory-analysis.d.ts +19 -0
  475. package/dist/workspace/templates/team-trajectory-analysis.d.ts.map +1 -0
  476. package/dist/workspace/templates/team-trajectory-analysis.js +442 -0
  477. package/dist/workspace/templates/team-trajectory-analysis.js.map +1 -0
  478. package/dist/workspace/templates/trajectory-analysis.d.ts +19 -0
  479. package/dist/workspace/templates/trajectory-analysis.d.ts.map +1 -0
  480. package/dist/workspace/templates/trajectory-analysis.js +170 -0
  481. package/dist/workspace/templates/trajectory-analysis.js.map +1 -0
  482. package/dist/workspace/templates/usage-inference.d.ts +19 -0
  483. package/dist/workspace/templates/usage-inference.d.ts.map +1 -0
  484. package/dist/workspace/templates/usage-inference.js +125 -0
  485. package/dist/workspace/templates/usage-inference.js.map +1 -0
  486. package/dist/workspace/types.d.ts +145 -0
  487. package/dist/workspace/types.d.ts.map +1 -0
  488. package/dist/workspace/types.js +17 -0
  489. package/dist/workspace/types.js.map +1 -0
  490. package/docs/DESIGN-agentic-workspace.md +2057 -0
  491. package/docs/DESIGN-semantic-memory-knowledge-bank.md +1789 -0
  492. package/docs/DESIGN-session-bank.md +1134 -0
  493. package/docs/DESIGN-team-extraction-pipeline.md +1369 -0
  494. package/docs/DESIGN-workspace-migration.md +1079 -0
  495. package/docs/PLAN-agentic-workspace-implementation.md +717 -0
  496. package/docs/PLAN-graph-migration.md +299 -0
  497. package/docs/PLAN-session-bank-implementation.md +474 -0
  498. package/docs/PROPOSAL-team-aware-learning.md +1080 -0
  499. package/docs/RESEARCH-semantic-memory-knowledge-structures.md +517 -0
  500. package/docs/RESEARCH-team-trajectory-learning.md +553 -0
  501. package/gaps.md +204 -0
  502. package/package.json +67 -33
  503. package/references/agent-workspace/CLAUDE.md +74 -0
  504. package/references/agent-workspace/README.md +587 -0
  505. package/references/agent-workspace/media/banner.png +0 -0
  506. package/references/agent-workspace/package-lock.json +2061 -0
  507. package/references/agent-workspace/package.json +54 -0
  508. package/references/agent-workspace/src/handle.ts +122 -0
  509. package/references/agent-workspace/src/index.ts +32 -0
  510. package/references/agent-workspace/src/manager.ts +102 -0
  511. package/references/agent-workspace/src/readers/json.ts +71 -0
  512. package/references/agent-workspace/src/readers/markdown.ts +37 -0
  513. package/references/agent-workspace/src/readers/raw.ts +27 -0
  514. package/references/agent-workspace/src/types.ts +68 -0
  515. package/references/agent-workspace/src/validation.ts +93 -0
  516. package/references/agent-workspace/src/writers/json.ts +17 -0
  517. package/references/agent-workspace/src/writers/markdown.ts +27 -0
  518. package/references/agent-workspace/src/writers/raw.ts +22 -0
  519. package/references/agent-workspace/tests/errors.test.ts +652 -0
  520. package/references/agent-workspace/tests/handle.test.ts +144 -0
  521. package/references/agent-workspace/tests/manager.test.ts +124 -0
  522. package/references/agent-workspace/tests/readers.test.ts +205 -0
  523. package/references/agent-workspace/tests/validation.test.ts +196 -0
  524. package/references/agent-workspace/tests/writers.test.ts +108 -0
  525. package/references/agent-workspace/tsconfig.json +20 -0
  526. package/references/agent-workspace/tsup.config.ts +9 -0
  527. package/references/minimem/.claude/settings.json +7 -0
  528. package/references/minimem/.sudocode/issues.jsonl +18 -0
  529. package/references/minimem/.sudocode/specs.jsonl +1 -0
  530. package/references/minimem/CLAUDE.md +310 -0
  531. package/references/minimem/README.md +556 -0
  532. package/references/minimem/claude-plugin/.claude-plugin/plugin.json +10 -0
  533. package/references/minimem/claude-plugin/.mcp.json +7 -0
  534. package/references/minimem/claude-plugin/README.md +158 -0
  535. package/references/minimem/claude-plugin/commands/recall.md +47 -0
  536. package/references/minimem/claude-plugin/commands/remember.md +41 -0
  537. package/references/minimem/claude-plugin/hooks/__tests__/hooks.test.ts +272 -0
  538. package/references/minimem/claude-plugin/hooks/hooks.json +27 -0
  539. package/references/minimem/claude-plugin/hooks/session-end.sh +86 -0
  540. package/references/minimem/claude-plugin/hooks/session-start.sh +85 -0
  541. package/references/minimem/claude-plugin/skills/memory/SKILL.md +108 -0
  542. package/references/minimem/package-lock.json +5373 -0
  543. package/references/minimem/package.json +60 -0
  544. package/references/minimem/scripts/postbuild.js +35 -0
  545. package/references/minimem/src/__tests__/edge-cases.test.ts +371 -0
  546. package/references/minimem/src/__tests__/errors.test.ts +265 -0
  547. package/references/minimem/src/__tests__/helpers.ts +199 -0
  548. package/references/minimem/src/__tests__/internal.test.ts +407 -0
  549. package/references/minimem/src/__tests__/knowledge.test.ts +287 -0
  550. package/references/minimem/src/__tests__/minimem.integration.test.ts +1127 -0
  551. package/references/minimem/src/__tests__/session.test.ts +190 -0
  552. package/references/minimem/src/cli/__tests__/commands.test.ts +759 -0
  553. package/references/minimem/src/cli/commands/__tests__/conflicts.test.ts +141 -0
  554. package/references/minimem/src/cli/commands/append.ts +76 -0
  555. package/references/minimem/src/cli/commands/config.ts +262 -0
  556. package/references/minimem/src/cli/commands/conflicts.ts +413 -0
  557. package/references/minimem/src/cli/commands/daemon.ts +169 -0
  558. package/references/minimem/src/cli/commands/index.ts +12 -0
  559. package/references/minimem/src/cli/commands/init.ts +88 -0
  560. package/references/minimem/src/cli/commands/mcp.ts +177 -0
  561. package/references/minimem/src/cli/commands/push-pull.ts +213 -0
  562. package/references/minimem/src/cli/commands/search.ts +158 -0
  563. package/references/minimem/src/cli/commands/status.ts +84 -0
  564. package/references/minimem/src/cli/commands/sync-init.ts +290 -0
  565. package/references/minimem/src/cli/commands/sync.ts +70 -0
  566. package/references/minimem/src/cli/commands/upsert.ts +197 -0
  567. package/references/minimem/src/cli/config.ts +584 -0
  568. package/references/minimem/src/cli/index.ts +264 -0
  569. package/references/minimem/src/cli/shared.ts +161 -0
  570. package/references/minimem/src/cli/sync/__tests__/central.test.ts +152 -0
  571. package/references/minimem/src/cli/sync/__tests__/conflicts.test.ts +209 -0
  572. package/references/minimem/src/cli/sync/__tests__/daemon.test.ts +118 -0
  573. package/references/minimem/src/cli/sync/__tests__/detection.test.ts +207 -0
  574. package/references/minimem/src/cli/sync/__tests__/integration.test.ts +476 -0
  575. package/references/minimem/src/cli/sync/__tests__/registry.test.ts +363 -0
  576. package/references/minimem/src/cli/sync/__tests__/state.test.ts +255 -0
  577. package/references/minimem/src/cli/sync/__tests__/validation.test.ts +193 -0
  578. package/references/minimem/src/cli/sync/__tests__/watcher.test.ts +178 -0
  579. package/references/minimem/src/cli/sync/central.ts +292 -0
  580. package/references/minimem/src/cli/sync/conflicts.ts +204 -0
  581. package/references/minimem/src/cli/sync/daemon.ts +407 -0
  582. package/references/minimem/src/cli/sync/detection.ts +138 -0
  583. package/references/minimem/src/cli/sync/index.ts +107 -0
  584. package/references/minimem/src/cli/sync/operations.ts +373 -0
  585. package/references/minimem/src/cli/sync/registry.ts +279 -0
  586. package/references/minimem/src/cli/sync/state.ts +355 -0
  587. package/references/minimem/src/cli/sync/validation.ts +206 -0
  588. package/references/minimem/src/cli/sync/watcher.ts +234 -0
  589. package/references/minimem/src/cli/version.ts +34 -0
  590. package/references/minimem/src/core/index.ts +9 -0
  591. package/references/minimem/src/core/indexer.ts +628 -0
  592. package/references/minimem/src/core/searcher.ts +221 -0
  593. package/references/minimem/src/db/schema.ts +183 -0
  594. package/references/minimem/src/db/sqlite-vec.ts +24 -0
  595. package/references/minimem/src/embeddings/__tests__/embeddings.test.ts +431 -0
  596. package/references/minimem/src/embeddings/batch-gemini.ts +392 -0
  597. package/references/minimem/src/embeddings/batch-openai.ts +409 -0
  598. package/references/minimem/src/embeddings/embeddings.ts +434 -0
  599. package/references/minimem/src/index.ts +109 -0
  600. package/references/minimem/src/internal.ts +299 -0
  601. package/references/minimem/src/minimem.ts +1276 -0
  602. package/references/minimem/src/search/__tests__/hybrid.test.ts +247 -0
  603. package/references/minimem/src/search/graph.ts +234 -0
  604. package/references/minimem/src/search/hybrid.ts +151 -0
  605. package/references/minimem/src/search/search.ts +256 -0
  606. package/references/minimem/src/server/__tests__/mcp.test.ts +341 -0
  607. package/references/minimem/src/server/__tests__/tools.test.ts +364 -0
  608. package/references/minimem/src/server/mcp.ts +326 -0
  609. package/references/minimem/src/server/tools.ts +720 -0
  610. package/references/minimem/src/session.ts +460 -0
  611. package/references/minimem/tsconfig.json +19 -0
  612. package/references/minimem/tsup.config.ts +26 -0
  613. package/references/minimem/vitest.config.ts +24 -0
  614. package/references/skill-tree/.claude/settings.json +6 -0
  615. package/references/skill-tree/.sudocode/issues.jsonl +11 -0
  616. package/references/skill-tree/.sudocode/specs.jsonl +1 -0
  617. package/references/skill-tree/CLAUDE.md +150 -0
  618. package/references/skill-tree/README.md +324 -0
  619. package/references/skill-tree/docs/GAPS_v1.md +221 -0
  620. package/references/skill-tree/docs/INTEGRATION_PLAN.md +467 -0
  621. package/references/skill-tree/docs/TODOS.md +91 -0
  622. package/references/skill-tree/docs/anthropic_skill_guide.md +1364 -0
  623. package/references/skill-tree/docs/design/federated-skill-trees.md +524 -0
  624. package/references/skill-tree/docs/design/multi-agent-sync.md +759 -0
  625. package/references/skill-tree/docs/scraper/BRAINSTORM.md +583 -0
  626. package/references/skill-tree/docs/scraper/POC_PLAN.md +420 -0
  627. package/references/skill-tree/docs/scraper/README.md +170 -0
  628. package/references/skill-tree/examples/basic-usage.ts +190 -0
  629. package/references/skill-tree/package-lock.json +1509 -0
  630. package/references/skill-tree/package.json +66 -0
  631. package/references/skill-tree/scraper/README.md +123 -0
  632. package/references/skill-tree/scraper/docs/DESIGN.md +683 -0
  633. package/references/skill-tree/scraper/docs/PLAN.md +336 -0
  634. package/references/skill-tree/scraper/drizzle.config.ts +10 -0
  635. package/references/skill-tree/scraper/package-lock.json +6329 -0
  636. package/references/skill-tree/scraper/package.json +68 -0
  637. package/references/skill-tree/scraper/test/fixtures/invalid-skill/missing-description.md +7 -0
  638. package/references/skill-tree/scraper/test/fixtures/invalid-skill/missing-name.md +7 -0
  639. package/references/skill-tree/scraper/test/fixtures/minimal-skill/SKILL.md +27 -0
  640. package/references/skill-tree/scraper/test/fixtures/skill-json/SKILL.json +21 -0
  641. package/references/skill-tree/scraper/test/fixtures/skill-with-meta/SKILL.md +54 -0
  642. package/references/skill-tree/scraper/test/fixtures/skill-with-meta/_meta.json +24 -0
  643. package/references/skill-tree/scraper/test/fixtures/valid-skill/SKILL.md +93 -0
  644. package/references/skill-tree/scraper/test/fixtures/valid-skill/_meta.json +22 -0
  645. package/references/skill-tree/scraper/tsup.config.ts +14 -0
  646. package/references/skill-tree/scraper/vitest.config.ts +17 -0
  647. package/references/skill-tree/scripts/convert-to-vitest.ts +166 -0
  648. package/references/skill-tree/skills/skill-writer/SKILL.md +339 -0
  649. package/references/skill-tree/skills/skill-writer/references/examples.md +326 -0
  650. package/references/skill-tree/skills/skill-writer/references/patterns.md +210 -0
  651. package/references/skill-tree/skills/skill-writer/references/quality-checklist.md +123 -0
  652. package/references/skill-tree/test/run-all.ts +106 -0
  653. package/references/skill-tree/test/utils.ts +128 -0
  654. package/references/skill-tree/vitest.config.ts +16 -0
  655. package/scripts/migrate-to-playbooks.ts +307 -0
  656. package/src/agents/index.ts +14 -0
  657. package/src/agents/mock-provider.ts +93 -0
  658. package/src/agents/types.ts +137 -0
  659. package/src/atlas.ts +1072 -0
  660. package/src/bin/cognitive-core.ts +470 -0
  661. package/src/embeddings/bm25.ts +337 -0
  662. package/src/embeddings/index.ts +39 -0
  663. package/src/embeddings/manager.ts +288 -0
  664. package/src/embeddings/provider.ts +318 -0
  665. package/src/embeddings/vector-store.ts +353 -0
  666. package/src/factory.ts +263 -0
  667. package/src/index.ts +368 -0
  668. package/src/learning/analyzer.ts +335 -0
  669. package/src/learning/effectiveness.ts +428 -0
  670. package/src/learning/index.ts +93 -0
  671. package/src/learning/knowledge-extractor.ts +470 -0
  672. package/src/learning/meta-learner.ts +570 -0
  673. package/src/learning/pipeline.ts +323 -0
  674. package/src/learning/playbook-extractor.ts +702 -0
  675. package/src/learning/team-ingester.ts +499 -0
  676. package/src/learning/team-meta-learner.ts +558 -0
  677. package/src/learning/team-pipeline.ts +364 -0
  678. package/src/learning/trajectory-sources/dataclaw.ts +403 -0
  679. package/src/learning/trajectory-sources/entire.ts +240 -0
  680. package/src/learning/trajectory-sources/file.ts +136 -0
  681. package/src/learning/trajectory-sources/huggingface.ts +248 -0
  682. package/src/learning/trajectory-sources/in-memory.ts +61 -0
  683. package/src/learning/trajectory-sources/index.ts +15 -0
  684. package/src/learning/trajectory-sources/pipeline.ts +69 -0
  685. package/src/learning/usage-inference.ts +372 -0
  686. package/src/mcp/index.ts +12 -0
  687. package/src/mcp/playbook-server.ts +565 -0
  688. package/src/memory/curated-loader.ts +160 -0
  689. package/src/memory/experience.ts +515 -0
  690. package/src/memory/graph-layers/base.ts +184 -0
  691. package/src/memory/graph-layers/causal.ts +16 -0
  692. package/src/memory/graph-layers/entity.ts +16 -0
  693. package/src/memory/graph-layers/index.ts +5 -0
  694. package/src/memory/graph-layers/semantic.ts +16 -0
  695. package/src/memory/graph-layers/temporal.ts +16 -0
  696. package/src/memory/index.ts +72 -0
  697. package/src/memory/knowledge-bank.ts +1260 -0
  698. package/src/memory/knowledge-defrag.ts +329 -0
  699. package/src/memory/knowledge-graph.ts +361 -0
  700. package/src/memory/meta.ts +506 -0
  701. package/src/memory/playbook.ts +493 -0
  702. package/src/memory/search-provider.ts +35 -0
  703. package/src/memory/search-providers/index.ts +3 -0
  704. package/src/memory/search-providers/minimem.ts +84 -0
  705. package/src/memory/search-providers/text-similarity.ts +35 -0
  706. package/src/memory/skill-exporter.ts +357 -0
  707. package/src/memory/system.ts +604 -0
  708. package/src/memory/team-experience.ts +604 -0
  709. package/src/runtime/backends/acp-protocol.ts +231 -0
  710. package/src/runtime/backends/acp.ts +239 -0
  711. package/src/runtime/backends/index.ts +38 -0
  712. package/src/runtime/backends/macro-agent.ts +177 -0
  713. package/src/runtime/backends/mock.ts +218 -0
  714. package/src/runtime/backends/subprocess.ts +356 -0
  715. package/src/runtime/compute-provider.ts +206 -0
  716. package/src/runtime/flows/learning.ts +183 -0
  717. package/src/runtime/flows/validation.ts +381 -0
  718. package/src/runtime/index.ts +75 -0
  719. package/src/runtime/manager.ts +685 -0
  720. package/src/runtime/types.ts +198 -0
  721. package/src/search/evaluator.ts +499 -0
  722. package/src/search/index.ts +68 -0
  723. package/src/search/refinement-loop.ts +457 -0
  724. package/src/search/refinement-types.ts +159 -0
  725. package/src/search/router.ts +261 -0
  726. package/src/search/solver.ts +303 -0
  727. package/src/search/team-router.ts +459 -0
  728. package/src/search/verification-runner.ts +570 -0
  729. package/src/session-bank/git-reader.ts +190 -0
  730. package/src/session-bank/index.ts +24 -0
  731. package/src/session-bank/parser.ts +366 -0
  732. package/src/session-bank/session-bank.ts +464 -0
  733. package/src/session-bank/types.ts +173 -0
  734. package/src/surfacing/index.ts +29 -0
  735. package/src/surfacing/publisher.ts +23 -0
  736. package/src/surfacing/skill-library.ts +625 -0
  737. package/src/surfacing/skill-publisher.ts +223 -0
  738. package/src/surfacing/sqlite-storage-adapter.ts +301 -0
  739. package/src/surfacing/team-skill-library.ts +610 -0
  740. package/src/types/config.ts +585 -0
  741. package/src/types/dataclaw.ts +99 -0
  742. package/src/types/huggingface-transformers.d.ts +12 -0
  743. package/src/types/index.ts +286 -0
  744. package/src/types/knowledge-graph.ts +246 -0
  745. package/src/types/knowledge.ts +388 -0
  746. package/src/types/memory.ts +270 -0
  747. package/src/types/meta.ts +218 -0
  748. package/src/types/outcome.ts +66 -0
  749. package/src/types/playbook.ts +196 -0
  750. package/src/types/step.ts +40 -0
  751. package/src/types/task.ts +52 -0
  752. package/src/types/team-meta.ts +212 -0
  753. package/src/types/team-playbook.ts +384 -0
  754. package/src/types/team-trajectory.ts +673 -0
  755. package/src/types/trajectory-source.ts +47 -0
  756. package/src/types/trajectory.ts +80 -0
  757. package/src/utils/frontmatter.ts +118 -0
  758. package/src/utils/index.ts +45 -0
  759. package/src/utils/similarity.ts +139 -0
  760. package/src/utils/storage.ts +249 -0
  761. package/src/utils/validation.ts +286 -0
  762. package/src/workspace/index.ts +48 -0
  763. package/src/workspace/runner.ts +281 -0
  764. package/src/workspace/skill-converter.ts +288 -0
  765. package/src/workspace/templates/index.ts +64 -0
  766. package/src/workspace/templates/knowledge-defrag.ts +223 -0
  767. package/src/workspace/templates/knowledge-extraction.ts +337 -0
  768. package/src/workspace/templates/meta-reflection.ts +208 -0
  769. package/src/workspace/templates/playbook-extraction.ts +240 -0
  770. package/src/workspace/templates/refinement-analysis.ts +162 -0
  771. package/src/workspace/templates/solution-evaluation.ts +199 -0
  772. package/src/workspace/templates/team-playbook-extraction.ts +631 -0
  773. package/src/workspace/templates/team-trajectory-analysis.ts +564 -0
  774. package/src/workspace/templates/trajectory-analysis.ts +234 -0
  775. package/src/workspace/templates/usage-inference.ts +163 -0
  776. package/src/workspace/types.ts +233 -0
  777. package/tests/atlas-knowledge.test.ts +165 -0
  778. package/tests/embeddings/bm25.test.ts +130 -0
  779. package/tests/embeddings/manager.test.ts +205 -0
  780. package/tests/gap-fixes.test.ts +1103 -0
  781. package/tests/integration/atlas.test.ts +266 -0
  782. package/tests/integration/dataclaw-e2e.test.ts +559 -0
  783. package/tests/integration/e2e.test.ts +1336 -0
  784. package/tests/integration/entire-e2e.test.ts +187 -0
  785. package/tests/integration/huggingface-e2e.test.ts +627 -0
  786. package/tests/integration/session-bank.test.ts +225 -0
  787. package/tests/integration/skill-tree-wiring.test.ts +152 -0
  788. package/tests/learning/analyzer.test.ts +426 -0
  789. package/tests/learning/dataclaw-trajectory-source.test.ts +642 -0
  790. package/tests/learning/effectiveness.test.ts +542 -0
  791. package/tests/learning/entire-trajectory-source.test.ts +380 -0
  792. package/tests/learning/huggingface-trajectory-source.test.ts +817 -0
  793. package/tests/learning/knowledge-extractor.test.ts +491 -0
  794. package/tests/learning/pipeline.test.ts +176 -0
  795. package/tests/learning/playbook-extractor-provenance.test.ts +114 -0
  796. package/tests/learning/team-ingester.test.ts +349 -0
  797. package/tests/learning/team-meta-learner.test.ts +618 -0
  798. package/tests/learning/team-pipeline.test.ts +334 -0
  799. package/tests/learning/trajectory-sources.test.ts +312 -0
  800. package/tests/learning/usage-inference.test.ts +254 -0
  801. package/tests/mcp/playbook-server.test.ts +252 -0
  802. package/tests/memory/experience.test.ts +198 -0
  803. package/tests/memory/graph-layers/semantic.test.ts +219 -0
  804. package/tests/memory/knowledge-bank-extraction.test.ts +558 -0
  805. package/tests/memory/knowledge-bank.test.ts +705 -0
  806. package/tests/memory/knowledge-defrag.test.ts +366 -0
  807. package/tests/memory/knowledge-evolution.test.ts +563 -0
  808. package/tests/memory/knowledge-graph.test.ts +492 -0
  809. package/tests/memory/knowledge-inbox.test.ts +258 -0
  810. package/tests/memory/knowledge-minimem.test.ts +251 -0
  811. package/tests/memory/playbook.test.ts +338 -0
  812. package/tests/memory/provenance.test.ts +639 -0
  813. package/tests/memory/skill-exporter.test.ts +470 -0
  814. package/tests/memory/system.test.ts +325 -0
  815. package/tests/memory/team-experience.test.ts +411 -0
  816. package/tests/runtime/agent-manager.test.ts +512 -0
  817. package/tests/runtime/compute-provider.test.ts +288 -0
  818. package/tests/runtime/delegate.test.ts +349 -0
  819. package/tests/runtime/macro-agent-backend.test.ts +266 -0
  820. package/tests/runtime/mock-backend.test.ts +248 -0
  821. package/tests/search/refinement-loop.test.ts +468 -0
  822. package/tests/search/refinement.test.ts +267 -0
  823. package/tests/search/router.test.ts +427 -0
  824. package/tests/search/team-router.test.ts +376 -0
  825. package/tests/session-bank/fixtures/multi-tool-session/full.jsonl +12 -0
  826. package/tests/session-bank/fixtures/multi-tool-session/metadata.json +28 -0
  827. package/tests/session-bank/fixtures/root-metadata.json +18 -0
  828. package/tests/session-bank/fixtures/simple-session/full.jsonl +6 -0
  829. package/tests/session-bank/fixtures/simple-session/metadata.json +38 -0
  830. package/tests/session-bank/git-reader.test.ts +232 -0
  831. package/tests/session-bank/parser.test.ts +321 -0
  832. package/tests/session-bank/session-bank.test.ts +546 -0
  833. package/tests/surfacing/skill-library.test.ts +292 -0
  834. package/tests/surfacing/skill-publisher.test.ts +398 -0
  835. package/tests/surfacing/sqlite-storage-adapter.test.ts +218 -0
  836. package/tests/surfacing/team-skill-library.test.ts +444 -0
  837. package/tests/types/outcome.test.ts +147 -0
  838. package/tests/types/step.test.ts +133 -0
  839. package/tests/types/task.test.ts +158 -0
  840. package/tests/types/team-meta.test.ts +147 -0
  841. package/tests/types/team-playbook.test.ts +246 -0
  842. package/tests/types/team-trajectory.test.ts +557 -0
  843. package/tests/types/trajectory.test.ts +253 -0
  844. package/tests/utils/frontmatter.test.ts +208 -0
  845. package/tests/utils/similarity.test.ts +188 -0
  846. package/tests/utils/validation.test.ts +252 -0
  847. package/tests/workspace/full-flow.test.ts +839 -0
  848. package/tests/workspace/manager.test.ts +215 -0
  849. package/tests/workspace/runner.test.ts +330 -0
  850. package/tests/workspace/skill-converter.test.ts +205 -0
  851. package/tests/workspace/templates/knowledge-extraction.test.ts +235 -0
  852. package/tests/workspace/templates/team-playbook-extraction.test.ts +341 -0
  853. package/tests/workspace/templates/team-trajectory-analysis.test.ts +417 -0
  854. package/tsconfig.json +25 -0
  855. package/vitest.config.ts +22 -0
  856. package/dist/index.d.mts +0 -466
  857. package/dist/index.mjs +0 -478
@@ -0,0 +1,1336 @@
1
+ import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
2
+ import {
3
+ Atlas,
4
+ createAtlas,
5
+ createAtlasWithAgents,
6
+ } from '../../src/atlas.js';
7
+ import { createTask } from '../../src/types/task.js';
8
+ import { createTrajectory } from '../../src/types/trajectory.js';
9
+ import { createStep } from '../../src/types/step.js';
10
+ import { successOutcome, failureOutcome } from '../../src/types/outcome.js';
11
+ import { buildTeamTrajectory } from '../../src/types/team-trajectory.js';
12
+ import type { InteractionTag, TeamTrajectoryInput } from '../../src/types/team-trajectory.js';
13
+ import { MockBackend, createMockBackend } from '../../src/runtime/backends/mock.js';
14
+ import { mkdtemp, rm } from 'node:fs/promises';
15
+ import { join } from 'node:path';
16
+ import { tmpdir } from 'node:os';
17
+
18
+ describe('Integration: End-to-End Solve Flow', () => {
19
+ let tempDir: string;
20
+ let atlas: Atlas;
21
+ let mockBackend: MockBackend;
22
+
23
+ beforeEach(async () => {
24
+ tempDir = await mkdtemp(join(tmpdir(), 'atlas-e2e-test-'));
25
+ mockBackend = createMockBackend({
26
+ success: true,
27
+ result: 'Task completed successfully',
28
+ durationMs: 50,
29
+ toolCalls: [
30
+ { name: 'read_file', input: { path: 'src/main.ts' }, output: 'code content' },
31
+ { name: 'write_file', input: { path: 'src/main.ts', content: 'updated' }, output: 'written' },
32
+ ],
33
+ });
34
+
35
+ atlas = createAtlasWithAgents([mockBackend], {
36
+ storage: { baseDir: tempDir },
37
+ learning: {
38
+ minTrajectories: 2,
39
+ deduplicationThreshold: 0.8,
40
+ },
41
+ execution: {
42
+ defaultAgentType: 'mock',
43
+ maxExecutionTime: 60,
44
+ captureToolCalls: true,
45
+ },
46
+ });
47
+
48
+ await atlas.init();
49
+ });
50
+
51
+ afterEach(async () => {
52
+ await atlas.close();
53
+ await rm(tempDir, { recursive: true, force: true });
54
+ });
55
+
56
+ describe('solve() with AgentManager', () => {
57
+ it('should solve a task and return trajectory', async () => {
58
+ const task = createTask({
59
+ domain: 'code',
60
+ description: 'Fix the bug in authentication module',
61
+ });
62
+
63
+ const result = await atlas.solve(task);
64
+
65
+ expect(result.trajectory).toBeDefined();
66
+ expect(result.trajectory.outcome.success).toBe(true);
67
+ expect(result.usedAgentManager).toBe(true);
68
+ expect(result.routing).toBeDefined();
69
+ expect(result.routing?.strategy).toBeDefined();
70
+ });
71
+
72
+ it('should inject playbooks when available', async () => {
73
+ // Add a playbook that should be injected
74
+ const memory = atlas.getMemory();
75
+ await memory.playbooks.add({
76
+ id: 'auth-playbook',
77
+ name: 'Authentication Bug Fix',
78
+ applicability: {
79
+ situations: ['Fix authentication bug', 'Auth module issue'],
80
+ triggers: ['authentication', 'auth', 'login'],
81
+ antiPatterns: [],
82
+ domains: ['code', 'auth'],
83
+ },
84
+ guidance: {
85
+ strategy: 'Check token validation and session management',
86
+ tactics: ['Verify token expiry', 'Check session storage'],
87
+ steps: ['Read auth code', 'Find issue', 'Apply fix', 'Test'],
88
+ },
89
+ verification: {
90
+ successIndicators: ['Tests pass', 'No auth errors'],
91
+ failureIndicators: ['Auth still fails'],
92
+ },
93
+ evolution: {
94
+ version: '1.0.0',
95
+ createdFrom: [],
96
+ failures: [],
97
+ refinements: [],
98
+ successCount: 5,
99
+ failureCount: 0,
100
+ },
101
+ confidence: 0.85,
102
+ complexity: 'moderate',
103
+ estimatedEffort: 2,
104
+ createdAt: new Date(),
105
+ updatedAt: new Date(),
106
+ });
107
+
108
+ // Refresh skill library tiers
109
+ const skillLibrary = atlas.getSkillLibrary();
110
+ await skillLibrary?.refreshTiers();
111
+
112
+ const task = createTask({
113
+ domain: 'code',
114
+ description: 'Fix the authentication bug in login flow',
115
+ });
116
+
117
+ const result = await atlas.solve(task);
118
+
119
+ expect(result.trajectory).toBeDefined();
120
+ // Playbooks should be tracked (may or may not be injected depending on scoring)
121
+ expect(result.injectedPlaybooks).toBeDefined();
122
+ });
123
+
124
+ it('should track memory context from router', async () => {
125
+ const task = createTask({
126
+ domain: 'code',
127
+ description: 'Implement new feature',
128
+ });
129
+
130
+ const result = await atlas.solve(task);
131
+
132
+ expect(result.routing).toBeDefined();
133
+ expect(result.routing?.memoryContext).toBeDefined();
134
+ expect(result.routing?.confidence).toBeDefined();
135
+ expect(result.routing?.estimatedBudget).toBeDefined();
136
+ });
137
+
138
+ it('should process trajectory for learning after solve', async () => {
139
+ const task = createTask({
140
+ domain: 'code',
141
+ description: 'Test learning integration',
142
+ });
143
+
144
+ await atlas.solve(task);
145
+
146
+ const stats = await atlas.getStats();
147
+ expect(stats.learning.trajectoriesProcessed).toBe(1);
148
+ });
149
+
150
+ it('should handle failed agent execution', async () => {
151
+ mockBackend.setDefaultBehavior({
152
+ success: false,
153
+ error: 'Agent execution failed',
154
+ result: 'Partial result before failure', // Provide result for experience creation
155
+ durationMs: 50,
156
+ });
157
+
158
+ const task = createTask({
159
+ domain: 'code',
160
+ description: 'Failing task',
161
+ });
162
+
163
+ const result = await atlas.solve(task);
164
+
165
+ expect(result.trajectory.outcome.success).toBe(false);
166
+ expect(result.usedAgentManager).toBe(true);
167
+ });
168
+ });
169
+
170
+ describe('solve() with multiple tasks', () => {
171
+ it('should solve batch of tasks', async () => {
172
+ const tasks = [
173
+ createTask({ domain: 'code', description: 'Task 1' }),
174
+ createTask({ domain: 'code', description: 'Task 2' }),
175
+ createTask({ domain: 'code', description: 'Task 3' }),
176
+ ];
177
+
178
+ const results = await atlas.solveBatch(tasks);
179
+
180
+ expect(results.length).toBe(3);
181
+ results.forEach(result => {
182
+ expect(result.trajectory).toBeDefined();
183
+ expect(result.usedAgentManager).toBe(true);
184
+ });
185
+
186
+ const stats = await atlas.getStats();
187
+ expect(stats.learning.trajectoriesProcessed).toBe(3);
188
+ });
189
+
190
+ it('should accumulate learning across tasks', async () => {
191
+ // Solve multiple similar tasks
192
+ for (let i = 0; i < 3; i++) {
193
+ await atlas.solve(createTask({
194
+ domain: 'code',
195
+ description: `Fix TypeScript error ${i}`,
196
+ }));
197
+ }
198
+
199
+ const stats = await atlas.getStats();
200
+ expect(stats.learning.trajectoriesProcessed).toBe(3);
201
+ });
202
+ });
203
+ });
204
+
205
+ describe('Integration: Learning Pipeline Batch Extraction', () => {
206
+ let tempDir: string;
207
+ let atlas: Atlas;
208
+ let mockBackend: MockBackend;
209
+
210
+ beforeEach(async () => {
211
+ tempDir = await mkdtemp(join(tmpdir(), 'atlas-learning-test-'));
212
+ mockBackend = createMockBackend({
213
+ success: true,
214
+ result: 'Completed',
215
+ durationMs: 30,
216
+ });
217
+
218
+ atlas = createAtlasWithAgents([mockBackend], {
219
+ storage: { baseDir: tempDir },
220
+ learning: {
221
+ minTrajectories: 3, // Low threshold for testing
222
+ deduplicationThreshold: 0.7,
223
+ },
224
+ });
225
+
226
+ await atlas.init();
227
+ });
228
+
229
+ afterEach(async () => {
230
+ await atlas.close();
231
+ await rm(tempDir, { recursive: true, force: true });
232
+ });
233
+
234
+ it('should accumulate trajectories until batch threshold', async () => {
235
+ // Process trajectories below threshold
236
+ for (let i = 0; i < 2; i++) {
237
+ const trajectory = createTrajectory({
238
+ id: `traj-${i}`,
239
+ task: createTask({ domain: 'code', description: `Task ${i}` }),
240
+ steps: [
241
+ createStep({ action: 'read', observation: 'content' }),
242
+ createStep({ action: 'write', observation: 'done' }),
243
+ ],
244
+ outcome: successOutcome('Done'),
245
+ agentId: 'test-agent',
246
+ });
247
+
248
+ await atlas.processTrajectory(trajectory);
249
+ }
250
+
251
+ const stats = await atlas.getStats();
252
+ expect(stats.learning.trajectoriesProcessed).toBe(2);
253
+ expect(stats.learning.pendingTrajectories).toBe(2);
254
+ });
255
+
256
+ it('should trigger batch learning when threshold reached', async () => {
257
+ // Process trajectories to trigger batch
258
+ for (let i = 0; i < 4; i++) {
259
+ const trajectory = createTrajectory({
260
+ id: `batch-traj-${i}`,
261
+ task: createTask({
262
+ domain: 'code',
263
+ description: `Fix TypeScript error in module ${i}`,
264
+ }),
265
+ steps: [
266
+ createStep({
267
+ thought: 'Need to fix the type error',
268
+ action: 'Read the file with error',
269
+ observation: 'Found type mismatch',
270
+ }),
271
+ createStep({
272
+ thought: 'Applying the fix',
273
+ action: 'Update type annotation',
274
+ observation: 'Type error resolved',
275
+ }),
276
+ ],
277
+ outcome: successOutcome('Fixed type error'),
278
+ agentId: 'test-agent',
279
+ });
280
+
281
+ await atlas.processTrajectory(trajectory);
282
+ }
283
+
284
+ // After threshold, batch learning should have been triggered
285
+ const stats = await atlas.getStats();
286
+ expect(stats.learning.trajectoriesProcessed).toBe(4);
287
+ });
288
+
289
+ it('should extract playbooks from similar trajectories', async () => {
290
+ // Create similar successful trajectories
291
+ const similarTasks = [
292
+ 'Fix authentication token validation',
293
+ 'Fix authentication session expiry',
294
+ 'Fix authentication login flow',
295
+ ];
296
+
297
+ for (let i = 0; i < similarTasks.length; i++) {
298
+ const trajectory = createTrajectory({
299
+ id: `auth-traj-${i}`,
300
+ task: createTask({
301
+ domain: 'auth',
302
+ description: similarTasks[i],
303
+ }),
304
+ steps: [
305
+ createStep({
306
+ thought: 'Check authentication code',
307
+ action: 'Read auth module',
308
+ observation: 'Found the issue',
309
+ }),
310
+ createStep({
311
+ thought: 'Apply fix',
312
+ action: 'Update auth logic',
313
+ observation: 'Fixed',
314
+ }),
315
+ createStep({
316
+ thought: 'Verify fix',
317
+ action: 'Run auth tests',
318
+ observation: 'All tests pass',
319
+ }),
320
+ ],
321
+ outcome: successOutcome('Auth issue fixed'),
322
+ agentId: 'test-agent',
323
+ });
324
+
325
+ await atlas.processTrajectory(trajectory);
326
+ }
327
+
328
+ // Force batch learning
329
+ const batchResult = await atlas.runBatchLearning();
330
+ expect(batchResult.trajectoriesProcessed).toBe(3);
331
+ });
332
+
333
+ it('should run batch learning explicitly', async () => {
334
+ // Add a trajectory
335
+ const trajectory = createTrajectory({
336
+ task: createTask({ domain: 'test', description: 'Explicit batch test' }),
337
+ steps: [createStep({ action: 'test', observation: 'result' })],
338
+ outcome: successOutcome('Done'),
339
+ agentId: 'test',
340
+ });
341
+
342
+ await atlas.processTrajectory(trajectory);
343
+
344
+ // Explicitly run batch learning
345
+ const result = await atlas.runBatchLearning();
346
+
347
+ expect(result).toBeDefined();
348
+ expect(result.trajectoriesProcessed).toBeGreaterThanOrEqual(0);
349
+ });
350
+ });
351
+
352
+ describe('Integration: Skill Tier Promotion/Demotion', () => {
353
+ let tempDir: string;
354
+ let atlas: Atlas;
355
+ let mockBackend: MockBackend;
356
+
357
+ beforeEach(async () => {
358
+ tempDir = await mkdtemp(join(tmpdir(), 'atlas-tier-test-'));
359
+ mockBackend = createMockBackend({ success: true, durationMs: 30 });
360
+
361
+ atlas = createAtlasWithAgents([mockBackend], {
362
+ storage: { baseDir: tempDir },
363
+ skillLibrary: {
364
+ promotion: {
365
+ minConfidence: 0.8,
366
+ minSuccessCount: 3,
367
+ minSuccessRate: 0.7,
368
+ },
369
+ demotion: {
370
+ failureThreshold: 2,
371
+ minConfidenceToRetain: 0.5,
372
+ },
373
+ limits: {
374
+ maxCoreSkills: 5,
375
+ maxDomainSkills: 3,
376
+ maxContextualPlaybooks: 2,
377
+ },
378
+ },
379
+ });
380
+
381
+ await atlas.init();
382
+ });
383
+
384
+ afterEach(async () => {
385
+ await atlas.close();
386
+ await rm(tempDir, { recursive: true, force: true });
387
+ });
388
+
389
+ it('should promote high-performing playbooks to core skills', async () => {
390
+ const memory = atlas.getMemory();
391
+ const skillLibrary = atlas.getSkillLibrary();
392
+
393
+ // Add a high-confidence, high-success playbook
394
+ await memory.playbooks.add({
395
+ id: 'promote-playbook',
396
+ name: 'High Performance Playbook',
397
+ applicability: {
398
+ situations: ['Common coding task'],
399
+ triggers: ['code', 'fix'],
400
+ antiPatterns: [],
401
+ domains: ['code'],
402
+ },
403
+ guidance: {
404
+ strategy: 'Proven approach',
405
+ tactics: ['Step 1', 'Step 2'],
406
+ },
407
+ verification: {
408
+ successIndicators: ['Works'],
409
+ failureIndicators: ['Fails'],
410
+ },
411
+ evolution: {
412
+ version: '1.0.0',
413
+ createdFrom: [],
414
+ failures: [],
415
+ refinements: [],
416
+ successCount: 10,
417
+ failureCount: 1,
418
+ },
419
+ confidence: 0.9,
420
+ complexity: 'simple',
421
+ estimatedEffort: 1,
422
+ createdAt: new Date(),
423
+ updatedAt: new Date(),
424
+ });
425
+
426
+ // Refresh tiers
427
+ const tierResult = await skillLibrary?.refreshTiers();
428
+
429
+ expect(tierResult?.promoted).toBeDefined();
430
+ expect(tierResult?.coreCount).toBeGreaterThanOrEqual(0);
431
+ });
432
+
433
+ it('should demote failing playbooks', async () => {
434
+ const memory = atlas.getMemory();
435
+ const skillLibrary = atlas.getSkillLibrary();
436
+
437
+ // Add a playbook that will be demoted
438
+ await memory.playbooks.add({
439
+ id: 'demote-playbook',
440
+ name: 'Failing Playbook',
441
+ applicability: {
442
+ situations: ['Edge case'],
443
+ triggers: ['rare'],
444
+ antiPatterns: [],
445
+ domains: ['test'],
446
+ },
447
+ guidance: {
448
+ strategy: 'Risky approach',
449
+ tactics: [],
450
+ },
451
+ verification: {
452
+ successIndicators: [],
453
+ failureIndicators: [],
454
+ },
455
+ evolution: {
456
+ version: '1.0.0',
457
+ createdFrom: [],
458
+ failures: [],
459
+ refinements: [],
460
+ successCount: 1,
461
+ failureCount: 5,
462
+ },
463
+ confidence: 0.3,
464
+ complexity: 'complex',
465
+ estimatedEffort: 5,
466
+ createdAt: new Date(),
467
+ updatedAt: new Date(),
468
+ });
469
+
470
+ await skillLibrary?.refreshTiers();
471
+
472
+ // Playbook with low success should not be in core
473
+ const coreSkills = skillLibrary?.getCoreSkills();
474
+ const isInCore = coreSkills?.some(s => s.id === 'demote-playbook');
475
+ expect(isInCore).toBe(false);
476
+ });
477
+
478
+ it('should track consecutive failures for demotion', async () => {
479
+ const memory = atlas.getMemory();
480
+ const skillLibrary = atlas.getSkillLibrary();
481
+
482
+ // Add playbook and record failures
483
+ await memory.playbooks.add({
484
+ id: 'failure-track-playbook',
485
+ name: 'Track Failures',
486
+ applicability: {
487
+ situations: ['Test'],
488
+ triggers: ['test'],
489
+ antiPatterns: [],
490
+ domains: ['test'],
491
+ },
492
+ guidance: {
493
+ strategy: 'Test strategy',
494
+ tactics: [],
495
+ },
496
+ verification: {
497
+ successIndicators: [],
498
+ failureIndicators: [],
499
+ },
500
+ evolution: {
501
+ version: '1.0.0',
502
+ createdFrom: [],
503
+ failures: [],
504
+ refinements: [],
505
+ successCount: 5,
506
+ failureCount: 0,
507
+ },
508
+ confidence: 0.85,
509
+ complexity: 'simple',
510
+ estimatedEffort: 1,
511
+ createdAt: new Date(),
512
+ updatedAt: new Date(),
513
+ });
514
+
515
+ await skillLibrary?.refreshTiers();
516
+
517
+ // Record consecutive failures
518
+ await skillLibrary?.recordOutcome('failure-track-playbook', 'traj-1', false, 'First failure');
519
+ await skillLibrary?.recordOutcome('failure-track-playbook', 'traj-2', false, 'Second failure');
520
+
521
+ const failures = skillLibrary?.getConsecutiveFailures('failure-track-playbook');
522
+ expect(failures).toBe(2);
523
+
524
+ // Check at-risk playbooks
525
+ const atRisk = skillLibrary?.getAtRiskPlaybooks();
526
+ expect(atRisk).toBeDefined();
527
+ });
528
+
529
+ it('should reset failure count on success', async () => {
530
+ const memory = atlas.getMemory();
531
+ const skillLibrary = atlas.getSkillLibrary();
532
+
533
+ await memory.playbooks.add({
534
+ id: 'reset-playbook',
535
+ name: 'Reset Test',
536
+ applicability: {
537
+ situations: ['Test'],
538
+ triggers: ['test'],
539
+ antiPatterns: [],
540
+ domains: ['test'],
541
+ },
542
+ guidance: {
543
+ strategy: 'Test',
544
+ tactics: [],
545
+ },
546
+ verification: {
547
+ successIndicators: [],
548
+ failureIndicators: [],
549
+ },
550
+ evolution: {
551
+ version: '1.0.0',
552
+ createdFrom: [],
553
+ failures: [],
554
+ refinements: [],
555
+ successCount: 5,
556
+ failureCount: 0,
557
+ },
558
+ confidence: 0.85,
559
+ complexity: 'simple',
560
+ estimatedEffort: 1,
561
+ createdAt: new Date(),
562
+ updatedAt: new Date(),
563
+ });
564
+
565
+ await skillLibrary?.refreshTiers();
566
+
567
+ // Record failures then success
568
+ await skillLibrary?.recordOutcome('reset-playbook', 'traj-1', false);
569
+ await skillLibrary?.recordOutcome('reset-playbook', 'traj-2', false);
570
+
571
+ let failures = skillLibrary?.getConsecutiveFailures('reset-playbook');
572
+ expect(failures).toBe(2);
573
+
574
+ // Success should reset
575
+ await skillLibrary?.recordOutcome('reset-playbook', 'traj-3', true);
576
+
577
+ failures = skillLibrary?.getConsecutiveFailures('reset-playbook');
578
+ expect(failures).toBe(0);
579
+ });
580
+
581
+ it('should organize skills by domain', async () => {
582
+ const memory = atlas.getMemory();
583
+ const skillLibrary = atlas.getSkillLibrary();
584
+
585
+ // Add playbooks in different domains
586
+ const domains = ['frontend', 'backend', 'database'];
587
+ for (const domain of domains) {
588
+ await memory.playbooks.add({
589
+ id: `${domain}-playbook`,
590
+ name: `${domain} Playbook`,
591
+ applicability: {
592
+ situations: [`${domain} task`],
593
+ triggers: [domain],
594
+ antiPatterns: [],
595
+ domains: [domain],
596
+ },
597
+ guidance: {
598
+ strategy: `${domain} strategy`,
599
+ tactics: [],
600
+ },
601
+ verification: {
602
+ successIndicators: [],
603
+ failureIndicators: [],
604
+ },
605
+ evolution: {
606
+ version: '1.0.0',
607
+ createdFrom: [],
608
+ failures: [],
609
+ refinements: [],
610
+ successCount: 3,
611
+ failureCount: 1,
612
+ },
613
+ confidence: 0.7,
614
+ complexity: 'moderate',
615
+ estimatedEffort: 2,
616
+ createdAt: new Date(),
617
+ updatedAt: new Date(),
618
+ });
619
+ }
620
+
621
+ await skillLibrary?.refreshTiers();
622
+
623
+ const allDomains = skillLibrary?.getDomains();
624
+ expect(allDomains?.length).toBeGreaterThanOrEqual(0);
625
+ });
626
+ });
627
+
628
+ describe('Integration: Memory Persistence', () => {
629
+ let tempDir: string;
630
+
631
+ beforeEach(async () => {
632
+ tempDir = await mkdtemp(join(tmpdir(), 'atlas-persist-test-'));
633
+ });
634
+
635
+ afterEach(async () => {
636
+ await rm(tempDir, { recursive: true, force: true });
637
+ });
638
+
639
+ it('should persist and restore memory across sessions', async () => {
640
+ // First session - add data
641
+ const atlas1 = createAtlasWithAgents([createMockBackend()], {
642
+ storage: { baseDir: tempDir },
643
+ });
644
+ await atlas1.init();
645
+
646
+ const memory1 = atlas1.getMemory();
647
+ await memory1.experiences.add({
648
+ id: 'persist-exp-1',
649
+ taskInput: 'Persistent experience',
650
+ solutionOutput: 'Solution persisted',
651
+ feedback: 'Good',
652
+ success: true,
653
+ domain: 'test',
654
+ trajectoryId: 'persist-traj-1',
655
+ usageCount: 0,
656
+ createdAt: new Date(),
657
+ metadata: {},
658
+ });
659
+
660
+ await memory1.playbooks.add({
661
+ id: 'persist-playbook-1',
662
+ name: 'Persistent Playbook',
663
+ applicability: {
664
+ situations: ['Test persistence'],
665
+ triggers: ['persist'],
666
+ antiPatterns: [],
667
+ domains: ['test'],
668
+ },
669
+ guidance: {
670
+ strategy: 'Persist this',
671
+ tactics: [],
672
+ },
673
+ verification: {
674
+ successIndicators: [],
675
+ failureIndicators: [],
676
+ },
677
+ evolution: {
678
+ version: '1.0.0',
679
+ createdFrom: [],
680
+ failures: [],
681
+ refinements: [],
682
+ successCount: 0,
683
+ failureCount: 0,
684
+ },
685
+ confidence: 0.7,
686
+ complexity: 'simple',
687
+ estimatedEffort: 1,
688
+ createdAt: new Date(),
689
+ updatedAt: new Date(),
690
+ });
691
+
692
+ await atlas1.close();
693
+
694
+ // Second session - verify data persisted
695
+ const atlas2 = createAtlasWithAgents([createMockBackend()], {
696
+ storage: { baseDir: tempDir },
697
+ });
698
+ await atlas2.init();
699
+
700
+ const stats = await atlas2.getStats();
701
+ expect(stats.memory.experienceCount).toBe(1);
702
+ expect(stats.memory.playbookCount).toBe(1);
703
+
704
+ const memory2 = atlas2.getMemory();
705
+ const exp = await memory2.experiences.get('persist-exp-1');
706
+ expect(exp?.taskInput).toBe('Persistent experience');
707
+
708
+ const playbook = await memory2.playbooks.get('persist-playbook-1');
709
+ expect(playbook?.name).toBe('Persistent Playbook');
710
+
711
+ await atlas2.close();
712
+ });
713
+
714
+ it('should persist skill library state', async () => {
715
+ // First session
716
+ const atlas1 = createAtlasWithAgents([createMockBackend()], {
717
+ storage: { baseDir: tempDir },
718
+ });
719
+ await atlas1.init();
720
+
721
+ const memory1 = atlas1.getMemory();
722
+ const skillLibrary1 = atlas1.getSkillLibrary();
723
+
724
+ // Add playbook and record outcomes
725
+ await memory1.playbooks.add({
726
+ id: 'skill-persist',
727
+ name: 'Skill Persist Test',
728
+ applicability: {
729
+ situations: ['Test'],
730
+ triggers: ['test'],
731
+ antiPatterns: [],
732
+ domains: ['test'],
733
+ },
734
+ guidance: {
735
+ strategy: 'Test',
736
+ tactics: [],
737
+ },
738
+ verification: {
739
+ successIndicators: [],
740
+ failureIndicators: [],
741
+ },
742
+ evolution: {
743
+ version: '1.0.0',
744
+ createdFrom: [],
745
+ failures: [],
746
+ refinements: [],
747
+ successCount: 5,
748
+ failureCount: 0,
749
+ },
750
+ confidence: 0.85,
751
+ complexity: 'simple',
752
+ estimatedEffort: 1,
753
+ createdAt: new Date(),
754
+ updatedAt: new Date(),
755
+ });
756
+
757
+ await skillLibrary1?.refreshTiers();
758
+
759
+ // Record failures
760
+ await skillLibrary1?.recordOutcome('skill-persist', 'traj-1', false);
761
+ await skillLibrary1?.recordOutcome('skill-persist', 'traj-2', false);
762
+
763
+ // Export failure state for verification
764
+ const failureState = skillLibrary1?.exportFailureState();
765
+ expect(failureState?.['skill-persist']).toBe(2);
766
+
767
+ await atlas1.close();
768
+
769
+ // Note: Failure state is in-memory only, but playbook state persists
770
+ const atlas2 = createAtlasWithAgents([createMockBackend()], {
771
+ storage: { baseDir: tempDir },
772
+ });
773
+ await atlas2.init();
774
+
775
+ const memory2 = atlas2.getMemory();
776
+ const playbook = await memory2.playbooks.get('skill-persist');
777
+ expect(playbook).toBeDefined();
778
+
779
+ await atlas2.close();
780
+ });
781
+ });
782
+
783
+ describe('Integration: Playbook Usage Inference', () => {
784
+ let tempDir: string;
785
+ let atlas: Atlas;
786
+ let mockBackend: MockBackend;
787
+
788
+ beforeEach(async () => {
789
+ tempDir = await mkdtemp(join(tmpdir(), 'atlas-usage-test-'));
790
+ mockBackend = createMockBackend({
791
+ success: true,
792
+ result: 'Done',
793
+ durationMs: 30,
794
+ messages: [
795
+ { role: 'assistant', content: 'Following the authentication fix playbook...' },
796
+ { role: 'assistant', content: 'Checking token validation as suggested...' },
797
+ ],
798
+ });
799
+
800
+ atlas = createAtlasWithAgents([mockBackend], {
801
+ storage: { baseDir: tempDir },
802
+ execution: {
803
+ defaultAgentType: 'mock',
804
+ },
805
+ });
806
+ await atlas.init();
807
+ });
808
+
809
+ afterEach(async () => {
810
+ await atlas.close();
811
+ await rm(tempDir, { recursive: true, force: true });
812
+ });
813
+
814
+ it('should infer playbook usage from trajectory', async () => {
815
+ const memory = atlas.getMemory();
816
+
817
+ // Add playbook
818
+ await memory.playbooks.add({
819
+ id: 'auth-fix-playbook',
820
+ name: 'Authentication Fix',
821
+ applicability: {
822
+ situations: ['Fix auth issue'],
823
+ triggers: ['authentication', 'token', 'auth'],
824
+ antiPatterns: [],
825
+ domains: ['auth'],
826
+ },
827
+ guidance: {
828
+ strategy: 'Check token validation and fix',
829
+ tactics: ['Validate tokens', 'Check expiry'],
830
+ },
831
+ verification: {
832
+ successIndicators: ['Auth works'],
833
+ failureIndicators: ['Auth fails'],
834
+ },
835
+ evolution: {
836
+ version: '1.0.0',
837
+ createdFrom: [],
838
+ failures: [],
839
+ refinements: [],
840
+ successCount: 5,
841
+ failureCount: 0,
842
+ },
843
+ confidence: 0.8,
844
+ complexity: 'moderate',
845
+ estimatedEffort: 2,
846
+ createdAt: new Date(),
847
+ updatedAt: new Date(),
848
+ });
849
+
850
+ await atlas.getSkillLibrary()?.refreshTiers();
851
+
852
+ const task = createTask({
853
+ domain: 'auth',
854
+ description: 'Fix authentication token validation issue',
855
+ });
856
+
857
+ const result = await atlas.solve(task);
858
+
859
+ // Usage inference should have run
860
+ expect(result.injectedPlaybooks).toBeDefined();
861
+ });
862
+
863
+ it('should track all injected playbooks', async () => {
864
+ const memory = atlas.getMemory();
865
+
866
+ // Add multiple playbooks
867
+ await memory.playbooks.add({
868
+ id: 'playbook-a',
869
+ name: 'Playbook A',
870
+ applicability: {
871
+ situations: ['Test situation A'],
872
+ triggers: ['test-a'],
873
+ antiPatterns: [],
874
+ domains: ['test'],
875
+ },
876
+ guidance: { strategy: 'Strategy A', tactics: [] },
877
+ verification: { successIndicators: [], failureIndicators: [] },
878
+ evolution: {
879
+ version: '1.0.0',
880
+ createdFrom: [],
881
+ failures: [],
882
+ refinements: [],
883
+ successCount: 3,
884
+ failureCount: 0,
885
+ },
886
+ confidence: 0.75,
887
+ complexity: 'simple',
888
+ estimatedEffort: 1,
889
+ createdAt: new Date(),
890
+ updatedAt: new Date(),
891
+ });
892
+
893
+ await memory.playbooks.add({
894
+ id: 'playbook-b',
895
+ name: 'Playbook B',
896
+ applicability: {
897
+ situations: ['Test situation B'],
898
+ triggers: ['test-b'],
899
+ antiPatterns: [],
900
+ domains: ['test'],
901
+ },
902
+ guidance: { strategy: 'Strategy B', tactics: [] },
903
+ verification: { successIndicators: [], failureIndicators: [] },
904
+ evolution: {
905
+ version: '1.0.0',
906
+ createdFrom: [],
907
+ failures: [],
908
+ refinements: [],
909
+ successCount: 3,
910
+ failureCount: 0,
911
+ },
912
+ confidence: 0.75,
913
+ complexity: 'simple',
914
+ estimatedEffort: 1,
915
+ createdAt: new Date(),
916
+ updatedAt: new Date(),
917
+ });
918
+
919
+ await atlas.getSkillLibrary()?.refreshTiers();
920
+
921
+ const task = createTask({
922
+ domain: 'test',
923
+ description: 'Test task for tracking',
924
+ });
925
+
926
+ const result = await atlas.solve(task);
927
+
928
+ // Should have tracked injected playbooks (may include playbooks from router context)
929
+ expect(result.injectedPlaybooks).toBeDefined();
930
+ });
931
+ });
932
+
933
+ // ============================================================
934
+ // E2E: Graph-based Team Trajectory Learning
935
+ // ============================================================
936
+
937
+ describe('Integration: Graph-based Team Trajectory Learning', () => {
938
+ let tempDir: string;
939
+ let atlas: Atlas;
940
+ let mockBackend: MockBackend;
941
+
942
+ beforeEach(async () => {
943
+ tempDir = await mkdtemp(join(tmpdir(), 'atlas-team-graph-e2e-'));
944
+ mockBackend = createMockBackend({
945
+ success: true,
946
+ result: 'Done',
947
+ durationMs: 30,
948
+ });
949
+
950
+ atlas = createAtlasWithAgents([mockBackend], {
951
+ storage: { baseDir: tempDir },
952
+ teamLearning: {
953
+ enabled: true,
954
+ minTeamTrajectories: 2, // Low threshold for testing
955
+ },
956
+ });
957
+
958
+ await atlas.init();
959
+ });
960
+
961
+ afterEach(async () => {
962
+ await atlas.close();
963
+ await rm(tempDir, { recursive: true, force: true });
964
+ });
965
+
966
+ /**
967
+ * Build a graph-based TeamTrajectory from per-agent trajectories
968
+ * with InteractionTag metadata on steps.
969
+ */
970
+ function makeGraphTeamTrajectory(params: {
971
+ objective: string;
972
+ domain: string;
973
+ success: boolean;
974
+ topologyType?: string;
975
+ }): ReturnType<typeof buildTeamTrajectory> {
976
+ const plannerSteps = [
977
+ createStep({
978
+ thought: 'Analyzing the task and planning delegation',
979
+ action: 'delegate subtask to executor',
980
+ observation: 'Delegated successfully',
981
+ metadata: {
982
+ interactionTag: {
983
+ interactionId: `int-${params.objective}`,
984
+ interactionType: 'delegation',
985
+ counterpartAgentId: 'executor-1',
986
+ stepRole: 'source',
987
+ } satisfies InteractionTag,
988
+ },
989
+ }),
990
+ createStep({
991
+ action: 'read executor result',
992
+ observation: params.success
993
+ ? 'success: executor completed all subtasks'
994
+ : 'error: executor encountered failures',
995
+ }),
996
+ ];
997
+
998
+ const executorSteps = [
999
+ createStep({
1000
+ action: 'receive delegation from planner',
1001
+ observation: 'Received task assignment',
1002
+ metadata: {
1003
+ interactionTag: {
1004
+ interactionId: `int-${params.objective}`,
1005
+ interactionType: 'delegation',
1006
+ counterpartAgentId: 'planner-1',
1007
+ stepRole: 'target',
1008
+ } satisfies InteractionTag,
1009
+ },
1010
+ }),
1011
+ createStep({
1012
+ thought: 'Deciding implementation approach',
1013
+ action: 'decided to implement feature',
1014
+ observation: 'Implementation started',
1015
+ }),
1016
+ createStep({
1017
+ action: 'complete implementation',
1018
+ observation: params.success ? 'completed successfully' : 'failed with error',
1019
+ }),
1020
+ ];
1021
+
1022
+ const input: TeamTrajectoryInput = {
1023
+ objective: params.objective,
1024
+ domain: params.domain,
1025
+ complexity: 'moderate',
1026
+ teamName: 'test-team',
1027
+ templateName: params.topologyType ?? 'hierarchical',
1028
+ topologyType: params.topologyType ?? 'hierarchical',
1029
+ enforcement: 'permissive',
1030
+ memberTrajectories: [
1031
+ {
1032
+ agentId: 'planner-1',
1033
+ role: 'planner',
1034
+ trajectory: createTrajectory({
1035
+ task: createTask({ domain: params.domain, description: `Plan: ${params.objective}` }),
1036
+ steps: plannerSteps,
1037
+ outcome: params.success ? successOutcome('planned') : failureOutcome('planning failed', 0.3),
1038
+ agentId: 'planner-1',
1039
+ totalTokens: 5000,
1040
+ llmCalls: 3,
1041
+ }),
1042
+ },
1043
+ {
1044
+ agentId: 'executor-1',
1045
+ role: 'executor',
1046
+ trajectory: createTrajectory({
1047
+ task: createTask({ domain: params.domain, description: `Execute: ${params.objective}` }),
1048
+ steps: executorSteps,
1049
+ outcome: params.success ? successOutcome('done') : failureOutcome('execution failed', 0.2),
1050
+ agentId: 'executor-1',
1051
+ totalTokens: 15000,
1052
+ llmCalls: 8,
1053
+ }),
1054
+ },
1055
+ ],
1056
+ outcome: {
1057
+ success: params.success,
1058
+ partialScore: params.success ? 1.0 : 0.3,
1059
+ quality: params.success ? 'good' : 'poor',
1060
+ totalLlmCalls: 11,
1061
+ totalTokens: 20000,
1062
+ totalWallTimeSeconds: 60,
1063
+ },
1064
+ expectedPatterns: [{
1065
+ name: 'planner-delegates',
1066
+ fromRole: 'planner',
1067
+ toRole: 'executor',
1068
+ type: 'delegation',
1069
+ frequency: 'once',
1070
+ }],
1071
+ };
1072
+
1073
+ return buildTeamTrajectory(input);
1074
+ }
1075
+
1076
+ it('should process a graph-based team trajectory end-to-end', async () => {
1077
+ const trajectory = makeGraphTeamTrajectory({
1078
+ objective: 'Build authentication module',
1079
+ domain: 'web',
1080
+ success: true,
1081
+ });
1082
+
1083
+ // Verify graph data is present before processing
1084
+ expect(trajectory.members).toHaveLength(2);
1085
+ expect(trajectory.interactions).toBeDefined();
1086
+ expect(trajectory.interactions!.length).toBeGreaterThan(0);
1087
+ expect(trajectory.graphMetrics).toBeDefined();
1088
+
1089
+ // Process through Atlas
1090
+ const result = await atlas.processTeamTrajectory(trajectory);
1091
+
1092
+ expect(result.teamTrajectoryId).toBe(trajectory.id);
1093
+ expect(result.stored).toBe(true);
1094
+ expect(result.analyzed).toBe(true);
1095
+ expect(result.analysis).toBeDefined();
1096
+
1097
+ // Verify analysis used graph data
1098
+ expect(result.analysis!.agentCredits).toHaveLength(2);
1099
+ expect(result.analysis!.interactionCredits.length).toBeGreaterThan(0);
1100
+
1101
+ // Planner should have graph-enriched credit assessment
1102
+ const plannerCredit = result.analysis!.agentCredits.find(c => c.role === 'planner');
1103
+ expect(plannerCredit).toBeDefined();
1104
+ expect(plannerCredit!.contributionScore).toBe(1.0); // Success
1105
+ expect(plannerCredit!.assessment).toContain('steps'); // Graph-based: "completed N steps"
1106
+
1107
+ // Verify team stats updated
1108
+ const stats = await atlas.getStats();
1109
+ expect(stats.learning.teamTrajectoriesProcessed).toBe(1);
1110
+ expect(stats.teamMemory).toBeDefined();
1111
+ expect(stats.teamMemory!.teamExperienceCount).toBe(1);
1112
+ expect(stats.teamMemory!.teamMetaObservationCount).toBeGreaterThanOrEqual(1);
1113
+ });
1114
+
1115
+ it('should accumulate graph trajectories and run batch learning', async () => {
1116
+ // Process enough trajectories to trigger batch (minTeamTrajectories: 2)
1117
+ // The batch auto-triggers during processTeamTrajectory when threshold is reached
1118
+ const trajectories = [
1119
+ makeGraphTeamTrajectory({
1120
+ objective: 'Build user registration',
1121
+ domain: 'web',
1122
+ success: true,
1123
+ }),
1124
+ makeGraphTeamTrajectory({
1125
+ objective: 'Build password reset',
1126
+ domain: 'web',
1127
+ success: true,
1128
+ }),
1129
+ ];
1130
+
1131
+ for (const t of trajectories) {
1132
+ await atlas.processTeamTrajectory(t);
1133
+ }
1134
+
1135
+ // Verify all processed
1136
+ const stats = await atlas.getStats();
1137
+ expect(stats.learning.teamTrajectoriesProcessed).toBe(2);
1138
+ expect(stats.teamMemory!.teamExperienceCount).toBe(2);
1139
+
1140
+ // Batch was auto-triggered at threshold. Check team memory for results.
1141
+ const teamMemory = atlas.getMemory().teamExperiences;
1142
+ const teamPlaybooks = await teamMemory.getTeamPlaybooks();
1143
+ const rolePlaybooks = await teamMemory.getRolePlaybooks();
1144
+
1145
+ // With 2 successful hierarchical/web trajectories, should extract patterns
1146
+ expect(teamPlaybooks.length + rolePlaybooks.length).toBeGreaterThanOrEqual(0);
1147
+ });
1148
+
1149
+ it('should handle mixed success/failure graph trajectories', async () => {
1150
+ const success = makeGraphTeamTrajectory({
1151
+ objective: 'Implement feature A',
1152
+ domain: 'backend',
1153
+ success: true,
1154
+ });
1155
+ const failure = makeGraphTeamTrajectory({
1156
+ objective: 'Implement feature B',
1157
+ domain: 'backend',
1158
+ success: false,
1159
+ });
1160
+
1161
+ const successResult = await atlas.processTeamTrajectory(success);
1162
+ const failureResult = await atlas.processTeamTrajectory(failure);
1163
+
1164
+ // Both should be processed
1165
+ expect(successResult.analyzed).toBe(true);
1166
+ expect(failureResult.analyzed).toBe(true);
1167
+
1168
+ // Failure analysis should reflect the failure
1169
+ const failedCredits = failureResult.analysis!.agentCredits;
1170
+ expect(failedCredits.some(c => c.contributionScore < 1.0)).toBe(true);
1171
+
1172
+ // Team memory should have both
1173
+ const stats = await atlas.getStats();
1174
+ expect(stats.teamMemory!.teamExperienceCount).toBe(2);
1175
+ });
1176
+
1177
+ it('should use graph interactions for richer analysis', async () => {
1178
+ const trajectory = makeGraphTeamTrajectory({
1179
+ objective: 'Build API endpoint',
1180
+ domain: 'backend',
1181
+ success: true,
1182
+ });
1183
+
1184
+ const result = await atlas.processTeamTrajectory(trajectory);
1185
+
1186
+ // Interaction credits should reference the step-level delegation
1187
+ const interactionCredits = result.analysis!.interactionCredits;
1188
+ expect(interactionCredits.length).toBeGreaterThan(0);
1189
+
1190
+ // With graph data, interaction credits should have type info
1191
+ const delegationCredit = interactionCredits.find(
1192
+ ic => ic.reasoning.includes('delegation')
1193
+ );
1194
+ expect(delegationCredit).toBeDefined();
1195
+ expect(delegationCredit!.fromRole).toBe('planner');
1196
+ expect(delegationCredit!.toRole).toBe('executor');
1197
+ });
1198
+
1199
+ it('should generate meta-observations with graph metrics', async () => {
1200
+ const trajectory = makeGraphTeamTrajectory({
1201
+ objective: 'Build dashboard',
1202
+ domain: 'frontend',
1203
+ success: true,
1204
+ });
1205
+
1206
+ await atlas.processTeamTrajectory(trajectory);
1207
+
1208
+ // Check meta-observations were recorded
1209
+ const teamMemory = atlas.getMemory().teamExperiences;
1210
+ const metaObs = await teamMemory.getMetaObservations();
1211
+ expect(metaObs.length).toBeGreaterThanOrEqual(1);
1212
+
1213
+ // The pipeline-generated meta-observation should exist
1214
+ const obs = metaObs[0];
1215
+ expect(obs.formation.wasEffective).toBe(true);
1216
+ expect(obs.formation.topologyUsed).toBe('hierarchical');
1217
+ expect(obs.formation.domain).toBe('frontend');
1218
+ });
1219
+
1220
+ it('should recommend teams after accumulating graph experience', async () => {
1221
+ // Process trajectories to build team memory
1222
+ const trajectories = [
1223
+ makeGraphTeamTrajectory({
1224
+ objective: 'Build auth module',
1225
+ domain: 'web',
1226
+ success: true,
1227
+ topologyType: 'hierarchical',
1228
+ }),
1229
+ makeGraphTeamTrajectory({
1230
+ objective: 'Build user profile',
1231
+ domain: 'web',
1232
+ success: true,
1233
+ topologyType: 'hierarchical',
1234
+ }),
1235
+ ];
1236
+
1237
+ for (const t of trajectories) {
1238
+ await atlas.processTeamTrajectory(t);
1239
+ }
1240
+
1241
+ // Force batch learning to extract playbooks
1242
+ await atlas.runTeamBatchLearning();
1243
+
1244
+ // Now try to recommend a team
1245
+ const recommendation = await atlas.recommendTeam({
1246
+ taskDescription: 'Build payment integration',
1247
+ domain: 'web',
1248
+ complexity: 'moderate',
1249
+ });
1250
+
1251
+ expect(recommendation).toBeDefined();
1252
+ expect(recommendation.confidence).toBeGreaterThanOrEqual(0);
1253
+ expect(recommendation.composition).toBeDefined();
1254
+ expect(recommendation.composition.topology).toBeDefined();
1255
+ expect(recommendation.composition.roles.length).toBeGreaterThanOrEqual(0);
1256
+ });
1257
+
1258
+ it('should process graph trajectory through full pipeline to team playbook extraction', async () => {
1259
+ // Close existing atlas and create new one with higher batch threshold
1260
+ await atlas.close();
1261
+ await rm(tempDir, { recursive: true, force: true });
1262
+
1263
+ tempDir = await mkdtemp(join(tmpdir(), 'atlas-team-graph-e2e-'));
1264
+ atlas = createAtlasWithAgents([mockBackend], {
1265
+ storage: { baseDir: tempDir },
1266
+ teamLearning: {
1267
+ enabled: true,
1268
+ minTeamTrajectories: 10, // High threshold so batch doesn't auto-trigger
1269
+ },
1270
+ });
1271
+ await atlas.init();
1272
+
1273
+ // Need enough similar trajectories for playbook extraction
1274
+ const objectives = [
1275
+ 'Implement login page',
1276
+ 'Implement signup page',
1277
+ 'Implement password reset page',
1278
+ ];
1279
+
1280
+ for (const objective of objectives) {
1281
+ const t = makeGraphTeamTrajectory({
1282
+ objective,
1283
+ domain: 'web',
1284
+ success: true,
1285
+ topologyType: 'hierarchical',
1286
+ });
1287
+ await atlas.processTeamTrajectory(t);
1288
+ }
1289
+
1290
+ // Verify all processed
1291
+ const stats = await atlas.getStats();
1292
+ expect(stats.learning.teamTrajectoriesProcessed).toBe(3);
1293
+
1294
+ // Run batch extraction explicitly (threshold not reached, but we force it)
1295
+ const batchResult = await atlas.runTeamBatchLearning();
1296
+ expect(batchResult).toBeDefined();
1297
+ expect(batchResult!.ready).toBe(true);
1298
+ expect(batchResult!.trajectoriesProcessed).toBe(3);
1299
+
1300
+ // Check team memory for results
1301
+ const teamMemory = atlas.getMemory().teamExperiences;
1302
+ const teamPlaybooks = await teamMemory.getTeamPlaybooks();
1303
+ const rolePlaybooks = await teamMemory.getRolePlaybooks();
1304
+
1305
+ // With 3 successful hierarchical/web trajectories with the same topology,
1306
+ // the heuristic should extract at least 1 team playbook
1307
+ expect(teamPlaybooks.length).toBeGreaterThanOrEqual(1);
1308
+
1309
+ // Verify team playbook has graph-enriched interaction patterns
1310
+ if (teamPlaybooks.length > 0) {
1311
+ const tp = teamPlaybooks[0];
1312
+ expect(tp.composition.topology).toBe('hierarchical');
1313
+ expect(tp.applicability.domains).toContain('web');
1314
+ expect(tp.composition.roles.length).toBeGreaterThanOrEqual(1);
1315
+
1316
+ // Should have interaction patterns extracted from graph data
1317
+ expect(tp.coordination.interactionPatterns.length).toBeGreaterThanOrEqual(0);
1318
+ }
1319
+
1320
+ // With 3 trajectories both roles appear consistently
1321
+ // Role playbooks should be extracted for at least one role
1322
+ if (rolePlaybooks.length > 0) {
1323
+ const roles = rolePlaybooks.map(rp => rp.role);
1324
+ // Either 'planner' or 'executor' should be present
1325
+ expect(roles.some(r => ['planner', 'executor'].includes(r))).toBe(true);
1326
+ }
1327
+
1328
+ // Query team memory to verify searchability
1329
+ const queryResult = await atlas.queryTeamMemory('authentication', {
1330
+ domain: 'web',
1331
+ includeExperiences: true,
1332
+ includePlaybooks: true,
1333
+ });
1334
+ expect(queryResult.experiences.length + queryResult.playbooks.length).toBeGreaterThanOrEqual(0);
1335
+ });
1336
+ });