cognitive-core 0.1.0 → 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 (637) 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 +524 -254
  5. package/dist/atlas.d.ts +144 -6
  6. package/dist/atlas.d.ts.map +1 -1
  7. package/dist/atlas.js +339 -10
  8. package/dist/atlas.js.map +1 -1
  9. package/dist/embeddings/provider.d.ts.map +1 -1
  10. package/dist/embeddings/provider.js +6 -3
  11. package/dist/embeddings/provider.js.map +1 -1
  12. package/dist/index.d.ts +8 -6
  13. package/dist/index.d.ts.map +1 -1
  14. package/dist/index.js +37 -6
  15. package/dist/index.js.map +1 -1
  16. package/dist/learning/index.d.ts +5 -1
  17. package/dist/learning/index.d.ts.map +1 -1
  18. package/dist/learning/index.js +8 -2
  19. package/dist/learning/index.js.map +1 -1
  20. package/dist/learning/knowledge-extractor.d.ts +56 -0
  21. package/dist/learning/knowledge-extractor.d.ts.map +1 -0
  22. package/dist/learning/knowledge-extractor.js +336 -0
  23. package/dist/learning/knowledge-extractor.js.map +1 -0
  24. package/dist/learning/meta-learner.d.ts +7 -0
  25. package/dist/learning/meta-learner.d.ts.map +1 -1
  26. package/dist/learning/meta-learner.js +43 -0
  27. package/dist/learning/meta-learner.js.map +1 -1
  28. package/dist/learning/pipeline.d.ts +24 -0
  29. package/dist/learning/pipeline.d.ts.map +1 -1
  30. package/dist/learning/pipeline.js +70 -4
  31. package/dist/learning/pipeline.js.map +1 -1
  32. package/dist/learning/team-ingester.d.ts +152 -0
  33. package/dist/learning/team-ingester.d.ts.map +1 -0
  34. package/dist/learning/team-ingester.js +333 -0
  35. package/dist/learning/team-ingester.js.map +1 -0
  36. package/dist/learning/team-meta-learner.d.ts +50 -0
  37. package/dist/learning/team-meta-learner.d.ts.map +1 -0
  38. package/dist/learning/team-meta-learner.js +417 -0
  39. package/dist/learning/team-meta-learner.js.map +1 -0
  40. package/dist/learning/team-pipeline.d.ts +76 -0
  41. package/dist/learning/team-pipeline.d.ts.map +1 -0
  42. package/dist/learning/team-pipeline.js +266 -0
  43. package/dist/learning/team-pipeline.js.map +1 -0
  44. package/dist/learning/trajectory-sources/dataclaw.d.ts +41 -0
  45. package/dist/learning/trajectory-sources/dataclaw.d.ts.map +1 -0
  46. package/dist/learning/trajectory-sources/dataclaw.js +330 -0
  47. package/dist/learning/trajectory-sources/dataclaw.js.map +1 -0
  48. package/dist/learning/trajectory-sources/entire.d.ts +28 -0
  49. package/dist/learning/trajectory-sources/entire.d.ts.map +1 -0
  50. package/dist/learning/trajectory-sources/entire.js +182 -0
  51. package/dist/learning/trajectory-sources/entire.js.map +1 -0
  52. package/dist/learning/trajectory-sources/file.d.ts +23 -0
  53. package/dist/learning/trajectory-sources/file.d.ts.map +1 -0
  54. package/dist/learning/trajectory-sources/file.js +101 -0
  55. package/dist/learning/trajectory-sources/file.js.map +1 -0
  56. package/dist/learning/trajectory-sources/huggingface.d.ts +36 -0
  57. package/dist/learning/trajectory-sources/huggingface.d.ts.map +1 -0
  58. package/dist/learning/trajectory-sources/huggingface.js +157 -0
  59. package/dist/learning/trajectory-sources/huggingface.js.map +1 -0
  60. package/dist/learning/trajectory-sources/in-memory.d.ts +21 -0
  61. package/dist/learning/trajectory-sources/in-memory.d.ts.map +1 -0
  62. package/dist/learning/trajectory-sources/in-memory.js +43 -0
  63. package/dist/learning/trajectory-sources/in-memory.js.map +1 -0
  64. package/dist/learning/trajectory-sources/index.d.ts +7 -0
  65. package/dist/learning/trajectory-sources/index.d.ts.map +1 -0
  66. package/dist/learning/trajectory-sources/index.js +7 -0
  67. package/dist/learning/trajectory-sources/index.js.map +1 -0
  68. package/dist/learning/trajectory-sources/pipeline.d.ts +24 -0
  69. package/dist/learning/trajectory-sources/pipeline.d.ts.map +1 -0
  70. package/dist/learning/trajectory-sources/pipeline.js +47 -0
  71. package/dist/learning/trajectory-sources/pipeline.js.map +1 -0
  72. package/dist/memory/graph-layers/base.d.ts +29 -0
  73. package/dist/memory/graph-layers/base.d.ts.map +1 -0
  74. package/dist/memory/graph-layers/base.js +143 -0
  75. package/dist/memory/graph-layers/base.js.map +1 -0
  76. package/dist/memory/graph-layers/causal.d.ts +14 -0
  77. package/dist/memory/graph-layers/causal.d.ts.map +1 -0
  78. package/dist/memory/graph-layers/causal.js +14 -0
  79. package/dist/memory/graph-layers/causal.js.map +1 -0
  80. package/dist/memory/graph-layers/entity.d.ts +14 -0
  81. package/dist/memory/graph-layers/entity.d.ts.map +1 -0
  82. package/dist/memory/graph-layers/entity.js +14 -0
  83. package/dist/memory/graph-layers/entity.js.map +1 -0
  84. package/dist/memory/graph-layers/index.d.ts +6 -0
  85. package/dist/memory/graph-layers/index.d.ts.map +1 -0
  86. package/dist/memory/graph-layers/index.js +6 -0
  87. package/dist/memory/graph-layers/index.js.map +1 -0
  88. package/dist/memory/graph-layers/semantic.d.ts +14 -0
  89. package/dist/memory/graph-layers/semantic.d.ts.map +1 -0
  90. package/dist/memory/graph-layers/semantic.js +14 -0
  91. package/dist/memory/graph-layers/semantic.js.map +1 -0
  92. package/dist/memory/graph-layers/temporal.d.ts +14 -0
  93. package/dist/memory/graph-layers/temporal.d.ts.map +1 -0
  94. package/dist/memory/graph-layers/temporal.js +14 -0
  95. package/dist/memory/graph-layers/temporal.js.map +1 -0
  96. package/dist/memory/index.d.ts +8 -0
  97. package/dist/memory/index.d.ts.map +1 -1
  98. package/dist/memory/index.js +10 -0
  99. package/dist/memory/index.js.map +1 -1
  100. package/dist/memory/knowledge-bank.d.ts +220 -0
  101. package/dist/memory/knowledge-bank.d.ts.map +1 -0
  102. package/dist/memory/knowledge-bank.js +1003 -0
  103. package/dist/memory/knowledge-bank.js.map +1 -0
  104. package/dist/memory/knowledge-defrag.d.ts +49 -0
  105. package/dist/memory/knowledge-defrag.d.ts.map +1 -0
  106. package/dist/memory/knowledge-defrag.js +257 -0
  107. package/dist/memory/knowledge-defrag.js.map +1 -0
  108. package/dist/memory/knowledge-graph.d.ts +41 -0
  109. package/dist/memory/knowledge-graph.d.ts.map +1 -0
  110. package/dist/memory/knowledge-graph.js +273 -0
  111. package/dist/memory/knowledge-graph.js.map +1 -0
  112. package/dist/memory/search-provider.d.ts +31 -0
  113. package/dist/memory/search-provider.d.ts.map +1 -0
  114. package/dist/memory/search-provider.js +2 -0
  115. package/dist/memory/search-provider.js.map +1 -0
  116. package/dist/memory/search-providers/index.d.ts +3 -0
  117. package/dist/memory/search-providers/index.d.ts.map +1 -0
  118. package/dist/memory/search-providers/index.js +3 -0
  119. package/dist/memory/search-providers/index.js.map +1 -0
  120. package/dist/memory/search-providers/minimem.d.ts +43 -0
  121. package/dist/memory/search-providers/minimem.d.ts.map +1 -0
  122. package/dist/memory/search-providers/minimem.js +56 -0
  123. package/dist/memory/search-providers/minimem.js.map +1 -0
  124. package/dist/memory/search-providers/text-similarity.d.ts +15 -0
  125. package/dist/memory/search-providers/text-similarity.d.ts.map +1 -0
  126. package/dist/memory/search-providers/text-similarity.js +21 -0
  127. package/dist/memory/search-providers/text-similarity.js.map +1 -0
  128. package/dist/memory/skill-exporter.d.ts +75 -0
  129. package/dist/memory/skill-exporter.d.ts.map +1 -0
  130. package/dist/memory/skill-exporter.js +248 -0
  131. package/dist/memory/skill-exporter.js.map +1 -0
  132. package/dist/memory/system.d.ts +15 -3
  133. package/dist/memory/system.d.ts.map +1 -1
  134. package/dist/memory/system.js +46 -8
  135. package/dist/memory/system.js.map +1 -1
  136. package/dist/memory/team-experience.d.ts +298 -0
  137. package/dist/memory/team-experience.d.ts.map +1 -0
  138. package/dist/memory/team-experience.js +355 -0
  139. package/dist/memory/team-experience.js.map +1 -0
  140. package/dist/runtime/backends/acp-protocol.d.ts +49 -0
  141. package/dist/runtime/backends/acp-protocol.d.ts.map +1 -0
  142. package/dist/runtime/backends/acp-protocol.js +166 -0
  143. package/dist/runtime/backends/acp-protocol.js.map +1 -0
  144. package/dist/runtime/backends/acp.d.ts +26 -26
  145. package/dist/runtime/backends/acp.d.ts.map +1 -1
  146. package/dist/runtime/backends/acp.js +32 -156
  147. package/dist/runtime/backends/acp.js.map +1 -1
  148. package/dist/runtime/backends/index.d.ts +3 -1
  149. package/dist/runtime/backends/index.d.ts.map +1 -1
  150. package/dist/runtime/backends/index.js +3 -1
  151. package/dist/runtime/backends/index.js.map +1 -1
  152. package/dist/runtime/backends/macro-agent.d.ts +104 -0
  153. package/dist/runtime/backends/macro-agent.d.ts.map +1 -0
  154. package/dist/runtime/backends/macro-agent.js +107 -0
  155. package/dist/runtime/backends/macro-agent.js.map +1 -0
  156. package/dist/runtime/compute-provider.d.ts +87 -0
  157. package/dist/runtime/compute-provider.d.ts.map +1 -0
  158. package/dist/runtime/compute-provider.js +87 -0
  159. package/dist/runtime/compute-provider.js.map +1 -0
  160. package/dist/runtime/index.d.ts +3 -2
  161. package/dist/runtime/index.d.ts.map +1 -1
  162. package/dist/runtime/index.js +3 -1
  163. package/dist/runtime/index.js.map +1 -1
  164. package/dist/runtime/manager.d.ts +37 -4
  165. package/dist/runtime/manager.d.ts.map +1 -1
  166. package/dist/runtime/manager.js +139 -20
  167. package/dist/runtime/manager.js.map +1 -1
  168. package/dist/runtime/types.d.ts +38 -0
  169. package/dist/runtime/types.d.ts.map +1 -1
  170. package/dist/search/evaluator.d.ts +7 -0
  171. package/dist/search/evaluator.d.ts.map +1 -1
  172. package/dist/search/evaluator.js +24 -4
  173. package/dist/search/evaluator.js.map +1 -1
  174. package/dist/search/index.d.ts +1 -0
  175. package/dist/search/index.d.ts.map +1 -1
  176. package/dist/search/index.js +2 -0
  177. package/dist/search/index.js.map +1 -1
  178. package/dist/search/refinement-loop.d.ts +17 -0
  179. package/dist/search/refinement-loop.d.ts.map +1 -1
  180. package/dist/search/refinement-loop.js +77 -6
  181. package/dist/search/refinement-loop.js.map +1 -1
  182. package/dist/search/refinement-types.d.ts +2 -2
  183. package/dist/search/team-router.d.ts +91 -0
  184. package/dist/search/team-router.d.ts.map +1 -0
  185. package/dist/search/team-router.js +315 -0
  186. package/dist/search/team-router.js.map +1 -0
  187. package/dist/session-bank/git-reader.d.ts +39 -0
  188. package/dist/session-bank/git-reader.d.ts.map +1 -0
  189. package/dist/session-bank/git-reader.js +165 -0
  190. package/dist/session-bank/git-reader.js.map +1 -0
  191. package/dist/session-bank/index.d.ts +5 -0
  192. package/dist/session-bank/index.d.ts.map +1 -0
  193. package/dist/session-bank/index.js +4 -0
  194. package/dist/session-bank/index.js.map +1 -0
  195. package/dist/session-bank/parser.d.ts +39 -0
  196. package/dist/session-bank/parser.d.ts.map +1 -0
  197. package/dist/session-bank/parser.js +231 -0
  198. package/dist/session-bank/parser.js.map +1 -0
  199. package/dist/session-bank/session-bank.d.ts +35 -0
  200. package/dist/session-bank/session-bank.d.ts.map +1 -0
  201. package/dist/session-bank/session-bank.js +326 -0
  202. package/dist/session-bank/session-bank.js.map +1 -0
  203. package/dist/session-bank/types.d.ts +129 -0
  204. package/dist/session-bank/types.d.ts.map +1 -0
  205. package/dist/session-bank/types.js +7 -0
  206. package/dist/session-bank/types.js.map +1 -0
  207. package/dist/surfacing/index.d.ts +4 -0
  208. package/dist/surfacing/index.d.ts.map +1 -1
  209. package/dist/surfacing/index.js +3 -0
  210. package/dist/surfacing/index.js.map +1 -1
  211. package/dist/surfacing/publisher.d.ts +22 -0
  212. package/dist/surfacing/publisher.d.ts.map +1 -0
  213. package/dist/surfacing/publisher.js +9 -0
  214. package/dist/surfacing/publisher.js.map +1 -0
  215. package/dist/surfacing/skill-library.d.ts +12 -0
  216. package/dist/surfacing/skill-library.d.ts.map +1 -1
  217. package/dist/surfacing/skill-library.js +26 -0
  218. package/dist/surfacing/skill-library.js.map +1 -1
  219. package/dist/surfacing/skill-publisher.d.ts +43 -0
  220. package/dist/surfacing/skill-publisher.d.ts.map +1 -0
  221. package/dist/surfacing/skill-publisher.js +197 -0
  222. package/dist/surfacing/skill-publisher.js.map +1 -0
  223. package/dist/surfacing/sqlite-storage-adapter.d.ts +42 -0
  224. package/dist/surfacing/sqlite-storage-adapter.d.ts.map +1 -0
  225. package/dist/surfacing/sqlite-storage-adapter.js +207 -0
  226. package/dist/surfacing/sqlite-storage-adapter.js.map +1 -0
  227. package/dist/surfacing/team-skill-library.d.ts +180 -0
  228. package/dist/surfacing/team-skill-library.d.ts.map +1 -0
  229. package/dist/surfacing/team-skill-library.js +384 -0
  230. package/dist/surfacing/team-skill-library.js.map +1 -0
  231. package/dist/types/config.d.ts +1218 -44
  232. package/dist/types/config.d.ts.map +1 -1
  233. package/dist/types/config.js +216 -0
  234. package/dist/types/config.js.map +1 -1
  235. package/dist/types/dataclaw.d.ts +286 -0
  236. package/dist/types/dataclaw.d.ts.map +1 -0
  237. package/dist/types/dataclaw.js +84 -0
  238. package/dist/types/dataclaw.js.map +1 -0
  239. package/dist/types/index.d.ts +8 -1
  240. package/dist/types/index.d.ts.map +1 -1
  241. package/dist/types/index.js +13 -1
  242. package/dist/types/index.js.map +1 -1
  243. package/dist/types/knowledge-graph.d.ts +148 -0
  244. package/dist/types/knowledge-graph.d.ts.map +1 -0
  245. package/dist/types/knowledge-graph.js +40 -0
  246. package/dist/types/knowledge-graph.js.map +1 -0
  247. package/dist/types/knowledge.d.ts +280 -0
  248. package/dist/types/knowledge.d.ts.map +1 -0
  249. package/dist/types/knowledge.js +191 -0
  250. package/dist/types/knowledge.js.map +1 -0
  251. package/dist/types/team-meta.d.ts +160 -0
  252. package/dist/types/team-meta.d.ts.map +1 -0
  253. package/dist/types/team-meta.js +42 -0
  254. package/dist/types/team-meta.js.map +1 -0
  255. package/dist/types/team-playbook.d.ts +276 -0
  256. package/dist/types/team-playbook.d.ts.map +1 -0
  257. package/dist/types/team-playbook.js +85 -0
  258. package/dist/types/team-playbook.js.map +1 -0
  259. package/dist/types/team-trajectory.d.ts +305 -0
  260. package/dist/types/team-trajectory.d.ts.map +1 -0
  261. package/dist/types/team-trajectory.js +304 -0
  262. package/dist/types/team-trajectory.js.map +1 -0
  263. package/dist/types/trajectory-source.d.ts +39 -0
  264. package/dist/types/trajectory-source.d.ts.map +1 -0
  265. package/dist/types/trajectory-source.js +2 -0
  266. package/dist/types/trajectory-source.js.map +1 -0
  267. package/dist/utils/frontmatter.d.ts +34 -0
  268. package/dist/utils/frontmatter.d.ts.map +1 -0
  269. package/dist/utils/frontmatter.js +93 -0
  270. package/dist/utils/frontmatter.js.map +1 -0
  271. package/dist/utils/index.d.ts +1 -0
  272. package/dist/utils/index.d.ts.map +1 -1
  273. package/dist/utils/index.js +1 -0
  274. package/dist/utils/index.js.map +1 -1
  275. package/dist/workspace/index.d.ts +6 -0
  276. package/dist/workspace/index.d.ts.map +1 -0
  277. package/dist/workspace/index.js +11 -0
  278. package/dist/workspace/index.js.map +1 -0
  279. package/dist/workspace/runner.d.ts +50 -0
  280. package/dist/workspace/runner.d.ts.map +1 -0
  281. package/dist/workspace/runner.js +219 -0
  282. package/dist/workspace/runner.js.map +1 -0
  283. package/dist/workspace/skill-converter.d.ts +18 -0
  284. package/dist/workspace/skill-converter.d.ts.map +1 -0
  285. package/dist/workspace/skill-converter.js +257 -0
  286. package/dist/workspace/skill-converter.js.map +1 -0
  287. package/dist/workspace/templates/index.d.ts +11 -0
  288. package/dist/workspace/templates/index.d.ts.map +1 -0
  289. package/dist/workspace/templates/index.js +21 -0
  290. package/dist/workspace/templates/index.js.map +1 -0
  291. package/dist/workspace/templates/knowledge-defrag.d.ts +25 -0
  292. package/dist/workspace/templates/knowledge-defrag.d.ts.map +1 -0
  293. package/dist/workspace/templates/knowledge-defrag.js +154 -0
  294. package/dist/workspace/templates/knowledge-defrag.js.map +1 -0
  295. package/dist/workspace/templates/knowledge-extraction.d.ts +25 -0
  296. package/dist/workspace/templates/knowledge-extraction.d.ts.map +1 -0
  297. package/dist/workspace/templates/knowledge-extraction.js +246 -0
  298. package/dist/workspace/templates/knowledge-extraction.js.map +1 -0
  299. package/dist/workspace/templates/meta-reflection.d.ts +47 -0
  300. package/dist/workspace/templates/meta-reflection.d.ts.map +1 -0
  301. package/dist/workspace/templates/meta-reflection.js +135 -0
  302. package/dist/workspace/templates/meta-reflection.js.map +1 -0
  303. package/dist/workspace/templates/playbook-extraction.d.ts +20 -0
  304. package/dist/workspace/templates/playbook-extraction.d.ts.map +1 -0
  305. package/dist/workspace/templates/playbook-extraction.js +189 -0
  306. package/dist/workspace/templates/playbook-extraction.js.map +1 -0
  307. package/dist/workspace/templates/refinement-analysis.d.ts +31 -0
  308. package/dist/workspace/templates/refinement-analysis.d.ts.map +1 -0
  309. package/dist/workspace/templates/refinement-analysis.js +107 -0
  310. package/dist/workspace/templates/refinement-analysis.js.map +1 -0
  311. package/dist/workspace/templates/solution-evaluation.d.ts +21 -0
  312. package/dist/workspace/templates/solution-evaluation.d.ts.map +1 -0
  313. package/dist/workspace/templates/solution-evaluation.js +131 -0
  314. package/dist/workspace/templates/solution-evaluation.js.map +1 -0
  315. package/dist/workspace/templates/team-playbook-extraction.d.ts +44 -0
  316. package/dist/workspace/templates/team-playbook-extraction.d.ts.map +1 -0
  317. package/dist/workspace/templates/team-playbook-extraction.js +497 -0
  318. package/dist/workspace/templates/team-playbook-extraction.js.map +1 -0
  319. package/dist/workspace/templates/team-trajectory-analysis.d.ts +19 -0
  320. package/dist/workspace/templates/team-trajectory-analysis.d.ts.map +1 -0
  321. package/dist/workspace/templates/team-trajectory-analysis.js +442 -0
  322. package/dist/workspace/templates/team-trajectory-analysis.js.map +1 -0
  323. package/dist/workspace/templates/trajectory-analysis.d.ts +19 -0
  324. package/dist/workspace/templates/trajectory-analysis.d.ts.map +1 -0
  325. package/dist/workspace/templates/trajectory-analysis.js +170 -0
  326. package/dist/workspace/templates/trajectory-analysis.js.map +1 -0
  327. package/dist/workspace/templates/usage-inference.d.ts +19 -0
  328. package/dist/workspace/templates/usage-inference.d.ts.map +1 -0
  329. package/dist/workspace/templates/usage-inference.js +125 -0
  330. package/dist/workspace/templates/usage-inference.js.map +1 -0
  331. package/dist/workspace/types.d.ts +145 -0
  332. package/dist/workspace/types.d.ts.map +1 -0
  333. package/dist/workspace/types.js +17 -0
  334. package/dist/workspace/types.js.map +1 -0
  335. package/docs/DESIGN-agentic-workspace.md +2057 -0
  336. package/docs/DESIGN-semantic-memory-knowledge-bank.md +1789 -0
  337. package/docs/DESIGN-session-bank.md +1134 -0
  338. package/docs/DESIGN-team-extraction-pipeline.md +1369 -0
  339. package/docs/DESIGN-workspace-migration.md +1079 -0
  340. package/docs/PLAN-agentic-workspace-implementation.md +717 -0
  341. package/docs/PLAN-graph-migration.md +299 -0
  342. package/docs/PLAN-session-bank-implementation.md +474 -0
  343. package/docs/PROPOSAL-team-aware-learning.md +1080 -0
  344. package/docs/RESEARCH-semantic-memory-knowledge-structures.md +517 -0
  345. package/docs/RESEARCH-team-trajectory-learning.md +553 -0
  346. package/gaps.md +204 -0
  347. package/package.json +24 -6
  348. package/references/agent-workspace/CLAUDE.md +74 -0
  349. package/references/agent-workspace/README.md +587 -0
  350. package/references/agent-workspace/media/banner.png +0 -0
  351. package/references/agent-workspace/package-lock.json +2061 -0
  352. package/references/agent-workspace/package.json +54 -0
  353. package/references/agent-workspace/src/handle.ts +122 -0
  354. package/references/agent-workspace/src/index.ts +32 -0
  355. package/references/agent-workspace/src/manager.ts +102 -0
  356. package/references/agent-workspace/src/readers/json.ts +71 -0
  357. package/references/agent-workspace/src/readers/markdown.ts +37 -0
  358. package/references/agent-workspace/src/readers/raw.ts +27 -0
  359. package/references/agent-workspace/src/types.ts +68 -0
  360. package/references/agent-workspace/src/validation.ts +93 -0
  361. package/references/agent-workspace/src/writers/json.ts +17 -0
  362. package/references/agent-workspace/src/writers/markdown.ts +27 -0
  363. package/references/agent-workspace/src/writers/raw.ts +22 -0
  364. package/references/agent-workspace/tests/errors.test.ts +652 -0
  365. package/references/agent-workspace/tests/handle.test.ts +144 -0
  366. package/references/agent-workspace/tests/manager.test.ts +124 -0
  367. package/references/agent-workspace/tests/readers.test.ts +205 -0
  368. package/references/agent-workspace/tests/validation.test.ts +196 -0
  369. package/references/agent-workspace/tests/writers.test.ts +108 -0
  370. package/references/agent-workspace/tsconfig.json +20 -0
  371. package/references/agent-workspace/tsup.config.ts +9 -0
  372. package/references/minimem/.claude/settings.json +7 -0
  373. package/references/minimem/.sudocode/issues.jsonl +18 -0
  374. package/references/minimem/.sudocode/specs.jsonl +1 -0
  375. package/references/minimem/CLAUDE.md +310 -0
  376. package/references/minimem/README.md +556 -0
  377. package/references/minimem/claude-plugin/.claude-plugin/plugin.json +10 -0
  378. package/references/minimem/claude-plugin/.mcp.json +7 -0
  379. package/references/minimem/claude-plugin/README.md +158 -0
  380. package/references/minimem/claude-plugin/commands/recall.md +47 -0
  381. package/references/minimem/claude-plugin/commands/remember.md +41 -0
  382. package/references/minimem/claude-plugin/hooks/__tests__/hooks.test.ts +272 -0
  383. package/references/minimem/claude-plugin/hooks/hooks.json +27 -0
  384. package/references/minimem/claude-plugin/hooks/session-end.sh +86 -0
  385. package/references/minimem/claude-plugin/hooks/session-start.sh +85 -0
  386. package/references/minimem/claude-plugin/skills/memory/SKILL.md +108 -0
  387. package/references/minimem/package-lock.json +5373 -0
  388. package/references/minimem/package.json +60 -0
  389. package/references/minimem/scripts/postbuild.js +35 -0
  390. package/references/minimem/src/__tests__/edge-cases.test.ts +371 -0
  391. package/references/minimem/src/__tests__/errors.test.ts +265 -0
  392. package/references/minimem/src/__tests__/helpers.ts +199 -0
  393. package/references/minimem/src/__tests__/internal.test.ts +407 -0
  394. package/references/minimem/src/__tests__/knowledge.test.ts +287 -0
  395. package/references/minimem/src/__tests__/minimem.integration.test.ts +1127 -0
  396. package/references/minimem/src/__tests__/session.test.ts +190 -0
  397. package/references/minimem/src/cli/__tests__/commands.test.ts +759 -0
  398. package/references/minimem/src/cli/commands/__tests__/conflicts.test.ts +141 -0
  399. package/references/minimem/src/cli/commands/append.ts +76 -0
  400. package/references/minimem/src/cli/commands/config.ts +262 -0
  401. package/references/minimem/src/cli/commands/conflicts.ts +413 -0
  402. package/references/minimem/src/cli/commands/daemon.ts +169 -0
  403. package/references/minimem/src/cli/commands/index.ts +12 -0
  404. package/references/minimem/src/cli/commands/init.ts +88 -0
  405. package/references/minimem/src/cli/commands/mcp.ts +177 -0
  406. package/references/minimem/src/cli/commands/push-pull.ts +213 -0
  407. package/references/minimem/src/cli/commands/search.ts +158 -0
  408. package/references/minimem/src/cli/commands/status.ts +84 -0
  409. package/references/minimem/src/cli/commands/sync-init.ts +290 -0
  410. package/references/minimem/src/cli/commands/sync.ts +70 -0
  411. package/references/minimem/src/cli/commands/upsert.ts +197 -0
  412. package/references/minimem/src/cli/config.ts +584 -0
  413. package/references/minimem/src/cli/index.ts +264 -0
  414. package/references/minimem/src/cli/shared.ts +161 -0
  415. package/references/minimem/src/cli/sync/__tests__/central.test.ts +152 -0
  416. package/references/minimem/src/cli/sync/__tests__/conflicts.test.ts +209 -0
  417. package/references/minimem/src/cli/sync/__tests__/daemon.test.ts +118 -0
  418. package/references/minimem/src/cli/sync/__tests__/detection.test.ts +207 -0
  419. package/references/minimem/src/cli/sync/__tests__/integration.test.ts +476 -0
  420. package/references/minimem/src/cli/sync/__tests__/registry.test.ts +363 -0
  421. package/references/minimem/src/cli/sync/__tests__/state.test.ts +255 -0
  422. package/references/minimem/src/cli/sync/__tests__/validation.test.ts +193 -0
  423. package/references/minimem/src/cli/sync/__tests__/watcher.test.ts +178 -0
  424. package/references/minimem/src/cli/sync/central.ts +292 -0
  425. package/references/minimem/src/cli/sync/conflicts.ts +204 -0
  426. package/references/minimem/src/cli/sync/daemon.ts +407 -0
  427. package/references/minimem/src/cli/sync/detection.ts +138 -0
  428. package/references/minimem/src/cli/sync/index.ts +107 -0
  429. package/references/minimem/src/cli/sync/operations.ts +373 -0
  430. package/references/minimem/src/cli/sync/registry.ts +279 -0
  431. package/references/minimem/src/cli/sync/state.ts +355 -0
  432. package/references/minimem/src/cli/sync/validation.ts +206 -0
  433. package/references/minimem/src/cli/sync/watcher.ts +234 -0
  434. package/references/minimem/src/cli/version.ts +34 -0
  435. package/references/minimem/src/core/index.ts +9 -0
  436. package/references/minimem/src/core/indexer.ts +628 -0
  437. package/references/minimem/src/core/searcher.ts +221 -0
  438. package/references/minimem/src/db/schema.ts +183 -0
  439. package/references/minimem/src/db/sqlite-vec.ts +24 -0
  440. package/references/minimem/src/embeddings/__tests__/embeddings.test.ts +431 -0
  441. package/references/minimem/src/embeddings/batch-gemini.ts +392 -0
  442. package/references/minimem/src/embeddings/batch-openai.ts +409 -0
  443. package/references/minimem/src/embeddings/embeddings.ts +434 -0
  444. package/references/minimem/src/index.ts +109 -0
  445. package/references/minimem/src/internal.ts +299 -0
  446. package/references/minimem/src/minimem.ts +1276 -0
  447. package/references/minimem/src/search/__tests__/hybrid.test.ts +247 -0
  448. package/references/minimem/src/search/graph.ts +234 -0
  449. package/references/minimem/src/search/hybrid.ts +151 -0
  450. package/references/minimem/src/search/search.ts +256 -0
  451. package/references/minimem/src/server/__tests__/mcp.test.ts +341 -0
  452. package/references/minimem/src/server/__tests__/tools.test.ts +364 -0
  453. package/references/minimem/src/server/mcp.ts +326 -0
  454. package/references/minimem/src/server/tools.ts +720 -0
  455. package/references/minimem/src/session.ts +460 -0
  456. package/references/minimem/tsconfig.json +19 -0
  457. package/references/minimem/tsup.config.ts +26 -0
  458. package/references/minimem/vitest.config.ts +24 -0
  459. package/references/skill-tree/.claude/settings.json +6 -0
  460. package/references/skill-tree/.sudocode/issues.jsonl +11 -0
  461. package/references/skill-tree/.sudocode/specs.jsonl +1 -0
  462. package/references/skill-tree/CLAUDE.md +150 -0
  463. package/references/skill-tree/README.md +324 -0
  464. package/references/skill-tree/docs/GAPS_v1.md +221 -0
  465. package/references/skill-tree/docs/INTEGRATION_PLAN.md +467 -0
  466. package/references/skill-tree/docs/TODOS.md +91 -0
  467. package/references/skill-tree/docs/anthropic_skill_guide.md +1364 -0
  468. package/references/skill-tree/docs/design/federated-skill-trees.md +524 -0
  469. package/references/skill-tree/docs/design/multi-agent-sync.md +759 -0
  470. package/references/skill-tree/docs/scraper/BRAINSTORM.md +583 -0
  471. package/references/skill-tree/docs/scraper/POC_PLAN.md +420 -0
  472. package/references/skill-tree/docs/scraper/README.md +170 -0
  473. package/references/skill-tree/examples/basic-usage.ts +190 -0
  474. package/references/skill-tree/package-lock.json +1509 -0
  475. package/references/skill-tree/package.json +66 -0
  476. package/references/skill-tree/scraper/README.md +123 -0
  477. package/references/skill-tree/scraper/docs/DESIGN.md +683 -0
  478. package/references/skill-tree/scraper/docs/PLAN.md +336 -0
  479. package/references/skill-tree/scraper/drizzle.config.ts +10 -0
  480. package/references/skill-tree/scraper/package-lock.json +6329 -0
  481. package/references/skill-tree/scraper/package.json +68 -0
  482. package/references/skill-tree/scraper/test/fixtures/invalid-skill/missing-description.md +7 -0
  483. package/references/skill-tree/scraper/test/fixtures/invalid-skill/missing-name.md +7 -0
  484. package/references/skill-tree/scraper/test/fixtures/minimal-skill/SKILL.md +27 -0
  485. package/references/skill-tree/scraper/test/fixtures/skill-json/SKILL.json +21 -0
  486. package/references/skill-tree/scraper/test/fixtures/skill-with-meta/SKILL.md +54 -0
  487. package/references/skill-tree/scraper/test/fixtures/skill-with-meta/_meta.json +24 -0
  488. package/references/skill-tree/scraper/test/fixtures/valid-skill/SKILL.md +93 -0
  489. package/references/skill-tree/scraper/test/fixtures/valid-skill/_meta.json +22 -0
  490. package/references/skill-tree/scraper/tsup.config.ts +14 -0
  491. package/references/skill-tree/scraper/vitest.config.ts +17 -0
  492. package/references/skill-tree/scripts/convert-to-vitest.ts +166 -0
  493. package/references/skill-tree/skills/skill-writer/SKILL.md +339 -0
  494. package/references/skill-tree/skills/skill-writer/references/examples.md +326 -0
  495. package/references/skill-tree/skills/skill-writer/references/patterns.md +210 -0
  496. package/references/skill-tree/skills/skill-writer/references/quality-checklist.md +123 -0
  497. package/references/skill-tree/test/run-all.ts +106 -0
  498. package/references/skill-tree/test/utils.ts +128 -0
  499. package/references/skill-tree/vitest.config.ts +16 -0
  500. package/src/atlas.ts +525 -13
  501. package/src/embeddings/provider.ts +10 -3
  502. package/src/index.ts +127 -5
  503. package/src/learning/index.ts +41 -6
  504. package/src/learning/knowledge-extractor.ts +470 -0
  505. package/src/learning/meta-learner.ts +54 -0
  506. package/src/learning/pipeline.ts +87 -8
  507. package/src/learning/team-ingester.ts +499 -0
  508. package/src/learning/team-meta-learner.ts +558 -0
  509. package/src/learning/team-pipeline.ts +364 -0
  510. package/src/learning/trajectory-sources/dataclaw.ts +403 -0
  511. package/src/learning/trajectory-sources/entire.ts +240 -0
  512. package/src/learning/trajectory-sources/file.ts +136 -0
  513. package/src/learning/trajectory-sources/huggingface.ts +248 -0
  514. package/src/learning/trajectory-sources/in-memory.ts +61 -0
  515. package/src/learning/trajectory-sources/index.ts +15 -0
  516. package/src/learning/trajectory-sources/pipeline.ts +69 -0
  517. package/src/memory/graph-layers/base.ts +184 -0
  518. package/src/memory/graph-layers/causal.ts +16 -0
  519. package/src/memory/graph-layers/entity.ts +16 -0
  520. package/src/memory/graph-layers/index.ts +5 -0
  521. package/src/memory/graph-layers/semantic.ts +16 -0
  522. package/src/memory/graph-layers/temporal.ts +16 -0
  523. package/src/memory/index.ts +45 -0
  524. package/src/memory/knowledge-bank.ts +1260 -0
  525. package/src/memory/knowledge-defrag.ts +329 -0
  526. package/src/memory/knowledge-graph.ts +361 -0
  527. package/src/memory/search-provider.ts +35 -0
  528. package/src/memory/search-providers/index.ts +3 -0
  529. package/src/memory/search-providers/minimem.ts +84 -0
  530. package/src/memory/search-providers/text-similarity.ts +35 -0
  531. package/src/memory/skill-exporter.ts +357 -0
  532. package/src/memory/system.ts +61 -8
  533. package/src/memory/team-experience.ts +604 -0
  534. package/src/runtime/backends/acp-protocol.ts +231 -0
  535. package/src/runtime/backends/acp.ts +57 -196
  536. package/src/runtime/backends/index.ts +14 -0
  537. package/src/runtime/backends/macro-agent.ts +177 -0
  538. package/src/runtime/compute-provider.ts +206 -0
  539. package/src/runtime/index.ts +22 -0
  540. package/src/runtime/manager.ts +167 -23
  541. package/src/runtime/types.ts +41 -0
  542. package/src/search/evaluator.ts +29 -4
  543. package/src/search/index.ts +9 -0
  544. package/src/search/refinement-loop.ts +106 -12
  545. package/src/search/team-router.ts +459 -0
  546. package/src/session-bank/git-reader.ts +190 -0
  547. package/src/session-bank/index.ts +24 -0
  548. package/src/session-bank/parser.ts +366 -0
  549. package/src/session-bank/session-bank.ts +464 -0
  550. package/src/session-bank/types.ts +173 -0
  551. package/src/surfacing/index.ts +23 -0
  552. package/src/surfacing/publisher.ts +23 -0
  553. package/src/surfacing/skill-library.ts +31 -0
  554. package/src/surfacing/skill-publisher.ts +223 -0
  555. package/src/surfacing/sqlite-storage-adapter.ts +301 -0
  556. package/src/surfacing/team-skill-library.ts +610 -0
  557. package/src/types/config.ts +252 -0
  558. package/src/types/dataclaw.ts +99 -0
  559. package/src/types/huggingface-transformers.d.ts +12 -0
  560. package/src/types/index.ts +156 -0
  561. package/src/types/knowledge-graph.ts +246 -0
  562. package/src/types/knowledge.ts +388 -0
  563. package/src/types/team-meta.ts +212 -0
  564. package/src/types/team-playbook.ts +384 -0
  565. package/src/types/team-trajectory.ts +673 -0
  566. package/src/types/trajectory-source.ts +47 -0
  567. package/src/utils/frontmatter.ts +118 -0
  568. package/src/utils/index.ts +7 -0
  569. package/src/workspace/index.ts +48 -0
  570. package/src/workspace/runner.ts +281 -0
  571. package/src/workspace/skill-converter.ts +288 -0
  572. package/src/workspace/templates/index.ts +64 -0
  573. package/src/workspace/templates/knowledge-defrag.ts +223 -0
  574. package/src/workspace/templates/knowledge-extraction.ts +337 -0
  575. package/src/workspace/templates/meta-reflection.ts +208 -0
  576. package/src/workspace/templates/playbook-extraction.ts +240 -0
  577. package/src/workspace/templates/refinement-analysis.ts +162 -0
  578. package/src/workspace/templates/solution-evaluation.ts +199 -0
  579. package/src/workspace/templates/team-playbook-extraction.ts +631 -0
  580. package/src/workspace/templates/team-trajectory-analysis.ts +564 -0
  581. package/src/workspace/templates/trajectory-analysis.ts +234 -0
  582. package/src/workspace/templates/usage-inference.ts +163 -0
  583. package/src/workspace/types.ts +233 -0
  584. package/tests/atlas-knowledge.test.ts +165 -0
  585. package/tests/gap-fixes.test.ts +1103 -0
  586. package/tests/integration/dataclaw-e2e.test.ts +559 -0
  587. package/tests/integration/e2e.test.ts +407 -0
  588. package/tests/integration/entire-e2e.test.ts +187 -0
  589. package/tests/integration/huggingface-e2e.test.ts +627 -0
  590. package/tests/integration/session-bank.test.ts +225 -0
  591. package/tests/integration/skill-tree-wiring.test.ts +152 -0
  592. package/tests/learning/dataclaw-trajectory-source.test.ts +642 -0
  593. package/tests/learning/entire-trajectory-source.test.ts +380 -0
  594. package/tests/learning/huggingface-trajectory-source.test.ts +817 -0
  595. package/tests/learning/knowledge-extractor.test.ts +491 -0
  596. package/tests/learning/team-ingester.test.ts +349 -0
  597. package/tests/learning/team-meta-learner.test.ts +618 -0
  598. package/tests/learning/team-pipeline.test.ts +334 -0
  599. package/tests/learning/trajectory-sources.test.ts +312 -0
  600. package/tests/memory/graph-layers/semantic.test.ts +219 -0
  601. package/tests/memory/knowledge-bank-extraction.test.ts +558 -0
  602. package/tests/memory/knowledge-bank.test.ts +705 -0
  603. package/tests/memory/knowledge-defrag.test.ts +366 -0
  604. package/tests/memory/knowledge-evolution.test.ts +563 -0
  605. package/tests/memory/knowledge-graph.test.ts +492 -0
  606. package/tests/memory/knowledge-inbox.test.ts +258 -0
  607. package/tests/memory/knowledge-minimem.test.ts +251 -0
  608. package/tests/memory/skill-exporter.test.ts +470 -0
  609. package/tests/memory/team-experience.test.ts +411 -0
  610. package/tests/runtime/agent-manager.test.ts +1 -1
  611. package/tests/runtime/compute-provider.test.ts +288 -0
  612. package/tests/runtime/delegate.test.ts +349 -0
  613. package/tests/runtime/macro-agent-backend.test.ts +266 -0
  614. package/tests/search/team-router.test.ts +376 -0
  615. package/tests/session-bank/fixtures/multi-tool-session/full.jsonl +12 -0
  616. package/tests/session-bank/fixtures/multi-tool-session/metadata.json +28 -0
  617. package/tests/session-bank/fixtures/root-metadata.json +18 -0
  618. package/tests/session-bank/fixtures/simple-session/full.jsonl +6 -0
  619. package/tests/session-bank/fixtures/simple-session/metadata.json +38 -0
  620. package/tests/session-bank/git-reader.test.ts +232 -0
  621. package/tests/session-bank/parser.test.ts +321 -0
  622. package/tests/session-bank/session-bank.test.ts +546 -0
  623. package/tests/surfacing/skill-publisher.test.ts +398 -0
  624. package/tests/surfacing/sqlite-storage-adapter.test.ts +218 -0
  625. package/tests/surfacing/team-skill-library.test.ts +444 -0
  626. package/tests/types/team-meta.test.ts +147 -0
  627. package/tests/types/team-playbook.test.ts +246 -0
  628. package/tests/types/team-trajectory.test.ts +557 -0
  629. package/tests/utils/frontmatter.test.ts +208 -0
  630. package/tests/workspace/full-flow.test.ts +839 -0
  631. package/tests/workspace/manager.test.ts +215 -0
  632. package/tests/workspace/runner.test.ts +330 -0
  633. package/tests/workspace/skill-converter.test.ts +205 -0
  634. package/tests/workspace/templates/knowledge-extraction.test.ts +235 -0
  635. package/tests/workspace/templates/team-playbook-extraction.test.ts +341 -0
  636. package/tests/workspace/templates/team-trajectory-analysis.test.ts +417 -0
  637. package/src/learning/llm-extractor.ts +0 -542
@@ -0,0 +1,559 @@
1
+ /**
2
+ * End-to-end integration test: DataclawTrajectorySource
3
+ *
4
+ * Writes realistic dataclaw JSONL to temp files, loads through the source,
5
+ * and verifies the trajectories are valid and compatible with the learning
6
+ * pipeline (analyzer, schema validation, knowledge extraction).
7
+ */
8
+ import { describe, it, expect, beforeAll, afterAll } from 'vitest';
9
+ import { mkdtemp, rm, writeFile, mkdir } from 'node:fs/promises';
10
+ import { tmpdir } from 'node:os';
11
+ import { join } from 'node:path';
12
+ import { DataclawTrajectorySource } from '../../src/learning/trajectory-sources/dataclaw.js';
13
+ import { TrajectorySchema } from '../../src/types/trajectory.js';
14
+ import { TrajectoryAnalyzer, createAnalyzer } from '../../src/learning/analyzer.js';
15
+ import type { DataclawSession } from '../../src/types/dataclaw.js';
16
+
17
+ // ── Realistic dataclaw sessions simulating different sources ──
18
+
19
+ /** A Claude Code session fixing a TypeScript bug */
20
+ function claudeSession(): DataclawSession {
21
+ return {
22
+ session_id: 'claude-session-001',
23
+ project: 'my-web-app',
24
+ model: 'claude-opus-4-6',
25
+ source: 'claude',
26
+ git_branch: 'fix/auth-bug',
27
+ start_time: '2026-02-01T09:00:00+00:00',
28
+ end_time: '2026-02-01T09:25:00+00:00',
29
+ messages: [
30
+ {
31
+ role: 'user',
32
+ content: 'The login endpoint returns 500 when the user has no email. Can you fix it?',
33
+ timestamp: '2026-02-01T09:00:05+00:00',
34
+ },
35
+ {
36
+ role: 'assistant',
37
+ content: "Let me look at the login handler to understand what's happening.",
38
+ thinking: 'User reports a 500 error on the login endpoint when user has no email. This is likely a null reference issue in the user validation code.',
39
+ tool_uses: [
40
+ {
41
+ tool: 'Read',
42
+ input: { file_path: '/src/routes/auth.ts' },
43
+ output: { text: 'export async function login(req: Request) {\n const user = await findUser(req.body.id);\n const email = user.email.toLowerCase();\n // ...\n}' },
44
+ status: 'success',
45
+ },
46
+ ],
47
+ timestamp: '2026-02-01T09:00:15+00:00',
48
+ },
49
+ {
50
+ role: 'assistant',
51
+ content: "Found it — `user.email.toLowerCase()` throws when email is null. Let me add a null check.",
52
+ tool_uses: [
53
+ {
54
+ tool: 'Edit',
55
+ input: {
56
+ file_path: '/src/routes/auth.ts',
57
+ old_string: 'const email = user.email.toLowerCase();',
58
+ new_string: 'const email = user.email?.toLowerCase() ?? \'\';',
59
+ },
60
+ output: { text: 'File edited successfully' },
61
+ status: 'success',
62
+ },
63
+ ],
64
+ timestamp: '2026-02-01T09:01:00+00:00',
65
+ },
66
+ {
67
+ role: 'assistant',
68
+ content: "Now let me run the tests to make sure this fix doesn't break anything.",
69
+ tool_uses: [
70
+ {
71
+ tool: 'bash',
72
+ input: { command: 'npm test -- --grep "login"' },
73
+ output: { text: 'PASS tests/auth.test.ts\n login endpoint\n ✓ returns 200 for valid user (45ms)\n ✓ returns 200 for user without email (12ms)\n ✓ returns 401 for invalid credentials (8ms)\n\nTest Suites: 1 passed, 1 total\nTests: 3 passed, 3 total' },
74
+ status: 'success',
75
+ },
76
+ ],
77
+ timestamp: '2026-02-01T09:02:00+00:00',
78
+ },
79
+ {
80
+ role: 'assistant',
81
+ content: 'All tests pass. The fix adds optional chaining to handle users without an email address, preventing the 500 error.',
82
+ timestamp: '2026-02-01T09:02:30+00:00',
83
+ },
84
+ ],
85
+ stats: {
86
+ user_messages: 1,
87
+ assistant_messages: 4,
88
+ tool_uses: 3,
89
+ input_tokens: 12000,
90
+ output_tokens: 2500,
91
+ },
92
+ };
93
+ }
94
+
95
+ /** A Codex session working with Python */
96
+ function codexSession(): DataclawSession {
97
+ return {
98
+ session_id: 'codex-session-042',
99
+ project: 'ml-pipeline',
100
+ model: 'gpt-5.3-codex',
101
+ source: 'codex',
102
+ git_branch: 'feature/data-loader',
103
+ start_time: '2026-02-10T14:00:00+00:00',
104
+ end_time: '2026-02-10T14:45:00+00:00',
105
+ messages: [
106
+ {
107
+ role: 'user',
108
+ content: 'Add a CSV data loader to the pipeline module that supports chunked reading for large files',
109
+ timestamp: '2026-02-10T14:00:00+00:00',
110
+ },
111
+ {
112
+ role: 'assistant',
113
+ content: "I'll create a chunked CSV loader. Let me first check the existing pipeline structure.",
114
+ tool_uses: [
115
+ {
116
+ tool: 'exec_command',
117
+ input: { command: 'ls src/pipeline/' },
118
+ output: { exit_code: 0, wall_time: '0.1 seconds', output: '__init__.py\nbase.py\njson_loader.py\nparquet_loader.py' },
119
+ status: 'success',
120
+ },
121
+ ],
122
+ timestamp: '2026-02-10T14:00:30+00:00',
123
+ },
124
+ {
125
+ role: 'assistant',
126
+ content: 'Creating the CSV loader following the existing pattern.',
127
+ tool_uses: [
128
+ {
129
+ tool: 'write_file',
130
+ input: { file_path: 'src/pipeline/csv_loader.py', content: 'import pandas as pd\nfrom .base import BaseLoader\n\nclass CSVLoader(BaseLoader):\n def load(self, path: str, chunk_size: int = 10000):\n for chunk in pd.read_csv(path, chunksize=chunk_size):\n yield self.process(chunk)\n' },
131
+ output: {},
132
+ status: 'success',
133
+ },
134
+ ],
135
+ timestamp: '2026-02-10T14:05:00+00:00',
136
+ },
137
+ {
138
+ role: 'assistant',
139
+ content: "Let me add the import to __init__.py and run the tests.",
140
+ tool_uses: [
141
+ {
142
+ tool: 'exec_command',
143
+ input: { command: 'python -m pytest tests/test_csv_loader.py -v' },
144
+ output: { exit_code: 0, wall_time: '3 seconds', output: 'tests/test_csv_loader.py::test_load_small_csv PASSED\ntests/test_csv_loader.py::test_chunked_reading PASSED\n\n2 passed in 2.1s' },
145
+ status: 'success',
146
+ },
147
+ ],
148
+ timestamp: '2026-02-10T14:10:00+00:00',
149
+ },
150
+ {
151
+ role: 'assistant',
152
+ content: 'The CSV data loader is implemented and tested. It supports chunked reading for memory efficiency with large files.',
153
+ timestamp: '2026-02-10T14:11:00+00:00',
154
+ },
155
+ ],
156
+ stats: {
157
+ user_messages: 1,
158
+ assistant_messages: 4,
159
+ tool_uses: 3,
160
+ input_tokens: 8000,
161
+ output_tokens: 2000,
162
+ },
163
+ };
164
+ }
165
+
166
+ /** A session that fails — error-heavy with failure signals */
167
+ function failedSession(): DataclawSession {
168
+ return {
169
+ session_id: 'failed-session-007',
170
+ project: 'my-web-app',
171
+ model: 'claude-opus-4-6',
172
+ source: 'claude',
173
+ git_branch: 'main',
174
+ start_time: '2026-02-05T16:00:00+00:00',
175
+ end_time: '2026-02-05T16:10:00+00:00',
176
+ messages: [
177
+ {
178
+ role: 'user',
179
+ content: 'Deploy the app to production',
180
+ timestamp: '2026-02-05T16:00:00+00:00',
181
+ },
182
+ {
183
+ role: 'assistant',
184
+ content: 'Attempting deployment.',
185
+ tool_uses: [
186
+ {
187
+ tool: 'bash',
188
+ input: { command: 'npm run deploy' },
189
+ output: { text: 'Error: Missing DEPLOY_TOKEN environment variable' },
190
+ status: 'error',
191
+ },
192
+ ],
193
+ timestamp: '2026-02-05T16:01:00+00:00',
194
+ },
195
+ {
196
+ role: 'assistant',
197
+ content: 'Retrying with alternate method.',
198
+ tool_uses: [
199
+ {
200
+ tool: 'bash',
201
+ input: { command: 'npx deploy --force' },
202
+ output: { text: 'Fatal: permission denied' },
203
+ status: 'error',
204
+ },
205
+ ],
206
+ timestamp: '2026-02-05T16:02:00+00:00',
207
+ },
208
+ {
209
+ role: 'assistant',
210
+ content: 'I was unable to deploy. The deployment requires a DEPLOY_TOKEN that is not available in this environment.',
211
+ timestamp: '2026-02-05T16:03:00+00:00',
212
+ },
213
+ ],
214
+ stats: {
215
+ user_messages: 1,
216
+ assistant_messages: 3,
217
+ tool_uses: 2,
218
+ input_tokens: 5000,
219
+ output_tokens: 1000,
220
+ },
221
+ };
222
+ }
223
+
224
+ /** A minimal no-tools Q&A session */
225
+ function conversationOnlySession(): DataclawSession {
226
+ return {
227
+ session_id: 'qa-session-099',
228
+ project: 'my-web-app',
229
+ model: 'claude-opus-4-6',
230
+ source: 'claude',
231
+ git_branch: null,
232
+ start_time: '2026-02-15T11:00:00+00:00',
233
+ end_time: '2026-02-15T11:05:00+00:00',
234
+ messages: [
235
+ {
236
+ role: 'user',
237
+ content: 'Explain how the middleware chain works in our Express app',
238
+ timestamp: '2026-02-15T11:00:00+00:00',
239
+ },
240
+ {
241
+ role: 'assistant',
242
+ content: 'Your Express middleware chain processes requests in order: first auth validation, then rate limiting, then the route handler. Each middleware calls next() to pass control.',
243
+ timestamp: '2026-02-15T11:00:30+00:00',
244
+ },
245
+ ],
246
+ stats: {
247
+ user_messages: 1,
248
+ assistant_messages: 1,
249
+ tool_uses: 0,
250
+ input_tokens: 3000,
251
+ output_tokens: 500,
252
+ },
253
+ };
254
+ }
255
+
256
+ // ============================================================================
257
+ // E2E Tests
258
+ // ============================================================================
259
+
260
+ describe('DataClaw E2E Integration', () => {
261
+ let tmpDir: string;
262
+ let dataDir: string;
263
+
264
+ beforeAll(async () => {
265
+ tmpDir = await mkdtemp(join(tmpdir(), 'dataclaw-e2e-'));
266
+ dataDir = join(tmpDir, 'dataclaw-export');
267
+ await mkdir(dataDir);
268
+
269
+ // Write a multi-file export — resembling a real dataclaw dataset
270
+ const allSessions = [
271
+ claudeSession(),
272
+ codexSession(),
273
+ failedSession(),
274
+ conversationOnlySession(),
275
+ ];
276
+
277
+ // Split across two files like a real export might
278
+ await writeFile(
279
+ join(dataDir, 'claude-sessions.jsonl'),
280
+ [claudeSession(), failedSession(), conversationOnlySession()]
281
+ .map((s) => JSON.stringify(s))
282
+ .join('\n'),
283
+ 'utf-8',
284
+ );
285
+ await writeFile(
286
+ join(dataDir, 'codex-sessions.jsonl'),
287
+ JSON.stringify(codexSession()),
288
+ 'utf-8',
289
+ );
290
+
291
+ // Companion metadata file (should be ignored by the source)
292
+ await writeFile(
293
+ join(dataDir, 'metadata.json'),
294
+ JSON.stringify({
295
+ sessions: 4,
296
+ skipped: 0,
297
+ redactions: 2,
298
+ models: { 'claude-opus-4-6': 3, 'gpt-5.3-codex': 1 },
299
+ projects: ['my-web-app', 'ml-pipeline'],
300
+ exported_at: '2026-02-20T00:00:00Z',
301
+ }),
302
+ 'utf-8',
303
+ );
304
+ });
305
+
306
+ afterAll(async () => {
307
+ await rm(tmpDir, { recursive: true, force: true });
308
+ });
309
+
310
+ describe('load all sessions from directory', () => {
311
+ it('should load all 4 sessions from the dataset', async () => {
312
+ const source = new DataclawTrajectorySource(dataDir);
313
+ const items = await source.load();
314
+ expect(items).toHaveLength(4);
315
+ });
316
+
317
+ it('should produce valid Trajectory objects for every session', async () => {
318
+ const source = new DataclawTrajectorySource(dataDir);
319
+ const items = await source.load();
320
+
321
+ for (const { trajectory } of items) {
322
+ const parsed = TrajectorySchema.safeParse(trajectory);
323
+ expect(parsed.success, `Invalid trajectory: ${trajectory.id}`).toBe(true);
324
+ }
325
+ });
326
+
327
+ it('should correctly identify the source provenance in metadata', async () => {
328
+ const source = new DataclawTrajectorySource(dataDir);
329
+ const items = await source.load();
330
+
331
+ for (const { trajectory } of items) {
332
+ expect(trajectory.metadata.source).toBe('dataclaw');
333
+ expect(trajectory.metadata.dataclawSource).toBeTruthy();
334
+ expect(trajectory.metadata.sessionId).toBeTruthy();
335
+ }
336
+ });
337
+ });
338
+
339
+ describe('trajectory quality — Claude session', () => {
340
+ it('should extract meaningful task description', async () => {
341
+ const source = new DataclawTrajectorySource(dataDir);
342
+ const items = await source.load();
343
+ const claude = items.find((i) => i.trajectory.id.includes('claude-session-001'));
344
+ expect(claude).toBeDefined();
345
+ expect(claude!.trajectory.task.description).toContain('login endpoint');
346
+ expect(claude!.trajectory.task.description).toContain('500');
347
+ });
348
+
349
+ it('should extract tool-use steps with correct thought/action/observation pattern', async () => {
350
+ const source = new DataclawTrajectorySource(dataDir);
351
+ const items = await source.load();
352
+ const claude = items.find((i) => i.trajectory.id.includes('claude-session-001'));
353
+ const steps = claude!.trajectory.steps;
354
+
355
+ // Should have tool steps + final text step
356
+ expect(steps.length).toBeGreaterThanOrEqual(3);
357
+
358
+ // Read step
359
+ const readStep = steps.find((s) => s.metadata?.toolName === 'Read');
360
+ expect(readStep).toBeDefined();
361
+ expect(readStep!.action).toContain('Read');
362
+ expect(readStep!.observation).toContain('user.email.toLowerCase');
363
+ expect(readStep!.thought).toBeTruthy(); // should have thinking
364
+
365
+ // Edit step
366
+ const editStep = steps.find((s) => s.metadata?.toolName === 'Edit');
367
+ expect(editStep).toBeDefined();
368
+ expect(editStep!.observation).toContain('File edited');
369
+
370
+ // Bash step (test run)
371
+ const bashStep = steps.find((s) => s.metadata?.toolName === 'bash');
372
+ expect(bashStep).toBeDefined();
373
+ expect(bashStep!.observation).toContain('3 passed');
374
+ });
375
+
376
+ it('should infer TypeScript domain from file paths', async () => {
377
+ const source = new DataclawTrajectorySource(dataDir);
378
+ const items = await source.load();
379
+ const claude = items.find((i) => i.trajectory.id.includes('claude-session-001'));
380
+ expect(claude!.trajectory.task.domain).toBe('typescript');
381
+ });
382
+
383
+ it('should infer success for a clean session', async () => {
384
+ const source = new DataclawTrajectorySource(dataDir);
385
+ const items = await source.load();
386
+ const claude = items.find((i) => i.trajectory.id.includes('claude-session-001'));
387
+ expect(claude!.trajectory.outcome.success).toBe(true);
388
+ });
389
+
390
+ it('should compute correct wall time and token totals', async () => {
391
+ const source = new DataclawTrajectorySource(dataDir);
392
+ const items = await source.load();
393
+ const claude = items.find((i) => i.trajectory.id.includes('claude-session-001'));
394
+ expect(claude!.trajectory.wallTimeSeconds).toBe(25 * 60); // 25 minutes
395
+ expect(claude!.trajectory.totalTokens).toBe(14500); // 12000 + 2500
396
+ });
397
+ });
398
+
399
+ describe('trajectory quality — Codex session', () => {
400
+ it('should correctly map Codex tool format (exec_command)', async () => {
401
+ const source = new DataclawTrajectorySource(dataDir);
402
+ const items = await source.load();
403
+ const codex = items.find((i) => i.trajectory.id.includes('codex-session'));
404
+ expect(codex).toBeDefined();
405
+
406
+ // exec_command output uses { output: "..." } shape
407
+ const lsStep = codex!.trajectory.steps.find((s) =>
408
+ s.metadata?.toolName === 'exec_command',
409
+ );
410
+ expect(lsStep).toBeDefined();
411
+ expect(lsStep!.observation).toContain('json_loader.py');
412
+ });
413
+
414
+ it('should infer Python domain from Python file paths', async () => {
415
+ const source = new DataclawTrajectorySource(dataDir);
416
+ const items = await source.load();
417
+ const codex = items.find((i) => i.trajectory.id.includes('codex-session'));
418
+ expect(codex!.trajectory.task.domain).toBe('python');
419
+ });
420
+
421
+ it('should set agentId from model field', async () => {
422
+ const source = new DataclawTrajectorySource(dataDir);
423
+ const items = await source.load();
424
+ const codex = items.find((i) => i.trajectory.id.includes('codex-session'));
425
+ expect(codex!.trajectory.agentId).toBe('gpt-5.3-codex');
426
+ });
427
+ });
428
+
429
+ describe('trajectory quality — failed session', () => {
430
+ it('should detect failure from high error rate and failure signals', async () => {
431
+ const source = new DataclawTrajectorySource(dataDir);
432
+ const items = await source.load();
433
+ const failed = items.find((i) => i.trajectory.id.includes('failed-session'));
434
+ expect(failed).toBeDefined();
435
+ expect(failed!.trajectory.outcome.success).toBe(false);
436
+ });
437
+
438
+ it('should report a partial score reflecting the error rate', async () => {
439
+ const source = new DataclawTrajectorySource(dataDir);
440
+ const items = await source.load();
441
+ const failed = items.find((i) => i.trajectory.id.includes('failed-session'));
442
+ expect(failed!.trajectory.outcome.partialScore).toBeLessThan(0.5);
443
+ });
444
+ });
445
+
446
+ describe('trajectory quality — conversation-only session', () => {
447
+ it('should handle pure Q&A with no tool usage', async () => {
448
+ const source = new DataclawTrajectorySource(dataDir);
449
+ const items = await source.load();
450
+ const qa = items.find((i) => i.trajectory.id.includes('qa-session'));
451
+ expect(qa).toBeDefined();
452
+ expect(qa!.trajectory.steps).toHaveLength(1);
453
+ expect(qa!.trajectory.steps[0].thought).toContain('middleware');
454
+ });
455
+ });
456
+
457
+ describe('filtering', () => {
458
+ it('should filter by source (claude only)', async () => {
459
+ const source = new DataclawTrajectorySource(dataDir, {
460
+ sources: ['claude'],
461
+ });
462
+ const items = await source.load();
463
+ expect(items).toHaveLength(3); // claude + failed + qa
464
+ for (const { trajectory } of items) {
465
+ expect(trajectory.metadata.dataclawSource).toBe('claude');
466
+ }
467
+ });
468
+
469
+ it('should filter by model', async () => {
470
+ const source = new DataclawTrajectorySource(dataDir, {
471
+ models: ['gpt-5.3-codex'],
472
+ });
473
+ const items = await source.load();
474
+ expect(items).toHaveLength(1);
475
+ expect(items[0].trajectory.metadata.model).toBe('gpt-5.3-codex');
476
+ });
477
+
478
+ it('should filter successOnly', async () => {
479
+ const source = new DataclawTrajectorySource(dataDir);
480
+ const items = await source.load({ successOnly: true });
481
+ for (const { trajectory } of items) {
482
+ expect(trajectory.outcome.success).toBe(true);
483
+ }
484
+ // Failed session should be excluded
485
+ expect(
486
+ items.find((i) => i.trajectory.id.includes('failed-session')),
487
+ ).toBeUndefined();
488
+ });
489
+
490
+ it('should filter by domain', async () => {
491
+ const source = new DataclawTrajectorySource(dataDir);
492
+ const items = await source.load({ domain: 'python' });
493
+ expect(items).toHaveLength(1);
494
+ expect(items[0].trajectory.task.domain).toBe('python');
495
+ });
496
+
497
+ it('should filter by since date', async () => {
498
+ const source = new DataclawTrajectorySource(dataDir);
499
+ const items = await source.load({
500
+ since: new Date('2026-02-10T00:00:00Z'),
501
+ });
502
+ // Only codex (Feb 10) and qa (Feb 15) sessions
503
+ expect(items).toHaveLength(2);
504
+ });
505
+
506
+ it('should combine source + successOnly filters', async () => {
507
+ const source = new DataclawTrajectorySource(dataDir, {
508
+ sources: ['claude'],
509
+ });
510
+ const items = await source.load({ successOnly: true });
511
+ // Claude source has 3 sessions, but 1 failed
512
+ expect(items).toHaveLength(2);
513
+ });
514
+ });
515
+
516
+ describe('analyzer compatibility', () => {
517
+ it('should produce trajectories analyzable by TrajectoryAnalyzer', async () => {
518
+ const source = new DataclawTrajectorySource(dataDir);
519
+ const items = await source.load({ successOnly: true, limit: 2 });
520
+ const analyzer = createAnalyzer('simple');
521
+
522
+ for (const { trajectory } of items) {
523
+ const analysis = await analyzer.analyze(trajectory);
524
+
525
+ expect(analysis).toBeDefined();
526
+ expect(typeof analysis.success).toBe('boolean');
527
+ expect(analysis.stepAttribution).toHaveLength(trajectory.steps.length);
528
+ expect(analysis.keySteps).toBeDefined();
529
+ expect(typeof analysis.abstractable).toBe('boolean');
530
+ }
531
+ });
532
+
533
+ it('should have meaningful key steps identified by the analyzer', async () => {
534
+ const source = new DataclawTrajectorySource(dataDir);
535
+ const items = await source.load();
536
+ const claude = items.find((i) => i.trajectory.id.includes('claude-session-001'));
537
+ const analyzer = createAnalyzer('simple');
538
+ const analysis = await analyzer.analyze(claude!.trajectory);
539
+
540
+ // A 4-step trajectory with tool usage should have identifiable key steps
541
+ expect(analysis.stepAttribution.length).toBeGreaterThan(0);
542
+ // At least one step should have non-zero attribution
543
+ expect(analysis.stepAttribution.some((s) => s > 0)).toBe(true);
544
+ });
545
+ });
546
+
547
+ describe('count', () => {
548
+ it('should return correct count for all sessions', async () => {
549
+ const source = new DataclawTrajectorySource(dataDir);
550
+ expect(await source.count()).toBe(4);
551
+ });
552
+
553
+ it('should return correct count with filters', async () => {
554
+ const source = new DataclawTrajectorySource(dataDir);
555
+ expect(await source.count({ successOnly: true })).toBeLessThan(4);
556
+ expect(await source.count({ domain: 'python' })).toBe(1);
557
+ });
558
+ });
559
+ });