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,817 @@
1
+ import { describe, it, expect, vi, beforeEach } from 'vitest';
2
+ import { HuggingFaceTrajectorySource } from '../../src/learning/trajectory-sources/huggingface.js';
3
+ import { TrajectorySchema } from '../../src/types/trajectory.js';
4
+ import type { DataclawSession } from '../../src/types/dataclaw.js';
5
+
6
+ // ── Realistic dataclaw sessions (matching real HF dataset schema) ──
7
+
8
+ function claudeSession(): DataclawSession {
9
+ return {
10
+ session_id: 'abc-def-001',
11
+ project: 'my-web-app',
12
+ model: 'claude-opus-4-6',
13
+ source: 'claude',
14
+ git_branch: 'fix/auth-bug',
15
+ start_time: '2026-02-01T09:00:00+00:00',
16
+ end_time: '2026-02-01T09:25:00+00:00',
17
+ messages: [
18
+ {
19
+ role: 'user',
20
+ content: 'The login endpoint returns 500 when the user has no email.',
21
+ timestamp: '2026-02-01T09:00:05+00:00',
22
+ },
23
+ {
24
+ role: 'assistant',
25
+ content: "Let me look at the login handler.",
26
+ thinking: 'Likely a null reference on user.email.',
27
+ tool_uses: [
28
+ {
29
+ tool: 'Read',
30
+ input: { file_path: '/src/routes/auth.ts' },
31
+ output: { text: 'const email = user.email.toLowerCase();' },
32
+ status: 'success',
33
+ },
34
+ ],
35
+ timestamp: '2026-02-01T09:00:15+00:00',
36
+ },
37
+ {
38
+ role: 'assistant',
39
+ content: "Found it — adding optional chaining.",
40
+ tool_uses: [
41
+ {
42
+ tool: 'Edit',
43
+ input: {
44
+ file_path: '/src/routes/auth.ts',
45
+ old_string: 'user.email.toLowerCase()',
46
+ new_string: 'user.email?.toLowerCase() ?? ""',
47
+ },
48
+ output: { text: 'File edited successfully' },
49
+ status: 'success',
50
+ },
51
+ ],
52
+ timestamp: '2026-02-01T09:01:00+00:00',
53
+ },
54
+ {
55
+ role: 'assistant',
56
+ content: 'Fix applied. The login handler now handles null emails.',
57
+ timestamp: '2026-02-01T09:02:30+00:00',
58
+ },
59
+ ],
60
+ stats: {
61
+ user_messages: 1,
62
+ assistant_messages: 3,
63
+ tool_uses: 2,
64
+ input_tokens: 12000,
65
+ output_tokens: 2500,
66
+ },
67
+ };
68
+ }
69
+
70
+ function codexSession(): DataclawSession {
71
+ return {
72
+ session_id: 'codex-042',
73
+ project: 'ml-pipeline',
74
+ model: 'gpt-5.3-codex',
75
+ source: 'codex',
76
+ git_branch: 'feature/data-loader',
77
+ start_time: '2026-02-10T14:00:00+00:00',
78
+ end_time: '2026-02-10T14:45:00+00:00',
79
+ messages: [
80
+ {
81
+ role: 'user',
82
+ content: 'Add a CSV data loader to the pipeline',
83
+ timestamp: '2026-02-10T14:00:00+00:00',
84
+ },
85
+ {
86
+ role: 'assistant',
87
+ content: 'Creating the CSV loader.',
88
+ tool_uses: [
89
+ {
90
+ tool: 'write_file',
91
+ input: { file_path: 'src/pipeline/csv_loader.py', content: 'import pandas as pd' },
92
+ output: {},
93
+ status: 'success',
94
+ },
95
+ ],
96
+ timestamp: '2026-02-10T14:05:00+00:00',
97
+ },
98
+ {
99
+ role: 'assistant',
100
+ content: 'Done. CSV loader is ready.',
101
+ timestamp: '2026-02-10T14:11:00+00:00',
102
+ },
103
+ ],
104
+ stats: {
105
+ user_messages: 1,
106
+ assistant_messages: 2,
107
+ tool_uses: 1,
108
+ input_tokens: 8000,
109
+ output_tokens: 2000,
110
+ },
111
+ };
112
+ }
113
+
114
+ function failedSession(): DataclawSession {
115
+ return {
116
+ session_id: 'failed-007',
117
+ project: 'my-web-app',
118
+ model: 'claude-opus-4-6',
119
+ source: 'claude',
120
+ git_branch: 'main',
121
+ start_time: '2026-02-05T16:00:00+00:00',
122
+ end_time: '2026-02-05T16:10:00+00:00',
123
+ messages: [
124
+ {
125
+ role: 'user',
126
+ content: 'Deploy the app to production',
127
+ timestamp: '2026-02-05T16:00:00+00:00',
128
+ },
129
+ {
130
+ role: 'assistant',
131
+ content: 'Attempting deployment.',
132
+ tool_uses: [
133
+ {
134
+ tool: 'bash',
135
+ input: { command: 'npm run deploy' },
136
+ output: { text: 'Error: Missing DEPLOY_TOKEN' },
137
+ status: 'error',
138
+ },
139
+ ],
140
+ timestamp: '2026-02-05T16:01:00+00:00',
141
+ },
142
+ {
143
+ role: 'assistant',
144
+ content: 'I was unable to deploy. Missing DEPLOY_TOKEN.',
145
+ timestamp: '2026-02-05T16:03:00+00:00',
146
+ },
147
+ ],
148
+ stats: {
149
+ user_messages: 1,
150
+ assistant_messages: 2,
151
+ tool_uses: 1,
152
+ input_tokens: 5000,
153
+ output_tokens: 1000,
154
+ },
155
+ };
156
+ }
157
+
158
+ // ── Mock helpers ──
159
+
160
+ type FetchFn = typeof globalThis.fetch;
161
+
162
+ /** Wraps sessions into an HF datasets-server /rows response */
163
+ function makeRowsResponse(
164
+ sessions: DataclawSession[],
165
+ totalRows: number,
166
+ offset = 0,
167
+ ) {
168
+ return {
169
+ features: [],
170
+ rows: sessions.map((s, i) => ({ row_idx: offset + i, row: s })),
171
+ num_rows_total: totalRows,
172
+ num_rows_per_page: 100,
173
+ partial: false,
174
+ };
175
+ }
176
+
177
+ /** Wraps a row count into an HF datasets-server /info response */
178
+ function makeInfoResponse(numRows: number, config = 'default') {
179
+ return {
180
+ dataset_info: {
181
+ [config]: {
182
+ num_rows: numRows,
183
+ dataset_name: 'test-dataset',
184
+ },
185
+ },
186
+ };
187
+ }
188
+
189
+ /** Creates a mock fetch that returns controlled responses */
190
+ function createMockFetch(
191
+ sessions: DataclawSession[],
192
+ opts?: { pageSize?: number; failOnPage?: number; infoFails?: boolean },
193
+ ): FetchFn {
194
+ const pageSize = opts?.pageSize ?? 100;
195
+
196
+ return vi.fn(async (input: RequestInfo | URL, _init?: RequestInit) => {
197
+ const url = typeof input === 'string' ? input : input.toString();
198
+
199
+ // /info endpoint
200
+ if (url.includes('/info')) {
201
+ if (opts?.infoFails) {
202
+ return new Response('Internal Server Error', { status: 500 });
203
+ }
204
+ return new Response(
205
+ JSON.stringify(makeInfoResponse(sessions.length)),
206
+ { status: 200, headers: { 'Content-Type': 'application/json' } },
207
+ );
208
+ }
209
+
210
+ // /rows endpoint
211
+ if (url.includes('/rows')) {
212
+ const parsed = new URL(url);
213
+ const offset = parseInt(parsed.searchParams.get('offset') ?? '0', 10);
214
+ const length = parseInt(parsed.searchParams.get('length') ?? String(pageSize), 10);
215
+
216
+ // Simulate page failure
217
+ if (opts?.failOnPage !== undefined) {
218
+ const pageNum = Math.floor(offset / length);
219
+ if (pageNum === opts.failOnPage) {
220
+ return new Response('Internal Server Error', { status: 500 });
221
+ }
222
+ }
223
+
224
+ const page = sessions.slice(offset, offset + length);
225
+ return new Response(
226
+ JSON.stringify(makeRowsResponse(page, sessions.length, offset)),
227
+ { status: 200, headers: { 'Content-Type': 'application/json' } },
228
+ );
229
+ }
230
+
231
+ return new Response('Not Found', { status: 404 });
232
+ }) as unknown as FetchFn;
233
+ }
234
+
235
+ // ============================================================================
236
+ // Tests
237
+ // ============================================================================
238
+
239
+ describe('HuggingFaceTrajectorySource', () => {
240
+ describe('basic loading', () => {
241
+ it('should have name "huggingface"', () => {
242
+ const mockFetch = createMockFetch([]);
243
+ const source = new HuggingFaceTrajectorySource('user/dataset', {
244
+ fetchFn: mockFetch,
245
+ });
246
+ expect(source.name).toBe('huggingface');
247
+ });
248
+
249
+ it('should load sessions from a single-page dataset', async () => {
250
+ const sessions = [claudeSession(), codexSession()];
251
+ const mockFetch = createMockFetch(sessions);
252
+
253
+ const source = new HuggingFaceTrajectorySource('user/dataset', {
254
+ fetchFn: mockFetch,
255
+ });
256
+ const items = await source.load();
257
+
258
+ expect(items).toHaveLength(2);
259
+ });
260
+
261
+ it('should produce valid Trajectory objects', async () => {
262
+ const sessions = [claudeSession(), codexSession(), failedSession()];
263
+ const mockFetch = createMockFetch(sessions);
264
+
265
+ const source = new HuggingFaceTrajectorySource('user/dataset', {
266
+ fetchFn: mockFetch,
267
+ });
268
+ const items = await source.load();
269
+
270
+ for (const { trajectory } of items) {
271
+ const parsed = TrajectorySchema.safeParse(trajectory);
272
+ expect(parsed.success, `Invalid trajectory: ${trajectory.id}`).toBe(true);
273
+ }
274
+ });
275
+
276
+ it('should synthesize trajectories with correct IDs', async () => {
277
+ const sessions = [claudeSession(), codexSession()];
278
+ const mockFetch = createMockFetch(sessions);
279
+
280
+ const source = new HuggingFaceTrajectorySource('user/dataset', {
281
+ fetchFn: mockFetch,
282
+ });
283
+ const items = await source.load();
284
+
285
+ expect(items[0].trajectory.id).toBe('dataclaw-claude-abc-def-001');
286
+ expect(items[1].trajectory.id).toBe('dataclaw-codex-codex-042');
287
+ });
288
+
289
+ it('should set analysis to undefined (not pre-computed)', async () => {
290
+ const mockFetch = createMockFetch([claudeSession()]);
291
+ const source = new HuggingFaceTrajectorySource('user/dataset', {
292
+ fetchFn: mockFetch,
293
+ });
294
+ const items = await source.load();
295
+
296
+ expect(items[0].analysis).toBeUndefined();
297
+ });
298
+ });
299
+
300
+ describe('pagination', () => {
301
+ it('should paginate through large datasets', async () => {
302
+ // Create 5 sessions but use pageSize=2 to force 3 pages
303
+ const sessions = Array.from({ length: 5 }, (_, i) =>
304
+ claudeSession(),
305
+ ).map((s, i) => ({ ...s, session_id: `sess-${i}` })) as DataclawSession[];
306
+
307
+ const mockFetch = createMockFetch(sessions, { pageSize: 2 });
308
+
309
+ const source = new HuggingFaceTrajectorySource('user/dataset', {
310
+ fetchFn: mockFetch,
311
+ pageSize: 2,
312
+ });
313
+ const items = await source.load();
314
+
315
+ expect(items).toHaveLength(5);
316
+ // Should have made 3 fetch calls (2+2+1 rows)
317
+ expect(mockFetch).toHaveBeenCalledTimes(3);
318
+ });
319
+
320
+ it('should handle empty dataset', async () => {
321
+ const mockFetch = createMockFetch([]);
322
+ const source = new HuggingFaceTrajectorySource('user/dataset', {
323
+ fetchFn: mockFetch,
324
+ });
325
+ const items = await source.load();
326
+
327
+ expect(items).toHaveLength(0);
328
+ });
329
+
330
+ it('should pass correct query parameters', async () => {
331
+ const mockFetch = createMockFetch([claudeSession()]);
332
+ const source = new HuggingFaceTrajectorySource(
333
+ 'peteromallet/dataclaw-peteromallet',
334
+ {
335
+ fetchFn: mockFetch,
336
+ config: 'my-config',
337
+ split: 'test',
338
+ pageSize: 50,
339
+ },
340
+ );
341
+ await source.load();
342
+
343
+ const callUrl = (mockFetch as ReturnType<typeof vi.fn>).mock.calls[0][0] as string;
344
+ expect(callUrl).toContain('dataset=peteromallet%2Fdataclaw-peteromallet');
345
+ expect(callUrl).toContain('config=my-config');
346
+ expect(callUrl).toContain('split=test');
347
+ expect(callUrl).toContain('length=50');
348
+ });
349
+ });
350
+
351
+ describe('authentication', () => {
352
+ it('should include Authorization header when token is provided', async () => {
353
+ const mockFetch = createMockFetch([claudeSession()]);
354
+ const source = new HuggingFaceTrajectorySource('user/dataset', {
355
+ fetchFn: mockFetch,
356
+ token: 'hf_test_token_123',
357
+ });
358
+ await source.load();
359
+
360
+ const callInit = (mockFetch as ReturnType<typeof vi.fn>).mock.calls[0][1] as RequestInit;
361
+ expect((callInit.headers as Record<string, string>)['Authorization']).toBe(
362
+ 'Bearer hf_test_token_123',
363
+ );
364
+ });
365
+
366
+ it('should not include Authorization header when no token', async () => {
367
+ // Clear env vars for this test
368
+ const origHf = process.env.HF_TOKEN;
369
+ const origHub = process.env.HUGGING_FACE_HUB_TOKEN;
370
+ delete process.env.HF_TOKEN;
371
+ delete process.env.HUGGING_FACE_HUB_TOKEN;
372
+
373
+ try {
374
+ const mockFetch = createMockFetch([claudeSession()]);
375
+ const source = new HuggingFaceTrajectorySource('user/dataset', {
376
+ fetchFn: mockFetch,
377
+ });
378
+ await source.load();
379
+
380
+ const callInit = (mockFetch as ReturnType<typeof vi.fn>).mock.calls[0][1] as RequestInit;
381
+ expect((callInit.headers as Record<string, string>)['Authorization']).toBeUndefined();
382
+ } finally {
383
+ if (origHf !== undefined) process.env.HF_TOKEN = origHf;
384
+ if (origHub !== undefined) process.env.HUGGING_FACE_HUB_TOKEN = origHub;
385
+ }
386
+ });
387
+
388
+ it('should pick up HF_TOKEN from environment', async () => {
389
+ const origHf = process.env.HF_TOKEN;
390
+ process.env.HF_TOKEN = 'hf_env_token';
391
+
392
+ try {
393
+ const mockFetch = createMockFetch([claudeSession()]);
394
+ const source = new HuggingFaceTrajectorySource('user/dataset', {
395
+ fetchFn: mockFetch,
396
+ });
397
+ await source.load();
398
+
399
+ const callInit = (mockFetch as ReturnType<typeof vi.fn>).mock.calls[0][1] as RequestInit;
400
+ expect((callInit.headers as Record<string, string>)['Authorization']).toBe(
401
+ 'Bearer hf_env_token',
402
+ );
403
+ } finally {
404
+ if (origHf !== undefined) process.env.HF_TOKEN = origHf;
405
+ else delete process.env.HF_TOKEN;
406
+ }
407
+ });
408
+ });
409
+
410
+ describe('filtering', () => {
411
+ let allSessions: DataclawSession[];
412
+
413
+ beforeEach(() => {
414
+ allSessions = [claudeSession(), codexSession(), failedSession()];
415
+ });
416
+
417
+ it('should filter by dataclaw source', async () => {
418
+ const mockFetch = createMockFetch(allSessions);
419
+ const source = new HuggingFaceTrajectorySource('user/dataset', {
420
+ fetchFn: mockFetch,
421
+ sources: ['codex'],
422
+ });
423
+ const items = await source.load();
424
+
425
+ expect(items).toHaveLength(1);
426
+ expect(items[0].trajectory.metadata.dataclawSource).toBe('codex');
427
+ });
428
+
429
+ it('should filter by model', async () => {
430
+ const mockFetch = createMockFetch(allSessions);
431
+ const source = new HuggingFaceTrajectorySource('user/dataset', {
432
+ fetchFn: mockFetch,
433
+ models: ['claude-opus-4-6'],
434
+ });
435
+ const items = await source.load();
436
+
437
+ // claude + failed sessions both use claude-opus-4-6
438
+ expect(items).toHaveLength(2);
439
+ });
440
+
441
+ it('should filter by domain (load option)', async () => {
442
+ const mockFetch = createMockFetch(allSessions);
443
+ const source = new HuggingFaceTrajectorySource('user/dataset', {
444
+ fetchFn: mockFetch,
445
+ });
446
+ const items = await source.load({ domain: 'python' });
447
+
448
+ expect(items).toHaveLength(1);
449
+ expect(items[0].trajectory.task.domain).toBe('python');
450
+ });
451
+
452
+ it('should filter by successOnly', async () => {
453
+ const mockFetch = createMockFetch(allSessions);
454
+ const source = new HuggingFaceTrajectorySource('user/dataset', {
455
+ fetchFn: mockFetch,
456
+ });
457
+ const items = await source.load({ successOnly: true });
458
+
459
+ for (const { trajectory } of items) {
460
+ expect(trajectory.outcome.success).toBe(true);
461
+ }
462
+ });
463
+
464
+ it('should filter by since date', async () => {
465
+ const mockFetch = createMockFetch(allSessions);
466
+ const source = new HuggingFaceTrajectorySource('user/dataset', {
467
+ fetchFn: mockFetch,
468
+ });
469
+ const items = await source.load({
470
+ since: new Date('2026-02-08T00:00:00Z'),
471
+ });
472
+
473
+ // Only codex session (Feb 10) — failed is Feb 5, claude is Feb 1
474
+ expect(items).toHaveLength(1);
475
+ expect(items[0].trajectory.id).toContain('codex');
476
+ });
477
+
478
+ it('should respect limit', async () => {
479
+ const mockFetch = createMockFetch(allSessions);
480
+ const source = new HuggingFaceTrajectorySource('user/dataset', {
481
+ fetchFn: mockFetch,
482
+ });
483
+ const items = await source.load({ limit: 1 });
484
+
485
+ expect(items).toHaveLength(1);
486
+ });
487
+
488
+ it('should combine source filter + successOnly', async () => {
489
+ const mockFetch = createMockFetch(allSessions);
490
+ const source = new HuggingFaceTrajectorySource('user/dataset', {
491
+ fetchFn: mockFetch,
492
+ sources: ['claude'],
493
+ });
494
+ const items = await source.load({ successOnly: true });
495
+
496
+ // claude session is success, failed session is filtered out
497
+ expect(items).toHaveLength(1);
498
+ expect(items[0].trajectory.id).toContain('abc-def-001');
499
+ });
500
+ });
501
+
502
+ describe('count', () => {
503
+ it('should use /info endpoint for fast unfiltered count', async () => {
504
+ const sessions = [claudeSession(), codexSession()];
505
+ const mockFetch = createMockFetch(sessions);
506
+ const source = new HuggingFaceTrajectorySource('user/dataset', {
507
+ fetchFn: mockFetch,
508
+ });
509
+
510
+ const count = await source.count();
511
+ expect(count).toBe(2);
512
+
513
+ // Should have called /info, not /rows
514
+ const calls = (mockFetch as ReturnType<typeof vi.fn>).mock.calls;
515
+ expect(calls).toHaveLength(1);
516
+ expect(calls[0][0]).toContain('/info');
517
+ });
518
+
519
+ it('should fall back to loading when /info fails', async () => {
520
+ const sessions = [claudeSession(), codexSession()];
521
+ const mockFetch = createMockFetch(sessions, { infoFails: true });
522
+ const source = new HuggingFaceTrajectorySource('user/dataset', {
523
+ fetchFn: mockFetch,
524
+ });
525
+
526
+ const count = await source.count();
527
+ expect(count).toBe(2);
528
+ });
529
+
530
+ it('should load and filter when count has filters', async () => {
531
+ const sessions = [claudeSession(), codexSession(), failedSession()];
532
+ const mockFetch = createMockFetch(sessions);
533
+ const source = new HuggingFaceTrajectorySource('user/dataset', {
534
+ fetchFn: mockFetch,
535
+ });
536
+
537
+ const count = await source.count({ successOnly: true });
538
+ // Should have loaded all sessions and filtered
539
+ expect(count).toBe(2); // claude + codex succeed, failed does not
540
+ });
541
+
542
+ it('should use load for count when dataclaw source filter is set', async () => {
543
+ const sessions = [claudeSession(), codexSession()];
544
+ const mockFetch = createMockFetch(sessions);
545
+ const source = new HuggingFaceTrajectorySource('user/dataset', {
546
+ fetchFn: mockFetch,
547
+ sources: ['claude'],
548
+ });
549
+
550
+ const count = await source.count();
551
+ expect(count).toBe(1);
552
+
553
+ // Should have called /rows (not /info) because source filter is set
554
+ const calls = (mockFetch as ReturnType<typeof vi.fn>).mock.calls;
555
+ expect(calls.some((c: unknown[]) => (c[0] as string).includes('/rows'))).toBe(true);
556
+ });
557
+ });
558
+
559
+ describe('trajectory synthesis quality', () => {
560
+ it('should extract task description from first user message', async () => {
561
+ const mockFetch = createMockFetch([claudeSession()]);
562
+ const source = new HuggingFaceTrajectorySource('user/dataset', {
563
+ fetchFn: mockFetch,
564
+ });
565
+ const items = await source.load();
566
+
567
+ expect(items[0].trajectory.task.description).toContain('login endpoint');
568
+ });
569
+
570
+ it('should extract tool-use steps', async () => {
571
+ const mockFetch = createMockFetch([claudeSession()]);
572
+ const source = new HuggingFaceTrajectorySource('user/dataset', {
573
+ fetchFn: mockFetch,
574
+ });
575
+ const items = await source.load();
576
+ const steps = items[0].trajectory.steps;
577
+
578
+ const readStep = steps.find((s) => s.metadata?.toolName === 'Read');
579
+ expect(readStep).toBeDefined();
580
+ expect(readStep!.observation).toContain('user.email');
581
+
582
+ const editStep = steps.find((s) => s.metadata?.toolName === 'Edit');
583
+ expect(editStep).toBeDefined();
584
+ });
585
+
586
+ it('should preserve dataclaw metadata', async () => {
587
+ const mockFetch = createMockFetch([claudeSession()]);
588
+ const source = new HuggingFaceTrajectorySource('user/dataset', {
589
+ fetchFn: mockFetch,
590
+ });
591
+ const items = await source.load();
592
+ const meta = items[0].trajectory.metadata;
593
+
594
+ expect(meta.source).toBe('dataclaw');
595
+ expect(meta.dataclawSource).toBe('claude');
596
+ expect(meta.project).toBe('my-web-app');
597
+ expect(meta.model).toBe('claude-opus-4-6');
598
+ expect(meta.gitBranch).toBe('fix/auth-bug');
599
+ });
600
+
601
+ it('should infer domain from tool file paths', async () => {
602
+ const mockFetch = createMockFetch([claudeSession(), codexSession()]);
603
+ const source = new HuggingFaceTrajectorySource('user/dataset', {
604
+ fetchFn: mockFetch,
605
+ });
606
+ const items = await source.load();
607
+
608
+ expect(items[0].trajectory.task.domain).toBe('typescript');
609
+ expect(items[1].trajectory.task.domain).toBe('python');
610
+ });
611
+
612
+ it('should compute token totals from stats', async () => {
613
+ const mockFetch = createMockFetch([claudeSession()]);
614
+ const source = new HuggingFaceTrajectorySource('user/dataset', {
615
+ fetchFn: mockFetch,
616
+ });
617
+ const items = await source.load();
618
+
619
+ expect(items[0].trajectory.totalTokens).toBe(14500); // 12000 + 2500
620
+ });
621
+
622
+ it('should compute wall time from timestamps', async () => {
623
+ const mockFetch = createMockFetch([claudeSession()]);
624
+ const source = new HuggingFaceTrajectorySource('user/dataset', {
625
+ fetchFn: mockFetch,
626
+ });
627
+ const items = await source.load();
628
+
629
+ expect(items[0].trajectory.wallTimeSeconds).toBe(25 * 60); // 25 min
630
+ });
631
+
632
+ it('should infer outcome heuristically', async () => {
633
+ const mockFetch = createMockFetch([claudeSession(), failedSession()]);
634
+ const source = new HuggingFaceTrajectorySource('user/dataset', {
635
+ fetchFn: mockFetch,
636
+ });
637
+ const items = await source.load();
638
+
639
+ const claude = items.find((i) => i.trajectory.id.includes('abc-def'));
640
+ const failed = items.find((i) => i.trajectory.id.includes('failed'));
641
+
642
+ expect(claude!.trajectory.outcome.success).toBe(true);
643
+ expect(failed!.trajectory.outcome.success).toBe(false);
644
+ });
645
+
646
+ it('should use configured domain override', async () => {
647
+ const mockFetch = createMockFetch([claudeSession()]);
648
+ const source = new HuggingFaceTrajectorySource('user/dataset', {
649
+ fetchFn: mockFetch,
650
+ domain: 'web-security',
651
+ });
652
+ const items = await source.load();
653
+
654
+ expect(items[0].trajectory.task.domain).toBe('web-security');
655
+ });
656
+ });
657
+
658
+ describe('error handling', () => {
659
+ it('should throw when /rows returns an error', async () => {
660
+ const mockFetch = vi.fn(async () =>
661
+ new Response('Forbidden', { status: 403 }),
662
+ ) as unknown as FetchFn;
663
+
664
+ const source = new HuggingFaceTrajectorySource('private/dataset', {
665
+ fetchFn: mockFetch,
666
+ });
667
+
668
+ await expect(source.load()).rejects.toThrow('403');
669
+ });
670
+
671
+ it('should throw when a pagination page fails', async () => {
672
+ const sessions = Array.from({ length: 5 }, (_, i) => ({
673
+ ...claudeSession(),
674
+ session_id: `sess-${i}`,
675
+ })) as DataclawSession[];
676
+
677
+ const mockFetch = createMockFetch(sessions, { pageSize: 2, failOnPage: 1 });
678
+ const source = new HuggingFaceTrajectorySource('user/dataset', {
679
+ fetchFn: mockFetch,
680
+ pageSize: 2,
681
+ });
682
+
683
+ await expect(source.load()).rejects.toThrow('500');
684
+ });
685
+
686
+ it('should skip rows that fail Zod validation', async () => {
687
+ // Create a mock that returns one valid row and one invalid row
688
+ const mockFetch = vi.fn(async (input: RequestInfo | URL) => {
689
+ const url = typeof input === 'string' ? input : input.toString();
690
+
691
+ if (url.includes('/rows')) {
692
+ return new Response(
693
+ JSON.stringify({
694
+ features: [],
695
+ rows: [
696
+ { row_idx: 0, row: claudeSession() },
697
+ { row_idx: 1, row: { not_a_valid_session: true } },
698
+ { row_idx: 2, row: codexSession() },
699
+ ],
700
+ num_rows_total: 3,
701
+ num_rows_per_page: 100,
702
+ partial: false,
703
+ }),
704
+ { status: 200, headers: { 'Content-Type': 'application/json' } },
705
+ );
706
+ }
707
+
708
+ if (url.includes('/info')) {
709
+ return new Response(
710
+ JSON.stringify(makeInfoResponse(3)),
711
+ { status: 200, headers: { 'Content-Type': 'application/json' } },
712
+ );
713
+ }
714
+
715
+ return new Response('Not Found', { status: 404 });
716
+ }) as unknown as FetchFn;
717
+
718
+ const source = new HuggingFaceTrajectorySource('user/dataset', {
719
+ fetchFn: mockFetch,
720
+ });
721
+ const items = await source.load();
722
+
723
+ // Invalid row should be skipped, 2 valid remain
724
+ expect(items).toHaveLength(2);
725
+ });
726
+ });
727
+
728
+ describe('real-world dataclaw format edge cases', () => {
729
+ it('should handle sessions with missing optional fields', async () => {
730
+ const minimalSession: DataclawSession = {
731
+ session_id: 'minimal-001',
732
+ project: '',
733
+ model: '',
734
+ source: '',
735
+ messages: [],
736
+ };
737
+ const mockFetch = createMockFetch([minimalSession]);
738
+ const source = new HuggingFaceTrajectorySource('user/dataset', {
739
+ fetchFn: mockFetch,
740
+ });
741
+ const items = await source.load();
742
+
743
+ expect(items).toHaveLength(1);
744
+ const t = items[0].trajectory;
745
+ expect(t.id).toBe('dataclaw--minimal-001');
746
+ expect(t.task.description).toBe('Unknown task');
747
+ expect(t.wallTimeSeconds).toBe(0);
748
+ expect(t.totalTokens).toBe(0);
749
+ });
750
+
751
+ it('should handle sessions with null git_branch', async () => {
752
+ const session: DataclawSession = {
753
+ ...claudeSession(),
754
+ git_branch: null,
755
+ };
756
+ const mockFetch = createMockFetch([session]);
757
+ const source = new HuggingFaceTrajectorySource('user/dataset', {
758
+ fetchFn: mockFetch,
759
+ });
760
+ const items = await source.load();
761
+
762
+ expect(items[0].trajectory.metadata.gitBranch).toBeUndefined();
763
+ });
764
+
765
+ it('should handle tool_uses with missing output', async () => {
766
+ const session: DataclawSession = {
767
+ ...claudeSession(),
768
+ messages: [
769
+ { role: 'user', content: 'Do it' },
770
+ {
771
+ role: 'assistant',
772
+ content: 'Done',
773
+ tool_uses: [
774
+ {
775
+ tool: 'Write',
776
+ input: { file_path: '/a.ts', content: 'x' },
777
+ output: {},
778
+ status: 'success',
779
+ },
780
+ ],
781
+ },
782
+ ],
783
+ };
784
+ const mockFetch = createMockFetch([session]);
785
+ const source = new HuggingFaceTrajectorySource('user/dataset', {
786
+ fetchFn: mockFetch,
787
+ });
788
+ const items = await source.load();
789
+
790
+ expect(items).toHaveLength(1);
791
+ expect(items[0].trajectory.steps[0].observation).toBe('');
792
+ });
793
+
794
+ it('should handle sessions with thinking but no tool_uses', async () => {
795
+ const session: DataclawSession = {
796
+ ...claudeSession(),
797
+ messages: [
798
+ { role: 'user', content: 'Explain TypeScript generics' },
799
+ {
800
+ role: 'assistant',
801
+ content: 'TypeScript generics allow...',
802
+ thinking: 'The user wants an explanation of generics.',
803
+ },
804
+ ],
805
+ };
806
+ const mockFetch = createMockFetch([session]);
807
+ const source = new HuggingFaceTrajectorySource('user/dataset', {
808
+ fetchFn: mockFetch,
809
+ });
810
+ const items = await source.load();
811
+
812
+ expect(items).toHaveLength(1);
813
+ expect(items[0].trajectory.steps).toHaveLength(1);
814
+ expect(items[0].trajectory.steps[0].thought).toContain('user wants an explanation');
815
+ });
816
+ });
817
+ });