claude-flow-novice 1.3.0 → 1.3.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-flow-novice/preferences/generation.json +147 -0
- package/.claude-flow-novice/preferences/language-configs/javascript.json +51 -0
- package/.claude-flow-novice/preferences/language-configs/python.json +50 -0
- package/.claude-flow-novice/preferences/language-configs/rust.json +237 -0
- package/.claude-flow-novice/preferences/language-configs/typescript.json +54 -0
- package/.claude-flow-novice/preferences/project-local.json +91 -0
- package/.claude-flow-novice/preferences/resource-delegation.json +120 -0
- package/.claude-flow-novice/preferences/team-shared.json +195 -0
- package/.claude-flow-novice/preferences/user-global.json +247 -0
- package/.claude-flow-novice/templates/claude-md-templates/CLAUDE-JAVASCRIPT.md +769 -0
- package/.claude-flow-novice/templates/claude-md-templates/CLAUDE-PYTHON.md +1214 -0
- package/.claude-flow-novice/templates/claude-md-templates/CLAUDE-RUST.md +475 -0
- package/.claude-flow-novice/templates/claude-md-templates/CLAUDE-TYPESCRIPT.md +851 -0
- package/.claude-flow-novice/templates/claude-md-templates/README.md +263 -0
- package/CLAUDE.md +81 -0
- package/README-NPM.md +0 -0
- package/package.json +11 -7
- package/scripts/build/README.md +167 -0
- package/scripts/build/build-config.js +27 -0
- package/scripts/build/build-prompt-copier.sh +30 -0
- package/scripts/build/performance-monitor.js +869 -0
- package/scripts/build/prepare-publish.js +150 -0
- package/scripts/build/typescript-fixer.js +621 -0
- package/scripts/build/unified-builder.sh +428 -0
- package/scripts/build/update-bin-version.js +32 -0
- package/scripts/dev/README.md +264 -0
- package/scripts/dev/claude-flow-wrapper.sh +35 -0
- package/scripts/dev/claude-monitor.py +419 -0
- package/scripts/dev/claude-sparc.sh +562 -0
- package/scripts/dev/claude-wrapper.sh +17 -0
- package/scripts/dev/demo-phase3-compliance.js +172 -0
- package/scripts/dev/demo-task-system.ts +224 -0
- package/scripts/dev/deployment-validator.js +315 -0
- package/scripts/dev/spawn-claude-terminal.sh +32 -0
- package/scripts/dev/start-portal.sh +506 -0
- package/scripts/dev/start-web-ui.js +15 -0
- package/scripts/dev/stop-portal.sh +311 -0
- package/scripts/dev/validate-examples.ts +288 -0
- package/scripts/dev/validate-phase2.cjs +451 -0
- package/scripts/dev/validate-phase2.js +785 -0
- package/scripts/dev/validate-phase3.cjs +208 -0
- package/scripts/dev/validate-security-remediation.js +1 -0
- package/scripts/legacy/README.md +272 -0
- package/scripts/legacy/batch-fix-ts.sh +54 -0
- package/scripts/legacy/build-migration.sh +105 -0
- package/scripts/legacy/build-monitor.js +209 -0
- package/scripts/legacy/build-with-filter.sh +84 -0
- package/scripts/legacy/build-workaround.sh +71 -0
- package/scripts/legacy/fix-ts-advanced.js +358 -0
- package/scripts/legacy/fix-ts-final.sh +50 -0
- package/scripts/legacy/fix-ts-targeted.sh +49 -0
- package/scripts/legacy/fix-typescript-errors.js +305 -0
- package/scripts/legacy/force-build.sh +63 -0
- package/scripts/legacy/optimize-performance.js +400 -0
- package/scripts/legacy/performance-monitor.js +263 -0
- package/scripts/legacy/performance-monitoring.js +532 -0
- package/scripts/legacy/performance-test-runner.js +645 -0
- package/scripts/legacy/quick-fix-ts.js +281 -0
- package/scripts/legacy/safe-build.sh +63 -0
- package/scripts/migration/README.md +434 -0
- package/scripts/migration/install-arm64.js +78 -0
- package/scripts/migration/install.js +83 -0
- package/scripts/migration/migrate-hooks.js +173 -0
- package/scripts/migration/migration-examples.ts +318 -0
- package/scripts/optimization/build-optimizer.js +438 -0
- package/scripts/optimization/config-validator.js +761 -0
- package/scripts/optimization/test-optimization.js +432 -0
- package/scripts/optimization/unified-activation.js +839 -0
- package/scripts/performance/ACTIVATION_COMMANDS.md +292 -0
- package/scripts/performance/sqlite-enhanced-activation.sh +583 -0
- package/scripts/performance/test-enhanced-backend.sh +504 -0
- package/scripts/performance-test-runner.js +698 -0
- package/scripts/security/README.md +339 -0
- package/scripts/security/install-git-hooks.sh +132 -0
- package/scripts/security/ruv-swarm-safe.js +74 -0
- package/scripts/test/README.md +236 -0
- package/scripts/test/check-links.ts +274 -0
- package/scripts/test/check-performance-regression.ts +168 -0
- package/scripts/test/coverage-report.ts +692 -0
- package/scripts/test/generate-swarm-tests.js +633 -0
- package/scripts/test/integration-test-validation.cjs +253 -0
- package/scripts/test/load-test-swarm.js +576 -0
- package/scripts/test/run-phase3-compliance-tests.js +427 -0
- package/scripts/test/test-batch-tasks.ts +29 -0
- package/scripts/test/test-byzantine-resolution.js +246 -0
- package/scripts/test/test-claude-spawn-options.sh +63 -0
- package/scripts/test/test-cli-wizard.js +331 -0
- package/scripts/test/test-comprehensive.js +401 -0
- package/scripts/test/test-coordination-features.ts +238 -0
- package/scripts/test/test-fallback-systems.js +276 -0
- package/scripts/test/test-init-command.ts +302 -0
- package/scripts/test/test-mcp.ts +251 -0
- package/scripts/test/test-runner.ts +568 -0
- package/scripts/test/test-swarm-integration.sh +92 -0
- package/scripts/test/test-swarm.ts +142 -0
- package/scripts/test/validation-summary.ts +408 -0
- package/scripts/utils/README.md +261 -0
- package/scripts/utils/clean-build-artifacts.sh +94 -0
- package/scripts/utils/cleanup-root.sh +69 -0
- package/scripts/utils/fix-cliffy-imports.js +307 -0
- package/scripts/utils/fix-duplicate-imports.js +114 -0
- package/scripts/utils/fix-error-handling.cjs +70 -0
- package/scripts/utils/fix-import-paths.js +104 -0
- package/scripts/utils/fix-imports.js +116 -0
- package/scripts/utils/fix-shebang.js +78 -0
- package/scripts/utils/fix-test-modules.js +27 -0
- package/scripts/utils/fix-timezone-issue-246.js +200 -0
- package/scripts/utils/fix-ts-comprehensive.py +182 -0
- package/scripts/utils/fix-ts-targeted-batch.js +250 -0
- package/scripts/utils/remove-benchmark-conflicts.sh +140 -0
- package/scripts/utils/simple-test-fixer.js +190 -0
- package/scripts/utils/validate-metrics-structure.cjs +144 -0
- package/scripts/verify-mcp-server.js +86 -0
- package/src/cli/simple-commands/__tests__/agent.test.js +291 -0
- package/src/cli/simple-commands/__tests__/memory.test.js +8 -0
- package/src/cli/simple-commands/__tests__/swarm.test.js +371 -0
- package/src/cli/simple-commands/__tests__/task.test.js +8 -0
- package/src/cli/simple-commands/agent.js +216 -0
- package/src/cli/simple-commands/analysis.js +570 -0
- package/src/cli/simple-commands/automation-executor.js +1603 -0
- package/src/cli/simple-commands/automation.js +627 -0
- package/src/cli/simple-commands/batch-manager.js +338 -0
- package/src/cli/simple-commands/claude-telemetry.js +311 -0
- package/src/cli/simple-commands/claude-track.js +102 -0
- package/src/cli/simple-commands/concurrent-display.js +348 -0
- package/src/cli/simple-commands/config.js +319 -0
- package/src/cli/simple-commands/coordination.js +307 -0
- package/src/cli/simple-commands/enhanced-ui-views.js +654 -0
- package/src/cli/simple-commands/enhanced-webui-complete.js +1038 -0
- package/src/cli/simple-commands/fix-hook-variables.js +363 -0
- package/src/cli/simple-commands/github/gh-coordinator.js +605 -0
- package/src/cli/simple-commands/github/github-api.js +624 -0
- package/src/cli/simple-commands/github/init.js +543 -0
- package/src/cli/simple-commands/github.js +377 -0
- package/src/cli/simple-commands/goal.js +145 -0
- package/src/cli/simple-commands/hive-mind/auto-save-middleware.js +311 -0
- package/src/cli/simple-commands/hive-mind/communication.js +740 -0
- package/src/cli/simple-commands/hive-mind/core.js +1031 -0
- package/src/cli/simple-commands/hive-mind/db-optimizer.js +872 -0
- package/src/cli/simple-commands/hive-mind/mcp-wrapper.js +1364 -0
- package/src/cli/simple-commands/hive-mind/memory.js +1292 -0
- package/src/cli/simple-commands/hive-mind/performance-optimizer.js +618 -0
- package/src/cli/simple-commands/hive-mind/performance-test.js +373 -0
- package/src/cli/simple-commands/hive-mind/queen.js +809 -0
- package/src/cli/simple-commands/hive-mind/session-manager.js +1223 -0
- package/src/cli/simple-commands/hive-mind-optimize.js +361 -0
- package/src/cli/simple-commands/hive-mind-wizard.js +281 -0
- package/src/cli/simple-commands/hive-mind.js +3112 -0
- package/src/cli/simple-commands/hive.js +140 -0
- package/src/cli/simple-commands/hook-safety.js +671 -0
- package/src/cli/simple-commands/hooks.js +1268 -0
- package/src/cli/simple-commands/init/.claude/checkpoints/1756224542.json +7 -0
- package/src/cli/simple-commands/init/.claude/checkpoints/1756224544.json +8 -0
- package/src/cli/simple-commands/init/README.md +106 -0
- package/src/cli/simple-commands/init/VALIDATION_ROLLBACK.md +488 -0
- package/src/cli/simple-commands/init/agent-copier.js +347 -0
- package/src/cli/simple-commands/init/batch-init.js +663 -0
- package/src/cli/simple-commands/init/claude-commands/claude-flow-commands.js +438 -0
- package/src/cli/simple-commands/init/claude-commands/optimized-claude-flow-commands.js +876 -0
- package/src/cli/simple-commands/init/claude-commands/optimized-slash-commands.js +356 -0
- package/src/cli/simple-commands/init/claude-commands/optimized-sparc-commands.js +501 -0
- package/src/cli/simple-commands/init/claude-commands/slash-commands.js +57 -0
- package/src/cli/simple-commands/init/claude-commands/sparc-commands.js +296 -0
- package/src/cli/simple-commands/init/copy-revised-templates.js +175 -0
- package/src/cli/simple-commands/init/executable-wrapper.js +122 -0
- package/src/cli/simple-commands/init/gitignore-updater.js +137 -0
- package/src/cli/simple-commands/init/help.js +110 -0
- package/src/cli/simple-commands/init/hive-mind-init.js +749 -0
- package/src/cli/simple-commands/init/index.js +1953 -0
- package/src/cli/simple-commands/init/performance-monitor.js +344 -0
- package/src/cli/simple-commands/init/rollback/backup-manager.js +542 -0
- package/src/cli/simple-commands/init/rollback/index.js +399 -0
- package/src/cli/simple-commands/init/rollback/recovery-manager.js +778 -0
- package/src/cli/simple-commands/init/rollback/rollback-executor.js +521 -0
- package/src/cli/simple-commands/init/rollback/state-tracker.js +486 -0
- package/src/cli/simple-commands/init/sparc/roo-readme.js +61 -0
- package/src/cli/simple-commands/init/sparc/roomodes-config.js +102 -0
- package/src/cli/simple-commands/init/sparc/workflows.js +40 -0
- package/src/cli/simple-commands/init/sparc-structure.js +68 -0
- package/src/cli/simple-commands/init/template-copier.js +640 -0
- package/src/cli/simple-commands/init/templates/CLAUDE.md +1185 -0
- package/src/cli/simple-commands/init/templates/CLAUDE.md.optimized +265 -0
- package/src/cli/simple-commands/init/templates/claude-flow-universal +81 -0
- package/src/cli/simple-commands/init/templates/claude-flow.bat +18 -0
- package/src/cli/simple-commands/init/templates/claude-flow.ps1 +24 -0
- package/src/cli/simple-commands/init/templates/claude-md.js +1101 -0
- package/src/cli/simple-commands/init/templates/commands/analysis/bottleneck-detect.md +162 -0
- package/src/cli/simple-commands/init/templates/commands/automation/auto-agent.md +122 -0
- package/src/cli/simple-commands/init/templates/commands/coordination/swarm-init.md +85 -0
- package/src/cli/simple-commands/init/templates/commands/github/github-swarm.md +121 -0
- package/src/cli/simple-commands/init/templates/commands/helpers/standard-checkpoint-hooks.sh +179 -0
- package/src/cli/simple-commands/init/templates/commands/hooks/notification.md +113 -0
- package/src/cli/simple-commands/init/templates/commands/hooks/post-command.md +116 -0
- package/src/cli/simple-commands/init/templates/commands/hooks/post-edit.md +117 -0
- package/src/cli/simple-commands/init/templates/commands/hooks/post-task.md +112 -0
- package/src/cli/simple-commands/init/templates/commands/hooks/pre-command.md +113 -0
- package/src/cli/simple-commands/init/templates/commands/hooks/pre-edit.md +113 -0
- package/src/cli/simple-commands/init/templates/commands/hooks/pre-search.md +112 -0
- package/src/cli/simple-commands/init/templates/commands/hooks/pre-task.md +111 -0
- package/src/cli/simple-commands/init/templates/commands/hooks/session-end.md +118 -0
- package/src/cli/simple-commands/init/templates/commands/hooks/session-restore.md +118 -0
- package/src/cli/simple-commands/init/templates/commands/hooks/session-start.md +117 -0
- package/src/cli/simple-commands/init/templates/coordination-md.js +340 -0
- package/src/cli/simple-commands/init/templates/coordination.md +16 -0
- package/src/cli/simple-commands/init/templates/enhanced-templates.js +2347 -0
- package/src/cli/simple-commands/init/templates/github-safe-enhanced.js +331 -0
- package/src/cli/simple-commands/init/templates/github-safe.js +106 -0
- package/src/cli/simple-commands/init/templates/memory-bank-md.js +259 -0
- package/src/cli/simple-commands/init/templates/memory-bank.md +16 -0
- package/src/cli/simple-commands/init/templates/readme-files.js +72 -0
- package/src/cli/simple-commands/init/templates/safe-hook-patterns.js +430 -0
- package/src/cli/simple-commands/init/templates/settings.json +109 -0
- package/src/cli/simple-commands/init/templates/settings.json.enhanced +35 -0
- package/src/cli/simple-commands/init/templates/sparc-modes.js +1401 -0
- package/src/cli/simple-commands/init/templates/verification-claude-md.js +432 -0
- package/src/cli/simple-commands/init/validation/config-validator.js +354 -0
- package/src/cli/simple-commands/init/validation/health-checker.js +599 -0
- package/src/cli/simple-commands/init/validation/index.js +388 -0
- package/src/cli/simple-commands/init/validation/mode-validator.js +387 -0
- package/src/cli/simple-commands/init/validation/post-init-validator.js +390 -0
- package/src/cli/simple-commands/init/validation/pre-init-validator.js +290 -0
- package/src/cli/simple-commands/init/validation/test-runner.js +488 -0
- package/src/cli/simple-commands/init.js +4 -0
- package/src/cli/simple-commands/mcp-health.js +163 -0
- package/src/cli/simple-commands/mcp-integration-layer.js +689 -0
- package/src/cli/simple-commands/mcp.js +420 -0
- package/src/cli/simple-commands/memory-consolidation.js +631 -0
- package/src/cli/simple-commands/memory.js +345 -0
- package/src/cli/simple-commands/migrate-hooks.js +63 -0
- package/src/cli/simple-commands/monitor.js +417 -0
- package/src/cli/simple-commands/neural.js +148 -0
- package/src/cli/simple-commands/pair-autofix-only.js +755 -0
- package/src/cli/simple-commands/pair-basic.js +751 -0
- package/src/cli/simple-commands/pair-old.js +623 -0
- package/src/cli/simple-commands/pair-working.js +849 -0
- package/src/cli/simple-commands/pair.js +849 -0
- package/src/cli/simple-commands/performance-hooks.js +149 -0
- package/src/cli/simple-commands/performance-metrics.js +601 -0
- package/src/cli/simple-commands/process-ui-enhanced.js +821 -0
- package/src/cli/simple-commands/process-ui.js +274 -0
- package/src/cli/simple-commands/realtime-update-system.js +659 -0
- package/src/cli/simple-commands/sparc/architecture.js +1750 -0
- package/src/cli/simple-commands/sparc/commands.js +575 -0
- package/src/cli/simple-commands/sparc/completion.js +1831 -0
- package/src/cli/simple-commands/sparc/coordinator.js +1045 -0
- package/src/cli/simple-commands/sparc/index.js +321 -0
- package/src/cli/simple-commands/sparc/phase-base.js +430 -0
- package/src/cli/simple-commands/sparc/pseudocode.js +984 -0
- package/src/cli/simple-commands/sparc/refinement.js +1856 -0
- package/src/cli/simple-commands/sparc/specification.js +736 -0
- package/src/cli/simple-commands/sparc-modes/architect.js +125 -0
- package/src/cli/simple-commands/sparc-modes/ask.js +126 -0
- package/src/cli/simple-commands/sparc-modes/code.js +148 -0
- package/src/cli/simple-commands/sparc-modes/debug.js +112 -0
- package/src/cli/simple-commands/sparc-modes/devops.js +137 -0
- package/src/cli/simple-commands/sparc-modes/docs-writer.js +38 -0
- package/src/cli/simple-commands/sparc-modes/generic.js +34 -0
- package/src/cli/simple-commands/sparc-modes/index.js +201 -0
- package/src/cli/simple-commands/sparc-modes/integration.js +55 -0
- package/src/cli/simple-commands/sparc-modes/mcp.js +38 -0
- package/src/cli/simple-commands/sparc-modes/monitoring.js +38 -0
- package/src/cli/simple-commands/sparc-modes/optimization.js +38 -0
- package/src/cli/simple-commands/sparc-modes/security-review.js +130 -0
- package/src/cli/simple-commands/sparc-modes/sparc-orchestrator.js +167 -0
- package/src/cli/simple-commands/sparc-modes/spec-pseudocode.js +38 -0
- package/src/cli/simple-commands/sparc-modes/supabase-admin.js +149 -0
- package/src/cli/simple-commands/sparc-modes/swarm.js +436 -0
- package/src/cli/simple-commands/sparc-modes/tdd.js +112 -0
- package/src/cli/simple-commands/sparc-modes/tutorial.js +277 -0
- package/src/cli/simple-commands/sparc.js +530 -0
- package/src/cli/simple-commands/start-ui.js +147 -0
- package/src/cli/simple-commands/start-wrapper.js +285 -0
- package/src/cli/simple-commands/start.js +2 -0
- package/src/cli/simple-commands/status.js +303 -0
- package/src/cli/simple-commands/stream-chain-clean.js +221 -0
- package/src/cli/simple-commands/stream-chain-fixed.js +89 -0
- package/src/cli/simple-commands/stream-chain-real.js +408 -0
- package/src/cli/simple-commands/stream-chain-working.js +323 -0
- package/src/cli/simple-commands/stream-chain.js +491 -0
- package/src/cli/simple-commands/stream-processor.js +340 -0
- package/src/cli/simple-commands/swarm-executor.js +253 -0
- package/src/cli/simple-commands/swarm-metrics-integration.js +371 -0
- package/src/cli/simple-commands/swarm-ui.js +741 -0
- package/src/cli/simple-commands/swarm-webui-integration.js +311 -0
- package/src/cli/simple-commands/swarm.js +2277 -0
- package/src/cli/simple-commands/task.js +228 -0
- package/src/cli/simple-commands/templates/mle-star-workflow.json +294 -0
- package/src/cli/simple-commands/timestamp-fix.js +104 -0
- package/src/cli/simple-commands/token-tracker.js +372 -0
- package/src/cli/simple-commands/tool-execution-framework.js +555 -0
- package/src/cli/simple-commands/train-and-stream.js +354 -0
- package/src/cli/simple-commands/training-pipeline.js +874 -0
- package/src/cli/simple-commands/training.js +288 -0
- package/src/cli/simple-commands/verification-hooks.js +336 -0
- package/src/cli/simple-commands/verification-integration.js +464 -0
- package/src/cli/simple-commands/verification-training-integration.js +646 -0
- package/src/cli/simple-commands/verification.js +551 -0
- package/src/cli/simple-commands/web-server.js +929 -0
- package/src/cli/simple-commands/webui-validator.js +136 -0
- package/src/language/README.md +503 -0
- package/src/language/claude-md-generator.js +618 -0
- package/src/language/cli.js +422 -0
- package/src/language/example.js +347 -0
- package/src/language/integration-system.js +619 -0
- package/src/language/language-detector.js +581 -0
|
@@ -0,0 +1,809 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Queen Coordinator for Hive Mind System
|
|
3
|
+
* Strategic decision-making and swarm coordination
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import EventEmitter from 'events';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Queen types and their characteristics
|
|
10
|
+
*/
|
|
11
|
+
const QUEEN_TYPES = {
|
|
12
|
+
strategic: {
|
|
13
|
+
name: 'Strategic Queen',
|
|
14
|
+
traits: ['long-term planning', 'resource optimization', 'goal alignment'],
|
|
15
|
+
decisionWeight: 3,
|
|
16
|
+
consensusThreshold: 0.6,
|
|
17
|
+
},
|
|
18
|
+
tactical: {
|
|
19
|
+
name: 'Tactical Queen',
|
|
20
|
+
traits: ['task prioritization', 'workflow optimization', 'rapid response'],
|
|
21
|
+
decisionWeight: 2,
|
|
22
|
+
consensusThreshold: 0.5,
|
|
23
|
+
},
|
|
24
|
+
adaptive: {
|
|
25
|
+
name: 'Adaptive Queen',
|
|
26
|
+
traits: ['learning', 'pattern recognition', 'strategy evolution'],
|
|
27
|
+
decisionWeight: 2.5,
|
|
28
|
+
consensusThreshold: 0.55,
|
|
29
|
+
},
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* QueenCoordinator class
|
|
34
|
+
*/
|
|
35
|
+
export class QueenCoordinator extends EventEmitter {
|
|
36
|
+
constructor(config = {}) {
|
|
37
|
+
super();
|
|
38
|
+
|
|
39
|
+
this.config = {
|
|
40
|
+
swarmId: config.swarmId,
|
|
41
|
+
type: config.type || 'strategic',
|
|
42
|
+
objective: config.objective || '',
|
|
43
|
+
...QUEEN_TYPES[config.type || 'strategic'],
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
this.state = {
|
|
47
|
+
status: 'initializing',
|
|
48
|
+
decisionsCount: 0,
|
|
49
|
+
strategiesExecuted: 0,
|
|
50
|
+
learningData: new Map(),
|
|
51
|
+
currentStrategy: null,
|
|
52
|
+
taskQueue: [],
|
|
53
|
+
workerAssignments: new Map(),
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
this.strategies = {
|
|
57
|
+
divide_and_conquer: this._divideAndConquerStrategy.bind(this),
|
|
58
|
+
parallel_execution: this._parallelExecutionStrategy.bind(this),
|
|
59
|
+
sequential_refinement: this._sequentialRefinementStrategy.bind(this),
|
|
60
|
+
consensus_driven: this._consensusDrivenStrategy.bind(this),
|
|
61
|
+
adaptive_learning: this._adaptiveLearningStrategy.bind(this),
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
this._initialize();
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Initialize queen coordinator
|
|
69
|
+
*/
|
|
70
|
+
_initialize() {
|
|
71
|
+
this.state.status = 'active';
|
|
72
|
+
this.emit('queen:initialized', {
|
|
73
|
+
type: this.config.type,
|
|
74
|
+
traits: this.config.traits,
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Analyze objective and create strategic plan
|
|
80
|
+
*/
|
|
81
|
+
async analyzeObjective(objective) {
|
|
82
|
+
const analysis = {
|
|
83
|
+
objective,
|
|
84
|
+
complexity: this._assessComplexity(objective),
|
|
85
|
+
requiredCapabilities: this._identifyRequiredCapabilities(objective),
|
|
86
|
+
estimatedTasks: this._estimateTaskCount(objective),
|
|
87
|
+
recommendedStrategy: this._selectStrategy(objective),
|
|
88
|
+
resourceRequirements: this._estimateResources(objective),
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
// Store analysis for learning
|
|
92
|
+
this.state.learningData.set('objective_analysis', analysis);
|
|
93
|
+
|
|
94
|
+
this.emit('objective:analyzed', analysis);
|
|
95
|
+
return analysis;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Assess complexity of objective
|
|
100
|
+
*/
|
|
101
|
+
_assessComplexity(objective) {
|
|
102
|
+
const complexityFactors = {
|
|
103
|
+
length: objective.length > 100 ? 2 : 1,
|
|
104
|
+
keywords: this._countComplexityKeywords(objective),
|
|
105
|
+
components: this._identifyComponents(objective).length,
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
const score = Object.values(complexityFactors).reduce((a, b) => a + b, 0);
|
|
109
|
+
|
|
110
|
+
if (score <= 3) return 'low';
|
|
111
|
+
if (score <= 6) return 'medium';
|
|
112
|
+
if (score <= 9) return 'high';
|
|
113
|
+
return 'very_high';
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Count complexity keywords
|
|
118
|
+
*/
|
|
119
|
+
_countComplexityKeywords(text) {
|
|
120
|
+
const complexKeywords = [
|
|
121
|
+
'complex',
|
|
122
|
+
'advanced',
|
|
123
|
+
'enterprise',
|
|
124
|
+
'distributed',
|
|
125
|
+
'scalable',
|
|
126
|
+
'microservices',
|
|
127
|
+
'architecture',
|
|
128
|
+
'integration',
|
|
129
|
+
'optimization',
|
|
130
|
+
'security',
|
|
131
|
+
'performance',
|
|
132
|
+
'concurrent',
|
|
133
|
+
'real-time',
|
|
134
|
+
];
|
|
135
|
+
|
|
136
|
+
const lowerText = text.toLowerCase();
|
|
137
|
+
return complexKeywords.filter((keyword) => lowerText.includes(keyword)).length;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* Identify components in objective
|
|
142
|
+
*/
|
|
143
|
+
_identifyComponents(objective) {
|
|
144
|
+
const components = [];
|
|
145
|
+
const componentKeywords = {
|
|
146
|
+
backend: ['api', 'server', 'backend', 'database', 'service'],
|
|
147
|
+
frontend: ['ui', 'frontend', 'interface', 'client', 'web'],
|
|
148
|
+
data: ['database', 'data', 'storage', 'cache', 'persistence'],
|
|
149
|
+
auth: ['auth', 'security', 'login', 'permission', 'access'],
|
|
150
|
+
testing: ['test', 'quality', 'validation', 'verify'],
|
|
151
|
+
deployment: ['deploy', 'ci/cd', 'docker', 'kubernetes'],
|
|
152
|
+
monitoring: ['monitor', 'logging', 'metrics', 'observability'],
|
|
153
|
+
};
|
|
154
|
+
|
|
155
|
+
const lowerObjective = objective.toLowerCase();
|
|
156
|
+
|
|
157
|
+
Object.entries(componentKeywords).forEach(([component, keywords]) => {
|
|
158
|
+
if (keywords.some((keyword) => lowerObjective.includes(keyword))) {
|
|
159
|
+
components.push(component);
|
|
160
|
+
}
|
|
161
|
+
});
|
|
162
|
+
|
|
163
|
+
return components;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
/**
|
|
167
|
+
* Identify required capabilities
|
|
168
|
+
*/
|
|
169
|
+
_identifyRequiredCapabilities(objective) {
|
|
170
|
+
const capabilities = new Set();
|
|
171
|
+
const components = this._identifyComponents(objective);
|
|
172
|
+
|
|
173
|
+
// Map components to capabilities
|
|
174
|
+
const capabilityMap = {
|
|
175
|
+
backend: ['coder', 'architect', 'tester'],
|
|
176
|
+
frontend: ['coder', 'tester', 'reviewer'],
|
|
177
|
+
data: ['architect', 'analyst', 'optimizer'],
|
|
178
|
+
auth: ['architect', 'coder', 'tester'],
|
|
179
|
+
testing: ['tester', 'reviewer'],
|
|
180
|
+
deployment: ['architect', 'optimizer'],
|
|
181
|
+
monitoring: ['analyst', 'optimizer'],
|
|
182
|
+
};
|
|
183
|
+
|
|
184
|
+
components.forEach((component) => {
|
|
185
|
+
const caps = capabilityMap[component] || [];
|
|
186
|
+
caps.forEach((cap) => capabilities.add(cap));
|
|
187
|
+
});
|
|
188
|
+
|
|
189
|
+
// Always include researcher for initial analysis
|
|
190
|
+
capabilities.add('researcher');
|
|
191
|
+
|
|
192
|
+
return Array.from(capabilities);
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
/**
|
|
196
|
+
* Estimate number of tasks
|
|
197
|
+
*/
|
|
198
|
+
_estimateTaskCount(objective) {
|
|
199
|
+
const complexity = this._assessComplexity(objective);
|
|
200
|
+
const components = this._identifyComponents(objective).length;
|
|
201
|
+
|
|
202
|
+
const baseTaskCount = {
|
|
203
|
+
low: 5,
|
|
204
|
+
medium: 10,
|
|
205
|
+
high: 20,
|
|
206
|
+
very_high: 30,
|
|
207
|
+
};
|
|
208
|
+
|
|
209
|
+
return baseTaskCount[complexity] + components * 3;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
/**
|
|
213
|
+
* Select optimal strategy
|
|
214
|
+
*/
|
|
215
|
+
_selectStrategy(objective) {
|
|
216
|
+
const complexity = this._assessComplexity(objective);
|
|
217
|
+
const components = this._identifyComponents(objective);
|
|
218
|
+
|
|
219
|
+
// Strategy selection heuristics
|
|
220
|
+
if (components.length > 3 && complexity !== 'low') {
|
|
221
|
+
return 'divide_and_conquer';
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
if (objective.toLowerCase().includes('parallel') || components.length > 5) {
|
|
225
|
+
return 'parallel_execution';
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
if (
|
|
229
|
+
objective.toLowerCase().includes('iterative') ||
|
|
230
|
+
objective.toLowerCase().includes('refine')
|
|
231
|
+
) {
|
|
232
|
+
return 'sequential_refinement';
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
if (this.config.type === 'adaptive') {
|
|
236
|
+
return 'adaptive_learning';
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
return 'consensus_driven'; // Default
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
/**
|
|
243
|
+
* Estimate resource requirements
|
|
244
|
+
*/
|
|
245
|
+
_estimateResources(objective) {
|
|
246
|
+
const complexity = this._assessComplexity(objective);
|
|
247
|
+
const taskCount = this._estimateTaskCount(objective);
|
|
248
|
+
|
|
249
|
+
return {
|
|
250
|
+
minWorkers: Math.min(3, Math.ceil(taskCount / 10)),
|
|
251
|
+
optimalWorkers: Math.min(8, Math.ceil(taskCount / 5)),
|
|
252
|
+
estimatedTime: taskCount * 5, // minutes
|
|
253
|
+
memoryRequirement: complexity === 'very_high' ? 'high' : 'medium',
|
|
254
|
+
};
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
/**
|
|
258
|
+
* Create execution plan
|
|
259
|
+
*/
|
|
260
|
+
async createExecutionPlan(analysis, workers) {
|
|
261
|
+
const strategy = this.strategies[analysis.recommendedStrategy];
|
|
262
|
+
if (!strategy) {
|
|
263
|
+
throw new Error(`Unknown strategy: ${analysis.recommendedStrategy}`);
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
const plan = await strategy(analysis, workers);
|
|
267
|
+
|
|
268
|
+
this.state.currentStrategy = analysis.recommendedStrategy;
|
|
269
|
+
this.state.strategiesExecuted++;
|
|
270
|
+
|
|
271
|
+
this.emit('plan:created', plan);
|
|
272
|
+
return plan;
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
/**
|
|
276
|
+
* Divide and conquer strategy
|
|
277
|
+
*/
|
|
278
|
+
async _divideAndConquerStrategy(analysis, workers) {
|
|
279
|
+
const components = this._identifyComponents(analysis.objective);
|
|
280
|
+
const phases = [];
|
|
281
|
+
|
|
282
|
+
// Phase 1: Research and planning
|
|
283
|
+
phases.push({
|
|
284
|
+
name: 'Research and Planning',
|
|
285
|
+
tasks: [
|
|
286
|
+
'Research best practices and patterns',
|
|
287
|
+
'Analyze requirements and constraints',
|
|
288
|
+
'Create high-level architecture design',
|
|
289
|
+
],
|
|
290
|
+
workers: workers.filter((w) => ['researcher', 'architect'].includes(w.type)),
|
|
291
|
+
parallel: true,
|
|
292
|
+
});
|
|
293
|
+
|
|
294
|
+
// Phase 2: Component development
|
|
295
|
+
components.forEach((component) => {
|
|
296
|
+
phases.push({
|
|
297
|
+
name: `Develop ${component}`,
|
|
298
|
+
tasks: this._generateComponentTasks(component),
|
|
299
|
+
workers: workers.filter((w) => ['coder', 'architect'].includes(w.type)),
|
|
300
|
+
parallel: true,
|
|
301
|
+
});
|
|
302
|
+
});
|
|
303
|
+
|
|
304
|
+
// Phase 3: Integration and testing
|
|
305
|
+
phases.push({
|
|
306
|
+
name: 'Integration and Testing',
|
|
307
|
+
tasks: [
|
|
308
|
+
'Integrate components',
|
|
309
|
+
'Write integration tests',
|
|
310
|
+
'Perform end-to-end testing',
|
|
311
|
+
'Fix integration issues',
|
|
312
|
+
],
|
|
313
|
+
workers: workers.filter((w) => ['coder', 'tester'].includes(w.type)),
|
|
314
|
+
parallel: false,
|
|
315
|
+
});
|
|
316
|
+
|
|
317
|
+
// Phase 4: Optimization and documentation
|
|
318
|
+
phases.push({
|
|
319
|
+
name: 'Optimization and Documentation',
|
|
320
|
+
tasks: [
|
|
321
|
+
'Optimize performance',
|
|
322
|
+
'Document architecture',
|
|
323
|
+
'Create user documentation',
|
|
324
|
+
'Prepare deployment guide',
|
|
325
|
+
],
|
|
326
|
+
workers: workers.filter((w) => ['optimizer', 'documenter'].includes(w.type)),
|
|
327
|
+
parallel: true,
|
|
328
|
+
});
|
|
329
|
+
|
|
330
|
+
return {
|
|
331
|
+
strategy: 'divide_and_conquer',
|
|
332
|
+
phases,
|
|
333
|
+
estimatedDuration: phases.length * 15, // minutes
|
|
334
|
+
parallelism: 'high',
|
|
335
|
+
};
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
/**
|
|
339
|
+
* Parallel execution strategy
|
|
340
|
+
*/
|
|
341
|
+
async _parallelExecutionStrategy(analysis, workers) {
|
|
342
|
+
const tasks = this._generateAllTasks(analysis);
|
|
343
|
+
const workerGroups = this._groupWorkersByType(workers);
|
|
344
|
+
|
|
345
|
+
return {
|
|
346
|
+
strategy: 'parallel_execution',
|
|
347
|
+
phases: [
|
|
348
|
+
{
|
|
349
|
+
name: 'Parallel Execution',
|
|
350
|
+
tasks: tasks,
|
|
351
|
+
workers: workers,
|
|
352
|
+
parallel: true,
|
|
353
|
+
workerAssignment: this._optimizeWorkerAssignment(tasks, workerGroups),
|
|
354
|
+
},
|
|
355
|
+
],
|
|
356
|
+
estimatedDuration: Math.ceil(tasks.length / workers.length) * 10,
|
|
357
|
+
parallelism: 'maximum',
|
|
358
|
+
};
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
/**
|
|
362
|
+
* Sequential refinement strategy
|
|
363
|
+
*/
|
|
364
|
+
async _sequentialRefinementStrategy(analysis, workers) {
|
|
365
|
+
const iterations = 3;
|
|
366
|
+
const phases = [];
|
|
367
|
+
|
|
368
|
+
for (let i = 0; i < iterations; i++) {
|
|
369
|
+
phases.push({
|
|
370
|
+
name: `Iteration ${i + 1}`,
|
|
371
|
+
tasks: [
|
|
372
|
+
`Design iteration ${i + 1}`,
|
|
373
|
+
`Implement features for iteration ${i + 1}`,
|
|
374
|
+
`Test iteration ${i + 1}`,
|
|
375
|
+
`Review and refine iteration ${i + 1}`,
|
|
376
|
+
],
|
|
377
|
+
workers: workers,
|
|
378
|
+
parallel: false,
|
|
379
|
+
requiresConsensus: true,
|
|
380
|
+
});
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
return {
|
|
384
|
+
strategy: 'sequential_refinement',
|
|
385
|
+
phases,
|
|
386
|
+
estimatedDuration: phases.length * 20,
|
|
387
|
+
parallelism: 'low',
|
|
388
|
+
iterative: true,
|
|
389
|
+
};
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
/**
|
|
393
|
+
* Consensus-driven strategy
|
|
394
|
+
*/
|
|
395
|
+
async _consensusDrivenStrategy(analysis, workers) {
|
|
396
|
+
const decisionPoints = this._identifyDecisionPoints(analysis);
|
|
397
|
+
const phases = [];
|
|
398
|
+
|
|
399
|
+
decisionPoints.forEach((decision, index) => {
|
|
400
|
+
phases.push({
|
|
401
|
+
name: `Decision Phase ${index + 1}: ${decision}`,
|
|
402
|
+
tasks: [
|
|
403
|
+
`Research options for ${decision}`,
|
|
404
|
+
`Analyze trade-offs`,
|
|
405
|
+
`Build consensus on approach`,
|
|
406
|
+
`Implement chosen solution`,
|
|
407
|
+
],
|
|
408
|
+
workers: workers,
|
|
409
|
+
parallel: index === 0, // Only first phase in parallel
|
|
410
|
+
requiresConsensus: true,
|
|
411
|
+
consensusThreshold: this.config.consensusThreshold,
|
|
412
|
+
});
|
|
413
|
+
});
|
|
414
|
+
|
|
415
|
+
return {
|
|
416
|
+
strategy: 'consensus_driven',
|
|
417
|
+
phases,
|
|
418
|
+
estimatedDuration: phases.length * 25,
|
|
419
|
+
parallelism: 'medium',
|
|
420
|
+
consensusRequired: true,
|
|
421
|
+
};
|
|
422
|
+
}
|
|
423
|
+
|
|
424
|
+
/**
|
|
425
|
+
* Adaptive learning strategy
|
|
426
|
+
*/
|
|
427
|
+
async _adaptiveLearningStrategy(analysis, workers) {
|
|
428
|
+
const learningPhases = [
|
|
429
|
+
{
|
|
430
|
+
name: 'Exploration Phase',
|
|
431
|
+
tasks: [
|
|
432
|
+
'Explore multiple approaches',
|
|
433
|
+
'Experiment with different solutions',
|
|
434
|
+
'Collect performance metrics',
|
|
435
|
+
],
|
|
436
|
+
workers: workers,
|
|
437
|
+
parallel: true,
|
|
438
|
+
learning: true,
|
|
439
|
+
},
|
|
440
|
+
{
|
|
441
|
+
name: 'Analysis Phase',
|
|
442
|
+
tasks: ['Analyze results', 'Identify patterns', 'Select best approaches'],
|
|
443
|
+
workers: workers.filter((w) => ['analyst', 'researcher'].includes(w.type)),
|
|
444
|
+
parallel: false,
|
|
445
|
+
learning: true,
|
|
446
|
+
},
|
|
447
|
+
{
|
|
448
|
+
name: 'Implementation Phase',
|
|
449
|
+
tasks: ['Implement optimized solution', 'Apply learned patterns', 'Validate improvements'],
|
|
450
|
+
workers: workers,
|
|
451
|
+
parallel: true,
|
|
452
|
+
applyLearning: true,
|
|
453
|
+
},
|
|
454
|
+
];
|
|
455
|
+
|
|
456
|
+
return {
|
|
457
|
+
strategy: 'adaptive_learning',
|
|
458
|
+
phases: learningPhases,
|
|
459
|
+
estimatedDuration: 45,
|
|
460
|
+
parallelism: 'adaptive',
|
|
461
|
+
learningEnabled: true,
|
|
462
|
+
};
|
|
463
|
+
}
|
|
464
|
+
|
|
465
|
+
/**
|
|
466
|
+
* Generate component-specific tasks
|
|
467
|
+
*/
|
|
468
|
+
_generateComponentTasks(component) {
|
|
469
|
+
const taskTemplates = {
|
|
470
|
+
backend: [
|
|
471
|
+
'Design API endpoints',
|
|
472
|
+
'Implement business logic',
|
|
473
|
+
'Set up database models',
|
|
474
|
+
'Create API tests',
|
|
475
|
+
],
|
|
476
|
+
frontend: [
|
|
477
|
+
'Design UI components',
|
|
478
|
+
'Implement user interface',
|
|
479
|
+
'Add interactivity',
|
|
480
|
+
'Create UI tests',
|
|
481
|
+
],
|
|
482
|
+
data: [
|
|
483
|
+
'Design data schema',
|
|
484
|
+
'Implement data access layer',
|
|
485
|
+
'Set up caching',
|
|
486
|
+
'Optimize queries',
|
|
487
|
+
],
|
|
488
|
+
auth: [
|
|
489
|
+
'Design authentication flow',
|
|
490
|
+
'Implement auth middleware',
|
|
491
|
+
'Add authorization checks',
|
|
492
|
+
'Test security',
|
|
493
|
+
],
|
|
494
|
+
};
|
|
495
|
+
|
|
496
|
+
return (
|
|
497
|
+
taskTemplates[component] || [
|
|
498
|
+
`Design ${component}`,
|
|
499
|
+
`Implement ${component}`,
|
|
500
|
+
`Test ${component}`,
|
|
501
|
+
]
|
|
502
|
+
);
|
|
503
|
+
}
|
|
504
|
+
|
|
505
|
+
/**
|
|
506
|
+
* Generate all tasks based on analysis
|
|
507
|
+
*/
|
|
508
|
+
_generateAllTasks(analysis) {
|
|
509
|
+
const tasks = [];
|
|
510
|
+
const components = this._identifyComponents(analysis.objective);
|
|
511
|
+
|
|
512
|
+
// Add general tasks
|
|
513
|
+
tasks.push('Analyze requirements', 'Design architecture', 'Set up project structure');
|
|
514
|
+
|
|
515
|
+
// Add component tasks
|
|
516
|
+
components.forEach((component) => {
|
|
517
|
+
tasks.push(...this._generateComponentTasks(component));
|
|
518
|
+
});
|
|
519
|
+
|
|
520
|
+
// Add integration tasks
|
|
521
|
+
tasks.push('Integrate components', 'Write tests', 'Document solution');
|
|
522
|
+
|
|
523
|
+
return tasks;
|
|
524
|
+
}
|
|
525
|
+
|
|
526
|
+
/**
|
|
527
|
+
* Group workers by type
|
|
528
|
+
*/
|
|
529
|
+
_groupWorkersByType(workers) {
|
|
530
|
+
const groups = {};
|
|
531
|
+
|
|
532
|
+
workers.forEach((worker) => {
|
|
533
|
+
if (!groups[worker.type]) {
|
|
534
|
+
groups[worker.type] = [];
|
|
535
|
+
}
|
|
536
|
+
groups[worker.type].push(worker);
|
|
537
|
+
});
|
|
538
|
+
|
|
539
|
+
return groups;
|
|
540
|
+
}
|
|
541
|
+
|
|
542
|
+
/**
|
|
543
|
+
* Optimize worker assignment for tasks
|
|
544
|
+
*/
|
|
545
|
+
_optimizeWorkerAssignment(tasks, workerGroups) {
|
|
546
|
+
const assignments = {};
|
|
547
|
+
|
|
548
|
+
tasks.forEach((task) => {
|
|
549
|
+
const bestWorkerType = this._findBestWorkerType(task);
|
|
550
|
+
const availableWorkers = workerGroups[bestWorkerType] || [];
|
|
551
|
+
|
|
552
|
+
if (availableWorkers.length > 0) {
|
|
553
|
+
// Round-robin assignment within type
|
|
554
|
+
const workerIndex =
|
|
555
|
+
Object.keys(assignments).filter((t) => assignments[t].type === bestWorkerType).length %
|
|
556
|
+
availableWorkers.length;
|
|
557
|
+
|
|
558
|
+
assignments[task] = availableWorkers[workerIndex];
|
|
559
|
+
}
|
|
560
|
+
});
|
|
561
|
+
|
|
562
|
+
return assignments;
|
|
563
|
+
}
|
|
564
|
+
|
|
565
|
+
/**
|
|
566
|
+
* Find best worker type for task
|
|
567
|
+
*/
|
|
568
|
+
_findBestWorkerType(task) {
|
|
569
|
+
const taskLower = task.toLowerCase();
|
|
570
|
+
|
|
571
|
+
if (taskLower.includes('research') || taskLower.includes('analyze')) {
|
|
572
|
+
return 'researcher';
|
|
573
|
+
}
|
|
574
|
+
if (taskLower.includes('design') || taskLower.includes('architect')) {
|
|
575
|
+
return 'architect';
|
|
576
|
+
}
|
|
577
|
+
if (taskLower.includes('implement') || taskLower.includes('code')) {
|
|
578
|
+
return 'coder';
|
|
579
|
+
}
|
|
580
|
+
if (taskLower.includes('test') || taskLower.includes('validate')) {
|
|
581
|
+
return 'tester';
|
|
582
|
+
}
|
|
583
|
+
if (taskLower.includes('optimize') || taskLower.includes('performance')) {
|
|
584
|
+
return 'optimizer';
|
|
585
|
+
}
|
|
586
|
+
if (taskLower.includes('document') || taskLower.includes('write')) {
|
|
587
|
+
return 'documenter';
|
|
588
|
+
}
|
|
589
|
+
|
|
590
|
+
return 'coder'; // Default
|
|
591
|
+
}
|
|
592
|
+
|
|
593
|
+
/**
|
|
594
|
+
* Identify decision points in objective
|
|
595
|
+
*/
|
|
596
|
+
_identifyDecisionPoints(analysis) {
|
|
597
|
+
const decisionKeywords = [
|
|
598
|
+
'choose',
|
|
599
|
+
'select',
|
|
600
|
+
'decide',
|
|
601
|
+
'option',
|
|
602
|
+
'approach',
|
|
603
|
+
'strategy',
|
|
604
|
+
'method',
|
|
605
|
+
'solution',
|
|
606
|
+
'alternative',
|
|
607
|
+
];
|
|
608
|
+
|
|
609
|
+
const decisions = [];
|
|
610
|
+
const components = this._identifyComponents(analysis.objective);
|
|
611
|
+
|
|
612
|
+
// Architecture decisions
|
|
613
|
+
if (components.length > 2) {
|
|
614
|
+
decisions.push('Architecture pattern selection');
|
|
615
|
+
}
|
|
616
|
+
|
|
617
|
+
// Technology decisions
|
|
618
|
+
components.forEach((component) => {
|
|
619
|
+
decisions.push(`Technology stack for ${component}`);
|
|
620
|
+
});
|
|
621
|
+
|
|
622
|
+
// Implementation decisions
|
|
623
|
+
if (analysis.complexity !== 'low') {
|
|
624
|
+
decisions.push('Implementation approach');
|
|
625
|
+
}
|
|
626
|
+
|
|
627
|
+
return decisions;
|
|
628
|
+
}
|
|
629
|
+
|
|
630
|
+
/**
|
|
631
|
+
* Make strategic decision
|
|
632
|
+
*/
|
|
633
|
+
async makeDecision(topic, options, workerVotes = {}) {
|
|
634
|
+
const decision = {
|
|
635
|
+
topic,
|
|
636
|
+
options,
|
|
637
|
+
workerVotes,
|
|
638
|
+
queenVote: this._calculateQueenVote(topic, options, workerVotes),
|
|
639
|
+
timestamp: Date.now(),
|
|
640
|
+
};
|
|
641
|
+
|
|
642
|
+
// Calculate final decision with queen's weighted vote
|
|
643
|
+
const finalDecision = this._calculateFinalDecision(decision);
|
|
644
|
+
|
|
645
|
+
decision.result = finalDecision;
|
|
646
|
+
this.state.decisionsCount++;
|
|
647
|
+
|
|
648
|
+
// Learn from decision
|
|
649
|
+
if (this.config.type === 'adaptive') {
|
|
650
|
+
this._learnFromDecision(decision);
|
|
651
|
+
}
|
|
652
|
+
|
|
653
|
+
this.emit('decision:made', decision);
|
|
654
|
+
return decision;
|
|
655
|
+
}
|
|
656
|
+
|
|
657
|
+
/**
|
|
658
|
+
* Calculate queen's vote
|
|
659
|
+
*/
|
|
660
|
+
_calculateQueenVote(topic, options, workerVotes) {
|
|
661
|
+
// Strategic queen focuses on long-term impact
|
|
662
|
+
if (this.config.type === 'strategic') {
|
|
663
|
+
return this._strategicVote(topic, options);
|
|
664
|
+
}
|
|
665
|
+
|
|
666
|
+
// Tactical queen focuses on immediate efficiency
|
|
667
|
+
if (this.config.type === 'tactical') {
|
|
668
|
+
return this._tacticalVote(topic, options, workerVotes);
|
|
669
|
+
}
|
|
670
|
+
|
|
671
|
+
// Adaptive queen learns from past decisions
|
|
672
|
+
if (this.config.type === 'adaptive') {
|
|
673
|
+
return this._adaptiveVote(topic, options, workerVotes);
|
|
674
|
+
}
|
|
675
|
+
|
|
676
|
+
return options[0]; // Default
|
|
677
|
+
}
|
|
678
|
+
|
|
679
|
+
/**
|
|
680
|
+
* Strategic voting logic
|
|
681
|
+
*/
|
|
682
|
+
_strategicVote(topic, options) {
|
|
683
|
+
// Prefer options that mention long-term benefits
|
|
684
|
+
const strategicKeywords = ['scalable', 'maintainable', 'extensible', 'future'];
|
|
685
|
+
|
|
686
|
+
for (const option of options) {
|
|
687
|
+
const optionLower = option.toLowerCase();
|
|
688
|
+
if (strategicKeywords.some((keyword) => optionLower.includes(keyword))) {
|
|
689
|
+
return option;
|
|
690
|
+
}
|
|
691
|
+
}
|
|
692
|
+
|
|
693
|
+
return options[0];
|
|
694
|
+
}
|
|
695
|
+
|
|
696
|
+
/**
|
|
697
|
+
* Tactical voting logic
|
|
698
|
+
*/
|
|
699
|
+
_tacticalVote(topic, options, workerVotes) {
|
|
700
|
+
// Follow majority if consensus is strong
|
|
701
|
+
const voteCounts = {};
|
|
702
|
+
Object.values(workerVotes).forEach((vote) => {
|
|
703
|
+
voteCounts[vote] = (voteCounts[vote] || 0) + 1;
|
|
704
|
+
});
|
|
705
|
+
|
|
706
|
+
const sorted = Object.entries(voteCounts).sort((a, b) => b[1] - a[1]);
|
|
707
|
+
if (sorted.length > 0 && sorted[0][1] > Object.keys(workerVotes).length * 0.6) {
|
|
708
|
+
return sorted[0][0];
|
|
709
|
+
}
|
|
710
|
+
|
|
711
|
+
// Otherwise, prefer quick implementation
|
|
712
|
+
const tacticalKeywords = ['simple', 'quick', 'fast', 'efficient'];
|
|
713
|
+
|
|
714
|
+
for (const option of options) {
|
|
715
|
+
const optionLower = option.toLowerCase();
|
|
716
|
+
if (tacticalKeywords.some((keyword) => optionLower.includes(keyword))) {
|
|
717
|
+
return option;
|
|
718
|
+
}
|
|
719
|
+
}
|
|
720
|
+
|
|
721
|
+
return options[0];
|
|
722
|
+
}
|
|
723
|
+
|
|
724
|
+
/**
|
|
725
|
+
* Adaptive voting logic
|
|
726
|
+
*/
|
|
727
|
+
_adaptiveVote(topic, options, workerVotes) {
|
|
728
|
+
// Check if we've seen similar decisions before
|
|
729
|
+
const similarDecisions = Array.from(this.state.learningData.entries()).filter(
|
|
730
|
+
([key, value]) => key.includes('decision') && value.topic.includes(topic),
|
|
731
|
+
);
|
|
732
|
+
|
|
733
|
+
if (similarDecisions.length > 0) {
|
|
734
|
+
// Use learned preferences
|
|
735
|
+
const successfulOptions = similarDecisions
|
|
736
|
+
.filter(([_, decision]) => decision.success)
|
|
737
|
+
.map(([_, decision]) => decision.result);
|
|
738
|
+
|
|
739
|
+
for (const option of options) {
|
|
740
|
+
if (successfulOptions.includes(option)) {
|
|
741
|
+
return option;
|
|
742
|
+
}
|
|
743
|
+
}
|
|
744
|
+
}
|
|
745
|
+
|
|
746
|
+
// Otherwise, explore new option
|
|
747
|
+
return options[Math.floor(Math.random() * options.length)];
|
|
748
|
+
}
|
|
749
|
+
|
|
750
|
+
/**
|
|
751
|
+
* Calculate final decision with weighted votes
|
|
752
|
+
*/
|
|
753
|
+
_calculateFinalDecision(decision) {
|
|
754
|
+
const voteCounts = {};
|
|
755
|
+
|
|
756
|
+
// Count worker votes
|
|
757
|
+
Object.values(decision.workerVotes).forEach((vote) => {
|
|
758
|
+
voteCounts[vote] = (voteCounts[vote] || 0) + 1;
|
|
759
|
+
});
|
|
760
|
+
|
|
761
|
+
// Add queen's weighted vote
|
|
762
|
+
voteCounts[decision.queenVote] =
|
|
763
|
+
(voteCounts[decision.queenVote] || 0) + this.config.decisionWeight;
|
|
764
|
+
|
|
765
|
+
// Find winner
|
|
766
|
+
const sorted = Object.entries(voteCounts).sort((a, b) => b[1] - a[1]);
|
|
767
|
+
return sorted[0][0];
|
|
768
|
+
}
|
|
769
|
+
|
|
770
|
+
/**
|
|
771
|
+
* Learn from decision outcomes
|
|
772
|
+
*/
|
|
773
|
+
_learnFromDecision(decision) {
|
|
774
|
+
const key = `decision-${this.state.decisionsCount}`;
|
|
775
|
+
this.state.learningData.set(key, {
|
|
776
|
+
...decision,
|
|
777
|
+
success: true, // Will be updated based on outcome
|
|
778
|
+
});
|
|
779
|
+
}
|
|
780
|
+
|
|
781
|
+
/**
|
|
782
|
+
* Update decision outcome
|
|
783
|
+
*/
|
|
784
|
+
updateDecisionOutcome(decisionId, success, metrics = {}) {
|
|
785
|
+
const key = `decision-${decisionId}`;
|
|
786
|
+
const decision = this.state.learningData.get(key);
|
|
787
|
+
|
|
788
|
+
if (decision) {
|
|
789
|
+
decision.success = success;
|
|
790
|
+
decision.metrics = metrics;
|
|
791
|
+
this.emit('learning:updated', { decisionId, success, metrics });
|
|
792
|
+
}
|
|
793
|
+
}
|
|
794
|
+
|
|
795
|
+
/**
|
|
796
|
+
* Get queen status
|
|
797
|
+
*/
|
|
798
|
+
getStatus() {
|
|
799
|
+
return {
|
|
800
|
+
type: this.config.type,
|
|
801
|
+
name: this.config.name,
|
|
802
|
+
status: this.state.status,
|
|
803
|
+
decisionsCount: this.state.decisionsCount,
|
|
804
|
+
strategiesExecuted: this.state.strategiesExecuted,
|
|
805
|
+
currentStrategy: this.state.currentStrategy,
|
|
806
|
+
learningDataSize: this.state.learningData.size,
|
|
807
|
+
};
|
|
808
|
+
}
|
|
809
|
+
}
|