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 @@
|
|
|
1
|
+
{"id":"s-70no","uuid":"2070edd2-fb8a-42a2-af93-b8951ab8fa16","title":"Skill Graph Serving Layer","file_path":"specs/s-70no_skill_graph_serving_layer.md","content":"# Skill Graph Serving Layer\n\n## Overview\n\nAdd a serving layer to skill-tree that enables **dynamic skill loadouts** with **mid-session adjustability**. Skills can be selected based on task, project context, semantic matching, or explicit configuration. Both external orchestrators and agents can control the loadout.\n\n## Problem\n\nCurrently, serving skills to an agent requires either:\n1. Loading the entire skill library upfront (context explosion)\n2. Manually configuring which skills to include (inflexible)\n\nNeither approach supports dynamic, context-aware skill selection or mid-session adjustments.\n\n## Solution\n\nImplement a **loadout-based serving model** with two layers:\n\n1. **Loadout Layer**: Which skills are available to the agent\n2. **Expansion Layer**: Of available skills, which are showing full content vs summaries\n\nKey capabilities:\n- **Flexible selection**: Task-based, project-based, profile-based, semantic, dependency-graph\n- **Mid-session adjustable**: Loadouts can change during a session\n- **Dual control**: Both orchestrator (external) and agent (internal) can modify loadouts\n- **Progressive disclosure**: Skills start collapsed, expand on demand\n- **Context-aware**: Auto-suggest skills based on current task/errors\n\n## Reference: OpenSkills Patterns\n\nThis design adopts compatible patterns from [OpenSkills](https://github.com/numman-ali/openskills):\n\n- **SKILL.md format**: Skills stored as markdown with YAML frontmatter\n- **AGENTS.md XML format**: `<available_skills>` block for system prompt rendering\n- **Progressive disclosure**: Summaries visible, full content on demand\n- **CLI-style reads**: Explicit skill loading (we add MCP on top)\n\nKey difference: OpenSkills is stateless (no expansion tracking). We add stateful loadout management.\n\n## Core Types\n\n### LoadoutCriteria\n\nFlexible criteria for selecting skills into a loadout:\n\n```typescript\ninterface LoadoutCriteria {\n // === Explicit Selection ===\n include?: string[]; // Always include these skill IDs\n exclude?: string[]; // Never include these\n \n // === Filter-Based ===\n tags?: string[]; // Match any of these tags\n tagsAll?: string[]; // Must have ALL these tags\n status?: SkillStatus[]; // Filter by status (default: ['active'])\n minSuccessRate?: number; // Quality threshold (0-1)\n author?: string; // Filter by author\n \n // === Semantic/Context-Based ===\n taskDescription?: string; // Semantic match to task\n problemContext?: string; // Current problem being solved\n errorContext?: string; // Error message to match\n keywords?: string[]; // Keyword triggers\n \n // === Project-Based ===\n projectType?: string; // \"python\", \"typescript\", \"rust\", etc.\n filePatterns?: string[]; // Glob patterns of files in scope\n frameworks?: string[]; // Detected frameworks\n \n // === Relationship-Based ===\n rootSkills?: string[]; // Start here, traverse relationships\n includeDependencies?: boolean; // Follow 'depends_on' edges\n includeRelated?: boolean; // Include 'related' skills\n depth?: number; // Max traversal depth (default: 2)\n \n // === Limits ===\n maxSkills?: number; // Cap on loadout size\n maxTokens?: number; // Context budget (estimated)\n priorityOrder?: 'relevance' | 'usage' | 'successRate' | 'recent';\n \n // === Merge Behavior ===\n mode?: 'replace' | 'merge' | 'subtract'; // How to apply to current state\n}\n```\n\n### LoadoutState\n\nCurrent state of what's loaded for an agent:\n\n```typescript\ntype SkillState = 'available' | 'expanded' | 'pending';\n\ninterface LoadoutState {\n /** Skills available to the agent (summaries visible) */\n available: Map<string, Skill>;\n \n /** Skills with full content expanded */\n expanded: Set<string>;\n \n /** Skills requested by agent, pending orchestrator approval */\n pending: Set<string>;\n \n /** How this loadout was created */\n source: LoadoutSource;\n \n /** When the loadout was last modified */\n updatedAt: Date;\n}\n\ninterface LoadoutSource {\n type: 'criteria' | 'profile' | 'task' | 'project' | 'manual';\n criteria?: LoadoutCriteria;\n profileName?: string;\n taskDescription?: string;\n projectPath?: string;\n}\n```\n\n### Skill Extension\n\nExtend existing `Skill` interface in `src/types.ts`:\n\n```typescript\ninterface Skill {\n // ... existing fields\n \n serving?: {\n /** Short summary for collapsed view (defaults to description) */\n summary?: string;\n \n /** Estimated token count for context budgeting */\n tokenEstimate?: number;\n \n /** Auto-expand triggers */\n autoExpand?: ExpandTrigger[];\n \n /** Group ID for batch expansion */\n expansionGroup?: string;\n };\n}\n\ninterface ExpandTrigger {\n on: 'use' | 'mention' | 'error-match' | 'file-match' | 'explicit';\n conditions?: {\n keywords?: string[];\n errorPatterns?: string[];\n filePatterns?: string[];\n };\n}\n```\n\n## Core Components\n\n### 1. LoadoutCompiler (`src/serving/loadout-compiler.ts`)\n\nCompiles skills from criteria using multiple selection strategies:\n\n```typescript\ninterface LoadoutCompilerConfig {\n defaultMaxSkills?: number; // Default: 15\n defaultStatus?: SkillStatus[]; // Default: ['active']\n semanticThreshold?: number; // Default: 0.6\n}\n\nclass LoadoutCompiler {\n constructor(\n private skillBank: SkillBank,\n private config?: LoadoutCompilerConfig\n ) {}\n\n /**\n * Compile from flexible criteria (main entry point)\n */\n async compile(criteria: LoadoutCriteria): Promise<Skill[]> {\n let candidates = await this.skillBank.listSkills({ \n status: criteria.status ?? ['active'] \n });\n \n // Apply filters in priority order\n candidates = this.applyExplicitFilters(candidates, criteria);\n candidates = this.applyTagFilters(candidates, criteria);\n candidates = this.applyQualityFilters(candidates, criteria);\n candidates = await this.applySemanticFilters(candidates, criteria);\n candidates = await this.applyRelationshipFilters(candidates, criteria);\n candidates = this.applyLimits(candidates, criteria);\n \n return candidates;\n }\n\n /**\n * Compile for a specific task (semantic matching)\n */\n async compileForTask(taskDescription: string): Promise<Skill[]>;\n\n /**\n * Compile by analyzing a project directory\n */\n async compileForProject(projectPath: string): Promise<Skill[]>;\n\n /**\n * Compile from a named profile\n */\n async compileFromProfile(profileName: string): Promise<Skill[]>;\n\n /**\n * Detect project context from files\n */\n async detectProjectContext(projectPath: string): Promise<ProjectContext>;\n}\n\ninterface ProjectContext {\n type: string; // \"typescript\", \"python\", etc.\n frameworks: string[]; // [\"react\", \"express\", ...]\n patterns: string[]; // File patterns found\n packageManager?: string; // \"npm\", \"pip\", etc.\n}\n```\n\n### 2. SkillGraphServer (`src/serving/graph-server.ts`)\n\nMain orchestrator with dual control (orchestrator + agent):\n\n```typescript\ninterface GraphServerConfig {\n /** SkillBank instance */\n skillBank: SkillBank;\n \n /** Initial loadout criteria (optional) */\n initialLoadout?: LoadoutCriteria;\n \n /** Whether agent can modify loadout */\n agentCanModify?: boolean; // Default: true\n \n /** Whether agent additions need approval */\n requireApproval?: boolean; // Default: false\n \n /** Auto-expand skills on first use */\n autoExpandOnUse?: boolean; // Default: true\n \n /** Max skills in expanded state (context budget) */\n maxExpanded?: number; // Default: 5\n \n /** Eviction strategy when maxExpanded reached */\n evictionStrategy?: 'lru' | 'priority' | 'manual';\n \n /** Available loadout profiles */\n profiles?: Record<string, LoadoutCriteria>;\n \n /** Persist state across sessions */\n persistState?: boolean; // Default: false\n}\n\nclass SkillGraphServer {\n private state: LoadoutState;\n private compiler: LoadoutCompiler;\n \n constructor(config: GraphServerConfig);\n\n // =========================================================================\n // External API (for Orchestrator)\n // =========================================================================\n\n /** Set loadout from criteria (replaces current) */\n async setLoadout(criteria: LoadoutCriteria): Promise<LoadoutState>;\n \n /** Set loadout for a specific task */\n async setLoadoutForTask(taskDescription: string): Promise<LoadoutState>;\n \n /** Set loadout based on project analysis */\n async setLoadoutForProject(projectPath: string): Promise<LoadoutState>;\n \n /** Switch to a named profile */\n async setLoadoutFromProfile(profileName: string): Promise<LoadoutState>;\n \n /** Merge additional skills into current loadout */\n async addSkills(skillIds: string[]): Promise<void>;\n \n /** Remove skills from loadout */\n removeSkills(skillIds: string[]): void;\n \n /** Approve pending skill requests from agent */\n approvePending(skillIds: string[]): void;\n \n /** Deny pending skill requests */\n denyPending(skillIds: string[]): void;\n \n /** Get current state */\n getState(): LoadoutState;\n\n // =========================================================================\n // Agent API (exposed via MCP tools)\n // =========================================================================\n\n /** Agent requests to change loadout */\n async agentSetLoadout(criteria: LoadoutCriteria): Promise<LoadoutState | 'denied'>;\n \n /** Agent requests additional skills */\n async agentRequestSkills(skillIds: string[]): Promise<{ added: string[]; pending: string[] }>;\n \n /** Agent searches for skills by query */\n async agentSearchSkills(query: string, limit?: number): Promise<SkillSummary[]>;\n \n /** Agent expands a skill to see full content */\n async agentExpandSkill(skillId: string): Promise<Skill | null>;\n \n /** Agent collapses a skill back to summary */\n agentCollapseSkill(skillId: string): void;\n \n /** Agent lists current loadout */\n agentListLoadout(): LoadoutView;\n \n /** Agent switches to a profile */\n async agentSwitchProfile(profileName: string): Promise<LoadoutState | 'denied'>;\n\n // =========================================================================\n // Rendering\n // =========================================================================\n\n /** Render current state for system prompt (OpenSkills-compatible XML) */\n renderSystemPrompt(): string;\n \n /** Get MCP tool definitions for current loadout */\n getMcpTools(): ToolDefinition[];\n \n /** Render a single skill's full content */\n renderSkillContent(skillId: string): string;\n\n // =========================================================================\n // Events\n // =========================================================================\n\n on(event: 'loadout:changed' | 'skill:expanded' | 'skill:collapsed' | 'pending:added', \n handler: (data: any) => void): void;\n}\n\ninterface LoadoutView {\n available: SkillSummary[];\n pending: string[];\n profiles: string[];\n}\n\ninterface SkillSummary {\n id: string;\n name: string;\n description: string;\n expanded: boolean;\n tags: string[];\n}\n```\n\n### 3. ViewRenderer (`src/serving/view-renderer.ts`)\n\nRenders loadout state for different consumers:\n\n```typescript\nclass ViewRenderer {\n /**\n * Render as OpenSkills-compatible XML for system prompt\n */\n renderXml(state: LoadoutState): string;\n \n /**\n * Render as Markdown (for debugging/display)\n */\n renderMarkdown(state: LoadoutState): string;\n \n /**\n * Render skill in SKILL.md format\n */\n renderSkillMd(skill: Skill): string;\n \n /**\n * Estimate token count for current state\n */\n estimateTokens(state: LoadoutState): number;\n}\n```\n\nExample XML output (OpenSkills-compatible):\n\n```xml\n<skills_system>\n<usage>\nSkills in your current loadout. Use skill_expand to see full content.\nUse loadout_search to find additional skills. Use loadout_add to request them.\n</usage>\n\n<available_skills>\n<skill id=\"tdd-workflow\" state=\"expanded\">\n <name>TDD Workflow</name>\n <description>Test-driven development patterns</description>\n <content>\n ## Problem\n Writing tests after code leads to incomplete coverage...\n \n ## Solution\n 1. Write failing test first\n 2. Implement minimal code to pass\n ...\n </content>\n</skill>\n\n<skill id=\"security-review\" state=\"available\">\n <name>Security Review</name>\n <description>Security vulnerability detection and remediation</description>\n</skill>\n</available_skills>\n\n<pending_requests>\n <skill id=\"oauth-patterns\">Awaiting approval</skill>\n</pending_requests>\n</skills_system>\n```\n\n### 4. MCP Server (`src/mcp/`)\n\nMCP server with loadout management tools:\n\n#### Loadout Management Tools\n\n| Tool | Description |\n|------|-------------|\n| `loadout_list` | List available skills with expansion state |\n| `loadout_search` | Search for skills to add (semantic) |\n| `loadout_add` | Request skills to be added |\n| `loadout_remove` | Remove skills from loadout |\n| `loadout_profile` | Switch to a named profile |\n| `loadout_set` | Set loadout from criteria (if permitted) |\n\n#### Skill Tools\n\n| Tool | Description |\n|------|-------------|\n| `skill_expand` | Expand a skill to see full content |\n| `skill_collapse` | Collapse back to summary |\n| `skill_use` | Apply/invoke an expanded skill |\n\n#### Dynamic Tools\n\nWhen a skill is expanded, it becomes a callable tool: `skill_{id}`\n\nUsing a skill tool:\n1. Triggers `autoExpandOnUse` for related skills\n2. Records usage for metrics\n3. Returns skill guidance for the agent to follow\n\n#### Tool Definitions\n\n```typescript\n// src/mcp/tools/loadout-tools.ts\n\nconst loadoutListTool: ToolDefinition = {\n name: 'loadout_list',\n description: 'List skills in your current loadout with their expansion state',\n inputSchema: {\n type: 'object',\n properties: {\n filter: { \n type: 'string', \n description: 'Optional: filter by \"expanded\", \"available\", or \"pending\"' \n }\n }\n }\n};\n\nconst loadoutSearchTool: ToolDefinition = {\n name: 'loadout_search',\n description: 'Search for skills that could help with your current task',\n inputSchema: {\n type: 'object',\n properties: {\n query: { type: 'string', description: 'What you need help with' },\n limit: { type: 'number', description: 'Max results (default: 5)' }\n },\n required: ['query']\n }\n};\n\nconst loadoutAddTool: ToolDefinition = {\n name: 'loadout_add',\n description: 'Request skills to be added to your loadout',\n inputSchema: {\n type: 'object',\n properties: {\n skill_ids: { \n type: 'array', \n items: { type: 'string' },\n description: 'Skill IDs to add'\n }\n },\n required: ['skill_ids']\n }\n};\n\nconst skillExpandTool: ToolDefinition = {\n name: 'skill_expand',\n description: 'Expand a skill to see its full content and guidance',\n inputSchema: {\n type: 'object',\n properties: {\n skill_id: { type: 'string', description: 'ID of skill to expand' }\n },\n required: ['skill_id']\n }\n};\n```\n\n## File Structure\n\n```\nsrc/\n├── serving/ # NEW\n│ ├── index.ts # Public exports\n│ ├── types.ts # LoadoutCriteria, LoadoutState, etc.\n│ ├── graph-server.ts # Main orchestrator\n│ ├── loadout-compiler.ts # Selection logic\n│ ├── view-renderer.ts # XML/Markdown rendering\n│ ├── project-detector.ts # Auto-detect project context\n│ └── profiles/ # Built-in loadout profiles\n│ ├── index.ts\n│ ├── code-review.ts\n│ ├── implementation.ts\n│ ├── debugging.ts\n│ └── security.ts\n│\n├── mcp/ # NEW\n│ ├── index.ts # Public exports\n│ ├── server.ts # MCP server implementation\n│ ├── handlers.ts # Tool execution handlers\n│ └── tools/\n│ ├── loadout-tools.ts # Loadout management tools\n│ └── skill-tools.ts # Skill expand/collapse/use\n│\n├── types.ts # EXTEND with Skill.serving\n└── matching/ # EXISTING (used by compiler)\n```\n\n## Example Flows\n\n### Flow 1: Orchestrator Pre-configures Agent\n\n```typescript\n// Orchestrator spawning an agent for PR review\nconst server = new SkillGraphServer({\n skillBank,\n agentCanModify: true,\n requireApproval: false,\n});\n\n// Set loadout based on task\nawait server.setLoadoutForTask(\"Review PR #123 for security issues and code quality\");\n\n// Get what agent needs\nconst systemPrompt = server.renderSystemPrompt();\nconst tools = server.getMcpTools();\n\n// Spawn agent\nspawnAgent({ systemPrompt, tools });\n```\n\n### Flow 2: Agent Discovers and Adds Skills Mid-Session\n\n```\nUser: Review this code for SQL injection vulnerabilities.\n\nAgent: I should check if there are relevant security skills.\n\n→ loadout_search({ query: \"SQL injection prevention\" })\n← [{ id: \"sql-security\", name: \"SQL Security Patterns\", description: \"...\" }]\n\nAgent: Found one. Let me add it to my loadout.\n\n→ loadout_add({ skill_ids: [\"sql-security\"] })\n← { added: [\"sql-security\"], pending: [] }\n\nAgent: Now let me see the full guidance.\n\n→ skill_expand({ skill_id: \"sql-security\" })\n← { id: \"sql-security\", content: \"## Problem\\nSQL injection occurs when...\" }\n\nAgent: [Applies the skill's guidance to review the code]\n```\n\n### Flow 3: Approval Flow (Controlled Environment)\n\n```typescript\n// Orchestrator requires approval for sensitive skills\nconst server = new SkillGraphServer({\n skillBank,\n agentCanModify: true,\n requireApproval: true, // Agent must request, human approves\n});\n\n// Agent requests a skill...\n// Tool: loadout_add({ skill_ids: [\"production-deploy\"] })\n// Response: { added: [], pending: [\"production-deploy\"] }\n\n// Agent sees: \"Skill requested, awaiting approval.\"\n\n// Human/orchestrator approves\nserver.approvePending([\"production-deploy\"]);\n\n// Agent can now expand and use it\n```\n\n### Flow 4: Profile Switching\n\n```typescript\n// Define profiles\nconst profiles = {\n \"code-review\": {\n tags: [\"review\", \"quality\", \"security\"],\n maxSkills: 5,\n },\n \"implementation\": {\n rootSkills: [\"tdd-workflow\", \"coding-standards\"],\n includeDependencies: true,\n maxSkills: 8,\n },\n \"debugging\": {\n taskDescription: \"diagnose and fix issues\",\n tags: [\"debugging\", \"logging\"],\n },\n};\n\nconst server = new SkillGraphServer({ skillBank, profiles });\n\n// Agent can switch profiles mid-session\n// Tool: loadout_profile({ name: \"debugging\" })\n// → Loadout changes to debugging-focused skills\n```\n\n### Flow 5: Project-Based Auto-Configuration\n\n```typescript\n// Analyze project and configure loadout automatically\nawait server.setLoadoutForProject(\"/path/to/project\");\n\n// Detects:\n// - package.json → Node.js\n// - tsconfig.json → TypeScript \n// - prisma/ → Prisma ORM\n// - .github/workflows/ → CI/CD\n\n// Selects relevant skills:\n// → typescript-patterns, nodejs-backend, prisma-patterns, github-actions\n```\n\n## Configuration Options\n\n### GraphServerConfig\n\n```typescript\ninterface GraphServerConfig {\n // Core\n skillBank: SkillBank;\n initialLoadout?: LoadoutCriteria;\n \n // Agent permissions\n agentCanModify?: boolean; // Default: true\n agentCanSetLoadout?: boolean; // Default: false (can search/add, not replace)\n agentCanSwitchProfile?: boolean; // Default: true\n requireApproval?: boolean; // Default: false\n \n // Expansion behavior\n autoExpandOnUse?: boolean; // Default: true\n autoExpandRelated?: boolean; // Default: true\n maxExpanded?: number; // Default: 5\n evictionStrategy?: 'lru' | 'priority' | 'manual';\n \n // Profiles\n profiles?: Record<string, LoadoutCriteria>;\n defaultProfile?: string;\n \n // Persistence\n persistState?: boolean; // Default: false\n stateStorage?: StateStorage; // Custom persistence adapter\n \n // Rendering\n outputFormat?: 'xml' | 'markdown'; // Default: 'xml'\n includeTokenEstimates?: boolean; // Default: false\n}\n```\n\n## Built-in Profiles\n\n### code-review\n```typescript\n{\n tags: [\"review\", \"quality\", \"security\"],\n taskDescription: \"review code for quality, security, and best practices\",\n maxSkills: 6,\n priorityOrder: 'relevance'\n}\n```\n\n### implementation \n```typescript\n{\n rootSkills: [\"tdd-workflow\", \"coding-standards\"],\n includeDependencies: true,\n tags: [\"development\", \"testing\"],\n maxSkills: 8\n}\n```\n\n### debugging\n```typescript\n{\n taskDescription: \"diagnose and fix bugs, analyze errors\",\n tags: [\"debugging\", \"logging\", \"error-handling\"],\n maxSkills: 5\n}\n```\n\n### security\n```typescript\n{\n tags: [\"security\"],\n tagsAll: [\"security\"],\n taskDescription: \"security review, vulnerability detection\",\n maxSkills: 8,\n minSuccessRate: 0.7\n}\n```\n\n## Success Criteria\n\n- [ ] LoadoutCompiler supports all selection strategies (explicit, tag, semantic, project, relationship)\n- [ ] SkillGraphServer provides both orchestrator API and agent API\n- [ ] Agent can search, add, expand, collapse skills mid-session\n- [ ] Approval flow works when requireApproval=true\n- [ ] Profile switching works mid-session\n- [ ] MCP tools update dynamically (tools/list_changed)\n- [ ] System prompt renders OpenSkills-compatible XML\n- [ ] maxExpanded limit enforced with configurable eviction\n- [ ] Project detection infers relevant skills from codebase\n- [ ] Token estimates available for context budgeting\n\n## Open Questions (Resolved)\n\n1. ~~State persistence~~ → Configurable via `persistState`, default false\n2. ~~Auto-collapse~~ → Use `evictionStrategy` when `maxExpanded` reached\n3. ~~Context budget~~ → `maxExpanded` + `maxTokens` in criteria + token estimates\n\n## Future Enhancements\n\n- **Usage-based learning**: Track which skills are used together, suggest bundles\n- **Adaptive profiles**: Profiles that evolve based on usage patterns\n- **Cross-agent sharing**: Share loadout state between related agents\n- **Skill recommendations**: Proactively suggest skills based on errors/context\n\n## Related\n\n- Existing: `SkillBank`, `SemanticMatcher`, `DependencyGraph`\n- Reference: [OpenSkills](https://github.com/numman-ali/openskills) patterns\n- Integration: `@modelcontextprotocol/sdk` for MCP server\n","priority":1,"archived":0,"archived_at":null,"created_at":"2026-01-29 23:37:43","updated_at":"2026-02-03 20:50:05","parent_id":null,"parent_uuid":null,"relationships":[],"tags":["agent-control","architecture","loadout","mcp","serving"]}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
# CLAUDE.md
|
|
2
|
+
|
|
3
|
+
This file provides guidance for Claude Code when working with this repository.
|
|
4
|
+
|
|
5
|
+
## Project Overview
|
|
6
|
+
|
|
7
|
+
**skill-tree** is a TypeScript library for managing agent skill versions and evolution. It extracts, iterates, and adapts skills from agent trajectories, enabling AI agents to build and maintain reusable skill libraries.
|
|
8
|
+
|
|
9
|
+
## Key Architecture
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
src/
|
|
13
|
+
├── index.ts # Main exports
|
|
14
|
+
├── skill-bank.ts # Main orchestrator (SkillBank class)
|
|
15
|
+
├── types.ts # Core type definitions
|
|
16
|
+
├── semver.ts # Semantic versioning utilities
|
|
17
|
+
├── adapters/ # Session format adapters (Claude Code, OpenAI, etc.)
|
|
18
|
+
├── extraction/ # Manual and automatic skill extraction
|
|
19
|
+
├── storage/ # Storage adapters (memory, filesystem, SQLite)
|
|
20
|
+
├── matching/ # Semantic skill matching with embeddings
|
|
21
|
+
├── versioning/ # Lineage tracking and version management
|
|
22
|
+
├── learning/ # Learning providers for skill extraction
|
|
23
|
+
│ ├── types.ts # LearningProvider interface, candidate types
|
|
24
|
+
│ └── providers/ # Provider implementations
|
|
25
|
+
│ ├── naive.ts # Simple heuristic-based extraction
|
|
26
|
+
│ └── cognitive-core.ts # Advanced batch learning via cognitive-core
|
|
27
|
+
├── validation/ # Skill validation and testing
|
|
28
|
+
├── metrics/ # Usage tracking and analytics
|
|
29
|
+
├── hooks/ # Event hooks and activation system
|
|
30
|
+
├── agents/ # AGENTS.md generation and parsing
|
|
31
|
+
├── composition/ # Skill composition and merging
|
|
32
|
+
└── cli/ # Command-line interface
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## Core Concepts
|
|
36
|
+
|
|
37
|
+
### Skill
|
|
38
|
+
A reusable piece of knowledge with:
|
|
39
|
+
- `problem`: What it solves
|
|
40
|
+
- `triggerConditions`: When to apply
|
|
41
|
+
- `solution`: Step-by-step guidance
|
|
42
|
+
- `verification`: How to verify success
|
|
43
|
+
- Semantic versioning and lineage tracking
|
|
44
|
+
|
|
45
|
+
### Trajectory
|
|
46
|
+
An agent session parsed into structured turns (user, assistant, tool interactions) with metadata and outcome.
|
|
47
|
+
|
|
48
|
+
### LearningProvider
|
|
49
|
+
Interface for extracting candidates from trajectories. Two implementations:
|
|
50
|
+
- `NaiveLearningProvider`: Simple, synchronous extraction
|
|
51
|
+
- `CognitiveCoreProvider`: Advanced batch learning with dependency injection
|
|
52
|
+
|
|
53
|
+
### LearningCandidate
|
|
54
|
+
Extracted knowledge before promotion to a versioned skill. Has kinds: `skill`, `strategy`, `pattern`, `error-fix`.
|
|
55
|
+
|
|
56
|
+
## Development Commands
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
# Build
|
|
60
|
+
npm run build
|
|
61
|
+
|
|
62
|
+
# Run all tests
|
|
63
|
+
npm test
|
|
64
|
+
|
|
65
|
+
# Run specific test file
|
|
66
|
+
npx tsx test/learning.test.ts
|
|
67
|
+
|
|
68
|
+
# Type check
|
|
69
|
+
npx tsc --noEmit
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
## Testing Patterns
|
|
73
|
+
|
|
74
|
+
Tests use a simple test harness in `test/run-all.ts`. Each test file exports tests via `describe()` and `it()` functions.
|
|
75
|
+
|
|
76
|
+
```typescript
|
|
77
|
+
describe('My Feature', () => {
|
|
78
|
+
it('does something', () => {
|
|
79
|
+
// assertions
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
Mock factories are used for dependency injection testing, especially for `CognitiveCoreProvider`:
|
|
85
|
+
|
|
86
|
+
```typescript
|
|
87
|
+
function createMockCognitiveCoreFactory(): CognitiveCoreFactory & MockInspection {
|
|
88
|
+
// Returns mock implementations with inspection helpers
|
|
89
|
+
}
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
## CognitiveCoreProvider
|
|
93
|
+
|
|
94
|
+
This provider integrates with [cognitive-core](./references/cognitive-core/) (Atlas) for advanced learning. Key design decisions:
|
|
95
|
+
|
|
96
|
+
1. **Dependency Injection**: Uses `CognitiveCoreFactory` interface instead of direct imports to avoid `tsconfig.json` `rootDir` issues and maintain clean separation.
|
|
97
|
+
|
|
98
|
+
2. **Batch Accumulation**: Accumulates trajectories until `minTrajectories` threshold, then runs batch extraction for cross-trajectory pattern detection.
|
|
99
|
+
|
|
100
|
+
3. **Trajectory Conversion**: Converts skill-tree `Turn[]` to cognitive-core's ReAct `Step[]` format when `convertToReAct: true`.
|
|
101
|
+
|
|
102
|
+
4. **Kind Inference**: Automatically determines `LearningKind` from playbook content (error triggers → `error-fix`, strategy keywords → `strategy`, etc.).
|
|
103
|
+
|
|
104
|
+
5. **Outcome Feedback**: Records success/failure to refine playbook confidence over time.
|
|
105
|
+
|
|
106
|
+
See `src/learning/providers/README.md` for detailed documentation.
|
|
107
|
+
|
|
108
|
+
## Important Files
|
|
109
|
+
|
|
110
|
+
- `src/skill-bank.ts`: Main API entry point
|
|
111
|
+
- `src/learning/types.ts`: Learning interface definitions
|
|
112
|
+
- `src/learning/providers/cognitive-core.ts`: Cognitive-core adapter
|
|
113
|
+
- `test/learning.test.ts`: Comprehensive learning provider tests
|
|
114
|
+
|
|
115
|
+
## Common Tasks
|
|
116
|
+
|
|
117
|
+
### Adding a new learning provider
|
|
118
|
+
|
|
119
|
+
1. Implement `LearningProvider` interface in `src/learning/providers/`
|
|
120
|
+
2. Export from `src/learning/providers/index.ts`
|
|
121
|
+
3. Re-export from `src/learning/index.ts`
|
|
122
|
+
4. Add tests in `test/learning.test.ts`
|
|
123
|
+
|
|
124
|
+
### Extending CognitiveCoreProvider
|
|
125
|
+
|
|
126
|
+
The provider uses interface types (`CCPlaybook`, `CCTrajectory`, etc.) that mirror cognitive-core. If cognitive-core adds new fields, update the interfaces in `cognitive-core.ts`.
|
|
127
|
+
|
|
128
|
+
### Running a subset of tests
|
|
129
|
+
|
|
130
|
+
```bash
|
|
131
|
+
# Run only learning tests
|
|
132
|
+
npx tsx test/learning.test.ts
|
|
133
|
+
|
|
134
|
+
# Run with verbose output
|
|
135
|
+
DEBUG=1 npx tsx test/learning.test.ts
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
## Code Style
|
|
139
|
+
|
|
140
|
+
- TypeScript with strict mode
|
|
141
|
+
- ES modules (`.js` extensions in imports)
|
|
142
|
+
- JSDoc comments for public APIs
|
|
143
|
+
- Interface types preferred over type aliases for extensibility
|
|
144
|
+
- Dependency injection for external integrations
|
|
145
|
+
|
|
146
|
+
## References
|
|
147
|
+
|
|
148
|
+
- [cognitive-core (Atlas)](./references/cognitive-core/README.md): External learning engine
|
|
149
|
+
- [OpenSkills](https://github.com/numman-ali/openskills): Skill format inspiration
|
|
150
|
+
- [Claudeception](https://github.com/blader/Claudeception): Quality gates concept
|
|
@@ -0,0 +1,324 @@
|
|
|
1
|
+
# skill-tree
|
|
2
|
+
|
|
3
|
+
A TypeScript library for managing agent skill versions and evolution. Extract, iterate, and adapt skills from agent trajectories.
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
skill-tree helps you build and maintain a library of reusable skills for AI agents by:
|
|
8
|
+
|
|
9
|
+
- **Extracting skills** from agent sessions/trajectories (manual or automatic)
|
|
10
|
+
- **Storing skills** in a versioned, searchable format (OpenSkills-compatible)
|
|
11
|
+
- **Evolving skills** through versioning, forking, and merging
|
|
12
|
+
- **Quality gates** to ensure extracted skills are reusable and non-trivial
|
|
13
|
+
|
|
14
|
+
Inspired by research on skill libraries ([arXiv:2512.17102](https://arxiv.org/abs/2512.17102)), [Claudeception](https://github.com/blader/Claudeception), and [OpenSkills](https://github.com/numman-ali/openskills).
|
|
15
|
+
|
|
16
|
+
## Installation
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
npm install skill-tree
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## Quick Start
|
|
23
|
+
|
|
24
|
+
```typescript
|
|
25
|
+
import { createSkillBank } from 'skill-tree';
|
|
26
|
+
|
|
27
|
+
// Create a skill bank with filesystem storage
|
|
28
|
+
const skillBank = createSkillBank({
|
|
29
|
+
storage: {
|
|
30
|
+
type: 'filesystem',
|
|
31
|
+
basePath: './skills',
|
|
32
|
+
openSkillsCompatible: true,
|
|
33
|
+
},
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
await skillBank.initialize();
|
|
37
|
+
|
|
38
|
+
// Parse a Claude Code session
|
|
39
|
+
const trajectory = await skillBank.parseSession(sessionContent);
|
|
40
|
+
|
|
41
|
+
// Extract a skill manually
|
|
42
|
+
const result = await skillBank.extractManual(trajectory, {
|
|
43
|
+
suggestedName: 'typescript-import-fix',
|
|
44
|
+
description: 'Fix TypeScript ES module import errors',
|
|
45
|
+
tags: ['typescript', 'imports'],
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
if (result.success) {
|
|
49
|
+
console.log('Extracted skill:', result.skill.name);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// Search for skills
|
|
53
|
+
const skills = await skillBank.searchSkills('typescript error');
|
|
54
|
+
|
|
55
|
+
// Create a new version
|
|
56
|
+
const updated = await skillBank.createVersion('typescript-import-fix', {
|
|
57
|
+
solution: 'Updated solution...',
|
|
58
|
+
}, { bumpType: 'minor' });
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## Core Concepts
|
|
62
|
+
|
|
63
|
+
### Skills
|
|
64
|
+
|
|
65
|
+
A skill represents a reusable piece of knowledge extracted from agent interactions:
|
|
66
|
+
|
|
67
|
+
```typescript
|
|
68
|
+
interface Skill {
|
|
69
|
+
id: string; // Unique identifier
|
|
70
|
+
name: string; // Human-readable name
|
|
71
|
+
version: string; // Semantic version
|
|
72
|
+
description: string; // For semantic matching
|
|
73
|
+
problem: string; // What problem this solves
|
|
74
|
+
triggerConditions: TriggerCondition[]; // When to apply
|
|
75
|
+
solution: string; // Step-by-step solution
|
|
76
|
+
verification: string; // How to verify it worked
|
|
77
|
+
examples: SkillExample[]; // Usage examples
|
|
78
|
+
// ... metadata, metrics, lineage
|
|
79
|
+
}
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### Trajectories
|
|
83
|
+
|
|
84
|
+
Agent sessions are parsed into trajectories:
|
|
85
|
+
|
|
86
|
+
```typescript
|
|
87
|
+
interface Trajectory {
|
|
88
|
+
sessionId: string;
|
|
89
|
+
turns: Turn[]; // User/assistant/tool interactions
|
|
90
|
+
metadata: TrajectoryMetadata;
|
|
91
|
+
outcome?: TrajectoryOutcome;
|
|
92
|
+
}
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### Quality Gates
|
|
96
|
+
|
|
97
|
+
Extraction includes quality gates (inspired by Claudeception) to ensure skills are:
|
|
98
|
+
|
|
99
|
+
- **Reusable**: Applicable across multiple future tasks
|
|
100
|
+
- **Non-trivial**: Involves discovery beyond documentation lookup
|
|
101
|
+
- **Specific**: Has clear trigger conditions
|
|
102
|
+
- **Verified**: Solution demonstrably works
|
|
103
|
+
|
|
104
|
+
## Features
|
|
105
|
+
|
|
106
|
+
### Session Adapters
|
|
107
|
+
|
|
108
|
+
Parse different agent session formats:
|
|
109
|
+
|
|
110
|
+
```typescript
|
|
111
|
+
// Built-in: Claude Code JSONL
|
|
112
|
+
const trajectory = await skillBank.parseSession(jsonlContent);
|
|
113
|
+
|
|
114
|
+
// Register custom adapters
|
|
115
|
+
skillBank.registerAdapter(myCustomAdapter);
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
### Extraction Modes
|
|
119
|
+
|
|
120
|
+
**Manual extraction** with user guidance:
|
|
121
|
+
|
|
122
|
+
```typescript
|
|
123
|
+
const result = await skillBank.extractManual(trajectory, {
|
|
124
|
+
turnRange: [5, 15], // Extract specific turns
|
|
125
|
+
suggestedName: 'my-skill',
|
|
126
|
+
tags: ['debugging'],
|
|
127
|
+
});
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
**Automatic extraction** using LLM:
|
|
131
|
+
|
|
132
|
+
```typescript
|
|
133
|
+
skillBank.setLLMProvider(myLLMProvider);
|
|
134
|
+
|
|
135
|
+
const results = await skillBank.extractAutomatic(trajectory, {
|
|
136
|
+
minConfidence: 0.7,
|
|
137
|
+
});
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
### Storage
|
|
141
|
+
|
|
142
|
+
**Filesystem storage** (OpenSkills-compatible):
|
|
143
|
+
|
|
144
|
+
```typescript
|
|
145
|
+
const skillBank = createSkillBank({
|
|
146
|
+
storage: {
|
|
147
|
+
type: 'filesystem',
|
|
148
|
+
basePath: '~/.skills',
|
|
149
|
+
openSkillsCompatible: true, // YAML frontmatter + Markdown
|
|
150
|
+
},
|
|
151
|
+
});
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
**Memory storage** (for testing):
|
|
155
|
+
|
|
156
|
+
```typescript
|
|
157
|
+
const skillBank = createSkillBank({
|
|
158
|
+
storage: { type: 'memory' },
|
|
159
|
+
});
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
Skills are stored in the OpenSkills format:
|
|
163
|
+
|
|
164
|
+
```
|
|
165
|
+
skills/
|
|
166
|
+
├── my-skill/
|
|
167
|
+
│ ├── SKILL.md # Skill content (YAML + Markdown)
|
|
168
|
+
│ └── .skilltree.json # Metadata and lineage
|
|
169
|
+
└── .versions/
|
|
170
|
+
└── my-skill/
|
|
171
|
+
├── 1.0.0.json # Version snapshots
|
|
172
|
+
└── 1.1.0.json
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
### Versioning
|
|
176
|
+
|
|
177
|
+
Semantic versioning with full lineage tracking:
|
|
178
|
+
|
|
179
|
+
```typescript
|
|
180
|
+
// Create new version
|
|
181
|
+
const v2 = await skillBank.createVersion('my-skill', updates, {
|
|
182
|
+
bumpType: 'minor',
|
|
183
|
+
changelog: 'Added alternative solution',
|
|
184
|
+
});
|
|
185
|
+
|
|
186
|
+
// Get version history
|
|
187
|
+
const history = await skillBank.getVersionHistory('my-skill');
|
|
188
|
+
|
|
189
|
+
// Rollback to previous version
|
|
190
|
+
const restored = await skillBank.rollbackSkill('my-skill', '1.0.0');
|
|
191
|
+
|
|
192
|
+
// Compare versions
|
|
193
|
+
const diff = await skillBank.compareVersions('my-skill', '1.0.0', '2.0.0');
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
### Skill Evolution
|
|
197
|
+
|
|
198
|
+
Fork and merge skills:
|
|
199
|
+
|
|
200
|
+
```typescript
|
|
201
|
+
// Fork for a specialized use case
|
|
202
|
+
const forked = await skillBank.forkSkill('my-skill', {
|
|
203
|
+
newId: 'my-skill-react',
|
|
204
|
+
newName: 'My Skill (React variant)',
|
|
205
|
+
reason: 'Specialized for React projects',
|
|
206
|
+
});
|
|
207
|
+
|
|
208
|
+
// Merge improvements back
|
|
209
|
+
const merged = await skillBank.lineageTracker.mergeSkill(
|
|
210
|
+
'my-skill',
|
|
211
|
+
'my-skill-react',
|
|
212
|
+
{ fields: ['solution', 'examples'] }
|
|
213
|
+
);
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
### Events
|
|
217
|
+
|
|
218
|
+
Subscribe to skill bank events:
|
|
219
|
+
|
|
220
|
+
```typescript
|
|
221
|
+
const unsubscribe = skillBank.on((event) => {
|
|
222
|
+
switch (event.type) {
|
|
223
|
+
case 'skill:created':
|
|
224
|
+
console.log('New skill:', event.skill.name);
|
|
225
|
+
break;
|
|
226
|
+
case 'extraction:completed':
|
|
227
|
+
console.log('Extraction confidence:', event.result.confidence);
|
|
228
|
+
break;
|
|
229
|
+
}
|
|
230
|
+
});
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
## API Reference
|
|
234
|
+
|
|
235
|
+
### SkillBank
|
|
236
|
+
|
|
237
|
+
Main orchestrator class.
|
|
238
|
+
|
|
239
|
+
| Method | Description |
|
|
240
|
+
|--------|-------------|
|
|
241
|
+
| `initialize()` | Initialize storage (required before use) |
|
|
242
|
+
| `parseSession(content, adapter?)` | Parse session into trajectory |
|
|
243
|
+
| `extractManual(trajectory, options?)` | Extract skill with guidance |
|
|
244
|
+
| `extractAutomatic(trajectory, options?)` | Extract skills using LLM |
|
|
245
|
+
| `getSkill(id, version?)` | Get skill by ID |
|
|
246
|
+
| `listSkills(filter?)` | List skills with optional filter |
|
|
247
|
+
| `searchSkills(query)` | Search skills by text |
|
|
248
|
+
| `saveSkill(skill)` | Save or update a skill |
|
|
249
|
+
| `deleteSkill(id, version?)` | Delete a skill |
|
|
250
|
+
| `createVersion(id, updates, options?)` | Create new version |
|
|
251
|
+
| `forkSkill(id, options)` | Fork a skill |
|
|
252
|
+
| `getVersionHistory(id)` | Get version history |
|
|
253
|
+
| `rollbackSkill(id, version)` | Rollback to version |
|
|
254
|
+
| `on(handler)` | Subscribe to events |
|
|
255
|
+
|
|
256
|
+
### Versioning Utilities
|
|
257
|
+
|
|
258
|
+
```typescript
|
|
259
|
+
import {
|
|
260
|
+
parseVersion,
|
|
261
|
+
compareVersions,
|
|
262
|
+
bumpVersion,
|
|
263
|
+
satisfiesRange,
|
|
264
|
+
} from 'skill-tree';
|
|
265
|
+
|
|
266
|
+
bumpVersion('1.2.3', 'minor'); // '1.3.0'
|
|
267
|
+
satisfiesRange('1.5.0', '^1.2.0'); // true
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
## Skill Format
|
|
271
|
+
|
|
272
|
+
Skills use YAML frontmatter + Markdown (OpenSkills-compatible):
|
|
273
|
+
|
|
274
|
+
```markdown
|
|
275
|
+
---
|
|
276
|
+
name: typescript-esm-import-fix
|
|
277
|
+
description: |
|
|
278
|
+
Fix TypeScript ES module import errors by adding .js extension
|
|
279
|
+
version: 1.0.0
|
|
280
|
+
author: extracted
|
|
281
|
+
status: active
|
|
282
|
+
date: 2024-01-15
|
|
283
|
+
tags:
|
|
284
|
+
- typescript
|
|
285
|
+
- esm
|
|
286
|
+
- imports
|
|
287
|
+
---
|
|
288
|
+
|
|
289
|
+
## Problem
|
|
290
|
+
|
|
291
|
+
TypeScript with ES modules requires explicit .js extensions in imports.
|
|
292
|
+
|
|
293
|
+
## Trigger Conditions
|
|
294
|
+
|
|
295
|
+
- **error**: `Cannot find module './utils'`
|
|
296
|
+
- **pattern**: `import .* from '\./[^']+(?<!\.js)'`
|
|
297
|
+
|
|
298
|
+
## Solution
|
|
299
|
+
|
|
300
|
+
1. Add `.js` extension to relative imports
|
|
301
|
+
2. Even for `.ts` files, use `.js` in the import path
|
|
302
|
+
|
|
303
|
+
## Verification
|
|
304
|
+
|
|
305
|
+
Run `tsc` and verify no module resolution errors.
|
|
306
|
+
|
|
307
|
+
## Examples
|
|
308
|
+
|
|
309
|
+
### Basic import fix
|
|
310
|
+
|
|
311
|
+
**Before:**
|
|
312
|
+
```typescript
|
|
313
|
+
import { helper } from './utils'
|
|
314
|
+
```
|
|
315
|
+
|
|
316
|
+
**After:**
|
|
317
|
+
```typescript
|
|
318
|
+
import { helper } from './utils.js'
|
|
319
|
+
```
|
|
320
|
+
```
|
|
321
|
+
|
|
322
|
+
## License
|
|
323
|
+
|
|
324
|
+
MIT
|