claude-flow-novice 2.15.3 → 2.15.4
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/skills/advanced-features/cfn-agent-swap/recommend-swap.sh +59 -59
- package/.claude/cfn-extras/skills/analytics/cfn-improvement-recommender/recommend-improvements.sh +91 -91
- package/.claude/cfn-extras/skills/analytics/cfn-pattern-extraction/extract-patterns.sh +79 -79
- package/.claude/cfn-extras/skills/analytics/cfn-retrospective-report/generate-report.sh +100 -100
- package/.claude/cfn-extras/skills/analytics/cfn-telemetry/start-telemetry.sh +110 -110
- package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/add-bullet.sh +145 -145
- package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/log-merge.sh +67 -67
- package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/monitor-injection-performance.sh +137 -137
- package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/optimize-injection-pipeline.sh +168 -168
- package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/query-reflections.sh +35 -35
- package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/store-reflection.sh +45 -45
- package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/track-ab-test.sh +41 -41
- package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/update-reflection.sh +41 -41
- package/.claude/cfn-extras/skills/deprecated/cfn-cli-setup/validate-cli-environment.sh +191 -191
- package/.claude/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/create-campaign.sh +231 -231
- package/.claude/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/get-campaign-performance.sh +190 -190
- package/.claude/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/pause-campaign.sh +142 -142
- package/.claude/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/set-budget.sh +181 -181
- package/.claude/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/update-bid-strategy.sh +133 -133
- package/.claude/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/get-conversation-history.sh +121 -121
- package/.claude/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/qualify-lead.sh +156 -156
- package/.claude/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/schedule-demo.sh +181 -181
- package/.claude/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/send-message.sh +137 -137
- package/.claude/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/transfer-to-human.sh +179 -179
- package/.claude/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/create-campaign.sh +183 -183
- package/.claude/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/get-delivery-status.sh +139 -139
- package/.claude/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/opt-out.sh +150 -150
- package/.claude/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/schedule-campaign.sh +187 -187
- package/.claude/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/send-sms.sh +181 -181
- package/.claude/cfn-extras/skills/ui-portal/cfn-web-portal/test-web-portal-skill.sh +50 -50
- package/.claude/cfn-extras/skills/ui-portal/cfn-web-portal/validate-deployment.sh +84 -84
- package/.claude/cfn-extras/skills/utility/cfn-environment-sanitization/sanitize-environment.sh +243 -243
- package/.claude/commands/cfn-loop-cli.md +16 -2
- package/.claude/commands/switch-api.md +31 -10
- package/.claude/hooks/cfn-lint-sql-injection.sh +61 -0
- package/.claude/hooks/cfn-post-edit-cfn-retrospective.sh +33 -2
- package/.claude/hooks/cfn-pre-edit-security-warning.sh +40 -0
- package/.claude/skills/cfn-agent-spawning/spawn-agent.sh +22 -24
- package/.claude/skills/cfn-docker-agent-spawning/SKILL.md +28 -4
- package/.claude/skills/cfn-docker-agent-spawning/spawn-agent.sh +3 -1
- package/.claude/skills/cfn-docker-loop-orchestration/orchestrate.sh +224 -20
- package/.claude/skills/cfn-loop-orchestration/helpers/gate-check.sh +550 -46
- package/.claude/skills/cfn-loop-orchestration/helpers/parse-test-results.sh +277 -0
- package/.claude/skills/cfn-loop-orchestration/orchestrate.sh +184 -23
- package/.claude/skills/cfn-loop-orchestration/security_utils.sh +24 -0
- package/.claude/skills/cfn-loop-orchestration/test-iteration-context-injection.sh +366 -0
- package/.claude/skills/cfn-redis-coordination/CENTRALIZED_REDIS_WRAPPER.md +319 -0
- package/.claude/skills/cfn-redis-coordination/agent-log.sh +4 -0
- package/.claude/skills/cfn-redis-coordination/agent-log.sh.bak +124 -0
- package/.claude/skills/cfn-redis-coordination/agent-recovery.sh +2 -2
- package/.claude/skills/cfn-redis-coordination/collect-confidence-scores.sh +30 -0
- package/.claude/skills/cfn-redis-coordination/get-context.sh +33 -0
- package/.claude/skills/cfn-redis-coordination/get-success-criteria.sh +54 -0
- package/.claude/skills/cfn-redis-coordination/invoke-waiting-mode.sh +3 -0
- package/.claude/skills/cfn-redis-coordination/redis-cli-wrapper.sh +24 -3
- package/.claude/skills/cfn-redis-coordination/redis-functions.sh +33 -0
- package/.claude/skills/cfn-redis-coordination/report-completion.sh +24 -31
- package/.claude/skills/cfn-redis-coordination/store-context.sh +4 -0
- package/.claude/skills/cfn-redis-coordination/store-success-criteria.sh +85 -0
- package/.claude/skills/cfn-redis-coordination/update-all-scripts.sh +67 -0
- package/.claude/skills/cfn-sqlite-memory/ttl-cleanup.sh +17 -25
- package/.claude/skills/cfn-transparency-middleware/test-e2e.sh +15 -0
- package/.claude/skills/cfn-transparency-middleware/tests/input-validation.sh +15 -0
- package/README.md +116 -475
- package/claude-assets/agents/cfn-dev-team/README.md +103 -0
- package/claude-assets/agents/cfn-dev-team/architecture/goal-planner.md +1 -1
- package/claude-assets/agents/cfn-dev-team/coordinators/cfn-frontend-coordinator.md +77 -15
- package/claude-assets/agents/cfn-dev-team/coordinators/cfn-v3-coordinator.md +355 -6
- package/claude-assets/agents/cfn-dev-team/coordinators/consensus-builder.md +82 -1
- package/claude-assets/agents/cfn-dev-team/coordinators/handoff-coordinator.md +82 -1
- package/claude-assets/agents/cfn-dev-team/coordinators/multi-sprint-coordinator.md +77 -15
- package/claude-assets/agents/cfn-dev-team/dev-ops/docker-specialist.md +99 -12
- package/claude-assets/agents/cfn-dev-team/dev-ops/github-commit-agent.md +1 -1
- package/claude-assets/agents/cfn-dev-team/dev-ops/kubernetes-specialist.md +97 -0
- package/claude-assets/agents/cfn-dev-team/dev-ops/monitoring-specialist.md +20 -1
- package/claude-assets/agents/cfn-dev-team/developers/api-gateway-specialist.md +97 -0
- package/claude-assets/agents/cfn-dev-team/developers/backend-developer.md +110 -13
- package/claude-assets/agents/cfn-dev-team/developers/data/data-engineer.md +106 -15
- package/claude-assets/agents/cfn-dev-team/developers/database/database-architect.md +115 -11
- package/claude-assets/agents/cfn-dev-team/developers/frontend/mobile-dev.md +94 -7
- package/claude-assets/agents/cfn-dev-team/developers/frontend/react-frontend-engineer.md +87 -9
- package/claude-assets/agents/cfn-dev-team/developers/frontend/typescript-specialist.md +85 -7
- package/claude-assets/agents/cfn-dev-team/developers/frontend/ui-designer.md +160 -28
- package/claude-assets/agents/cfn-dev-team/developers/graphql-specialist.md +101 -19
- package/claude-assets/agents/cfn-dev-team/developers/rust-developer.md +108 -14
- package/claude-assets/agents/cfn-dev-team/reviewers/{reviewer.md → code-reviewer.md} +95 -8
- package/claude-assets/agents/cfn-dev-team/reviewers/quality/code-quality-validator.md +107 -7
- package/claude-assets/agents/cfn-dev-team/reviewers/quality/perf-analyzer.md +98 -7
- package/claude-assets/agents/cfn-dev-team/reviewers/quality/performance-benchmarker.md +95 -7
- package/claude-assets/agents/cfn-dev-team/reviewers/quality/security-specialist.md +136 -9
- package/claude-assets/agents/cfn-dev-team/testers/api-testing-specialist.md +108 -1
- package/claude-assets/agents/cfn-dev-team/testers/chaos-engineering-specialist.md +107 -13
- package/claude-assets/agents/cfn-dev-team/testers/contract-tester.md +737 -0
- package/claude-assets/agents/cfn-dev-team/testers/e2e/playwright-tester.md +1 -1
- package/claude-assets/agents/cfn-dev-team/testers/integration-tester.md +828 -0
- package/claude-assets/agents/cfn-dev-team/testers/interaction-tester.md +106 -7
- package/claude-assets/agents/cfn-dev-team/testers/load-testing-specialist.md +77 -0
- package/claude-assets/agents/cfn-dev-team/testers/mutation-testing-specialist.md +684 -0
- package/claude-assets/agents/cfn-dev-team/testers/playwright-tester.md +110 -1
- package/claude-assets/agents/cfn-dev-team/testers/tester.md +94 -7
- package/claude-assets/agents/cfn-dev-team/utility/code-booster.md +1 -3
- package/claude-assets/agents/cfn-dev-team/utility/epic-creator.md +87 -13
- package/claude-assets/agents/cfn-dev-team/utility/memory-leak-specialist.md +103 -7
- package/claude-assets/agents/cfn-dev-team/utility/researcher.md +1 -3
- package/claude-assets/agents/cfn-dev-team/utility/z-ai-specialist.md +94 -7
- package/claude-assets/agents/docker-coordinators/cfn-docker-v3-coordinator.md +46 -0
- package/claude-assets/agents/project-only-agents/npm-package-specialist.md +1 -1
- package/claude-assets/cfn-extras/skills/advanced-features/cfn-agent-swap/recommend-swap.sh +59 -59
- package/claude-assets/cfn-extras/skills/analytics/cfn-improvement-recommender/recommend-improvements.sh +91 -91
- package/claude-assets/cfn-extras/skills/analytics/cfn-pattern-extraction/extract-patterns.sh +79 -79
- package/claude-assets/cfn-extras/skills/analytics/cfn-retrospective-report/generate-report.sh +100 -100
- package/claude-assets/cfn-extras/skills/analytics/cfn-telemetry/start-telemetry.sh +110 -110
- package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/add-bullet.sh +145 -145
- package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/log-merge.sh +67 -67
- package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/monitor-injection-performance.sh +137 -137
- package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/optimize-injection-pipeline.sh +168 -168
- package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/query-reflections.sh +35 -35
- package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/store-reflection.sh +45 -45
- package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/track-ab-test.sh +41 -41
- package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/update-reflection.sh +41 -41
- package/claude-assets/cfn-extras/skills/deprecated/cfn-cli-setup/validate-cli-environment.sh +191 -191
- package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/create-campaign.sh +231 -231
- package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/get-campaign-performance.sh +190 -190
- package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/pause-campaign.sh +142 -142
- package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/set-budget.sh +181 -181
- package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/update-bid-strategy.sh +133 -133
- package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/get-conversation-history.sh +121 -121
- package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/qualify-lead.sh +156 -156
- package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/schedule-demo.sh +181 -181
- package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/send-message.sh +137 -137
- package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/transfer-to-human.sh +179 -179
- package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/create-campaign.sh +183 -183
- package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/get-delivery-status.sh +139 -139
- package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/opt-out.sh +150 -150
- package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/schedule-campaign.sh +187 -187
- package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/send-sms.sh +181 -181
- package/claude-assets/cfn-extras/skills/ui-portal/cfn-web-portal/test-web-portal-skill.sh +50 -50
- package/claude-assets/cfn-extras/skills/ui-portal/cfn-web-portal/validate-deployment.sh +84 -84
- package/claude-assets/cfn-extras/skills/utility/cfn-environment-sanitization/sanitize-environment.sh +243 -243
- package/claude-assets/commands/cfn-loop-cli.md +16 -2
- package/claude-assets/commands/switch-api.md +31 -10
- package/claude-assets/hooks/cfn-lint-sql-injection.sh +61 -0
- package/claude-assets/hooks/cfn-post-edit-cfn-retrospective.sh +33 -2
- package/claude-assets/hooks/cfn-pre-edit-security-warning.sh +40 -0
- package/claude-assets/hooks/detect-hardcoded-credentials.sh +212 -0
- package/claude-assets/skills/SKILL_TEMPLATE.md +774 -0
- package/claude-assets/skills/agent-lifecycle/execute-lifecycle-hook.sh +84 -113
- package/claude-assets/skills/agent-lifecycle/simple-audit.sh +33 -6
- package/claude-assets/skills/agent-template-generator/SKILL.md +440 -0
- package/claude-assets/skills/agent-template-generator/generate-agent.sh +405 -0
- package/claude-assets/skills/agent-validation-linter/SKILL.md +589 -0
- package/claude-assets/skills/agent-validation-linter/lint-agents.sh +271 -0
- package/claude-assets/skills/bootstrap/bash-fundamentals.md +786 -0
- package/claude-assets/skills/bootstrap/database-connection.md +464 -0
- package/claude-assets/skills/bootstrap/error-handling.md +580 -0
- package/claude-assets/skills/bootstrap/file-operations.md +699 -0
- package/claude-assets/skills/bootstrap/skill-loader.md +616 -0
- package/claude-assets/skills/bootstrap/sqlite-params.sh +287 -0
- package/claude-assets/skills/cfn-agent-spawning/spawn-agent.sh +22 -24
- package/claude-assets/skills/cfn-automatic-memory-persistence/test-memory-persistence.sh +17 -16
- package/claude-assets/skills/cfn-deployment/SKILL.md +293 -0
- package/claude-assets/skills/cfn-deployment/execute.sh +21 -0
- package/claude-assets/skills/cfn-docker-agent-spawning/SKILL.md +28 -4
- package/claude-assets/skills/cfn-docker-agent-spawning/spawn-agent.sh +3 -1
- package/claude-assets/skills/cfn-docker-loop-orchestration/orchestrate.sh +224 -20
- package/claude-assets/skills/cfn-environment-sanitization/sanitize-environment.sh +38 -0
- package/claude-assets/skills/cfn-error-batching-strategy/lib/core-functions.sh +47 -47
- package/claude-assets/skills/cfn-file-operations/SKILL.md +290 -0
- package/claude-assets/skills/cfn-file-operations/execute.sh +129 -0
- package/claude-assets/skills/cfn-file-operations/lib/atomic-write.sh +294 -0
- package/claude-assets/skills/cfn-file-operations/lib/lock.sh +361 -0
- package/claude-assets/skills/cfn-file-operations/test.sh +369 -0
- package/claude-assets/skills/cfn-log-operations/SKILL.md +308 -0
- package/claude-assets/skills/cfn-log-operations/execute.sh +420 -0
- package/claude-assets/skills/cfn-log-operations/lib/rotate.sh +406 -0
- package/claude-assets/skills/cfn-log-operations/lib/search.sh +448 -0
- package/claude-assets/skills/cfn-log-operations/test.sh +394 -0
- package/claude-assets/skills/cfn-loop-orchestration/helpers/gate-check.sh +550 -46
- package/claude-assets/skills/cfn-loop-orchestration/helpers/parse-test-results.sh +277 -0
- package/claude-assets/skills/cfn-loop-orchestration/orchestrate.sh +184 -23
- package/claude-assets/skills/cfn-loop-orchestration/security_utils.sh +24 -0
- package/claude-assets/skills/cfn-loop-orchestration/test-iteration-context-injection.sh +366 -0
- package/claude-assets/skills/cfn-parameterized-queries/SKILL.md +339 -0
- package/claude-assets/skills/cfn-playbook/query-playbook.sh +19 -15
- package/claude-assets/skills/cfn-playbook/update-playbook.sh +25 -14
- package/claude-assets/skills/cfn-process-instrumentation/instrument-process.sh +44 -0
- package/claude-assets/skills/cfn-promotion/SKILL.md +305 -0
- package/claude-assets/skills/cfn-redis-coordination/CENTRALIZED_REDIS_WRAPPER.md +319 -0
- package/claude-assets/skills/cfn-redis-coordination/agent-log.sh +4 -0
- package/claude-assets/skills/cfn-redis-coordination/agent-log.sh.bak +124 -0
- package/claude-assets/skills/cfn-redis-coordination/agent-recovery.sh +2 -2
- package/claude-assets/skills/cfn-redis-coordination/collect-confidence-scores.sh +30 -0
- package/claude-assets/skills/cfn-redis-coordination/get-context.sh +33 -0
- package/claude-assets/skills/cfn-redis-coordination/get-success-criteria.sh +54 -0
- package/claude-assets/skills/cfn-redis-coordination/invoke-waiting-mode.sh +3 -0
- package/claude-assets/skills/cfn-redis-coordination/redis-cli-wrapper.sh +24 -3
- package/claude-assets/skills/cfn-redis-coordination/redis-functions.sh +33 -0
- package/claude-assets/skills/cfn-redis-coordination/report-completion.sh +24 -31
- package/claude-assets/skills/cfn-redis-coordination/store-context.sh +4 -0
- package/claude-assets/skills/cfn-redis-coordination/store-success-criteria.sh +85 -0
- package/claude-assets/skills/cfn-redis-coordination/update-all-scripts.sh +67 -0
- package/claude-assets/skills/cfn-skill-loader/SKILL.md +466 -0
- package/claude-assets/skills/cfn-skill-loader/execute.sh +344 -0
- package/claude-assets/skills/cfn-sqlite-memory/ttl-cleanup.sh +17 -25
- package/claude-assets/skills/cfn-task-audit/get-audit-data.sh +42 -21
- package/claude-assets/skills/cfn-task-audit/store-task-audit.sh +17 -10
- package/claude-assets/skills/cfn-test-runner/detect-regressions.sh +17 -14
- package/claude-assets/skills/cfn-test-runner/detect-regressions.sh.backup-1763392821 +55 -0
- package/claude-assets/skills/cfn-test-runner/store-benchmarks.sh +17 -19
- package/claude-assets/skills/cfn-transparency-middleware/test-e2e.sh +15 -0
- package/claude-assets/skills/cfn-transparency-middleware/tests/input-validation.sh +15 -0
- package/claude-assets/skills/cfn-utilities/SKILL.md +237 -0
- package/claude-assets/skills/cfn-utilities/execute.sh +32 -0
- package/claude-assets/skills/cfn-utilities/lib/errors.sh +56 -0
- package/claude-assets/skills/cfn-utilities/lib/file-ops.sh +164 -0
- package/claude-assets/skills/cfn-utilities/lib/logging.sh +77 -0
- package/claude-assets/skills/cfn-utilities/lib/retry.sh +127 -0
- package/claude-assets/skills/cfn-utilities/test.sh +317 -0
- package/claude-assets/skills/integration/agent-handoff.sh +62 -64
- package/claude-assets/skills/json-validation/SKILL.md +431 -0
- package/claude-assets/skills/json-validation/test-validate-success-criteria.sh +421 -0
- package/claude-assets/skills/json-validation/validate-success-criteria.sh +197 -0
- package/claude-assets/skills/redis-coordination/validate-parameters.sh +34 -0
- package/claude-assets/skills/workflow-codification/DEPLOY_QUICK_REFERENCE.md +106 -0
- package/claude-assets/skills/workflow-codification/PROPAGATE_UPDATE_QUICK_REFERENCE.md +366 -0
- package/claude-assets/skills/workflow-codification/deploy-approved-skill.sh +481 -0
- package/claude-assets/skills/workflow-codification/deploy-approved-skill.sh.backup-1763392820 +512 -0
- package/claude-assets/skills/workflow-codification/lib/security-utils.sh +204 -0
- package/claude-assets/skills/workflow-codification/propagate-skill-update.sh +648 -0
- package/claude-assets/skills/workflow-codification/propagate-skill-update.sh.backup-1763392820 +664 -0
- package/claude-assets/skills/workflow-codification/test-integration.sh +15 -0
- package/claude-assets/skills/workflow-codification/test-metadata-update.sh +350 -0
- package/claude-assets/skills/workflow-codification/track-cost-savings.sh +55 -14
- package/claude-assets/skills/workflow-codification/track-cost-savings.sh.backup-1763392821 +445 -0
- package/claude-assets/skills/workflow-codification/track-edge-case.sh +27 -60
- package/claude-assets/skills/workflow-codification/workflow-codification.db +0 -0
- package/dist/ace/ace-curator.js +10 -2
- package/dist/ace/ace-curator.js.map +1 -1
- package/dist/ace/ace-generator.js +4 -0
- package/dist/ace/ace-generator.js.map +1 -1
- package/dist/ace/ace-reflector.js +1 -1
- package/dist/ace/ace-reflector.js.map +1 -1
- package/dist/ace/context-injection.js +24 -2
- package/dist/ace/context-injection.js.map +1 -1
- package/dist/agents/agent-loader.js +146 -165
- package/dist/agents/agent-loader.js.map +1 -1
- package/dist/agents/task-agent-integration.js +1 -1
- package/dist/agents/task-agent-integration.js.map +1 -1
- package/dist/api/health-endpoints.js +390 -0
- package/dist/api/health-endpoints.js.map +1 -0
- package/dist/cli/agent-executor.js +4 -1
- package/dist/cli/agent-executor.js.map +1 -1
- package/dist/cli/agent-prompt-builder.js +89 -1
- package/dist/cli/agent-prompt-builder.js.map +1 -1
- package/dist/cli/agent-spawn.js +130 -37
- package/dist/cli/agent-spawn.js.map +1 -1
- package/dist/cli/skill-cache-validator.js +412 -0
- package/dist/cli/skill-cache-validator.js.map +1 -0
- package/dist/cli/skill-cli.js +991 -0
- package/dist/cli/skill-cli.js.map +1 -0
- package/dist/cli/skill-execution-logger.js +284 -0
- package/dist/cli/skill-execution-logger.js.map +1 -0
- package/dist/cli/skill-loader.js +457 -0
- package/dist/cli/skill-loader.js.map +1 -0
- package/dist/coordination/event-bus.js +2 -2
- package/dist/coordination/event-bus.js.map +1 -1
- package/dist/coordination/fleet-manager.js +1 -1
- package/dist/coordination/fleet-manager.js.map +1 -1
- package/dist/coordination/index.js +23 -9
- package/dist/coordination/index.js.map +1 -1
- package/dist/coordination/types/fleet-manager.types.js.map +1 -1
- package/dist/db/migration-manager.js +483 -0
- package/dist/db/migration-manager.js.map +1 -0
- package/dist/db/skills-query.js +535 -0
- package/dist/db/skills-query.js.map +1 -0
- package/dist/integration/DatabaseHandoff.js +1 -1
- package/dist/integration/DatabaseHandoff.js.map +1 -1
- package/dist/jobs/edge-case-analyzer.js +367 -0
- package/dist/jobs/edge-case-analyzer.js.map +1 -0
- package/dist/jobs/promotion-sla-enforcer.js +288 -0
- package/dist/jobs/promotion-sla-enforcer.js.map +1 -0
- package/dist/lib/agent-output-parser.js.map +1 -1
- package/dist/lib/agent-output-validator.js.map +1 -1
- package/dist/lib/agent-workspace.js +281 -0
- package/dist/lib/agent-workspace.js.map +1 -0
- package/dist/lib/atomic-file-writer.js +377 -0
- package/dist/lib/atomic-file-writer.js.map +1 -0
- package/dist/lib/backup-manager.js +779 -0
- package/dist/lib/backup-manager.js.map +1 -0
- package/dist/lib/checkpoint-manager.js +837 -0
- package/dist/lib/checkpoint-manager.js.map +1 -0
- package/dist/lib/circuit-breaker.js +340 -0
- package/dist/lib/circuit-breaker.js.map +1 -0
- package/dist/lib/completion-signal-handler.js +243 -0
- package/dist/lib/completion-signal-handler.js.map +1 -0
- package/dist/lib/config-manager.js +312 -0
- package/dist/lib/config-manager.js.map +1 -0
- package/dist/lib/config-migrator.js +386 -0
- package/dist/lib/config-migrator.js.map +1 -0
- package/dist/lib/config-validator.js.map +1 -1
- package/dist/lib/correlation-cache.js +311 -0
- package/dist/lib/correlation-cache.js.map +1 -0
- package/dist/lib/correlation.js +263 -0
- package/dist/lib/correlation.js.map +1 -0
- package/dist/lib/database-service/connection-pool-manager.js +520 -0
- package/dist/lib/database-service/connection-pool-manager.js.map +1 -0
- package/dist/lib/database-service/correlation.js +329 -0
- package/dist/lib/database-service/correlation.js.map +1 -0
- package/dist/lib/database-service/errors.js +120 -0
- package/dist/lib/database-service/errors.js.map +1 -0
- package/dist/lib/database-service/index.js +168 -0
- package/dist/lib/database-service/index.js.map +1 -0
- package/dist/lib/database-service/postgres-adapter.js +526 -0
- package/dist/lib/database-service/postgres-adapter.js.map +1 -0
- package/dist/lib/database-service/redis-adapter.js +360 -0
- package/dist/lib/database-service/redis-adapter.js.map +1 -0
- package/dist/lib/database-service/sqlite-adapter.js +544 -0
- package/dist/lib/database-service/sqlite-adapter.js.map +1 -0
- package/dist/lib/database-service/transaction-manager.js +773 -0
- package/dist/lib/database-service/transaction-manager.js.map +1 -0
- package/dist/lib/database-service/types.js +23 -0
- package/dist/lib/database-service/types.js.map +1 -0
- package/dist/lib/deadlock-resolver.js +292 -0
- package/dist/lib/deadlock-resolver.js.map +1 -0
- package/dist/lib/distributed-lock.js +451 -0
- package/dist/lib/distributed-lock.js.map +1 -0
- package/dist/lib/edge-case-deduplicator.js +227 -0
- package/dist/lib/edge-case-deduplicator.js.map +1 -0
- package/dist/lib/encryption-manager.js +322 -0
- package/dist/lib/encryption-manager.js.map +1 -0
- package/dist/lib/error-aggregator.js +234 -0
- package/dist/lib/error-aggregator.js.map +1 -0
- package/dist/lib/errors.js +287 -0
- package/dist/lib/errors.js.map +1 -0
- package/dist/lib/file-lock-manager.js +578 -0
- package/dist/lib/file-lock-manager.js.map +1 -0
- package/dist/lib/file-operations.js +367 -0
- package/dist/lib/file-operations.js.map +1 -0
- package/dist/lib/idempotent-write.js +237 -0
- package/dist/lib/idempotent-write.js.map +1 -0
- package/dist/lib/integration-schema-validator.js +522 -0
- package/dist/lib/integration-schema-validator.js.map +1 -0
- package/dist/lib/lock-health-monitor.js +298 -0
- package/dist/lib/lock-health-monitor.js.map +1 -0
- package/dist/lib/log-shipper.js +422 -0
- package/dist/lib/log-shipper.js.map +1 -0
- package/dist/lib/logging.js +146 -0
- package/dist/lib/logging.js.map +1 -0
- package/dist/lib/message-deduplicator.js +439 -0
- package/dist/lib/message-deduplicator.js.map +1 -0
- package/dist/lib/multi-system-query.js +604 -0
- package/dist/lib/multi-system-query.js.map +1 -0
- package/dist/lib/orphan-detector.js +332 -0
- package/dist/lib/orphan-detector.js.map +1 -0
- package/dist/lib/password-generator.js +166 -0
- package/dist/lib/password-generator.js.map +1 -0
- package/dist/lib/path-validator.js +429 -0
- package/dist/lib/path-validator.js.map +1 -0
- package/dist/lib/query-translator.js +905 -0
- package/dist/lib/query-translator.js.map +1 -0
- package/dist/lib/queue-recovery.js +469 -0
- package/dist/lib/queue-recovery.js.map +1 -0
- package/dist/lib/redis-queue-manager.js +512 -0
- package/dist/lib/redis-queue-manager.js.map +1 -0
- package/dist/lib/reflection-archiver.js +272 -0
- package/dist/lib/reflection-archiver.js.map +1 -0
- package/dist/lib/retry-manager.js +453 -0
- package/dist/lib/retry-manager.js.map +1 -0
- package/dist/lib/retry.js +262 -0
- package/dist/lib/retry.js.map +1 -0
- package/dist/lib/schema-transform.js +695 -0
- package/dist/lib/schema-transform.js.map +1 -0
- package/dist/lib/schema-validator.js +491 -0
- package/dist/lib/schema-validator.js.map +1 -0
- package/dist/lib/skill-cache.js +297 -0
- package/dist/lib/skill-cache.js.map +1 -0
- package/dist/lib/skill-content-manager.js +337 -0
- package/dist/lib/skill-content-manager.js.map +1 -0
- package/dist/lib/skill-frontmatter-parser.js +237 -0
- package/dist/lib/skill-frontmatter-parser.js.map +1 -0
- package/dist/lib/skill-git-integration.js +275 -0
- package/dist/lib/skill-git-integration.js.map +1 -0
- package/dist/lib/skill-markdown-validator.js +396 -0
- package/dist/lib/skill-markdown-validator.js.map +1 -0
- package/dist/lib/skill-output-parser.js +312 -0
- package/dist/lib/skill-output-parser.js.map +1 -0
- package/dist/lib/unified-query-api.js +467 -0
- package/dist/lib/unified-query-api.js.map +1 -0
- package/dist/middleware/auth-middleware.js +350 -0
- package/dist/middleware/auth-middleware.js.map +1 -0
- package/dist/middleware/schema-validation.js +347 -0
- package/dist/middleware/schema-validation.js.map +1 -0
- package/dist/providers/anthropic-provider.js +1 -1
- package/dist/providers/anthropic-provider.js.map +1 -1
- package/dist/providers/provider-factory.js +2 -2
- package/dist/providers/provider-factory.js.map +1 -1
- package/dist/services/edge-case-analyzer.js +321 -0
- package/dist/services/edge-case-analyzer.js.map +1 -0
- package/dist/services/edge-case-deduplicator.js +266 -0
- package/dist/services/edge-case-deduplicator.js.map +1 -0
- package/dist/services/edge-case-detector.js +337 -0
- package/dist/services/edge-case-detector.js.map +1 -0
- package/dist/services/edge-case-tracker.js +547 -0
- package/dist/services/edge-case-tracker.js.map +1 -0
- package/dist/services/health-check-system.js +586 -0
- package/dist/services/health-check-system.js.map +1 -0
- package/dist/services/metrics-logger.js +412 -0
- package/dist/services/metrics-logger.js.map +1 -0
- package/dist/services/patch-generator.js +378 -0
- package/dist/services/patch-generator.js.map +1 -0
- package/dist/services/patch-validator.js +337 -0
- package/dist/services/patch-validator.js.map +1 -0
- package/dist/services/performance-monitor.js +811 -0
- package/dist/services/performance-monitor.js.map +1 -0
- package/dist/services/promotion-pipeline.js +918 -0
- package/dist/services/promotion-pipeline.js.map +1 -0
- package/dist/services/promotion-validator.js +394 -0
- package/dist/services/promotion-validator.js.map +1 -0
- package/dist/services/reflection-logger.js +388 -0
- package/dist/services/reflection-logger.js.map +1 -0
- package/dist/services/skill-deployment.js +472 -0
- package/dist/services/skill-deployment.js.map +1 -0
- package/dist/services/skill-loader.js +427 -0
- package/dist/services/skill-loader.js.map +1 -0
- package/dist/services/skill-promotion.js +372 -0
- package/dist/services/skill-promotion.js.map +1 -0
- package/dist/services/skill-validator.js +454 -0
- package/dist/services/skill-validator.js.map +1 -0
- package/dist/services/skill-versioning.js +244 -0
- package/dist/services/skill-versioning.js.map +1 -0
- package/dist/services/workspace-supervisor.js +597 -0
- package/dist/services/workspace-supervisor.js.map +1 -0
- package/dist/types/edge-case.js +45 -0
- package/dist/types/edge-case.js.map +1 -0
- package/package.json +201 -177
- package/readme/README.md +19 -4
- package/scripts/backup-cleanup.sh +627 -0
- package/scripts/cleanup-workspaces.sh +412 -0
- package/scripts/cleanup-yaml-configs.sh +141 -0
- package/scripts/deploy-approved-skills.sh +263 -0
- package/scripts/health-check.sh +447 -0
- package/scripts/log-aggregator.sh +554 -0
- package/scripts/log-monitor.sh +629 -0
- package/scripts/manage-agent-workspaces.sh +434 -0
- package/scripts/migrate-schema.sh +533 -0
- package/scripts/promote-staged-skills.sh +423 -0
- package/scripts/verify-no-secrets.sh +88 -35
- package/.claude/cfn-extras/agents/deprecated-coordinators/adaptive-coordinator.md.backup +0 -161
- package/.claude/cfn-extras/agents/deprecated-coordinators/blocking-coordinator-example.md.backup +0 -728
- package/.claude/cfn-extras/agents/deprecated-coordinators/mesh-coordinator.md.backup +0 -131
- package/.claude/skills/agent-lifecycle/SKILL.md +0 -60
- package/.claude/skills/agent-lifecycle/execute-lifecycle-hook.sh +0 -573
- package/.claude/skills/agent-lifecycle/simple-audit.sh +0 -31
- package/.claude/skills/cfn-agent-spawning/spawn-agent.sh.backup +0 -273
- package/.claude/skills/cfn-loop-orchestration/orchestrate.sh.backup +0 -949
- package/README.md.backup_before_replace +0 -781
- package/claude-assets/cfn-extras/agents/deprecated-coordinators/adaptive-coordinator.md.backup +0 -161
- package/claude-assets/cfn-extras/agents/deprecated-coordinators/blocking-coordinator-example.md.backup +0 -728
- package/claude-assets/cfn-extras/agents/deprecated-coordinators/mesh-coordinator.md.backup +0 -131
- package/claude-assets/skills/cfn-agent-spawning/spawn-agent.sh.backup +0 -273
- package/claude-assets/skills/cfn-loop-orchestration/orchestrate.sh.backup +0 -949
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/agents/agent-loader.js"],"sourcesContent":["\"use strict\";\n/**\n * Dynamic Agent Loader - Reads agent definitions from .claude/agents/ directory\n * Single source of truth for agent types in the system\n */\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nvar __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.refreshAgents = exports.getAgentsByCategory = exports.isValidAgentType = exports.searchAgents = exports.getAgentCategories = exports.getAllAgents = exports.getAgent = exports.getAvailableAgentTypes = exports.agentLoader = exports.AgentLoader = void 0;\nexports.resolveLegacyAgentType = resolveLegacyAgentType;\nvar node_fs_1 = require(\"node:fs\");\nvar glob_1 = require(\"glob\");\nvar node_path_1 = require(\"node:path\");\nvar yaml_1 = require(\"yaml\");\n// Legacy agent type mapping for backward compatibility\nvar LEGACY_AGENT_MAPPING = {\n analyst: 'code-analyzer',\n coordinator: 'hierarchical-coordinator',\n optimizer: 'perf-analyzer',\n documenter: 'api-docs',\n monitor: 'performance-benchmarker',\n specialist: 'system-architect',\n architect: 'system-architect',\n};\n/**\n * Resolve legacy agent types to current equivalents\n */\nfunction resolveLegacyAgentType(legacyType) {\n return LEGACY_AGENT_MAPPING[legacyType] || legacyType;\n}\nvar AgentLoader = /** @class */ (function () {\n function AgentLoader() {\n this.agentCache = new Map();\n this.categoriesCache = [];\n this.lastLoadTime = 0;\n this.CACHE_EXPIRY = 60000; // 1 minute cache\n }\n AgentLoader.prototype.getAgentsDirectory = function () {\n var currentDir = process.cwd();\n while (currentDir !== '/') {\n var claudeAgentsPath = (0, node_path_1.resolve)(currentDir, '.claude', 'agents');\n if ((0, node_fs_1.existsSync)(claudeAgentsPath)) {\n return claudeAgentsPath;\n }\n currentDir = (0, node_path_1.dirname)(currentDir);\n }\n return (0, node_path_1.resolve)(process.cwd(), '.claude', 'agents');\n };\n AgentLoader.prototype.parseAgentFile = function (filePath) {\n try {\n var content = (0, node_fs_1.readFileSync)(filePath, 'utf-8');\n var frontmatterMatch = content.match(/^---\\r?\\n([\\s\\S]*?)\\r?\\n---\\r?\\n([\\s\\S]*)$/);\n if (!frontmatterMatch) {\n console.warn(\"No frontmatter found in \".concat(filePath));\n return null;\n }\n var yamlContent = frontmatterMatch[1], markdownContent = frontmatterMatch[2];\n var frontmatter = (0, yaml_1.parse)(yamlContent);\n var description = frontmatter.description;\n if (!frontmatter.name || !description) {\n console.warn(\"Missing required fields (name, description) in \".concat(filePath));\n return null;\n }\n return {\n name: String(frontmatter.name),\n type: frontmatter.type ? String(frontmatter.type) : undefined,\n color: frontmatter.color ? String(frontmatter.color) : undefined,\n description: String(description),\n model: frontmatter.model ? String(frontmatter.model) : undefined,\n capabilities: Array.isArray(frontmatter.capabilities)\n ? frontmatter.capabilities.map(String)\n : [],\n priority: ['low', 'medium', 'high', 'critical'].includes(String(frontmatter.priority))\n ? String(frontmatter.priority)\n : 'medium',\n tools: this.parseTools(frontmatter),\n hooks: frontmatter.hooks,\n content: markdownContent.trim(),\n };\n }\n catch (error) {\n console.error(\"Error parsing agent file \".concat(filePath, \":\"), error);\n return null;\n }\n };\n AgentLoader.prototype.parseTools = function (frontmatter) {\n var extractTools = function (input) {\n if (Array.isArray(input))\n return input.map(String);\n if (typeof input === 'string') {\n return input.split(/[,\\s]+/).map(function (t) { return t.trim(); }).filter(function (t) { return t.length > 0; });\n }\n return [];\n };\n // Safely handle tools and capabilities.tools\n var toolsFromFrontmatter = frontmatter.tools\n ? extractTools(frontmatter.tools)\n : [];\n var toolsFromCapabilities = frontmatter.capabilities && typeof frontmatter.capabilities === 'object'\n ? extractTools(Object(frontmatter.capabilities).tools)\n : [];\n return __spreadArray(__spreadArray([], toolsFromFrontmatter, true), toolsFromCapabilities, true);\n };\n AgentLoader.prototype.loadAgents = function () {\n return __awaiter(this, void 0, void 0, function () {\n var agentsDir, agentFiles, categoryMap, _i, agentFiles_1, filePath, agent, relativePath, pathParts, category;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n agentsDir = this.getAgentsDirectory();\n if (!(0, node_fs_1.existsSync)(agentsDir)) {\n console.warn(\"Agents directory not found: \".concat(agentsDir));\n return [2 /*return*/];\n }\n return [4 /*yield*/, new Promise(function (resolve, reject) {\n (0, glob_1.glob)('**/*.md', {\n cwd: agentsDir,\n ignore: ['**/README.md', '**/MIGRATION_SUMMARY.md'],\n absolute: true\n }, function (err, matches) {\n if (err)\n reject(err);\n else\n resolve(matches);\n });\n })];\n case 1:\n agentFiles = _a.sent();\n this.agentCache.clear();\n this.categoriesCache = [];\n categoryMap = new Map();\n for (_i = 0, agentFiles_1 = agentFiles; _i < agentFiles_1.length; _i++) {\n filePath = agentFiles_1[_i];\n agent = this.parseAgentFile(filePath);\n if (agent) {\n this.agentCache.set(agent.name, agent);\n relativePath = filePath.replace(agentsDir, '');\n pathParts = relativePath.split('/');\n category = pathParts[1] || 'uncategorized';\n if (!categoryMap.has(category)) {\n categoryMap.set(category, []);\n }\n categoryMap.get(category).push(agent);\n }\n }\n this.categoriesCache = Array.from(categoryMap.entries()).map(function (_a) {\n var name = _a[0], agents = _a[1];\n return ({\n name: name,\n agents: agents.sort(function (a, b) { return a.name.localeCompare(b.name); }),\n });\n });\n this.lastLoadTime = Date.now();\n return [2 /*return*/];\n }\n });\n });\n };\n // Rest of the methods remain similar to the original implementation\n AgentLoader.prototype.needsRefresh = function () {\n return Date.now() - this.lastLoadTime > this.CACHE_EXPIRY;\n };\n AgentLoader.prototype.ensureLoaded = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!(this.agentCache.size === 0 || this.needsRefresh())) return [3 /*break*/, 2];\n return [4 /*yield*/, this.loadAgents()];\n case 1:\n _a.sent();\n _a.label = 2;\n case 2: return [2 /*return*/];\n }\n });\n });\n };\n AgentLoader.prototype.getAvailableAgentTypes = function () {\n return __awaiter(this, void 0, void 0, function () {\n var currentTypes, legacyTypes;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.ensureLoaded()];\n case 1:\n _a.sent();\n currentTypes = Array.from(this.agentCache.keys());\n legacyTypes = Object.keys(LEGACY_AGENT_MAPPING);\n return [2 /*return*/, Array.from(new Set(__spreadArray(__spreadArray([], currentTypes, true), legacyTypes, true))).sort()];\n }\n });\n });\n };\n AgentLoader.prototype.getAgent = function (name) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.ensureLoaded()];\n case 1:\n _a.sent();\n return [2 /*return*/, this.agentCache.get(name) || this.agentCache.get(resolveLegacyAgentType(name)) || null];\n }\n });\n });\n };\n AgentLoader.prototype.getAllAgents = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.ensureLoaded()];\n case 1:\n _a.sent();\n return [2 /*return*/, Array.from(this.agentCache.values()).sort(function (a, b) { return a.name.localeCompare(b.name); })];\n }\n });\n });\n };\n AgentLoader.prototype.getAgentCategories = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.ensureLoaded()];\n case 1:\n _a.sent();\n return [2 /*return*/, this.categoriesCache];\n }\n });\n });\n };\n AgentLoader.prototype.searchAgents = function (query) {\n return __awaiter(this, void 0, void 0, function () {\n var lowerQuery;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.ensureLoaded()];\n case 1:\n _a.sent();\n lowerQuery = query.toLowerCase();\n return [2 /*return*/, Array.from(this.agentCache.values()).filter(function (agent) {\n var _a;\n return agent.name.toLowerCase().includes(lowerQuery) ||\n agent.description.toLowerCase().includes(lowerQuery) ||\n ((_a = agent.capabilities) === null || _a === void 0 ? void 0 : _a.some(function (cap) { return cap.toLowerCase().includes(lowerQuery); }));\n })];\n }\n });\n });\n };\n AgentLoader.prototype.isValidAgentType = function (name) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.ensureLoaded()];\n case 1:\n _a.sent();\n return [2 /*return*/, this.agentCache.has(name) || this.agentCache.has(resolveLegacyAgentType(name))];\n }\n });\n });\n };\n AgentLoader.prototype.getAgentsByCategory = function (category) {\n return __awaiter(this, void 0, void 0, function () {\n var categories, found;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.getAgentCategories()];\n case 1:\n categories = _a.sent();\n found = categories.find(function (cat) { return cat.name === category; });\n return [2 /*return*/, (found === null || found === void 0 ? void 0 : found.agents) || []];\n }\n });\n });\n };\n AgentLoader.prototype.refresh = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n this.lastLoadTime = 0;\n return [4 /*yield*/, this.loadAgents()];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n return AgentLoader;\n}());\nexports.AgentLoader = AgentLoader;\n// Singleton instance\nexports.agentLoader = new AgentLoader();\n// Convenience exports for use in other modules\nvar getAvailableAgentTypes = function () { return exports.agentLoader.getAvailableAgentTypes(); };\nexports.getAvailableAgentTypes = getAvailableAgentTypes;\nvar getAgent = function (name) { return exports.agentLoader.getAgent(name); };\nexports.getAgent = getAgent;\nvar getAllAgents = function () { return exports.agentLoader.getAllAgents(); };\nexports.getAllAgents = getAllAgents;\nvar getAgentCategories = function () { return exports.agentLoader.getAgentCategories(); };\nexports.getAgentCategories = getAgentCategories;\nvar searchAgents = function (query) { return exports.agentLoader.searchAgents(query); };\nexports.searchAgents = searchAgents;\nvar isValidAgentType = function (name) { return exports.agentLoader.isValidAgentType(name); };\nexports.isValidAgentType = isValidAgentType;\nvar getAgentsByCategory = function (category) { return exports.agentLoader.getAgentsByCategory(category); };\nexports.getAgentsByCategory = getAgentsByCategory;\nvar refreshAgents = function () { return exports.agentLoader.refresh(); };\nexports.refreshAgents = refreshAgents;\n"],"names":["__awaiter","thisArg","_arguments","P","generator","adopt","value","resolve","Promise","reject","fulfilled","step","next","e","rejected","result","done","then","apply","__generator","body","_","label","sent","t","trys","ops","f","y","g","Object","create","Iterator","prototype","verb","Symbol","iterator","n","v","op","TypeError","call","pop","length","push","__spreadArray","to","from","pack","arguments","i","l","ar","Array","slice","concat","defineProperty","exports","refreshAgents","getAgentsByCategory","isValidAgentType","searchAgents","getAgentCategories","getAllAgents","getAgent","getAvailableAgentTypes","agentLoader","AgentLoader","resolveLegacyAgentType","node_fs_1","require","glob_1","node_path_1","yaml_1","LEGACY_AGENT_MAPPING","analyst","coordinator","optimizer","documenter","monitor","specialist","architect","legacyType","agentCache","Map","categoriesCache","lastLoadTime","CACHE_EXPIRY","getAgentsDirectory","currentDir","process","cwd","claudeAgentsPath","existsSync","dirname","parseAgentFile","filePath","content","readFileSync","frontmatterMatch","match","console","warn","yamlContent","markdownContent","frontmatter","parse","description","name","String","type","undefined","color","model","capabilities","isArray","map","priority","includes","tools","parseTools","hooks","trim","error","extractTools","input","split","filter","toolsFromFrontmatter","toolsFromCapabilities","loadAgents","agentsDir","agentFiles","categoryMap","_i","agentFiles_1","agent","relativePath","pathParts","category","_a","glob","ignore","absolute","err","matches","clear","set","replace","has","get","entries","agents","sort","a","b","localeCompare","Date","now","needsRefresh","ensureLoaded","size","currentTypes","legacyTypes","keys","Set","values","query","lowerQuery","toLowerCase","some","cap","categories","found","find","cat","refresh"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/agents/agent-loader.ts"],"sourcesContent":["/**\n * Dynamic Agent Loader - Reads agent definitions from .claude/agents/ directory\n * Single source of truth for agent types in the system\n */\n\nimport { readFileSync, existsSync } from 'node:fs';\nimport { glob } from 'glob';\nimport { resolve, dirname } from 'node:path';\nimport { parse as parseYaml } from 'yaml';\n\n// Legacy agent type mapping for backward compatibility\nconst LEGACY_AGENT_MAPPING = {\n analyst: 'code-analyzer',\n coordinator: 'hierarchical-coordinator',\n optimizer: 'perf-analyzer',\n documenter: 'api-docs',\n monitor: 'performance-benchmarker',\n specialist: 'system-architect',\n architect: 'system-architect',\n} as const;\n\n/**\n * Resolve legacy agent types to current equivalents\n */\nexport function resolveLegacyAgentType(legacyType: string): string {\n return LEGACY_AGENT_MAPPING[legacyType as keyof typeof LEGACY_AGENT_MAPPING] || legacyType;\n}\n\nexport interface AgentDefinition {\n name: string;\n type?: string;\n color?: string;\n description: string;\n tools?: string[];\n model?: string;\n capabilities?: string[];\n priority?: 'low' | 'medium' | 'high' | 'critical';\n hooks?: {\n pre?: string;\n post?: string;\n task_complete?: string;\n on_rerun_request?: string;\n lifecycle?: Record<string, string>;\n };\n lifecycle?: {\n state_management?: boolean;\n persistent_memory?: boolean;\n max_retries?: number;\n timeout_ms?: number;\n auto_cleanup?: boolean;\n };\n content?: string;\n}\n\nexport interface AgentCategory {\n name: string;\n agents: AgentDefinition[];\n}\n\nexport class AgentLoader {\n private agentCache = new Map<string, AgentDefinition>();\n private categoriesCache: AgentCategory[] = [];\n private lastLoadTime = 0;\n private readonly CACHE_EXPIRY = 60_000; // 1 minute cache\n\n private getAgentsDirectory(): string {\n let currentDir = process.cwd();\n\n while (currentDir !== '/') {\n const claudeAgentsPath = resolve(currentDir, '.claude', 'agents');\n if (existsSync(claudeAgentsPath)) {\n return claudeAgentsPath;\n }\n currentDir = dirname(currentDir);\n }\n\n return resolve(process.cwd(), '.claude', 'agents');\n }\n\n private parseAgentFile(filePath: string): AgentDefinition | null {\n try {\n const content = readFileSync(filePath, 'utf-8');\n\n const frontmatterMatch = content.match(/^---\\r?\\n([\\s\\S]*?)\\r?\\n---\\r?\\n([\\s\\S]*)$/);\n if (!frontmatterMatch) {\n console.warn(`No frontmatter found in ${filePath}`);\n return null;\n }\n\n const [, yamlContent, markdownContent] = frontmatterMatch;\n const frontmatter = parseYaml(yamlContent) as Record<string, unknown>;\n\n const description = frontmatter.description;\n if (!frontmatter.name || !description) {\n console.warn(`Missing required fields (name, description) in ${filePath}`);\n return null;\n }\n\n return {\n name: String(frontmatter.name),\n type: frontmatter.type ? String(frontmatter.type) : undefined,\n color: frontmatter.color ? String(frontmatter.color) : undefined,\n description: String(description),\n model: frontmatter.model ? String(frontmatter.model) : undefined,\n capabilities: Array.isArray(frontmatter.capabilities)\n ? frontmatter.capabilities.map(String)\n : [],\n priority: ['low', 'medium', 'high', 'critical'].includes(String(frontmatter.priority))\n ? String(frontmatter.priority) as AgentDefinition['priority']\n : 'medium',\n tools: this.parseTools(frontmatter),\n hooks: frontmatter.hooks as AgentDefinition['hooks'],\n content: markdownContent.trim(),\n };\n } catch (error) {\n console.error(`Error parsing agent file ${filePath}:`, error);\n return null;\n }\n }\n\n private parseTools(frontmatter: Record<string, unknown>): string[] {\n const extractTools = (input: unknown): string[] => {\n if (Array.isArray(input)) return input.map(String);\n if (typeof input === 'string') {\n return input.split(/[,\\s]+/).map(t => t.trim()).filter(t => t.length > 0);\n }\n return [];\n };\n\n // Safely handle tools and capabilities.tools\n const toolsFromFrontmatter = frontmatter.tools\n ? extractTools(frontmatter.tools)\n : [];\n\n const toolsFromCapabilities = frontmatter.capabilities && typeof frontmatter.capabilities === 'object'\n ? extractTools(Object(frontmatter.capabilities).tools)\n : [];\n\n return [...toolsFromFrontmatter, ...toolsFromCapabilities];\n }\n\n private async loadAgents(): Promise<void> {\n const agentsDir = this.getAgentsDirectory();\n\n if (!existsSync(agentsDir)) {\n console.warn(`Agents directory not found: ${agentsDir}`);\n return;\n }\n\n const agentFiles = await new Promise<string[]>((resolve, reject) => {\n glob('**/*.md', {\n cwd: agentsDir,\n ignore: ['**/README.md', '**/MIGRATION_SUMMARY.md'],\n absolute: true\n }, (err, matches) => {\n if (err) reject(err);\n else resolve(matches);\n });\n });\n\n this.agentCache.clear();\n this.categoriesCache = [];\n\n const categoryMap = new Map<string, AgentDefinition[]>();\n\n for (const filePath of agentFiles) {\n const agent = this.parseAgentFile(filePath);\n if (agent) {\n this.agentCache.set(agent.name, agent);\n\n const relativePath = filePath.replace(agentsDir, '');\n const pathParts = relativePath.split('/');\n const category = pathParts[1] || 'uncategorized';\n\n if (!categoryMap.has(category)) {\n categoryMap.set(category, []);\n }\n categoryMap.get(category)!.push(agent);\n }\n }\n\n this.categoriesCache = Array.from(categoryMap.entries()).map(([name, agents]) => ({\n name,\n agents: agents.sort((a, b) => a.name.localeCompare(b.name)),\n }));\n\n this.lastLoadTime = Date.now();\n }\n\n // Rest of the methods remain similar to the original implementation\n private needsRefresh(): boolean {\n return Date.now() - this.lastLoadTime > this.CACHE_EXPIRY;\n }\n\n private async ensureLoaded(): Promise<void> {\n if (this.agentCache.size === 0 || this.needsRefresh()) {\n await this.loadAgents();\n }\n }\n\n async getAvailableAgentTypes(): Promise<string[]> {\n await this.ensureLoaded();\n const currentTypes = Array.from(this.agentCache.keys());\n const legacyTypes = Object.keys(LEGACY_AGENT_MAPPING);\n return Array.from(new Set([...currentTypes, ...legacyTypes])).sort();\n }\n\n async getAgent(name: string): Promise<AgentDefinition | null> {\n await this.ensureLoaded();\n return this.agentCache.get(name) || this.agentCache.get(resolveLegacyAgentType(name)) || null;\n }\n\n async getAllAgents(): Promise<AgentDefinition[]> {\n await this.ensureLoaded();\n return Array.from(this.agentCache.values()).sort((a, b) => a.name.localeCompare(b.name));\n }\n\n async getAgentCategories(): Promise<AgentCategory[]> {\n await this.ensureLoaded();\n return this.categoriesCache;\n }\n\n async searchAgents(query: string): Promise<AgentDefinition[]> {\n await this.ensureLoaded();\n const lowerQuery = query.toLowerCase();\n\n return Array.from(this.agentCache.values()).filter((agent) =>\n agent.name.toLowerCase().includes(lowerQuery) ||\n agent.description.toLowerCase().includes(lowerQuery) ||\n agent.capabilities?.some((cap) => cap.toLowerCase().includes(lowerQuery))\n );\n }\n\n async isValidAgentType(name: string): Promise<boolean> {\n await this.ensureLoaded();\n return this.agentCache.has(name) || this.agentCache.has(resolveLegacyAgentType(name));\n }\n\n async getAgentsByCategory(category: string): Promise<AgentDefinition[]> {\n const categories = await this.getAgentCategories();\n const found = categories.find((cat) => cat.name === category);\n return found?.agents || [];\n }\n\n async refresh(): Promise<void> {\n this.lastLoadTime = 0;\n await this.loadAgents();\n }\n}\n\n// Singleton instance\nexport const agentLoader = new AgentLoader();\n\n// Convenience exports for use in other modules\nexport const getAvailableAgentTypes = () => agentLoader.getAvailableAgentTypes();\nexport const getAgent = (name: string) => agentLoader.getAgent(name);\nexport const getAllAgents = () => agentLoader.getAllAgents();\nexport const getAgentCategories = () => agentLoader.getAgentCategories();\nexport const searchAgents = (query: string) => agentLoader.searchAgents(query);\nexport const isValidAgentType = (name: string) => agentLoader.isValidAgentType(name);\nexport const getAgentsByCategory = (category: string) => agentLoader.getAgentsByCategory(category);\nexport const refreshAgents = () => agentLoader.refresh();\n"],"names":["readFileSync","existsSync","glob","resolve","dirname","parse","parseYaml","LEGACY_AGENT_MAPPING","analyst","coordinator","optimizer","documenter","monitor","specialist","architect","resolveLegacyAgentType","legacyType","AgentLoader","agentCache","Map","categoriesCache","lastLoadTime","CACHE_EXPIRY","getAgentsDirectory","currentDir","process","cwd","claudeAgentsPath","parseAgentFile","filePath","content","frontmatterMatch","match","console","warn","yamlContent","markdownContent","frontmatter","description","name","String","type","undefined","color","model","capabilities","Array","isArray","map","priority","includes","tools","parseTools","hooks","trim","error","extractTools","input","split","t","filter","length","toolsFromFrontmatter","toolsFromCapabilities","Object","loadAgents","agentsDir","agentFiles","Promise","reject","ignore","absolute","err","matches","clear","categoryMap","agent","set","relativePath","replace","pathParts","category","has","get","push","from","entries","agents","sort","a","b","localeCompare","Date","now","needsRefresh","ensureLoaded","size","getAvailableAgentTypes","currentTypes","keys","legacyTypes","Set","getAgent","getAllAgents","values","getAgentCategories","searchAgents","query","lowerQuery","toLowerCase","some","cap","isValidAgentType","getAgentsByCategory","categories","found","find","cat","refresh","agentLoader","refreshAgents"],"mappings":"AAAA;;;CAGC,GAED,SAASA,YAAY,EAAEC,UAAU,QAAQ,UAAU;AACnD,SAASC,IAAI,QAAQ,OAAO;AAC5B,SAASC,OAAO,EAAEC,OAAO,QAAQ,YAAY;AAC7C,SAASC,SAASC,SAAS,QAAQ,OAAO;AAE1C,uDAAuD;AACvD,MAAMC,uBAAuB;IAC3BC,SAAS;IACTC,aAAa;IACbC,WAAW;IACXC,YAAY;IACZC,SAAS;IACTC,YAAY;IACZC,WAAW;AACb;AAEA;;CAEC,GACD,OAAO,SAASC,uBAAuBC,UAAkB;IACvD,OAAOT,oBAAoB,CAACS,WAAgD,IAAIA;AAClF;AAiCA,OAAO,MAAMC;IACHC,aAAa,IAAIC,MAA+B;IAChDC,kBAAmC,EAAE,CAAC;IACtCC,eAAe,EAAE;IACRC,eAAe,OAAO;IAE/BC,qBAA6B;QACnC,IAAIC,aAAaC,QAAQC,GAAG;QAE5B,MAAOF,eAAe,IAAK;YACzB,MAAMG,mBAAmBxB,QAAQqB,YAAY,WAAW;YACxD,IAAIvB,WAAW0B,mBAAmB;gBAChC,OAAOA;YACT;YACAH,aAAapB,QAAQoB;QACvB;QAEA,OAAOrB,QAAQsB,QAAQC,GAAG,IAAI,WAAW;IAC3C;IAEQE,eAAeC,QAAgB,EAA0B;QAC/D,IAAI;YACF,MAAMC,UAAU9B,aAAa6B,UAAU;YAEvC,MAAME,mBAAmBD,QAAQE,KAAK,CAAC;YACvC,IAAI,CAACD,kBAAkB;gBACrBE,QAAQC,IAAI,CAAC,CAAC,wBAAwB,EAAEL,UAAU;gBAClD,OAAO;YACT;YAEA,MAAM,GAAGM,aAAaC,gBAAgB,GAAGL;YACzC,MAAMM,cAAc/B,UAAU6B;YAE9B,MAAMG,cAAcD,YAAYC,WAAW;YAC3C,IAAI,CAACD,YAAYE,IAAI,IAAI,CAACD,aAAa;gBACrCL,QAAQC,IAAI,CAAC,CAAC,+CAA+C,EAAEL,UAAU;gBACzE,OAAO;YACT;YAEA,OAAO;gBACLU,MAAMC,OAAOH,YAAYE,IAAI;gBAC7BE,MAAMJ,YAAYI,IAAI,GAAGD,OAAOH,YAAYI,IAAI,IAAIC;gBACpDC,OAAON,YAAYM,KAAK,GAAGH,OAAOH,YAAYM,KAAK,IAAID;gBACvDJ,aAAaE,OAAOF;gBACpBM,OAAOP,YAAYO,KAAK,GAAGJ,OAAOH,YAAYO,KAAK,IAAIF;gBACvDG,cAAcC,MAAMC,OAAO,CAACV,YAAYQ,YAAY,IAChDR,YAAYQ,YAAY,CAACG,GAAG,CAACR,UAC7B,EAAE;gBACNS,UAAU;oBAAC;oBAAO;oBAAU;oBAAQ;iBAAW,CAACC,QAAQ,CAACV,OAAOH,YAAYY,QAAQ,KAChFT,OAAOH,YAAYY,QAAQ,IAC3B;gBACJE,OAAO,IAAI,CAACC,UAAU,CAACf;gBACvBgB,OAAOhB,YAAYgB,KAAK;gBACxBvB,SAASM,gBAAgBkB,IAAI;YAC/B;QACF,EAAE,OAAOC,OAAO;YACdtB,QAAQsB,KAAK,CAAC,CAAC,yBAAyB,EAAE1B,SAAS,CAAC,CAAC,EAAE0B;YACvD,OAAO;QACT;IACF;IAEQH,WAAWf,WAAoC,EAAY;QACjE,MAAMmB,eAAe,CAACC;YACpB,IAAIX,MAAMC,OAAO,CAACU,QAAQ,OAAOA,MAAMT,GAAG,CAACR;YAC3C,IAAI,OAAOiB,UAAU,UAAU;gBAC7B,OAAOA,MAAMC,KAAK,CAAC,UAAUV,GAAG,CAACW,CAAAA,IAAKA,EAAEL,IAAI,IAAIM,MAAM,CAACD,CAAAA,IAAKA,EAAEE,MAAM,GAAG;YACzE;YACA,OAAO,EAAE;QACX;QAEA,6CAA6C;QAC7C,MAAMC,uBAAuBzB,YAAYc,KAAK,GAC1CK,aAAanB,YAAYc,KAAK,IAC9B,EAAE;QAEN,MAAMY,wBAAwB1B,YAAYQ,YAAY,IAAI,OAAOR,YAAYQ,YAAY,KAAK,WAC1FW,aAAaQ,OAAO3B,YAAYQ,YAAY,EAAEM,KAAK,IACnD,EAAE;QAEN,OAAO;eAAIW;eAAyBC;SAAsB;IAC5D;IAEA,MAAcE,aAA4B;QACxC,MAAMC,YAAY,IAAI,CAAC3C,kBAAkB;QAEzC,IAAI,CAACtB,WAAWiE,YAAY;YAC1BjC,QAAQC,IAAI,CAAC,CAAC,4BAA4B,EAAEgC,WAAW;YACvD;QACF;QAEA,MAAMC,aAAa,MAAM,IAAIC,QAAkB,CAACjE,SAASkE;YACvDnE,KAAK,WAAW;gBACdwB,KAAKwC;gBACLI,QAAQ;oBAAC;oBAAgB;iBAA0B;gBACnDC,UAAU;YACZ,GAAG,CAACC,KAAKC;gBACP,IAAID,KAAKH,OAAOG;qBACXrE,QAAQsE;YACf;QACF;QAEA,IAAI,CAACvD,UAAU,CAACwD,KAAK;QACrB,IAAI,CAACtD,eAAe,GAAG,EAAE;QAEzB,MAAMuD,cAAc,IAAIxD;QAExB,KAAK,MAAMU,YAAYsC,WAAY;YACjC,MAAMS,QAAQ,IAAI,CAAChD,cAAc,CAACC;YAClC,IAAI+C,OAAO;gBACT,IAAI,CAAC1D,UAAU,CAAC2D,GAAG,CAACD,MAAMrC,IAAI,EAAEqC;gBAEhC,MAAME,eAAejD,SAASkD,OAAO,CAACb,WAAW;gBACjD,MAAMc,YAAYF,aAAapB,KAAK,CAAC;gBACrC,MAAMuB,WAAWD,SAAS,CAAC,EAAE,IAAI;gBAEjC,IAAI,CAACL,YAAYO,GAAG,CAACD,WAAW;oBAC9BN,YAAYE,GAAG,CAACI,UAAU,EAAE;gBAC9B;gBACAN,YAAYQ,GAAG,CAACF,UAAWG,IAAI,CAACR;YAClC;QACF;QAEA,IAAI,CAACxD,eAAe,GAAG0B,MAAMuC,IAAI,CAACV,YAAYW,OAAO,IAAItC,GAAG,CAAC,CAAC,CAACT,MAAMgD,OAAO,GAAM,CAAA;gBAChFhD;gBACAgD,QAAQA,OAAOC,IAAI,CAAC,CAACC,GAAGC,IAAMD,EAAElD,IAAI,CAACoD,aAAa,CAACD,EAAEnD,IAAI;YAC3D,CAAA;QAEA,IAAI,CAAClB,YAAY,GAAGuE,KAAKC,GAAG;IAC9B;IAEA,oEAAoE;IAC5DC,eAAwB;QAC9B,OAAOF,KAAKC,GAAG,KAAK,IAAI,CAACxE,YAAY,GAAG,IAAI,CAACC,YAAY;IAC3D;IAEA,MAAcyE,eAA8B;QAC1C,IAAI,IAAI,CAAC7E,UAAU,CAAC8E,IAAI,KAAK,KAAK,IAAI,CAACF,YAAY,IAAI;YACrD,MAAM,IAAI,CAAC7B,UAAU;QACvB;IACF;IAEA,MAAMgC,yBAA4C;QAChD,MAAM,IAAI,CAACF,YAAY;QACvB,MAAMG,eAAepD,MAAMuC,IAAI,CAAC,IAAI,CAACnE,UAAU,CAACiF,IAAI;QACpD,MAAMC,cAAcpC,OAAOmC,IAAI,CAAC5F;QAChC,OAAOuC,MAAMuC,IAAI,CAAC,IAAIgB,IAAI;eAAIH;eAAiBE;SAAY,GAAGZ,IAAI;IACpE;IAEA,MAAMc,SAAS/D,IAAY,EAAmC;QAC5D,MAAM,IAAI,CAACwD,YAAY;QACvB,OAAO,IAAI,CAAC7E,UAAU,CAACiE,GAAG,CAAC5C,SAAS,IAAI,CAACrB,UAAU,CAACiE,GAAG,CAACpE,uBAAuBwB,UAAU;IAC3F;IAEA,MAAMgE,eAA2C;QAC/C,MAAM,IAAI,CAACR,YAAY;QACvB,OAAOjD,MAAMuC,IAAI,CAAC,IAAI,CAACnE,UAAU,CAACsF,MAAM,IAAIhB,IAAI,CAAC,CAACC,GAAGC,IAAMD,EAAElD,IAAI,CAACoD,aAAa,CAACD,EAAEnD,IAAI;IACxF;IAEA,MAAMkE,qBAA+C;QACnD,MAAM,IAAI,CAACV,YAAY;QACvB,OAAO,IAAI,CAAC3E,eAAe;IAC7B;IAEA,MAAMsF,aAAaC,KAAa,EAA8B;QAC5D,MAAM,IAAI,CAACZ,YAAY;QACvB,MAAMa,aAAaD,MAAME,WAAW;QAEpC,OAAO/D,MAAMuC,IAAI,CAAC,IAAI,CAACnE,UAAU,CAACsF,MAAM,IAAI5C,MAAM,CAAC,CAACgB,QAClDA,MAAMrC,IAAI,CAACsE,WAAW,GAAG3D,QAAQ,CAAC0D,eAClChC,MAAMtC,WAAW,CAACuE,WAAW,GAAG3D,QAAQ,CAAC0D,eACzChC,MAAM/B,YAAY,EAAEiE,KAAK,CAACC,MAAQA,IAAIF,WAAW,GAAG3D,QAAQ,CAAC0D;IAEjE;IAEA,MAAMI,iBAAiBzE,IAAY,EAAoB;QACrD,MAAM,IAAI,CAACwD,YAAY;QACvB,OAAO,IAAI,CAAC7E,UAAU,CAACgE,GAAG,CAAC3C,SAAS,IAAI,CAACrB,UAAU,CAACgE,GAAG,CAACnE,uBAAuBwB;IACjF;IAEA,MAAM0E,oBAAoBhC,QAAgB,EAA8B;QACtE,MAAMiC,aAAa,MAAM,IAAI,CAACT,kBAAkB;QAChD,MAAMU,QAAQD,WAAWE,IAAI,CAAC,CAACC,MAAQA,IAAI9E,IAAI,KAAK0C;QACpD,OAAOkC,OAAO5B,UAAU,EAAE;IAC5B;IAEA,MAAM+B,UAAyB;QAC7B,IAAI,CAACjG,YAAY,GAAG;QACpB,MAAM,IAAI,CAAC4C,UAAU;IACvB;AACF;AAEA,qBAAqB;AACrB,OAAO,MAAMsD,cAAc,IAAItG,cAAc;AAE7C,+CAA+C;AAC/C,OAAO,MAAMgF,yBAAyB,IAAMsB,YAAYtB,sBAAsB,GAAG;AACjF,OAAO,MAAMK,WAAW,CAAC/D,OAAiBgF,YAAYjB,QAAQ,CAAC/D,MAAM;AACrE,OAAO,MAAMgE,eAAe,IAAMgB,YAAYhB,YAAY,GAAG;AAC7D,OAAO,MAAME,qBAAqB,IAAMc,YAAYd,kBAAkB,GAAG;AACzE,OAAO,MAAMC,eAAe,CAACC,QAAkBY,YAAYb,YAAY,CAACC,OAAO;AAC/E,OAAO,MAAMK,mBAAmB,CAACzE,OAAiBgF,YAAYP,gBAAgB,CAACzE,MAAM;AACrF,OAAO,MAAM0E,sBAAsB,CAAChC,WAAqBsC,YAAYN,mBAAmB,CAAChC,UAAU;AACnG,OAAO,MAAMuC,gBAAgB,IAAMD,YAAYD,OAAO,GAAG"}ories, found;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.getAgentCategories()];\n case 1:\n categories = _a.sent();\n found = categories.find(function (cat) { return cat.name === category; });\n return [2 /*return*/, (found === null || found === void 0 ? void 0 : found.agents) || []];\n }\n });\n });\n };\n AgentLoader.prototype.refresh = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n this.lastLoadTime = 0;\n return [4 /*yield*/, this.loadAgents()];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n return AgentLoader;\n}());\nexports.AgentLoader = AgentLoader;\n// Singleton instance\nexports.agentLoader = new AgentLoader();\n// Convenience exports for use in other modules\nvar getAvailableAgentTypes = function () { return exports.agentLoader.getAvailableAgentTypes(); };\nexports.getAvailableAgentTypes = getAvailableAgentTypes;\nvar getAgent = function (name) { return exports.agentLoader.getAgent(name); };\nexports.getAgent = getAgent;\nvar getAllAgents = function () { return exports.agentLoader.getAllAgents(); };\nexports.getAllAgents = getAllAgents;\nvar getAgentCategories = function () { return exports.agentLoader.getAgentCategories(); };\nexports.getAgentCategories = getAgentCategories;\nvar searchAgents = function (query) { return exports.agentLoader.searchAgents(query); };\nexports.searchAgents = searchAgents;\nvar isValidAgentType = function (name) { return exports.agentLoader.isValidAgentType(name); };\nexports.isValidAgentType = isValidAgentType;\nvar getAgentsByCategory = function (category) { return exports.agentLoader.getAgentsByCategory(category); };\nexports.getAgentsByCategory = getAgentsByCategory;\nvar refreshAgents = function () { return exports.agentLoader.refresh(); };\nexports.refreshAgents = refreshAgents;\n"],"names":["__awaiter","thisArg","_arguments","P","generator","adopt","value","resolve","Promise","reject","fulfilled","step","next","e","rejected","result","done","then","apply","__generator","body","_","label","sent","t","trys","ops","f","y","g","Object","create","Iterator","prototype","verb","Symbol","iterator","n","v","op","TypeError","call","pop","length","push","__spreadArray","to","from","pack","arguments","i","l","ar","Array","slice","concat","defineProperty","exports","refreshAgents","getAgentsByCategory","isValidAgentType","searchAgents","getAgentCategories","getAllAgents","getAgent","getAvailableAgentTypes","agentLoader","AgentLoader","resolveLegacyAgentType","node_fs_1","require","glob_1","node_path_1","yaml_1","LEGACY_AGENT_MAPPING","analyst","coordinator","optimizer","documenter","monitor","specialist","architect","legacyType","agentCache","Map","categoriesCache","lastLoadTime","CACHE_EXPIRY","getAgentsDirectory","currentDir","process","cwd","claudeAgentsPath","existsSync","dirname","parseAgentFile","filePath","content","readFileSync","frontmatterMatch","match","console","warn","yamlContent","markdownContent","frontmatter","parse","description","name","String","type","undefined","color","model","capabilities","isArray","map","priority","includes","tools","parseTools","hooks","trim","error","extractTools","input","split","filter","toolsFromFrontmatter","toolsFromCapabilities","loadAgents","agentsDir","agentFiles","categoryMap","_i","agentFiles_1","agent","relativePath","pathParts","category","_a","glob","ignore","absolute","err","matches","clear","set","replace","has","get","entries","agents","sort","a","b","localeCompare","Date","now","needsRefresh","ensureLoaded","size","currentTypes","legacyTypes","keys","Set","values","query","lowerQuery","toLowerCase","some","cap","categories","found","find","cat","refresh"],"mappings":"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"}
|
|
@@ -42,7 +42,7 @@ export class TaskAgentIntegration {
|
|
|
42
42
|
if (validation.fallbackUsed) {
|
|
43
43
|
enhancedPrompt = `[Agent Type: Originally requested '${validation.originalType}', using '${validation.resolvedType}' as validated type]\n\n${enhancedPrompt}`;
|
|
44
44
|
}
|
|
45
|
-
enhancedPrompt += `\n\n[Coordination Context:
|
|
45
|
+
enhancedPrompt += `\n\n[Coordination Context: Task coordination via TodoWrite tool]`;
|
|
46
46
|
return enhancedPrompt;
|
|
47
47
|
}
|
|
48
48
|
async prepareBatchAgentSpawn(requests) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/agents/task-agent-integration.ts"],"sourcesContent":["/**\r\n * Task Agent Integration Layer\r\n * Provides validation and fallback for Claude Code's Task tool\r\n */\r\n\r\nimport { validateAgentType, AgentValidationResult } from './agent-validator.js';\r\nimport { getAvailableAgentTypes } from './agent-loader.js';\r\n\r\nexport interface TaskAgentSpawnRequest {\r\n type: string;\r\n description: string;\r\n prompt: string;\r\n capabilities?: string[];\r\n priority?: 'low' | 'medium' | 'high' | 'critical';\r\n}\r\n\r\nexport interface TaskAgentSpawnResult {\r\n originalRequest: TaskAgentSpawnRequest;\r\n validationResult: AgentValidationResult;\r\n finalType: string;\r\n spawnCommand: string;\r\n warnings: string[];\r\n success: boolean;\r\n}\r\n\r\nexport class TaskAgentIntegration {\r\n private static instance: TaskAgentIntegration;\r\n\r\n static getInstance(): TaskAgentIntegration {\r\n if (!this.instance) {\r\n this.instance = new TaskAgentIntegration();\r\n }\r\n return this.instance;\r\n }\r\n\r\n async prepareAgentSpawn(request: TaskAgentSpawnRequest): Promise<TaskAgentSpawnResult> {\r\n const validation = await validateAgentType(request.type);\r\n const warnings: string[] = [...validation.warnings];\r\n\r\n const spawnCommand = this.generateTaskCommand(request, validation);\r\n\r\n if (validation.fallbackUsed) {\r\n console.warn(`⚠️ Agent type validation for '${request.type}':`);\r\n for (const warning of warnings) {\r\n console.warn(` ${warning}`);\r\n }\r\n console.info(`✅ Using validated type: '${validation.resolvedType}'`);\r\n }\r\n\r\n return {\r\n originalRequest: request,\r\n validationResult: validation,\r\n finalType: validation.resolvedType,\r\n spawnCommand,\r\n warnings,\r\n success: true,\r\n };\r\n }\r\n\r\n private generateTaskCommand(\r\n request: TaskAgentSpawnRequest,\r\n validation: AgentValidationResult,\r\n ): string {\r\n const enhancedPrompt = this.enhancePrompt(request, validation);\r\n\r\n return `Task(\"${request.description}\", \"${enhancedPrompt}\", \"${validation.resolvedType}\")`;\r\n }\r\n\r\n private enhancePrompt(request: TaskAgentSpawnRequest, validation: AgentValidationResult): string {\r\n let enhancedPrompt = request.prompt;\r\n\r\n if (validation.fallbackUsed) {\r\n enhancedPrompt = `[Agent Type: Originally requested '${validation.originalType}', using '${validation.resolvedType}' as validated type]\\n\\n${enhancedPrompt}`;\r\n }\r\n\r\n enhancedPrompt += `\\n\\n[Coordination Context: Use hooks for coordination - npx claude-flow@alpha hooks pre-task --description \"${request.description}\"]`;\r\n\r\n return enhancedPrompt;\r\n }\r\n\r\n async prepareBatchAgentSpawn(requests: TaskAgentSpawnRequest[]): Promise<TaskAgentSpawnResult[]> {\r\n const results: TaskAgentSpawnResult[] = [];\r\n\r\n for (const request of requests) {\r\n try {\r\n const result = await this.prepareAgentSpawn(request);\r\n results.push(result);\r\n } catch (error) {\r\n console.error(`Failed to prepare agent spawn for ${request.type}:`, error);\r\n results.push({\r\n originalRequest: request,\r\n validationResult: {\r\n isValid: false,\r\n resolvedType: 'researcher',\r\n originalType: request.type,\r\n fallbackUsed: true,\r\n warnings: [`Error validating agent type: ${error}`],\r\n },\r\n finalType: 'researcher',\r\n spawnCommand: `Task(\"${request.description}\", \"${request.prompt}\", \"researcher\")`,\r\n warnings: [`Failed to validate ${request.type}, using researcher as fallback`],\r\n success: false,\r\n });\r\n }\r\n }\r\n\r\n return results;\r\n }\r\n\r\n async suggestAgentTypes(taskDescription: string): Promise<string[]> {\r\n const availableTypes = await getAvailableAgentTypes();\r\n const suggestions: string[] = [];\r\n const keywords = taskDescription.toLowerCase().split(/\\s+/);\r\n\r\n for (const agentType of availableTypes) {\r\n const agentKeywords = agentType.toLowerCase().split(/[-_]/);\r\n\r\n const overlap = keywords.some((keyword) =>\r\n agentKeywords.some(\r\n (agentKeyword) => agentKeyword.includes(keyword) || keyword.includes(agentKeyword),\r\n ),\r\n );\r\n\r\n if (overlap) {\r\n suggestions.push(agentType);\r\n }\r\n }\r\n\r\n return suggestions.length === 0\r\n ? ['researcher', 'coder', 'reviewer', 'tester']\r\n : suggestions.slice(0, 5);\r\n }\r\n\r\n validateAgentTypeSync(type: string): { isValid: boolean; resolvedType: string } {\r\n const legacyMapping: Record<string, string> = {\r\n analyst: 'code-analyzer',\r\n 'consensus-builder': 'consensus-builder',\r\n monitor: 'performance-benchmarker',\r\n coordinator: 'hierarchical-coordinator',\r\n optimizer: 'perf-analyzer',\r\n documenter: 'api-docs',\r\n specialist: 'system-architect',\r\n architect: 'system-architect',\r\n };\r\n\r\n const resolvedType = legacyMapping[type.toLowerCase()] || type;\r\n\r\n return {\r\n isValid: true,\r\n resolvedType,\r\n };\r\n }\r\n\r\n async getAgentInfo(): Promise<{\r\n available: string[];\r\n categories: { [category: string]: string[] };\r\n legacy: { [old: string]: string };\r\n suggestions: { [task: string]: string[] };\r\n }> {\r\n const availableTypes = await getAvailableAgentTypes();\r\n\r\n const categories: Record<string, string[]> = {\r\n core: [],\r\n development: [],\r\n analysis: [],\r\n coordination: [],\r\n testing: [],\r\n specialized: [],\r\n };\r\n\r\n for (const type of availableTypes) {\r\n if (type.includes('coder') || type.includes('dev')) {\r\n categories.development.push(type);\r\n } else if (type.includes('test')) {\r\n categories.testing.push(type);\r\n } else if (type.includes('analyz') || type.includes('review')) {\r\n categories.analysis.push(type);\r\n } else if (type.includes('coordinator') || type.includes('orchestrat')) {\r\n categories.coordination.push(type);\r\n } else if (['researcher', 'reviewer', 'planner'].includes(type)) {\r\n categories.core.push(type);\r\n } else {\r\n categories.specialized.push(type);\r\n }\r\n }\r\n\r\n return {\r\n available: availableTypes,\r\n categories,\r\n legacy: {\r\n analyst: 'code-analyzer',\r\n 'consensus-builder': 'consensus-builder',\r\n monitor: 'performance-benchmarker',\r\n coordinator: 'hierarchical-coordinator',\r\n optimizer: 'perf-analyzer',\r\n documenter: 'api-docs',\r\n specialist: 'system-architect',\r\n architect: 'system-architect',\r\n },\r\n suggestions: {\r\n code: ['coder', 'reviewer', 'code-analyzer'],\r\n test: ['tester', 'production-validator'],\r\n design: ['system-architect', 'base-template-generator'],\r\n analysis: ['code-analyzer', 'perf-analyzer'],\r\n documentation: ['api-docs'],\r\n coordination: ['task-orchestrator', 'hierarchical-coordinator'],\r\n },\r\n };\r\n }\r\n}\r\n\r\nexport const taskAgentIntegration = TaskAgentIntegration.getInstance();\r\n\r\nexport const prepareAgentSpawn = (request: TaskAgentSpawnRequest) =>\r\n taskAgentIntegration.prepareAgentSpawn(request);\r\n\r\nexport const prepareBatchAgentSpawn = (requests: TaskAgentSpawnRequest[]) =>\r\n taskAgentIntegration.prepareBatchAgentSpawn(requests);\r\n\r\nexport const suggestAgentTypes = (taskDescription: string) =>\r\n taskAgentIntegration.suggestAgentTypes(taskDescription);\r\n\r\nexport const validateAgentTypeSync = (type: string) =>\r\n taskAgentIntegration.validateAgentTypeSync(type);\r\n\r\nexport const getAgentInfo = () => taskAgentIntegration.getAgentInfo();\r\n\r\nexport async function claudeCodeTaskHook(\r\n subagentType: string,\r\n description: string,\r\n prompt: string,\r\n): Promise<{\r\n validatedType: string;\r\n enhancedPrompt: string;\r\n warnings: string[];\r\n}> {\r\n const request: TaskAgentSpawnRequest = {\r\n type: subagentType,\r\n description,\r\n prompt,\r\n };\r\n\r\n const result = await prepareAgentSpawn(request);\r\n\r\n return {\r\n validatedType: result.finalType,\r\n enhancedPrompt: result.originalRequest.prompt,\r\n warnings: result.warnings,\r\n };\r\n}"],"names":["validateAgentType","getAvailableAgentTypes","TaskAgentIntegration","instance","getInstance","prepareAgentSpawn","request","validation","type","warnings","spawnCommand","generateTaskCommand","fallbackUsed","console","warn","warning","info","resolvedType","originalRequest","validationResult","finalType","success","enhancedPrompt","enhancePrompt","description","prompt","originalType","prepareBatchAgentSpawn","requests","results","result","push","error","isValid","suggestAgentTypes","taskDescription","availableTypes","suggestions","keywords","toLowerCase","split","agentType","agentKeywords","overlap","some","keyword","agentKeyword","includes","length","slice","validateAgentTypeSync","legacyMapping","analyst","monitor","coordinator","optimizer","documenter","specialist","architect","getAgentInfo","categories","core","development","analysis","coordination","testing","specialized","available","legacy","code","test","design","documentation","taskAgentIntegration","claudeCodeTaskHook","subagentType","validatedType"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/agents/task-agent-integration.ts"],"sourcesContent":["/**\r\n * Task Agent Integration Layer\r\n * Provides validation and fallback for Claude Code's Task tool\r\n */\r\n\r\nimport { validateAgentType, AgentValidationResult } from './agent-validator.js';\r\nimport { getAvailableAgentTypes } from './agent-loader.js';\r\n\r\nexport interface TaskAgentSpawnRequest {\r\n type: string;\r\n description: string;\r\n prompt: string;\r\n capabilities?: string[];\r\n priority?: 'low' | 'medium' | 'high' | 'critical';\r\n}\r\n\r\nexport interface TaskAgentSpawnResult {\r\n originalRequest: TaskAgentSpawnRequest;\r\n validationResult: AgentValidationResult;\r\n finalType: string;\r\n spawnCommand: string;\r\n warnings: string[];\r\n success: boolean;\r\n}\r\n\r\nexport class TaskAgentIntegration {\r\n private static instance: TaskAgentIntegration;\r\n\r\n static getInstance(): TaskAgentIntegration {\r\n if (!this.instance) {\r\n this.instance = new TaskAgentIntegration();\r\n }\r\n return this.instance;\r\n }\r\n\r\n async prepareAgentSpawn(request: TaskAgentSpawnRequest): Promise<TaskAgentSpawnResult> {\r\n const validation = await validateAgentType(request.type);\r\n const warnings: string[] = [...validation.warnings];\r\n\r\n const spawnCommand = this.generateTaskCommand(request, validation);\r\n\r\n if (validation.fallbackUsed) {\r\n console.warn(`⚠️ Agent type validation for '${request.type}':`);\r\n for (const warning of warnings) {\r\n console.warn(` ${warning}`);\r\n }\r\n console.info(`✅ Using validated type: '${validation.resolvedType}'`);\r\n }\r\n\r\n return {\r\n originalRequest: request,\r\n validationResult: validation,\r\n finalType: validation.resolvedType,\r\n spawnCommand,\r\n warnings,\r\n success: true,\r\n };\r\n }\r\n\r\n private generateTaskCommand(\r\n request: TaskAgentSpawnRequest,\r\n validation: AgentValidationResult,\r\n ): string {\r\n const enhancedPrompt = this.enhancePrompt(request, validation);\r\n\r\n return `Task(\"${request.description}\", \"${enhancedPrompt}\", \"${validation.resolvedType}\")`;\r\n }\r\n\r\n private enhancePrompt(request: TaskAgentSpawnRequest, validation: AgentValidationResult): string {\r\n let enhancedPrompt = request.prompt;\r\n\r\n if (validation.fallbackUsed) {\r\n enhancedPrompt = `[Agent Type: Originally requested '${validation.originalType}', using '${validation.resolvedType}' as validated type]\\n\\n${enhancedPrompt}`;\r\n }\r\n\r\n enhancedPrompt += `\\n\\n[Coordination Context: Task coordination via TodoWrite tool]`;\r\n\r\n return enhancedPrompt;\r\n }\r\n\r\n async prepareBatchAgentSpawn(requests: TaskAgentSpawnRequest[]): Promise<TaskAgentSpawnResult[]> {\r\n const results: TaskAgentSpawnResult[] = [];\r\n\r\n for (const request of requests) {\r\n try {\r\n const result = await this.prepareAgentSpawn(request);\r\n results.push(result);\r\n } catch (error) {\r\n console.error(`Failed to prepare agent spawn for ${request.type}:`, error);\r\n results.push({\r\n originalRequest: request,\r\n validationResult: {\r\n isValid: false,\r\n resolvedType: 'researcher',\r\n originalType: request.type,\r\n fallbackUsed: true,\r\n warnings: [`Error validating agent type: ${error}`],\r\n },\r\n finalType: 'researcher',\r\n spawnCommand: `Task(\"${request.description}\", \"${request.prompt}\", \"researcher\")`,\r\n warnings: [`Failed to validate ${request.type}, using researcher as fallback`],\r\n success: false,\r\n });\r\n }\r\n }\r\n\r\n return results;\r\n }\r\n\r\n async suggestAgentTypes(taskDescription: string): Promise<string[]> {\r\n const availableTypes = await getAvailableAgentTypes();\r\n const suggestions: string[] = [];\r\n const keywords = taskDescription.toLowerCase().split(/\\s+/);\r\n\r\n for (const agentType of availableTypes) {\r\n const agentKeywords = agentType.toLowerCase().split(/[-_]/);\r\n\r\n const overlap = keywords.some((keyword) =>\r\n agentKeywords.some(\r\n (agentKeyword) => agentKeyword.includes(keyword) || keyword.includes(agentKeyword),\r\n ),\r\n );\r\n\r\n if (overlap) {\r\n suggestions.push(agentType);\r\n }\r\n }\r\n\r\n return suggestions.length === 0\r\n ? ['researcher', 'coder', 'reviewer', 'tester']\r\n : suggestions.slice(0, 5);\r\n }\r\n\r\n validateAgentTypeSync(type: string): { isValid: boolean; resolvedType: string } {\r\n const legacyMapping: Record<string, string> = {\r\n analyst: 'code-analyzer',\r\n 'consensus-builder': 'consensus-builder',\r\n monitor: 'performance-benchmarker',\r\n coordinator: 'hierarchical-coordinator',\r\n optimizer: 'perf-analyzer',\r\n documenter: 'api-docs',\r\n specialist: 'system-architect',\r\n architect: 'system-architect',\r\n };\r\n\r\n const resolvedType = legacyMapping[type.toLowerCase()] || type;\r\n\r\n return {\r\n isValid: true,\r\n resolvedType,\r\n };\r\n }\r\n\r\n async getAgentInfo(): Promise<{\r\n available: string[];\r\n categories: { [category: string]: string[] };\r\n legacy: { [old: string]: string };\r\n suggestions: { [task: string]: string[] };\r\n }> {\r\n const availableTypes = await getAvailableAgentTypes();\r\n\r\n const categories: Record<string, string[]> = {\r\n core: [],\r\n development: [],\r\n analysis: [],\r\n coordination: [],\r\n testing: [],\r\n specialized: [],\r\n };\r\n\r\n for (const type of availableTypes) {\r\n if (type.includes('coder') || type.includes('dev')) {\r\n categories.development.push(type);\r\n } else if (type.includes('test')) {\r\n categories.testing.push(type);\r\n } else if (type.includes('analyz') || type.includes('review')) {\r\n categories.analysis.push(type);\r\n } else if (type.includes('coordinator') || type.includes('orchestrat')) {\r\n categories.coordination.push(type);\r\n } else if (['researcher', 'reviewer', 'planner'].includes(type)) {\r\n categories.core.push(type);\r\n } else {\r\n categories.specialized.push(type);\r\n }\r\n }\r\n\r\n return {\r\n available: availableTypes,\r\n categories,\r\n legacy: {\r\n analyst: 'code-analyzer',\r\n 'consensus-builder': 'consensus-builder',\r\n monitor: 'performance-benchmarker',\r\n coordinator: 'hierarchical-coordinator',\r\n optimizer: 'perf-analyzer',\r\n documenter: 'api-docs',\r\n specialist: 'system-architect',\r\n architect: 'system-architect',\r\n },\r\n suggestions: {\r\n code: ['coder', 'reviewer', 'code-analyzer'],\r\n test: ['tester', 'production-validator'],\r\n design: ['system-architect', 'base-template-generator'],\r\n analysis: ['code-analyzer', 'perf-analyzer'],\r\n documentation: ['api-docs'],\r\n coordination: ['task-orchestrator', 'hierarchical-coordinator'],\r\n },\r\n };\r\n }\r\n}\r\n\r\nexport const taskAgentIntegration = TaskAgentIntegration.getInstance();\r\n\r\nexport const prepareAgentSpawn = (request: TaskAgentSpawnRequest) =>\r\n taskAgentIntegration.prepareAgentSpawn(request);\r\n\r\nexport const prepareBatchAgentSpawn = (requests: TaskAgentSpawnRequest[]) =>\r\n taskAgentIntegration.prepareBatchAgentSpawn(requests);\r\n\r\nexport const suggestAgentTypes = (taskDescription: string) =>\r\n taskAgentIntegration.suggestAgentTypes(taskDescription);\r\n\r\nexport const validateAgentTypeSync = (type: string) =>\r\n taskAgentIntegration.validateAgentTypeSync(type);\r\n\r\nexport const getAgentInfo = () => taskAgentIntegration.getAgentInfo();\r\n\r\nexport async function claudeCodeTaskHook(\r\n subagentType: string,\r\n description: string,\r\n prompt: string,\r\n): Promise<{\r\n validatedType: string;\r\n enhancedPrompt: string;\r\n warnings: string[];\r\n}> {\r\n const request: TaskAgentSpawnRequest = {\r\n type: subagentType,\r\n description,\r\n prompt,\r\n };\r\n\r\n const result = await prepareAgentSpawn(request);\r\n\r\n return {\r\n validatedType: result.finalType,\r\n enhancedPrompt: result.originalRequest.prompt,\r\n warnings: result.warnings,\r\n };\r\n}"],"names":["validateAgentType","getAvailableAgentTypes","TaskAgentIntegration","instance","getInstance","prepareAgentSpawn","request","validation","type","warnings","spawnCommand","generateTaskCommand","fallbackUsed","console","warn","warning","info","resolvedType","originalRequest","validationResult","finalType","success","enhancedPrompt","enhancePrompt","description","prompt","originalType","prepareBatchAgentSpawn","requests","results","result","push","error","isValid","suggestAgentTypes","taskDescription","availableTypes","suggestions","keywords","toLowerCase","split","agentType","agentKeywords","overlap","some","keyword","agentKeyword","includes","length","slice","validateAgentTypeSync","legacyMapping","analyst","monitor","coordinator","optimizer","documenter","specialist","architect","getAgentInfo","categories","core","development","analysis","coordination","testing","specialized","available","legacy","code","test","design","documentation","taskAgentIntegration","claudeCodeTaskHook","subagentType","validatedType"],"mappings":"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"}
|
|
@@ -0,0 +1,390 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Health Check HTTP Endpoints
|
|
3
|
+
*
|
|
4
|
+
* Provides REST API endpoints for health monitoring:
|
|
5
|
+
* - GET /health - Overall system health status
|
|
6
|
+
* - GET /health/ready - Kubernetes readiness probe
|
|
7
|
+
* - GET /health/live - Kubernetes liveness probe
|
|
8
|
+
* - GET /health/detailed - Detailed component-level health report
|
|
9
|
+
*
|
|
10
|
+
* Integrates with monitoring dashboards and Kubernetes orchestration.
|
|
11
|
+
*
|
|
12
|
+
* Part of Task P2-4.1: Comprehensive Health Checks
|
|
13
|
+
*/ import express from 'express';
|
|
14
|
+
import { HealthCheckSystem } from '../services/health-check-system.js';
|
|
15
|
+
/**
|
|
16
|
+
* Health check endpoints router
|
|
17
|
+
*/ export class HealthEndpoints {
|
|
18
|
+
router;
|
|
19
|
+
healthCheckSystem;
|
|
20
|
+
constructor(config){
|
|
21
|
+
this.router = express.Router();
|
|
22
|
+
this.healthCheckSystem = new HealthCheckSystem(config?.systemConfig);
|
|
23
|
+
this.setupRoutes();
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Setup all health check routes
|
|
27
|
+
*/ setupRoutes() {
|
|
28
|
+
/**
|
|
29
|
+
* GET /health - Overall system health
|
|
30
|
+
*
|
|
31
|
+
* Returns the current health status of the system including:
|
|
32
|
+
* - Overall status (healthy/degraded/unhealthy)
|
|
33
|
+
* - Response latency
|
|
34
|
+
* - Component health summary
|
|
35
|
+
*
|
|
36
|
+
* Response time: <1s
|
|
37
|
+
* Status codes:
|
|
38
|
+
* 200: System healthy
|
|
39
|
+
* 503: System degraded or unhealthy
|
|
40
|
+
*/ this.router.get('/health', async (req, res)=>{
|
|
41
|
+
const startTime = Date.now();
|
|
42
|
+
const overall = await this.healthCheckSystem.getOverallHealth();
|
|
43
|
+
const responseTime = Date.now() - startTime;
|
|
44
|
+
const response = {
|
|
45
|
+
status: overall.status,
|
|
46
|
+
timestamp: new Date().toISOString(),
|
|
47
|
+
latency: responseTime,
|
|
48
|
+
checks: {
|
|
49
|
+
database: overall.dependencies?.[0].status,
|
|
50
|
+
redis: overall.dependencies?.[1].status,
|
|
51
|
+
filesystem: overall.dependencies?.[2].status,
|
|
52
|
+
agents: overall.dependencies?.[3].status
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
const statusCode = overall.status === 'healthy' ? 200 : 503;
|
|
56
|
+
res.status(statusCode).json(response);
|
|
57
|
+
});
|
|
58
|
+
/**
|
|
59
|
+
* GET /health/ready - Kubernetes readiness probe
|
|
60
|
+
*
|
|
61
|
+
* Checks if the system is ready to accept traffic.
|
|
62
|
+
* All critical services must be healthy.
|
|
63
|
+
*
|
|
64
|
+
* Response time: <500ms
|
|
65
|
+
* Status codes:
|
|
66
|
+
* 200: Ready to accept traffic
|
|
67
|
+
* 503: Not ready
|
|
68
|
+
*/ this.router.get('/health/ready', async (req, res)=>{
|
|
69
|
+
const startTime = Date.now();
|
|
70
|
+
const overall = await this.healthCheckSystem.getOverallHealth();
|
|
71
|
+
const isReady = overall.status === 'healthy';
|
|
72
|
+
const responseTime = Date.now() - startTime;
|
|
73
|
+
const response = {
|
|
74
|
+
status: isReady ? 'ready' : 'not-ready',
|
|
75
|
+
timestamp: new Date().toISOString()
|
|
76
|
+
};
|
|
77
|
+
const statusCode = isReady ? 200 : 503;
|
|
78
|
+
res.status(statusCode).json(response);
|
|
79
|
+
});
|
|
80
|
+
/**
|
|
81
|
+
* GET /health/live - Kubernetes liveness probe
|
|
82
|
+
*
|
|
83
|
+
* Checks if the system is alive and responding.
|
|
84
|
+
* Allows degraded services.
|
|
85
|
+
*
|
|
86
|
+
* Response time: <500ms
|
|
87
|
+
* Status codes:
|
|
88
|
+
* 200: System alive
|
|
89
|
+
* 503: System down/unhealthy
|
|
90
|
+
*/ this.router.get('/health/live', async (req, res)=>{
|
|
91
|
+
const startTime = Date.now();
|
|
92
|
+
const overall = await this.healthCheckSystem.getOverallHealth();
|
|
93
|
+
const isAlive = overall.status !== 'unhealthy';
|
|
94
|
+
const responseTime = Date.now() - startTime;
|
|
95
|
+
const response = {
|
|
96
|
+
status: isAlive ? 'alive' : 'not-alive',
|
|
97
|
+
timestamp: new Date().toISOString()
|
|
98
|
+
};
|
|
99
|
+
const statusCode = isAlive ? 200 : 503;
|
|
100
|
+
res.status(statusCode).json(response);
|
|
101
|
+
});
|
|
102
|
+
/**
|
|
103
|
+
* GET /health/detailed - Detailed health report
|
|
104
|
+
*
|
|
105
|
+
* Returns comprehensive health information including:
|
|
106
|
+
* - Overall system status
|
|
107
|
+
* - Individual service metrics
|
|
108
|
+
* - Response latencies
|
|
109
|
+
* - Disk usage
|
|
110
|
+
* - Queue depth
|
|
111
|
+
* - Active agents
|
|
112
|
+
* - Alerts and warnings
|
|
113
|
+
*
|
|
114
|
+
* Response time: <1s
|
|
115
|
+
* Status codes:
|
|
116
|
+
* 200: Report generated (regardless of health status)
|
|
117
|
+
*/ this.router.get('/health/detailed', async (req, res)=>{
|
|
118
|
+
const startTime = Date.now();
|
|
119
|
+
const report = await this.healthCheckSystem.getDetailedHealthReport();
|
|
120
|
+
const responseTime = Date.now() - startTime;
|
|
121
|
+
const response = {
|
|
122
|
+
timestamp: report.timestamp.toISOString(),
|
|
123
|
+
overallStatus: report.overallStatus,
|
|
124
|
+
latency: responseTime,
|
|
125
|
+
totalLatency: report.latency,
|
|
126
|
+
services: {
|
|
127
|
+
database: {
|
|
128
|
+
status: report.services.database.status,
|
|
129
|
+
latency: report.services.database.latency,
|
|
130
|
+
message: report.services.database.message,
|
|
131
|
+
metadata: report.services.database.metadata
|
|
132
|
+
},
|
|
133
|
+
redis: {
|
|
134
|
+
status: report.services.redis.status,
|
|
135
|
+
latency: report.services.redis.latency,
|
|
136
|
+
message: report.services.redis.message,
|
|
137
|
+
metadata: report.services.redis.metadata
|
|
138
|
+
},
|
|
139
|
+
filesystem: {
|
|
140
|
+
status: report.services.filesystem.status,
|
|
141
|
+
latency: report.services.filesystem.latency,
|
|
142
|
+
message: report.services.filesystem.message,
|
|
143
|
+
metadata: report.services.filesystem.metadata
|
|
144
|
+
},
|
|
145
|
+
agents: {
|
|
146
|
+
status: report.services.agents.status,
|
|
147
|
+
latency: report.services.agents.latency,
|
|
148
|
+
message: report.services.agents.message,
|
|
149
|
+
metadata: report.services.agents.metadata
|
|
150
|
+
}
|
|
151
|
+
},
|
|
152
|
+
alerts: report.alerts || []
|
|
153
|
+
};
|
|
154
|
+
res.status(200).json(response);
|
|
155
|
+
});
|
|
156
|
+
/**
|
|
157
|
+
* GET /health/database - Database health only
|
|
158
|
+
*
|
|
159
|
+
* Focused check for database connectivity.
|
|
160
|
+
* Useful for targeted monitoring.
|
|
161
|
+
*/ this.router.get('/health/database', async (req, res)=>{
|
|
162
|
+
const startTime = Date.now();
|
|
163
|
+
const check = await this.healthCheckSystem.checkDatabase();
|
|
164
|
+
const responseTime = Date.now() - startTime;
|
|
165
|
+
const response = {
|
|
166
|
+
service: 'database',
|
|
167
|
+
status: check.status,
|
|
168
|
+
latency: responseTime,
|
|
169
|
+
message: check.message,
|
|
170
|
+
metadata: check.metadata,
|
|
171
|
+
timestamp: new Date().toISOString()
|
|
172
|
+
};
|
|
173
|
+
const statusCode = check.status === 'healthy' ? 200 : 503;
|
|
174
|
+
res.status(statusCode).json(response);
|
|
175
|
+
});
|
|
176
|
+
/**
|
|
177
|
+
* GET /health/redis - Redis health only
|
|
178
|
+
*
|
|
179
|
+
* Focused check for Redis connectivity.
|
|
180
|
+
*/ this.router.get('/health/redis', async (req, res)=>{
|
|
181
|
+
const startTime = Date.now();
|
|
182
|
+
const check = await this.healthCheckSystem.checkRedis();
|
|
183
|
+
const responseTime = Date.now() - startTime;
|
|
184
|
+
const response = {
|
|
185
|
+
service: 'redis',
|
|
186
|
+
status: check.status,
|
|
187
|
+
latency: responseTime,
|
|
188
|
+
message: check.message,
|
|
189
|
+
metadata: check.metadata,
|
|
190
|
+
timestamp: new Date().toISOString()
|
|
191
|
+
};
|
|
192
|
+
const statusCode = check.status === 'healthy' ? 200 : 503;
|
|
193
|
+
res.status(statusCode).json(response);
|
|
194
|
+
});
|
|
195
|
+
/**
|
|
196
|
+
* GET /health/filesystem - File system health only
|
|
197
|
+
*
|
|
198
|
+
* Focused check for disk space and permissions.
|
|
199
|
+
*/ this.router.get('/health/filesystem', async (req, res)=>{
|
|
200
|
+
const startTime = Date.now();
|
|
201
|
+
const check = await this.healthCheckSystem.checkFileSystem();
|
|
202
|
+
const responseTime = Date.now() - startTime;
|
|
203
|
+
const response = {
|
|
204
|
+
service: 'filesystem',
|
|
205
|
+
status: check.status,
|
|
206
|
+
latency: responseTime,
|
|
207
|
+
message: check.message,
|
|
208
|
+
metadata: check.metadata,
|
|
209
|
+
timestamp: new Date().toISOString()
|
|
210
|
+
};
|
|
211
|
+
const statusCode = check.status === 'healthy' ? 200 : 503;
|
|
212
|
+
res.status(statusCode).json(response);
|
|
213
|
+
});
|
|
214
|
+
/**
|
|
215
|
+
* GET /health/agents - Agent health only
|
|
216
|
+
*
|
|
217
|
+
* Focused check for active agents and queue depth.
|
|
218
|
+
*/ this.router.get('/health/agents', async (req, res)=>{
|
|
219
|
+
const startTime = Date.now();
|
|
220
|
+
const check = await this.healthCheckSystem.checkAgents();
|
|
221
|
+
const responseTime = Date.now() - startTime;
|
|
222
|
+
const response = {
|
|
223
|
+
service: 'agents',
|
|
224
|
+
status: check.status,
|
|
225
|
+
latency: responseTime,
|
|
226
|
+
message: check.message,
|
|
227
|
+
metadata: check.metadata,
|
|
228
|
+
timestamp: new Date().toISOString()
|
|
229
|
+
};
|
|
230
|
+
const statusCode = check.status === 'healthy' ? 200 : 503;
|
|
231
|
+
res.status(statusCode).json(response);
|
|
232
|
+
});
|
|
233
|
+
/**
|
|
234
|
+
* GET /health/ping - Fast connectivity check
|
|
235
|
+
*
|
|
236
|
+
* Ultra-fast ping endpoint for basic connectivity checks.
|
|
237
|
+
* Returns in <100ms for Kubernetes probes and dashboards.
|
|
238
|
+
*
|
|
239
|
+
* Query parameters:
|
|
240
|
+
* - timeout: Optional timeout in milliseconds (default: 100)
|
|
241
|
+
*
|
|
242
|
+
* Response time: <100ms
|
|
243
|
+
* Status codes:
|
|
244
|
+
* 200: System responsive
|
|
245
|
+
* 503: System unresponsive or timeout
|
|
246
|
+
*/ this.router.get('/health/ping', async (req, res)=>{
|
|
247
|
+
const startTime = Date.now();
|
|
248
|
+
try {
|
|
249
|
+
// Parse optional timeout parameter
|
|
250
|
+
const timeout = req.query.timeout ? parseInt(req.query.timeout, 10) : 100;
|
|
251
|
+
// Validate timeout
|
|
252
|
+
if (isNaN(timeout) || timeout < 1 || timeout > 1000) {
|
|
253
|
+
res.status(400).json({
|
|
254
|
+
error: 'Invalid timeout parameter',
|
|
255
|
+
message: 'Timeout must be between 1 and 1000 milliseconds',
|
|
256
|
+
timestamp: new Date().toISOString()
|
|
257
|
+
});
|
|
258
|
+
return;
|
|
259
|
+
}
|
|
260
|
+
const check = await this.healthCheckSystem.ping(timeout);
|
|
261
|
+
const responseTime = Date.now() - startTime;
|
|
262
|
+
const response = {
|
|
263
|
+
status: check.status,
|
|
264
|
+
latency: responseTime,
|
|
265
|
+
message: check.message,
|
|
266
|
+
metadata: check.metadata,
|
|
267
|
+
timestamp: new Date().toISOString()
|
|
268
|
+
};
|
|
269
|
+
res.status(200).json(response);
|
|
270
|
+
} catch (error) {
|
|
271
|
+
const responseTime = Date.now() - startTime;
|
|
272
|
+
const response = {
|
|
273
|
+
status: 'unhealthy',
|
|
274
|
+
latency: responseTime,
|
|
275
|
+
message: error.message || 'Ping failed',
|
|
276
|
+
error: error.code || 'UNKNOWN_ERROR',
|
|
277
|
+
timestamp: new Date().toISOString()
|
|
278
|
+
};
|
|
279
|
+
res.status(503).json(response);
|
|
280
|
+
}
|
|
281
|
+
});
|
|
282
|
+
/**
|
|
283
|
+
* GET /health/aggregate - Aggregated health statistics
|
|
284
|
+
*
|
|
285
|
+
* Returns comprehensive aggregated health metrics from all services.
|
|
286
|
+
* Includes service counts, average latency, warnings, and errors.
|
|
287
|
+
*
|
|
288
|
+
* Query parameters:
|
|
289
|
+
* - timeout: Optional timeout in milliseconds (default: 5000)
|
|
290
|
+
*
|
|
291
|
+
* Response time: <5s (default)
|
|
292
|
+
* Status codes:
|
|
293
|
+
* 200: Stats collected successfully
|
|
294
|
+
* 503: Timeout or aggregation failure
|
|
295
|
+
*/ this.router.get('/health/aggregate', async (req, res)=>{
|
|
296
|
+
const startTime = Date.now();
|
|
297
|
+
try {
|
|
298
|
+
// Parse optional timeout parameter
|
|
299
|
+
const timeout = req.query.timeout ? parseInt(req.query.timeout, 10) : 5000;
|
|
300
|
+
// Validate timeout
|
|
301
|
+
if (isNaN(timeout) || timeout < 100 || timeout > 30000) {
|
|
302
|
+
res.status(400).json({
|
|
303
|
+
error: 'Invalid timeout parameter',
|
|
304
|
+
message: 'Timeout must be between 100 and 30000 milliseconds',
|
|
305
|
+
timestamp: new Date().toISOString()
|
|
306
|
+
});
|
|
307
|
+
return;
|
|
308
|
+
}
|
|
309
|
+
const stats = await this.healthCheckSystem.getAggregateStats(timeout);
|
|
310
|
+
const responseTime = Date.now() - startTime;
|
|
311
|
+
const response = {
|
|
312
|
+
timestamp: stats.timestamp.toISOString(),
|
|
313
|
+
overallStatus: stats.overallStatus,
|
|
314
|
+
latency: responseTime,
|
|
315
|
+
totalLatency: stats.latency,
|
|
316
|
+
averageServiceLatency: stats.averageServiceLatency,
|
|
317
|
+
serviceCount: stats.serviceCount,
|
|
318
|
+
services: {
|
|
319
|
+
database: {
|
|
320
|
+
status: stats.services.database.status,
|
|
321
|
+
latency: stats.services.database.latency,
|
|
322
|
+
message: stats.services.database.message
|
|
323
|
+
},
|
|
324
|
+
redis: {
|
|
325
|
+
status: stats.services.redis.status,
|
|
326
|
+
latency: stats.services.redis.latency,
|
|
327
|
+
message: stats.services.redis.message
|
|
328
|
+
},
|
|
329
|
+
filesystem: {
|
|
330
|
+
status: stats.services.filesystem.status,
|
|
331
|
+
latency: stats.services.filesystem.latency,
|
|
332
|
+
message: stats.services.filesystem.message
|
|
333
|
+
},
|
|
334
|
+
agents: {
|
|
335
|
+
status: stats.services.agents.status,
|
|
336
|
+
latency: stats.services.agents.latency,
|
|
337
|
+
message: stats.services.agents.message
|
|
338
|
+
}
|
|
339
|
+
},
|
|
340
|
+
metadata: stats.metadata,
|
|
341
|
+
warnings: stats.warnings,
|
|
342
|
+
errors: stats.errors
|
|
343
|
+
};
|
|
344
|
+
const statusCode = stats.overallStatus === 'healthy' ? 200 : 503;
|
|
345
|
+
res.status(statusCode).json(response);
|
|
346
|
+
} catch (error) {
|
|
347
|
+
const responseTime = Date.now() - startTime;
|
|
348
|
+
const response = {
|
|
349
|
+
status: 'error',
|
|
350
|
+
latency: responseTime,
|
|
351
|
+
message: error.message || 'Failed to aggregate health stats',
|
|
352
|
+
error: error.code || 'UNKNOWN_ERROR',
|
|
353
|
+
timestamp: new Date().toISOString()
|
|
354
|
+
};
|
|
355
|
+
res.status(503).json(response);
|
|
356
|
+
}
|
|
357
|
+
});
|
|
358
|
+
}
|
|
359
|
+
/**
|
|
360
|
+
* Get the configured router
|
|
361
|
+
*/ getRouter() {
|
|
362
|
+
return this.router;
|
|
363
|
+
}
|
|
364
|
+
/**
|
|
365
|
+
* Get the health check system instance
|
|
366
|
+
*/ getHealthCheckSystem() {
|
|
367
|
+
return this.healthCheckSystem;
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
/**
|
|
371
|
+
* Create and configure health check endpoints
|
|
372
|
+
* Usage:
|
|
373
|
+
* const app = express();
|
|
374
|
+
* const healthEndpoints = new HealthEndpoints();
|
|
375
|
+
* app.use('/health', healthEndpoints.getRouter());
|
|
376
|
+
*/ export function createHealthEndpoints(config) {
|
|
377
|
+
return new HealthEndpoints(config);
|
|
378
|
+
}
|
|
379
|
+
/**
|
|
380
|
+
* Middleware for adding health check endpoints to an Express app
|
|
381
|
+
* Usage:
|
|
382
|
+
* const app = express();
|
|
383
|
+
* app.use(mountHealthEndpoints());
|
|
384
|
+
*/ export function mountHealthEndpoints(config) {
|
|
385
|
+
const endpoints = new HealthEndpoints(config);
|
|
386
|
+
return endpoints.getRouter();
|
|
387
|
+
}
|
|
388
|
+
export { HealthCheckSystem };
|
|
389
|
+
|
|
390
|
+
//# sourceMappingURL=health-endpoints.js.map
|