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 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/services/performance-monitor.ts"],"sourcesContent":["/**\r\n * Performance Monitor Service\r\n *\r\n * Real-time performance baseline monitoring with SLA tracking and alerting.\r\n * Part of Phase 2, Task P2-4.2: Performance Baseline Monitoring\r\n *\r\n * Features:\r\n * - Record performance metrics for all critical operations\r\n * - Calculate performance baselines from historical data (P50, P95, P99)\r\n * - Track SLA compliance and violations\r\n * - Detect performance degradation automatically\r\n * - Generate alerts on violations and degradation\r\n * - Provide metrics for dashboards (Grafana integration)\r\n * - Forecast future performance trends\r\n *\r\n * Performance Targets:\r\n * - Metric recording: <10ms overhead\r\n * - Baseline calculation: <5s\r\n * - SLA check: <50ms\r\n */\r\n\r\nimport * as fs from 'fs';\r\nimport * as path from 'path';\r\nimport * as yaml from 'js-yaml';\r\nimport { DatabaseService } from '../lib/database-service.js';\r\nimport { StandardError, ErrorCode } from '../lib/errors.js';\r\nimport { createLogger } from '../lib/logging.js';\r\nimport { v4 as uuidv4 } from 'uuid';\r\n\r\nconst logger = createLogger('performance-monitor');\r\n\r\n/**\r\n * Performance metric recorded for an operation\r\n */\r\nexport interface PerformanceMetric {\r\n operation: string;\r\n duration_ms: number;\r\n timestamp: Date;\r\n metadata?: Record<string, any>;\r\n}\r\n\r\n/**\r\n * SLA definition for an operation\r\n */\r\nexport interface SLADefinition {\r\n target: number; // Target P50 in milliseconds\r\n p95: number; // 95th percentile in milliseconds\r\n p99: number; // 99th percentile in milliseconds\r\n enabled: boolean;\r\n alert_threshold: number; // Multiplier for degradation alert (e.g. 1.2 = 20% degradation)\r\n}\r\n\r\n/**\r\n * Baseline metrics calculated from historical data\r\n */\r\nexport interface BaselineMetrics {\r\n operation: string;\r\n min: number;\r\n p50: number;\r\n p95: number;\r\n p99: number;\r\n max: number;\r\n avg: number;\r\n count: number;\r\n calculated_at: Date;\r\n period_days: number;\r\n}\r\n\r\n/**\r\n * Alert event for SLA violations or degradation\r\n */\r\nexport interface AlertEvent {\r\n id: string;\r\n operation: string;\r\n level: 'info' | 'warning' | 'critical';\r\n message: string;\r\n timestamp: Date;\r\n resolved_at?: Date;\r\n resolved_reason?: string;\r\n metadata?: Record<string, any>;\r\n}\r\n\r\n/**\r\n * SLA compliance report\r\n */\r\nexport interface ComplianceReport {\r\n operation: string;\r\n period: string;\r\n total_metrics: number;\r\n violations_count: number;\r\n compliance_percentage: number;\r\n sla_target_ms: number;\r\n avg_duration_ms: number;\r\n p95_duration_ms: number;\r\n p99_duration_ms: number;\r\n}\r\n\r\n/**\r\n * Dashboard metrics data\r\n */\r\nexport interface DashboardMetrics {\r\n metrics: Array<{\r\n operation: string;\r\n timestamp: Date;\r\n duration_ms: number;\r\n is_violation: boolean;\r\n }>;\r\n timestamps: Date[];\r\n compliance_rates: Record<string, number>;\r\n active_alerts: AlertEvent[];\r\n}\r\n\r\n/**\r\n * SLA trend data point\r\n */\r\nexport interface TrendPoint {\r\n date: Date;\r\n compliance: number;\r\n avg_duration_ms: number;\r\n violations_count: number;\r\n}\r\n\r\n/**\r\n * Performance forecast\r\n */\r\nexport interface PerformanceForecast {\r\n operation: string;\r\n forecasted_duration_ms: number;\r\n confidence_interval_lower: number;\r\n confidence_interval_upper: number;\r\n trend: 'improving' | 'stable' | 'degrading';\r\n forecast_date: Date;\r\n}\r\n\r\n/**\r\n * Performance Monitor Configuration\r\n */\r\nexport interface PerformanceMonitorConfig {\r\n dbService: DatabaseService;\r\n slaConfigPath?: string;\r\n metricsRetentionDays?: number;\r\n baselineCalculationDays?: number;\r\n}\r\n\r\n/**\r\n * Performance Monitor Service\r\n */\r\nexport class PerformanceMonitor {\r\n private dbService: DatabaseService;\r\n private slaConfigPath: string;\r\n private slaDefinitions: Map<string, SLADefinition> = new Map();\r\n private baselineCache: Map<string, BaselineMetrics> = new Map();\r\n private lastBaselineTime: Map<string, number> = new Map();\r\n private metricsRetentionDays: number;\r\n private baselineCalculationDays: number;\r\n private degradationTracker: Map<string, number[]> = new Map();\r\n private initialized: boolean = false;\r\n\r\n constructor(config: PerformanceMonitorConfig) {\r\n this.dbService = config.dbService;\r\n this.slaConfigPath = config.slaConfigPath || path.join(process.cwd(), 'config/sla-definitions.yml');\r\n this.metricsRetentionDays = config.metricsRetentionDays || 90;\r\n this.baselineCalculationDays = config.baselineCalculationDays || 30;\r\n }\r\n\r\n /**\r\n * Initialize performance monitor\r\n */\r\n async init(): Promise<void> {\r\n try {\r\n await this.createTables();\r\n await this.loadSLADefinitions();\r\n this.initialized = true;\r\n logger.info('Performance monitor initialized');\r\n } catch (error) {\r\n throw new StandardError(\r\n ErrorCode.CONFIGURATION_ERROR,\r\n 'Failed to initialize performance monitor',\r\n { cause: error }\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Create necessary database tables\r\n */\r\n private async createTables(): Promise<void> {\r\n try {\r\n const sqliteAdapter = this.dbService.getAdapter('sqlite');\r\n\r\n // Performance metrics table\r\n await sqliteAdapter.raw(`\r\n CREATE TABLE IF NOT EXISTS performance_metrics (\r\n id TEXT PRIMARY KEY,\r\n operation TEXT NOT NULL,\r\n duration_ms REAL NOT NULL,\r\n timestamp DATETIME NOT NULL,\r\n metadata TEXT,\r\n is_sla_violation INTEGER DEFAULT 0,\r\n created_at DATETIME DEFAULT CURRENT_TIMESTAMP\r\n )\r\n `);\r\n\r\n // Create index for query performance\r\n await sqliteAdapter.raw(`\r\n CREATE INDEX IF NOT EXISTS idx_performance_metrics_operation_timestamp\r\n ON performance_metrics(operation, timestamp)\r\n `);\r\n\r\n // SLA violation tracking\r\n await sqliteAdapter.raw(`\r\n CREATE TABLE IF NOT EXISTS sla_violations (\r\n id TEXT PRIMARY KEY,\r\n operation TEXT NOT NULL,\r\n metric_id TEXT NOT NULL,\r\n duration_ms REAL NOT NULL,\r\n sla_target_ms REAL NOT NULL,\r\n violation_percent REAL NOT NULL,\r\n timestamp DATETIME NOT NULL,\r\n created_at DATETIME DEFAULT CURRENT_TIMESTAMP,\r\n FOREIGN KEY (metric_id) REFERENCES performance_metrics(id)\r\n )\r\n `);\r\n\r\n // Create index for violations\r\n await sqliteAdapter.raw(`\r\n CREATE INDEX IF NOT EXISTS idx_sla_violations_operation_timestamp\r\n ON sla_violations(operation, timestamp)\r\n `);\r\n\r\n // Alert events table\r\n await sqliteAdapter.raw(`\r\n CREATE TABLE IF NOT EXISTS performance_alerts (\r\n id TEXT PRIMARY KEY,\r\n operation TEXT NOT NULL,\r\n level TEXT NOT NULL,\r\n message TEXT NOT NULL,\r\n timestamp DATETIME NOT NULL,\r\n resolved_at DATETIME,\r\n resolved_reason TEXT,\r\n metadata TEXT,\r\n created_at DATETIME DEFAULT CURRENT_TIMESTAMP\r\n )\r\n `);\r\n\r\n // Create index for alerts\r\n await sqliteAdapter.raw(`\r\n CREATE INDEX IF NOT EXISTS idx_performance_alerts_operation_timestamp\r\n ON performance_alerts(operation, timestamp)\r\n `);\r\n\r\n // Baseline metrics cache\r\n await sqliteAdapter.raw(`\r\n CREATE TABLE IF NOT EXISTS baseline_metrics (\r\n id TEXT PRIMARY KEY,\r\n operation TEXT NOT NULL UNIQUE,\r\n min REAL NOT NULL,\r\n p50 REAL NOT NULL,\r\n p95 REAL NOT NULL,\r\n p99 REAL NOT NULL,\r\n max REAL NOT NULL,\r\n avg REAL NOT NULL,\r\n count INTEGER NOT NULL,\r\n period_days INTEGER NOT NULL,\r\n calculated_at DATETIME NOT NULL,\r\n updated_at DATETIME DEFAULT CURRENT_TIMESTAMP\r\n )\r\n `);\r\n\r\n logger.debug('Database tables created');\r\n } catch (error) {\r\n // Table creation errors are non-fatal if tables already exist\r\n logger.debug('Table creation error (may already exist):', error);\r\n }\r\n }\r\n\r\n /**\r\n * Load SLA definitions from configuration file\r\n */\r\n private async loadSLADefinitions(): Promise<void> {\r\n try {\r\n if (!fs.existsSync(this.slaConfigPath)) {\r\n logger.warn(`SLA config not found at ${this.slaConfigPath}, using defaults`);\r\n this.loadDefaultSLAs();\r\n return;\r\n }\r\n\r\n const configContent = fs.readFileSync(this.slaConfigPath, 'utf-8');\r\n const config = yaml.load(configContent) as any;\r\n\r\n if (config.slas) {\r\n for (const [operation, sla] of Object.entries(config.slas)) {\r\n this.slaDefinitions.set(operation, sla as SLADefinition);\r\n }\r\n }\r\n\r\n logger.debug(`Loaded ${this.slaDefinitions.size} SLA definitions`);\r\n } catch (error) {\r\n throw new StandardError(\r\n ErrorCode.CONFIGURATION_ERROR,\r\n 'Failed to load SLA definitions',\r\n { path: this.slaConfigPath, cause: error }\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Load default SLA definitions\r\n */\r\n private loadDefaultSLAs(): void {\r\n this.slaDefinitions.set('agent_startup', {\r\n target: 2000,\r\n p95: 2000,\r\n p99: 5000,\r\n enabled: true,\r\n alert_threshold: 1.2,\r\n });\r\n\r\n this.slaDefinitions.set('query_execution', {\r\n target: 5000,\r\n p95: 5000,\r\n p99: 10000,\r\n enabled: true,\r\n alert_threshold: 1.2,\r\n });\r\n\r\n this.slaDefinitions.set('skill_execution', {\r\n target: 30000,\r\n p95: 30000,\r\n p99: 60000,\r\n enabled: true,\r\n alert_threshold: 1.2,\r\n });\r\n\r\n this.slaDefinitions.set('transaction_commit', {\r\n target: 5000,\r\n p95: 5000,\r\n p99: 10000,\r\n enabled: true,\r\n alert_threshold: 1.2,\r\n });\r\n }\r\n\r\n /**\r\n * Record a performance metric\r\n */\r\n async recordMetric(metric: PerformanceMetric): Promise<AlertEvent[]> {\r\n if (!this.initialized) {\r\n throw new StandardError(\r\n ErrorCode.CONFIGURATION_ERROR,\r\n 'Performance monitor not initialized'\r\n );\r\n }\r\n\r\n // Validate metric\r\n this.validateMetric(metric);\r\n\r\n const metricId = uuidv4();\r\n const sqliteAdapter = this.dbService.getAdapter('sqlite');\r\n const alerts: AlertEvent[] = [];\r\n\r\n try {\r\n // Check if metric violates SLA\r\n const isViolation = !await this.isWithinSLA(metric);\r\n\r\n // Record metric\r\n await sqliteAdapter.raw(\r\n `INSERT INTO performance_metrics (id, operation, duration_ms, timestamp, metadata, is_sla_violation)\r\n VALUES (?, ?, ?, ?, ?, ?)`,\r\n [\r\n metricId,\r\n metric.operation,\r\n metric.duration_ms,\r\n metric.timestamp.toISOString(),\r\n JSON.stringify(metric.metadata || {}),\r\n isViolation ? 1 : 0,\r\n ]\r\n );\r\n\r\n // Record violation if applicable\r\n if (isViolation) {\r\n const sla = this.slaDefinitions.get(metric.operation);\r\n if (sla) {\r\n const violationPercent = ((metric.duration_ms - sla.target) / sla.target) * 100;\r\n const violationId = uuidv4();\r\n\r\n await sqliteAdapter.raw(\r\n `INSERT INTO sla_violations (id, operation, metric_id, duration_ms, sla_target_ms, violation_percent, timestamp)\r\n VALUES (?, ?, ?, ?, ?, ?, ?)`,\r\n [\r\n violationId,\r\n metric.operation,\r\n metricId,\r\n metric.duration_ms,\r\n sla.target,\r\n violationPercent,\r\n metric.timestamp.toISOString(),\r\n ]\r\n );\r\n\r\n // Create alert\r\n const alert: AlertEvent = {\r\n id: `alert-${metricId}`,\r\n operation: metric.operation,\r\n level: violationPercent > 200 ? 'critical' : 'warning', // Critical if >200% over (3x the SLA)\r\n message: `SLA violation: ${metric.duration_ms}ms exceeds target of ${sla.target}ms`,\r\n timestamp: new Date(),\r\n metadata: {\r\n duration_ms: metric.duration_ms,\r\n sla_target_ms: sla.target,\r\n violation_percent: violationPercent,\r\n },\r\n };\r\n\r\n await this.recordAlert(alert);\r\n alerts.push(alert);\r\n }\r\n }\r\n\r\n return alerts;\r\n } catch (error) {\r\n logger.error('Error recording metric:', error);\r\n throw new StandardError(\r\n ErrorCode.DB_QUERY_FAILED,\r\n 'Failed to record performance metric',\r\n { operation: metric.operation, cause: error instanceof Error ? error.message : String(error) }\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Record multiple metrics in batch\r\n */\r\n async recordMetrics(metrics: PerformanceMetric[]): Promise<void> {\r\n for (const metric of metrics) {\r\n await this.recordMetric(metric);\r\n }\r\n }\r\n\r\n /**\r\n * Check if metric is within SLA\r\n */\r\n async isWithinSLA(metric: PerformanceMetric): Promise<boolean> {\r\n const sla = this.slaDefinitions.get(metric.operation);\r\n\r\n if (!sla || !sla.enabled) {\r\n return true; // No SLA defined, assume compliance\r\n }\r\n\r\n return metric.duration_ms <= sla.target;\r\n }\r\n\r\n /**\r\n * Get SLA violations for an operation\r\n */\r\n async getSLAViolations(\r\n operation: string,\r\n options?: { period?: string; limit?: number }\r\n ): Promise<PerformanceMetric[]> {\r\n const sqliteAdapter = this.dbService.getAdapter('sqlite');\r\n const periodDays = this.getPeriodDays(options?.period || '1h');\r\n const cutoffDate = new Date(Date.now() - periodDays * 24 * 60 * 60 * 1000);\r\n const limit = options?.limit || 1000;\r\n\r\n try {\r\n const result = await sqliteAdapter.raw<any[]>(\r\n `SELECT pm.id, pm.operation, pm.duration_ms, pm.timestamp, pm.metadata\r\n FROM performance_metrics pm\r\n WHERE pm.operation = ? AND pm.is_sla_violation = 1 AND pm.timestamp >= ?\r\n ORDER BY pm.timestamp DESC\r\n LIMIT ?`,\r\n [operation, cutoffDate.toISOString(), limit]\r\n );\r\n\r\n const rows = Array.isArray(result) ? result : [];\r\n return rows.map((row: any) => ({\r\n operation: row.operation,\r\n duration_ms: row.duration_ms,\r\n timestamp: new Date(row.timestamp),\r\n metadata: JSON.parse(row.metadata || '{}'),\r\n }));\r\n } catch (error) {\r\n throw new StandardError(\r\n ErrorCode.DB_QUERY_FAILED,\r\n 'Failed to get SLA violations',\r\n { operation, cause: error }\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Calculate baseline metrics from historical data\r\n */\r\n async calculateBaseline(operation: string, days: number = 30): Promise<BaselineMetrics> {\r\n // Check cache first (5 minute TTL)\r\n const cached = this.baselineCache.get(operation);\r\n const lastTime = this.lastBaselineTime.get(operation) || 0;\r\n if (cached && Date.now() - lastTime < 5 * 60 * 1000) {\r\n return cached;\r\n }\r\n\r\n const sqliteAdapter = this.dbService.getAdapter('sqlite');\r\n const startTime = Date.now();\r\n\r\n try {\r\n const startDate = new Date(Date.now() - days * 24 * 60 * 60 * 1000);\r\n\r\n const result = await sqliteAdapter.raw<any[]>(\r\n `SELECT\r\n MIN(duration_ms) as min_duration,\r\n MAX(duration_ms) as max_duration,\r\n AVG(duration_ms) as avg_duration,\r\n COUNT(*) as count\r\n FROM performance_metrics\r\n WHERE operation = ? AND timestamp >= ?`,\r\n [operation, startDate.toISOString()]\r\n );\r\n\r\n const rows = Array.isArray(result) ? result : [];\r\n if (rows.length === 0 || rows[0].count === 0) {\r\n throw new StandardError(\r\n ErrorCode.DB_NOT_FOUND,\r\n `No metrics found for operation: ${operation}`,\r\n { days }\r\n );\r\n }\r\n\r\n // Get percentile values\r\n const percentiles = await this.calculatePercentiles(operation, startDate);\r\n\r\n const baseline: BaselineMetrics = {\r\n operation,\r\n min: rows[0].min_duration,\r\n p50: percentiles.p50,\r\n p95: percentiles.p95,\r\n p99: percentiles.p99,\r\n max: rows[0].max_duration,\r\n avg: rows[0].avg_duration,\r\n count: rows[0].count,\r\n calculated_at: new Date(),\r\n period_days: days,\r\n };\r\n\r\n // Cache baseline\r\n this.baselineCache.set(operation, baseline);\r\n this.lastBaselineTime.set(operation, Date.now());\r\n\r\n const duration = Date.now() - startTime;\r\n if (duration > 5000) {\r\n logger.warn(`Baseline calculation took ${duration}ms (target: <5s)`);\r\n }\r\n\r\n return baseline;\r\n } catch (error) {\r\n throw new StandardError(\r\n ErrorCode.DB_QUERY_FAILED,\r\n 'Failed to calculate baseline',\r\n { operation, days, cause: error }\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Calculate percentile values\r\n */\r\n private async calculatePercentiles(\r\n operation: string,\r\n startDate: Date\r\n ): Promise<{ p50: number; p95: number; p99: number }> {\r\n const sqliteAdapter = this.dbService.getAdapter('sqlite');\r\n\r\n try {\r\n // Get all durations and sort them in application\r\n const result = await sqliteAdapter.raw<any[]>(\r\n `SELECT duration_ms\r\n FROM performance_metrics\r\n WHERE operation = ? AND timestamp >= ?\r\n ORDER BY duration_ms ASC`,\r\n [operation, startDate.toISOString()]\r\n );\r\n\r\n const rows = Array.isArray(result) ? result : [];\r\n if (rows.length === 0) {\r\n return { p50: 0, p95: 0, p99: 0 };\r\n }\r\n\r\n const durations = rows.map((row: any) => row.duration_ms);\r\n durations.sort((a: number, b: number) => a - b);\r\n\r\n const len = durations.length;\r\n const p50Index = Math.floor(len * 0.50);\r\n const p95Index = Math.floor(len * 0.95);\r\n const p99Index = Math.floor(len * 0.99);\r\n\r\n return {\r\n p50: durations[p50Index] || 0,\r\n p95: durations[p95Index] || 0,\r\n p99: durations[p99Index] || 0,\r\n };\r\n } catch (error) {\r\n logger.error('Error calculating percentiles:', error);\r\n return { p50: 0, p95: 0, p99: 0 };\r\n }\r\n }\r\n\r\n /**\r\n * Get SLA compliance percentage for an operation\r\n */\r\n async getSLACompliance(operation: string, period: string): Promise<number> {\r\n const sqliteAdapter = this.dbService.getAdapter('sqlite');\r\n const periodDays = this.getPeriodDays(period);\r\n const cutoffDate = new Date(Date.now() - periodDays * 24 * 60 * 60 * 1000);\r\n\r\n try {\r\n const result = await sqliteAdapter.raw<any[]>(\r\n `SELECT\r\n COUNT(*) as total,\r\n SUM(CASE WHEN is_sla_violation = 0 THEN 1 ELSE 0 END) as compliant\r\n FROM performance_metrics\r\n WHERE operation = ? AND timestamp >= ?`,\r\n [operation, cutoffDate.toISOString()]\r\n );\r\n\r\n const rows = Array.isArray(result) ? result : [];\r\n if (rows.length === 0) {\r\n return 1.0; // No metrics, assume 100% compliant\r\n }\r\n\r\n const row = rows[0];\r\n if (row.total === 0) {\r\n return 1.0; // No metrics, assume 100% compliant\r\n }\r\n\r\n return row.compliant / row.total;\r\n } catch (error) {\r\n throw new StandardError(\r\n ErrorCode.DB_QUERY_FAILED,\r\n 'Failed to calculate SLA compliance',\r\n { operation, period, cause: error }\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Detect performance degradation\r\n */\r\n async detectDegradation(\r\n operation: string,\r\n options?: {\r\n threshold_percent?: number;\r\n window_minutes?: number;\r\n }\r\n ): Promise<boolean> {\r\n const threshold = options?.threshold_percent || 20;\r\n const windowMinutes = options?.window_minutes || 5;\r\n\r\n try {\r\n const baseline = await this.calculateBaseline(operation, 30);\r\n const sqliteAdapter = this.dbService.getAdapter('sqlite');\r\n\r\n const windowStart = new Date(Date.now() - windowMinutes * 60 * 1000);\r\n\r\n const result = await sqliteAdapter.raw<any[]>(\r\n `SELECT AVG(duration_ms) as avg_duration, COUNT(*) as count\r\n FROM performance_metrics\r\n WHERE operation = ? AND timestamp >= ?`,\r\n [operation, windowStart.toISOString()]\r\n );\r\n\r\n const rows = Array.isArray(result) ? result : [];\r\n if (rows.length === 0) {\r\n return false; // No metrics, assume no degradation\r\n }\r\n\r\n const row = rows[0];\r\n if (row.count < 5) {\r\n return false; // Need at least 5 samples\r\n }\r\n\r\n const degradationPercent = ((row.avg_duration - baseline.p50) / baseline.p50) * 100;\r\n return degradationPercent > threshold;\r\n } catch (error) {\r\n logger.error(`Failed to detect degradation for ${operation}:`, error);\r\n return false;\r\n }\r\n }\r\n\r\n /**\r\n * Get metrics with optional filtering\r\n */\r\n async getMetrics(\r\n operation: string,\r\n options?: {\r\n period?: string;\r\n limit?: number;\r\n offset?: number;\r\n includeMetadata?: boolean;\r\n }\r\n ): Promise<PerformanceMetric[]> {\r\n const sqliteAdapter = this.dbService.getAdapter('sqlite');\r\n const limit = options?.limit || 1000;\r\n const offset = options?.offset || 0;\r\n let whereClause = 'operation = ?';\r\n const params: any[] = [operation];\r\n\r\n if (options?.period) {\r\n const periodDays = this.getPeriodDays(options.period);\r\n const cutoffDate = new Date(Date.now() - periodDays * 24 * 60 * 60 * 1000);\r\n whereClause += ' AND timestamp >= ?';\r\n params.push(cutoffDate.toISOString());\r\n }\r\n\r\n try {\r\n const result = await sqliteAdapter.raw<any[]>(\r\n `SELECT id, operation, duration_ms, timestamp, metadata\r\n FROM performance_metrics\r\n WHERE ${whereClause}\r\n ORDER BY timestamp DESC\r\n LIMIT ? OFFSET ?`,\r\n [...params, limit, offset]\r\n );\r\n\r\n const rows = Array.isArray(result) ? result : [];\r\n return rows.map((row: any) => ({\r\n operation: row.operation,\r\n duration_ms: row.duration_ms,\r\n timestamp: new Date(row.timestamp),\r\n metadata: options?.includeMetadata ? JSON.parse(row.metadata || '{}') : undefined,\r\n }));\r\n } catch (error) {\r\n throw new StandardError(\r\n ErrorCode.DB_QUERY_FAILED,\r\n 'Failed to get metrics',\r\n { operation, cause: error }\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Get compliance report for an operation\r\n */\r\n async getComplianceReport(\r\n operation: string,\r\n options?: {\r\n period?: string;\r\n includeRawData?: boolean;\r\n }\r\n ): Promise<ComplianceReport> {\r\n const period = options?.period || '1d';\r\n const compliance = await this.getSLACompliance(operation, period);\r\n const violations = await this.getSLAViolations(operation, { period });\r\n const metrics = await this.getMetrics(operation, { period, limit: 10000 });\r\n\r\n const sla = this.slaDefinitions.get(operation);\r\n const avgDuration = metrics.length > 0\r\n ? metrics.reduce((sum, m) => sum + m.duration_ms, 0) / metrics.length\r\n : 0;\r\n\r\n // Calculate percentiles\r\n const sortedDurations = metrics.map(m => m.duration_ms).sort((a, b) => a - b);\r\n const p95Index = Math.floor(sortedDurations.length * 0.95);\r\n const p99Index = Math.floor(sortedDurations.length * 0.99);\r\n\r\n return {\r\n operation,\r\n period,\r\n total_metrics: metrics.length,\r\n violations_count: violations.length,\r\n compliance_percentage: compliance * 100,\r\n sla_target_ms: sla?.target || 0,\r\n avg_duration_ms: avgDuration,\r\n p95_duration_ms: sortedDurations[p95Index] || 0,\r\n p99_duration_ms: sortedDurations[p99Index] || 0,\r\n };\r\n }\r\n\r\n /**\r\n * Record an alert\r\n */\r\n async recordAlert(alert: AlertEvent): Promise<void> {\r\n const sqliteAdapter = this.dbService.getAdapter('sqlite');\r\n\r\n try {\r\n await sqliteAdapter.raw(\r\n `INSERT INTO performance_alerts (id, operation, level, message, timestamp, metadata)\r\n VALUES (?, ?, ?, ?, ?, ?)`,\r\n [\r\n alert.id,\r\n alert.operation,\r\n alert.level,\r\n alert.message,\r\n alert.timestamp.toISOString(),\r\n JSON.stringify(alert.metadata || {}),\r\n ]\r\n );\r\n } catch (error) {\r\n throw new StandardError(\r\n ErrorCode.DB_QUERY_FAILED,\r\n 'Failed to record alert',\r\n { operation: alert.operation, cause: error }\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Get alerts for an operation\r\n */\r\n async getAlerts(\r\n operation: string,\r\n options?: {\r\n type?: string;\r\n activeOnly?: boolean;\r\n minSeverity?: string;\r\n limit?: number;\r\n }\r\n ): Promise<AlertEvent[]> {\r\n const sqliteAdapter = this.dbService.getAdapter('sqlite');\r\n let whereClauses = ['operation = ?'];\r\n const params: any[] = [operation];\r\n\r\n if (options?.activeOnly) {\r\n whereClauses.push('resolved_at IS NULL');\r\n }\r\n\r\n if (options?.minSeverity) {\r\n const severities = ['info', 'warning', 'critical'];\r\n const minIndex = severities.indexOf(options.minSeverity);\r\n const validSeverities = severities.slice(minIndex).map(() => '?').join(',');\r\n whereClauses.push(`level IN (${validSeverities})`);\r\n params.push(...severities.slice(minIndex));\r\n }\r\n\r\n const whereClause = whereClauses.join(' AND ');\r\n const limit = options?.limit || 1000;\r\n\r\n try {\r\n const result = await sqliteAdapter.raw<any[]>(\r\n `SELECT id, operation, level, message, timestamp, resolved_at, resolved_reason, metadata\r\n FROM performance_alerts\r\n WHERE ${whereClause}\r\n ORDER BY timestamp DESC\r\n LIMIT ?`,\r\n [...params, limit]\r\n );\r\n\r\n const rows = Array.isArray(result) ? result : [];\r\n return rows.map((row: any) => ({\r\n id: row.id,\r\n operation: row.operation,\r\n level: row.level,\r\n message: row.message,\r\n timestamp: new Date(row.timestamp),\r\n resolved_at: row.resolved_at ? new Date(row.resolved_at) : undefined,\r\n resolved_reason: row.resolved_reason,\r\n metadata: JSON.parse(row.metadata || '{}'),\r\n }));\r\n } catch (error) {\r\n throw new StandardError(\r\n ErrorCode.DB_QUERY_FAILED,\r\n 'Failed to get alerts',\r\n { operation, cause: error }\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Resolve an alert\r\n */\r\n async resolveAlert(alertId: string, reason: string): Promise<void> {\r\n const sqliteAdapter = this.dbService.getAdapter('sqlite');\r\n\r\n try {\r\n await sqliteAdapter.raw(\r\n `UPDATE performance_alerts\r\n SET resolved_at = ?, resolved_reason = ?\r\n WHERE id = ?`,\r\n [new Date().toISOString(), reason, alertId]\r\n );\r\n } catch (error) {\r\n throw new StandardError(\r\n ErrorCode.DB_QUERY_FAILED,\r\n 'Failed to resolve alert',\r\n { alertId, cause: error }\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Get dashboard metrics\r\n */\r\n async getDashboardMetrics(options?: {\r\n time_range?: string;\r\n resolution?: string;\r\n }): Promise<DashboardMetrics> {\r\n const period = options?.time_range || '24h';\r\n const periodDays = this.getPeriodDays(period);\r\n const cutoffDate = new Date(Date.now() - periodDays * 24 * 60 * 60 * 1000);\r\n const sqliteAdapter = this.dbService.getAdapter('sqlite');\r\n\r\n try {\r\n const result = await sqliteAdapter.raw<any[]>(\r\n `SELECT operation, duration_ms, timestamp, is_sla_violation\r\n FROM performance_metrics\r\n WHERE timestamp >= ?\r\n ORDER BY timestamp`,\r\n [cutoffDate.toISOString()]\r\n );\r\n\r\n const rows = Array.isArray(result) ? result : [];\r\n const metrics = rows.map((row: any) => ({\r\n operation: row.operation,\r\n timestamp: new Date(row.timestamp),\r\n duration_ms: row.duration_ms,\r\n is_violation: row.is_sla_violation === 1,\r\n }));\r\n\r\n const timestamps = [...new Set(metrics.map(m => m.timestamp.toISOString()))].sort().map(t => new Date(t));\r\n\r\n // Calculate compliance rates per operation\r\n const complianceRates: Record<string, number> = {};\r\n const operations = [...new Set(metrics.map(m => m.operation))];\r\n for (const op of operations) {\r\n complianceRates[op] = await this.getSLACompliance(op, period);\r\n }\r\n\r\n // Get active alerts\r\n const allAlerts = await Promise.all(\r\n operations.map(op => this.getAlerts(op, { activeOnly: true }))\r\n );\r\n const activeAlerts = allAlerts.flat();\r\n\r\n return {\r\n metrics,\r\n timestamps,\r\n compliance_rates: complianceRates,\r\n active_alerts: activeAlerts,\r\n };\r\n } catch (error) {\r\n throw new StandardError(\r\n ErrorCode.DB_QUERY_FAILED,\r\n 'Failed to get dashboard metrics',\r\n { cause: error }\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Get SLA trends over time\r\n */\r\n async getSLATrends(\r\n operation: string,\r\n options?: {\r\n period?: string;\r\n interval?: string;\r\n }\r\n ): Promise<TrendPoint[]> {\r\n const period = options?.period || '7d';\r\n const periodDays = this.getPeriodDays(period);\r\n const cutoffDate = new Date(Date.now() - periodDays * 24 * 60 * 60 * 1000);\r\n const sqliteAdapter = this.dbService.getAdapter('sqlite');\r\n\r\n try {\r\n const result = await sqliteAdapter.raw<any[]>(\r\n `SELECT\r\n DATE(timestamp) as date,\r\n COUNT(*) as total,\r\n SUM(CASE WHEN is_sla_violation = 0 THEN 1 ELSE 0 END) as compliant,\r\n AVG(duration_ms) as avg_duration,\r\n SUM(CASE WHEN is_sla_violation = 1 THEN 1 ELSE 0 END) as violations\r\n FROM performance_metrics\r\n WHERE operation = ? AND timestamp >= ?\r\n GROUP BY DATE(timestamp)\r\n ORDER BY date ASC`,\r\n [operation, cutoffDate.toISOString()]\r\n );\r\n\r\n const rows = Array.isArray(result) ? result : [];\r\n return rows.map((row: any) => ({\r\n date: new Date(row.date),\r\n compliance: row.compliant && row.total ? row.compliant / row.total : 1.0,\r\n avg_duration_ms: row.avg_duration || 0,\r\n violations_count: row.violations || 0,\r\n }));\r\n } catch (error) {\r\n throw new StandardError(\r\n ErrorCode.DB_QUERY_FAILED,\r\n 'Failed to get SLA trends',\r\n { operation, cause: error }\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Forecast future performance\r\n */\r\n async forecastPerformance(\r\n operation: string,\r\n options?: {\r\n days_ahead?: number;\r\n }\r\n ): Promise<PerformanceForecast> {\r\n const daysAhead = options?.days_ahead || 7;\r\n\r\n try {\r\n const baseline = await this.calculateBaseline(operation, 30);\r\n const trends = await this.getSLATrends(operation, { period: '7d', interval: '1d' });\r\n\r\n // Simple trend analysis\r\n let trend: 'improving' | 'stable' | 'degrading' = 'stable';\r\n if (trends.length >= 2) {\r\n const recentAvg = trends.slice(-3).reduce((sum, t) => sum + t.avg_duration_ms, 0) / 3;\r\n const olderAvg = trends.slice(0, 3).reduce((sum, t) => sum + t.avg_duration_ms, 0) / 3;\r\n\r\n if (recentAvg < olderAvg * 0.95) {\r\n trend = 'improving';\r\n } else if (recentAvg > olderAvg * 1.05) {\r\n trend = 'degrading';\r\n }\r\n }\r\n\r\n // Calculate confidence interval\r\n const stdDev = this.calculateStdDev(trends.map(t => t.avg_duration_ms));\r\n const margin = 1.96 * (stdDev / Math.sqrt(trends.length)); // 95% CI\r\n\r\n return {\r\n operation,\r\n forecasted_duration_ms: baseline.p50,\r\n confidence_interval_lower: Math.max(baseline.p50 - margin, 0),\r\n confidence_interval_upper: baseline.p50 + margin,\r\n trend,\r\n forecast_date: new Date(Date.now() + daysAhead * 24 * 60 * 60 * 1000),\r\n };\r\n } catch (error) {\r\n throw new StandardError(\r\n ErrorCode.DB_QUERY_FAILED,\r\n 'Failed to forecast performance',\r\n { operation, cause: error }\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Get SLA definitions\r\n */\r\n async getSLADefinitions(): Promise<Record<string, SLADefinition>> {\r\n const result: Record<string, SLADefinition> = {};\r\n for (const [op, sla] of this.slaDefinitions.entries()) {\r\n result[op] = sla;\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * Get SLA definition for an operation\r\n */\r\n async getSLADefinition(operation: string): Promise<SLADefinition | undefined> {\r\n return this.slaDefinitions.get(operation);\r\n }\r\n\r\n /**\r\n * Validate performance metric\r\n */\r\n private validateMetric(metric: PerformanceMetric): void {\r\n if (!metric.operation) {\r\n throw new StandardError(\r\n ErrorCode.VALIDATION_FAILED,\r\n 'Metric operation is required'\r\n );\r\n }\r\n\r\n if (typeof metric.duration_ms !== 'number' || metric.duration_ms < 0) {\r\n throw new StandardError(\r\n ErrorCode.VALIDATION_FAILED,\r\n 'Metric duration_ms must be a non-negative number'\r\n );\r\n }\r\n\r\n if (!metric.timestamp) {\r\n throw new StandardError(\r\n ErrorCode.VALIDATION_FAILED,\r\n 'Metric timestamp is required'\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Get period duration in days\r\n */\r\n private getPeriodDays(period: string): number {\r\n const match = period.match(/^(\\d+)([hmd])$/);\r\n if (!match) {\r\n return 1;\r\n }\r\n\r\n const [, value, unit] = match;\r\n const unitMap: Record<string, number> = {\r\n h: 1 / 24,\r\n m: 1 / (24 * 60),\r\n d: 1,\r\n };\r\n\r\n return parseInt(value) * unitMap[unit];\r\n }\r\n\r\n /**\r\n * Calculate standard deviation\r\n */\r\n private calculateStdDev(values: number[]): number {\r\n if (values.length === 0) return 0;\r\n\r\n const mean = values.reduce((a, b) => a + b) / values.length;\r\n const variance = values.reduce((sum, val) => sum + Math.pow(val - mean, 2), 0) / values.length;\r\n\r\n return Math.sqrt(variance);\r\n }\r\n}\r\n"],"names":["fs","path","yaml","StandardError","ErrorCode","createLogger","v4","uuidv4","logger","PerformanceMonitor","dbService","slaConfigPath","slaDefinitions","Map","baselineCache","lastBaselineTime","metricsRetentionDays","baselineCalculationDays","degradationTracker","initialized","config","join","process","cwd","init","createTables","loadSLADefinitions","info","error","CONFIGURATION_ERROR","cause","sqliteAdapter","getAdapter","raw","debug","existsSync","warn","loadDefaultSLAs","configContent","readFileSync","load","slas","operation","sla","Object","entries","set","size","target","p95","p99","enabled","alert_threshold","recordMetric","metric","validateMetric","metricId","alerts","isViolation","isWithinSLA","duration_ms","timestamp","toISOString","JSON","stringify","metadata","get","violationPercent","violationId","alert","id","level","message","Date","sla_target_ms","violation_percent","recordAlert","push","DB_QUERY_FAILED","Error","String","recordMetrics","metrics","getSLAViolations","options","periodDays","getPeriodDays","period","cutoffDate","now","limit","result","rows","Array","isArray","map","row","parse","calculateBaseline","days","cached","lastTime","startTime","startDate","length","count","DB_NOT_FOUND","percentiles","calculatePercentiles","baseline","min","min_duration","p50","max","max_duration","avg","avg_duration","calculated_at","period_days","duration","durations","sort","a","b","len","p50Index","Math","floor","p95Index","p99Index","getSLACompliance","total","compliant","detectDegradation","threshold","threshold_percent","windowMinutes","window_minutes","windowStart","degradationPercent","getMetrics","offset","whereClause","params","includeMetadata","undefined","getComplianceReport","compliance","violations","avgDuration","reduce","sum","m","sortedDurations","total_metrics","violations_count","compliance_percentage","avg_duration_ms","p95_duration_ms","p99_duration_ms","getAlerts","whereClauses","activeOnly","minSeverity","severities","minIndex","indexOf","validSeverities","slice","resolved_at","resolved_reason","resolveAlert","alertId","reason","getDashboardMetrics","time_range","is_violation","is_sla_violation","timestamps","Set","t","complianceRates","operations","op","allAlerts","Promise","all","activeAlerts","flat","compliance_rates","active_alerts","getSLATrends","date","forecastPerformance","daysAhead","days_ahead","trends","interval","trend","recentAvg","olderAvg","stdDev","calculateStdDev","margin","sqrt","forecasted_duration_ms","confidence_interval_lower","confidence_interval_upper","forecast_date","getSLADefinitions","getSLADefinition","VALIDATION_FAILED","match","value","unit","unitMap","h","d","parseInt","values","mean","variance","val","pow"],"mappings":"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"}
|