@weavelogic/knowledge-graph-agent 0.6.0 → 0.7.1
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/LICENSE +21 -0
- package/README.md +70 -3
- package/dist/_virtual/__vite-browser-external.js +2 -2
- package/dist/_virtual/__vite-browser-external.js.map +1 -1
- package/dist/_virtual/index12.js +7 -0
- package/dist/_virtual/index12.js.map +1 -0
- package/dist/_virtual/ort-web.min.js +8 -0
- package/dist/_virtual/ort-web.min.js.map +1 -0
- package/dist/_virtual/ort-web.min2.js +5 -0
- package/dist/_virtual/ort-web.min2.js.map +1 -0
- package/dist/agents/base-agent.d.ts +63 -0
- package/dist/agents/base-agent.d.ts.map +1 -1
- package/dist/agents/base-agent.js +139 -0
- package/dist/agents/base-agent.js.map +1 -1
- package/dist/agents/coordinator-agent.d.ts +422 -0
- package/dist/agents/coordinator-agent.d.ts.map +1 -0
- package/dist/agents/documenter-agent.d.ts +298 -0
- package/dist/agents/documenter-agent.d.ts.map +1 -0
- package/dist/agents/index.d.ts +11 -1
- package/dist/agents/index.d.ts.map +1 -1
- package/dist/agents/index.js +4 -0
- package/dist/agents/index.js.map +1 -1
- package/dist/agents/mixins/index.d.ts +9 -0
- package/dist/agents/mixins/index.d.ts.map +1 -0
- package/dist/agents/mixins/trajectory-mixin.d.ts +112 -0
- package/dist/agents/mixins/trajectory-mixin.d.ts.map +1 -0
- package/dist/agents/optimizer-agent.d.ts +388 -0
- package/dist/agents/optimizer-agent.d.ts.map +1 -0
- package/dist/agents/planner-agent.d.ts +395 -0
- package/dist/agents/planner-agent.d.ts.map +1 -0
- package/dist/agents/registry.d.ts.map +1 -1
- package/dist/agents/registry.js +5 -0
- package/dist/agents/registry.js.map +1 -1
- package/dist/agents/reviewer-agent.d.ts +330 -0
- package/dist/agents/reviewer-agent.d.ts.map +1 -0
- package/dist/agents/types.d.ts +12 -1
- package/dist/agents/types.d.ts.map +1 -1
- package/dist/agents/types.js +1 -0
- package/dist/agents/types.js.map +1 -1
- package/dist/cli/commands/hive-mind/add-frontmatter.d.ts +102 -0
- package/dist/cli/commands/hive-mind/add-frontmatter.d.ts.map +1 -0
- package/dist/cli/commands/hive-mind/add-frontmatter.js +439 -0
- package/dist/cli/commands/hive-mind/add-frontmatter.js.map +1 -0
- package/dist/cli/commands/hive-mind/analyze-links.d.ts +80 -0
- package/dist/cli/commands/hive-mind/analyze-links.d.ts.map +1 -0
- package/dist/cli/commands/hive-mind/analyze-links.js +367 -0
- package/dist/cli/commands/hive-mind/analyze-links.js.map +1 -0
- package/dist/cli/commands/hive-mind/find-connections.d.ts +75 -0
- package/dist/cli/commands/hive-mind/find-connections.d.ts.map +1 -0
- package/dist/cli/commands/hive-mind/find-connections.js +347 -0
- package/dist/cli/commands/hive-mind/find-connections.js.map +1 -0
- package/dist/cli/commands/hive-mind/index.d.ts +37 -0
- package/dist/cli/commands/hive-mind/index.d.ts.map +1 -0
- package/dist/cli/commands/hive-mind/index.js +33 -0
- package/dist/cli/commands/hive-mind/index.js.map +1 -0
- package/dist/cli/commands/hive-mind/validate-names.d.ts +79 -0
- package/dist/cli/commands/hive-mind/validate-names.d.ts.map +1 -0
- package/dist/cli/commands/hive-mind/validate-names.js +353 -0
- package/dist/cli/commands/hive-mind/validate-names.js.map +1 -0
- package/dist/cli/commands/vector.js +2 -0
- package/dist/cli/commands/vector.js.map +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +7 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/equilibrium/agent-equilibrium.d.ts +194 -0
- package/dist/equilibrium/agent-equilibrium.d.ts.map +1 -0
- package/dist/equilibrium/agent-equilibrium.js +304 -0
- package/dist/equilibrium/agent-equilibrium.js.map +1 -0
- package/dist/equilibrium/graph-equilibrium.d.ts +177 -0
- package/dist/equilibrium/graph-equilibrium.d.ts.map +1 -0
- package/dist/equilibrium/index.d.ts +11 -0
- package/dist/equilibrium/index.d.ts.map +1 -0
- package/dist/equilibrium/memory-equilibrium.d.ts +153 -0
- package/dist/equilibrium/memory-equilibrium.d.ts.map +1 -0
- package/dist/graphql/resolvers/index.d.ts.map +1 -1
- package/dist/graphql/resolvers/queries.d.ts +11 -0
- package/dist/graphql/resolvers/queries.d.ts.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -4
- package/dist/index.js.map +1 -1
- package/dist/inference/index.d.ts +9 -0
- package/dist/inference/index.d.ts.map +1 -0
- package/dist/inference/model-selection.d.ts +131 -0
- package/dist/inference/model-selection.d.ts.map +1 -0
- package/dist/integrations/agentic-flow/adapters/agent-booster-adapter.d.ts +265 -0
- package/dist/integrations/agentic-flow/adapters/agent-booster-adapter.d.ts.map +1 -0
- package/dist/integrations/agentic-flow/adapters/agentdb-adapter.d.ts +197 -0
- package/dist/integrations/agentic-flow/adapters/agentdb-adapter.d.ts.map +1 -0
- package/dist/integrations/agentic-flow/adapters/agentdb-vector-store.d.ts +249 -0
- package/dist/integrations/agentic-flow/adapters/agentdb-vector-store.d.ts.map +1 -0
- package/dist/integrations/agentic-flow/adapters/base-adapter.d.ts +120 -0
- package/dist/integrations/agentic-flow/adapters/base-adapter.d.ts.map +1 -0
- package/dist/integrations/agentic-flow/adapters/federation-hub-adapter.d.ts +444 -0
- package/dist/integrations/agentic-flow/adapters/federation-hub-adapter.d.ts.map +1 -0
- package/dist/integrations/agentic-flow/adapters/index.d.ts +17 -0
- package/dist/integrations/agentic-flow/adapters/index.d.ts.map +1 -0
- package/dist/integrations/agentic-flow/adapters/model-router-adapter.d.ts +242 -0
- package/dist/integrations/agentic-flow/adapters/model-router-adapter.d.ts.map +1 -0
- package/dist/integrations/agentic-flow/adapters/quic-transport-adapter.d.ts +364 -0
- package/dist/integrations/agentic-flow/adapters/quic-transport-adapter.d.ts.map +1 -0
- package/dist/integrations/agentic-flow/adapters/reasoning-bank-adapter.d.ts +209 -0
- package/dist/integrations/agentic-flow/adapters/reasoning-bank-adapter.d.ts.map +1 -0
- package/dist/integrations/agentic-flow/benchmark/index.d.ts +9 -0
- package/dist/integrations/agentic-flow/benchmark/index.d.ts.map +1 -0
- package/dist/integrations/agentic-flow/benchmark/vector-benchmark.d.ts +253 -0
- package/dist/integrations/agentic-flow/benchmark/vector-benchmark.d.ts.map +1 -0
- package/dist/integrations/agentic-flow/config.d.ts +109 -0
- package/dist/integrations/agentic-flow/config.d.ts.map +1 -0
- package/dist/integrations/agentic-flow/feature-flags.d.ts +140 -0
- package/dist/integrations/agentic-flow/feature-flags.d.ts.map +1 -0
- package/dist/integrations/agentic-flow/index.d.ts +22 -0
- package/dist/integrations/agentic-flow/index.d.ts.map +1 -0
- package/dist/integrations/agentic-flow/migration/index.d.ts +9 -0
- package/dist/integrations/agentic-flow/migration/index.d.ts.map +1 -0
- package/dist/integrations/agentic-flow/migration/migrate-to-agentdb.d.ts +242 -0
- package/dist/integrations/agentic-flow/migration/migrate-to-agentdb.d.ts.map +1 -0
- package/dist/learning/index.d.ts +91 -0
- package/dist/learning/index.d.ts.map +1 -0
- package/dist/learning/learning-loop.d.ts +176 -0
- package/dist/learning/learning-loop.d.ts.map +1 -0
- package/dist/learning/services/ab-testing-framework.d.ts +135 -0
- package/dist/learning/services/ab-testing-framework.d.ts.map +1 -0
- package/dist/learning/services/agent-priming-service.d.ts +207 -0
- package/dist/learning/services/agent-priming-service.d.ts.map +1 -0
- package/dist/learning/services/daily-log-generator.d.ts +113 -0
- package/dist/learning/services/daily-log-generator.d.ts.map +1 -0
- package/dist/learning/services/index.d.ts +14 -0
- package/dist/learning/services/index.d.ts.map +1 -0
- package/dist/learning/services/memory-extraction-service.d.ts +87 -0
- package/dist/learning/services/memory-extraction-service.d.ts.map +1 -0
- package/dist/learning/services/task-completion-consumer.d.ts +162 -0
- package/dist/learning/services/task-completion-consumer.d.ts.map +1 -0
- package/dist/learning/services/trajectory-tracker.d.ts +174 -0
- package/dist/learning/services/trajectory-tracker.d.ts.map +1 -0
- package/dist/learning/types.d.ts +516 -0
- package/dist/learning/types.d.ts.map +1 -0
- package/dist/mcp/clients/claude-flow-memory-client.d.ts +259 -0
- package/dist/mcp/clients/claude-flow-memory-client.d.ts.map +1 -0
- package/dist/mcp/clients/claude-flow-memory-client.js +305 -0
- package/dist/mcp/clients/claude-flow-memory-client.js.map +1 -0
- package/dist/mcp/clients/index.d.ts +11 -0
- package/dist/mcp/clients/index.d.ts.map +1 -0
- package/dist/mcp/clients/mcp-client-adapter.d.ts +146 -0
- package/dist/mcp/clients/mcp-client-adapter.d.ts.map +1 -0
- package/dist/mcp/clients/mcp-client-adapter.js +372 -0
- package/dist/mcp/clients/mcp-client-adapter.js.map +1 -0
- package/dist/mcp/index.d.ts +10 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/memory/vault-sync.d.ts +12 -0
- package/dist/memory/vault-sync.d.ts.map +1 -1
- package/dist/memory/vault-sync.js +94 -11
- package/dist/memory/vault-sync.js.map +1 -1
- package/dist/node_modules/@huggingface/jinja/dist/index.js +118 -0
- package/dist/node_modules/@huggingface/jinja/dist/index.js.map +1 -0
- package/dist/node_modules/@typescript-eslint/project-service/dist/index.js +1 -1
- package/dist/node_modules/@xenova/transformers/src/backends/onnx.js +24 -0
- package/dist/node_modules/@xenova/transformers/src/backends/onnx.js.map +1 -0
- package/dist/node_modules/@xenova/transformers/src/configs.js +52 -0
- package/dist/node_modules/@xenova/transformers/src/configs.js.map +1 -0
- package/dist/node_modules/@xenova/transformers/src/env.js +35 -0
- package/dist/node_modules/@xenova/transformers/src/env.js.map +1 -0
- package/dist/node_modules/@xenova/transformers/src/models.js +3852 -0
- package/dist/node_modules/@xenova/transformers/src/models.js.map +1 -0
- package/dist/node_modules/@xenova/transformers/src/tokenizers.js +144 -0
- package/dist/node_modules/@xenova/transformers/src/tokenizers.js.map +1 -0
- package/dist/node_modules/@xenova/transformers/src/utils/core.js +52 -0
- package/dist/node_modules/@xenova/transformers/src/utils/core.js.map +1 -0
- package/dist/node_modules/@xenova/transformers/src/utils/generation.js +623 -0
- package/dist/node_modules/@xenova/transformers/src/utils/generation.js.map +1 -0
- package/dist/node_modules/@xenova/transformers/src/utils/hub.js +395 -0
- package/dist/node_modules/@xenova/transformers/src/utils/hub.js.map +1 -0
- package/dist/node_modules/@xenova/transformers/src/utils/image.js +12 -0
- package/dist/node_modules/@xenova/transformers/src/utils/image.js.map +1 -0
- package/dist/node_modules/@xenova/transformers/src/utils/maths.js +89 -0
- package/dist/node_modules/@xenova/transformers/src/utils/maths.js.map +1 -0
- package/dist/node_modules/@xenova/transformers/src/utils/tensor.js +750 -0
- package/dist/node_modules/@xenova/transformers/src/utils/tensor.js.map +1 -0
- package/dist/node_modules/fdir/dist/index.js +13 -13
- package/dist/node_modules/fdir/dist/index.js.map +1 -1
- package/dist/node_modules/onnxruntime-common/dist/lib/backend-impl.js +67 -0
- package/dist/node_modules/onnxruntime-common/dist/lib/backend-impl.js.map +1 -0
- package/dist/node_modules/onnxruntime-common/dist/lib/env-impl.js +24 -0
- package/dist/node_modules/onnxruntime-common/dist/lib/env-impl.js.map +1 -0
- package/dist/node_modules/onnxruntime-common/dist/lib/env.js +6 -0
- package/dist/node_modules/onnxruntime-common/dist/lib/env.js.map +1 -0
- package/dist/node_modules/onnxruntime-common/dist/lib/index.js +11 -0
- package/dist/node_modules/onnxruntime-common/dist/lib/index.js.map +1 -0
- package/dist/node_modules/onnxruntime-common/dist/lib/inference-session-impl.js +162 -0
- package/dist/node_modules/onnxruntime-common/dist/lib/inference-session-impl.js.map +1 -0
- package/dist/node_modules/onnxruntime-common/dist/lib/inference-session.js +6 -0
- package/dist/node_modules/onnxruntime-common/dist/lib/inference-session.js.map +1 -0
- package/dist/node_modules/onnxruntime-common/dist/lib/tensor-impl.js +393 -0
- package/dist/node_modules/onnxruntime-common/dist/lib/tensor-impl.js.map +1 -0
- package/dist/node_modules/onnxruntime-common/dist/lib/tensor.js +6 -0
- package/dist/node_modules/onnxruntime-common/dist/lib/tensor.js.map +1 -0
- package/dist/node_modules/onnxruntime-web/dist/ort-web.min.js +12919 -0
- package/dist/node_modules/onnxruntime-web/dist/ort-web.min.js.map +1 -0
- package/dist/node_modules/tinyglobby/dist/index.js +14 -14
- package/dist/node_modules/tinyglobby/dist/index.js.map +1 -1
- package/dist/node_modules/typescript/lib/typescript.js +24 -24
- package/dist/node_modules/typescript/lib/typescript.js.map +1 -1
- package/dist/transport/agent-transport.d.ts +269 -0
- package/dist/transport/agent-transport.d.ts.map +1 -0
- package/dist/transport/index.d.ts +10 -0
- package/dist/transport/index.d.ts.map +1 -0
- package/dist/vector/index.d.ts +1 -1
- package/dist/vector/index.d.ts.map +1 -1
- package/dist/vector/services/embedding-service.d.ts +244 -0
- package/dist/vector/services/embedding-service.d.ts.map +1 -0
- package/dist/vector/services/embedding-service.js +10 -0
- package/dist/vector/services/embedding-service.js.map +1 -0
- package/dist/vector/services/hybrid-search.d.ts +320 -0
- package/dist/vector/services/hybrid-search.d.ts.map +1 -0
- package/dist/vector/services/hybrid-search.js +3 -0
- package/dist/vector/services/hybrid-search.js.map +1 -0
- package/dist/vector/services/index.d.ts +4 -0
- package/dist/vector/services/index.d.ts.map +1 -1
- package/package.json +10 -1
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/cli/index.ts"],"sourcesContent":["/**\n * Knowledge Graph Agent CLI\n *\n * Main CLI setup and command registration.\n */\n\nimport { Command } from 'commander';\nimport chalk from 'chalk';\nimport { createInitCommand } from './commands/init.js';\nimport { createGraphCommand } from './commands/graph.js';\nimport { createDocsCommand } from './commands/docs.js';\nimport { createClaudeCommand } from './commands/claude.js';\nimport { createSyncCommand } from './commands/sync.js';\nimport { createStatsCommand } from './commands/stats.js';\nimport { createSearchCommand } from './commands/search.js';\nimport { createConvertCommand, createFrontmatterCommand } from './commands/convert.js';\nimport { createAnalyzeCommand } from './commands/analyze.js';\nimport { createSOPCommands } from './commands/sop.js';\nimport { createInitPrimitivesCommand, createAnalyzeCodebaseCommand } from './commands/init-primitives.js';\nimport { createCultivateCommand } from './commands/cultivate.js';\nimport { createCommitCommand } from './commands/commit.js';\nimport { createConfigCommand } from './commands/config.js';\nimport { createDiagnosticsCommand } from './commands/diagnostics.js';\nimport { createWorkflowCommand } from './commands/workflow.js';\nimport { createAuditCommand } from './commands/audit.js';\nimport { createVectorCommand } from './commands/vector.js';\nimport { createServeCommand } from './commands/serve.js';\nimport { createDashboardCommand } from './commands/dashboard.js';\nimport { createPluginCommand } from './commands/plugin.js';\n\n/**\n * CLI version\n */\nconst VERSION = '0.4.0';\n\n/**\n * Create and configure the CLI program\n */\nexport function createCLI(): Command {\n const program = new Command();\n\n program\n .name('kg')\n .description('Knowledge Graph Agent - Generate and manage knowledge graphs for Claude Code')\n .version(VERSION, '-v, --version', 'Display version number');\n\n // Configure help\n program.configureHelp({\n sortSubcommands: true,\n sortOptions: true,\n });\n\n // Add commands\n program.addCommand(createInitCommand());\n program.addCommand(createGraphCommand());\n program.addCommand(createDocsCommand());\n program.addCommand(createClaudeCommand());\n program.addCommand(createSyncCommand());\n program.addCommand(createStatsCommand());\n program.addCommand(createSearchCommand());\n program.addCommand(createConvertCommand());\n program.addCommand(createFrontmatterCommand());\n program.addCommand(createAnalyzeCommand());\n program.addCommand(createSOPCommands());\n program.addCommand(createInitPrimitivesCommand());\n program.addCommand(createAnalyzeCodebaseCommand());\n program.addCommand(createCultivateCommand());\n program.addCommand(createCommitCommand());\n program.addCommand(createConfigCommand());\n program.addCommand(createDiagnosticsCommand());\n program.addCommand(createWorkflowCommand());\n program.addCommand(createAuditCommand());\n program.addCommand(createVectorCommand());\n program.addCommand(createServeCommand());\n program.addCommand(createDashboardCommand());\n program.addCommand(createPluginCommand());\n\n // Default action (show help)\n program.action(() => {\n console.log(chalk.cyan.bold('\\n Knowledge Graph Agent\\n'));\n console.log(chalk.gray(' Generate and manage knowledge graphs for Claude Code\\n'));\n\n console.log(chalk.white(' Quick Start:'));\n console.log(chalk.gray(' $ kg init # Initialize knowledge graph'));\n console.log(chalk.gray(' $ kg docs init # Initialize docs directory'));\n console.log(chalk.gray(' $ kg graph # Generate knowledge graph'));\n console.log(chalk.gray(' $ kg claude update # Update CLAUDE.md'));\n console.log(chalk.gray(' $ kg sync # Sync with claude-flow\\n'));\n\n console.log(chalk.white(' Migration & Analysis:'));\n console.log(chalk.gray(' $ kg analyze # Analyze & migrate to knowledge graph'));\n console.log(chalk.gray(' $ kg analyze deep # Deep analysis with claude-flow'));\n console.log(chalk.gray(' $ kg analyze report # Generate analysis report'));\n console.log(chalk.gray(' $ kg convert docs # Convert docs/ → docs-nn/'));\n console.log(chalk.gray(' $ kg frontmatter add # Add frontmatter to files'));\n console.log(chalk.gray(' $ kg frontmatter validate # Validate frontmatter\\n'));\n\n console.log(chalk.white(' AI-SDLC SOP Compliance:'));\n console.log(chalk.gray(' $ kg sop init # Initialize SOP standards layer'));\n console.log(chalk.gray(' $ kg sop check # Check compliance against SOPs'));\n console.log(chalk.gray(' $ kg sop gaps # Analyze compliance gaps'));\n console.log(chalk.gray(' $ kg sop report # Generate compliance report'));\n console.log(chalk.gray(' $ kg sop list # List available SOPs\\n'));\n\n console.log(chalk.white(' Cultivation & Primitives:'));\n console.log(chalk.gray(' $ kg init-primitives # Bootstrap primitives from codebase'));\n console.log(chalk.gray(' $ kg analyze-codebase # Analyze dependencies & services'));\n console.log(chalk.gray(' $ kg init-primitives --dry-run # Preview without writing\\n'));\n\n console.log(chalk.white(' Git Integration:'));\n console.log(chalk.gray(' $ kg commit # Show status and suggested message'));\n console.log(chalk.gray(' $ kg commit -a # Auto-commit with generated message'));\n console.log(chalk.gray(' $ kg commit -i # Interactive commit mode'));\n console.log(chalk.gray(' $ kg commit -m \"message\" # Commit with custom message'));\n console.log(chalk.gray(' $ kg commit status # Show git status with analysis'));\n console.log(chalk.gray(' $ kg commit log # Show recent commits'));\n console.log(chalk.gray(' $ kg commit diff # Show diff of changes\\n'));\n\n console.log(chalk.white(' Diagnostics & Health:'));\n console.log(chalk.gray(' $ kg diag run # Run full diagnostics'));\n console.log(chalk.gray(' $ kg diag run --fix # Attempt to fix issues'));\n console.log(chalk.gray(' $ kg diag health # Check system health'));\n console.log(chalk.gray(' $ kg diag repair # Repair database issues'));\n console.log(chalk.gray(' $ kg diag backup # Create database backup'));\n console.log(chalk.gray(' $ kg diag backup --list # List existing backups'));\n console.log(chalk.gray(' $ kg diag info # Show system information\\n'));\n\n console.log(chalk.white(' Workflow Management:'));\n console.log(chalk.gray(' $ kg workflow start <type> # Start a workflow'));\n console.log(chalk.gray(' $ kg workflow status [id] # Check workflow status'));\n console.log(chalk.gray(' $ kg workflow list # List active workflows'));\n console.log(chalk.gray(' $ kg workflow stop <id> # Stop a workflow'));\n console.log(chalk.gray(' $ kg workflow history # Show workflow history\\n'));\n\n console.log(chalk.white(' Vector Operations:'));\n console.log(chalk.gray(' $ kg vector search <query> # Semantic search'));\n console.log(chalk.gray(' $ kg vector stats # Vector store statistics'));\n console.log(chalk.gray(' $ kg vector rebuild # Rebuild vector index'));\n console.log(chalk.gray(' $ kg vector traj list # List trajectories'));\n console.log(chalk.gray(' $ kg vector traj show <id> # Show trajectory details'));\n console.log(chalk.gray(' $ kg vector traj patterns # Show detected patterns\\n'));\n\n console.log(chalk.white(' Audit & Exochain:'));\n console.log(chalk.gray(' $ kg audit query # Query the audit log'));\n console.log(chalk.gray(' $ kg audit checkpoint # Create a checkpoint'));\n console.log(chalk.gray(' $ kg audit verify # Verify chain integrity'));\n console.log(chalk.gray(' $ kg audit sync status # Check sync status'));\n console.log(chalk.gray(' $ kg audit sync peers # List sync peers'));\n console.log(chalk.gray(' $ kg audit export # Export audit log\\n'));\n\n console.log(chalk.white(' Server Mode:'));\n console.log(chalk.gray(' $ kg serve # Start MCP server (stdio)'));\n console.log(chalk.gray(' $ kg serve --graphql # Start GraphQL server'));\n console.log(chalk.gray(' $ kg serve --dashboard # Start web dashboard'));\n console.log(chalk.gray(' $ kg serve --all # Start all servers'));\n console.log(chalk.gray(' $ kg serve status # Show server status\\n'));\n\n console.log(chalk.white(' Dashboard:'));\n console.log(chalk.gray(' $ kg dashboard start # Start dashboard dev server'));\n console.log(chalk.gray(' $ kg dashboard build # Build dashboard for production'));\n console.log(chalk.gray(' $ kg dashboard serve # Serve built dashboard'));\n console.log(chalk.gray(' $ kg dashboard open # Open dashboard in browser'));\n console.log(chalk.gray(' $ kg dashboard status # Check dashboard status\\n'));\n\n console.log(chalk.white(' Plugin Management:'));\n console.log(chalk.gray(' $ kg plugin list # List installed plugins'));\n console.log(chalk.gray(' $ kg plugin install <pkg> # Install a plugin'));\n console.log(chalk.gray(' $ kg plugin uninstall <n> # Uninstall a plugin'));\n console.log(chalk.gray(' $ kg plugin enable <name> # Enable a plugin'));\n console.log(chalk.gray(' $ kg plugin disable <name> # Disable a plugin'));\n console.log(chalk.gray(' $ kg plugin info <name> # Show plugin details'));\n console.log(chalk.gray(' $ kg plugin run <n> <file> # Run analyzer plugin'));\n console.log(chalk.gray(' $ kg plugin create <name> # Create new plugin\\n'));\n\n console.log(chalk.white(' Commands:'));\n program.commands.forEach(cmd => {\n console.log(chalk.cyan(` ${cmd.name().padEnd(20)}`), chalk.gray(cmd.description() || ''));\n });\n\n console.log('\\n Run', chalk.cyan('kg <command> --help'), 'for more information\\n');\n });\n\n return program;\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/cli/index.ts"],"sourcesContent":["/**\n * Knowledge Graph Agent CLI\n *\n * Main CLI setup and command registration.\n */\n\nimport { Command } from 'commander';\nimport chalk from 'chalk';\nimport { createInitCommand } from './commands/init.js';\nimport { createGraphCommand } from './commands/graph.js';\nimport { createDocsCommand } from './commands/docs.js';\nimport { createClaudeCommand } from './commands/claude.js';\nimport { createSyncCommand } from './commands/sync.js';\nimport { createStatsCommand } from './commands/stats.js';\nimport { createSearchCommand } from './commands/search.js';\nimport { createConvertCommand, createFrontmatterCommand } from './commands/convert.js';\nimport { createAnalyzeCommand } from './commands/analyze.js';\nimport { createSOPCommands } from './commands/sop.js';\nimport { createInitPrimitivesCommand, createAnalyzeCodebaseCommand } from './commands/init-primitives.js';\nimport { createCultivateCommand } from './commands/cultivate.js';\nimport { createCommitCommand } from './commands/commit.js';\nimport { createConfigCommand } from './commands/config.js';\nimport { createDiagnosticsCommand } from './commands/diagnostics.js';\nimport { createWorkflowCommand } from './commands/workflow.js';\nimport { createAuditCommand } from './commands/audit.js';\nimport { createVectorCommand } from './commands/vector.js';\nimport { createServeCommand } from './commands/serve.js';\nimport { createDashboardCommand } from './commands/dashboard.js';\nimport { createPluginCommand } from './commands/plugin.js';\nimport { createHiveMindCommand } from './commands/hive-mind/index.js';\n\n/**\n * CLI version\n */\nconst VERSION = '0.4.0';\n\n/**\n * Create and configure the CLI program\n */\nexport function createCLI(): Command {\n const program = new Command();\n\n program\n .name('kg')\n .description('Knowledge Graph Agent - Generate and manage knowledge graphs for Claude Code')\n .version(VERSION, '-v, --version', 'Display version number');\n\n // Configure help\n program.configureHelp({\n sortSubcommands: true,\n sortOptions: true,\n });\n\n // Add commands\n program.addCommand(createInitCommand());\n program.addCommand(createGraphCommand());\n program.addCommand(createDocsCommand());\n program.addCommand(createClaudeCommand());\n program.addCommand(createSyncCommand());\n program.addCommand(createStatsCommand());\n program.addCommand(createSearchCommand());\n program.addCommand(createConvertCommand());\n program.addCommand(createFrontmatterCommand());\n program.addCommand(createAnalyzeCommand());\n program.addCommand(createSOPCommands());\n program.addCommand(createInitPrimitivesCommand());\n program.addCommand(createAnalyzeCodebaseCommand());\n program.addCommand(createCultivateCommand());\n program.addCommand(createCommitCommand());\n program.addCommand(createConfigCommand());\n program.addCommand(createDiagnosticsCommand());\n program.addCommand(createWorkflowCommand());\n program.addCommand(createAuditCommand());\n program.addCommand(createVectorCommand());\n program.addCommand(createServeCommand());\n program.addCommand(createDashboardCommand());\n program.addCommand(createPluginCommand());\n program.addCommand(createHiveMindCommand());\n\n // Default action (show help)\n program.action(() => {\n console.log(chalk.cyan.bold('\\n Knowledge Graph Agent\\n'));\n console.log(chalk.gray(' Generate and manage knowledge graphs for Claude Code\\n'));\n\n console.log(chalk.white(' Quick Start:'));\n console.log(chalk.gray(' $ kg init # Initialize knowledge graph'));\n console.log(chalk.gray(' $ kg docs init # Initialize docs directory'));\n console.log(chalk.gray(' $ kg graph # Generate knowledge graph'));\n console.log(chalk.gray(' $ kg claude update # Update CLAUDE.md'));\n console.log(chalk.gray(' $ kg sync # Sync with claude-flow\\n'));\n\n console.log(chalk.white(' Migration & Analysis:'));\n console.log(chalk.gray(' $ kg analyze # Analyze & migrate to knowledge graph'));\n console.log(chalk.gray(' $ kg analyze deep # Deep analysis with claude-flow'));\n console.log(chalk.gray(' $ kg analyze report # Generate analysis report'));\n console.log(chalk.gray(' $ kg convert docs # Convert docs/ → docs-nn/'));\n console.log(chalk.gray(' $ kg frontmatter add # Add frontmatter to files'));\n console.log(chalk.gray(' $ kg frontmatter validate # Validate frontmatter\\n'));\n\n console.log(chalk.white(' AI-SDLC SOP Compliance:'));\n console.log(chalk.gray(' $ kg sop init # Initialize SOP standards layer'));\n console.log(chalk.gray(' $ kg sop check # Check compliance against SOPs'));\n console.log(chalk.gray(' $ kg sop gaps # Analyze compliance gaps'));\n console.log(chalk.gray(' $ kg sop report # Generate compliance report'));\n console.log(chalk.gray(' $ kg sop list # List available SOPs\\n'));\n\n console.log(chalk.white(' Cultivation & Primitives:'));\n console.log(chalk.gray(' $ kg init-primitives # Bootstrap primitives from codebase'));\n console.log(chalk.gray(' $ kg analyze-codebase # Analyze dependencies & services'));\n console.log(chalk.gray(' $ kg init-primitives --dry-run # Preview without writing\\n'));\n\n console.log(chalk.white(' Git Integration:'));\n console.log(chalk.gray(' $ kg commit # Show status and suggested message'));\n console.log(chalk.gray(' $ kg commit -a # Auto-commit with generated message'));\n console.log(chalk.gray(' $ kg commit -i # Interactive commit mode'));\n console.log(chalk.gray(' $ kg commit -m \"message\" # Commit with custom message'));\n console.log(chalk.gray(' $ kg commit status # Show git status with analysis'));\n console.log(chalk.gray(' $ kg commit log # Show recent commits'));\n console.log(chalk.gray(' $ kg commit diff # Show diff of changes\\n'));\n\n console.log(chalk.white(' Diagnostics & Health:'));\n console.log(chalk.gray(' $ kg diag run # Run full diagnostics'));\n console.log(chalk.gray(' $ kg diag run --fix # Attempt to fix issues'));\n console.log(chalk.gray(' $ kg diag health # Check system health'));\n console.log(chalk.gray(' $ kg diag repair # Repair database issues'));\n console.log(chalk.gray(' $ kg diag backup # Create database backup'));\n console.log(chalk.gray(' $ kg diag backup --list # List existing backups'));\n console.log(chalk.gray(' $ kg diag info # Show system information\\n'));\n\n console.log(chalk.white(' Workflow Management:'));\n console.log(chalk.gray(' $ kg workflow start <type> # Start a workflow'));\n console.log(chalk.gray(' $ kg workflow status [id] # Check workflow status'));\n console.log(chalk.gray(' $ kg workflow list # List active workflows'));\n console.log(chalk.gray(' $ kg workflow stop <id> # Stop a workflow'));\n console.log(chalk.gray(' $ kg workflow history # Show workflow history\\n'));\n\n console.log(chalk.white(' Vector Operations:'));\n console.log(chalk.gray(' $ kg vector search <query> # Semantic search'));\n console.log(chalk.gray(' $ kg vector stats # Vector store statistics'));\n console.log(chalk.gray(' $ kg vector rebuild # Rebuild vector index'));\n console.log(chalk.gray(' $ kg vector traj list # List trajectories'));\n console.log(chalk.gray(' $ kg vector traj show <id> # Show trajectory details'));\n console.log(chalk.gray(' $ kg vector traj patterns # Show detected patterns\\n'));\n\n console.log(chalk.white(' Audit & Exochain:'));\n console.log(chalk.gray(' $ kg audit query # Query the audit log'));\n console.log(chalk.gray(' $ kg audit checkpoint # Create a checkpoint'));\n console.log(chalk.gray(' $ kg audit verify # Verify chain integrity'));\n console.log(chalk.gray(' $ kg audit sync status # Check sync status'));\n console.log(chalk.gray(' $ kg audit sync peers # List sync peers'));\n console.log(chalk.gray(' $ kg audit export # Export audit log\\n'));\n\n console.log(chalk.white(' Server Mode:'));\n console.log(chalk.gray(' $ kg serve # Start MCP server (stdio)'));\n console.log(chalk.gray(' $ kg serve --graphql # Start GraphQL server'));\n console.log(chalk.gray(' $ kg serve --dashboard # Start web dashboard'));\n console.log(chalk.gray(' $ kg serve --all # Start all servers'));\n console.log(chalk.gray(' $ kg serve status # Show server status\\n'));\n\n console.log(chalk.white(' Dashboard:'));\n console.log(chalk.gray(' $ kg dashboard start # Start dashboard dev server'));\n console.log(chalk.gray(' $ kg dashboard build # Build dashboard for production'));\n console.log(chalk.gray(' $ kg dashboard serve # Serve built dashboard'));\n console.log(chalk.gray(' $ kg dashboard open # Open dashboard in browser'));\n console.log(chalk.gray(' $ kg dashboard status # Check dashboard status\\n'));\n\n console.log(chalk.white(' Plugin Management:'));\n console.log(chalk.gray(' $ kg plugin list # List installed plugins'));\n console.log(chalk.gray(' $ kg plugin install <pkg> # Install a plugin'));\n console.log(chalk.gray(' $ kg plugin uninstall <n> # Uninstall a plugin'));\n console.log(chalk.gray(' $ kg plugin enable <name> # Enable a plugin'));\n console.log(chalk.gray(' $ kg plugin disable <name> # Disable a plugin'));\n console.log(chalk.gray(' $ kg plugin info <name> # Show plugin details'));\n console.log(chalk.gray(' $ kg plugin run <n> <file> # Run analyzer plugin'));\n console.log(chalk.gray(' $ kg plugin create <name> # Create new plugin\\n'));\n\n console.log(chalk.white(' Hive Mind (Graph Reconnection):'));\n console.log(chalk.gray(' $ kg hive-mind analyze-links <vault> # Analyze wiki-links'));\n console.log(chalk.gray(' $ kg hive-mind find-connections <vault> # Find potential links'));\n console.log(chalk.gray(' $ kg hive-mind validate-names <vault> # Validate file names'));\n console.log(chalk.gray(' $ kg hive-mind add-frontmatter <vault> # Add YAML frontmatter\\n'));\n\n console.log(chalk.white(' Commands:'));\n program.commands.forEach(cmd => {\n console.log(chalk.cyan(` ${cmd.name().padEnd(20)}`), chalk.gray(cmd.description() || ''));\n });\n\n console.log('\\n Run', chalk.cyan('kg <command> --help'), 'for more information\\n');\n });\n\n return program;\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent Equilibrium Selector (SPEC-006a)
|
|
3
|
+
*
|
|
4
|
+
* Implements Nash equilibrium-based agent selection to replace heuristic
|
|
5
|
+
* capability-matching in CoordinatorAgent. Uses game-theoretic principles
|
|
6
|
+
* where agents adjust their participation levels based on task fit and
|
|
7
|
+
* competition from other agents with similar capabilities.
|
|
8
|
+
*
|
|
9
|
+
* @module equilibrium/agent-equilibrium
|
|
10
|
+
*/
|
|
11
|
+
import { AgentType } from '../agents/types.js';
|
|
12
|
+
import { type AgentInfo } from '../agents/planner-agent.js';
|
|
13
|
+
/**
|
|
14
|
+
* Agent participation in a task allocation game
|
|
15
|
+
*/
|
|
16
|
+
export interface AgentParticipation {
|
|
17
|
+
/** Agent identifier */
|
|
18
|
+
agentId: string;
|
|
19
|
+
/** Agent type */
|
|
20
|
+
agentType: AgentType;
|
|
21
|
+
/** Participation level (0-1), equilibrium outcome */
|
|
22
|
+
participationLevel: number;
|
|
23
|
+
/** Effectiveness score for the task (0-1) */
|
|
24
|
+
effectivenessScore: number;
|
|
25
|
+
/** Penalty for overlapping with other agents */
|
|
26
|
+
redundancyPenalty: number;
|
|
27
|
+
/** Net utility from participation */
|
|
28
|
+
utility: number;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Configuration for equilibrium computation
|
|
32
|
+
*/
|
|
33
|
+
export interface EquilibriumConfig {
|
|
34
|
+
/** Learning rate for gradient updates (default: 0.1) */
|
|
35
|
+
learningRate: number;
|
|
36
|
+
/** Maximum iterations before stopping (default: 100) */
|
|
37
|
+
maxIterations: number;
|
|
38
|
+
/** Convergence threshold for participation changes (default: 0.001) */
|
|
39
|
+
convergenceThreshold: number;
|
|
40
|
+
/** Minimum participation level before collapsing to 0 (default: 0.01) */
|
|
41
|
+
minParticipation: number;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Task definition for equilibrium selection
|
|
45
|
+
*/
|
|
46
|
+
export interface Task {
|
|
47
|
+
/** Unique task identifier */
|
|
48
|
+
id: string;
|
|
49
|
+
/** Task description */
|
|
50
|
+
description: string;
|
|
51
|
+
/** Required capabilities for the task */
|
|
52
|
+
requiredCapabilities: string[];
|
|
53
|
+
/** Task priority */
|
|
54
|
+
priority: 'low' | 'medium' | 'high' | 'critical';
|
|
55
|
+
/** Task complexity (0-1) */
|
|
56
|
+
complexity: number;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Equilibrium computation result
|
|
60
|
+
*/
|
|
61
|
+
export interface EquilibriumResult {
|
|
62
|
+
/** Participating agents sorted by participation level */
|
|
63
|
+
participants: AgentParticipation[];
|
|
64
|
+
/** Number of iterations to converge */
|
|
65
|
+
iterations: number;
|
|
66
|
+
/** Whether equilibrium was reached */
|
|
67
|
+
converged: boolean;
|
|
68
|
+
/** Total utility at equilibrium */
|
|
69
|
+
totalUtility: number;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* AgentEquilibriumSelector
|
|
73
|
+
*
|
|
74
|
+
* Computes Nash equilibrium for agent selection using iterative gradient
|
|
75
|
+
* updates. Each agent adjusts its participation level based on:
|
|
76
|
+
* - Effectiveness: How well the agent matches the task requirements
|
|
77
|
+
* - Competition: Overlap with other participating agents
|
|
78
|
+
* - Utility: Net benefit from participating
|
|
79
|
+
*
|
|
80
|
+
* Dominated agents (those with lower effectiveness and high overlap)
|
|
81
|
+
* naturally collapse to zero participation, leaving only the most
|
|
82
|
+
* suitable agents.
|
|
83
|
+
*
|
|
84
|
+
* @example
|
|
85
|
+
* ```typescript
|
|
86
|
+
* const selector = new AgentEquilibriumSelector();
|
|
87
|
+
* const selected = await selector.selectTopAgents(task, agents, 3);
|
|
88
|
+
* ```
|
|
89
|
+
*/
|
|
90
|
+
export declare class AgentEquilibriumSelector {
|
|
91
|
+
private config;
|
|
92
|
+
private participations;
|
|
93
|
+
private iterationHistory;
|
|
94
|
+
constructor(config?: Partial<EquilibriumConfig>);
|
|
95
|
+
/**
|
|
96
|
+
* Find Nash equilibrium for agent selection
|
|
97
|
+
*
|
|
98
|
+
* Each agent adjusts participation based on task match and competition.
|
|
99
|
+
* Returns agents with positive participation, sorted by level.
|
|
100
|
+
*
|
|
101
|
+
* @param task - The task to allocate
|
|
102
|
+
* @param availableAgents - Pool of available agents
|
|
103
|
+
* @returns Agents with positive participation at equilibrium
|
|
104
|
+
*/
|
|
105
|
+
findEquilibrium(task: Task, availableAgents: AgentInfo[]): Promise<AgentParticipation[]>;
|
|
106
|
+
/**
|
|
107
|
+
* Select top N agents based on equilibrium
|
|
108
|
+
*
|
|
109
|
+
* @param task - The task to allocate
|
|
110
|
+
* @param availableAgents - Pool of available agents
|
|
111
|
+
* @param n - Maximum number of agents to select
|
|
112
|
+
* @returns Selected agents (may be less than n if not enough qualify)
|
|
113
|
+
*/
|
|
114
|
+
selectTopAgents(task: Task, availableAgents: AgentInfo[], n: number): Promise<AgentInfo[]>;
|
|
115
|
+
/**
|
|
116
|
+
* Get iteration history for analysis/debugging
|
|
117
|
+
*/
|
|
118
|
+
getIterationHistory(): Array<{
|
|
119
|
+
iteration: number;
|
|
120
|
+
totalUtility: number;
|
|
121
|
+
}>;
|
|
122
|
+
/**
|
|
123
|
+
* Get current participation state
|
|
124
|
+
*/
|
|
125
|
+
getParticipations(): Map<string, AgentParticipation>;
|
|
126
|
+
/**
|
|
127
|
+
* Get configuration
|
|
128
|
+
*/
|
|
129
|
+
getConfig(): EquilibriumConfig;
|
|
130
|
+
/**
|
|
131
|
+
* Initialize participation levels uniformly across agents
|
|
132
|
+
*/
|
|
133
|
+
private initializeParticipations;
|
|
134
|
+
/**
|
|
135
|
+
* Update a single agent's participation based on game dynamics
|
|
136
|
+
*/
|
|
137
|
+
private updateAgentParticipation;
|
|
138
|
+
/**
|
|
139
|
+
* Normalize participation levels to sum to at most 1
|
|
140
|
+
* This prevents runaway accumulation
|
|
141
|
+
*/
|
|
142
|
+
private normalizeParticipations;
|
|
143
|
+
/**
|
|
144
|
+
* Calculate how effective an agent is for a given task
|
|
145
|
+
*
|
|
146
|
+
* Combines:
|
|
147
|
+
* - Capability match (70% weight)
|
|
148
|
+
* - Type boost for task keywords (30% weight)
|
|
149
|
+
*/
|
|
150
|
+
calculateEffectiveness(agent: AgentInfo, task: Task): number;
|
|
151
|
+
/**
|
|
152
|
+
* Get type-based boost for matching task keywords
|
|
153
|
+
*/
|
|
154
|
+
getTypeBoost(agentType: AgentType, task: Task): number;
|
|
155
|
+
/**
|
|
156
|
+
* Calculate competition pressure from other agents
|
|
157
|
+
*
|
|
158
|
+
* Competition increases with:
|
|
159
|
+
* - Number of other agents with overlapping capabilities
|
|
160
|
+
* - Participation levels of overlapping agents
|
|
161
|
+
*/
|
|
162
|
+
calculateCompetition(agent: AgentInfo, allAgents: AgentInfo[]): number;
|
|
163
|
+
/**
|
|
164
|
+
* Calculate capability overlap between two agents
|
|
165
|
+
*
|
|
166
|
+
* Returns a value from 0 (no overlap) to 1 (complete overlap)
|
|
167
|
+
*/
|
|
168
|
+
capabilityOverlap(a: AgentInfo, b: AgentInfo): number;
|
|
169
|
+
/**
|
|
170
|
+
* Create snapshot of current participation levels
|
|
171
|
+
*/
|
|
172
|
+
private snapshotParticipations;
|
|
173
|
+
/**
|
|
174
|
+
* Check if participation levels have converged
|
|
175
|
+
*/
|
|
176
|
+
private hasConverged;
|
|
177
|
+
/**
|
|
178
|
+
* Calculate total utility across all agents
|
|
179
|
+
*/
|
|
180
|
+
calculateTotalUtility(): number;
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Create a new AgentEquilibriumSelector with optional configuration
|
|
184
|
+
*/
|
|
185
|
+
export declare function createAgentEquilibriumSelector(config?: Partial<EquilibriumConfig>): AgentEquilibriumSelector;
|
|
186
|
+
/**
|
|
187
|
+
* Create a task for equilibrium selection
|
|
188
|
+
*/
|
|
189
|
+
export declare function createEquilibriumTask(id: string, description: string, options?: {
|
|
190
|
+
requiredCapabilities?: string[];
|
|
191
|
+
priority?: 'low' | 'medium' | 'high' | 'critical';
|
|
192
|
+
complexity?: number;
|
|
193
|
+
}): Task;
|
|
194
|
+
//# sourceMappingURL=agent-equilibrium.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-equilibrium.d.ts","sourceRoot":"","sources":["../../src/equilibrium/agent-equilibrium.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,304 @@
|
|
|
1
|
+
import { AgentType } from "../agents/types.js";
|
|
2
|
+
class AgentEquilibriumSelector {
|
|
3
|
+
config;
|
|
4
|
+
participations;
|
|
5
|
+
iterationHistory;
|
|
6
|
+
constructor(config = {}) {
|
|
7
|
+
this.config = {
|
|
8
|
+
learningRate: 0.1,
|
|
9
|
+
maxIterations: 100,
|
|
10
|
+
convergenceThreshold: 1e-3,
|
|
11
|
+
minParticipation: 0.01,
|
|
12
|
+
...config
|
|
13
|
+
};
|
|
14
|
+
this.participations = /* @__PURE__ */ new Map();
|
|
15
|
+
this.iterationHistory = [];
|
|
16
|
+
}
|
|
17
|
+
// ==========================================================================
|
|
18
|
+
// Public API
|
|
19
|
+
// ==========================================================================
|
|
20
|
+
/**
|
|
21
|
+
* Find Nash equilibrium for agent selection
|
|
22
|
+
*
|
|
23
|
+
* Each agent adjusts participation based on task match and competition.
|
|
24
|
+
* Returns agents with positive participation, sorted by level.
|
|
25
|
+
*
|
|
26
|
+
* @param task - The task to allocate
|
|
27
|
+
* @param availableAgents - Pool of available agents
|
|
28
|
+
* @returns Agents with positive participation at equilibrium
|
|
29
|
+
*/
|
|
30
|
+
async findEquilibrium(task, availableAgents) {
|
|
31
|
+
this.iterationHistory = [];
|
|
32
|
+
if (availableAgents.length === 0) {
|
|
33
|
+
return [];
|
|
34
|
+
}
|
|
35
|
+
if (availableAgents.length === 1) {
|
|
36
|
+
const agent = availableAgents[0];
|
|
37
|
+
const effectiveness = this.calculateEffectiveness(agent, task);
|
|
38
|
+
const participation = {
|
|
39
|
+
agentId: agent.id,
|
|
40
|
+
agentType: agent.type,
|
|
41
|
+
participationLevel: 1,
|
|
42
|
+
effectivenessScore: effectiveness,
|
|
43
|
+
redundancyPenalty: 0,
|
|
44
|
+
utility: effectiveness
|
|
45
|
+
};
|
|
46
|
+
this.participations.set(agent.id, participation);
|
|
47
|
+
return [participation];
|
|
48
|
+
}
|
|
49
|
+
this.initializeParticipations(availableAgents, task);
|
|
50
|
+
let converged = false;
|
|
51
|
+
let iteration = 0;
|
|
52
|
+
for (iteration = 0; iteration < this.config.maxIterations; iteration++) {
|
|
53
|
+
const prevState = this.snapshotParticipations();
|
|
54
|
+
for (const agent of availableAgents) {
|
|
55
|
+
this.updateAgentParticipation(agent, task, availableAgents);
|
|
56
|
+
}
|
|
57
|
+
this.normalizeParticipations();
|
|
58
|
+
if (this.hasConverged(prevState)) {
|
|
59
|
+
converged = true;
|
|
60
|
+
break;
|
|
61
|
+
}
|
|
62
|
+
this.iterationHistory.push({
|
|
63
|
+
iteration,
|
|
64
|
+
totalUtility: this.calculateTotalUtility()
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
if (!converged) {
|
|
68
|
+
console.debug(
|
|
69
|
+
`Equilibrium did not converge after ${this.config.maxIterations} iterations`
|
|
70
|
+
);
|
|
71
|
+
}
|
|
72
|
+
return [...this.participations.values()].filter((p) => p.participationLevel > 0).sort((a, b) => b.participationLevel - a.participationLevel);
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Select top N agents based on equilibrium
|
|
76
|
+
*
|
|
77
|
+
* @param task - The task to allocate
|
|
78
|
+
* @param availableAgents - Pool of available agents
|
|
79
|
+
* @param n - Maximum number of agents to select
|
|
80
|
+
* @returns Selected agents (may be less than n if not enough qualify)
|
|
81
|
+
*/
|
|
82
|
+
async selectTopAgents(task, availableAgents, n) {
|
|
83
|
+
const equilibrium = await this.findEquilibrium(task, availableAgents);
|
|
84
|
+
return equilibrium.slice(0, n).map((p) => availableAgents.find((a) => a.id === p.agentId)).filter(Boolean);
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Get iteration history for analysis/debugging
|
|
88
|
+
*/
|
|
89
|
+
getIterationHistory() {
|
|
90
|
+
return [...this.iterationHistory];
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Get current participation state
|
|
94
|
+
*/
|
|
95
|
+
getParticipations() {
|
|
96
|
+
return new Map(this.participations);
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Get configuration
|
|
100
|
+
*/
|
|
101
|
+
getConfig() {
|
|
102
|
+
return { ...this.config };
|
|
103
|
+
}
|
|
104
|
+
// ==========================================================================
|
|
105
|
+
// Initialization
|
|
106
|
+
// ==========================================================================
|
|
107
|
+
/**
|
|
108
|
+
* Initialize participation levels uniformly across agents
|
|
109
|
+
*/
|
|
110
|
+
initializeParticipations(agents, task) {
|
|
111
|
+
this.participations.clear();
|
|
112
|
+
const uniformLevel = 1 / agents.length;
|
|
113
|
+
for (const agent of agents) {
|
|
114
|
+
const effectiveness = this.calculateEffectiveness(agent, task);
|
|
115
|
+
this.participations.set(agent.id, {
|
|
116
|
+
agentId: agent.id,
|
|
117
|
+
agentType: agent.type,
|
|
118
|
+
participationLevel: uniformLevel,
|
|
119
|
+
effectivenessScore: effectiveness,
|
|
120
|
+
redundancyPenalty: 0,
|
|
121
|
+
utility: 0
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
// ==========================================================================
|
|
126
|
+
// Gradient Update
|
|
127
|
+
// ==========================================================================
|
|
128
|
+
/**
|
|
129
|
+
* Update a single agent's participation based on game dynamics
|
|
130
|
+
*/
|
|
131
|
+
updateAgentParticipation(agent, task, allAgents) {
|
|
132
|
+
const participation = this.participations.get(agent.id);
|
|
133
|
+
if (!participation) return;
|
|
134
|
+
const utility = participation.effectivenessScore * participation.participationLevel;
|
|
135
|
+
const competition = this.calculateCompetition(agent, allAgents);
|
|
136
|
+
participation.redundancyPenalty = competition * 0.5;
|
|
137
|
+
const netUtility = utility - participation.redundancyPenalty;
|
|
138
|
+
participation.utility = netUtility;
|
|
139
|
+
const delta = this.config.learningRate * (netUtility - competition);
|
|
140
|
+
participation.participationLevel = Math.max(
|
|
141
|
+
0,
|
|
142
|
+
Math.min(1, participation.participationLevel + delta)
|
|
143
|
+
);
|
|
144
|
+
if (participation.participationLevel < this.config.minParticipation) {
|
|
145
|
+
participation.participationLevel = 0;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Normalize participation levels to sum to at most 1
|
|
150
|
+
* This prevents runaway accumulation
|
|
151
|
+
*/
|
|
152
|
+
normalizeParticipations() {
|
|
153
|
+
const total = [...this.participations.values()].reduce(
|
|
154
|
+
(sum, p) => sum + p.participationLevel,
|
|
155
|
+
0
|
|
156
|
+
);
|
|
157
|
+
if (total > 1) {
|
|
158
|
+
for (const p of this.participations.values()) {
|
|
159
|
+
p.participationLevel = p.participationLevel / total;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
// ==========================================================================
|
|
164
|
+
// Effectiveness Calculation
|
|
165
|
+
// ==========================================================================
|
|
166
|
+
/**
|
|
167
|
+
* Calculate how effective an agent is for a given task
|
|
168
|
+
*
|
|
169
|
+
* Combines:
|
|
170
|
+
* - Capability match (70% weight)
|
|
171
|
+
* - Type boost for task keywords (30% weight)
|
|
172
|
+
*/
|
|
173
|
+
calculateEffectiveness(agent, task) {
|
|
174
|
+
const requiredCaps = new Set(task.requiredCapabilities);
|
|
175
|
+
const agentCaps = new Set(agent.capabilities || []);
|
|
176
|
+
let matchCount = 0;
|
|
177
|
+
for (const cap of requiredCaps) {
|
|
178
|
+
if (agentCaps.has(cap)) matchCount++;
|
|
179
|
+
}
|
|
180
|
+
const capabilityMatch = requiredCaps.size > 0 ? matchCount / requiredCaps.size : 0.5;
|
|
181
|
+
const typeBoost = this.getTypeBoost(agent.type, task);
|
|
182
|
+
return capabilityMatch * 0.7 + typeBoost * 0.3;
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Get type-based boost for matching task keywords
|
|
186
|
+
*/
|
|
187
|
+
getTypeBoost(agentType, task) {
|
|
188
|
+
const desc = task.description.toLowerCase();
|
|
189
|
+
const boostMap = {
|
|
190
|
+
review: [AgentType.REVIEWER],
|
|
191
|
+
test: [AgentType.TESTER],
|
|
192
|
+
code: [AgentType.CODER],
|
|
193
|
+
implement: [AgentType.CODER],
|
|
194
|
+
document: [AgentType.DOCUMENTER],
|
|
195
|
+
plan: [AgentType.PLANNER],
|
|
196
|
+
optimize: [AgentType.OPTIMIZER],
|
|
197
|
+
research: [AgentType.RESEARCHER],
|
|
198
|
+
analyze: [AgentType.ANALYST],
|
|
199
|
+
architect: [AgentType.ARCHITECT],
|
|
200
|
+
design: [AgentType.ARCHITECT],
|
|
201
|
+
coordinate: [AgentType.COORDINATOR]
|
|
202
|
+
};
|
|
203
|
+
for (const [keyword, types] of Object.entries(boostMap)) {
|
|
204
|
+
if (desc.includes(keyword) && types.includes(agentType)) {
|
|
205
|
+
return 1;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
return 0.3;
|
|
209
|
+
}
|
|
210
|
+
// ==========================================================================
|
|
211
|
+
// Competition Calculation
|
|
212
|
+
// ==========================================================================
|
|
213
|
+
/**
|
|
214
|
+
* Calculate competition pressure from other agents
|
|
215
|
+
*
|
|
216
|
+
* Competition increases with:
|
|
217
|
+
* - Number of other agents with overlapping capabilities
|
|
218
|
+
* - Participation levels of overlapping agents
|
|
219
|
+
*/
|
|
220
|
+
calculateCompetition(agent, allAgents) {
|
|
221
|
+
let competition = 0;
|
|
222
|
+
for (const other of allAgents) {
|
|
223
|
+
if (other.id === agent.id) continue;
|
|
224
|
+
const overlap = this.capabilityOverlap(agent, other);
|
|
225
|
+
const otherParticipation = this.participations.get(other.id);
|
|
226
|
+
if (otherParticipation) {
|
|
227
|
+
competition += overlap * otherParticipation.participationLevel;
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
return competition;
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Calculate capability overlap between two agents
|
|
234
|
+
*
|
|
235
|
+
* Returns a value from 0 (no overlap) to 1 (complete overlap)
|
|
236
|
+
*/
|
|
237
|
+
capabilityOverlap(a, b) {
|
|
238
|
+
const capsA = new Set(a.capabilities || []);
|
|
239
|
+
const capsB = new Set(b.capabilities || []);
|
|
240
|
+
if (capsA.size === 0 || capsB.size === 0) {
|
|
241
|
+
return a.type === b.type ? 0.8 : 0.2;
|
|
242
|
+
}
|
|
243
|
+
let overlap = 0;
|
|
244
|
+
for (const cap of capsA) {
|
|
245
|
+
if (capsB.has(cap)) overlap++;
|
|
246
|
+
}
|
|
247
|
+
return overlap / Math.max(capsA.size, capsB.size);
|
|
248
|
+
}
|
|
249
|
+
// ==========================================================================
|
|
250
|
+
// Convergence Detection
|
|
251
|
+
// ==========================================================================
|
|
252
|
+
/**
|
|
253
|
+
* Create snapshot of current participation levels
|
|
254
|
+
*/
|
|
255
|
+
snapshotParticipations() {
|
|
256
|
+
const snapshot = /* @__PURE__ */ new Map();
|
|
257
|
+
for (const [id, p] of this.participations) {
|
|
258
|
+
snapshot.set(id, p.participationLevel);
|
|
259
|
+
}
|
|
260
|
+
return snapshot;
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Check if participation levels have converged
|
|
264
|
+
*/
|
|
265
|
+
hasConverged(prevState) {
|
|
266
|
+
let maxDelta = 0;
|
|
267
|
+
for (const [id, p] of this.participations) {
|
|
268
|
+
const prev = prevState.get(id) ?? 0;
|
|
269
|
+
const delta = Math.abs(p.participationLevel - prev);
|
|
270
|
+
maxDelta = Math.max(maxDelta, delta);
|
|
271
|
+
}
|
|
272
|
+
return maxDelta < this.config.convergenceThreshold;
|
|
273
|
+
}
|
|
274
|
+
// ==========================================================================
|
|
275
|
+
// Utility Calculation
|
|
276
|
+
// ==========================================================================
|
|
277
|
+
/**
|
|
278
|
+
* Calculate total utility across all agents
|
|
279
|
+
*/
|
|
280
|
+
calculateTotalUtility() {
|
|
281
|
+
return [...this.participations.values()].reduce(
|
|
282
|
+
(sum, p) => sum + p.utility,
|
|
283
|
+
0
|
|
284
|
+
);
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
function createAgentEquilibriumSelector(config) {
|
|
288
|
+
return new AgentEquilibriumSelector(config);
|
|
289
|
+
}
|
|
290
|
+
function createEquilibriumTask(id, description, options = {}) {
|
|
291
|
+
return {
|
|
292
|
+
id,
|
|
293
|
+
description,
|
|
294
|
+
requiredCapabilities: options.requiredCapabilities ?? [],
|
|
295
|
+
priority: options.priority ?? "medium",
|
|
296
|
+
complexity: options.complexity ?? 0.5
|
|
297
|
+
};
|
|
298
|
+
}
|
|
299
|
+
export {
|
|
300
|
+
AgentEquilibriumSelector,
|
|
301
|
+
createAgentEquilibriumSelector,
|
|
302
|
+
createEquilibriumTask
|
|
303
|
+
};
|
|
304
|
+
//# sourceMappingURL=agent-equilibrium.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-equilibrium.js","sources":["../../src/equilibrium/agent-equilibrium.ts"],"sourcesContent":["/**\n * Agent Equilibrium Selector (SPEC-006a)\n *\n * Implements Nash equilibrium-based agent selection to replace heuristic\n * capability-matching in CoordinatorAgent. Uses game-theoretic principles\n * where agents adjust their participation levels based on task fit and\n * competition from other agents with similar capabilities.\n *\n * @module equilibrium/agent-equilibrium\n */\n\nimport { AgentType } from '../agents/types.js';\nimport { type AgentInfo } from '../agents/planner-agent.js';\n\n// ============================================================================\n// Types and Interfaces\n// ============================================================================\n\n/**\n * Agent participation in a task allocation game\n */\nexport interface AgentParticipation {\n /** Agent identifier */\n agentId: string;\n /** Agent type */\n agentType: AgentType;\n /** Participation level (0-1), equilibrium outcome */\n participationLevel: number;\n /** Effectiveness score for the task (0-1) */\n effectivenessScore: number;\n /** Penalty for overlapping with other agents */\n redundancyPenalty: number;\n /** Net utility from participation */\n utility: number;\n}\n\n/**\n * Configuration for equilibrium computation\n */\nexport interface EquilibriumConfig {\n /** Learning rate for gradient updates (default: 0.1) */\n learningRate: number;\n /** Maximum iterations before stopping (default: 100) */\n maxIterations: number;\n /** Convergence threshold for participation changes (default: 0.001) */\n convergenceThreshold: number;\n /** Minimum participation level before collapsing to 0 (default: 0.01) */\n minParticipation: number;\n}\n\n/**\n * Task definition for equilibrium selection\n */\nexport interface Task {\n /** Unique task identifier */\n id: string;\n /** Task description */\n description: string;\n /** Required capabilities for the task */\n requiredCapabilities: string[];\n /** Task priority */\n priority: 'low' | 'medium' | 'high' | 'critical';\n /** Task complexity (0-1) */\n complexity: number;\n}\n\n/**\n * Equilibrium computation result\n */\nexport interface EquilibriumResult {\n /** Participating agents sorted by participation level */\n participants: AgentParticipation[];\n /** Number of iterations to converge */\n iterations: number;\n /** Whether equilibrium was reached */\n converged: boolean;\n /** Total utility at equilibrium */\n totalUtility: number;\n}\n\n// ============================================================================\n// Agent Equilibrium Selector\n// ============================================================================\n\n/**\n * AgentEquilibriumSelector\n *\n * Computes Nash equilibrium for agent selection using iterative gradient\n * updates. Each agent adjusts its participation level based on:\n * - Effectiveness: How well the agent matches the task requirements\n * - Competition: Overlap with other participating agents\n * - Utility: Net benefit from participating\n *\n * Dominated agents (those with lower effectiveness and high overlap)\n * naturally collapse to zero participation, leaving only the most\n * suitable agents.\n *\n * @example\n * ```typescript\n * const selector = new AgentEquilibriumSelector();\n * const selected = await selector.selectTopAgents(task, agents, 3);\n * ```\n */\nexport class AgentEquilibriumSelector {\n private config: EquilibriumConfig;\n private participations: Map<string, AgentParticipation>;\n private iterationHistory: Array<{ iteration: number; totalUtility: number }>;\n\n constructor(config: Partial<EquilibriumConfig> = {}) {\n this.config = {\n learningRate: 0.1,\n maxIterations: 100,\n convergenceThreshold: 0.001,\n minParticipation: 0.01,\n ...config,\n };\n this.participations = new Map();\n this.iterationHistory = [];\n }\n\n // ==========================================================================\n // Public API\n // ==========================================================================\n\n /**\n * Find Nash equilibrium for agent selection\n *\n * Each agent adjusts participation based on task match and competition.\n * Returns agents with positive participation, sorted by level.\n *\n * @param task - The task to allocate\n * @param availableAgents - Pool of available agents\n * @returns Agents with positive participation at equilibrium\n */\n async findEquilibrium(\n task: Task,\n availableAgents: AgentInfo[]\n ): Promise<AgentParticipation[]> {\n // Reset state for new computation\n this.iterationHistory = [];\n\n // Handle edge cases\n if (availableAgents.length === 0) {\n return [];\n }\n\n if (availableAgents.length === 1) {\n // Single agent case - no competition\n const agent = availableAgents[0];\n const effectiveness = this.calculateEffectiveness(agent, task);\n const participation: AgentParticipation = {\n agentId: agent.id,\n agentType: agent.type,\n participationLevel: 1.0,\n effectivenessScore: effectiveness,\n redundancyPenalty: 0,\n utility: effectiveness,\n };\n this.participations.set(agent.id, participation);\n return [participation];\n }\n\n // 1. Initialize participation levels uniformly\n this.initializeParticipations(availableAgents, task);\n\n // 2. Iterate until convergence or max iterations\n let converged = false;\n let iteration = 0;\n\n for (iteration = 0; iteration < this.config.maxIterations; iteration++) {\n const prevState = this.snapshotParticipations();\n\n // Update each agent's participation\n for (const agent of availableAgents) {\n this.updateAgentParticipation(agent, task, availableAgents);\n }\n\n // Normalize participation levels to prevent runaway values\n this.normalizeParticipations();\n\n // Check convergence\n if (this.hasConverged(prevState)) {\n converged = true;\n break;\n }\n\n // Record history\n this.iterationHistory.push({\n iteration,\n totalUtility: this.calculateTotalUtility(),\n });\n }\n\n // Log convergence info\n if (!converged) {\n console.debug(\n `Equilibrium did not converge after ${this.config.maxIterations} iterations`\n );\n }\n\n // 3. Return agents with positive participation, sorted by level\n return [...this.participations.values()]\n .filter(p => p.participationLevel > 0)\n .sort((a, b) => b.participationLevel - a.participationLevel);\n }\n\n /**\n * Select top N agents based on equilibrium\n *\n * @param task - The task to allocate\n * @param availableAgents - Pool of available agents\n * @param n - Maximum number of agents to select\n * @returns Selected agents (may be less than n if not enough qualify)\n */\n async selectTopAgents(\n task: Task,\n availableAgents: AgentInfo[],\n n: number\n ): Promise<AgentInfo[]> {\n const equilibrium = await this.findEquilibrium(task, availableAgents);\n return equilibrium\n .slice(0, n)\n .map(p => availableAgents.find(a => a.id === p.agentId)!)\n .filter(Boolean);\n }\n\n /**\n * Get iteration history for analysis/debugging\n */\n getIterationHistory(): Array<{ iteration: number; totalUtility: number }> {\n return [...this.iterationHistory];\n }\n\n /**\n * Get current participation state\n */\n getParticipations(): Map<string, AgentParticipation> {\n return new Map(this.participations);\n }\n\n /**\n * Get configuration\n */\n getConfig(): EquilibriumConfig {\n return { ...this.config };\n }\n\n // ==========================================================================\n // Initialization\n // ==========================================================================\n\n /**\n * Initialize participation levels uniformly across agents\n */\n private initializeParticipations(agents: AgentInfo[], task: Task): void {\n this.participations.clear();\n const uniformLevel = 1.0 / agents.length;\n\n for (const agent of agents) {\n const effectiveness = this.calculateEffectiveness(agent, task);\n this.participations.set(agent.id, {\n agentId: agent.id,\n agentType: agent.type,\n participationLevel: uniformLevel,\n effectivenessScore: effectiveness,\n redundancyPenalty: 0,\n utility: 0,\n });\n }\n }\n\n // ==========================================================================\n // Gradient Update\n // ==========================================================================\n\n /**\n * Update a single agent's participation based on game dynamics\n */\n private updateAgentParticipation(\n agent: AgentInfo,\n task: Task,\n allAgents: AgentInfo[]\n ): void {\n const participation = this.participations.get(agent.id);\n if (!participation) return;\n\n // Calculate utility: effectiveness * participation (returns from participating)\n const utility =\n participation.effectivenessScore * participation.participationLevel;\n\n // Calculate competition from similar agents (costs from competition)\n const competition = this.calculateCompetition(agent, allAgents);\n\n // Calculate redundancy penalty\n participation.redundancyPenalty = competition * 0.5;\n\n // Net utility (marginal benefit of participating)\n const netUtility = utility - participation.redundancyPenalty;\n participation.utility = netUtility;\n\n // Gradient update toward equilibrium\n // Agent increases participation if net utility exceeds competition\n // Agent decreases participation if competition dominates\n const delta = this.config.learningRate * (netUtility - competition);\n\n participation.participationLevel = Math.max(\n 0,\n Math.min(1, participation.participationLevel + delta)\n );\n\n // Dominated agents collapse to zero (below threshold)\n if (participation.participationLevel < this.config.minParticipation) {\n participation.participationLevel = 0;\n }\n }\n\n /**\n * Normalize participation levels to sum to at most 1\n * This prevents runaway accumulation\n */\n private normalizeParticipations(): void {\n const total = [...this.participations.values()].reduce(\n (sum, p) => sum + p.participationLevel,\n 0\n );\n\n if (total > 1) {\n for (const p of this.participations.values()) {\n p.participationLevel = p.participationLevel / total;\n }\n }\n }\n\n // ==========================================================================\n // Effectiveness Calculation\n // ==========================================================================\n\n /**\n * Calculate how effective an agent is for a given task\n *\n * Combines:\n * - Capability match (70% weight)\n * - Type boost for task keywords (30% weight)\n */\n calculateEffectiveness(agent: AgentInfo, task: Task): number {\n // Score based on capability match\n const requiredCaps = new Set(task.requiredCapabilities);\n const agentCaps = new Set(agent.capabilities || []);\n\n let matchCount = 0;\n for (const cap of requiredCaps) {\n if (agentCaps.has(cap)) matchCount++;\n }\n\n const capabilityMatch =\n requiredCaps.size > 0 ? matchCount / requiredCaps.size : 0.5;\n\n // Boost for agent type matching task keywords\n const typeBoost = this.getTypeBoost(agent.type, task);\n\n // Combine with weights\n return capabilityMatch * 0.7 + typeBoost * 0.3;\n }\n\n /**\n * Get type-based boost for matching task keywords\n */\n getTypeBoost(agentType: AgentType, task: Task): number {\n const desc = task.description.toLowerCase();\n\n // Map keywords to relevant agent types\n const boostMap: Record<string, AgentType[]> = {\n review: [AgentType.REVIEWER],\n test: [AgentType.TESTER],\n code: [AgentType.CODER],\n implement: [AgentType.CODER],\n document: [AgentType.DOCUMENTER],\n plan: [AgentType.PLANNER],\n optimize: [AgentType.OPTIMIZER],\n research: [AgentType.RESEARCHER],\n analyze: [AgentType.ANALYST],\n architect: [AgentType.ARCHITECT],\n design: [AgentType.ARCHITECT],\n coordinate: [AgentType.COORDINATOR],\n };\n\n for (const [keyword, types] of Object.entries(boostMap)) {\n if (desc.includes(keyword) && types.includes(agentType)) {\n return 1.0;\n }\n }\n\n // Default low boost for non-matching types\n return 0.3;\n }\n\n // ==========================================================================\n // Competition Calculation\n // ==========================================================================\n\n /**\n * Calculate competition pressure from other agents\n *\n * Competition increases with:\n * - Number of other agents with overlapping capabilities\n * - Participation levels of overlapping agents\n */\n calculateCompetition(agent: AgentInfo, allAgents: AgentInfo[]): number {\n let competition = 0;\n\n for (const other of allAgents) {\n if (other.id === agent.id) continue;\n\n const overlap = this.capabilityOverlap(agent, other);\n const otherParticipation = this.participations.get(other.id);\n if (otherParticipation) {\n competition += overlap * otherParticipation.participationLevel;\n }\n }\n\n return competition;\n }\n\n /**\n * Calculate capability overlap between two agents\n *\n * Returns a value from 0 (no overlap) to 1 (complete overlap)\n */\n capabilityOverlap(a: AgentInfo, b: AgentInfo): number {\n const capsA = new Set(a.capabilities || []);\n const capsB = new Set(b.capabilities || []);\n\n if (capsA.size === 0 || capsB.size === 0) {\n // No capabilities defined - use type similarity as proxy\n return a.type === b.type ? 0.8 : 0.2;\n }\n\n let overlap = 0;\n for (const cap of capsA) {\n if (capsB.has(cap)) overlap++;\n }\n\n // Jaccard-like coefficient using max instead of union\n return overlap / Math.max(capsA.size, capsB.size);\n }\n\n // ==========================================================================\n // Convergence Detection\n // ==========================================================================\n\n /**\n * Create snapshot of current participation levels\n */\n private snapshotParticipations(): Map<string, number> {\n const snapshot = new Map<string, number>();\n for (const [id, p] of this.participations) {\n snapshot.set(id, p.participationLevel);\n }\n return snapshot;\n }\n\n /**\n * Check if participation levels have converged\n */\n private hasConverged(prevState: Map<string, number>): boolean {\n let maxDelta = 0;\n\n for (const [id, p] of this.participations) {\n const prev = prevState.get(id) ?? 0;\n const delta = Math.abs(p.participationLevel - prev);\n maxDelta = Math.max(maxDelta, delta);\n }\n\n return maxDelta < this.config.convergenceThreshold;\n }\n\n // ==========================================================================\n // Utility Calculation\n // ==========================================================================\n\n /**\n * Calculate total utility across all agents\n */\n calculateTotalUtility(): number {\n return [...this.participations.values()].reduce(\n (sum, p) => sum + p.utility,\n 0\n );\n }\n}\n\n// ============================================================================\n// Factory Functions\n// ============================================================================\n\n/**\n * Create a new AgentEquilibriumSelector with optional configuration\n */\nexport function createAgentEquilibriumSelector(\n config?: Partial<EquilibriumConfig>\n): AgentEquilibriumSelector {\n return new AgentEquilibriumSelector(config);\n}\n\n/**\n * Create a task for equilibrium selection\n */\nexport function createEquilibriumTask(\n id: string,\n description: string,\n options: {\n requiredCapabilities?: string[];\n priority?: 'low' | 'medium' | 'high' | 'critical';\n complexity?: number;\n } = {}\n): Task {\n return {\n id,\n description,\n requiredCapabilities: options.requiredCapabilities ?? [],\n priority: options.priority ?? 'medium',\n complexity: options.complexity ?? 0.5,\n };\n}\n"],"names":[],"mappings":"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"}
|