claude-flow-novice 2.15.5 → 2.15.7
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/cfn-extras/.gs-api-quota.json +16 -0
- package/.claude/cfn-extras/.gs-progress-state.json +22 -0
- package/.claude/cfn-extras/GOOGLE_SHEETS_IMPLEMENTATION_SUMMARY.md +414 -0
- package/.claude/cfn-extras/agents/google-sheets/README.md +114 -0
- package/.claude/cfn-extras/agents/google-sheets/google-sheets-advanced-analytics-specialist.md +288 -0
- package/.claude/cfn-extras/agents/google-sheets/google-sheets-api-integrator.md +127 -0
- package/.claude/cfn-extras/agents/google-sheets/google-sheets-automation-scripting-specialist.md +195 -0
- package/.claude/cfn-extras/agents/google-sheets/google-sheets-business-validator.md +179 -0
- package/.claude/cfn-extras/agents/google-sheets/google-sheets-collaboration-security-specialist.md +240 -0
- package/.claude/cfn-extras/agents/google-sheets/google-sheets-coordinator.md +214 -0
- package/.claude/cfn-extras/agents/google-sheets/google-sheets-data-transformer.md +127 -0
- package/.claude/cfn-extras/agents/google-sheets/google-sheets-data-validation-quality-specialist.md +177 -0
- package/.claude/cfn-extras/agents/google-sheets/google-sheets-data-validator.md +119 -0
- package/.claude/cfn-extras/agents/google-sheets/google-sheets-data-visualization-specialist.md +135 -0
- package/.claude/cfn-extras/agents/google-sheets/google-sheets-design-layout-specialist.md +109 -0
- package/.claude/cfn-extras/agents/google-sheets/google-sheets-formula-engineer.md +127 -0
- package/.claude/cfn-extras/agents/google-sheets/google-sheets-formula-engineering-specialist.md +138 -0
- package/.claude/cfn-extras/agents/google-sheets/google-sheets-formula-validator.md +128 -0
- package/.claude/cfn-extras/agents/google-sheets/google-sheets-generalist.md +645 -0
- package/.claude/cfn-extras/agents/google-sheets/google-sheets-integration-api-specialist.md +258 -0
- package/.claude/cfn-extras/agents/google-sheets/google-sheets-performance-analyst.md +125 -0
- package/.claude/cfn-extras/agents/google-sheets/google-sheets-performance-optimization-specialist.md +211 -0
- package/.claude/cfn-extras/agents/google-sheets/google-sheets-schema-designer.md +130 -0
- package/.claude/cfn-extras/agents/google-sheets/google-sheets-template-architecture-specialist.md +259 -0
- package/.claude/cfn-extras/docs/GOOGLE_SHEETS_CFN_LOOP.md +617 -0
- package/.claude/cfn-extras/skills/GOOGLE_SHEETS_SKILLS_README.md +453 -0
- package/.claude/cfn-extras/skills/google-sheets-api-coordinator/SKILL.md +272 -0
- package/.claude/cfn-extras/skills/google-sheets-api-coordinator/api-call.sh +254 -0
- package/.claude/cfn-extras/skills/google-sheets-api-coordinator/test.sh +174 -0
- package/.claude/cfn-extras/skills/google-sheets-api-coordinator/validate.sh +98 -0
- package/.claude/cfn-extras/skills/google-sheets-decomposition/SKILL.md +269 -0
- package/.claude/cfn-extras/skills/google-sheets-decomposition/decompose.sh +313 -0
- package/.claude/cfn-extras/skills/google-sheets-formula-builder/SKILL.md +237 -0
- package/.claude/cfn-extras/skills/google-sheets-formula-builder/build-formula.sh +220 -0
- package/.claude/cfn-extras/skills/google-sheets-formula-builder/test.sh +172 -0
- package/.claude/cfn-extras/skills/google-sheets-formula-builder/validate.sh +98 -0
- package/.claude/cfn-extras/skills/google-sheets-progress/SKILL.md +287 -0
- package/.claude/cfn-extras/skills/google-sheets-progress/test.sh +385 -0
- package/.claude/cfn-extras/skills/google-sheets-progress/track-progress.sh +516 -0
- package/.claude/cfn-extras/skills/google-sheets-progress/validate.sh +119 -0
- package/.claude/cfn-extras/skills/google-sheets-sprint-order/SKILL.md +277 -0
- package/.claude/cfn-extras/skills/google-sheets-sprint-order/order-sprints.sh +233 -0
- package/.claude/cfn-extras/skills/google-sheets-validation/SKILL.md +352 -0
- package/.claude/cfn-extras/skills/google-sheets-validation/test.sh +355 -0
- package/.claude/cfn-extras/skills/google-sheets-validation/validate-state.sh +374 -0
- package/.claude/cfn-extras/skills/google-sheets-validation/validate.sh +128 -0
- package/.claude/commands/cfn-context.md +10 -0
- package/.claude/commands/cfn-loop-cli.md +36 -15
- package/.claude/commands/google-sheets/google-sheets-loop.md +289 -0
- package/.claude/skills/cfn-agent-selector/SKILL.md +143 -0
- package/.claude/skills/cfn-agent-selector/select-agents.sh +94 -0
- package/.claude/skills/cfn-agent-spawning/get-agent-provider-env.sh +22 -2
- package/.claude/skills/cfn-docker-agent-spawning/spawn-agent.sh +21 -2
- package/.claude/skills/cfn-docker-loop-orchestration/orchestrate.sh +11 -5
- package/.claude/skills/cfn-docker-redis-coordination/MIGRATION_SUMMARY.md +348 -0
- package/.claude/skills/cfn-docker-redis-coordination/README.md +294 -0
- package/.claude/skills/cfn-docker-redis-coordination/jest.config.js +37 -0
- package/.claude/skills/cfn-docker-redis-coordination/package-lock.json +5259 -0
- package/.claude/skills/cfn-docker-redis-coordination/package.json +40 -0
- package/.claude/skills/cfn-docker-redis-coordination/src/coordinator.ts +801 -0
- package/.claude/skills/cfn-docker-redis-coordination/src/index.ts +42 -0
- package/.claude/skills/cfn-docker-redis-coordination/src/types.ts +351 -0
- package/.claude/skills/cfn-docker-redis-coordination/tests/coordinator.test.ts +1464 -0
- package/.claude/skills/cfn-docker-redis-coordination/tsconfig.json +30 -0
- package/.claude/skills/cfn-loop-orchestration/.eslintrc.js +56 -0
- package/.claude/skills/cfn-loop-orchestration/.prettierrc.json +18 -0
- package/.claude/skills/cfn-loop-orchestration/README.md +149 -41
- package/.claude/skills/cfn-loop-orchestration/helpers/gate-check.sh +39 -577
- package/.claude/skills/cfn-loop-orchestration/helpers/parse-test-results.sh +49 -270
- package/.claude/skills/cfn-loop-orchestration/jest.config.js +67 -0
- package/.claude/skills/cfn-loop-orchestration/orchestrate-wrapper.sh +268 -0
- package/.claude/skills/cfn-loop-orchestration/orchestrate.sh +91 -8
- package/.claude/skills/cfn-loop-orchestration/package-lock.json +5470 -0
- package/.claude/skills/cfn-loop-orchestration/package.json +49 -0
- package/.claude/skills/cfn-loop-orchestration/src/agent-spawner/agent-spawner.ts +34 -0
- package/.claude/skills/cfn-loop-orchestration/src/gate-checker/gate-checker.ts +36 -0
- package/.claude/skills/cfn-loop-orchestration/src/helpers/consensus.ts +87 -0
- package/.claude/skills/cfn-loop-orchestration/src/helpers/gate-check.ts +115 -0
- package/.claude/skills/cfn-loop-orchestration/src/helpers/parse-test-results.ts +372 -0
- package/.claude/skills/cfn-loop-orchestration/src/index.ts +14 -0
- package/.claude/skills/cfn-loop-orchestration/src/orchestrator/orchestrator.ts +31 -0
- package/.claude/skills/cfn-loop-orchestration/src/redis/redis-coordinator.ts +72 -0
- package/.claude/skills/cfn-loop-orchestration/src/types.ts +188 -0
- package/.claude/skills/cfn-loop-orchestration/src/utils/logger.ts +32 -0
- package/.claude/skills/cfn-loop-orchestration/tests/consensus.test.ts +142 -0
- package/.claude/skills/cfn-loop-orchestration/tests/deliverable-verifier.test.ts +199 -0
- package/.claude/skills/cfn-loop-orchestration/tests/gate-check.test.ts +325 -0
- package/.claude/skills/cfn-loop-orchestration/tests/iteration-manager.test.ts +132 -0
- package/.claude/skills/cfn-loop-orchestration/tests/parse-test-results.test.ts +382 -0
- package/.claude/skills/cfn-loop-orchestration/tests/setup.ts +22 -0
- package/.claude/skills/cfn-loop-orchestration/tests/timeout-calculator.test.ts +118 -0
- package/.claude/skills/cfn-loop-orchestration/tests/types.test.ts +132 -0
- package/.claude/skills/cfn-loop-orchestration/tsconfig.json +54 -0
- package/.claude/skills/cfn-redis-coordination/bash-wrappers/store-context.sh +23 -0
- package/.claude/skills/cfn-redis-coordination/coverage/clover.xml +1447 -0
- package/.claude/skills/cfn-redis-coordination/coverage/coverage-final.json +13 -0
- package/.claude/skills/cfn-redis-coordination/coverage/lcov-report/agent-logger.ts.html +1423 -0
- package/.claude/skills/cfn-redis-coordination/coverage/lcov-report/agent-recovery.ts.html +1447 -0
- package/.claude/skills/cfn-redis-coordination/coverage/lcov-report/base.css +224 -0
- package/.claude/skills/cfn-redis-coordination/coverage/lcov-report/block-navigation.js +87 -0
- package/.claude/skills/cfn-redis-coordination/coverage/lcov-report/completion-reporter.ts.html +1273 -0
- package/.claude/skills/cfn-redis-coordination/coverage/lcov-report/context-manager.ts.html +1066 -0
- package/.claude/skills/cfn-redis-coordination/coverage/lcov-report/favicon.png +0 -0
- package/.claude/skills/cfn-redis-coordination/coverage/lcov-report/index.html +281 -0
- package/.claude/skills/cfn-redis-coordination/coverage/lcov-report/mode-detector.ts.html +550 -0
- package/.claude/skills/cfn-redis-coordination/coverage/lcov-report/prettify.css +1 -0
- package/.claude/skills/cfn-redis-coordination/coverage/lcov-report/prettify.js +2 -0
- package/.claude/skills/cfn-redis-coordination/coverage/lcov-report/redis-client.ts.html +2047 -0
- package/.claude/skills/cfn-redis-coordination/coverage/lcov-report/result-collector.ts.html +1396 -0
- package/.claude/skills/cfn-redis-coordination/coverage/lcov-report/sort-arrow-sprite.png +0 -0
- package/.claude/skills/cfn-redis-coordination/coverage/lcov-report/sorter.js +210 -0
- package/.claude/skills/cfn-redis-coordination/coverage/lcov-report/swarm-manager.ts.html +1567 -0
- package/.claude/skills/cfn-redis-coordination/coverage/lcov-report/task-analyzer.ts.html +1297 -0
- package/.claude/skills/cfn-redis-coordination/coverage/lcov-report/task-executor.ts.html +1354 -0
- package/.claude/skills/cfn-redis-coordination/coverage/lcov-report/types.ts.html +790 -0
- package/.claude/skills/cfn-redis-coordination/coverage/lcov-report/waiting-coordinator.ts.html +1846 -0
- package/.claude/skills/cfn-redis-coordination/coverage/lcov.info +2650 -0
- package/.claude/skills/cfn-redis-coordination/dist/agent-logger.d.ts +92 -0
- package/.claude/skills/cfn-redis-coordination/dist/agent-logger.d.ts.map +1 -0
- package/.claude/skills/cfn-redis-coordination/dist/agent-logger.js +329 -0
- package/.claude/skills/cfn-redis-coordination/dist/agent-logger.js.map +1 -0
- package/.claude/skills/cfn-redis-coordination/dist/agent-recovery.d.ts +75 -0
- package/.claude/skills/cfn-redis-coordination/dist/agent-recovery.d.ts.map +1 -0
- package/.claude/skills/cfn-redis-coordination/dist/agent-recovery.js +302 -0
- package/.claude/skills/cfn-redis-coordination/dist/agent-recovery.js.map +1 -0
- package/.claude/skills/cfn-redis-coordination/dist/completion-reporter.d.ts +58 -0
- package/.claude/skills/cfn-redis-coordination/dist/completion-reporter.d.ts.map +1 -0
- package/.claude/skills/cfn-redis-coordination/dist/completion-reporter.js +237 -0
- package/.claude/skills/cfn-redis-coordination/dist/completion-reporter.js.map +1 -0
- package/.claude/skills/cfn-redis-coordination/dist/context-manager.d.ts +63 -0
- package/.claude/skills/cfn-redis-coordination/dist/context-manager.d.ts.map +1 -0
- package/.claude/skills/cfn-redis-coordination/dist/context-manager.js +230 -0
- package/.claude/skills/cfn-redis-coordination/dist/context-manager.js.map +1 -0
- package/.claude/skills/cfn-redis-coordination/dist/index.d.ts +45 -0
- package/.claude/skills/cfn-redis-coordination/dist/index.d.ts.map +1 -0
- package/.claude/skills/cfn-redis-coordination/dist/index.js +114 -0
- package/.claude/skills/cfn-redis-coordination/dist/index.js.map +1 -0
- package/.claude/skills/cfn-redis-coordination/dist/mode-detector.d.ts +31 -0
- package/.claude/skills/cfn-redis-coordination/dist/mode-detector.d.ts.map +1 -0
- package/.claude/skills/cfn-redis-coordination/dist/mode-detector.js +185 -0
- package/.claude/skills/cfn-redis-coordination/dist/mode-detector.js.map +1 -0
- package/.claude/skills/cfn-redis-coordination/dist/redis-client.d.ts +191 -0
- package/.claude/skills/cfn-redis-coordination/dist/redis-client.d.ts.map +1 -0
- package/.claude/skills/cfn-redis-coordination/dist/redis-client.js +509 -0
- package/.claude/skills/cfn-redis-coordination/dist/redis-client.js.map +1 -0
- package/.claude/skills/cfn-redis-coordination/dist/result-collector.d.ts +75 -0
- package/.claude/skills/cfn-redis-coordination/dist/result-collector.d.ts.map +1 -0
- package/.claude/skills/cfn-redis-coordination/dist/result-collector.js +281 -0
- package/.claude/skills/cfn-redis-coordination/dist/result-collector.js.map +1 -0
- package/.claude/skills/cfn-redis-coordination/dist/swarm-manager.d.ts +75 -0
- package/.claude/skills/cfn-redis-coordination/dist/swarm-manager.d.ts.map +1 -0
- package/.claude/skills/cfn-redis-coordination/dist/swarm-manager.js +354 -0
- package/.claude/skills/cfn-redis-coordination/dist/swarm-manager.js.map +1 -0
- package/.claude/skills/cfn-redis-coordination/dist/task-analyzer.d.ts +62 -0
- package/.claude/skills/cfn-redis-coordination/dist/task-analyzer.d.ts.map +1 -0
- package/.claude/skills/cfn-redis-coordination/dist/task-analyzer.js +305 -0
- package/.claude/skills/cfn-redis-coordination/dist/task-analyzer.js.map +1 -0
- package/.claude/skills/cfn-redis-coordination/dist/task-executor.d.ts +97 -0
- package/.claude/skills/cfn-redis-coordination/dist/task-executor.d.ts.map +1 -0
- package/.claude/skills/cfn-redis-coordination/dist/task-executor.js +283 -0
- package/.claude/skills/cfn-redis-coordination/dist/task-executor.js.map +1 -0
- package/.claude/skills/cfn-redis-coordination/dist/types.d.ts +176 -0
- package/.claude/skills/cfn-redis-coordination/dist/types.d.ts.map +1 -0
- package/.claude/skills/cfn-redis-coordination/dist/types.js +81 -0
- package/.claude/skills/cfn-redis-coordination/dist/types.js.map +1 -0
- package/.claude/skills/cfn-redis-coordination/dist/waiting-coordinator.d.ts +86 -0
- package/.claude/skills/cfn-redis-coordination/dist/waiting-coordinator.d.ts.map +1 -0
- package/.claude/skills/cfn-redis-coordination/dist/waiting-coordinator.js +419 -0
- package/.claude/skills/cfn-redis-coordination/dist/waiting-coordinator.js.map +1 -0
- package/.claude/skills/cfn-redis-coordination/docs/migration/PHASE_3_REDIS_COORDINATION_COMPLETION_REPORT.md +553 -0
- package/.claude/skills/cfn-redis-coordination/jest.config.js +23 -0
- package/.claude/skills/cfn-redis-coordination/package-lock.json +5272 -0
- package/.claude/skills/cfn-redis-coordination/package.json +45 -0
- package/.claude/skills/cfn-redis-coordination/redis-cli-wrapper.sh +21 -8
- package/.claude/skills/cfn-redis-coordination/src/agent-logger.ts +446 -0
- package/.claude/skills/cfn-redis-coordination/src/agent-recovery.ts +454 -0
- package/.claude/skills/cfn-redis-coordination/src/completion-reporter.ts +396 -0
- package/.claude/skills/cfn-redis-coordination/src/context-manager.ts +327 -0
- package/.claude/skills/cfn-redis-coordination/src/index.ts +82 -0
- package/.claude/skills/cfn-redis-coordination/src/mode-detector.ts +155 -0
- package/.claude/skills/cfn-redis-coordination/src/redis/redis-client.ts +305 -0
- package/.claude/skills/cfn-redis-coordination/src/redis/redis-functions.ts +283 -0
- package/.claude/skills/cfn-redis-coordination/src/redis-client.ts +654 -0
- package/.claude/skills/cfn-redis-coordination/src/result-collector.ts +437 -0
- package/.claude/skills/cfn-redis-coordination/src/swarm-manager.ts +494 -0
- package/.claude/skills/cfn-redis-coordination/src/task-analyzer.ts +404 -0
- package/.claude/skills/cfn-redis-coordination/src/task-executor.ts +423 -0
- package/.claude/skills/cfn-redis-coordination/src/types.ts +235 -0
- package/.claude/skills/cfn-redis-coordination/src/waiting-coordinator.ts +587 -0
- package/.claude/skills/cfn-redis-coordination/test-connection-attempts.js +70 -0
- package/.claude/skills/cfn-redis-coordination/test-mode-simple.js +121 -0
- package/.claude/skills/cfn-redis-coordination/test-redis-check.js +84 -0
- package/.claude/skills/cfn-redis-coordination/test-task-mode-redis.cjs +391 -0
- package/.claude/skills/cfn-redis-coordination/tests/coordination.test.ts +788 -0
- package/.claude/skills/cfn-redis-coordination/tsconfig.json +31 -0
- package/claude-assets/agents/cfn-dev-team/coordinators/cfn-frontend-coordinator.md +13 -72
- package/claude-assets/agents/cfn-dev-team/coordinators/cfn-v3-coordinator.md +172 -62
- package/claude-assets/agents/cfn-dev-team/coordinators/consensus-builder.md +465 -508
- package/claude-assets/agents/cfn-dev-team/coordinators/handoff-coordinator.md +733 -743
- package/claude-assets/agents/cfn-dev-team/coordinators/multi-sprint-coordinator.md +13 -79
- package/claude-assets/agents/cfn-dev-team/dev-ops/docker-specialist.md +13 -18
- package/claude-assets/agents/cfn-dev-team/dev-ops/kubernetes-specialist.md +13 -18
- package/claude-assets/agents/cfn-dev-team/developers/api-gateway-specialist.md +13 -18
- package/claude-assets/agents/cfn-dev-team/developers/backend-developer.md +15 -17
- package/claude-assets/agents/cfn-dev-team/developers/data/data-engineer.md +15 -17
- package/claude-assets/agents/cfn-dev-team/developers/database/database-architect.md +15 -14
- package/claude-assets/agents/cfn-dev-team/developers/frontend/mobile-dev.md +15 -17
- package/claude-assets/agents/cfn-dev-team/developers/frontend/react-frontend-engineer.md +15 -17
- package/claude-assets/agents/cfn-dev-team/developers/frontend/typescript-specialist.md +15 -17
- package/claude-assets/agents/cfn-dev-team/developers/frontend/ui-designer.md +23 -30
- package/claude-assets/agents/cfn-dev-team/developers/graphql-specialist.md +13 -18
- package/claude-assets/agents/cfn-dev-team/developers/rust-developer.md +13 -18
- package/claude-assets/agents/cfn-dev-team/reviewers/code-reviewer.md +312 -317
- package/claude-assets/agents/cfn-dev-team/reviewers/quality/code-quality-validator.md +23 -20
- package/claude-assets/agents/cfn-dev-team/reviewers/quality/perf-analyzer.md +23 -20
- package/claude-assets/agents/cfn-dev-team/reviewers/quality/performance-benchmarker.md +23 -20
- package/claude-assets/agents/cfn-dev-team/reviewers/quality/security-specialist.md +23 -20
- package/claude-assets/agents/cfn-dev-team/testers/api-testing-specialist.md +16 -21
- package/claude-assets/agents/cfn-dev-team/testers/chaos-engineering-specialist.md +15 -20
- package/claude-assets/agents/cfn-dev-team/testers/contract-tester.md +718 -737
- package/claude-assets/agents/cfn-dev-team/testers/integration-tester.md +817 -828
- package/claude-assets/agents/cfn-dev-team/testers/interaction-tester.md +15 -20
- package/claude-assets/agents/cfn-dev-team/testers/load-testing-specialist.md +8 -9
- package/claude-assets/agents/cfn-dev-team/testers/mutation-testing-specialist.md +668 -684
- package/claude-assets/agents/cfn-dev-team/testers/playwright-tester.md +15 -20
- package/claude-assets/agents/cfn-dev-team/testers/tester.md +248 -253
- package/claude-assets/agents/cfn-dev-team/utility/epic-creator.md +13 -18
- package/claude-assets/agents/cfn-dev-team/utility/memory-leak-specialist.md +13 -18
- package/claude-assets/agents/cfn-dev-team/utility/z-ai-specialist.md +13 -18
- package/claude-assets/agents/custom/cfn-redis-operations.md +530 -0
- package/claude-assets/agents/custom/cfn-system-expert.md +77 -0
- package/claude-assets/cfn-extras/.gs-api-quota.json +16 -0
- package/claude-assets/cfn-extras/.gs-progress-state.json +22 -0
- package/claude-assets/cfn-extras/GOOGLE_SHEETS_IMPLEMENTATION_SUMMARY.md +414 -0
- package/claude-assets/cfn-extras/agents/google-sheets/README.md +114 -0
- package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-advanced-analytics-specialist.md +288 -0
- package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-api-integrator.md +127 -0
- package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-automation-scripting-specialist.md +195 -0
- package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-business-validator.md +179 -0
- package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-collaboration-security-specialist.md +240 -0
- package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-coordinator.md +214 -0
- package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-data-transformer.md +127 -0
- package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-data-validation-quality-specialist.md +177 -0
- package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-data-validator.md +119 -0
- package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-data-visualization-specialist.md +135 -0
- package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-design-layout-specialist.md +109 -0
- package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-formula-engineer.md +127 -0
- package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-formula-engineering-specialist.md +138 -0
- package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-formula-validator.md +128 -0
- package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-generalist.md +645 -0
- package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-integration-api-specialist.md +258 -0
- package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-performance-analyst.md +125 -0
- package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-performance-optimization-specialist.md +211 -0
- package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-schema-designer.md +130 -0
- package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-template-architecture-specialist.md +259 -0
- package/claude-assets/cfn-extras/docs/GOOGLE_SHEETS_CFN_LOOP.md +617 -0
- package/claude-assets/cfn-extras/skills/GOOGLE_SHEETS_SKILLS_README.md +453 -0
- package/claude-assets/cfn-extras/skills/google-sheets-api-coordinator/SKILL.md +272 -0
- package/claude-assets/cfn-extras/skills/google-sheets-api-coordinator/api-call.sh +254 -0
- package/claude-assets/cfn-extras/skills/google-sheets-api-coordinator/test.sh +174 -0
- package/claude-assets/cfn-extras/skills/google-sheets-api-coordinator/validate.sh +98 -0
- package/claude-assets/cfn-extras/skills/google-sheets-decomposition/SKILL.md +269 -0
- package/claude-assets/cfn-extras/skills/google-sheets-decomposition/decompose.sh +313 -0
- package/claude-assets/cfn-extras/skills/google-sheets-formula-builder/SKILL.md +237 -0
- package/claude-assets/cfn-extras/skills/google-sheets-formula-builder/build-formula.sh +220 -0
- package/claude-assets/cfn-extras/skills/google-sheets-formula-builder/test.sh +172 -0
- package/claude-assets/cfn-extras/skills/google-sheets-formula-builder/validate.sh +98 -0
- package/claude-assets/cfn-extras/skills/google-sheets-progress/SKILL.md +287 -0
- package/claude-assets/cfn-extras/skills/google-sheets-progress/test.sh +385 -0
- package/claude-assets/cfn-extras/skills/google-sheets-progress/track-progress.sh +516 -0
- package/claude-assets/cfn-extras/skills/google-sheets-progress/validate.sh +119 -0
- package/claude-assets/cfn-extras/skills/google-sheets-sprint-order/SKILL.md +277 -0
- package/claude-assets/cfn-extras/skills/google-sheets-sprint-order/order-sprints.sh +233 -0
- package/claude-assets/cfn-extras/skills/google-sheets-validation/SKILL.md +352 -0
- package/claude-assets/cfn-extras/skills/google-sheets-validation/test.sh +355 -0
- package/claude-assets/cfn-extras/skills/google-sheets-validation/validate-state.sh +374 -0
- package/claude-assets/cfn-extras/skills/google-sheets-validation/validate.sh +128 -0
- package/claude-assets/commands/cfn-context.md +10 -0
- package/claude-assets/commands/cfn-loop-cli.md +36 -15
- package/claude-assets/commands/google-sheets/google-sheets-loop.md +289 -0
- package/claude-assets/hooks/cfn-pre-execution/SESSION_START_README.md +87 -0
- package/claude-assets/hooks/cfn-pre-execution/TEST_SESSION_START.md +128 -0
- package/claude-assets/hooks/cfn-pre-execution/session-start-context.sh +111 -0
- package/claude-assets/skills/cfn-agent-selection-with-fallback/INTEGRATION_EXAMPLE.md +209 -0
- package/claude-assets/skills/cfn-agent-selection-with-fallback/README.md +130 -0
- package/claude-assets/skills/cfn-agent-selection-with-fallback/SKILL.md +243 -0
- package/claude-assets/skills/cfn-agent-selection-with-fallback/agent-mappings.json +142 -0
- package/claude-assets/skills/cfn-agent-selection-with-fallback/select-agents.sh +173 -0
- package/claude-assets/skills/cfn-agent-selection-with-fallback/task-classifier.sh +71 -0
- package/claude-assets/skills/cfn-agent-selection-with-fallback/test-agent-selection.sh +282 -0
- package/claude-assets/skills/cfn-agent-selector/SKILL.md +143 -0
- package/claude-assets/skills/cfn-agent-selector/select-agents.sh +94 -0
- package/claude-assets/skills/cfn-agent-spawning/get-agent-provider-env.sh +22 -2
- package/claude-assets/skills/cfn-docker-agent-spawning/spawn-agent.sh +21 -2
- package/claude-assets/skills/cfn-docker-coordination/.eslintrc.json +33 -0
- package/claude-assets/skills/cfn-docker-coordination/README.md +349 -0
- package/claude-assets/skills/cfn-docker-coordination/docker-helpers.sh +433 -0
- package/claude-assets/skills/cfn-docker-coordination/jest.config.js +25 -0
- package/claude-assets/skills/cfn-docker-coordination/package-lock.json +6827 -0
- package/claude-assets/skills/cfn-docker-coordination/package.json +38 -0
- package/claude-assets/skills/cfn-docker-coordination/src/agent-container.ts +471 -0
- package/claude-assets/skills/cfn-docker-coordination/src/docker-client.ts +483 -0
- package/claude-assets/skills/cfn-docker-coordination/src/health-checker.ts +418 -0
- package/claude-assets/skills/cfn-docker-coordination/src/index.ts +45 -0
- package/claude-assets/skills/cfn-docker-coordination/src/network-manager.ts +377 -0
- package/claude-assets/skills/cfn-docker-coordination/src/types.ts +412 -0
- package/claude-assets/skills/cfn-docker-coordination/src/volume-manager.ts +389 -0
- package/claude-assets/skills/cfn-docker-coordination/tests/agent-container.test.ts +379 -0
- package/claude-assets/skills/cfn-docker-coordination/tests/docker-client.test.ts +345 -0
- package/claude-assets/skills/cfn-docker-coordination/tests/health-checker.test.ts +535 -0
- package/claude-assets/skills/cfn-docker-coordination/tests/integration.test.ts +193 -0
- package/claude-assets/skills/cfn-docker-coordination/tests/network-manager.test.ts +352 -0
- package/claude-assets/skills/cfn-docker-coordination/tests/setup.ts +36 -0
- package/claude-assets/skills/cfn-docker-coordination/tsconfig.json +29 -0
- package/claude-assets/skills/cfn-docker-logging/INTEGRATION.md +268 -0
- package/claude-assets/skills/cfn-docker-logging/SAMPLE_OUTPUTS.md +237 -0
- package/claude-assets/skills/cfn-docker-logging/SKILL.md +442 -0
- package/claude-assets/skills/cfn-docker-logging/capture-container-logs.sh +120 -0
- package/claude-assets/skills/cfn-docker-logging/enable-logging.sh +430 -0
- package/claude-assets/skills/cfn-docker-logging/init-hybrid-logging.sh +210 -0
- package/claude-assets/skills/cfn-docker-logging/queries/analytics-summary.sh +87 -0
- package/claude-assets/skills/cfn-docker-logging/queries/query-agent-timeline.sh +51 -0
- package/claude-assets/skills/cfn-docker-logging/queries/query-consensus-history.sh +56 -0
- package/claude-assets/skills/cfn-docker-logging/queries/query-coordination-timeline.sh +39 -0
- package/claude-assets/skills/cfn-docker-logging/queries/query-failed-containers.sh +40 -0
- package/claude-assets/skills/cfn-docker-logging/queries/query-gate-checks.sh +39 -0
- package/claude-assets/skills/cfn-docker-logging/schema.sql +111 -0
- package/claude-assets/skills/cfn-docker-logging/sqlite-helpers.sh +240 -0
- package/claude-assets/skills/cfn-docker-logging/test-hybrid-logging.sh +331 -0
- package/claude-assets/skills/cfn-docker-loop-orchestration/orchestrate.sh +11 -5
- package/claude-assets/skills/cfn-docker-redis-coordination/MIGRATION_SUMMARY.md +348 -0
- package/claude-assets/skills/cfn-docker-redis-coordination/README.md +294 -0
- package/claude-assets/skills/cfn-docker-redis-coordination/jest.config.js +37 -0
- package/claude-assets/skills/cfn-docker-redis-coordination/package-lock.json +5259 -0
- package/claude-assets/skills/cfn-docker-redis-coordination/package.json +40 -0
- package/claude-assets/skills/cfn-docker-redis-coordination/src/coordinator.ts +801 -0
- package/claude-assets/skills/cfn-docker-redis-coordination/src/index.ts +42 -0
- package/claude-assets/skills/cfn-docker-redis-coordination/src/types.ts +351 -0
- package/claude-assets/skills/cfn-docker-redis-coordination/tests/coordinator.test.ts +1464 -0
- package/claude-assets/skills/cfn-docker-redis-coordination/tsconfig.json +30 -0
- package/claude-assets/skills/cfn-error-logging/.eslintrc.json +57 -0
- package/claude-assets/skills/cfn-error-logging/.prettierrc.json +10 -0
- package/claude-assets/skills/cfn-error-logging/MIGRATION_SUMMARY.md +485 -0
- package/claude-assets/skills/cfn-error-logging/package.json +47 -0
- package/claude-assets/skills/cfn-error-logging/src/error-logger.ts +1042 -0
- package/claude-assets/skills/cfn-error-logging/src/index.ts +12 -0
- package/claude-assets/skills/cfn-error-logging/src/types.ts +456 -0
- package/claude-assets/skills/cfn-error-logging/tests/error-logger.test.ts +1302 -0
- package/claude-assets/skills/cfn-error-logging/tsconfig.json +38 -0
- package/claude-assets/skills/cfn-loop-orchestration/.eslintrc.js +56 -0
- package/claude-assets/skills/cfn-loop-orchestration/.prettierrc.json +18 -0
- package/claude-assets/skills/cfn-loop-orchestration/README.md +149 -41
- package/claude-assets/skills/cfn-loop-orchestration/helpers/gate-check.sh +39 -577
- package/claude-assets/skills/cfn-loop-orchestration/helpers/parse-test-results.sh +49 -270
- package/claude-assets/skills/cfn-loop-orchestration/jest.config.js +67 -0
- package/claude-assets/skills/cfn-loop-orchestration/orchestrate-wrapper.sh +268 -0
- package/claude-assets/skills/cfn-loop-orchestration/orchestrate.sh +91 -8
- package/claude-assets/skills/cfn-loop-orchestration/package-lock.json +5470 -0
- package/claude-assets/skills/cfn-loop-orchestration/package.json +49 -0
- package/claude-assets/skills/cfn-loop-orchestration/src/agent-spawner/agent-spawner.ts +34 -0
- package/claude-assets/skills/cfn-loop-orchestration/src/gate-checker/gate-checker.ts +36 -0
- package/claude-assets/skills/cfn-loop-orchestration/src/helpers/gate-check.ts +115 -0
- package/claude-assets/skills/cfn-loop-orchestration/src/helpers/parse-test-results.ts +372 -0
- package/claude-assets/skills/cfn-loop-orchestration/src/index.ts +14 -0
- package/claude-assets/skills/cfn-loop-orchestration/src/orchestrator/orchestrator.ts +31 -0
- package/claude-assets/skills/cfn-loop-orchestration/src/redis/redis-coordinator.ts +72 -0
- package/claude-assets/skills/cfn-loop-orchestration/src/types.ts +188 -0
- package/claude-assets/skills/cfn-loop-orchestration/src/utils/logger.ts +32 -0
- package/claude-assets/skills/cfn-loop-orchestration/tests/consensus.test.ts +142 -0
- package/claude-assets/skills/cfn-loop-orchestration/tests/deliverable-verifier.test.ts +199 -0
- package/claude-assets/skills/cfn-loop-orchestration/tests/gate-check.test.ts +325 -0
- package/claude-assets/skills/cfn-loop-orchestration/tests/iteration-manager.test.ts +132 -0
- package/claude-assets/skills/cfn-loop-orchestration/tests/parse-test-results.test.ts +382 -0
- package/claude-assets/skills/cfn-loop-orchestration/tests/setup.ts +22 -0
- package/claude-assets/skills/cfn-loop-orchestration/tests/timeout-calculator.test.ts +118 -0
- package/claude-assets/skills/cfn-loop-orchestration/tests/types.test.ts +132 -0
- package/claude-assets/skills/cfn-loop-orchestration/tsconfig.json +54 -0
- package/claude-assets/skills/cfn-redis-coordination/bash-wrappers/store-context.sh +23 -0
- package/claude-assets/skills/cfn-redis-coordination/coverage/clover.xml +1447 -0
- package/claude-assets/skills/cfn-redis-coordination/coverage/coverage-final.json +13 -0
- package/claude-assets/skills/cfn-redis-coordination/coverage/lcov-report/agent-logger.ts.html +1423 -0
- package/claude-assets/skills/cfn-redis-coordination/coverage/lcov-report/agent-recovery.ts.html +1447 -0
- package/claude-assets/skills/cfn-redis-coordination/coverage/lcov-report/base.css +224 -0
- package/claude-assets/skills/cfn-redis-coordination/coverage/lcov-report/block-navigation.js +87 -0
- package/claude-assets/skills/cfn-redis-coordination/coverage/lcov-report/completion-reporter.ts.html +1273 -0
- package/claude-assets/skills/cfn-redis-coordination/coverage/lcov-report/context-manager.ts.html +1066 -0
- package/claude-assets/skills/cfn-redis-coordination/coverage/lcov-report/favicon.png +0 -0
- package/claude-assets/skills/cfn-redis-coordination/coverage/lcov-report/index.html +281 -0
- package/claude-assets/skills/cfn-redis-coordination/coverage/lcov-report/mode-detector.ts.html +550 -0
- package/claude-assets/skills/cfn-redis-coordination/coverage/lcov-report/prettify.css +1 -0
- package/claude-assets/skills/cfn-redis-coordination/coverage/lcov-report/prettify.js +2 -0
- package/claude-assets/skills/cfn-redis-coordination/coverage/lcov-report/redis-client.ts.html +2047 -0
- package/claude-assets/skills/cfn-redis-coordination/coverage/lcov-report/result-collector.ts.html +1396 -0
- package/claude-assets/skills/cfn-redis-coordination/coverage/lcov-report/sort-arrow-sprite.png +0 -0
- package/claude-assets/skills/cfn-redis-coordination/coverage/lcov-report/sorter.js +210 -0
- package/claude-assets/skills/cfn-redis-coordination/coverage/lcov-report/swarm-manager.ts.html +1567 -0
- package/claude-assets/skills/cfn-redis-coordination/coverage/lcov-report/task-analyzer.ts.html +1297 -0
- package/claude-assets/skills/cfn-redis-coordination/coverage/lcov-report/task-executor.ts.html +1354 -0
- package/claude-assets/skills/cfn-redis-coordination/coverage/lcov-report/types.ts.html +790 -0
- package/claude-assets/skills/cfn-redis-coordination/coverage/lcov-report/waiting-coordinator.ts.html +1846 -0
- package/claude-assets/skills/cfn-redis-coordination/coverage/lcov.info +2650 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/agent-logger.d.ts +92 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/agent-logger.d.ts.map +1 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/agent-logger.js +329 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/agent-logger.js.map +1 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/agent-recovery.d.ts +75 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/agent-recovery.d.ts.map +1 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/agent-recovery.js +302 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/agent-recovery.js.map +1 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/completion-reporter.d.ts +58 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/completion-reporter.d.ts.map +1 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/completion-reporter.js +237 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/completion-reporter.js.map +1 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/context-manager.d.ts +63 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/context-manager.d.ts.map +1 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/context-manager.js +230 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/context-manager.js.map +1 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/index.d.ts +45 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/index.d.ts.map +1 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/index.js +114 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/index.js.map +1 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/mode-detector.d.ts +31 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/mode-detector.d.ts.map +1 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/mode-detector.js +185 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/mode-detector.js.map +1 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/redis-client.d.ts +191 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/redis-client.d.ts.map +1 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/redis-client.js +509 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/redis-client.js.map +1 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/result-collector.d.ts +75 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/result-collector.d.ts.map +1 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/result-collector.js +281 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/result-collector.js.map +1 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/swarm-manager.d.ts +75 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/swarm-manager.d.ts.map +1 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/swarm-manager.js +354 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/swarm-manager.js.map +1 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/task-analyzer.d.ts +62 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/task-analyzer.d.ts.map +1 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/task-analyzer.js +305 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/task-analyzer.js.map +1 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/task-executor.d.ts +97 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/task-executor.d.ts.map +1 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/task-executor.js +283 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/task-executor.js.map +1 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/types.d.ts +176 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/types.d.ts.map +1 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/types.js +81 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/types.js.map +1 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/waiting-coordinator.d.ts +86 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/waiting-coordinator.d.ts.map +1 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/waiting-coordinator.js +419 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/waiting-coordinator.js.map +1 -0
- package/claude-assets/skills/cfn-redis-coordination/docs/migration/PHASE_3_REDIS_COORDINATION_COMPLETION_REPORT.md +553 -0
- package/claude-assets/skills/cfn-redis-coordination/jest.config.js +23 -0
- package/claude-assets/skills/cfn-redis-coordination/package-lock.json +5272 -0
- package/claude-assets/skills/cfn-redis-coordination/package.json +45 -0
- package/claude-assets/skills/cfn-redis-coordination/redis-cli-wrapper.sh +21 -8
- package/claude-assets/skills/cfn-redis-coordination/src/agent-logger.ts +446 -0
- package/claude-assets/skills/cfn-redis-coordination/src/agent-recovery.ts +454 -0
- package/claude-assets/skills/cfn-redis-coordination/src/completion-reporter.ts +396 -0
- package/claude-assets/skills/cfn-redis-coordination/src/context-manager.ts +327 -0
- package/claude-assets/skills/cfn-redis-coordination/src/index.ts +82 -0
- package/claude-assets/skills/cfn-redis-coordination/src/mode-detector.ts +155 -0
- package/claude-assets/skills/cfn-redis-coordination/src/redis/redis-client.ts +305 -0
- package/claude-assets/skills/cfn-redis-coordination/src/redis/redis-functions.ts +283 -0
- package/claude-assets/skills/cfn-redis-coordination/src/redis-client.ts +654 -0
- package/claude-assets/skills/cfn-redis-coordination/src/result-collector.ts +437 -0
- package/claude-assets/skills/cfn-redis-coordination/src/swarm-manager.ts +494 -0
- package/claude-assets/skills/cfn-redis-coordination/src/task-analyzer.ts +404 -0
- package/claude-assets/skills/cfn-redis-coordination/src/task-executor.ts +423 -0
- package/claude-assets/skills/cfn-redis-coordination/src/types.ts +235 -0
- package/claude-assets/skills/cfn-redis-coordination/src/waiting-coordinator.ts +587 -0
- package/claude-assets/skills/cfn-redis-coordination/test-connection-attempts.js +70 -0
- package/claude-assets/skills/cfn-redis-coordination/test-mode-simple.js +121 -0
- package/claude-assets/skills/cfn-redis-coordination/test-redis-check.js +84 -0
- package/claude-assets/skills/cfn-redis-coordination/test-task-mode-redis.cjs +391 -0
- package/claude-assets/skills/cfn-redis-coordination/tests/coordination.test.ts +788 -0
- package/claude-assets/skills/cfn-redis-coordination/tsconfig.json +31 -0
- package/claude-assets/skills/cfn-skill-propagation/README.md +233 -0
- package/claude-assets/skills/cfn-skill-propagation/package-lock.json +5174 -0
- package/claude-assets/skills/cfn-skill-propagation/package.json +52 -0
- package/claude-assets/skills/cfn-skill-propagation/propagate-skill-update.sh +32 -0
- package/claude-assets/skills/cfn-skill-propagation/src/cli.ts +75 -0
- package/claude-assets/skills/cfn-skill-propagation/src/database-adapter.ts +239 -0
- package/claude-assets/skills/cfn-skill-propagation/src/file-system-adapter.ts +113 -0
- package/claude-assets/skills/cfn-skill-propagation/src/index.ts +72 -0
- package/claude-assets/skills/cfn-skill-propagation/src/logger.ts +43 -0
- package/claude-assets/skills/cfn-skill-propagation/src/metadata-parser.ts +154 -0
- package/claude-assets/skills/cfn-skill-propagation/src/skill-propagator.ts +274 -0
- package/claude-assets/skills/cfn-skill-propagation/src/skill-validator.ts +179 -0
- package/claude-assets/skills/cfn-skill-propagation/src/types.ts +143 -0
- package/claude-assets/skills/cfn-skill-propagation/src/version-manager.ts +118 -0
- package/claude-assets/skills/cfn-skill-propagation/tests/file-system-adapter.test.ts +91 -0
- package/claude-assets/skills/cfn-skill-propagation/tests/metadata-parser.test.ts +176 -0
- package/claude-assets/skills/cfn-skill-propagation/tests/skill-propagator.test.ts +209 -0
- package/claude-assets/skills/cfn-skill-propagation/tests/skill-validator.test.ts +203 -0
- package/claude-assets/skills/cfn-skill-propagation/tests/version-manager.test.ts +115 -0
- package/claude-assets/skills/cfn-skill-propagation/tsconfig.json +34 -0
- package/claude-assets/skills/task-classifier/SKILL.md +81 -0
- package/claude-assets/skills/task-classifier/classify-task.sh +62 -0
- package/claude-assets/skills/workflow-codification/package-lock.json +5170 -0
- package/claude-assets/skills/workflow-codification/package.json +30 -0
- package/claude-assets/skills/workflow-codification/src/index.ts +24 -0
- package/claude-assets/skills/workflow-codification/src/pattern-analyzer.ts +537 -0
- package/claude-assets/skills/workflow-codification/src/types.ts +180 -0
- package/claude-assets/skills/workflow-codification/tests/pattern-analyzer.test.ts +960 -0
- package/claude-assets/skills/workflow-codification/tsconfig.json +34 -0
- package/claude-assets/skills/workflow-codification/workflow-codification.db +0 -0
- package/dist/agent-spawner/agent-spawner.js +448 -0
- package/dist/agent-spawner/agent-spawner.js.map +1 -0
- package/dist/agent-spawner/index.js +10 -0
- package/dist/agent-spawner/index.js.map +1 -0
- package/dist/agent-spawner/types.js +14 -0
- package/dist/agent-spawner/types.js.map +1 -0
- package/dist/cli/agent-executor.js +47 -1
- package/dist/cli/agent-executor.js.map +1 -1
- package/dist/cli/agent-spawn.js +4 -1
- package/dist/cli/agent-spawn.js.map +1 -1
- package/dist/cli/config-manager.js +91 -109
- package/dist/cli/config-manager.js.map +1 -1
- package/dist/cli/tool-executor.js +3 -1
- package/dist/cli/tool-executor.js.map +1 -1
- package/dist/gate-checker/gate-checker.js +292 -0
- package/dist/gate-checker/gate-checker.js.map +1 -0
- package/dist/gate-checker/types.js +94 -0
- package/dist/gate-checker/types.js.map +1 -0
- package/dist/lib/database-service/connection-pool-manager.js +2 -1
- package/dist/lib/database-service/connection-pool-manager.js.map +1 -1
- package/dist/orchestrator/index.js +10 -0
- package/dist/orchestrator/index.js.map +1 -0
- package/dist/orchestrator/orchestrate.js +496 -0
- package/dist/orchestrator/orchestrate.js.map +1 -0
- package/dist/orchestrator/types.js +58 -0
- package/dist/orchestrator/types.js.map +1 -0
- package/package.json +1 -1
- package/scripts/clean-agent-profiles.sh +112 -0
- package/scripts/switch-api.sh +142 -4
- package/scripts/verify-no-secrets.sh +6 -13
- package/tests/README.md +175 -58
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"target": "ES2020",
|
|
4
|
+
"module": "ESNext",
|
|
5
|
+
"lib": ["ES2020"],
|
|
6
|
+
"outDir": "./dist",
|
|
7
|
+
"rootDir": "./src",
|
|
8
|
+
"declaration": true,
|
|
9
|
+
"declarationMap": true,
|
|
10
|
+
"sourceMap": true,
|
|
11
|
+
"strict": true,
|
|
12
|
+
"esModuleInterop": true,
|
|
13
|
+
"skipLibCheck": true,
|
|
14
|
+
"forceConsistentCasingInFileNames": true,
|
|
15
|
+
"resolveJsonModule": true,
|
|
16
|
+
"allowSyntheticDefaultImports": true,
|
|
17
|
+
"moduleResolution": "node",
|
|
18
|
+
"noImplicitAny": true,
|
|
19
|
+
"strictNullChecks": true,
|
|
20
|
+
"strictFunctionTypes": true,
|
|
21
|
+
"strictBindCallApply": true,
|
|
22
|
+
"strictPropertyInitialization": true,
|
|
23
|
+
"noImplicitThis": true,
|
|
24
|
+
"alwaysStrict": true,
|
|
25
|
+
"noUnusedLocals": true,
|
|
26
|
+
"noUnusedParameters": true,
|
|
27
|
+
"noImplicitReturns": true,
|
|
28
|
+
"noFallthroughCasesInSwitch": true,
|
|
29
|
+
"noUncheckedIndexedAccess": true,
|
|
30
|
+
"noPropertyAccessFromIndexSignature": true
|
|
31
|
+
},
|
|
32
|
+
"include": ["src/**/*.ts"],
|
|
33
|
+
"exclude": ["node_modules", "dist", "tests"]
|
|
34
|
+
}
|
|
Binary file
|
|
@@ -0,0 +1,448 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent Spawner - TypeScript implementation of spawn-agents.sh
|
|
3
|
+
*
|
|
4
|
+
* Spawns Loop 3 agents with enriched historical context from Redis.
|
|
5
|
+
* Supports wave-based memory allocation and parallel agent spawning.
|
|
6
|
+
*
|
|
7
|
+
* @module agent-spawner
|
|
8
|
+
*/ import { execFile, spawn } from 'child_process';
|
|
9
|
+
import { promises as fs } from 'fs';
|
|
10
|
+
import { promisify } from 'util';
|
|
11
|
+
const execFileAsync = promisify(execFile);
|
|
12
|
+
/**
|
|
13
|
+
* Default logger implementation
|
|
14
|
+
*/ let ConsoleLogger = class ConsoleLogger {
|
|
15
|
+
info(message, data) {
|
|
16
|
+
console.log(`[INFO] ${message}`, data);
|
|
17
|
+
}
|
|
18
|
+
warn(message, data) {
|
|
19
|
+
console.warn(`[WARN] ${message}`, data);
|
|
20
|
+
}
|
|
21
|
+
error(message, data) {
|
|
22
|
+
console.error(`[ERROR] ${message}`, data);
|
|
23
|
+
}
|
|
24
|
+
debug(message, data) {
|
|
25
|
+
if (process.env.DEBUG) {
|
|
26
|
+
console.debug(`[DEBUG] ${message}`, data);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* Default context enricher implementation
|
|
32
|
+
*/ let DefaultContextEnricher = class DefaultContextEnricher {
|
|
33
|
+
logger;
|
|
34
|
+
constructor(logger){
|
|
35
|
+
this.logger = logger;
|
|
36
|
+
}
|
|
37
|
+
async enrich(taskId, agentType, originalContext) {
|
|
38
|
+
const startTime = Date.now();
|
|
39
|
+
try {
|
|
40
|
+
// Validate inputs
|
|
41
|
+
this.validateInputs(taskId, agentType);
|
|
42
|
+
// In a real implementation, this would call context-injection.sh
|
|
43
|
+
// For now, return original context with metadata
|
|
44
|
+
const injectionTime = Date.now() - startTime;
|
|
45
|
+
if (injectionTime > 200) {
|
|
46
|
+
this.logger.warn(`Context injection exceeded 200ms threshold: ${injectionTime}ms`);
|
|
47
|
+
}
|
|
48
|
+
return {
|
|
49
|
+
originalContext,
|
|
50
|
+
injectionTime,
|
|
51
|
+
success: true
|
|
52
|
+
};
|
|
53
|
+
} catch (error) {
|
|
54
|
+
const injectionTime = Date.now() - startTime;
|
|
55
|
+
this.logger.warn(`Context injection failed for ${agentType}, using original context`, error);
|
|
56
|
+
return {
|
|
57
|
+
originalContext,
|
|
58
|
+
injectionTime,
|
|
59
|
+
success: false,
|
|
60
|
+
error: error instanceof Error ? error.message : 'Unknown error'
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
validateInputs(taskId, agentType) {
|
|
65
|
+
if (!taskId || typeof taskId !== 'string') {
|
|
66
|
+
throw new Error('Invalid task ID');
|
|
67
|
+
}
|
|
68
|
+
if (!agentType || typeof agentType !== 'string') {
|
|
69
|
+
throw new Error('Invalid agent type');
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
/**
|
|
74
|
+
* Memory tier analyzer
|
|
75
|
+
*/ let MemoryTierAnalyzer = class MemoryTierAnalyzer {
|
|
76
|
+
tierMapping = new Map([
|
|
77
|
+
[
|
|
78
|
+
'512mb',
|
|
79
|
+
512
|
|
80
|
+
],
|
|
81
|
+
[
|
|
82
|
+
'1gb',
|
|
83
|
+
1024
|
|
84
|
+
],
|
|
85
|
+
[
|
|
86
|
+
'2gb',
|
|
87
|
+
2048
|
|
88
|
+
],
|
|
89
|
+
[
|
|
90
|
+
'4gb',
|
|
91
|
+
4096
|
|
92
|
+
]
|
|
93
|
+
]);
|
|
94
|
+
analyzeTier(agentType) {
|
|
95
|
+
// Analyze agent type to determine memory requirements
|
|
96
|
+
// This would typically analyze file clusters or agent complexity
|
|
97
|
+
if (agentType.includes('orchestrator')) return '4gb';
|
|
98
|
+
if (agentType.includes('validator') || agentType.includes('reviewer')) return '2gb';
|
|
99
|
+
if (agentType.includes('specialist')) return '1gb';
|
|
100
|
+
return '512mb';
|
|
101
|
+
}
|
|
102
|
+
getTierMemory(tier) {
|
|
103
|
+
return this.tierMapping.get(tier) || 512;
|
|
104
|
+
}
|
|
105
|
+
getAllTiers() {
|
|
106
|
+
return Array.from(this.tierMapping.keys());
|
|
107
|
+
}
|
|
108
|
+
};
|
|
109
|
+
/**
|
|
110
|
+
* Wave manager for memory budget allocation
|
|
111
|
+
*/ let WaveManager = class WaveManager {
|
|
112
|
+
memoryBudget = 40 * 1024;
|
|
113
|
+
usedMemory = 0;
|
|
114
|
+
tierAnalyzer;
|
|
115
|
+
logger;
|
|
116
|
+
constructor(logger){
|
|
117
|
+
this.logger = logger;
|
|
118
|
+
this.tierAnalyzer = new MemoryTierAnalyzer();
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Allocate agents into waves based on memory constraints
|
|
122
|
+
*/ allocateWaves(agentTypes) {
|
|
123
|
+
const waves = [];
|
|
124
|
+
let currentWave = [];
|
|
125
|
+
let waveMemory = 0;
|
|
126
|
+
for (const agentType of agentTypes){
|
|
127
|
+
const tier = this.tierAnalyzer.analyzeTier(agentType);
|
|
128
|
+
const memory = this.tierAnalyzer.getTierMemory(tier);
|
|
129
|
+
// Check if adding this agent exceeds budget
|
|
130
|
+
if (waveMemory + memory > this.memoryBudget) {
|
|
131
|
+
// Start new wave
|
|
132
|
+
if (currentWave.length > 0) {
|
|
133
|
+
waves.push(currentWave);
|
|
134
|
+
}
|
|
135
|
+
currentWave = [
|
|
136
|
+
agentType
|
|
137
|
+
];
|
|
138
|
+
waveMemory = memory;
|
|
139
|
+
} else {
|
|
140
|
+
currentWave.push(agentType);
|
|
141
|
+
waveMemory += memory;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
// Add final wave
|
|
145
|
+
if (currentWave.length > 0) {
|
|
146
|
+
waves.push(currentWave);
|
|
147
|
+
}
|
|
148
|
+
this.logger.info(`Allocated ${agentTypes.length} agents into ${waves.length} waves`);
|
|
149
|
+
return waves;
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Get memory tier for agent type
|
|
153
|
+
*/ getTier(agentType) {
|
|
154
|
+
return this.tierAnalyzer.analyzeTier(agentType);
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Reset budget (for testing)
|
|
158
|
+
*/ reset() {
|
|
159
|
+
this.usedMemory = 0;
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Get remaining memory budget
|
|
163
|
+
*/ getRemaining() {
|
|
164
|
+
return Math.max(0, this.memoryBudget - this.usedMemory);
|
|
165
|
+
}
|
|
166
|
+
};
|
|
167
|
+
/**
|
|
168
|
+
* Input sanitizer for security
|
|
169
|
+
*/ let InputSanitizer = class InputSanitizer {
|
|
170
|
+
/**
|
|
171
|
+
* Sanitize input by removing dangerous characters
|
|
172
|
+
* Only allows alphanumeric, dash, underscore, dot, comma, colon
|
|
173
|
+
*/ sanitize(input) {
|
|
174
|
+
if (typeof input !== 'string') {
|
|
175
|
+
throw new Error('Input must be a string');
|
|
176
|
+
}
|
|
177
|
+
return input.replace(/[^a-zA-Z0-9._:,\-]/g, '');
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Validate task ID format
|
|
181
|
+
*/ validateTaskId(taskId) {
|
|
182
|
+
const sanitized = this.sanitize(taskId);
|
|
183
|
+
return sanitized === taskId && sanitized.length > 0;
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Validate agent type
|
|
187
|
+
*/ validateAgentType(agentType) {
|
|
188
|
+
const sanitized = this.sanitize(agentType);
|
|
189
|
+
return sanitized === agentType && sanitized.length > 0;
|
|
190
|
+
}
|
|
191
|
+
};
|
|
192
|
+
/**
|
|
193
|
+
* Main Agent Spawner class
|
|
194
|
+
*/ export class AgentSpawner {
|
|
195
|
+
config;
|
|
196
|
+
logger;
|
|
197
|
+
redisClient = null;
|
|
198
|
+
contextEnricher;
|
|
199
|
+
waveManager;
|
|
200
|
+
sanitizer;
|
|
201
|
+
spawnResults = [];
|
|
202
|
+
constructor(config, logger, contextEnricher, redisClient){
|
|
203
|
+
this.config = this.validateConfig(config);
|
|
204
|
+
this.logger = logger || new ConsoleLogger();
|
|
205
|
+
this.contextEnricher = contextEnricher || new DefaultContextEnricher(this.logger);
|
|
206
|
+
this.redisClient = redisClient || null;
|
|
207
|
+
this.waveManager = new WaveManager(this.logger);
|
|
208
|
+
this.sanitizer = new InputSanitizer();
|
|
209
|
+
this.spawnResults = [];
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Validate spawn configuration
|
|
213
|
+
*/ validateConfig(config) {
|
|
214
|
+
if (!config.taskId || typeof config.taskId !== 'string') {
|
|
215
|
+
throw new Error('Invalid or missing taskId');
|
|
216
|
+
}
|
|
217
|
+
if (config.iteration === undefined || config.iteration < 0) {
|
|
218
|
+
throw new Error('Invalid or missing iteration');
|
|
219
|
+
}
|
|
220
|
+
if (!Array.isArray(config.agents) || config.agents.length === 0) {
|
|
221
|
+
throw new Error('Invalid or missing agents');
|
|
222
|
+
}
|
|
223
|
+
if (!config.originalContext || typeof config.originalContext !== 'string') {
|
|
224
|
+
throw new Error('Invalid or missing originalContext');
|
|
225
|
+
}
|
|
226
|
+
return {
|
|
227
|
+
...config,
|
|
228
|
+
logDir: config.logDir || '.artifacts/logs',
|
|
229
|
+
redisHost: config.redisHost || 'localhost',
|
|
230
|
+
redisPort: config.redisPort || 6379,
|
|
231
|
+
projectRoot: config.projectRoot || process.cwd()
|
|
232
|
+
};
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Spawn all agents and return summary
|
|
236
|
+
*/ async spawn() {
|
|
237
|
+
const startTime = Date.now();
|
|
238
|
+
try {
|
|
239
|
+
this.logger.info('Starting agent spawning with context injection');
|
|
240
|
+
this.logger.info(`Task ID: ${this.config.taskId}, Iteration: ${this.config.iteration}`);
|
|
241
|
+
// Create log directory
|
|
242
|
+
await this.ensureLogDir();
|
|
243
|
+
// Validate inputs
|
|
244
|
+
this.validateInputs();
|
|
245
|
+
// Allocate agents into waves
|
|
246
|
+
const waves = this.waveManager.allocateWaves(this.config.agents);
|
|
247
|
+
// Spawn each wave sequentially to respect memory budget
|
|
248
|
+
for(let waveIdx = 0; waveIdx < waves.length; waveIdx++){
|
|
249
|
+
const wave = waves[waveIdx];
|
|
250
|
+
this.logger.info(`Starting wave ${waveIdx + 1} with ${wave.length} agents`);
|
|
251
|
+
// Spawn agents in wave in parallel
|
|
252
|
+
await Promise.all(wave.map((agentType)=>this.spawnSingleAgent(agentType)));
|
|
253
|
+
this.logger.info(`Wave ${waveIdx + 1} complete`);
|
|
254
|
+
}
|
|
255
|
+
// Validate that at least one agent was spawned
|
|
256
|
+
if (this.spawnResults.length === 0) {
|
|
257
|
+
throw new Error('No agents were spawned');
|
|
258
|
+
}
|
|
259
|
+
const injectionSuccessCount = this.spawnResults.filter((r)=>r.injectionSuccessful).length;
|
|
260
|
+
const endTime = Date.now();
|
|
261
|
+
const summary = {
|
|
262
|
+
totalSpawned: this.spawnResults.length,
|
|
263
|
+
injectionSuccessCount,
|
|
264
|
+
injectionFailureCount: this.spawnResults.length - injectionSuccessCount,
|
|
265
|
+
spawnResults: this.spawnResults,
|
|
266
|
+
startTime,
|
|
267
|
+
endTime,
|
|
268
|
+
duration: endTime - startTime
|
|
269
|
+
};
|
|
270
|
+
this.logger.info(`Agent spawning complete: ${summary.totalSpawned} agents spawned`);
|
|
271
|
+
this.logger.info(`Context injection success rate: ${injectionSuccessCount}/${summary.totalSpawned}`);
|
|
272
|
+
return summary;
|
|
273
|
+
} catch (error) {
|
|
274
|
+
this.logger.error('Agent spawning failed', error);
|
|
275
|
+
throw error;
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
/**
|
|
279
|
+
* Spawn a single agent
|
|
280
|
+
*/ async spawnSingleAgent(agentType) {
|
|
281
|
+
try {
|
|
282
|
+
// Get or increment instance count
|
|
283
|
+
const instanceNum = this.getNextInstanceNumber(agentType);
|
|
284
|
+
const agentId = `${agentType}-${this.config.iteration}-${instanceNum}`;
|
|
285
|
+
this.logger.info(`Spawning agent: ${agentType} (ID: ${agentId})`);
|
|
286
|
+
// Sanitize inputs
|
|
287
|
+
const safeAgentType = this.sanitizer.sanitize(agentType);
|
|
288
|
+
const safeTaskId = this.sanitizer.sanitize(this.config.taskId);
|
|
289
|
+
const safeAgentId = this.sanitizer.sanitize(agentId);
|
|
290
|
+
if (!this.sanitizer.validateAgentType(safeAgentType)) {
|
|
291
|
+
throw new Error(`Invalid agent type: ${agentType}`);
|
|
292
|
+
}
|
|
293
|
+
if (!this.sanitizer.validateTaskId(safeTaskId)) {
|
|
294
|
+
throw new Error(`Invalid task ID: ${this.config.taskId}`);
|
|
295
|
+
}
|
|
296
|
+
// Enrich context
|
|
297
|
+
const enriched = await this.contextEnricher.enrich(safeTaskId, safeAgentType, this.config.originalContext);
|
|
298
|
+
const contextToUse = enriched.originalContext;
|
|
299
|
+
// Get memory tier
|
|
300
|
+
const memoryTier = this.waveManager.getTier(safeAgentType);
|
|
301
|
+
// Spawn agent
|
|
302
|
+
const pid = await this.spawnAgentProcess(safeAgentType, safeAgentId, safeTaskId, contextToUse, memoryTier);
|
|
303
|
+
// Store agent PID in Redis if available
|
|
304
|
+
if (this.redisClient) {
|
|
305
|
+
await this.storeAgentInRedis(safeTaskId, safeAgentId, pid);
|
|
306
|
+
}
|
|
307
|
+
// Record spawn result
|
|
308
|
+
this.spawnResults.push({
|
|
309
|
+
agentId: safeAgentId,
|
|
310
|
+
agentType: safeAgentType,
|
|
311
|
+
pid,
|
|
312
|
+
success: true,
|
|
313
|
+
injectionSuccessful: enriched.success,
|
|
314
|
+
injectionTime: enriched.injectionTime,
|
|
315
|
+
contextSize: contextToUse.length
|
|
316
|
+
});
|
|
317
|
+
this.logger.info(`Agent ${safeAgentType} spawned (PID: ${pid})`);
|
|
318
|
+
} catch (error) {
|
|
319
|
+
const safeType = this.sanitizer.sanitize(agentType);
|
|
320
|
+
const errorMsg = error instanceof Error ? error.message : 'Unknown error';
|
|
321
|
+
this.spawnResults.push({
|
|
322
|
+
agentId: `${safeType}-${this.config.iteration}-unknown`,
|
|
323
|
+
agentType: safeType,
|
|
324
|
+
success: false,
|
|
325
|
+
injectionSuccessful: false,
|
|
326
|
+
error: errorMsg
|
|
327
|
+
});
|
|
328
|
+
this.logger.error(`Failed to spawn agent ${safeType}: ${errorMsg}`);
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
/**
|
|
332
|
+
* Spawn agent process (CLI command)
|
|
333
|
+
*/ async spawnAgentProcess(agentType, agentId, taskId, context, memoryTier) {
|
|
334
|
+
return new Promise((resolve, reject)=>{
|
|
335
|
+
try {
|
|
336
|
+
// Get provider environment variables
|
|
337
|
+
const env = {
|
|
338
|
+
...process.env,
|
|
339
|
+
MEMORY_TIER: memoryTier,
|
|
340
|
+
TASK_ID: taskId,
|
|
341
|
+
AGENT_ID: agentId,
|
|
342
|
+
AGENT_TYPE: agentType
|
|
343
|
+
};
|
|
344
|
+
// Spawn agent in background
|
|
345
|
+
const child = spawn('npx', [
|
|
346
|
+
'claude-flow-novice',
|
|
347
|
+
'agent',
|
|
348
|
+
agentType,
|
|
349
|
+
'--task-id',
|
|
350
|
+
taskId,
|
|
351
|
+
'--agent-id',
|
|
352
|
+
agentId,
|
|
353
|
+
'--iteration',
|
|
354
|
+
String(this.config.iteration),
|
|
355
|
+
'--context',
|
|
356
|
+
context
|
|
357
|
+
], {
|
|
358
|
+
env,
|
|
359
|
+
detached: true,
|
|
360
|
+
stdio: 'ignore'
|
|
361
|
+
});
|
|
362
|
+
const pid = child.pid;
|
|
363
|
+
if (!pid) {
|
|
364
|
+
reject(new Error(`Failed to get PID for agent ${agentType}`));
|
|
365
|
+
return;
|
|
366
|
+
}
|
|
367
|
+
// Detach from parent process
|
|
368
|
+
child.unref();
|
|
369
|
+
resolve(pid);
|
|
370
|
+
} catch (error) {
|
|
371
|
+
reject(error);
|
|
372
|
+
}
|
|
373
|
+
});
|
|
374
|
+
}
|
|
375
|
+
/**
|
|
376
|
+
* Store agent info in Redis
|
|
377
|
+
*/ async storeAgentInRedis(taskId, agentId, pid) {
|
|
378
|
+
if (!this.redisClient) {
|
|
379
|
+
return;
|
|
380
|
+
}
|
|
381
|
+
try {
|
|
382
|
+
const key = `swarm:${taskId}:${agentId}:pid`;
|
|
383
|
+
const value = JSON.stringify({
|
|
384
|
+
pid,
|
|
385
|
+
timestamp: Date.now()
|
|
386
|
+
});
|
|
387
|
+
await this.redisClient.set(key, value);
|
|
388
|
+
// Also add to agent ID set for this iteration
|
|
389
|
+
const setKey = `swarm:${taskId}:loop3:agent_ids:iteration${this.config.iteration}`;
|
|
390
|
+
await this.redisClient.sadd(setKey, agentId);
|
|
391
|
+
} catch (error) {
|
|
392
|
+
this.logger.warn('Failed to store agent info in Redis', error);
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
/**
|
|
396
|
+
* Validate input arguments
|
|
397
|
+
*/ validateInputs() {
|
|
398
|
+
if (!this.sanitizer.validateTaskId(this.config.taskId)) {
|
|
399
|
+
throw new Error(`Invalid task ID format: ${this.config.taskId}`);
|
|
400
|
+
}
|
|
401
|
+
for (const agent of this.config.agents){
|
|
402
|
+
if (!this.sanitizer.validateAgentType(agent)) {
|
|
403
|
+
throw new Error(`Invalid agent type format: ${agent}`);
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
/**
|
|
408
|
+
* Get next instance number for agent type
|
|
409
|
+
*/ instanceCounters = {};
|
|
410
|
+
getNextInstanceNumber(agentType) {
|
|
411
|
+
if (!this.instanceCounters[agentType]) {
|
|
412
|
+
this.instanceCounters[agentType] = 0;
|
|
413
|
+
}
|
|
414
|
+
return ++this.instanceCounters[agentType];
|
|
415
|
+
}
|
|
416
|
+
/**
|
|
417
|
+
* Ensure log directory exists
|
|
418
|
+
*/ async ensureLogDir() {
|
|
419
|
+
try {
|
|
420
|
+
await fs.mkdir(this.config.logDir, {
|
|
421
|
+
recursive: true
|
|
422
|
+
});
|
|
423
|
+
} catch (error) {
|
|
424
|
+
this.logger.warn('Failed to create log directory', error);
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
/**
|
|
428
|
+
* Get spawn results for testing
|
|
429
|
+
*/ getResults() {
|
|
430
|
+
return this.spawnResults;
|
|
431
|
+
}
|
|
432
|
+
/**
|
|
433
|
+
* Reset state (for testing)
|
|
434
|
+
*/ reset() {
|
|
435
|
+
this.spawnResults = [];
|
|
436
|
+
this.instanceCounters = {};
|
|
437
|
+
this.waveManager.reset();
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
/**
|
|
441
|
+
* Convenience function for spawning agents
|
|
442
|
+
*/ export async function spawnAgents(config) {
|
|
443
|
+
const spawner = new AgentSpawner(config);
|
|
444
|
+
return spawner.spawn();
|
|
445
|
+
}
|
|
446
|
+
export { MemoryTierAnalyzer, WaveManager, InputSanitizer, DefaultContextEnricher };
|
|
447
|
+
|
|
448
|
+
//# sourceMappingURL=agent-spawner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/agent-spawner/agent-spawner.ts"],"sourcesContent":["/**\r\n * Agent Spawner - TypeScript implementation of spawn-agents.sh\r\n *\r\n * Spawns Loop 3 agents with enriched historical context from Redis.\r\n * Supports wave-based memory allocation and parallel agent spawning.\r\n *\r\n * @module agent-spawner\r\n */\r\n\r\nimport { execFile, spawn } from 'child_process';\r\nimport { promises as fs } from 'fs';\r\nimport { join } from 'path';\r\nimport { promisify } from 'util';\r\nimport {\r\n AgentSpec,\r\n SpawnConfig,\r\n SpawnResult,\r\n SpawnSummary,\r\n MemoryTier,\r\n Logger,\r\n DockerClient,\r\n RedisClient,\r\n ContextEnricher,\r\n EnrichedContext,\r\n InstanceCounter,\r\n} from './types';\r\n\r\nconst execFileAsync = promisify(execFile);\r\n\r\n/**\r\n * Default logger implementation\r\n */\r\nclass ConsoleLogger implements Logger {\r\n info(message: string, data?: unknown): void {\r\n console.log(`[INFO] ${message}`, data);\r\n }\r\n\r\n warn(message: string, data?: unknown): void {\r\n console.warn(`[WARN] ${message}`, data);\r\n }\r\n\r\n error(message: string, data?: unknown): void {\r\n console.error(`[ERROR] ${message}`, data);\r\n }\r\n\r\n debug(message: string, data?: unknown): void {\r\n if (process.env.DEBUG) {\r\n console.debug(`[DEBUG] ${message}`, data);\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Default context enricher implementation\r\n */\r\nclass DefaultContextEnricher implements ContextEnricher {\r\n constructor(private logger: Logger) {}\r\n\r\n async enrich(\r\n taskId: string,\r\n agentType: string,\r\n originalContext: string\r\n ): Promise<EnrichedContext> {\r\n const startTime = Date.now();\r\n\r\n try {\r\n // Validate inputs\r\n this.validateInputs(taskId, agentType);\r\n\r\n // In a real implementation, this would call context-injection.sh\r\n // For now, return original context with metadata\r\n const injectionTime = Date.now() - startTime;\r\n\r\n if (injectionTime > 200) {\r\n this.logger.warn(\r\n `Context injection exceeded 200ms threshold: ${injectionTime}ms`\r\n );\r\n }\r\n\r\n return {\r\n originalContext,\r\n injectionTime,\r\n success: true,\r\n };\r\n } catch (error) {\r\n const injectionTime = Date.now() - startTime;\r\n this.logger.warn(\r\n `Context injection failed for ${agentType}, using original context`,\r\n error\r\n );\r\n\r\n return {\r\n originalContext,\r\n injectionTime,\r\n success: false,\r\n error: error instanceof Error ? error.message : 'Unknown error',\r\n };\r\n }\r\n }\r\n\r\n private validateInputs(taskId: string, agentType: string): void {\r\n if (!taskId || typeof taskId !== 'string') {\r\n throw new Error('Invalid task ID');\r\n }\r\n if (!agentType || typeof agentType !== 'string') {\r\n throw new Error('Invalid agent type');\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Memory tier analyzer\r\n */\r\nclass MemoryTierAnalyzer {\r\n private tierMapping: Map<MemoryTier, number> = new Map([\r\n ['512mb', 512],\r\n ['1gb', 1024],\r\n ['2gb', 2048],\r\n ['4gb', 4096],\r\n ]);\r\n\r\n analyzeTier(agentType: string): MemoryTier {\r\n // Analyze agent type to determine memory requirements\r\n // This would typically analyze file clusters or agent complexity\r\n if (agentType.includes('orchestrator')) return '4gb';\r\n if (agentType.includes('validator') || agentType.includes('reviewer'))\r\n return '2gb';\r\n if (agentType.includes('specialist')) return '1gb';\r\n return '512mb';\r\n }\r\n\r\n getTierMemory(tier: MemoryTier): number {\r\n return this.tierMapping.get(tier) || 512;\r\n }\r\n\r\n getAllTiers(): MemoryTier[] {\r\n return Array.from(this.tierMapping.keys());\r\n }\r\n}\r\n\r\n/**\r\n * Wave manager for memory budget allocation\r\n */\r\nclass WaveManager {\r\n private memoryBudget = 40 * 1024; // 40GB total budget\r\n private usedMemory = 0;\r\n private tierAnalyzer: MemoryTierAnalyzer;\r\n private logger: Logger;\r\n\r\n constructor(logger: Logger) {\r\n this.logger = logger;\r\n this.tierAnalyzer = new MemoryTierAnalyzer();\r\n }\r\n\r\n /**\r\n * Allocate agents into waves based on memory constraints\r\n */\r\n allocateWaves(agentTypes: string[]): string[][] {\r\n const waves: string[][] = [];\r\n let currentWave: string[] = [];\r\n let waveMemory = 0;\r\n\r\n for (const agentType of agentTypes) {\r\n const tier = this.tierAnalyzer.analyzeTier(agentType);\r\n const memory = this.tierAnalyzer.getTierMemory(tier);\r\n\r\n // Check if adding this agent exceeds budget\r\n if (waveMemory + memory > this.memoryBudget) {\r\n // Start new wave\r\n if (currentWave.length > 0) {\r\n waves.push(currentWave);\r\n }\r\n currentWave = [agentType];\r\n waveMemory = memory;\r\n } else {\r\n currentWave.push(agentType);\r\n waveMemory += memory;\r\n }\r\n }\r\n\r\n // Add final wave\r\n if (currentWave.length > 0) {\r\n waves.push(currentWave);\r\n }\r\n\r\n this.logger.info(`Allocated ${agentTypes.length} agents into ${waves.length} waves`);\r\n return waves;\r\n }\r\n\r\n /**\r\n * Get memory tier for agent type\r\n */\r\n getTier(agentType: string): MemoryTier {\r\n return this.tierAnalyzer.analyzeTier(agentType);\r\n }\r\n\r\n /**\r\n * Reset budget (for testing)\r\n */\r\n reset(): void {\r\n this.usedMemory = 0;\r\n }\r\n\r\n /**\r\n * Get remaining memory budget\r\n */\r\n getRemaining(): number {\r\n return Math.max(0, this.memoryBudget - this.usedMemory);\r\n }\r\n}\r\n\r\n/**\r\n * Input sanitizer for security\r\n */\r\nclass InputSanitizer {\r\n /**\r\n * Sanitize input by removing dangerous characters\r\n * Only allows alphanumeric, dash, underscore, dot, comma, colon\r\n */\r\n sanitize(input: string): string {\r\n if (typeof input !== 'string') {\r\n throw new Error('Input must be a string');\r\n }\r\n return input.replace(/[^a-zA-Z0-9._:,\\-]/g, '');\r\n }\r\n\r\n /**\r\n * Validate task ID format\r\n */\r\n validateTaskId(taskId: string): boolean {\r\n const sanitized = this.sanitize(taskId);\r\n return sanitized === taskId && sanitized.length > 0;\r\n }\r\n\r\n /**\r\n * Validate agent type\r\n */\r\n validateAgentType(agentType: string): boolean {\r\n const sanitized = this.sanitize(agentType);\r\n return sanitized === agentType && sanitized.length > 0;\r\n }\r\n}\r\n\r\n/**\r\n * Main Agent Spawner class\r\n */\r\nexport class AgentSpawner {\r\n private config: SpawnConfig;\r\n private logger: Logger;\r\n private redisClient: RedisClient | null = null;\r\n private contextEnricher: ContextEnricher;\r\n private waveManager: WaveManager;\r\n private sanitizer: InputSanitizer;\r\n private spawnResults: SpawnResult[] = [];\r\n\r\n constructor(\r\n config: SpawnConfig,\r\n logger?: Logger,\r\n contextEnricher?: ContextEnricher,\r\n redisClient?: RedisClient\r\n ) {\r\n this.config = this.validateConfig(config);\r\n this.logger = logger || new ConsoleLogger();\r\n this.contextEnricher = contextEnricher || new DefaultContextEnricher(this.logger);\r\n this.redisClient = redisClient || null;\r\n this.waveManager = new WaveManager(this.logger);\r\n this.sanitizer = new InputSanitizer();\r\n this.spawnResults = [];\r\n }\r\n\r\n /**\r\n * Validate spawn configuration\r\n */\r\n private validateConfig(config: SpawnConfig): SpawnConfig {\r\n if (!config.taskId || typeof config.taskId !== 'string') {\r\n throw new Error('Invalid or missing taskId');\r\n }\r\n if (config.iteration === undefined || config.iteration < 0) {\r\n throw new Error('Invalid or missing iteration');\r\n }\r\n if (!Array.isArray(config.agents) || config.agents.length === 0) {\r\n throw new Error('Invalid or missing agents');\r\n }\r\n if (!config.originalContext || typeof config.originalContext !== 'string') {\r\n throw new Error('Invalid or missing originalContext');\r\n }\r\n\r\n return {\r\n ...config,\r\n logDir: config.logDir || '.artifacts/logs',\r\n redisHost: config.redisHost || 'localhost',\r\n redisPort: config.redisPort || 6379,\r\n projectRoot: config.projectRoot || process.cwd(),\r\n };\r\n }\r\n\r\n /**\r\n * Spawn all agents and return summary\r\n */\r\n async spawn(): Promise<SpawnSummary> {\r\n const startTime = Date.now();\r\n\r\n try {\r\n this.logger.info('Starting agent spawning with context injection');\r\n this.logger.info(\r\n `Task ID: ${this.config.taskId}, Iteration: ${this.config.iteration}`\r\n );\r\n\r\n // Create log directory\r\n await this.ensureLogDir();\r\n\r\n // Validate inputs\r\n this.validateInputs();\r\n\r\n // Allocate agents into waves\r\n const waves = this.waveManager.allocateWaves(this.config.agents);\r\n\r\n // Spawn each wave sequentially to respect memory budget\r\n for (let waveIdx = 0; waveIdx < waves.length; waveIdx++) {\r\n const wave = waves[waveIdx];\r\n this.logger.info(`Starting wave ${waveIdx + 1} with ${wave.length} agents`);\r\n\r\n // Spawn agents in wave in parallel\r\n await Promise.all(\r\n wave.map((agentType) => this.spawnSingleAgent(agentType))\r\n );\r\n\r\n this.logger.info(`Wave ${waveIdx + 1} complete`);\r\n }\r\n\r\n // Validate that at least one agent was spawned\r\n if (this.spawnResults.length === 0) {\r\n throw new Error('No agents were spawned');\r\n }\r\n\r\n const injectionSuccessCount = this.spawnResults.filter(\r\n (r) => r.injectionSuccessful\r\n ).length;\r\n\r\n const endTime = Date.now();\r\n\r\n const summary: SpawnSummary = {\r\n totalSpawned: this.spawnResults.length,\r\n injectionSuccessCount,\r\n injectionFailureCount: this.spawnResults.length - injectionSuccessCount,\r\n spawnResults: this.spawnResults,\r\n startTime,\r\n endTime,\r\n duration: endTime - startTime,\r\n };\r\n\r\n this.logger.info(\r\n `Agent spawning complete: ${summary.totalSpawned} agents spawned`\r\n );\r\n this.logger.info(\r\n `Context injection success rate: ${injectionSuccessCount}/${summary.totalSpawned}`\r\n );\r\n\r\n return summary;\r\n } catch (error) {\r\n this.logger.error('Agent spawning failed', error);\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Spawn a single agent\r\n */\r\n private async spawnSingleAgent(agentType: string): Promise<void> {\r\n try {\r\n // Get or increment instance count\r\n const instanceNum = this.getNextInstanceNumber(agentType);\r\n const agentId = `${agentType}-${this.config.iteration}-${instanceNum}`;\r\n\r\n this.logger.info(\r\n `Spawning agent: ${agentType} (ID: ${agentId})`\r\n );\r\n\r\n // Sanitize inputs\r\n const safeAgentType = this.sanitizer.sanitize(agentType);\r\n const safeTaskId = this.sanitizer.sanitize(this.config.taskId);\r\n const safeAgentId = this.sanitizer.sanitize(agentId);\r\n\r\n if (!this.sanitizer.validateAgentType(safeAgentType)) {\r\n throw new Error(`Invalid agent type: ${agentType}`);\r\n }\r\n\r\n if (!this.sanitizer.validateTaskId(safeTaskId)) {\r\n throw new Error(`Invalid task ID: ${this.config.taskId}`);\r\n }\r\n\r\n // Enrich context\r\n const enriched = await this.contextEnricher.enrich(\r\n safeTaskId,\r\n safeAgentType,\r\n this.config.originalContext\r\n );\r\n\r\n const contextToUse = enriched.originalContext;\r\n\r\n // Get memory tier\r\n const memoryTier = this.waveManager.getTier(safeAgentType);\r\n\r\n // Spawn agent\r\n const pid = await this.spawnAgentProcess(\r\n safeAgentType,\r\n safeAgentId,\r\n safeTaskId,\r\n contextToUse,\r\n memoryTier\r\n );\r\n\r\n // Store agent PID in Redis if available\r\n if (this.redisClient) {\r\n await this.storeAgentInRedis(safeTaskId, safeAgentId, pid);\r\n }\r\n\r\n // Record spawn result\r\n this.spawnResults.push({\r\n agentId: safeAgentId,\r\n agentType: safeAgentType,\r\n pid,\r\n success: true,\r\n injectionSuccessful: enriched.success,\r\n injectionTime: enriched.injectionTime,\r\n contextSize: contextToUse.length,\r\n });\r\n\r\n this.logger.info(`Agent ${safeAgentType} spawned (PID: ${pid})`);\r\n } catch (error) {\r\n const safeType = this.sanitizer.sanitize(agentType);\r\n const errorMsg = error instanceof Error ? error.message : 'Unknown error';\r\n\r\n this.spawnResults.push({\r\n agentId: `${safeType}-${this.config.iteration}-unknown`,\r\n agentType: safeType,\r\n success: false,\r\n injectionSuccessful: false,\r\n error: errorMsg,\r\n });\r\n\r\n this.logger.error(\r\n `Failed to spawn agent ${safeType}: ${errorMsg}`\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Spawn agent process (CLI command)\r\n */\r\n private async spawnAgentProcess(\r\n agentType: string,\r\n agentId: string,\r\n taskId: string,\r\n context: string,\r\n memoryTier: MemoryTier\r\n ): Promise<number> {\r\n return new Promise((resolve, reject) => {\r\n try {\r\n // Get provider environment variables\r\n const env = {\r\n ...process.env,\r\n MEMORY_TIER: memoryTier,\r\n TASK_ID: taskId,\r\n AGENT_ID: agentId,\r\n AGENT_TYPE: agentType,\r\n };\r\n\r\n // Spawn agent in background\r\n const child = spawn('npx', [\r\n 'claude-flow-novice',\r\n 'agent',\r\n agentType,\r\n '--task-id', taskId,\r\n '--agent-id', agentId,\r\n '--iteration', String(this.config.iteration),\r\n '--context', context,\r\n ], {\r\n env,\r\n detached: true,\r\n stdio: 'ignore',\r\n });\r\n\r\n const pid = child.pid;\r\n if (!pid) {\r\n reject(new Error(`Failed to get PID for agent ${agentType}`));\r\n return;\r\n }\r\n\r\n // Detach from parent process\r\n child.unref();\r\n\r\n resolve(pid);\r\n } catch (error) {\r\n reject(error);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Store agent info in Redis\r\n */\r\n private async storeAgentInRedis(\r\n taskId: string,\r\n agentId: string,\r\n pid: number\r\n ): Promise<void> {\r\n if (!this.redisClient) {\r\n return;\r\n }\r\n\r\n try {\r\n const key = `swarm:${taskId}:${agentId}:pid`;\r\n const value = JSON.stringify({\r\n pid,\r\n timestamp: Date.now(),\r\n });\r\n\r\n await this.redisClient.set(key, value);\r\n\r\n // Also add to agent ID set for this iteration\r\n const setKey = `swarm:${taskId}:loop3:agent_ids:iteration${this.config.iteration}`;\r\n await this.redisClient.sadd(setKey, agentId);\r\n } catch (error) {\r\n this.logger.warn('Failed to store agent info in Redis', error);\r\n }\r\n }\r\n\r\n /**\r\n * Validate input arguments\r\n */\r\n private validateInputs(): void {\r\n if (!this.sanitizer.validateTaskId(this.config.taskId)) {\r\n throw new Error(`Invalid task ID format: ${this.config.taskId}`);\r\n }\r\n\r\n for (const agent of this.config.agents) {\r\n if (!this.sanitizer.validateAgentType(agent)) {\r\n throw new Error(`Invalid agent type format: ${agent}`);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Get next instance number for agent type\r\n */\r\n private instanceCounters: InstanceCounter = {};\r\n\r\n private getNextInstanceNumber(agentType: string): number {\r\n if (!this.instanceCounters[agentType]) {\r\n this.instanceCounters[agentType] = 0;\r\n }\r\n return ++this.instanceCounters[agentType];\r\n }\r\n\r\n /**\r\n * Ensure log directory exists\r\n */\r\n private async ensureLogDir(): Promise<void> {\r\n try {\r\n await fs.mkdir(this.config.logDir!, { recursive: true });\r\n } catch (error) {\r\n this.logger.warn('Failed to create log directory', error);\r\n }\r\n }\r\n\r\n /**\r\n * Get spawn results for testing\r\n */\r\n getResults(): SpawnResult[] {\r\n return this.spawnResults;\r\n }\r\n\r\n /**\r\n * Reset state (for testing)\r\n */\r\n reset(): void {\r\n this.spawnResults = [];\r\n this.instanceCounters = {};\r\n this.waveManager.reset();\r\n }\r\n}\r\n\r\n/**\r\n * Convenience function for spawning agents\r\n */\r\nexport async function spawnAgents(config: SpawnConfig): Promise<SpawnSummary> {\r\n const spawner = new AgentSpawner(config);\r\n return spawner.spawn();\r\n}\r\n\r\nexport { MemoryTierAnalyzer, WaveManager, InputSanitizer, DefaultContextEnricher };\r\n"],"names":["execFile","spawn","promises","fs","promisify","execFileAsync","ConsoleLogger","info","message","data","console","log","warn","error","debug","process","env","DEBUG","DefaultContextEnricher","logger","enrich","taskId","agentType","originalContext","startTime","Date","now","validateInputs","injectionTime","success","Error","MemoryTierAnalyzer","tierMapping","Map","analyzeTier","includes","getTierMemory","tier","get","getAllTiers","Array","from","keys","WaveManager","memoryBudget","usedMemory","tierAnalyzer","allocateWaves","agentTypes","waves","currentWave","waveMemory","memory","length","push","getTier","reset","getRemaining","Math","max","InputSanitizer","sanitize","input","replace","validateTaskId","sanitized","validateAgentType","AgentSpawner","config","redisClient","contextEnricher","waveManager","sanitizer","spawnResults","validateConfig","iteration","undefined","isArray","agents","logDir","redisHost","redisPort","projectRoot","cwd","ensureLogDir","waveIdx","wave","Promise","all","map","spawnSingleAgent","injectionSuccessCount","filter","r","injectionSuccessful","endTime","summary","totalSpawned","injectionFailureCount","duration","instanceNum","getNextInstanceNumber","agentId","safeAgentType","safeTaskId","safeAgentId","enriched","contextToUse","memoryTier","pid","spawnAgentProcess","storeAgentInRedis","contextSize","safeType","errorMsg","context","resolve","reject","MEMORY_TIER","TASK_ID","AGENT_ID","AGENT_TYPE","child","String","detached","stdio","unref","key","value","JSON","stringify","timestamp","set","setKey","sadd","agent","instanceCounters","mkdir","recursive","getResults","spawnAgents","spawner"],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent Spawner Module
|
|
3
|
+
*
|
|
4
|
+
* TypeScript implementation of spawn-agents.sh
|
|
5
|
+
* Provides type-safe agent spawning with memory budget management and context injection.
|
|
6
|
+
*
|
|
7
|
+
* @module agent-spawner
|
|
8
|
+
*/ export { AgentSpawner, spawnAgents, MemoryTierAnalyzer, WaveManager, InputSanitizer, DefaultContextEnricher } from './agent-spawner';
|
|
9
|
+
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/agent-spawner/index.ts"],"sourcesContent":["/**\r\n * Agent Spawner Module\r\n *\r\n * TypeScript implementation of spawn-agents.sh\r\n * Provides type-safe agent spawning with memory budget management and context injection.\r\n *\r\n * @module agent-spawner\r\n */\r\n\r\nexport {\r\n AgentSpawner,\r\n spawnAgents,\r\n MemoryTierAnalyzer,\r\n WaveManager,\r\n InputSanitizer,\r\n DefaultContextEnricher,\r\n} from './agent-spawner';\r\n\r\nexport type {\r\n AgentSpec,\r\n SpawnConfig,\r\n SpawnResult,\r\n SpawnSummary,\r\n MemoryTier,\r\n MemoryBudget,\r\n EnrichedContext,\r\n InstanceCounter,\r\n DockerSpawnOptions,\r\n SpawnError,\r\n RedisPayload,\r\n Logger,\r\n DockerClient,\r\n RedisClient,\r\n ContextEnricher,\r\n} from './types';\r\n"],"names":["AgentSpawner","spawnAgents","MemoryTierAnalyzer","WaveManager","InputSanitizer","DefaultContextEnricher"],"mappings":"AAAA;;;;;;;CAOC,GAED,SACEA,YAAY,EACZC,WAAW,EACXC,kBAAkB,EAClBC,WAAW,EACXC,cAAc,EACdC,sBAAsB,QACjB,kBAAkB"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent Spawner Type Definitions
|
|
3
|
+
*
|
|
4
|
+
* Defines types for agent spawning, memory management, and context injection.
|
|
5
|
+
*
|
|
6
|
+
* @module agent-spawner/types
|
|
7
|
+
*/ /**
|
|
8
|
+
* Memory tier levels for agent spawning
|
|
9
|
+
* Used to categorize agents by resource requirements
|
|
10
|
+
*/ /**
|
|
11
|
+
* Context enrichment provider interface
|
|
12
|
+
*/ export { };
|
|
13
|
+
|
|
14
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/agent-spawner/types.ts"],"sourcesContent":["/**\r\n * Agent Spawner Type Definitions\r\n *\r\n * Defines types for agent spawning, memory management, and context injection.\r\n *\r\n * @module agent-spawner/types\r\n */\r\n\r\n/**\r\n * Memory tier levels for agent spawning\r\n * Used to categorize agents by resource requirements\r\n */\r\nexport type MemoryTier = '512mb' | '1gb' | '2gb' | '4gb';\r\n\r\n/**\r\n * Agent specification for spawning\r\n */\r\nexport interface AgentSpec {\r\n type: string;\r\n id: string;\r\n taskId: string;\r\n iteration: number;\r\n instanceNum: number;\r\n context: string;\r\n memoryTier?: MemoryTier;\r\n}\r\n\r\n/**\r\n * Configuration for agent spawning\r\n */\r\nexport interface SpawnConfig {\r\n taskId: string;\r\n iteration: number;\r\n agents: string[];\r\n originalContext: string;\r\n logDir?: string;\r\n redisHost?: string;\r\n redisPort?: number;\r\n projectRoot?: string;\r\n}\r\n\r\n/**\r\n * Result of spawning a single agent\r\n */\r\nexport interface SpawnResult {\r\n agentId: string;\r\n agentType: string;\r\n pid?: number;\r\n success: boolean;\r\n error?: string;\r\n injectionSuccessful: boolean;\r\n injectionTime?: number;\r\n contextSize?: number;\r\n}\r\n\r\n/**\r\n * Summary of spawning operation\r\n */\r\nexport interface SpawnSummary {\r\n totalSpawned: number;\r\n injectionSuccessCount: number;\r\n injectionFailureCount: number;\r\n spawnResults: SpawnResult[];\r\n startTime: number;\r\n endTime: number;\r\n duration: number;\r\n}\r\n\r\n/**\r\n * Memory budget allocation for a wave of agents\r\n */\r\nexport interface MemoryBudget {\r\n totalBudget: number;\r\n allocations: Map<MemoryTier, number>;\r\n remaining: number;\r\n}\r\n\r\n/**\r\n * Context enrichment result\r\n */\r\nexport interface EnrichedContext {\r\n originalContext: string;\r\n historicalContext?: Record<string, unknown>;\r\n injectionTime: number;\r\n success: boolean;\r\n error?: string;\r\n}\r\n\r\n/**\r\n * Agent instance count tracking\r\n */\r\nexport interface InstanceCounter {\r\n [agentType: string]: number;\r\n}\r\n\r\n/**\r\n * Docker spawn options\r\n */\r\nexport interface DockerSpawnOptions {\r\n image: string;\r\n agentType: string;\r\n agentId: string;\r\n taskId: string;\r\n context: string;\r\n memoryLimit?: string;\r\n environment?: Record<string, string>;\r\n}\r\n\r\n/**\r\n * Spawn error with detailed information\r\n */\r\nexport interface SpawnError extends Error {\r\n agentType: string;\r\n agentId: string;\r\n taskId: string;\r\n code?: string;\r\n stderr?: string;\r\n stdout?: string;\r\n}\r\n\r\n/**\r\n * Redis coordination payload\r\n */\r\nexport interface RedisPayload {\r\n pid: number;\r\n timestamp: number;\r\n status: 'spawned' | 'completed' | 'failed';\r\n error?: string;\r\n}\r\n\r\n/**\r\n * Logger interface for dependency injection\r\n */\r\nexport interface Logger {\r\n info(message: string, data?: unknown): void;\r\n warn(message: string, data?: unknown): void;\r\n error(message: string, data?: unknown): void;\r\n debug(message: string, data?: unknown): void;\r\n}\r\n\r\n/**\r\n * Docker client interface for dependency injection\r\n */\r\nexport interface DockerClient {\r\n createContainer(options: Record<string, unknown>): Promise<{ id: string }>;\r\n startContainer(id: string): Promise<void>;\r\n inspectContainer(id: string): Promise<Record<string, unknown>>;\r\n}\r\n\r\n/**\r\n * Redis client interface for dependency injection\r\n */\r\nexport interface RedisClient {\r\n set(key: string, value: string): Promise<string | null>;\r\n sadd(key: string, value: string): Promise<number>;\r\n get(key: string): Promise<string | null>;\r\n del(key: string): Promise<number>;\r\n}\r\n\r\n/**\r\n * Context enrichment provider interface\r\n */\r\nexport interface ContextEnricher {\r\n enrich(\r\n taskId: string,\r\n agentType: string,\r\n originalContext: string\r\n ): Promise<EnrichedContext>;\r\n}\r\n"],"names":[],"mappings":"AAAA;;;;;;CAMC,GAED;;;CAGC,GAoJD;;CAEC,GACD,WAMC"}
|