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.
- package/.claude/settings.json +88 -0
- package/.claude/settings.local.json +11 -0
- package/.entire/settings.json +4 -0
- package/README.md +524 -254
- package/dist/atlas.d.ts +144 -6
- package/dist/atlas.d.ts.map +1 -1
- package/dist/atlas.js +339 -10
- package/dist/atlas.js.map +1 -1
- package/dist/embeddings/provider.d.ts.map +1 -1
- package/dist/embeddings/provider.js +6 -3
- package/dist/embeddings/provider.js.map +1 -1
- package/dist/index.d.ts +8 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +37 -6
- package/dist/index.js.map +1 -1
- package/dist/learning/index.d.ts +5 -1
- package/dist/learning/index.d.ts.map +1 -1
- package/dist/learning/index.js +8 -2
- package/dist/learning/index.js.map +1 -1
- package/dist/learning/knowledge-extractor.d.ts +56 -0
- package/dist/learning/knowledge-extractor.d.ts.map +1 -0
- package/dist/learning/knowledge-extractor.js +336 -0
- package/dist/learning/knowledge-extractor.js.map +1 -0
- package/dist/learning/meta-learner.d.ts +7 -0
- package/dist/learning/meta-learner.d.ts.map +1 -1
- package/dist/learning/meta-learner.js +43 -0
- package/dist/learning/meta-learner.js.map +1 -1
- package/dist/learning/pipeline.d.ts +24 -0
- package/dist/learning/pipeline.d.ts.map +1 -1
- package/dist/learning/pipeline.js +70 -4
- package/dist/learning/pipeline.js.map +1 -1
- package/dist/learning/team-ingester.d.ts +152 -0
- package/dist/learning/team-ingester.d.ts.map +1 -0
- package/dist/learning/team-ingester.js +333 -0
- package/dist/learning/team-ingester.js.map +1 -0
- package/dist/learning/team-meta-learner.d.ts +50 -0
- package/dist/learning/team-meta-learner.d.ts.map +1 -0
- package/dist/learning/team-meta-learner.js +417 -0
- package/dist/learning/team-meta-learner.js.map +1 -0
- package/dist/learning/team-pipeline.d.ts +76 -0
- package/dist/learning/team-pipeline.d.ts.map +1 -0
- package/dist/learning/team-pipeline.js +266 -0
- package/dist/learning/team-pipeline.js.map +1 -0
- package/dist/learning/trajectory-sources/dataclaw.d.ts +41 -0
- package/dist/learning/trajectory-sources/dataclaw.d.ts.map +1 -0
- package/dist/learning/trajectory-sources/dataclaw.js +330 -0
- package/dist/learning/trajectory-sources/dataclaw.js.map +1 -0
- package/dist/learning/trajectory-sources/entire.d.ts +28 -0
- package/dist/learning/trajectory-sources/entire.d.ts.map +1 -0
- package/dist/learning/trajectory-sources/entire.js +182 -0
- package/dist/learning/trajectory-sources/entire.js.map +1 -0
- package/dist/learning/trajectory-sources/file.d.ts +23 -0
- package/dist/learning/trajectory-sources/file.d.ts.map +1 -0
- package/dist/learning/trajectory-sources/file.js +101 -0
- package/dist/learning/trajectory-sources/file.js.map +1 -0
- package/dist/learning/trajectory-sources/huggingface.d.ts +36 -0
- package/dist/learning/trajectory-sources/huggingface.d.ts.map +1 -0
- package/dist/learning/trajectory-sources/huggingface.js +157 -0
- package/dist/learning/trajectory-sources/huggingface.js.map +1 -0
- package/dist/learning/trajectory-sources/in-memory.d.ts +21 -0
- package/dist/learning/trajectory-sources/in-memory.d.ts.map +1 -0
- package/dist/learning/trajectory-sources/in-memory.js +43 -0
- package/dist/learning/trajectory-sources/in-memory.js.map +1 -0
- package/dist/learning/trajectory-sources/index.d.ts +7 -0
- package/dist/learning/trajectory-sources/index.d.ts.map +1 -0
- package/dist/learning/trajectory-sources/index.js +7 -0
- package/dist/learning/trajectory-sources/index.js.map +1 -0
- package/dist/learning/trajectory-sources/pipeline.d.ts +24 -0
- package/dist/learning/trajectory-sources/pipeline.d.ts.map +1 -0
- package/dist/learning/trajectory-sources/pipeline.js +47 -0
- package/dist/learning/trajectory-sources/pipeline.js.map +1 -0
- package/dist/memory/graph-layers/base.d.ts +29 -0
- package/dist/memory/graph-layers/base.d.ts.map +1 -0
- package/dist/memory/graph-layers/base.js +143 -0
- package/dist/memory/graph-layers/base.js.map +1 -0
- package/dist/memory/graph-layers/causal.d.ts +14 -0
- package/dist/memory/graph-layers/causal.d.ts.map +1 -0
- package/dist/memory/graph-layers/causal.js +14 -0
- package/dist/memory/graph-layers/causal.js.map +1 -0
- package/dist/memory/graph-layers/entity.d.ts +14 -0
- package/dist/memory/graph-layers/entity.d.ts.map +1 -0
- package/dist/memory/graph-layers/entity.js +14 -0
- package/dist/memory/graph-layers/entity.js.map +1 -0
- package/dist/memory/graph-layers/index.d.ts +6 -0
- package/dist/memory/graph-layers/index.d.ts.map +1 -0
- package/dist/memory/graph-layers/index.js +6 -0
- package/dist/memory/graph-layers/index.js.map +1 -0
- package/dist/memory/graph-layers/semantic.d.ts +14 -0
- package/dist/memory/graph-layers/semantic.d.ts.map +1 -0
- package/dist/memory/graph-layers/semantic.js +14 -0
- package/dist/memory/graph-layers/semantic.js.map +1 -0
- package/dist/memory/graph-layers/temporal.d.ts +14 -0
- package/dist/memory/graph-layers/temporal.d.ts.map +1 -0
- package/dist/memory/graph-layers/temporal.js +14 -0
- package/dist/memory/graph-layers/temporal.js.map +1 -0
- package/dist/memory/index.d.ts +8 -0
- package/dist/memory/index.d.ts.map +1 -1
- package/dist/memory/index.js +10 -0
- package/dist/memory/index.js.map +1 -1
- package/dist/memory/knowledge-bank.d.ts +220 -0
- package/dist/memory/knowledge-bank.d.ts.map +1 -0
- package/dist/memory/knowledge-bank.js +1003 -0
- package/dist/memory/knowledge-bank.js.map +1 -0
- package/dist/memory/knowledge-defrag.d.ts +49 -0
- package/dist/memory/knowledge-defrag.d.ts.map +1 -0
- package/dist/memory/knowledge-defrag.js +257 -0
- package/dist/memory/knowledge-defrag.js.map +1 -0
- package/dist/memory/knowledge-graph.d.ts +41 -0
- package/dist/memory/knowledge-graph.d.ts.map +1 -0
- package/dist/memory/knowledge-graph.js +273 -0
- package/dist/memory/knowledge-graph.js.map +1 -0
- package/dist/memory/search-provider.d.ts +31 -0
- package/dist/memory/search-provider.d.ts.map +1 -0
- package/dist/memory/search-provider.js +2 -0
- package/dist/memory/search-provider.js.map +1 -0
- package/dist/memory/search-providers/index.d.ts +3 -0
- package/dist/memory/search-providers/index.d.ts.map +1 -0
- package/dist/memory/search-providers/index.js +3 -0
- package/dist/memory/search-providers/index.js.map +1 -0
- package/dist/memory/search-providers/minimem.d.ts +43 -0
- package/dist/memory/search-providers/minimem.d.ts.map +1 -0
- package/dist/memory/search-providers/minimem.js +56 -0
- package/dist/memory/search-providers/minimem.js.map +1 -0
- package/dist/memory/search-providers/text-similarity.d.ts +15 -0
- package/dist/memory/search-providers/text-similarity.d.ts.map +1 -0
- package/dist/memory/search-providers/text-similarity.js +21 -0
- package/dist/memory/search-providers/text-similarity.js.map +1 -0
- package/dist/memory/skill-exporter.d.ts +75 -0
- package/dist/memory/skill-exporter.d.ts.map +1 -0
- package/dist/memory/skill-exporter.js +248 -0
- package/dist/memory/skill-exporter.js.map +1 -0
- package/dist/memory/system.d.ts +15 -3
- package/dist/memory/system.d.ts.map +1 -1
- package/dist/memory/system.js +46 -8
- package/dist/memory/system.js.map +1 -1
- package/dist/memory/team-experience.d.ts +298 -0
- package/dist/memory/team-experience.d.ts.map +1 -0
- package/dist/memory/team-experience.js +355 -0
- package/dist/memory/team-experience.js.map +1 -0
- package/dist/runtime/backends/acp-protocol.d.ts +49 -0
- package/dist/runtime/backends/acp-protocol.d.ts.map +1 -0
- package/dist/runtime/backends/acp-protocol.js +166 -0
- package/dist/runtime/backends/acp-protocol.js.map +1 -0
- package/dist/runtime/backends/acp.d.ts +26 -26
- package/dist/runtime/backends/acp.d.ts.map +1 -1
- package/dist/runtime/backends/acp.js +32 -156
- package/dist/runtime/backends/acp.js.map +1 -1
- package/dist/runtime/backends/index.d.ts +3 -1
- package/dist/runtime/backends/index.d.ts.map +1 -1
- package/dist/runtime/backends/index.js +3 -1
- package/dist/runtime/backends/index.js.map +1 -1
- package/dist/runtime/backends/macro-agent.d.ts +104 -0
- package/dist/runtime/backends/macro-agent.d.ts.map +1 -0
- package/dist/runtime/backends/macro-agent.js +107 -0
- package/dist/runtime/backends/macro-agent.js.map +1 -0
- package/dist/runtime/compute-provider.d.ts +87 -0
- package/dist/runtime/compute-provider.d.ts.map +1 -0
- package/dist/runtime/compute-provider.js +87 -0
- package/dist/runtime/compute-provider.js.map +1 -0
- package/dist/runtime/index.d.ts +3 -2
- package/dist/runtime/index.d.ts.map +1 -1
- package/dist/runtime/index.js +3 -1
- package/dist/runtime/index.js.map +1 -1
- package/dist/runtime/manager.d.ts +37 -4
- package/dist/runtime/manager.d.ts.map +1 -1
- package/dist/runtime/manager.js +139 -20
- package/dist/runtime/manager.js.map +1 -1
- package/dist/runtime/types.d.ts +38 -0
- package/dist/runtime/types.d.ts.map +1 -1
- package/dist/search/evaluator.d.ts +7 -0
- package/dist/search/evaluator.d.ts.map +1 -1
- package/dist/search/evaluator.js +24 -4
- package/dist/search/evaluator.js.map +1 -1
- package/dist/search/index.d.ts +1 -0
- package/dist/search/index.d.ts.map +1 -1
- package/dist/search/index.js +2 -0
- package/dist/search/index.js.map +1 -1
- package/dist/search/refinement-loop.d.ts +17 -0
- package/dist/search/refinement-loop.d.ts.map +1 -1
- package/dist/search/refinement-loop.js +77 -6
- package/dist/search/refinement-loop.js.map +1 -1
- package/dist/search/refinement-types.d.ts +2 -2
- package/dist/search/team-router.d.ts +91 -0
- package/dist/search/team-router.d.ts.map +1 -0
- package/dist/search/team-router.js +315 -0
- package/dist/search/team-router.js.map +1 -0
- package/dist/session-bank/git-reader.d.ts +39 -0
- package/dist/session-bank/git-reader.d.ts.map +1 -0
- package/dist/session-bank/git-reader.js +165 -0
- package/dist/session-bank/git-reader.js.map +1 -0
- package/dist/session-bank/index.d.ts +5 -0
- package/dist/session-bank/index.d.ts.map +1 -0
- package/dist/session-bank/index.js +4 -0
- package/dist/session-bank/index.js.map +1 -0
- package/dist/session-bank/parser.d.ts +39 -0
- package/dist/session-bank/parser.d.ts.map +1 -0
- package/dist/session-bank/parser.js +231 -0
- package/dist/session-bank/parser.js.map +1 -0
- package/dist/session-bank/session-bank.d.ts +35 -0
- package/dist/session-bank/session-bank.d.ts.map +1 -0
- package/dist/session-bank/session-bank.js +326 -0
- package/dist/session-bank/session-bank.js.map +1 -0
- package/dist/session-bank/types.d.ts +129 -0
- package/dist/session-bank/types.d.ts.map +1 -0
- package/dist/session-bank/types.js +7 -0
- package/dist/session-bank/types.js.map +1 -0
- package/dist/surfacing/index.d.ts +4 -0
- package/dist/surfacing/index.d.ts.map +1 -1
- package/dist/surfacing/index.js +3 -0
- package/dist/surfacing/index.js.map +1 -1
- package/dist/surfacing/publisher.d.ts +22 -0
- package/dist/surfacing/publisher.d.ts.map +1 -0
- package/dist/surfacing/publisher.js +9 -0
- package/dist/surfacing/publisher.js.map +1 -0
- package/dist/surfacing/skill-library.d.ts +12 -0
- package/dist/surfacing/skill-library.d.ts.map +1 -1
- package/dist/surfacing/skill-library.js +26 -0
- package/dist/surfacing/skill-library.js.map +1 -1
- package/dist/surfacing/skill-publisher.d.ts +43 -0
- package/dist/surfacing/skill-publisher.d.ts.map +1 -0
- package/dist/surfacing/skill-publisher.js +197 -0
- package/dist/surfacing/skill-publisher.js.map +1 -0
- package/dist/surfacing/sqlite-storage-adapter.d.ts +42 -0
- package/dist/surfacing/sqlite-storage-adapter.d.ts.map +1 -0
- package/dist/surfacing/sqlite-storage-adapter.js +207 -0
- package/dist/surfacing/sqlite-storage-adapter.js.map +1 -0
- package/dist/surfacing/team-skill-library.d.ts +180 -0
- package/dist/surfacing/team-skill-library.d.ts.map +1 -0
- package/dist/surfacing/team-skill-library.js +384 -0
- package/dist/surfacing/team-skill-library.js.map +1 -0
- package/dist/types/config.d.ts +1218 -44
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/config.js +216 -0
- package/dist/types/config.js.map +1 -1
- package/dist/types/dataclaw.d.ts +286 -0
- package/dist/types/dataclaw.d.ts.map +1 -0
- package/dist/types/dataclaw.js +84 -0
- package/dist/types/dataclaw.js.map +1 -0
- package/dist/types/index.d.ts +8 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +13 -1
- package/dist/types/index.js.map +1 -1
- package/dist/types/knowledge-graph.d.ts +148 -0
- package/dist/types/knowledge-graph.d.ts.map +1 -0
- package/dist/types/knowledge-graph.js +40 -0
- package/dist/types/knowledge-graph.js.map +1 -0
- package/dist/types/knowledge.d.ts +280 -0
- package/dist/types/knowledge.d.ts.map +1 -0
- package/dist/types/knowledge.js +191 -0
- package/dist/types/knowledge.js.map +1 -0
- package/dist/types/team-meta.d.ts +160 -0
- package/dist/types/team-meta.d.ts.map +1 -0
- package/dist/types/team-meta.js +42 -0
- package/dist/types/team-meta.js.map +1 -0
- package/dist/types/team-playbook.d.ts +276 -0
- package/dist/types/team-playbook.d.ts.map +1 -0
- package/dist/types/team-playbook.js +85 -0
- package/dist/types/team-playbook.js.map +1 -0
- package/dist/types/team-trajectory.d.ts +305 -0
- package/dist/types/team-trajectory.d.ts.map +1 -0
- package/dist/types/team-trajectory.js +304 -0
- package/dist/types/team-trajectory.js.map +1 -0
- package/dist/types/trajectory-source.d.ts +39 -0
- package/dist/types/trajectory-source.d.ts.map +1 -0
- package/dist/types/trajectory-source.js +2 -0
- package/dist/types/trajectory-source.js.map +1 -0
- package/dist/utils/frontmatter.d.ts +34 -0
- package/dist/utils/frontmatter.d.ts.map +1 -0
- package/dist/utils/frontmatter.js +93 -0
- package/dist/utils/frontmatter.js.map +1 -0
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/workspace/index.d.ts +6 -0
- package/dist/workspace/index.d.ts.map +1 -0
- package/dist/workspace/index.js +11 -0
- package/dist/workspace/index.js.map +1 -0
- package/dist/workspace/runner.d.ts +50 -0
- package/dist/workspace/runner.d.ts.map +1 -0
- package/dist/workspace/runner.js +219 -0
- package/dist/workspace/runner.js.map +1 -0
- package/dist/workspace/skill-converter.d.ts +18 -0
- package/dist/workspace/skill-converter.d.ts.map +1 -0
- package/dist/workspace/skill-converter.js +257 -0
- package/dist/workspace/skill-converter.js.map +1 -0
- package/dist/workspace/templates/index.d.ts +11 -0
- package/dist/workspace/templates/index.d.ts.map +1 -0
- package/dist/workspace/templates/index.js +21 -0
- package/dist/workspace/templates/index.js.map +1 -0
- package/dist/workspace/templates/knowledge-defrag.d.ts +25 -0
- package/dist/workspace/templates/knowledge-defrag.d.ts.map +1 -0
- package/dist/workspace/templates/knowledge-defrag.js +154 -0
- package/dist/workspace/templates/knowledge-defrag.js.map +1 -0
- package/dist/workspace/templates/knowledge-extraction.d.ts +25 -0
- package/dist/workspace/templates/knowledge-extraction.d.ts.map +1 -0
- package/dist/workspace/templates/knowledge-extraction.js +246 -0
- package/dist/workspace/templates/knowledge-extraction.js.map +1 -0
- package/dist/workspace/templates/meta-reflection.d.ts +47 -0
- package/dist/workspace/templates/meta-reflection.d.ts.map +1 -0
- package/dist/workspace/templates/meta-reflection.js +135 -0
- package/dist/workspace/templates/meta-reflection.js.map +1 -0
- package/dist/workspace/templates/playbook-extraction.d.ts +20 -0
- package/dist/workspace/templates/playbook-extraction.d.ts.map +1 -0
- package/dist/workspace/templates/playbook-extraction.js +189 -0
- package/dist/workspace/templates/playbook-extraction.js.map +1 -0
- package/dist/workspace/templates/refinement-analysis.d.ts +31 -0
- package/dist/workspace/templates/refinement-analysis.d.ts.map +1 -0
- package/dist/workspace/templates/refinement-analysis.js +107 -0
- package/dist/workspace/templates/refinement-analysis.js.map +1 -0
- package/dist/workspace/templates/solution-evaluation.d.ts +21 -0
- package/dist/workspace/templates/solution-evaluation.d.ts.map +1 -0
- package/dist/workspace/templates/solution-evaluation.js +131 -0
- package/dist/workspace/templates/solution-evaluation.js.map +1 -0
- package/dist/workspace/templates/team-playbook-extraction.d.ts +44 -0
- package/dist/workspace/templates/team-playbook-extraction.d.ts.map +1 -0
- package/dist/workspace/templates/team-playbook-extraction.js +497 -0
- package/dist/workspace/templates/team-playbook-extraction.js.map +1 -0
- package/dist/workspace/templates/team-trajectory-analysis.d.ts +19 -0
- package/dist/workspace/templates/team-trajectory-analysis.d.ts.map +1 -0
- package/dist/workspace/templates/team-trajectory-analysis.js +442 -0
- package/dist/workspace/templates/team-trajectory-analysis.js.map +1 -0
- package/dist/workspace/templates/trajectory-analysis.d.ts +19 -0
- package/dist/workspace/templates/trajectory-analysis.d.ts.map +1 -0
- package/dist/workspace/templates/trajectory-analysis.js +170 -0
- package/dist/workspace/templates/trajectory-analysis.js.map +1 -0
- package/dist/workspace/templates/usage-inference.d.ts +19 -0
- package/dist/workspace/templates/usage-inference.d.ts.map +1 -0
- package/dist/workspace/templates/usage-inference.js +125 -0
- package/dist/workspace/templates/usage-inference.js.map +1 -0
- package/dist/workspace/types.d.ts +145 -0
- package/dist/workspace/types.d.ts.map +1 -0
- package/dist/workspace/types.js +17 -0
- package/dist/workspace/types.js.map +1 -0
- package/docs/DESIGN-agentic-workspace.md +2057 -0
- package/docs/DESIGN-semantic-memory-knowledge-bank.md +1789 -0
- package/docs/DESIGN-session-bank.md +1134 -0
- package/docs/DESIGN-team-extraction-pipeline.md +1369 -0
- package/docs/DESIGN-workspace-migration.md +1079 -0
- package/docs/PLAN-agentic-workspace-implementation.md +717 -0
- package/docs/PLAN-graph-migration.md +299 -0
- package/docs/PLAN-session-bank-implementation.md +474 -0
- package/docs/PROPOSAL-team-aware-learning.md +1080 -0
- package/docs/RESEARCH-semantic-memory-knowledge-structures.md +517 -0
- package/docs/RESEARCH-team-trajectory-learning.md +553 -0
- package/gaps.md +204 -0
- package/package.json +24 -6
- package/references/agent-workspace/CLAUDE.md +74 -0
- package/references/agent-workspace/README.md +587 -0
- package/references/agent-workspace/media/banner.png +0 -0
- package/references/agent-workspace/package-lock.json +2061 -0
- package/references/agent-workspace/package.json +54 -0
- package/references/agent-workspace/src/handle.ts +122 -0
- package/references/agent-workspace/src/index.ts +32 -0
- package/references/agent-workspace/src/manager.ts +102 -0
- package/references/agent-workspace/src/readers/json.ts +71 -0
- package/references/agent-workspace/src/readers/markdown.ts +37 -0
- package/references/agent-workspace/src/readers/raw.ts +27 -0
- package/references/agent-workspace/src/types.ts +68 -0
- package/references/agent-workspace/src/validation.ts +93 -0
- package/references/agent-workspace/src/writers/json.ts +17 -0
- package/references/agent-workspace/src/writers/markdown.ts +27 -0
- package/references/agent-workspace/src/writers/raw.ts +22 -0
- package/references/agent-workspace/tests/errors.test.ts +652 -0
- package/references/agent-workspace/tests/handle.test.ts +144 -0
- package/references/agent-workspace/tests/manager.test.ts +124 -0
- package/references/agent-workspace/tests/readers.test.ts +205 -0
- package/references/agent-workspace/tests/validation.test.ts +196 -0
- package/references/agent-workspace/tests/writers.test.ts +108 -0
- package/references/agent-workspace/tsconfig.json +20 -0
- package/references/agent-workspace/tsup.config.ts +9 -0
- package/references/minimem/.claude/settings.json +7 -0
- package/references/minimem/.sudocode/issues.jsonl +18 -0
- package/references/minimem/.sudocode/specs.jsonl +1 -0
- package/references/minimem/CLAUDE.md +310 -0
- package/references/minimem/README.md +556 -0
- package/references/minimem/claude-plugin/.claude-plugin/plugin.json +10 -0
- package/references/minimem/claude-plugin/.mcp.json +7 -0
- package/references/minimem/claude-plugin/README.md +158 -0
- package/references/minimem/claude-plugin/commands/recall.md +47 -0
- package/references/minimem/claude-plugin/commands/remember.md +41 -0
- package/references/minimem/claude-plugin/hooks/__tests__/hooks.test.ts +272 -0
- package/references/minimem/claude-plugin/hooks/hooks.json +27 -0
- package/references/minimem/claude-plugin/hooks/session-end.sh +86 -0
- package/references/minimem/claude-plugin/hooks/session-start.sh +85 -0
- package/references/minimem/claude-plugin/skills/memory/SKILL.md +108 -0
- package/references/minimem/package-lock.json +5373 -0
- package/references/minimem/package.json +60 -0
- package/references/minimem/scripts/postbuild.js +35 -0
- package/references/minimem/src/__tests__/edge-cases.test.ts +371 -0
- package/references/minimem/src/__tests__/errors.test.ts +265 -0
- package/references/minimem/src/__tests__/helpers.ts +199 -0
- package/references/minimem/src/__tests__/internal.test.ts +407 -0
- package/references/minimem/src/__tests__/knowledge.test.ts +287 -0
- package/references/minimem/src/__tests__/minimem.integration.test.ts +1127 -0
- package/references/minimem/src/__tests__/session.test.ts +190 -0
- package/references/minimem/src/cli/__tests__/commands.test.ts +759 -0
- package/references/minimem/src/cli/commands/__tests__/conflicts.test.ts +141 -0
- package/references/minimem/src/cli/commands/append.ts +76 -0
- package/references/minimem/src/cli/commands/config.ts +262 -0
- package/references/minimem/src/cli/commands/conflicts.ts +413 -0
- package/references/minimem/src/cli/commands/daemon.ts +169 -0
- package/references/minimem/src/cli/commands/index.ts +12 -0
- package/references/minimem/src/cli/commands/init.ts +88 -0
- package/references/minimem/src/cli/commands/mcp.ts +177 -0
- package/references/minimem/src/cli/commands/push-pull.ts +213 -0
- package/references/minimem/src/cli/commands/search.ts +158 -0
- package/references/minimem/src/cli/commands/status.ts +84 -0
- package/references/minimem/src/cli/commands/sync-init.ts +290 -0
- package/references/minimem/src/cli/commands/sync.ts +70 -0
- package/references/minimem/src/cli/commands/upsert.ts +197 -0
- package/references/minimem/src/cli/config.ts +584 -0
- package/references/minimem/src/cli/index.ts +264 -0
- package/references/minimem/src/cli/shared.ts +161 -0
- package/references/minimem/src/cli/sync/__tests__/central.test.ts +152 -0
- package/references/minimem/src/cli/sync/__tests__/conflicts.test.ts +209 -0
- package/references/minimem/src/cli/sync/__tests__/daemon.test.ts +118 -0
- package/references/minimem/src/cli/sync/__tests__/detection.test.ts +207 -0
- package/references/minimem/src/cli/sync/__tests__/integration.test.ts +476 -0
- package/references/minimem/src/cli/sync/__tests__/registry.test.ts +363 -0
- package/references/minimem/src/cli/sync/__tests__/state.test.ts +255 -0
- package/references/minimem/src/cli/sync/__tests__/validation.test.ts +193 -0
- package/references/minimem/src/cli/sync/__tests__/watcher.test.ts +178 -0
- package/references/minimem/src/cli/sync/central.ts +292 -0
- package/references/minimem/src/cli/sync/conflicts.ts +204 -0
- package/references/minimem/src/cli/sync/daemon.ts +407 -0
- package/references/minimem/src/cli/sync/detection.ts +138 -0
- package/references/minimem/src/cli/sync/index.ts +107 -0
- package/references/minimem/src/cli/sync/operations.ts +373 -0
- package/references/minimem/src/cli/sync/registry.ts +279 -0
- package/references/minimem/src/cli/sync/state.ts +355 -0
- package/references/minimem/src/cli/sync/validation.ts +206 -0
- package/references/minimem/src/cli/sync/watcher.ts +234 -0
- package/references/minimem/src/cli/version.ts +34 -0
- package/references/minimem/src/core/index.ts +9 -0
- package/references/minimem/src/core/indexer.ts +628 -0
- package/references/minimem/src/core/searcher.ts +221 -0
- package/references/minimem/src/db/schema.ts +183 -0
- package/references/minimem/src/db/sqlite-vec.ts +24 -0
- package/references/minimem/src/embeddings/__tests__/embeddings.test.ts +431 -0
- package/references/minimem/src/embeddings/batch-gemini.ts +392 -0
- package/references/minimem/src/embeddings/batch-openai.ts +409 -0
- package/references/minimem/src/embeddings/embeddings.ts +434 -0
- package/references/minimem/src/index.ts +109 -0
- package/references/minimem/src/internal.ts +299 -0
- package/references/minimem/src/minimem.ts +1276 -0
- package/references/minimem/src/search/__tests__/hybrid.test.ts +247 -0
- package/references/minimem/src/search/graph.ts +234 -0
- package/references/minimem/src/search/hybrid.ts +151 -0
- package/references/minimem/src/search/search.ts +256 -0
- package/references/minimem/src/server/__tests__/mcp.test.ts +341 -0
- package/references/minimem/src/server/__tests__/tools.test.ts +364 -0
- package/references/minimem/src/server/mcp.ts +326 -0
- package/references/minimem/src/server/tools.ts +720 -0
- package/references/minimem/src/session.ts +460 -0
- package/references/minimem/tsconfig.json +19 -0
- package/references/minimem/tsup.config.ts +26 -0
- package/references/minimem/vitest.config.ts +24 -0
- package/references/skill-tree/.claude/settings.json +6 -0
- package/references/skill-tree/.sudocode/issues.jsonl +11 -0
- package/references/skill-tree/.sudocode/specs.jsonl +1 -0
- package/references/skill-tree/CLAUDE.md +150 -0
- package/references/skill-tree/README.md +324 -0
- package/references/skill-tree/docs/GAPS_v1.md +221 -0
- package/references/skill-tree/docs/INTEGRATION_PLAN.md +467 -0
- package/references/skill-tree/docs/TODOS.md +91 -0
- package/references/skill-tree/docs/anthropic_skill_guide.md +1364 -0
- package/references/skill-tree/docs/design/federated-skill-trees.md +524 -0
- package/references/skill-tree/docs/design/multi-agent-sync.md +759 -0
- package/references/skill-tree/docs/scraper/BRAINSTORM.md +583 -0
- package/references/skill-tree/docs/scraper/POC_PLAN.md +420 -0
- package/references/skill-tree/docs/scraper/README.md +170 -0
- package/references/skill-tree/examples/basic-usage.ts +190 -0
- package/references/skill-tree/package-lock.json +1509 -0
- package/references/skill-tree/package.json +66 -0
- package/references/skill-tree/scraper/README.md +123 -0
- package/references/skill-tree/scraper/docs/DESIGN.md +683 -0
- package/references/skill-tree/scraper/docs/PLAN.md +336 -0
- package/references/skill-tree/scraper/drizzle.config.ts +10 -0
- package/references/skill-tree/scraper/package-lock.json +6329 -0
- package/references/skill-tree/scraper/package.json +68 -0
- package/references/skill-tree/scraper/test/fixtures/invalid-skill/missing-description.md +7 -0
- package/references/skill-tree/scraper/test/fixtures/invalid-skill/missing-name.md +7 -0
- package/references/skill-tree/scraper/test/fixtures/minimal-skill/SKILL.md +27 -0
- package/references/skill-tree/scraper/test/fixtures/skill-json/SKILL.json +21 -0
- package/references/skill-tree/scraper/test/fixtures/skill-with-meta/SKILL.md +54 -0
- package/references/skill-tree/scraper/test/fixtures/skill-with-meta/_meta.json +24 -0
- package/references/skill-tree/scraper/test/fixtures/valid-skill/SKILL.md +93 -0
- package/references/skill-tree/scraper/test/fixtures/valid-skill/_meta.json +22 -0
- package/references/skill-tree/scraper/tsup.config.ts +14 -0
- package/references/skill-tree/scraper/vitest.config.ts +17 -0
- package/references/skill-tree/scripts/convert-to-vitest.ts +166 -0
- package/references/skill-tree/skills/skill-writer/SKILL.md +339 -0
- package/references/skill-tree/skills/skill-writer/references/examples.md +326 -0
- package/references/skill-tree/skills/skill-writer/references/patterns.md +210 -0
- package/references/skill-tree/skills/skill-writer/references/quality-checklist.md +123 -0
- package/references/skill-tree/test/run-all.ts +106 -0
- package/references/skill-tree/test/utils.ts +128 -0
- package/references/skill-tree/vitest.config.ts +16 -0
- package/src/atlas.ts +525 -13
- package/src/embeddings/provider.ts +10 -3
- package/src/index.ts +127 -5
- package/src/learning/index.ts +41 -6
- package/src/learning/knowledge-extractor.ts +470 -0
- package/src/learning/meta-learner.ts +54 -0
- package/src/learning/pipeline.ts +87 -8
- package/src/learning/team-ingester.ts +499 -0
- package/src/learning/team-meta-learner.ts +558 -0
- package/src/learning/team-pipeline.ts +364 -0
- package/src/learning/trajectory-sources/dataclaw.ts +403 -0
- package/src/learning/trajectory-sources/entire.ts +240 -0
- package/src/learning/trajectory-sources/file.ts +136 -0
- package/src/learning/trajectory-sources/huggingface.ts +248 -0
- package/src/learning/trajectory-sources/in-memory.ts +61 -0
- package/src/learning/trajectory-sources/index.ts +15 -0
- package/src/learning/trajectory-sources/pipeline.ts +69 -0
- package/src/memory/graph-layers/base.ts +184 -0
- package/src/memory/graph-layers/causal.ts +16 -0
- package/src/memory/graph-layers/entity.ts +16 -0
- package/src/memory/graph-layers/index.ts +5 -0
- package/src/memory/graph-layers/semantic.ts +16 -0
- package/src/memory/graph-layers/temporal.ts +16 -0
- package/src/memory/index.ts +45 -0
- package/src/memory/knowledge-bank.ts +1260 -0
- package/src/memory/knowledge-defrag.ts +329 -0
- package/src/memory/knowledge-graph.ts +361 -0
- package/src/memory/search-provider.ts +35 -0
- package/src/memory/search-providers/index.ts +3 -0
- package/src/memory/search-providers/minimem.ts +84 -0
- package/src/memory/search-providers/text-similarity.ts +35 -0
- package/src/memory/skill-exporter.ts +357 -0
- package/src/memory/system.ts +61 -8
- package/src/memory/team-experience.ts +604 -0
- package/src/runtime/backends/acp-protocol.ts +231 -0
- package/src/runtime/backends/acp.ts +57 -196
- package/src/runtime/backends/index.ts +14 -0
- package/src/runtime/backends/macro-agent.ts +177 -0
- package/src/runtime/compute-provider.ts +206 -0
- package/src/runtime/index.ts +22 -0
- package/src/runtime/manager.ts +167 -23
- package/src/runtime/types.ts +41 -0
- package/src/search/evaluator.ts +29 -4
- package/src/search/index.ts +9 -0
- package/src/search/refinement-loop.ts +106 -12
- package/src/search/team-router.ts +459 -0
- package/src/session-bank/git-reader.ts +190 -0
- package/src/session-bank/index.ts +24 -0
- package/src/session-bank/parser.ts +366 -0
- package/src/session-bank/session-bank.ts +464 -0
- package/src/session-bank/types.ts +173 -0
- package/src/surfacing/index.ts +23 -0
- package/src/surfacing/publisher.ts +23 -0
- package/src/surfacing/skill-library.ts +31 -0
- package/src/surfacing/skill-publisher.ts +223 -0
- package/src/surfacing/sqlite-storage-adapter.ts +301 -0
- package/src/surfacing/team-skill-library.ts +610 -0
- package/src/types/config.ts +252 -0
- package/src/types/dataclaw.ts +99 -0
- package/src/types/huggingface-transformers.d.ts +12 -0
- package/src/types/index.ts +156 -0
- package/src/types/knowledge-graph.ts +246 -0
- package/src/types/knowledge.ts +388 -0
- package/src/types/team-meta.ts +212 -0
- package/src/types/team-playbook.ts +384 -0
- package/src/types/team-trajectory.ts +673 -0
- package/src/types/trajectory-source.ts +47 -0
- package/src/utils/frontmatter.ts +118 -0
- package/src/utils/index.ts +7 -0
- package/src/workspace/index.ts +48 -0
- package/src/workspace/runner.ts +281 -0
- package/src/workspace/skill-converter.ts +288 -0
- package/src/workspace/templates/index.ts +64 -0
- package/src/workspace/templates/knowledge-defrag.ts +223 -0
- package/src/workspace/templates/knowledge-extraction.ts +337 -0
- package/src/workspace/templates/meta-reflection.ts +208 -0
- package/src/workspace/templates/playbook-extraction.ts +240 -0
- package/src/workspace/templates/refinement-analysis.ts +162 -0
- package/src/workspace/templates/solution-evaluation.ts +199 -0
- package/src/workspace/templates/team-playbook-extraction.ts +631 -0
- package/src/workspace/templates/team-trajectory-analysis.ts +564 -0
- package/src/workspace/templates/trajectory-analysis.ts +234 -0
- package/src/workspace/templates/usage-inference.ts +163 -0
- package/src/workspace/types.ts +233 -0
- package/tests/atlas-knowledge.test.ts +165 -0
- package/tests/gap-fixes.test.ts +1103 -0
- package/tests/integration/dataclaw-e2e.test.ts +559 -0
- package/tests/integration/e2e.test.ts +407 -0
- package/tests/integration/entire-e2e.test.ts +187 -0
- package/tests/integration/huggingface-e2e.test.ts +627 -0
- package/tests/integration/session-bank.test.ts +225 -0
- package/tests/integration/skill-tree-wiring.test.ts +152 -0
- package/tests/learning/dataclaw-trajectory-source.test.ts +642 -0
- package/tests/learning/entire-trajectory-source.test.ts +380 -0
- package/tests/learning/huggingface-trajectory-source.test.ts +817 -0
- package/tests/learning/knowledge-extractor.test.ts +491 -0
- package/tests/learning/team-ingester.test.ts +349 -0
- package/tests/learning/team-meta-learner.test.ts +618 -0
- package/tests/learning/team-pipeline.test.ts +334 -0
- package/tests/learning/trajectory-sources.test.ts +312 -0
- package/tests/memory/graph-layers/semantic.test.ts +219 -0
- package/tests/memory/knowledge-bank-extraction.test.ts +558 -0
- package/tests/memory/knowledge-bank.test.ts +705 -0
- package/tests/memory/knowledge-defrag.test.ts +366 -0
- package/tests/memory/knowledge-evolution.test.ts +563 -0
- package/tests/memory/knowledge-graph.test.ts +492 -0
- package/tests/memory/knowledge-inbox.test.ts +258 -0
- package/tests/memory/knowledge-minimem.test.ts +251 -0
- package/tests/memory/skill-exporter.test.ts +470 -0
- package/tests/memory/team-experience.test.ts +411 -0
- package/tests/runtime/agent-manager.test.ts +1 -1
- package/tests/runtime/compute-provider.test.ts +288 -0
- package/tests/runtime/delegate.test.ts +349 -0
- package/tests/runtime/macro-agent-backend.test.ts +266 -0
- package/tests/search/team-router.test.ts +376 -0
- package/tests/session-bank/fixtures/multi-tool-session/full.jsonl +12 -0
- package/tests/session-bank/fixtures/multi-tool-session/metadata.json +28 -0
- package/tests/session-bank/fixtures/root-metadata.json +18 -0
- package/tests/session-bank/fixtures/simple-session/full.jsonl +6 -0
- package/tests/session-bank/fixtures/simple-session/metadata.json +38 -0
- package/tests/session-bank/git-reader.test.ts +232 -0
- package/tests/session-bank/parser.test.ts +321 -0
- package/tests/session-bank/session-bank.test.ts +546 -0
- package/tests/surfacing/skill-publisher.test.ts +398 -0
- package/tests/surfacing/sqlite-storage-adapter.test.ts +218 -0
- package/tests/surfacing/team-skill-library.test.ts +444 -0
- package/tests/types/team-meta.test.ts +147 -0
- package/tests/types/team-playbook.test.ts +246 -0
- package/tests/types/team-trajectory.test.ts +557 -0
- package/tests/utils/frontmatter.test.ts +208 -0
- package/tests/workspace/full-flow.test.ts +839 -0
- package/tests/workspace/manager.test.ts +215 -0
- package/tests/workspace/runner.test.ts +330 -0
- package/tests/workspace/skill-converter.test.ts +205 -0
- package/tests/workspace/templates/knowledge-extraction.test.ts +235 -0
- package/tests/workspace/templates/team-playbook-extraction.test.ts +341 -0
- package/tests/workspace/templates/team-trajectory-analysis.test.ts +417 -0
- package/src/learning/llm-extractor.ts +0 -542
|
@@ -0,0 +1,627 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* End-to-end integration test: HuggingFaceTrajectorySource → full pipeline
|
|
3
|
+
*
|
|
4
|
+
* Loads dataclaw-format sessions through a mock HF datasets-server,
|
|
5
|
+
* then runs the full pipeline: load → analyze → extract knowledge.
|
|
6
|
+
*
|
|
7
|
+
* Uses realistic dataclaw session data matching the real HF dataset schema
|
|
8
|
+
* (peteromallet/dataclaw-peteromallet format).
|
|
9
|
+
*/
|
|
10
|
+
import { describe, it, expect, vi } from 'vitest';
|
|
11
|
+
import { HuggingFaceTrajectorySource } from '../../src/learning/trajectory-sources/huggingface.js';
|
|
12
|
+
import { TrajectorySchema } from '../../src/types/trajectory.js';
|
|
13
|
+
import { createAnalyzer } from '../../src/learning/analyzer.js';
|
|
14
|
+
import { createKnowledgeExtractor } from '../../src/learning/knowledge-extractor.js';
|
|
15
|
+
import type { DataclawSession } from '../../src/types/dataclaw.js';
|
|
16
|
+
|
|
17
|
+
// ── Realistic dataclaw sessions matching real HF exports ──────────────
|
|
18
|
+
|
|
19
|
+
/** Claude Code session: multi-step bug fix with Read/Edit/bash */
|
|
20
|
+
function claudeBugfixSession(): DataclawSession {
|
|
21
|
+
return {
|
|
22
|
+
session_id: 'a1b2c3d4-e5f6-7890-abcd-ef1234567890',
|
|
23
|
+
project: 'my-web-app',
|
|
24
|
+
model: 'claude-opus-4-6',
|
|
25
|
+
source: 'claude',
|
|
26
|
+
git_branch: 'fix/null-email',
|
|
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 login when user has no email. Likely a null reference in 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. Adding optional chaining.",
|
|
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: "Running tests to verify the fix.",
|
|
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, 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
|
+
/** Codex session: Python feature with exec_command (different tool format) */
|
|
96
|
+
function codexFeatureSession(): DataclawSession {
|
|
97
|
+
return {
|
|
98
|
+
session_id: 'f9e8d7c6-b5a4-3210-fedc-ba0987654321',
|
|
99
|
+
project: 'ml-pipeline',
|
|
100
|
+
model: 'gpt-5.3-codex',
|
|
101
|
+
source: 'codex',
|
|
102
|
+
git_branch: 'feature/csv-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: "Let me 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: 'Running 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.',
|
|
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 failed session with error tools and failure signals in final message */
|
|
167
|
+
function failedDeploySession(): DataclawSession {
|
|
168
|
+
return {
|
|
169
|
+
session_id: 'dead-beef-0000-1111-222233334444',
|
|
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
|
+
/** Minimal conversation-only session — no tools, null git_branch */
|
|
225
|
+
function conversationOnlySession(): DataclawSession {
|
|
226
|
+
return {
|
|
227
|
+
session_id: 'aaaa-bbbb-cccc-dddd-eeee11112222',
|
|
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 to the next function.',
|
|
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
|
+
// ── Mock HF datasets-server ──────────────────────────────────────────
|
|
257
|
+
|
|
258
|
+
type FetchFn = typeof globalThis.fetch;
|
|
259
|
+
|
|
260
|
+
const ALL_SESSIONS = [
|
|
261
|
+
claudeBugfixSession(),
|
|
262
|
+
codexFeatureSession(),
|
|
263
|
+
failedDeploySession(),
|
|
264
|
+
conversationOnlySession(),
|
|
265
|
+
];
|
|
266
|
+
|
|
267
|
+
function createMockHfServer(
|
|
268
|
+
sessions: DataclawSession[] = ALL_SESSIONS,
|
|
269
|
+
): FetchFn {
|
|
270
|
+
return vi.fn(async (input: RequestInfo | URL, _init?: RequestInit) => {
|
|
271
|
+
const url = typeof input === 'string' ? input : input.toString();
|
|
272
|
+
|
|
273
|
+
if (url.includes('/info')) {
|
|
274
|
+
return new Response(
|
|
275
|
+
JSON.stringify({
|
|
276
|
+
dataset_info: {
|
|
277
|
+
default: { num_rows: sessions.length, dataset_name: 'test' },
|
|
278
|
+
},
|
|
279
|
+
}),
|
|
280
|
+
{ status: 200, headers: { 'Content-Type': 'application/json' } },
|
|
281
|
+
);
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
if (url.includes('/rows')) {
|
|
285
|
+
const parsed = new URL(url);
|
|
286
|
+
const offset = parseInt(parsed.searchParams.get('offset') ?? '0', 10);
|
|
287
|
+
const length = parseInt(parsed.searchParams.get('length') ?? '100', 10);
|
|
288
|
+
const page = sessions.slice(offset, offset + length);
|
|
289
|
+
|
|
290
|
+
return new Response(
|
|
291
|
+
JSON.stringify({
|
|
292
|
+
features: [],
|
|
293
|
+
rows: page.map((s, i) => ({ row_idx: offset + i, row: s })),
|
|
294
|
+
num_rows_total: sessions.length,
|
|
295
|
+
num_rows_per_page: 100,
|
|
296
|
+
partial: false,
|
|
297
|
+
}),
|
|
298
|
+
{ status: 200, headers: { 'Content-Type': 'application/json' } },
|
|
299
|
+
);
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
return new Response('Not Found', { status: 404 });
|
|
303
|
+
}) as unknown as FetchFn;
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
// ============================================================================
|
|
307
|
+
// E2E Tests
|
|
308
|
+
// ============================================================================
|
|
309
|
+
|
|
310
|
+
describe('HuggingFace E2E: load → analyze → extract', () => {
|
|
311
|
+
// ── Stage 1: Load from HF ─────────────────────────────────────────
|
|
312
|
+
|
|
313
|
+
describe('Stage 1: HF dataset loading', () => {
|
|
314
|
+
it('should load all sessions from mock HF dataset', async () => {
|
|
315
|
+
const source = new HuggingFaceTrajectorySource('peteromallet/dataclaw-peteromallet', {
|
|
316
|
+
fetchFn: createMockHfServer(),
|
|
317
|
+
});
|
|
318
|
+
const items = await source.load();
|
|
319
|
+
expect(items).toHaveLength(4);
|
|
320
|
+
});
|
|
321
|
+
|
|
322
|
+
it('should produce valid Trajectory objects for every session', async () => {
|
|
323
|
+
const source = new HuggingFaceTrajectorySource('peteromallet/dataclaw-peteromallet', {
|
|
324
|
+
fetchFn: createMockHfServer(),
|
|
325
|
+
});
|
|
326
|
+
const items = await source.load();
|
|
327
|
+
|
|
328
|
+
for (const { trajectory } of items) {
|
|
329
|
+
const parsed = TrajectorySchema.safeParse(trajectory);
|
|
330
|
+
expect(parsed.success, `Invalid trajectory: ${trajectory.id}`).toBe(true);
|
|
331
|
+
}
|
|
332
|
+
});
|
|
333
|
+
|
|
334
|
+
it('should tag all trajectories with dataclaw source metadata', async () => {
|
|
335
|
+
const source = new HuggingFaceTrajectorySource('peteromallet/dataclaw-peteromallet', {
|
|
336
|
+
fetchFn: createMockHfServer(),
|
|
337
|
+
});
|
|
338
|
+
const items = await source.load();
|
|
339
|
+
|
|
340
|
+
for (const { trajectory } of items) {
|
|
341
|
+
expect(trajectory.metadata.source).toBe('dataclaw');
|
|
342
|
+
expect(trajectory.metadata.dataclawSource).toBeTruthy();
|
|
343
|
+
expect(trajectory.metadata.sessionId).toBeTruthy();
|
|
344
|
+
}
|
|
345
|
+
});
|
|
346
|
+
|
|
347
|
+
it('should infer correct domains from tool file paths', async () => {
|
|
348
|
+
const source = new HuggingFaceTrajectorySource('peteromallet/dataclaw-peteromallet', {
|
|
349
|
+
fetchFn: createMockHfServer(),
|
|
350
|
+
});
|
|
351
|
+
const items = await source.load();
|
|
352
|
+
|
|
353
|
+
const claude = items.find((i) => i.trajectory.id.includes('a1b2c3d4'));
|
|
354
|
+
const codex = items.find((i) => i.trajectory.id.includes('f9e8d7c6'));
|
|
355
|
+
|
|
356
|
+
expect(claude!.trajectory.task.domain).toBe('typescript');
|
|
357
|
+
expect(codex!.trajectory.task.domain).toBe('python');
|
|
358
|
+
});
|
|
359
|
+
|
|
360
|
+
it('should detect success/failure correctly', async () => {
|
|
361
|
+
const source = new HuggingFaceTrajectorySource('peteromallet/dataclaw-peteromallet', {
|
|
362
|
+
fetchFn: createMockHfServer(),
|
|
363
|
+
});
|
|
364
|
+
const items = await source.load();
|
|
365
|
+
|
|
366
|
+
const claude = items.find((i) => i.trajectory.id.includes('a1b2c3d4'));
|
|
367
|
+
const failed = items.find((i) => i.trajectory.id.includes('dead-beef'));
|
|
368
|
+
|
|
369
|
+
expect(claude!.trajectory.outcome.success).toBe(true);
|
|
370
|
+
expect(failed!.trajectory.outcome.success).toBe(false);
|
|
371
|
+
});
|
|
372
|
+
|
|
373
|
+
it('should paginate across multiple pages', async () => {
|
|
374
|
+
const source = new HuggingFaceTrajectorySource('peteromallet/dataclaw-peteromallet', {
|
|
375
|
+
fetchFn: createMockHfServer(),
|
|
376
|
+
pageSize: 2, // Force 2 pages for 4 sessions
|
|
377
|
+
});
|
|
378
|
+
const items = await source.load();
|
|
379
|
+
|
|
380
|
+
expect(items).toHaveLength(4);
|
|
381
|
+
});
|
|
382
|
+
});
|
|
383
|
+
|
|
384
|
+
// ── Stage 2: Analyzer ─────────────────────────────────────────────
|
|
385
|
+
|
|
386
|
+
describe('Stage 2: TrajectoryAnalyzer on HF-loaded trajectories', () => {
|
|
387
|
+
it('should analyze all successful trajectories without error', async () => {
|
|
388
|
+
const source = new HuggingFaceTrajectorySource('peteromallet/dataclaw-peteromallet', {
|
|
389
|
+
fetchFn: createMockHfServer(),
|
|
390
|
+
});
|
|
391
|
+
const items = await source.load({ successOnly: true });
|
|
392
|
+
const analyzer = createAnalyzer('simple');
|
|
393
|
+
|
|
394
|
+
for (const { trajectory } of items) {
|
|
395
|
+
const analysis = await analyzer.analyze(trajectory);
|
|
396
|
+
|
|
397
|
+
expect(analysis).toBeDefined();
|
|
398
|
+
expect(typeof analysis.success).toBe('boolean');
|
|
399
|
+
expect(analysis.stepAttribution).toHaveLength(trajectory.steps.length);
|
|
400
|
+
expect(analysis.keySteps).toBeDefined();
|
|
401
|
+
expect(typeof analysis.abstractable).toBe('boolean');
|
|
402
|
+
}
|
|
403
|
+
});
|
|
404
|
+
|
|
405
|
+
it('should analyze failed trajectories and detect error patterns', async () => {
|
|
406
|
+
const source = new HuggingFaceTrajectorySource('peteromallet/dataclaw-peteromallet', {
|
|
407
|
+
fetchFn: createMockHfServer(),
|
|
408
|
+
});
|
|
409
|
+
const items = await source.load();
|
|
410
|
+
const failed = items.find((i) => i.trajectory.id.includes('dead-beef'));
|
|
411
|
+
const analyzer = createAnalyzer('simple');
|
|
412
|
+
|
|
413
|
+
const analysis = await analyzer.analyze(failed!.trajectory);
|
|
414
|
+
|
|
415
|
+
expect(analysis.success).toBe(false);
|
|
416
|
+
expect(analysis.stepAttribution.length).toBeGreaterThan(0);
|
|
417
|
+
});
|
|
418
|
+
|
|
419
|
+
it('should identify key steps in the Claude bugfix session', async () => {
|
|
420
|
+
const source = new HuggingFaceTrajectorySource('peteromallet/dataclaw-peteromallet', {
|
|
421
|
+
fetchFn: createMockHfServer(),
|
|
422
|
+
});
|
|
423
|
+
const items = await source.load();
|
|
424
|
+
const claude = items.find((i) => i.trajectory.id.includes('a1b2c3d4'));
|
|
425
|
+
const analyzer = createAnalyzer('simple');
|
|
426
|
+
|
|
427
|
+
const analysis = await analyzer.analyze(claude!.trajectory);
|
|
428
|
+
|
|
429
|
+
// Multi-step trajectory should have identifiable key steps
|
|
430
|
+
expect(analysis.keySteps.length).toBeGreaterThan(0);
|
|
431
|
+
// At least one step should have non-zero attribution
|
|
432
|
+
expect(analysis.stepAttribution.some((s) => s > 0)).toBe(true);
|
|
433
|
+
});
|
|
434
|
+
|
|
435
|
+
it('should mark multi-step successful trajectories as abstractable', async () => {
|
|
436
|
+
const source = new HuggingFaceTrajectorySource('peteromallet/dataclaw-peteromallet', {
|
|
437
|
+
fetchFn: createMockHfServer(),
|
|
438
|
+
});
|
|
439
|
+
const items = await source.load();
|
|
440
|
+
const claude = items.find((i) => i.trajectory.id.includes('a1b2c3d4'));
|
|
441
|
+
const analyzer = createAnalyzer('simple');
|
|
442
|
+
|
|
443
|
+
const analysis = await analyzer.analyze(claude!.trajectory);
|
|
444
|
+
|
|
445
|
+
// A 4-step successful session with tool usage should be abstractable
|
|
446
|
+
expect(analysis.abstractable).toBe(true);
|
|
447
|
+
});
|
|
448
|
+
|
|
449
|
+
it('should extract training examples from successful trajectories', async () => {
|
|
450
|
+
const source = new HuggingFaceTrajectorySource('peteromallet/dataclaw-peteromallet', {
|
|
451
|
+
fetchFn: createMockHfServer(),
|
|
452
|
+
});
|
|
453
|
+
const items = await source.load();
|
|
454
|
+
const claude = items.find((i) => i.trajectory.id.includes('a1b2c3d4'));
|
|
455
|
+
const analyzer = createAnalyzer('simple');
|
|
456
|
+
|
|
457
|
+
const analysis = await analyzer.analyze(claude!.trajectory);
|
|
458
|
+
|
|
459
|
+
expect(analysis.trainingExamples.length).toBeGreaterThan(0);
|
|
460
|
+
for (const ex of analysis.trainingExamples) {
|
|
461
|
+
expect(ex.input).toBeTruthy();
|
|
462
|
+
expect(typeof ex.stepIndex).toBe('number');
|
|
463
|
+
}
|
|
464
|
+
});
|
|
465
|
+
});
|
|
466
|
+
|
|
467
|
+
// ── Stage 3: Knowledge Extraction ─────────────────────────────────
|
|
468
|
+
|
|
469
|
+
describe('Stage 3: KnowledgeExtractor on HF-loaded & analyzed trajectories', () => {
|
|
470
|
+
it('should extract knowledge from successful Claude session', async () => {
|
|
471
|
+
const source = new HuggingFaceTrajectorySource('peteromallet/dataclaw-peteromallet', {
|
|
472
|
+
fetchFn: createMockHfServer(),
|
|
473
|
+
});
|
|
474
|
+
const items = await source.load();
|
|
475
|
+
const claude = items.find((i) => i.trajectory.id.includes('a1b2c3d4'));
|
|
476
|
+
const analyzer = createAnalyzer('simple');
|
|
477
|
+
const extractor = createKnowledgeExtractor();
|
|
478
|
+
|
|
479
|
+
const analysis = await analyzer.analyze(claude!.trajectory);
|
|
480
|
+
const knowledge = extractor.extract(claude!.trajectory, analysis);
|
|
481
|
+
|
|
482
|
+
expect(knowledge).toBeDefined();
|
|
483
|
+
expect(knowledge.observations).toBeDefined();
|
|
484
|
+
expect(knowledge.entityUpdates).toBeDefined();
|
|
485
|
+
expect(knowledge.links).toBeDefined();
|
|
486
|
+
expect(knowledge.playbookLinks).toBeDefined();
|
|
487
|
+
expect(knowledge.contradictions).toBeDefined();
|
|
488
|
+
});
|
|
489
|
+
|
|
490
|
+
it('should extract causal chains from failed session', async () => {
|
|
491
|
+
const source = new HuggingFaceTrajectorySource('peteromallet/dataclaw-peteromallet', {
|
|
492
|
+
fetchFn: createMockHfServer(),
|
|
493
|
+
});
|
|
494
|
+
const items = await source.load();
|
|
495
|
+
const failed = items.find((i) => i.trajectory.id.includes('dead-beef'));
|
|
496
|
+
const analyzer = createAnalyzer('simple');
|
|
497
|
+
const extractor = createKnowledgeExtractor();
|
|
498
|
+
|
|
499
|
+
const analysis = await analyzer.analyze(failed!.trajectory);
|
|
500
|
+
const knowledge = extractor.extract(failed!.trajectory, analysis);
|
|
501
|
+
|
|
502
|
+
// The failed session has error→failure pattern that should produce causal chains
|
|
503
|
+
// or at minimum, the extraction should complete without throwing
|
|
504
|
+
expect(knowledge).toBeDefined();
|
|
505
|
+
expect(Array.isArray(knowledge.observations)).toBe(true);
|
|
506
|
+
expect(Array.isArray(knowledge.links)).toBe(true);
|
|
507
|
+
});
|
|
508
|
+
|
|
509
|
+
it('should run full pipeline on all sessions without errors', async () => {
|
|
510
|
+
const source = new HuggingFaceTrajectorySource('peteromallet/dataclaw-peteromallet', {
|
|
511
|
+
fetchFn: createMockHfServer(),
|
|
512
|
+
});
|
|
513
|
+
const items = await source.load();
|
|
514
|
+
const analyzer = createAnalyzer('simple');
|
|
515
|
+
const extractor = createKnowledgeExtractor();
|
|
516
|
+
|
|
517
|
+
for (const { trajectory } of items) {
|
|
518
|
+
const analysis = await analyzer.analyze(trajectory);
|
|
519
|
+
const knowledge = extractor.extract(trajectory, analysis);
|
|
520
|
+
|
|
521
|
+
// Every trajectory should produce valid analysis and knowledge
|
|
522
|
+
expect(analysis.stepAttribution).toHaveLength(trajectory.steps.length);
|
|
523
|
+
expect(knowledge).toBeDefined();
|
|
524
|
+
expect(Array.isArray(knowledge.observations)).toBe(true);
|
|
525
|
+
}
|
|
526
|
+
});
|
|
527
|
+
|
|
528
|
+
it('should extract observations from the Codex Python session', async () => {
|
|
529
|
+
const source = new HuggingFaceTrajectorySource('peteromallet/dataclaw-peteromallet', {
|
|
530
|
+
fetchFn: createMockHfServer(),
|
|
531
|
+
});
|
|
532
|
+
const items = await source.load();
|
|
533
|
+
const codex = items.find((i) => i.trajectory.id.includes('f9e8d7c6'));
|
|
534
|
+
const analyzer = createAnalyzer('simple');
|
|
535
|
+
const extractor = createKnowledgeExtractor();
|
|
536
|
+
|
|
537
|
+
const analysis = await analyzer.analyze(codex!.trajectory);
|
|
538
|
+
const knowledge = extractor.extract(codex!.trajectory, analysis);
|
|
539
|
+
|
|
540
|
+
expect(knowledge).toBeDefined();
|
|
541
|
+
// Codex session writes Python files — extraction should succeed
|
|
542
|
+
expect(Array.isArray(knowledge.observations)).toBe(true);
|
|
543
|
+
});
|
|
544
|
+
|
|
545
|
+
it('should handle conversation-only session through full pipeline', async () => {
|
|
546
|
+
const source = new HuggingFaceTrajectorySource('peteromallet/dataclaw-peteromallet', {
|
|
547
|
+
fetchFn: createMockHfServer(),
|
|
548
|
+
});
|
|
549
|
+
const items = await source.load();
|
|
550
|
+
const qa = items.find((i) => i.trajectory.id.includes('aaaa-bbbb'));
|
|
551
|
+
const analyzer = createAnalyzer('simple');
|
|
552
|
+
const extractor = createKnowledgeExtractor();
|
|
553
|
+
|
|
554
|
+
const analysis = await analyzer.analyze(qa!.trajectory);
|
|
555
|
+
const knowledge = extractor.extract(qa!.trajectory, analysis);
|
|
556
|
+
|
|
557
|
+
// Single-step Q&A should still work through the full pipeline
|
|
558
|
+
expect(analysis.stepAttribution).toHaveLength(1);
|
|
559
|
+
expect(knowledge).toBeDefined();
|
|
560
|
+
});
|
|
561
|
+
});
|
|
562
|
+
|
|
563
|
+
// ── Stage 4: Full pipeline with filtering ─────────────────────────
|
|
564
|
+
|
|
565
|
+
describe('Stage 4: filtered pipeline runs', () => {
|
|
566
|
+
it('should pipeline only Claude sessions', async () => {
|
|
567
|
+
const source = new HuggingFaceTrajectorySource('peteromallet/dataclaw-peteromallet', {
|
|
568
|
+
fetchFn: createMockHfServer(),
|
|
569
|
+
sources: ['claude'],
|
|
570
|
+
});
|
|
571
|
+
const items = await source.load({ successOnly: true });
|
|
572
|
+
const analyzer = createAnalyzer('simple');
|
|
573
|
+
const extractor = createKnowledgeExtractor();
|
|
574
|
+
|
|
575
|
+
// Should have 2 Claude success sessions (bugfix + conversation)
|
|
576
|
+
expect(items).toHaveLength(2);
|
|
577
|
+
|
|
578
|
+
let totalObservations = 0;
|
|
579
|
+
let totalTrainingExamples = 0;
|
|
580
|
+
|
|
581
|
+
for (const { trajectory } of items) {
|
|
582
|
+
expect(trajectory.metadata.dataclawSource).toBe('claude');
|
|
583
|
+
expect(trajectory.outcome.success).toBe(true);
|
|
584
|
+
|
|
585
|
+
const analysis = await analyzer.analyze(trajectory);
|
|
586
|
+
const knowledge = extractor.extract(trajectory, analysis);
|
|
587
|
+
|
|
588
|
+
totalObservations += knowledge.observations.length;
|
|
589
|
+
totalTrainingExamples += analysis.trainingExamples.length;
|
|
590
|
+
}
|
|
591
|
+
|
|
592
|
+
// The pipeline should produce some learning signal
|
|
593
|
+
expect(totalObservations + totalTrainingExamples).toBeGreaterThan(0);
|
|
594
|
+
});
|
|
595
|
+
|
|
596
|
+
it('should pipeline TypeScript-domain only', async () => {
|
|
597
|
+
const source = new HuggingFaceTrajectorySource('peteromallet/dataclaw-peteromallet', {
|
|
598
|
+
fetchFn: createMockHfServer(),
|
|
599
|
+
});
|
|
600
|
+
const items = await source.load({ domain: 'typescript' });
|
|
601
|
+
const analyzer = createAnalyzer('simple');
|
|
602
|
+
|
|
603
|
+
expect(items).toHaveLength(1);
|
|
604
|
+
expect(items[0].trajectory.task.domain).toBe('typescript');
|
|
605
|
+
|
|
606
|
+
const analysis = await analyzer.analyze(items[0].trajectory);
|
|
607
|
+
expect(analysis.abstractable).toBe(true);
|
|
608
|
+
});
|
|
609
|
+
|
|
610
|
+
it('should pipeline with limit', async () => {
|
|
611
|
+
const source = new HuggingFaceTrajectorySource('peteromallet/dataclaw-peteromallet', {
|
|
612
|
+
fetchFn: createMockHfServer(),
|
|
613
|
+
});
|
|
614
|
+
const items = await source.load({ limit: 2 });
|
|
615
|
+
const analyzer = createAnalyzer('simple');
|
|
616
|
+
const extractor = createKnowledgeExtractor();
|
|
617
|
+
|
|
618
|
+
expect(items).toHaveLength(2);
|
|
619
|
+
|
|
620
|
+
for (const { trajectory } of items) {
|
|
621
|
+
const analysis = await analyzer.analyze(trajectory);
|
|
622
|
+
const knowledge = extractor.extract(trajectory, analysis);
|
|
623
|
+
expect(knowledge).toBeDefined();
|
|
624
|
+
}
|
|
625
|
+
});
|
|
626
|
+
});
|
|
627
|
+
});
|