cognitive-core 0.1.0 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/settings.json +88 -0
- package/.claude/settings.local.json +11 -0
- package/.entire/settings.json +4 -0
- package/README.md +524 -254
- package/dist/atlas.d.ts +144 -6
- package/dist/atlas.d.ts.map +1 -1
- package/dist/atlas.js +339 -10
- package/dist/atlas.js.map +1 -1
- package/dist/embeddings/provider.d.ts.map +1 -1
- package/dist/embeddings/provider.js +6 -3
- package/dist/embeddings/provider.js.map +1 -1
- package/dist/index.d.ts +8 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +37 -6
- package/dist/index.js.map +1 -1
- package/dist/learning/index.d.ts +5 -1
- package/dist/learning/index.d.ts.map +1 -1
- package/dist/learning/index.js +8 -2
- package/dist/learning/index.js.map +1 -1
- package/dist/learning/knowledge-extractor.d.ts +56 -0
- package/dist/learning/knowledge-extractor.d.ts.map +1 -0
- package/dist/learning/knowledge-extractor.js +336 -0
- package/dist/learning/knowledge-extractor.js.map +1 -0
- package/dist/learning/meta-learner.d.ts +7 -0
- package/dist/learning/meta-learner.d.ts.map +1 -1
- package/dist/learning/meta-learner.js +43 -0
- package/dist/learning/meta-learner.js.map +1 -1
- package/dist/learning/pipeline.d.ts +24 -0
- package/dist/learning/pipeline.d.ts.map +1 -1
- package/dist/learning/pipeline.js +70 -4
- package/dist/learning/pipeline.js.map +1 -1
- package/dist/learning/team-ingester.d.ts +152 -0
- package/dist/learning/team-ingester.d.ts.map +1 -0
- package/dist/learning/team-ingester.js +333 -0
- package/dist/learning/team-ingester.js.map +1 -0
- package/dist/learning/team-meta-learner.d.ts +50 -0
- package/dist/learning/team-meta-learner.d.ts.map +1 -0
- package/dist/learning/team-meta-learner.js +417 -0
- package/dist/learning/team-meta-learner.js.map +1 -0
- package/dist/learning/team-pipeline.d.ts +76 -0
- package/dist/learning/team-pipeline.d.ts.map +1 -0
- package/dist/learning/team-pipeline.js +266 -0
- package/dist/learning/team-pipeline.js.map +1 -0
- package/dist/learning/trajectory-sources/dataclaw.d.ts +41 -0
- package/dist/learning/trajectory-sources/dataclaw.d.ts.map +1 -0
- package/dist/learning/trajectory-sources/dataclaw.js +330 -0
- package/dist/learning/trajectory-sources/dataclaw.js.map +1 -0
- package/dist/learning/trajectory-sources/entire.d.ts +28 -0
- package/dist/learning/trajectory-sources/entire.d.ts.map +1 -0
- package/dist/learning/trajectory-sources/entire.js +182 -0
- package/dist/learning/trajectory-sources/entire.js.map +1 -0
- package/dist/learning/trajectory-sources/file.d.ts +23 -0
- package/dist/learning/trajectory-sources/file.d.ts.map +1 -0
- package/dist/learning/trajectory-sources/file.js +101 -0
- package/dist/learning/trajectory-sources/file.js.map +1 -0
- package/dist/learning/trajectory-sources/huggingface.d.ts +36 -0
- package/dist/learning/trajectory-sources/huggingface.d.ts.map +1 -0
- package/dist/learning/trajectory-sources/huggingface.js +157 -0
- package/dist/learning/trajectory-sources/huggingface.js.map +1 -0
- package/dist/learning/trajectory-sources/in-memory.d.ts +21 -0
- package/dist/learning/trajectory-sources/in-memory.d.ts.map +1 -0
- package/dist/learning/trajectory-sources/in-memory.js +43 -0
- package/dist/learning/trajectory-sources/in-memory.js.map +1 -0
- package/dist/learning/trajectory-sources/index.d.ts +7 -0
- package/dist/learning/trajectory-sources/index.d.ts.map +1 -0
- package/dist/learning/trajectory-sources/index.js +7 -0
- package/dist/learning/trajectory-sources/index.js.map +1 -0
- package/dist/learning/trajectory-sources/pipeline.d.ts +24 -0
- package/dist/learning/trajectory-sources/pipeline.d.ts.map +1 -0
- package/dist/learning/trajectory-sources/pipeline.js +47 -0
- package/dist/learning/trajectory-sources/pipeline.js.map +1 -0
- package/dist/memory/graph-layers/base.d.ts +29 -0
- package/dist/memory/graph-layers/base.d.ts.map +1 -0
- package/dist/memory/graph-layers/base.js +143 -0
- package/dist/memory/graph-layers/base.js.map +1 -0
- package/dist/memory/graph-layers/causal.d.ts +14 -0
- package/dist/memory/graph-layers/causal.d.ts.map +1 -0
- package/dist/memory/graph-layers/causal.js +14 -0
- package/dist/memory/graph-layers/causal.js.map +1 -0
- package/dist/memory/graph-layers/entity.d.ts +14 -0
- package/dist/memory/graph-layers/entity.d.ts.map +1 -0
- package/dist/memory/graph-layers/entity.js +14 -0
- package/dist/memory/graph-layers/entity.js.map +1 -0
- package/dist/memory/graph-layers/index.d.ts +6 -0
- package/dist/memory/graph-layers/index.d.ts.map +1 -0
- package/dist/memory/graph-layers/index.js +6 -0
- package/dist/memory/graph-layers/index.js.map +1 -0
- package/dist/memory/graph-layers/semantic.d.ts +14 -0
- package/dist/memory/graph-layers/semantic.d.ts.map +1 -0
- package/dist/memory/graph-layers/semantic.js +14 -0
- package/dist/memory/graph-layers/semantic.js.map +1 -0
- package/dist/memory/graph-layers/temporal.d.ts +14 -0
- package/dist/memory/graph-layers/temporal.d.ts.map +1 -0
- package/dist/memory/graph-layers/temporal.js +14 -0
- package/dist/memory/graph-layers/temporal.js.map +1 -0
- package/dist/memory/index.d.ts +8 -0
- package/dist/memory/index.d.ts.map +1 -1
- package/dist/memory/index.js +10 -0
- package/dist/memory/index.js.map +1 -1
- package/dist/memory/knowledge-bank.d.ts +220 -0
- package/dist/memory/knowledge-bank.d.ts.map +1 -0
- package/dist/memory/knowledge-bank.js +1003 -0
- package/dist/memory/knowledge-bank.js.map +1 -0
- package/dist/memory/knowledge-defrag.d.ts +49 -0
- package/dist/memory/knowledge-defrag.d.ts.map +1 -0
- package/dist/memory/knowledge-defrag.js +257 -0
- package/dist/memory/knowledge-defrag.js.map +1 -0
- package/dist/memory/knowledge-graph.d.ts +41 -0
- package/dist/memory/knowledge-graph.d.ts.map +1 -0
- package/dist/memory/knowledge-graph.js +273 -0
- package/dist/memory/knowledge-graph.js.map +1 -0
- package/dist/memory/search-provider.d.ts +31 -0
- package/dist/memory/search-provider.d.ts.map +1 -0
- package/dist/memory/search-provider.js +2 -0
- package/dist/memory/search-provider.js.map +1 -0
- package/dist/memory/search-providers/index.d.ts +3 -0
- package/dist/memory/search-providers/index.d.ts.map +1 -0
- package/dist/memory/search-providers/index.js +3 -0
- package/dist/memory/search-providers/index.js.map +1 -0
- package/dist/memory/search-providers/minimem.d.ts +43 -0
- package/dist/memory/search-providers/minimem.d.ts.map +1 -0
- package/dist/memory/search-providers/minimem.js +56 -0
- package/dist/memory/search-providers/minimem.js.map +1 -0
- package/dist/memory/search-providers/text-similarity.d.ts +15 -0
- package/dist/memory/search-providers/text-similarity.d.ts.map +1 -0
- package/dist/memory/search-providers/text-similarity.js +21 -0
- package/dist/memory/search-providers/text-similarity.js.map +1 -0
- package/dist/memory/skill-exporter.d.ts +75 -0
- package/dist/memory/skill-exporter.d.ts.map +1 -0
- package/dist/memory/skill-exporter.js +248 -0
- package/dist/memory/skill-exporter.js.map +1 -0
- package/dist/memory/system.d.ts +15 -3
- package/dist/memory/system.d.ts.map +1 -1
- package/dist/memory/system.js +46 -8
- package/dist/memory/system.js.map +1 -1
- package/dist/memory/team-experience.d.ts +298 -0
- package/dist/memory/team-experience.d.ts.map +1 -0
- package/dist/memory/team-experience.js +355 -0
- package/dist/memory/team-experience.js.map +1 -0
- package/dist/runtime/backends/acp-protocol.d.ts +49 -0
- package/dist/runtime/backends/acp-protocol.d.ts.map +1 -0
- package/dist/runtime/backends/acp-protocol.js +166 -0
- package/dist/runtime/backends/acp-protocol.js.map +1 -0
- package/dist/runtime/backends/acp.d.ts +26 -26
- package/dist/runtime/backends/acp.d.ts.map +1 -1
- package/dist/runtime/backends/acp.js +32 -156
- package/dist/runtime/backends/acp.js.map +1 -1
- package/dist/runtime/backends/index.d.ts +3 -1
- package/dist/runtime/backends/index.d.ts.map +1 -1
- package/dist/runtime/backends/index.js +3 -1
- package/dist/runtime/backends/index.js.map +1 -1
- package/dist/runtime/backends/macro-agent.d.ts +104 -0
- package/dist/runtime/backends/macro-agent.d.ts.map +1 -0
- package/dist/runtime/backends/macro-agent.js +107 -0
- package/dist/runtime/backends/macro-agent.js.map +1 -0
- package/dist/runtime/compute-provider.d.ts +87 -0
- package/dist/runtime/compute-provider.d.ts.map +1 -0
- package/dist/runtime/compute-provider.js +87 -0
- package/dist/runtime/compute-provider.js.map +1 -0
- package/dist/runtime/index.d.ts +3 -2
- package/dist/runtime/index.d.ts.map +1 -1
- package/dist/runtime/index.js +3 -1
- package/dist/runtime/index.js.map +1 -1
- package/dist/runtime/manager.d.ts +37 -4
- package/dist/runtime/manager.d.ts.map +1 -1
- package/dist/runtime/manager.js +139 -20
- package/dist/runtime/manager.js.map +1 -1
- package/dist/runtime/types.d.ts +38 -0
- package/dist/runtime/types.d.ts.map +1 -1
- package/dist/search/evaluator.d.ts +7 -0
- package/dist/search/evaluator.d.ts.map +1 -1
- package/dist/search/evaluator.js +24 -4
- package/dist/search/evaluator.js.map +1 -1
- package/dist/search/index.d.ts +1 -0
- package/dist/search/index.d.ts.map +1 -1
- package/dist/search/index.js +2 -0
- package/dist/search/index.js.map +1 -1
- package/dist/search/refinement-loop.d.ts +17 -0
- package/dist/search/refinement-loop.d.ts.map +1 -1
- package/dist/search/refinement-loop.js +77 -6
- package/dist/search/refinement-loop.js.map +1 -1
- package/dist/search/refinement-types.d.ts +2 -2
- package/dist/search/team-router.d.ts +91 -0
- package/dist/search/team-router.d.ts.map +1 -0
- package/dist/search/team-router.js +315 -0
- package/dist/search/team-router.js.map +1 -0
- package/dist/session-bank/git-reader.d.ts +39 -0
- package/dist/session-bank/git-reader.d.ts.map +1 -0
- package/dist/session-bank/git-reader.js +165 -0
- package/dist/session-bank/git-reader.js.map +1 -0
- package/dist/session-bank/index.d.ts +5 -0
- package/dist/session-bank/index.d.ts.map +1 -0
- package/dist/session-bank/index.js +4 -0
- package/dist/session-bank/index.js.map +1 -0
- package/dist/session-bank/parser.d.ts +39 -0
- package/dist/session-bank/parser.d.ts.map +1 -0
- package/dist/session-bank/parser.js +231 -0
- package/dist/session-bank/parser.js.map +1 -0
- package/dist/session-bank/session-bank.d.ts +35 -0
- package/dist/session-bank/session-bank.d.ts.map +1 -0
- package/dist/session-bank/session-bank.js +326 -0
- package/dist/session-bank/session-bank.js.map +1 -0
- package/dist/session-bank/types.d.ts +129 -0
- package/dist/session-bank/types.d.ts.map +1 -0
- package/dist/session-bank/types.js +7 -0
- package/dist/session-bank/types.js.map +1 -0
- package/dist/surfacing/index.d.ts +4 -0
- package/dist/surfacing/index.d.ts.map +1 -1
- package/dist/surfacing/index.js +3 -0
- package/dist/surfacing/index.js.map +1 -1
- package/dist/surfacing/publisher.d.ts +22 -0
- package/dist/surfacing/publisher.d.ts.map +1 -0
- package/dist/surfacing/publisher.js +9 -0
- package/dist/surfacing/publisher.js.map +1 -0
- package/dist/surfacing/skill-library.d.ts +12 -0
- package/dist/surfacing/skill-library.d.ts.map +1 -1
- package/dist/surfacing/skill-library.js +26 -0
- package/dist/surfacing/skill-library.js.map +1 -1
- package/dist/surfacing/skill-publisher.d.ts +43 -0
- package/dist/surfacing/skill-publisher.d.ts.map +1 -0
- package/dist/surfacing/skill-publisher.js +197 -0
- package/dist/surfacing/skill-publisher.js.map +1 -0
- package/dist/surfacing/sqlite-storage-adapter.d.ts +42 -0
- package/dist/surfacing/sqlite-storage-adapter.d.ts.map +1 -0
- package/dist/surfacing/sqlite-storage-adapter.js +207 -0
- package/dist/surfacing/sqlite-storage-adapter.js.map +1 -0
- package/dist/surfacing/team-skill-library.d.ts +180 -0
- package/dist/surfacing/team-skill-library.d.ts.map +1 -0
- package/dist/surfacing/team-skill-library.js +384 -0
- package/dist/surfacing/team-skill-library.js.map +1 -0
- package/dist/types/config.d.ts +1218 -44
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/config.js +216 -0
- package/dist/types/config.js.map +1 -1
- package/dist/types/dataclaw.d.ts +286 -0
- package/dist/types/dataclaw.d.ts.map +1 -0
- package/dist/types/dataclaw.js +84 -0
- package/dist/types/dataclaw.js.map +1 -0
- package/dist/types/index.d.ts +8 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +13 -1
- package/dist/types/index.js.map +1 -1
- package/dist/types/knowledge-graph.d.ts +148 -0
- package/dist/types/knowledge-graph.d.ts.map +1 -0
- package/dist/types/knowledge-graph.js +40 -0
- package/dist/types/knowledge-graph.js.map +1 -0
- package/dist/types/knowledge.d.ts +280 -0
- package/dist/types/knowledge.d.ts.map +1 -0
- package/dist/types/knowledge.js +191 -0
- package/dist/types/knowledge.js.map +1 -0
- package/dist/types/team-meta.d.ts +160 -0
- package/dist/types/team-meta.d.ts.map +1 -0
- package/dist/types/team-meta.js +42 -0
- package/dist/types/team-meta.js.map +1 -0
- package/dist/types/team-playbook.d.ts +276 -0
- package/dist/types/team-playbook.d.ts.map +1 -0
- package/dist/types/team-playbook.js +85 -0
- package/dist/types/team-playbook.js.map +1 -0
- package/dist/types/team-trajectory.d.ts +305 -0
- package/dist/types/team-trajectory.d.ts.map +1 -0
- package/dist/types/team-trajectory.js +304 -0
- package/dist/types/team-trajectory.js.map +1 -0
- package/dist/types/trajectory-source.d.ts +39 -0
- package/dist/types/trajectory-source.d.ts.map +1 -0
- package/dist/types/trajectory-source.js +2 -0
- package/dist/types/trajectory-source.js.map +1 -0
- package/dist/utils/frontmatter.d.ts +34 -0
- package/dist/utils/frontmatter.d.ts.map +1 -0
- package/dist/utils/frontmatter.js +93 -0
- package/dist/utils/frontmatter.js.map +1 -0
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/workspace/index.d.ts +6 -0
- package/dist/workspace/index.d.ts.map +1 -0
- package/dist/workspace/index.js +11 -0
- package/dist/workspace/index.js.map +1 -0
- package/dist/workspace/runner.d.ts +50 -0
- package/dist/workspace/runner.d.ts.map +1 -0
- package/dist/workspace/runner.js +219 -0
- package/dist/workspace/runner.js.map +1 -0
- package/dist/workspace/skill-converter.d.ts +18 -0
- package/dist/workspace/skill-converter.d.ts.map +1 -0
- package/dist/workspace/skill-converter.js +257 -0
- package/dist/workspace/skill-converter.js.map +1 -0
- package/dist/workspace/templates/index.d.ts +11 -0
- package/dist/workspace/templates/index.d.ts.map +1 -0
- package/dist/workspace/templates/index.js +21 -0
- package/dist/workspace/templates/index.js.map +1 -0
- package/dist/workspace/templates/knowledge-defrag.d.ts +25 -0
- package/dist/workspace/templates/knowledge-defrag.d.ts.map +1 -0
- package/dist/workspace/templates/knowledge-defrag.js +154 -0
- package/dist/workspace/templates/knowledge-defrag.js.map +1 -0
- package/dist/workspace/templates/knowledge-extraction.d.ts +25 -0
- package/dist/workspace/templates/knowledge-extraction.d.ts.map +1 -0
- package/dist/workspace/templates/knowledge-extraction.js +246 -0
- package/dist/workspace/templates/knowledge-extraction.js.map +1 -0
- package/dist/workspace/templates/meta-reflection.d.ts +47 -0
- package/dist/workspace/templates/meta-reflection.d.ts.map +1 -0
- package/dist/workspace/templates/meta-reflection.js +135 -0
- package/dist/workspace/templates/meta-reflection.js.map +1 -0
- package/dist/workspace/templates/playbook-extraction.d.ts +20 -0
- package/dist/workspace/templates/playbook-extraction.d.ts.map +1 -0
- package/dist/workspace/templates/playbook-extraction.js +189 -0
- package/dist/workspace/templates/playbook-extraction.js.map +1 -0
- package/dist/workspace/templates/refinement-analysis.d.ts +31 -0
- package/dist/workspace/templates/refinement-analysis.d.ts.map +1 -0
- package/dist/workspace/templates/refinement-analysis.js +107 -0
- package/dist/workspace/templates/refinement-analysis.js.map +1 -0
- package/dist/workspace/templates/solution-evaluation.d.ts +21 -0
- package/dist/workspace/templates/solution-evaluation.d.ts.map +1 -0
- package/dist/workspace/templates/solution-evaluation.js +131 -0
- package/dist/workspace/templates/solution-evaluation.js.map +1 -0
- package/dist/workspace/templates/team-playbook-extraction.d.ts +44 -0
- package/dist/workspace/templates/team-playbook-extraction.d.ts.map +1 -0
- package/dist/workspace/templates/team-playbook-extraction.js +497 -0
- package/dist/workspace/templates/team-playbook-extraction.js.map +1 -0
- package/dist/workspace/templates/team-trajectory-analysis.d.ts +19 -0
- package/dist/workspace/templates/team-trajectory-analysis.d.ts.map +1 -0
- package/dist/workspace/templates/team-trajectory-analysis.js +442 -0
- package/dist/workspace/templates/team-trajectory-analysis.js.map +1 -0
- package/dist/workspace/templates/trajectory-analysis.d.ts +19 -0
- package/dist/workspace/templates/trajectory-analysis.d.ts.map +1 -0
- package/dist/workspace/templates/trajectory-analysis.js +170 -0
- package/dist/workspace/templates/trajectory-analysis.js.map +1 -0
- package/dist/workspace/templates/usage-inference.d.ts +19 -0
- package/dist/workspace/templates/usage-inference.d.ts.map +1 -0
- package/dist/workspace/templates/usage-inference.js +125 -0
- package/dist/workspace/templates/usage-inference.js.map +1 -0
- package/dist/workspace/types.d.ts +145 -0
- package/dist/workspace/types.d.ts.map +1 -0
- package/dist/workspace/types.js +17 -0
- package/dist/workspace/types.js.map +1 -0
- package/docs/DESIGN-agentic-workspace.md +2057 -0
- package/docs/DESIGN-semantic-memory-knowledge-bank.md +1789 -0
- package/docs/DESIGN-session-bank.md +1134 -0
- package/docs/DESIGN-team-extraction-pipeline.md +1369 -0
- package/docs/DESIGN-workspace-migration.md +1079 -0
- package/docs/PLAN-agentic-workspace-implementation.md +717 -0
- package/docs/PLAN-graph-migration.md +299 -0
- package/docs/PLAN-session-bank-implementation.md +474 -0
- package/docs/PROPOSAL-team-aware-learning.md +1080 -0
- package/docs/RESEARCH-semantic-memory-knowledge-structures.md +517 -0
- package/docs/RESEARCH-team-trajectory-learning.md +553 -0
- package/gaps.md +204 -0
- package/package.json +24 -6
- package/references/agent-workspace/CLAUDE.md +74 -0
- package/references/agent-workspace/README.md +587 -0
- package/references/agent-workspace/media/banner.png +0 -0
- package/references/agent-workspace/package-lock.json +2061 -0
- package/references/agent-workspace/package.json +54 -0
- package/references/agent-workspace/src/handle.ts +122 -0
- package/references/agent-workspace/src/index.ts +32 -0
- package/references/agent-workspace/src/manager.ts +102 -0
- package/references/agent-workspace/src/readers/json.ts +71 -0
- package/references/agent-workspace/src/readers/markdown.ts +37 -0
- package/references/agent-workspace/src/readers/raw.ts +27 -0
- package/references/agent-workspace/src/types.ts +68 -0
- package/references/agent-workspace/src/validation.ts +93 -0
- package/references/agent-workspace/src/writers/json.ts +17 -0
- package/references/agent-workspace/src/writers/markdown.ts +27 -0
- package/references/agent-workspace/src/writers/raw.ts +22 -0
- package/references/agent-workspace/tests/errors.test.ts +652 -0
- package/references/agent-workspace/tests/handle.test.ts +144 -0
- package/references/agent-workspace/tests/manager.test.ts +124 -0
- package/references/agent-workspace/tests/readers.test.ts +205 -0
- package/references/agent-workspace/tests/validation.test.ts +196 -0
- package/references/agent-workspace/tests/writers.test.ts +108 -0
- package/references/agent-workspace/tsconfig.json +20 -0
- package/references/agent-workspace/tsup.config.ts +9 -0
- package/references/minimem/.claude/settings.json +7 -0
- package/references/minimem/.sudocode/issues.jsonl +18 -0
- package/references/minimem/.sudocode/specs.jsonl +1 -0
- package/references/minimem/CLAUDE.md +310 -0
- package/references/minimem/README.md +556 -0
- package/references/minimem/claude-plugin/.claude-plugin/plugin.json +10 -0
- package/references/minimem/claude-plugin/.mcp.json +7 -0
- package/references/minimem/claude-plugin/README.md +158 -0
- package/references/minimem/claude-plugin/commands/recall.md +47 -0
- package/references/minimem/claude-plugin/commands/remember.md +41 -0
- package/references/minimem/claude-plugin/hooks/__tests__/hooks.test.ts +272 -0
- package/references/minimem/claude-plugin/hooks/hooks.json +27 -0
- package/references/minimem/claude-plugin/hooks/session-end.sh +86 -0
- package/references/minimem/claude-plugin/hooks/session-start.sh +85 -0
- package/references/minimem/claude-plugin/skills/memory/SKILL.md +108 -0
- package/references/minimem/package-lock.json +5373 -0
- package/references/minimem/package.json +60 -0
- package/references/minimem/scripts/postbuild.js +35 -0
- package/references/minimem/src/__tests__/edge-cases.test.ts +371 -0
- package/references/minimem/src/__tests__/errors.test.ts +265 -0
- package/references/minimem/src/__tests__/helpers.ts +199 -0
- package/references/minimem/src/__tests__/internal.test.ts +407 -0
- package/references/minimem/src/__tests__/knowledge.test.ts +287 -0
- package/references/minimem/src/__tests__/minimem.integration.test.ts +1127 -0
- package/references/minimem/src/__tests__/session.test.ts +190 -0
- package/references/minimem/src/cli/__tests__/commands.test.ts +759 -0
- package/references/minimem/src/cli/commands/__tests__/conflicts.test.ts +141 -0
- package/references/minimem/src/cli/commands/append.ts +76 -0
- package/references/minimem/src/cli/commands/config.ts +262 -0
- package/references/minimem/src/cli/commands/conflicts.ts +413 -0
- package/references/minimem/src/cli/commands/daemon.ts +169 -0
- package/references/minimem/src/cli/commands/index.ts +12 -0
- package/references/minimem/src/cli/commands/init.ts +88 -0
- package/references/minimem/src/cli/commands/mcp.ts +177 -0
- package/references/minimem/src/cli/commands/push-pull.ts +213 -0
- package/references/minimem/src/cli/commands/search.ts +158 -0
- package/references/minimem/src/cli/commands/status.ts +84 -0
- package/references/minimem/src/cli/commands/sync-init.ts +290 -0
- package/references/minimem/src/cli/commands/sync.ts +70 -0
- package/references/minimem/src/cli/commands/upsert.ts +197 -0
- package/references/minimem/src/cli/config.ts +584 -0
- package/references/minimem/src/cli/index.ts +264 -0
- package/references/minimem/src/cli/shared.ts +161 -0
- package/references/minimem/src/cli/sync/__tests__/central.test.ts +152 -0
- package/references/minimem/src/cli/sync/__tests__/conflicts.test.ts +209 -0
- package/references/minimem/src/cli/sync/__tests__/daemon.test.ts +118 -0
- package/references/minimem/src/cli/sync/__tests__/detection.test.ts +207 -0
- package/references/minimem/src/cli/sync/__tests__/integration.test.ts +476 -0
- package/references/minimem/src/cli/sync/__tests__/registry.test.ts +363 -0
- package/references/minimem/src/cli/sync/__tests__/state.test.ts +255 -0
- package/references/minimem/src/cli/sync/__tests__/validation.test.ts +193 -0
- package/references/minimem/src/cli/sync/__tests__/watcher.test.ts +178 -0
- package/references/minimem/src/cli/sync/central.ts +292 -0
- package/references/minimem/src/cli/sync/conflicts.ts +204 -0
- package/references/minimem/src/cli/sync/daemon.ts +407 -0
- package/references/minimem/src/cli/sync/detection.ts +138 -0
- package/references/minimem/src/cli/sync/index.ts +107 -0
- package/references/minimem/src/cli/sync/operations.ts +373 -0
- package/references/minimem/src/cli/sync/registry.ts +279 -0
- package/references/minimem/src/cli/sync/state.ts +355 -0
- package/references/minimem/src/cli/sync/validation.ts +206 -0
- package/references/minimem/src/cli/sync/watcher.ts +234 -0
- package/references/minimem/src/cli/version.ts +34 -0
- package/references/minimem/src/core/index.ts +9 -0
- package/references/minimem/src/core/indexer.ts +628 -0
- package/references/minimem/src/core/searcher.ts +221 -0
- package/references/minimem/src/db/schema.ts +183 -0
- package/references/minimem/src/db/sqlite-vec.ts +24 -0
- package/references/minimem/src/embeddings/__tests__/embeddings.test.ts +431 -0
- package/references/minimem/src/embeddings/batch-gemini.ts +392 -0
- package/references/minimem/src/embeddings/batch-openai.ts +409 -0
- package/references/minimem/src/embeddings/embeddings.ts +434 -0
- package/references/minimem/src/index.ts +109 -0
- package/references/minimem/src/internal.ts +299 -0
- package/references/minimem/src/minimem.ts +1276 -0
- package/references/minimem/src/search/__tests__/hybrid.test.ts +247 -0
- package/references/minimem/src/search/graph.ts +234 -0
- package/references/minimem/src/search/hybrid.ts +151 -0
- package/references/minimem/src/search/search.ts +256 -0
- package/references/minimem/src/server/__tests__/mcp.test.ts +341 -0
- package/references/minimem/src/server/__tests__/tools.test.ts +364 -0
- package/references/minimem/src/server/mcp.ts +326 -0
- package/references/minimem/src/server/tools.ts +720 -0
- package/references/minimem/src/session.ts +460 -0
- package/references/minimem/tsconfig.json +19 -0
- package/references/minimem/tsup.config.ts +26 -0
- package/references/minimem/vitest.config.ts +24 -0
- package/references/skill-tree/.claude/settings.json +6 -0
- package/references/skill-tree/.sudocode/issues.jsonl +11 -0
- package/references/skill-tree/.sudocode/specs.jsonl +1 -0
- package/references/skill-tree/CLAUDE.md +150 -0
- package/references/skill-tree/README.md +324 -0
- package/references/skill-tree/docs/GAPS_v1.md +221 -0
- package/references/skill-tree/docs/INTEGRATION_PLAN.md +467 -0
- package/references/skill-tree/docs/TODOS.md +91 -0
- package/references/skill-tree/docs/anthropic_skill_guide.md +1364 -0
- package/references/skill-tree/docs/design/federated-skill-trees.md +524 -0
- package/references/skill-tree/docs/design/multi-agent-sync.md +759 -0
- package/references/skill-tree/docs/scraper/BRAINSTORM.md +583 -0
- package/references/skill-tree/docs/scraper/POC_PLAN.md +420 -0
- package/references/skill-tree/docs/scraper/README.md +170 -0
- package/references/skill-tree/examples/basic-usage.ts +190 -0
- package/references/skill-tree/package-lock.json +1509 -0
- package/references/skill-tree/package.json +66 -0
- package/references/skill-tree/scraper/README.md +123 -0
- package/references/skill-tree/scraper/docs/DESIGN.md +683 -0
- package/references/skill-tree/scraper/docs/PLAN.md +336 -0
- package/references/skill-tree/scraper/drizzle.config.ts +10 -0
- package/references/skill-tree/scraper/package-lock.json +6329 -0
- package/references/skill-tree/scraper/package.json +68 -0
- package/references/skill-tree/scraper/test/fixtures/invalid-skill/missing-description.md +7 -0
- package/references/skill-tree/scraper/test/fixtures/invalid-skill/missing-name.md +7 -0
- package/references/skill-tree/scraper/test/fixtures/minimal-skill/SKILL.md +27 -0
- package/references/skill-tree/scraper/test/fixtures/skill-json/SKILL.json +21 -0
- package/references/skill-tree/scraper/test/fixtures/skill-with-meta/SKILL.md +54 -0
- package/references/skill-tree/scraper/test/fixtures/skill-with-meta/_meta.json +24 -0
- package/references/skill-tree/scraper/test/fixtures/valid-skill/SKILL.md +93 -0
- package/references/skill-tree/scraper/test/fixtures/valid-skill/_meta.json +22 -0
- package/references/skill-tree/scraper/tsup.config.ts +14 -0
- package/references/skill-tree/scraper/vitest.config.ts +17 -0
- package/references/skill-tree/scripts/convert-to-vitest.ts +166 -0
- package/references/skill-tree/skills/skill-writer/SKILL.md +339 -0
- package/references/skill-tree/skills/skill-writer/references/examples.md +326 -0
- package/references/skill-tree/skills/skill-writer/references/patterns.md +210 -0
- package/references/skill-tree/skills/skill-writer/references/quality-checklist.md +123 -0
- package/references/skill-tree/test/run-all.ts +106 -0
- package/references/skill-tree/test/utils.ts +128 -0
- package/references/skill-tree/vitest.config.ts +16 -0
- package/src/atlas.ts +525 -13
- package/src/embeddings/provider.ts +10 -3
- package/src/index.ts +127 -5
- package/src/learning/index.ts +41 -6
- package/src/learning/knowledge-extractor.ts +470 -0
- package/src/learning/meta-learner.ts +54 -0
- package/src/learning/pipeline.ts +87 -8
- package/src/learning/team-ingester.ts +499 -0
- package/src/learning/team-meta-learner.ts +558 -0
- package/src/learning/team-pipeline.ts +364 -0
- package/src/learning/trajectory-sources/dataclaw.ts +403 -0
- package/src/learning/trajectory-sources/entire.ts +240 -0
- package/src/learning/trajectory-sources/file.ts +136 -0
- package/src/learning/trajectory-sources/huggingface.ts +248 -0
- package/src/learning/trajectory-sources/in-memory.ts +61 -0
- package/src/learning/trajectory-sources/index.ts +15 -0
- package/src/learning/trajectory-sources/pipeline.ts +69 -0
- package/src/memory/graph-layers/base.ts +184 -0
- package/src/memory/graph-layers/causal.ts +16 -0
- package/src/memory/graph-layers/entity.ts +16 -0
- package/src/memory/graph-layers/index.ts +5 -0
- package/src/memory/graph-layers/semantic.ts +16 -0
- package/src/memory/graph-layers/temporal.ts +16 -0
- package/src/memory/index.ts +45 -0
- package/src/memory/knowledge-bank.ts +1260 -0
- package/src/memory/knowledge-defrag.ts +329 -0
- package/src/memory/knowledge-graph.ts +361 -0
- package/src/memory/search-provider.ts +35 -0
- package/src/memory/search-providers/index.ts +3 -0
- package/src/memory/search-providers/minimem.ts +84 -0
- package/src/memory/search-providers/text-similarity.ts +35 -0
- package/src/memory/skill-exporter.ts +357 -0
- package/src/memory/system.ts +61 -8
- package/src/memory/team-experience.ts +604 -0
- package/src/runtime/backends/acp-protocol.ts +231 -0
- package/src/runtime/backends/acp.ts +57 -196
- package/src/runtime/backends/index.ts +14 -0
- package/src/runtime/backends/macro-agent.ts +177 -0
- package/src/runtime/compute-provider.ts +206 -0
- package/src/runtime/index.ts +22 -0
- package/src/runtime/manager.ts +167 -23
- package/src/runtime/types.ts +41 -0
- package/src/search/evaluator.ts +29 -4
- package/src/search/index.ts +9 -0
- package/src/search/refinement-loop.ts +106 -12
- package/src/search/team-router.ts +459 -0
- package/src/session-bank/git-reader.ts +190 -0
- package/src/session-bank/index.ts +24 -0
- package/src/session-bank/parser.ts +366 -0
- package/src/session-bank/session-bank.ts +464 -0
- package/src/session-bank/types.ts +173 -0
- package/src/surfacing/index.ts +23 -0
- package/src/surfacing/publisher.ts +23 -0
- package/src/surfacing/skill-library.ts +31 -0
- package/src/surfacing/skill-publisher.ts +223 -0
- package/src/surfacing/sqlite-storage-adapter.ts +301 -0
- package/src/surfacing/team-skill-library.ts +610 -0
- package/src/types/config.ts +252 -0
- package/src/types/dataclaw.ts +99 -0
- package/src/types/huggingface-transformers.d.ts +12 -0
- package/src/types/index.ts +156 -0
- package/src/types/knowledge-graph.ts +246 -0
- package/src/types/knowledge.ts +388 -0
- package/src/types/team-meta.ts +212 -0
- package/src/types/team-playbook.ts +384 -0
- package/src/types/team-trajectory.ts +673 -0
- package/src/types/trajectory-source.ts +47 -0
- package/src/utils/frontmatter.ts +118 -0
- package/src/utils/index.ts +7 -0
- package/src/workspace/index.ts +48 -0
- package/src/workspace/runner.ts +281 -0
- package/src/workspace/skill-converter.ts +288 -0
- package/src/workspace/templates/index.ts +64 -0
- package/src/workspace/templates/knowledge-defrag.ts +223 -0
- package/src/workspace/templates/knowledge-extraction.ts +337 -0
- package/src/workspace/templates/meta-reflection.ts +208 -0
- package/src/workspace/templates/playbook-extraction.ts +240 -0
- package/src/workspace/templates/refinement-analysis.ts +162 -0
- package/src/workspace/templates/solution-evaluation.ts +199 -0
- package/src/workspace/templates/team-playbook-extraction.ts +631 -0
- package/src/workspace/templates/team-trajectory-analysis.ts +564 -0
- package/src/workspace/templates/trajectory-analysis.ts +234 -0
- package/src/workspace/templates/usage-inference.ts +163 -0
- package/src/workspace/types.ts +233 -0
- package/tests/atlas-knowledge.test.ts +165 -0
- package/tests/gap-fixes.test.ts +1103 -0
- package/tests/integration/dataclaw-e2e.test.ts +559 -0
- package/tests/integration/e2e.test.ts +407 -0
- package/tests/integration/entire-e2e.test.ts +187 -0
- package/tests/integration/huggingface-e2e.test.ts +627 -0
- package/tests/integration/session-bank.test.ts +225 -0
- package/tests/integration/skill-tree-wiring.test.ts +152 -0
- package/tests/learning/dataclaw-trajectory-source.test.ts +642 -0
- package/tests/learning/entire-trajectory-source.test.ts +380 -0
- package/tests/learning/huggingface-trajectory-source.test.ts +817 -0
- package/tests/learning/knowledge-extractor.test.ts +491 -0
- package/tests/learning/team-ingester.test.ts +349 -0
- package/tests/learning/team-meta-learner.test.ts +618 -0
- package/tests/learning/team-pipeline.test.ts +334 -0
- package/tests/learning/trajectory-sources.test.ts +312 -0
- package/tests/memory/graph-layers/semantic.test.ts +219 -0
- package/tests/memory/knowledge-bank-extraction.test.ts +558 -0
- package/tests/memory/knowledge-bank.test.ts +705 -0
- package/tests/memory/knowledge-defrag.test.ts +366 -0
- package/tests/memory/knowledge-evolution.test.ts +563 -0
- package/tests/memory/knowledge-graph.test.ts +492 -0
- package/tests/memory/knowledge-inbox.test.ts +258 -0
- package/tests/memory/knowledge-minimem.test.ts +251 -0
- package/tests/memory/skill-exporter.test.ts +470 -0
- package/tests/memory/team-experience.test.ts +411 -0
- package/tests/runtime/agent-manager.test.ts +1 -1
- package/tests/runtime/compute-provider.test.ts +288 -0
- package/tests/runtime/delegate.test.ts +349 -0
- package/tests/runtime/macro-agent-backend.test.ts +266 -0
- package/tests/search/team-router.test.ts +376 -0
- package/tests/session-bank/fixtures/multi-tool-session/full.jsonl +12 -0
- package/tests/session-bank/fixtures/multi-tool-session/metadata.json +28 -0
- package/tests/session-bank/fixtures/root-metadata.json +18 -0
- package/tests/session-bank/fixtures/simple-session/full.jsonl +6 -0
- package/tests/session-bank/fixtures/simple-session/metadata.json +38 -0
- package/tests/session-bank/git-reader.test.ts +232 -0
- package/tests/session-bank/parser.test.ts +321 -0
- package/tests/session-bank/session-bank.test.ts +546 -0
- package/tests/surfacing/skill-publisher.test.ts +398 -0
- package/tests/surfacing/sqlite-storage-adapter.test.ts +218 -0
- package/tests/surfacing/team-skill-library.test.ts +444 -0
- package/tests/types/team-meta.test.ts +147 -0
- package/tests/types/team-playbook.test.ts +246 -0
- package/tests/types/team-trajectory.test.ts +557 -0
- package/tests/utils/frontmatter.test.ts +208 -0
- package/tests/workspace/full-flow.test.ts +839 -0
- package/tests/workspace/manager.test.ts +215 -0
- package/tests/workspace/runner.test.ts +330 -0
- package/tests/workspace/skill-converter.test.ts +205 -0
- package/tests/workspace/templates/knowledge-extraction.test.ts +235 -0
- package/tests/workspace/templates/team-playbook-extraction.test.ts +341 -0
- package/tests/workspace/templates/team-trajectory-analysis.test.ts +417 -0
- package/src/learning/llm-extractor.ts +0 -542
|
@@ -0,0 +1,673 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Team Trajectory Types
|
|
3
|
+
*
|
|
4
|
+
* TeamTrajectory - Complete record of a team's collective execution.
|
|
5
|
+
* The team-level analog of Trajectory. Where an individual trajectory
|
|
6
|
+
* records thought → action → observation, a team trajectory records
|
|
7
|
+
* events across all members with an interaction graph overlay.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import type { Trajectory } from './trajectory.js';
|
|
11
|
+
import type { Step } from './step.js';
|
|
12
|
+
|
|
13
|
+
// ============================================================
|
|
14
|
+
// Interaction Types (from DESIGN doc)
|
|
15
|
+
// ============================================================
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Fine-grained interaction type between agents.
|
|
19
|
+
* Used in InteractionTag and RoleInteractionGuidance.
|
|
20
|
+
*/
|
|
21
|
+
export type InteractionType =
|
|
22
|
+
| 'delegation'
|
|
23
|
+
| 'result_return'
|
|
24
|
+
| 'message'
|
|
25
|
+
| 'signal'
|
|
26
|
+
| 'spawn'
|
|
27
|
+
| 'escalation';
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Runtime step metadata tag linking agent interactions.
|
|
31
|
+
* Attached to individual trajectory steps to build the interaction graph.
|
|
32
|
+
*/
|
|
33
|
+
export interface InteractionTag {
|
|
34
|
+
/** Unique ID grouping source + target steps of one interaction */
|
|
35
|
+
interactionId: string;
|
|
36
|
+
/** Type of interaction */
|
|
37
|
+
interactionType: InteractionType;
|
|
38
|
+
/** The other agent involved */
|
|
39
|
+
counterpartAgentId: string;
|
|
40
|
+
/** Whether this step is the source or target of the interaction */
|
|
41
|
+
stepRole: 'source' | 'target';
|
|
42
|
+
/** Communication channel used, if any */
|
|
43
|
+
channel?: string;
|
|
44
|
+
/** Signal name, if any */
|
|
45
|
+
signal?: string;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Expected interaction pattern from team.yaml for comparison.
|
|
50
|
+
*/
|
|
51
|
+
export interface ExpectedInteractionPattern {
|
|
52
|
+
/** Pattern name */
|
|
53
|
+
name: string;
|
|
54
|
+
/** From role */
|
|
55
|
+
fromRole: string;
|
|
56
|
+
/** To role */
|
|
57
|
+
toRole: string;
|
|
58
|
+
/** Expected interaction type */
|
|
59
|
+
type: InteractionType;
|
|
60
|
+
/** Frequency expectation */
|
|
61
|
+
frequency: 'once' | 'per-task' | 'continuous';
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
// ============================================================
|
|
65
|
+
// Team Trajectory Input (entry point for ingestion)
|
|
66
|
+
// ============================================================
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* TeamTrajectoryInput - Entry point for the team learning pipeline.
|
|
70
|
+
* Contains individual agent trajectories that get converted to a
|
|
71
|
+
* TeamTrajectory with interaction graph.
|
|
72
|
+
*/
|
|
73
|
+
export interface TeamTrajectoryInput {
|
|
74
|
+
objective: string;
|
|
75
|
+
domain: string;
|
|
76
|
+
complexity: 'simple' | 'moderate' | 'complex' | 'epic';
|
|
77
|
+
teamName: string;
|
|
78
|
+
templateName: string;
|
|
79
|
+
topologyType: 'hierarchical' | 'flat' | 'wave' | 'custom';
|
|
80
|
+
enforcement: 'strict' | 'permissive' | 'audit';
|
|
81
|
+
/** Individual agent trajectories */
|
|
82
|
+
memberTrajectories: MemberTrajectoryInput[];
|
|
83
|
+
/** Expected coordination patterns from team.yaml */
|
|
84
|
+
expectedPatterns?: ExpectedInteractionPattern[];
|
|
85
|
+
/** Collective team outcome */
|
|
86
|
+
outcome: TeamOutcome;
|
|
87
|
+
/** Additional metadata */
|
|
88
|
+
metadata?: Record<string, unknown>;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* Individual member's trajectory within the team input.
|
|
93
|
+
*/
|
|
94
|
+
export interface MemberTrajectoryInput {
|
|
95
|
+
agentId: string;
|
|
96
|
+
role: string;
|
|
97
|
+
trajectory: Trajectory;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
// ============================================================
|
|
101
|
+
// Graph Model Types (from DESIGN doc)
|
|
102
|
+
// ============================================================
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* MemberTrajectory - A node in the team trajectory graph.
|
|
106
|
+
* Wraps an individual agent's full trajectory with team identity.
|
|
107
|
+
*/
|
|
108
|
+
export interface MemberTrajectory {
|
|
109
|
+
agentId: string;
|
|
110
|
+
role: string;
|
|
111
|
+
trajectory: Trajectory;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* AgentInteraction - An edge in the team trajectory graph.
|
|
116
|
+
* Links a specific step in one agent's trajectory to a step in another's.
|
|
117
|
+
*/
|
|
118
|
+
export interface AgentInteraction {
|
|
119
|
+
id: string;
|
|
120
|
+
type: InteractionType;
|
|
121
|
+
from: { agentId: string; role: string; stepIndex: number };
|
|
122
|
+
to: { agentId: string; role: string; stepIndex: number };
|
|
123
|
+
content: string;
|
|
124
|
+
channel?: string;
|
|
125
|
+
signal?: string;
|
|
126
|
+
timestamp: Date;
|
|
127
|
+
latencyMs?: number;
|
|
128
|
+
/** Whether this interaction matches an expected pattern from team.yaml */
|
|
129
|
+
wasExpected: boolean;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* StructuralMetrics computed from the graph model.
|
|
134
|
+
* Richer than CoordinationMetrics — computed from per-agent steps + interactions.
|
|
135
|
+
*/
|
|
136
|
+
export interface GraphStructuralMetrics {
|
|
137
|
+
teamSize: number;
|
|
138
|
+
totalSteps: number;
|
|
139
|
+
totalInteractions: number;
|
|
140
|
+
interactionDensity: number;
|
|
141
|
+
maxInDegree: { agentId: string; count: number };
|
|
142
|
+
maxOutDegree: { agentId: string; count: number };
|
|
143
|
+
parallelismRatio: number;
|
|
144
|
+
totalWallTimeSeconds: number;
|
|
145
|
+
totalTokens: number;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
// ============================================================
|
|
149
|
+
// Events
|
|
150
|
+
// ============================================================
|
|
151
|
+
|
|
152
|
+
/**
|
|
153
|
+
* A single event in a team's execution history.
|
|
154
|
+
* These are the "steps" of team-level learning.
|
|
155
|
+
*/
|
|
156
|
+
export interface TeamEvent {
|
|
157
|
+
/** When this event occurred */
|
|
158
|
+
timestamp: Date;
|
|
159
|
+
/** Which event type */
|
|
160
|
+
type: TeamEventType;
|
|
161
|
+
/** Which agent produced this event */
|
|
162
|
+
agentId: string;
|
|
163
|
+
/** Role of the agent at event time */
|
|
164
|
+
role: string;
|
|
165
|
+
/** Event-specific payload */
|
|
166
|
+
payload: Record<string, unknown>;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
export type TeamEventType =
|
|
170
|
+
| 'agent_spawned'
|
|
171
|
+
| 'agent_shutdown'
|
|
172
|
+
| 'task_delegated'
|
|
173
|
+
| 'task_completed'
|
|
174
|
+
| 'task_failed'
|
|
175
|
+
| 'signal_emitted'
|
|
176
|
+
| 'message_sent'
|
|
177
|
+
| 'message_broadcast'
|
|
178
|
+
| 'plan_proposed'
|
|
179
|
+
| 'plan_approved'
|
|
180
|
+
| 'plan_rejected'
|
|
181
|
+
| 'checkpoint_reached'
|
|
182
|
+
| 'role_changed'
|
|
183
|
+
| 'escalation';
|
|
184
|
+
|
|
185
|
+
/**
|
|
186
|
+
* Interaction edge in the team communication graph.
|
|
187
|
+
* Built from events during analysis.
|
|
188
|
+
*/
|
|
189
|
+
export interface InteractionEdge {
|
|
190
|
+
/** Sender role */
|
|
191
|
+
from: string;
|
|
192
|
+
/** Receiver role */
|
|
193
|
+
to: string;
|
|
194
|
+
/** Number of interactions */
|
|
195
|
+
count: number;
|
|
196
|
+
/** Types of interactions */
|
|
197
|
+
types: TeamEventType[];
|
|
198
|
+
/** Average latency between send and response (ms) */
|
|
199
|
+
avgResponseLatencyMs?: number;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
/**
|
|
203
|
+
* Coordination metrics computed from team events.
|
|
204
|
+
*/
|
|
205
|
+
export interface CoordinationMetrics {
|
|
206
|
+
/** Total wall time for the team execution */
|
|
207
|
+
totalWallTimeSeconds: number;
|
|
208
|
+
/** Time from team creation to first task completion */
|
|
209
|
+
timeToFirstOutputSeconds: number;
|
|
210
|
+
/** Fraction of total tokens spent on coordination vs. production */
|
|
211
|
+
coordinationOverheadRatio: number;
|
|
212
|
+
/** Agent with most inbound messages (potential bottleneck) */
|
|
213
|
+
bottleneckAgent?: string;
|
|
214
|
+
/** Number of communication cycles (back-and-forth exchanges) */
|
|
215
|
+
communicationCycles: number;
|
|
216
|
+
/** Maximum task dependency chain length executed */
|
|
217
|
+
maxDependencyDepth: number;
|
|
218
|
+
/** Number of tasks that were re-delegated after failure */
|
|
219
|
+
reDelegationCount: number;
|
|
220
|
+
/** Parallelism efficiency: tasks completed concurrently / total tasks */
|
|
221
|
+
parallelismRatio: number;
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
/**
|
|
225
|
+
* Per-member outcome within the team trajectory.
|
|
226
|
+
*/
|
|
227
|
+
export interface MemberOutcome {
|
|
228
|
+
agentId: string;
|
|
229
|
+
role: string;
|
|
230
|
+
tasksAssigned: number;
|
|
231
|
+
tasksCompleted: number;
|
|
232
|
+
tasksFailed: number;
|
|
233
|
+
llmCalls: number;
|
|
234
|
+
totalTokens: number;
|
|
235
|
+
/** Link to individual trajectory if available */
|
|
236
|
+
trajectoryId?: string;
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
/**
|
|
240
|
+
* Collective team outcome.
|
|
241
|
+
*/
|
|
242
|
+
export interface TeamOutcome {
|
|
243
|
+
success: boolean;
|
|
244
|
+
/** 0-1 score for partial success */
|
|
245
|
+
partialScore: number;
|
|
246
|
+
/** Quality assessment */
|
|
247
|
+
quality: 'excellent' | 'good' | 'acceptable' | 'poor';
|
|
248
|
+
/** Total LLM calls across all members */
|
|
249
|
+
totalLlmCalls: number;
|
|
250
|
+
/** Total tokens across all members */
|
|
251
|
+
totalTokens: number;
|
|
252
|
+
/** Total wall time */
|
|
253
|
+
totalWallTimeSeconds: number;
|
|
254
|
+
/** Optional error information */
|
|
255
|
+
errorInfo?: string;
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
/**
|
|
259
|
+
* TeamTrajectory - Complete record of a team's collective execution.
|
|
260
|
+
* The team-level analog of Trajectory.
|
|
261
|
+
*/
|
|
262
|
+
export interface TeamTrajectory {
|
|
263
|
+
id: string;
|
|
264
|
+
|
|
265
|
+
// === TEAM IDENTITY ===
|
|
266
|
+
/** Team name (from OpenTeams) */
|
|
267
|
+
teamName: string;
|
|
268
|
+
/** Template that defined this team */
|
|
269
|
+
templateName: string;
|
|
270
|
+
|
|
271
|
+
// === TEAM STRUCTURE (snapshot at execution time) ===
|
|
272
|
+
/** Topology type used */
|
|
273
|
+
topologyType: 'hierarchical' | 'flat' | 'wave' | 'custom';
|
|
274
|
+
/** Roles that participated */
|
|
275
|
+
roles: string[];
|
|
276
|
+
/** Number of agents */
|
|
277
|
+
teamSize: number;
|
|
278
|
+
/** Communication enforcement mode */
|
|
279
|
+
enforcement: 'strict' | 'permissive' | 'audit';
|
|
280
|
+
|
|
281
|
+
// === TASK ===
|
|
282
|
+
/** High-level description of what the team was trying to accomplish */
|
|
283
|
+
objective: string;
|
|
284
|
+
/** Domain of the work */
|
|
285
|
+
domain: string;
|
|
286
|
+
/** Task complexity estimate */
|
|
287
|
+
complexity: 'simple' | 'moderate' | 'complex' | 'epic';
|
|
288
|
+
|
|
289
|
+
// === EVENTS (the "steps") ===
|
|
290
|
+
events: TeamEvent[];
|
|
291
|
+
|
|
292
|
+
// === DERIVED STRUCTURE ===
|
|
293
|
+
/** Communication graph (built from events) */
|
|
294
|
+
interactionGraph: InteractionEdge[];
|
|
295
|
+
/** Coordination metrics (computed from events) */
|
|
296
|
+
metrics: CoordinationMetrics;
|
|
297
|
+
|
|
298
|
+
// === OUTCOMES ===
|
|
299
|
+
/** Per-member outcomes */
|
|
300
|
+
memberOutcomes: MemberOutcome[];
|
|
301
|
+
/** Collective outcome */
|
|
302
|
+
outcome: TeamOutcome;
|
|
303
|
+
|
|
304
|
+
// === GRAPH DATA (primary representation) ===
|
|
305
|
+
/** Full per-agent trajectories (graph nodes) */
|
|
306
|
+
members: MemberTrajectory[];
|
|
307
|
+
/** Step-level interactions between agents (graph edges) */
|
|
308
|
+
interactions: AgentInteraction[];
|
|
309
|
+
/** Graph-level structural metrics */
|
|
310
|
+
graphMetrics: GraphStructuralMetrics;
|
|
311
|
+
/** Expected interaction patterns from team.yaml */
|
|
312
|
+
expectedPatterns?: ExpectedInteractionPattern[];
|
|
313
|
+
|
|
314
|
+
/** When the trajectory was recorded */
|
|
315
|
+
timestamp: Date;
|
|
316
|
+
/** Additional metadata */
|
|
317
|
+
metadata: Record<string, unknown>;
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
/**
|
|
321
|
+
* Create a new team trajectory with defaults.
|
|
322
|
+
*/
|
|
323
|
+
export function createTeamTrajectory(params: {
|
|
324
|
+
id?: string;
|
|
325
|
+
teamName: string;
|
|
326
|
+
templateName: string;
|
|
327
|
+
topologyType: TeamTrajectory['topologyType'];
|
|
328
|
+
roles: string[];
|
|
329
|
+
teamSize: number;
|
|
330
|
+
enforcement: TeamTrajectory['enforcement'];
|
|
331
|
+
objective: string;
|
|
332
|
+
domain: string;
|
|
333
|
+
complexity: TeamTrajectory['complexity'];
|
|
334
|
+
events: TeamEvent[];
|
|
335
|
+
interactionGraph: InteractionEdge[];
|
|
336
|
+
metrics: CoordinationMetrics;
|
|
337
|
+
memberOutcomes: MemberOutcome[];
|
|
338
|
+
outcome: TeamOutcome;
|
|
339
|
+
metadata?: Record<string, unknown>;
|
|
340
|
+
// Graph data (required)
|
|
341
|
+
members: MemberTrajectory[];
|
|
342
|
+
interactions: AgentInteraction[];
|
|
343
|
+
graphMetrics: GraphStructuralMetrics;
|
|
344
|
+
expectedPatterns?: ExpectedInteractionPattern[];
|
|
345
|
+
}): TeamTrajectory {
|
|
346
|
+
return {
|
|
347
|
+
id: params.id ?? crypto.randomUUID(),
|
|
348
|
+
teamName: params.teamName,
|
|
349
|
+
templateName: params.templateName,
|
|
350
|
+
topologyType: params.topologyType,
|
|
351
|
+
roles: params.roles,
|
|
352
|
+
teamSize: params.teamSize,
|
|
353
|
+
enforcement: params.enforcement,
|
|
354
|
+
objective: params.objective,
|
|
355
|
+
domain: params.domain,
|
|
356
|
+
complexity: params.complexity,
|
|
357
|
+
events: params.events,
|
|
358
|
+
interactionGraph: params.interactionGraph,
|
|
359
|
+
metrics: params.metrics,
|
|
360
|
+
memberOutcomes: params.memberOutcomes,
|
|
361
|
+
outcome: params.outcome,
|
|
362
|
+
members: params.members,
|
|
363
|
+
interactions: params.interactions,
|
|
364
|
+
graphMetrics: params.graphMetrics,
|
|
365
|
+
expectedPatterns: params.expectedPatterns,
|
|
366
|
+
timestamp: new Date(),
|
|
367
|
+
metadata: params.metadata ?? {},
|
|
368
|
+
};
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
/**
|
|
372
|
+
* Check if a team trajectory was successful.
|
|
373
|
+
*/
|
|
374
|
+
export function isTeamSuccessful(trajectory: TeamTrajectory): boolean {
|
|
375
|
+
return trajectory.outcome.success;
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
/**
|
|
379
|
+
* Build an interaction graph from InteractionTags embedded in member trajectories.
|
|
380
|
+
* Groups by interactionId, links source to target, aggregates into InteractionEdge[].
|
|
381
|
+
*/
|
|
382
|
+
export function buildInteractionGraph(
|
|
383
|
+
members: MemberTrajectoryInput[]
|
|
384
|
+
): InteractionEdge[] {
|
|
385
|
+
// Collect all interaction tags from step metadata
|
|
386
|
+
const tagsByInteraction = new Map<string, { source?: { role: string; agentId: string; type: InteractionType }; target?: { role: string; agentId: string } }>();
|
|
387
|
+
|
|
388
|
+
for (const member of members) {
|
|
389
|
+
for (const step of member.trajectory.steps) {
|
|
390
|
+
const tag = (step.metadata as Record<string, unknown>)?.interactionTag as InteractionTag | undefined;
|
|
391
|
+
if (!tag) continue;
|
|
392
|
+
|
|
393
|
+
if (!tagsByInteraction.has(tag.interactionId)) {
|
|
394
|
+
tagsByInteraction.set(tag.interactionId, {});
|
|
395
|
+
}
|
|
396
|
+
const entry = tagsByInteraction.get(tag.interactionId)!;
|
|
397
|
+
if (tag.stepRole === 'source') {
|
|
398
|
+
entry.source = { role: member.role, agentId: member.agentId, type: tag.interactionType };
|
|
399
|
+
} else {
|
|
400
|
+
entry.target = { role: member.role, agentId: member.agentId };
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
// Aggregate into edges (from role → to role)
|
|
406
|
+
const edgeMap = new Map<string, InteractionEdge>();
|
|
407
|
+
for (const entry of tagsByInteraction.values()) {
|
|
408
|
+
if (!entry.source || !entry.target) continue;
|
|
409
|
+
const key = `${entry.source.role}->${entry.target.role}`;
|
|
410
|
+
if (!edgeMap.has(key)) {
|
|
411
|
+
edgeMap.set(key, {
|
|
412
|
+
from: entry.source.role,
|
|
413
|
+
to: entry.target.role,
|
|
414
|
+
count: 0,
|
|
415
|
+
types: [],
|
|
416
|
+
});
|
|
417
|
+
}
|
|
418
|
+
const edge = edgeMap.get(key)!;
|
|
419
|
+
edge.count++;
|
|
420
|
+
const eventType = interactionTypeToEventType(entry.source.type);
|
|
421
|
+
if (eventType && !edge.types.includes(eventType)) {
|
|
422
|
+
edge.types.push(eventType);
|
|
423
|
+
}
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
return [...edgeMap.values()];
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
/**
|
|
430
|
+
* Map InteractionType to closest TeamEventType.
|
|
431
|
+
*/
|
|
432
|
+
function interactionTypeToEventType(type: InteractionType): TeamEventType | null {
|
|
433
|
+
switch (type) {
|
|
434
|
+
case 'delegation': return 'task_delegated';
|
|
435
|
+
case 'result_return': return 'task_completed';
|
|
436
|
+
case 'message': return 'message_sent';
|
|
437
|
+
case 'signal': return 'signal_emitted';
|
|
438
|
+
case 'spawn': return 'agent_spawned';
|
|
439
|
+
case 'escalation': return 'escalation';
|
|
440
|
+
default: return null;
|
|
441
|
+
}
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
/**
|
|
445
|
+
* Build a TeamTrajectory from TeamTrajectoryInput.
|
|
446
|
+
* Populates both graph data (members, interactions, graphMetrics) and
|
|
447
|
+
* derived flat data (events, interactionGraph, metrics, memberOutcomes).
|
|
448
|
+
*/
|
|
449
|
+
export function buildTeamTrajectory(input: TeamTrajectoryInput): TeamTrajectory {
|
|
450
|
+
// === GRAPH DATA (primary) ===
|
|
451
|
+
|
|
452
|
+
// Preserve full member trajectories as graph nodes
|
|
453
|
+
const members: MemberTrajectory[] = input.memberTrajectories.map(m => ({
|
|
454
|
+
agentId: m.agentId,
|
|
455
|
+
role: m.role,
|
|
456
|
+
trajectory: m.trajectory,
|
|
457
|
+
}));
|
|
458
|
+
|
|
459
|
+
// Build step-level interactions from InteractionTag metadata
|
|
460
|
+
const interactions = buildAgentInteractions(input.memberTrajectories, input.expectedPatterns);
|
|
461
|
+
|
|
462
|
+
// Build aggregated interaction graph (flat, for backward compat)
|
|
463
|
+
const interactionGraph = buildInteractionGraph(input.memberTrajectories);
|
|
464
|
+
|
|
465
|
+
// === FLAT DATA (derived from graph for backward compat) ===
|
|
466
|
+
|
|
467
|
+
// Convert individual trajectories to team events
|
|
468
|
+
const events: TeamEvent[] = [];
|
|
469
|
+
const memberOutcomes: MemberOutcome[] = [];
|
|
470
|
+
|
|
471
|
+
for (const member of input.memberTrajectories) {
|
|
472
|
+
// Add spawn event
|
|
473
|
+
events.push({
|
|
474
|
+
timestamp: new Date(member.trajectory.steps[0]?.metadata?.timestamp as string ?? Date.now()),
|
|
475
|
+
type: 'agent_spawned',
|
|
476
|
+
agentId: member.agentId,
|
|
477
|
+
role: member.role,
|
|
478
|
+
payload: {},
|
|
479
|
+
});
|
|
480
|
+
|
|
481
|
+
// Convert steps to events
|
|
482
|
+
for (const step of member.trajectory.steps) {
|
|
483
|
+
events.push({
|
|
484
|
+
timestamp: new Date(step.metadata?.timestamp as string ?? Date.now()),
|
|
485
|
+
type: stepToEventType(step),
|
|
486
|
+
agentId: member.agentId,
|
|
487
|
+
role: member.role,
|
|
488
|
+
payload: { action: step.action, result: step.observation },
|
|
489
|
+
});
|
|
490
|
+
}
|
|
491
|
+
|
|
492
|
+
// Build member outcome
|
|
493
|
+
const traj = member.trajectory;
|
|
494
|
+
memberOutcomes.push({
|
|
495
|
+
agentId: member.agentId,
|
|
496
|
+
role: member.role,
|
|
497
|
+
tasksAssigned: traj.steps.length,
|
|
498
|
+
tasksCompleted: traj.outcome?.success ? traj.steps.length : Math.floor(traj.steps.length * (traj.outcome?.partialScore ?? 0)),
|
|
499
|
+
tasksFailed: traj.outcome?.success ? 0 : Math.ceil(traj.steps.length * (1 - (traj.outcome?.partialScore ?? 0))),
|
|
500
|
+
llmCalls: traj.steps.length,
|
|
501
|
+
totalTokens: traj.steps.reduce((sum, s) => sum + (Number(s.metadata?.tokens) || 0), 0),
|
|
502
|
+
trajectoryId: traj.id,
|
|
503
|
+
});
|
|
504
|
+
}
|
|
505
|
+
|
|
506
|
+
// Sort events by timestamp
|
|
507
|
+
events.sort((a, b) => a.timestamp.getTime() - b.timestamp.getTime());
|
|
508
|
+
|
|
509
|
+
// Compute coordination metrics (flat)
|
|
510
|
+
const wallTime = input.outcome.totalWallTimeSeconds;
|
|
511
|
+
const metrics: CoordinationMetrics = {
|
|
512
|
+
totalWallTimeSeconds: wallTime,
|
|
513
|
+
timeToFirstOutputSeconds: wallTime > 0 ? wallTime * 0.1 : 0,
|
|
514
|
+
coordinationOverheadRatio: interactionGraph.length > 0
|
|
515
|
+
? Math.min(interactionGraph.reduce((s, e) => s + e.count, 0) / Math.max(events.length, 1), 1)
|
|
516
|
+
: 0,
|
|
517
|
+
bottleneckAgent: findBottleneck(memberOutcomes),
|
|
518
|
+
communicationCycles: interactionGraph.filter(e => interactionGraph.some(e2 => e2.from === e.to && e2.to === e.from)).length,
|
|
519
|
+
maxDependencyDepth: 1,
|
|
520
|
+
reDelegationCount: 0,
|
|
521
|
+
parallelismRatio: input.memberTrajectories.length > 1 ? 0.5 : 0,
|
|
522
|
+
};
|
|
523
|
+
|
|
524
|
+
// Compute graph structural metrics
|
|
525
|
+
const totalSteps = members.reduce((s, m) => s + m.trajectory.steps.length, 0);
|
|
526
|
+
const totalTokens = members.reduce((s, m) => s + (m.trajectory.totalTokens ?? 0), 0);
|
|
527
|
+
const graphMetrics = computeGraphMetrics(members, interactions, wallTime, totalSteps, totalTokens, metrics.parallelismRatio);
|
|
528
|
+
|
|
529
|
+
return createTeamTrajectory({
|
|
530
|
+
teamName: input.teamName,
|
|
531
|
+
templateName: input.templateName,
|
|
532
|
+
topologyType: input.topologyType,
|
|
533
|
+
roles: [...new Set(input.memberTrajectories.map(m => m.role))],
|
|
534
|
+
teamSize: input.memberTrajectories.length,
|
|
535
|
+
enforcement: input.enforcement,
|
|
536
|
+
objective: input.objective,
|
|
537
|
+
domain: input.domain,
|
|
538
|
+
complexity: input.complexity,
|
|
539
|
+
events,
|
|
540
|
+
interactionGraph,
|
|
541
|
+
metrics,
|
|
542
|
+
memberOutcomes,
|
|
543
|
+
outcome: input.outcome,
|
|
544
|
+
metadata: input.metadata ?? {},
|
|
545
|
+
// Graph data
|
|
546
|
+
members,
|
|
547
|
+
interactions,
|
|
548
|
+
graphMetrics,
|
|
549
|
+
expectedPatterns: input.expectedPatterns,
|
|
550
|
+
});
|
|
551
|
+
}
|
|
552
|
+
|
|
553
|
+
/**
|
|
554
|
+
* Build step-level AgentInteraction objects from InteractionTag metadata.
|
|
555
|
+
*/
|
|
556
|
+
function buildAgentInteractions(
|
|
557
|
+
memberTrajectories: MemberTrajectoryInput[],
|
|
558
|
+
expectedPatterns?: ExpectedInteractionPattern[]
|
|
559
|
+
): AgentInteraction[] {
|
|
560
|
+
// Collect all tagged steps, grouped by interactionId
|
|
561
|
+
const tagGroups = new Map<string, {
|
|
562
|
+
source?: { agentId: string; role: string; stepIndex: number; step: Step; tag: InteractionTag };
|
|
563
|
+
target?: { agentId: string; role: string; stepIndex: number; step: Step; tag: InteractionTag };
|
|
564
|
+
}>();
|
|
565
|
+
|
|
566
|
+
for (const member of memberTrajectories) {
|
|
567
|
+
for (let i = 0; i < member.trajectory.steps.length; i++) {
|
|
568
|
+
const step = member.trajectory.steps[i];
|
|
569
|
+
const tag = (step.metadata as Record<string, unknown>)?.interactionTag as InteractionTag | undefined;
|
|
570
|
+
if (!tag) continue;
|
|
571
|
+
|
|
572
|
+
if (!tagGroups.has(tag.interactionId)) {
|
|
573
|
+
tagGroups.set(tag.interactionId, {});
|
|
574
|
+
}
|
|
575
|
+
const group = tagGroups.get(tag.interactionId)!;
|
|
576
|
+
const entry = { agentId: member.agentId, role: member.role, stepIndex: i, step, tag };
|
|
577
|
+
if (tag.stepRole === 'source') {
|
|
578
|
+
group.source = entry;
|
|
579
|
+
} else {
|
|
580
|
+
group.target = entry;
|
|
581
|
+
}
|
|
582
|
+
}
|
|
583
|
+
}
|
|
584
|
+
|
|
585
|
+
// Build AgentInteraction for each complete pair
|
|
586
|
+
const interactions: AgentInteraction[] = [];
|
|
587
|
+
for (const [interactionId, group] of tagGroups) {
|
|
588
|
+
if (!group.source || !group.target) continue;
|
|
589
|
+
|
|
590
|
+
const { source, target } = group;
|
|
591
|
+
const sourceTs = source.step.timestamp?.getTime() ?? 0;
|
|
592
|
+
const targetTs = target.step.timestamp?.getTime() ?? 0;
|
|
593
|
+
|
|
594
|
+
// Check if this interaction was expected
|
|
595
|
+
const wasExpected = expectedPatterns?.some(p =>
|
|
596
|
+
p.fromRole === source.role &&
|
|
597
|
+
p.toRole === target.role &&
|
|
598
|
+
p.type === source.tag.interactionType
|
|
599
|
+
) ?? false;
|
|
600
|
+
|
|
601
|
+
interactions.push({
|
|
602
|
+
id: interactionId,
|
|
603
|
+
type: source.tag.interactionType,
|
|
604
|
+
from: { agentId: source.agentId, role: source.role, stepIndex: source.stepIndex },
|
|
605
|
+
to: { agentId: target.agentId, role: target.role, stepIndex: target.stepIndex },
|
|
606
|
+
content: source.step.observation ?? '',
|
|
607
|
+
channel: source.tag.channel,
|
|
608
|
+
signal: source.tag.signal,
|
|
609
|
+
timestamp: source.step.timestamp ?? new Date(),
|
|
610
|
+
latencyMs: sourceTs > 0 && targetTs > 0 ? Math.abs(targetTs - sourceTs) : undefined,
|
|
611
|
+
wasExpected,
|
|
612
|
+
});
|
|
613
|
+
}
|
|
614
|
+
|
|
615
|
+
return interactions.sort((a, b) => a.timestamp.getTime() - b.timestamp.getTime());
|
|
616
|
+
}
|
|
617
|
+
|
|
618
|
+
/**
|
|
619
|
+
* Compute GraphStructuralMetrics from members and interactions.
|
|
620
|
+
*/
|
|
621
|
+
function computeGraphMetrics(
|
|
622
|
+
members: MemberTrajectory[],
|
|
623
|
+
interactions: AgentInteraction[],
|
|
624
|
+
wallTime: number,
|
|
625
|
+
totalSteps: number,
|
|
626
|
+
totalTokens: number,
|
|
627
|
+
parallelismRatio: number,
|
|
628
|
+
): GraphStructuralMetrics {
|
|
629
|
+
// Compute in-degree and out-degree per agent
|
|
630
|
+
const inDegree = new Map<string, number>();
|
|
631
|
+
const outDegree = new Map<string, number>();
|
|
632
|
+
for (const interaction of interactions) {
|
|
633
|
+
inDegree.set(interaction.to.agentId, (inDegree.get(interaction.to.agentId) ?? 0) + 1);
|
|
634
|
+
outDegree.set(interaction.from.agentId, (outDegree.get(interaction.from.agentId) ?? 0) + 1);
|
|
635
|
+
}
|
|
636
|
+
|
|
637
|
+
let maxIn = { agentId: '', count: 0 };
|
|
638
|
+
for (const [agentId, count] of inDegree) {
|
|
639
|
+
if (count > maxIn.count) maxIn = { agentId, count };
|
|
640
|
+
}
|
|
641
|
+
let maxOut = { agentId: '', count: 0 };
|
|
642
|
+
for (const [agentId, count] of outDegree) {
|
|
643
|
+
if (count > maxOut.count) maxOut = { agentId, count };
|
|
644
|
+
}
|
|
645
|
+
|
|
646
|
+
return {
|
|
647
|
+
teamSize: members.length,
|
|
648
|
+
totalSteps,
|
|
649
|
+
totalInteractions: interactions.length,
|
|
650
|
+
interactionDensity: totalSteps > 0 ? interactions.length / totalSteps : 0,
|
|
651
|
+
maxInDegree: maxIn,
|
|
652
|
+
maxOutDegree: maxOut,
|
|
653
|
+
parallelismRatio,
|
|
654
|
+
totalWallTimeSeconds: wallTime,
|
|
655
|
+
totalTokens,
|
|
656
|
+
};
|
|
657
|
+
}
|
|
658
|
+
|
|
659
|
+
function stepToEventType(step: { action: string }): TeamEventType {
|
|
660
|
+
const action = step.action.toLowerCase();
|
|
661
|
+
if (action.includes('delegate')) return 'task_delegated';
|
|
662
|
+
if (action.includes('signal') || action.includes('emit')) return 'signal_emitted';
|
|
663
|
+
if (action.includes('message') || action.includes('send')) return 'message_sent';
|
|
664
|
+
if (action.includes('plan')) return 'plan_proposed';
|
|
665
|
+
return 'task_completed';
|
|
666
|
+
}
|
|
667
|
+
|
|
668
|
+
function findBottleneck(outcomes: MemberOutcome[]): string | undefined {
|
|
669
|
+
if (outcomes.length === 0) return undefined;
|
|
670
|
+
const maxTokens = Math.max(...outcomes.map(m => m.totalTokens));
|
|
671
|
+
const bottleneck = outcomes.find(m => m.totalTokens === maxTokens);
|
|
672
|
+
return bottleneck?.agentId;
|
|
673
|
+
}
|