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