claude-flow-novice 2.15.3 → 2.15.5
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 +29 -6
- 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 +238 -29
- 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 +6 -2
- package/.claude/skills/cfn-redis-coordination/redis-cli-wrapper.sh +24 -3
- package/.claude/skills/cfn-redis-coordination/redis-functions.sh +34 -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 +29 -6
- 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 +238 -29
- 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 +6 -2
- package/claude-assets/skills/cfn-redis-coordination/redis-cli-wrapper.sh +24 -3
- package/claude-assets/skills/cfn-redis-coordination/redis-functions.sh +34 -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/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/config-manager.js +109 -91
- package/dist/cli/config-manager.js.map +1 -1
- package/dist/cli/conversation-fork-cleanup.js +201 -0
- package/dist/cli/conversation-fork-cleanup.js.map +1 -0
- package/dist/cli/conversation-fork.js +16 -3
- package/dist/cli/conversation-fork.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/docs/BUG_19_MEMORY_LEAK_TASK_MODE.md +405 -0
- package/docs/MEMORY_CLEANUP_GUIDE.md +358 -0
- package/docs/MEMORY_LEAK_FIX_SUMMARY.md +322 -0
- package/docs/REDIS_CLEANUP_EXECUTIVE_SUMMARY.md +319 -0
- package/docs/REDIS_CLEANUP_VERIFICATION_REPORT.md +574 -0
- package/package.json +35 -4
- package/readme/README.md +53 -5
- 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/scripts/verify-redis-cleanup.sh +173 -0
- package/tests/README.md +84 -0
- package/tests/test-memory-leak-task-mode.sh +435 -0
- 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
|
@@ -0,0 +1,604 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Multi-System Query Engine
|
|
3
|
+
*
|
|
4
|
+
* Provides fluent interface for cross-database queries with priority-ordered execution.
|
|
5
|
+
* Part of Task 3.3: Query Correlation Key Layer
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* const query = new MultiSystemQuery(dbService);
|
|
10
|
+
* const results = await query
|
|
11
|
+
* .forTask('task-001')
|
|
12
|
+
* .includingEntities(['agent', 'skill', 'artifact'])
|
|
13
|
+
* .fromSystems(['redis', 'sqlite', 'postgres'])
|
|
14
|
+
* .withCache(true)
|
|
15
|
+
* .execute();
|
|
16
|
+
* // Returns: { agents: [...], skills: [...], artifacts: [...] }
|
|
17
|
+
* ```
|
|
18
|
+
*/ import { DatabaseErrorCode } from './database-service/types.js';
|
|
19
|
+
import { buildCorrelationKey, buildWildcardPattern } from './database-service/correlation.js';
|
|
20
|
+
import { createLogger } from './logging.js';
|
|
21
|
+
import { createDatabaseError } from './database-service/errors.js';
|
|
22
|
+
import { createErrorAggregator } from './error-aggregator.js';
|
|
23
|
+
/**
|
|
24
|
+
* Multi-system query builder
|
|
25
|
+
*
|
|
26
|
+
* Provides fluent interface for building and executing cross-database queries.
|
|
27
|
+
*/ export class MultiSystemQuery {
|
|
28
|
+
dbService;
|
|
29
|
+
cache;
|
|
30
|
+
logger;
|
|
31
|
+
errorAggregator;
|
|
32
|
+
// Query configuration
|
|
33
|
+
correlationKey;
|
|
34
|
+
wildcardPattern;
|
|
35
|
+
entities = [];
|
|
36
|
+
systems = [
|
|
37
|
+
'redis',
|
|
38
|
+
'sqlite',
|
|
39
|
+
'postgres'
|
|
40
|
+
];
|
|
41
|
+
priority = 'balanced';
|
|
42
|
+
useCache = false;
|
|
43
|
+
timeout = 2000;
|
|
44
|
+
filters = [];
|
|
45
|
+
strictMode = false;
|
|
46
|
+
constructor(config){
|
|
47
|
+
this.dbService = config.dbService;
|
|
48
|
+
this.cache = config.cache;
|
|
49
|
+
this.useCache = config.enableCache || false;
|
|
50
|
+
this.timeout = config.defaultTimeout || 2000;
|
|
51
|
+
this.logger = config.logger || createLogger('multi-system-query');
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Query for specific task
|
|
55
|
+
*
|
|
56
|
+
* @param taskId - Task ID to query
|
|
57
|
+
* @returns Query builder (fluent)
|
|
58
|
+
*/ forTask(taskId) {
|
|
59
|
+
this.correlationKey = {
|
|
60
|
+
type: 'task',
|
|
61
|
+
id: taskId
|
|
62
|
+
};
|
|
63
|
+
return this;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Query for specific agent
|
|
67
|
+
*
|
|
68
|
+
* @param agentId - Agent ID to query
|
|
69
|
+
* @returns Query builder (fluent)
|
|
70
|
+
*/ forAgent(agentId) {
|
|
71
|
+
this.correlationKey = {
|
|
72
|
+
type: 'agent',
|
|
73
|
+
id: agentId
|
|
74
|
+
};
|
|
75
|
+
return this;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Query for specific skill
|
|
79
|
+
*
|
|
80
|
+
* @param skillId - Skill ID to query
|
|
81
|
+
* @returns Query builder (fluent)
|
|
82
|
+
*/ forSkill(skillId) {
|
|
83
|
+
this.correlationKey = {
|
|
84
|
+
type: 'skill',
|
|
85
|
+
id: skillId
|
|
86
|
+
};
|
|
87
|
+
return this;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Query for specific execution
|
|
91
|
+
*
|
|
92
|
+
* @param executionId - Execution ID to query
|
|
93
|
+
* @returns Query builder (fluent)
|
|
94
|
+
*/ forExecution(executionId) {
|
|
95
|
+
this.correlationKey = {
|
|
96
|
+
type: 'execution',
|
|
97
|
+
id: executionId
|
|
98
|
+
};
|
|
99
|
+
return this;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Query with custom correlation key
|
|
103
|
+
*
|
|
104
|
+
* @param key - Correlation key
|
|
105
|
+
* @returns Query builder (fluent)
|
|
106
|
+
*/ withKey(key) {
|
|
107
|
+
this.correlationKey = key;
|
|
108
|
+
return this;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Query with wildcard pattern
|
|
112
|
+
*
|
|
113
|
+
* @param pattern - Wildcard pattern
|
|
114
|
+
* @returns Query builder (fluent)
|
|
115
|
+
*/ withPattern(pattern) {
|
|
116
|
+
this.wildcardPattern = pattern;
|
|
117
|
+
return this;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Include specific entity types
|
|
121
|
+
*
|
|
122
|
+
* @param entities - Entity types to include
|
|
123
|
+
* @returns Query builder (fluent)
|
|
124
|
+
*/ includingEntities(entities) {
|
|
125
|
+
this.entities = entities;
|
|
126
|
+
return this;
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Query from specific database systems
|
|
130
|
+
*
|
|
131
|
+
* @param systems - Database systems to query
|
|
132
|
+
* @returns Query builder (fluent)
|
|
133
|
+
*/ fromSystems(systems) {
|
|
134
|
+
this.systems = systems;
|
|
135
|
+
return this;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Set execution priority
|
|
139
|
+
*
|
|
140
|
+
* @param priority - Execution priority
|
|
141
|
+
* @returns Query builder (fluent)
|
|
142
|
+
*/ withPriority(priority) {
|
|
143
|
+
this.priority = priority;
|
|
144
|
+
return this;
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Enable or disable caching
|
|
148
|
+
*
|
|
149
|
+
* @param enabled - Enable cache
|
|
150
|
+
* @returns Query builder (fluent)
|
|
151
|
+
*/ withCache(enabled) {
|
|
152
|
+
this.useCache = enabled;
|
|
153
|
+
return this;
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Set query timeout
|
|
157
|
+
*
|
|
158
|
+
* @param timeout - Timeout in milliseconds
|
|
159
|
+
* @returns Query builder (fluent)
|
|
160
|
+
*/ withTimeout(timeout) {
|
|
161
|
+
this.timeout = timeout;
|
|
162
|
+
return this;
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Add query filter
|
|
166
|
+
*
|
|
167
|
+
* @param filter - Query filter
|
|
168
|
+
* @returns Query builder (fluent)
|
|
169
|
+
*/ addFilter(filter) {
|
|
170
|
+
this.filters.push(filter);
|
|
171
|
+
return this;
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Set whether to fail on partial errors
|
|
175
|
+
*
|
|
176
|
+
* @param fail - Fail if any system fails
|
|
177
|
+
* @returns Query builder (fluent)
|
|
178
|
+
*/ failOnPartialError(fail = true) {
|
|
179
|
+
this.strictMode = fail;
|
|
180
|
+
return this;
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Execute multi-system query
|
|
184
|
+
*
|
|
185
|
+
* @returns Multi-system query results
|
|
186
|
+
* @throws {DatabaseError} If all systems fail or critical error occurs
|
|
187
|
+
*/ async execute() {
|
|
188
|
+
const startTime = Date.now();
|
|
189
|
+
// Validate query configuration
|
|
190
|
+
this.validateQuery();
|
|
191
|
+
// Initialize error aggregator with correlation ID
|
|
192
|
+
this.errorAggregator = createErrorAggregator();
|
|
193
|
+
const correlationId = this.errorAggregator.getCorrelationId();
|
|
194
|
+
this.logger.info('Starting multi-system query', {
|
|
195
|
+
correlationId,
|
|
196
|
+
systems: this.systems,
|
|
197
|
+
priority: this.priority
|
|
198
|
+
});
|
|
199
|
+
// Build cache key
|
|
200
|
+
const cacheKey = this.buildCacheKey();
|
|
201
|
+
// Check cache first
|
|
202
|
+
if (this.useCache && this.cache) {
|
|
203
|
+
const cached = this.cache.get(cacheKey);
|
|
204
|
+
if (cached) {
|
|
205
|
+
this.logger.debug('Cache hit', {
|
|
206
|
+
cacheKey,
|
|
207
|
+
correlationId
|
|
208
|
+
});
|
|
209
|
+
return {
|
|
210
|
+
...cached,
|
|
211
|
+
cacheHit: true
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
// Execute query based on priority
|
|
216
|
+
let result;
|
|
217
|
+
try {
|
|
218
|
+
result = await this.executeByPriority();
|
|
219
|
+
} catch (error) {
|
|
220
|
+
// Critical error during execution
|
|
221
|
+
this.logger.error('Critical error during query execution', error instanceof Error ? error : undefined, {
|
|
222
|
+
correlationId,
|
|
223
|
+
errorMessage: error instanceof Error ? error.message : String(error)
|
|
224
|
+
});
|
|
225
|
+
throw createDatabaseError(DatabaseErrorCode.QUERY_FAILED, 'Multi-system query failed with critical error', error instanceof Error ? error : undefined, {
|
|
226
|
+
correlationId,
|
|
227
|
+
systems: this.systems
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
// Check if we should fail based on errors
|
|
231
|
+
if (this.errorAggregator.shouldFailOperation(this.systems)) {
|
|
232
|
+
const errorReport = this.errorAggregator.createReport();
|
|
233
|
+
this.logger.error('Multi-system query failed', undefined, {
|
|
234
|
+
correlationId,
|
|
235
|
+
errorReport
|
|
236
|
+
});
|
|
237
|
+
const aggregationResult = this.errorAggregator.getResult(this.systems);
|
|
238
|
+
throw createDatabaseError(aggregationResult.hasCriticalErrors ? DatabaseErrorCode.QUERY_FAILED : DatabaseErrorCode.QUERY_FAILED, aggregationResult.allSystemsFailed ? 'All database systems failed' : 'Critical errors occurred during query execution', undefined, {
|
|
239
|
+
correlationId,
|
|
240
|
+
errorCount: aggregationResult.totalErrors,
|
|
241
|
+
failedSystems: Object.keys(aggregationResult.errorsBySystem),
|
|
242
|
+
errors: aggregationResult.allErrors.map((e)=>({
|
|
243
|
+
system: e.system,
|
|
244
|
+
code: e.error.code,
|
|
245
|
+
message: e.error.message,
|
|
246
|
+
severity: e.severity
|
|
247
|
+
}))
|
|
248
|
+
});
|
|
249
|
+
}
|
|
250
|
+
// Check for partial errors
|
|
251
|
+
if (this.strictMode && result.errors && result.errors.length > 0) {
|
|
252
|
+
const errorReport = this.errorAggregator.createReport();
|
|
253
|
+
this.logger.error('Query failed due to partial errors', undefined, {
|
|
254
|
+
correlationId,
|
|
255
|
+
errorCount: result.errors.length,
|
|
256
|
+
errorReport
|
|
257
|
+
});
|
|
258
|
+
throw createDatabaseError(DatabaseErrorCode.QUERY_FAILED, `Query failed with ${result.errors.length} error(s)`, undefined, {
|
|
259
|
+
correlationId,
|
|
260
|
+
errors: result.errors
|
|
261
|
+
});
|
|
262
|
+
}
|
|
263
|
+
// Merge and deduplicate results
|
|
264
|
+
result.merged = this.mergeResults(result);
|
|
265
|
+
// Calculate execution time
|
|
266
|
+
result.executionTime = Date.now() - startTime;
|
|
267
|
+
result.timestamp = new Date();
|
|
268
|
+
result.cacheHit = false;
|
|
269
|
+
// Validate performance requirement (<2s)
|
|
270
|
+
if (result.executionTime >= this.timeout) {
|
|
271
|
+
this.logger.warn('Query exceeded timeout', {
|
|
272
|
+
correlationId,
|
|
273
|
+
executionTime: result.executionTime,
|
|
274
|
+
timeout: this.timeout
|
|
275
|
+
});
|
|
276
|
+
}
|
|
277
|
+
// Log success
|
|
278
|
+
this.logger.info('Multi-system query completed', {
|
|
279
|
+
correlationId,
|
|
280
|
+
executionTime: result.executionTime,
|
|
281
|
+
resultCount: result.merged.length,
|
|
282
|
+
errorCount: result.errors?.length || 0
|
|
283
|
+
});
|
|
284
|
+
// Store in cache
|
|
285
|
+
if (this.useCache && this.cache) {
|
|
286
|
+
this.cache.set(cacheKey, result);
|
|
287
|
+
}
|
|
288
|
+
return result;
|
|
289
|
+
}
|
|
290
|
+
/**
|
|
291
|
+
* Execute query based on priority strategy
|
|
292
|
+
*/ async executeByPriority() {
|
|
293
|
+
const result = {
|
|
294
|
+
correlationKey: this.buildCorrelationKeyString(),
|
|
295
|
+
merged: [],
|
|
296
|
+
executionTime: 0,
|
|
297
|
+
timestamp: new Date(),
|
|
298
|
+
errors: []
|
|
299
|
+
};
|
|
300
|
+
switch(this.priority){
|
|
301
|
+
case 'fastest':
|
|
302
|
+
return this.executeFastest(result);
|
|
303
|
+
case 'balanced':
|
|
304
|
+
return this.executeBalanced(result);
|
|
305
|
+
case 'comprehensive':
|
|
306
|
+
return this.executeComprehensive(result);
|
|
307
|
+
default:
|
|
308
|
+
return this.executeBalanced(result);
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
/**
|
|
312
|
+
* Execute fastest strategy (stop on first result)
|
|
313
|
+
*/ async executeFastest(result) {
|
|
314
|
+
if (!this.errorAggregator) {
|
|
315
|
+
throw new Error('Error aggregator not initialized');
|
|
316
|
+
}
|
|
317
|
+
// Query in priority order: Redis → SQLite → PostgreSQL
|
|
318
|
+
const orderedSystems = this.getOrderedSystems();
|
|
319
|
+
for (const system of orderedSystems){
|
|
320
|
+
// Check circuit breaker
|
|
321
|
+
if (this.errorAggregator.isCircuitOpen(system)) {
|
|
322
|
+
this.logger.warn(`Circuit breaker open for ${system}, skipping`, {
|
|
323
|
+
correlationId: this.errorAggregator.getCorrelationId()
|
|
324
|
+
});
|
|
325
|
+
const error = this.createError(system, new Error('Circuit breaker open'));
|
|
326
|
+
result.errors?.push(error);
|
|
327
|
+
this.errorAggregator.addError(system, error, {
|
|
328
|
+
strategy: 'fastest'
|
|
329
|
+
});
|
|
330
|
+
continue;
|
|
331
|
+
}
|
|
332
|
+
try {
|
|
333
|
+
const data = await this.querySystem(system);
|
|
334
|
+
this.errorAggregator.recordSuccess(system);
|
|
335
|
+
if (data && data.length > 0) {
|
|
336
|
+
result[system] = data;
|
|
337
|
+
return result; // Stop on first non-empty result
|
|
338
|
+
}
|
|
339
|
+
} catch (error) {
|
|
340
|
+
const dbError = this.createError(system, error);
|
|
341
|
+
this.logger.warn(`Query failed for ${system}`, {
|
|
342
|
+
error: dbError,
|
|
343
|
+
correlationId: this.errorAggregator.getCorrelationId()
|
|
344
|
+
});
|
|
345
|
+
result.errors?.push(dbError);
|
|
346
|
+
this.errorAggregator.addError(system, dbError, {
|
|
347
|
+
strategy: 'fastest'
|
|
348
|
+
});
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
return result;
|
|
352
|
+
}
|
|
353
|
+
/**
|
|
354
|
+
* Execute balanced strategy (priority-ordered parallel)
|
|
355
|
+
*/ async executeBalanced(result) {
|
|
356
|
+
if (!this.errorAggregator) {
|
|
357
|
+
throw new Error('Error aggregator not initialized');
|
|
358
|
+
}
|
|
359
|
+
const orderedSystems = this.getOrderedSystems();
|
|
360
|
+
const promises = orderedSystems.map(async (system)=>{
|
|
361
|
+
// Check circuit breaker
|
|
362
|
+
if (this.errorAggregator.isCircuitOpen(system)) {
|
|
363
|
+
this.logger.warn(`Circuit breaker open for ${system}, skipping`, {
|
|
364
|
+
correlationId: this.errorAggregator.getCorrelationId()
|
|
365
|
+
});
|
|
366
|
+
const error = this.createError(system, new Error('Circuit breaker open'));
|
|
367
|
+
result.errors?.push(error);
|
|
368
|
+
this.errorAggregator.addError(system, error, {
|
|
369
|
+
strategy: 'balanced'
|
|
370
|
+
});
|
|
371
|
+
return;
|
|
372
|
+
}
|
|
373
|
+
try {
|
|
374
|
+
const data = await this.querySystem(system);
|
|
375
|
+
this.errorAggregator.recordSuccess(system);
|
|
376
|
+
if (data && data.length > 0) {
|
|
377
|
+
result[system] = data;
|
|
378
|
+
}
|
|
379
|
+
} catch (error) {
|
|
380
|
+
const dbError = this.createError(system, error);
|
|
381
|
+
this.logger.warn(`Query failed for ${system}`, {
|
|
382
|
+
error: dbError,
|
|
383
|
+
correlationId: this.errorAggregator.getCorrelationId()
|
|
384
|
+
});
|
|
385
|
+
result.errors?.push(dbError);
|
|
386
|
+
this.errorAggregator.addError(system, dbError, {
|
|
387
|
+
strategy: 'balanced'
|
|
388
|
+
});
|
|
389
|
+
}
|
|
390
|
+
});
|
|
391
|
+
await Promise.all(promises);
|
|
392
|
+
return result;
|
|
393
|
+
}
|
|
394
|
+
/**
|
|
395
|
+
* Execute comprehensive strategy (all systems in parallel)
|
|
396
|
+
*/ async executeComprehensive(result) {
|
|
397
|
+
if (!this.errorAggregator) {
|
|
398
|
+
throw new Error('Error aggregator not initialized');
|
|
399
|
+
}
|
|
400
|
+
const promises = this.systems.map(async (system)=>{
|
|
401
|
+
// Check circuit breaker
|
|
402
|
+
if (this.errorAggregator.isCircuitOpen(system)) {
|
|
403
|
+
this.logger.warn(`Circuit breaker open for ${system}, skipping`, {
|
|
404
|
+
correlationId: this.errorAggregator.getCorrelationId()
|
|
405
|
+
});
|
|
406
|
+
const error = this.createError(system, new Error('Circuit breaker open'));
|
|
407
|
+
result.errors?.push(error);
|
|
408
|
+
this.errorAggregator.addError(system, error, {
|
|
409
|
+
strategy: 'comprehensive'
|
|
410
|
+
});
|
|
411
|
+
result[system] = [];
|
|
412
|
+
return;
|
|
413
|
+
}
|
|
414
|
+
try {
|
|
415
|
+
const data = await this.querySystem(system);
|
|
416
|
+
this.errorAggregator.recordSuccess(system);
|
|
417
|
+
result[system] = data || [];
|
|
418
|
+
} catch (error) {
|
|
419
|
+
const dbError = this.createError(system, error);
|
|
420
|
+
this.logger.warn(`Query failed for ${system}`, {
|
|
421
|
+
error: dbError,
|
|
422
|
+
correlationId: this.errorAggregator.getCorrelationId()
|
|
423
|
+
});
|
|
424
|
+
result.errors?.push(dbError);
|
|
425
|
+
this.errorAggregator.addError(system, dbError, {
|
|
426
|
+
strategy: 'comprehensive'
|
|
427
|
+
});
|
|
428
|
+
result[system] = [];
|
|
429
|
+
}
|
|
430
|
+
});
|
|
431
|
+
await Promise.all(promises);
|
|
432
|
+
return result;
|
|
433
|
+
}
|
|
434
|
+
/**
|
|
435
|
+
* Query specific database system
|
|
436
|
+
*/ async querySystem(system) {
|
|
437
|
+
const adapter = this.dbService.getAdapter(system);
|
|
438
|
+
const results = [];
|
|
439
|
+
// If wildcard pattern, use pattern matching
|
|
440
|
+
if (this.wildcardPattern) {
|
|
441
|
+
const pattern = buildWildcardPattern(this.wildcardPattern);
|
|
442
|
+
// For Redis, use SCAN with pattern
|
|
443
|
+
if (system === 'redis') {
|
|
444
|
+
const keys = await this.scanRedisKeys(pattern);
|
|
445
|
+
for (const key of keys){
|
|
446
|
+
const data = await adapter.get(key);
|
|
447
|
+
if (data) results.push(data);
|
|
448
|
+
}
|
|
449
|
+
} else {
|
|
450
|
+
// For SQLite/PostgreSQL, use raw query with LIKE
|
|
451
|
+
const data = await adapter.raw('SELECT * FROM correlation_data WHERE key LIKE ?', [
|
|
452
|
+
pattern.replace('*', '%')
|
|
453
|
+
]);
|
|
454
|
+
results.push(...Array.isArray(data) ? data : []);
|
|
455
|
+
}
|
|
456
|
+
} else if (this.correlationKey) {
|
|
457
|
+
// Query specific entities for correlation key
|
|
458
|
+
if (this.entities.length > 0) {
|
|
459
|
+
for (const entity of this.entities){
|
|
460
|
+
const key = buildCorrelationKey({
|
|
461
|
+
...this.correlationKey,
|
|
462
|
+
entity
|
|
463
|
+
});
|
|
464
|
+
const data = await adapter.get(key);
|
|
465
|
+
if (data) results.push(data);
|
|
466
|
+
}
|
|
467
|
+
} else {
|
|
468
|
+
// Query just the correlation key
|
|
469
|
+
const key = buildCorrelationKey(this.correlationKey);
|
|
470
|
+
const data = await adapter.get(key);
|
|
471
|
+
if (data) results.push(data);
|
|
472
|
+
}
|
|
473
|
+
}
|
|
474
|
+
return results;
|
|
475
|
+
}
|
|
476
|
+
/**
|
|
477
|
+
* Scan Redis keys with pattern
|
|
478
|
+
*/ async scanRedisKeys(pattern) {
|
|
479
|
+
const adapter = this.dbService.getAdapter('redis');
|
|
480
|
+
const keys = [];
|
|
481
|
+
// Use SCAN command for efficient key iteration
|
|
482
|
+
let cursor = '0';
|
|
483
|
+
do {
|
|
484
|
+
const result = await adapter.raw('SCAN', [
|
|
485
|
+
cursor,
|
|
486
|
+
'MATCH',
|
|
487
|
+
pattern,
|
|
488
|
+
'COUNT',
|
|
489
|
+
'100'
|
|
490
|
+
]);
|
|
491
|
+
cursor = result[0];
|
|
492
|
+
keys.push(...result[1]);
|
|
493
|
+
}while (cursor !== '0')
|
|
494
|
+
return keys;
|
|
495
|
+
}
|
|
496
|
+
/**
|
|
497
|
+
* Merge results from multiple databases
|
|
498
|
+
*/ mergeResults(result) {
|
|
499
|
+
const allResults = [];
|
|
500
|
+
const seen = new Set();
|
|
501
|
+
// Merge in priority order: Redis → SQLite → PostgreSQL
|
|
502
|
+
const orderedSystems = this.getOrderedSystems();
|
|
503
|
+
for (const system of orderedSystems){
|
|
504
|
+
const systemResults = result[system];
|
|
505
|
+
if (!systemResults) continue;
|
|
506
|
+
for (const item of systemResults){
|
|
507
|
+
const key = this.getDeduplicationKey(item);
|
|
508
|
+
if (!seen.has(key)) {
|
|
509
|
+
seen.add(key);
|
|
510
|
+
allResults.push(item);
|
|
511
|
+
}
|
|
512
|
+
}
|
|
513
|
+
}
|
|
514
|
+
return allResults;
|
|
515
|
+
}
|
|
516
|
+
/**
|
|
517
|
+
* Get deduplication key for result item
|
|
518
|
+
*/ getDeduplicationKey(item) {
|
|
519
|
+
if (item && typeof item === 'object') {
|
|
520
|
+
// Try common ID fields
|
|
521
|
+
if (item.id) return `id:${item.id}`;
|
|
522
|
+
if (item._id) return `_id:${item._id}`;
|
|
523
|
+
if (item.key) return `key:${item.key}`;
|
|
524
|
+
// Fallback to JSON stringify
|
|
525
|
+
return JSON.stringify(item);
|
|
526
|
+
}
|
|
527
|
+
return String(item);
|
|
528
|
+
}
|
|
529
|
+
/**
|
|
530
|
+
* Get ordered systems based on priority
|
|
531
|
+
*/ getOrderedSystems() {
|
|
532
|
+
// Priority order: Redis (fastest) → SQLite → PostgreSQL
|
|
533
|
+
const order = [
|
|
534
|
+
'redis',
|
|
535
|
+
'sqlite',
|
|
536
|
+
'postgres'
|
|
537
|
+
];
|
|
538
|
+
return order.filter((system)=>this.systems.includes(system));
|
|
539
|
+
}
|
|
540
|
+
/**
|
|
541
|
+
* Validate query configuration
|
|
542
|
+
*/ validateQuery() {
|
|
543
|
+
if (!this.correlationKey && !this.wildcardPattern) {
|
|
544
|
+
throw createDatabaseError(DatabaseErrorCode.VALIDATION_FAILED, 'Query must specify either correlationKey or wildcardPattern', undefined, {
|
|
545
|
+
query: this
|
|
546
|
+
});
|
|
547
|
+
}
|
|
548
|
+
if (this.systems.length === 0) {
|
|
549
|
+
throw createDatabaseError(DatabaseErrorCode.VALIDATION_FAILED, 'Query must specify at least one database system', undefined, {
|
|
550
|
+
query: this
|
|
551
|
+
});
|
|
552
|
+
}
|
|
553
|
+
}
|
|
554
|
+
/**
|
|
555
|
+
* Build cache key for query
|
|
556
|
+
*/ buildCacheKey() {
|
|
557
|
+
const parts = [
|
|
558
|
+
'msq'
|
|
559
|
+
]; // multi-system-query
|
|
560
|
+
if (this.correlationKey) {
|
|
561
|
+
parts.push(buildCorrelationKey(this.correlationKey));
|
|
562
|
+
} else if (this.wildcardPattern) {
|
|
563
|
+
parts.push(buildWildcardPattern(this.wildcardPattern));
|
|
564
|
+
}
|
|
565
|
+
if (this.entities.length > 0) {
|
|
566
|
+
parts.push(`entities:${this.entities.join(',')}`);
|
|
567
|
+
}
|
|
568
|
+
parts.push(`systems:${this.systems.join(',')}`);
|
|
569
|
+
parts.push(`priority:${this.priority}`);
|
|
570
|
+
return parts.join(':');
|
|
571
|
+
}
|
|
572
|
+
/**
|
|
573
|
+
* Build correlation key string
|
|
574
|
+
*/ buildCorrelationKeyString() {
|
|
575
|
+
if (this.correlationKey) {
|
|
576
|
+
return buildCorrelationKey(this.correlationKey);
|
|
577
|
+
} else if (this.wildcardPattern) {
|
|
578
|
+
return buildWildcardPattern(this.wildcardPattern);
|
|
579
|
+
}
|
|
580
|
+
return 'unknown';
|
|
581
|
+
}
|
|
582
|
+
/**
|
|
583
|
+
* Create database error
|
|
584
|
+
*/ createError(system, error) {
|
|
585
|
+
return {
|
|
586
|
+
code: DatabaseErrorCode.QUERY_FAILED,
|
|
587
|
+
message: `Query failed for ${system}: ${error.message || error}`,
|
|
588
|
+
originalError: error instanceof Error ? error : undefined,
|
|
589
|
+
context: {
|
|
590
|
+
system
|
|
591
|
+
}
|
|
592
|
+
};
|
|
593
|
+
}
|
|
594
|
+
}
|
|
595
|
+
/**
|
|
596
|
+
* Create multi-system query builder
|
|
597
|
+
*
|
|
598
|
+
* @param config - Query builder configuration
|
|
599
|
+
* @returns Multi-system query builder instance
|
|
600
|
+
*/ export function createMultiSystemQuery(config) {
|
|
601
|
+
return new MultiSystemQuery(config);
|
|
602
|
+
}
|
|
603
|
+
|
|
604
|
+
//# sourceMappingURL=multi-system-query.js.map
|