claude-flow-novice 2.15.3 → 2.15.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/cfn-extras/skills/advanced-features/cfn-agent-swap/recommend-swap.sh +59 -59
- package/.claude/cfn-extras/skills/analytics/cfn-improvement-recommender/recommend-improvements.sh +91 -91
- package/.claude/cfn-extras/skills/analytics/cfn-pattern-extraction/extract-patterns.sh +79 -79
- package/.claude/cfn-extras/skills/analytics/cfn-retrospective-report/generate-report.sh +100 -100
- package/.claude/cfn-extras/skills/analytics/cfn-telemetry/start-telemetry.sh +110 -110
- package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/add-bullet.sh +145 -145
- package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/log-merge.sh +67 -67
- package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/monitor-injection-performance.sh +137 -137
- package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/optimize-injection-pipeline.sh +168 -168
- package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/query-reflections.sh +35 -35
- package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/store-reflection.sh +45 -45
- package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/track-ab-test.sh +41 -41
- package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/update-reflection.sh +41 -41
- package/.claude/cfn-extras/skills/deprecated/cfn-cli-setup/validate-cli-environment.sh +191 -191
- package/.claude/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/create-campaign.sh +231 -231
- package/.claude/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/get-campaign-performance.sh +190 -190
- package/.claude/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/pause-campaign.sh +142 -142
- package/.claude/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/set-budget.sh +181 -181
- package/.claude/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/update-bid-strategy.sh +133 -133
- package/.claude/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/get-conversation-history.sh +121 -121
- package/.claude/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/qualify-lead.sh +156 -156
- package/.claude/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/schedule-demo.sh +181 -181
- package/.claude/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/send-message.sh +137 -137
- package/.claude/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/transfer-to-human.sh +179 -179
- package/.claude/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/create-campaign.sh +183 -183
- package/.claude/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/get-delivery-status.sh +139 -139
- package/.claude/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/opt-out.sh +150 -150
- package/.claude/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/schedule-campaign.sh +187 -187
- package/.claude/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/send-sms.sh +181 -181
- package/.claude/cfn-extras/skills/ui-portal/cfn-web-portal/test-web-portal-skill.sh +50 -50
- package/.claude/cfn-extras/skills/ui-portal/cfn-web-portal/validate-deployment.sh +84 -84
- package/.claude/cfn-extras/skills/utility/cfn-environment-sanitization/sanitize-environment.sh +243 -243
- package/.claude/commands/cfn-loop-cli.md +16 -2
- package/.claude/commands/switch-api.md +31 -10
- package/.claude/hooks/cfn-lint-sql-injection.sh +61 -0
- package/.claude/hooks/cfn-post-edit-cfn-retrospective.sh +33 -2
- package/.claude/hooks/cfn-pre-edit-security-warning.sh +40 -0
- package/.claude/skills/cfn-agent-spawning/spawn-agent.sh +22 -24
- package/.claude/skills/cfn-docker-agent-spawning/SKILL.md +28 -4
- package/.claude/skills/cfn-docker-agent-spawning/spawn-agent.sh +3 -1
- package/.claude/skills/cfn-docker-loop-orchestration/orchestrate.sh +224 -20
- package/.claude/skills/cfn-loop-orchestration/helpers/gate-check.sh +550 -46
- package/.claude/skills/cfn-loop-orchestration/helpers/parse-test-results.sh +277 -0
- package/.claude/skills/cfn-loop-orchestration/orchestrate.sh +184 -23
- package/.claude/skills/cfn-loop-orchestration/security_utils.sh +24 -0
- package/.claude/skills/cfn-loop-orchestration/test-iteration-context-injection.sh +366 -0
- package/.claude/skills/cfn-redis-coordination/CENTRALIZED_REDIS_WRAPPER.md +319 -0
- package/.claude/skills/cfn-redis-coordination/agent-log.sh +4 -0
- package/.claude/skills/cfn-redis-coordination/agent-log.sh.bak +124 -0
- package/.claude/skills/cfn-redis-coordination/agent-recovery.sh +2 -2
- package/.claude/skills/cfn-redis-coordination/collect-confidence-scores.sh +30 -0
- package/.claude/skills/cfn-redis-coordination/get-context.sh +33 -0
- package/.claude/skills/cfn-redis-coordination/get-success-criteria.sh +54 -0
- package/.claude/skills/cfn-redis-coordination/invoke-waiting-mode.sh +3 -0
- package/.claude/skills/cfn-redis-coordination/redis-cli-wrapper.sh +24 -3
- package/.claude/skills/cfn-redis-coordination/redis-functions.sh +33 -0
- package/.claude/skills/cfn-redis-coordination/report-completion.sh +24 -31
- package/.claude/skills/cfn-redis-coordination/store-context.sh +4 -0
- package/.claude/skills/cfn-redis-coordination/store-success-criteria.sh +85 -0
- package/.claude/skills/cfn-redis-coordination/update-all-scripts.sh +67 -0
- package/.claude/skills/cfn-sqlite-memory/ttl-cleanup.sh +17 -25
- package/.claude/skills/cfn-transparency-middleware/test-e2e.sh +15 -0
- package/.claude/skills/cfn-transparency-middleware/tests/input-validation.sh +15 -0
- package/README.md +116 -475
- package/claude-assets/agents/cfn-dev-team/README.md +103 -0
- package/claude-assets/agents/cfn-dev-team/architecture/goal-planner.md +1 -1
- package/claude-assets/agents/cfn-dev-team/coordinators/cfn-frontend-coordinator.md +77 -15
- package/claude-assets/agents/cfn-dev-team/coordinators/cfn-v3-coordinator.md +355 -6
- package/claude-assets/agents/cfn-dev-team/coordinators/consensus-builder.md +82 -1
- package/claude-assets/agents/cfn-dev-team/coordinators/handoff-coordinator.md +82 -1
- package/claude-assets/agents/cfn-dev-team/coordinators/multi-sprint-coordinator.md +77 -15
- package/claude-assets/agents/cfn-dev-team/dev-ops/docker-specialist.md +99 -12
- package/claude-assets/agents/cfn-dev-team/dev-ops/github-commit-agent.md +1 -1
- package/claude-assets/agents/cfn-dev-team/dev-ops/kubernetes-specialist.md +97 -0
- package/claude-assets/agents/cfn-dev-team/dev-ops/monitoring-specialist.md +20 -1
- package/claude-assets/agents/cfn-dev-team/developers/api-gateway-specialist.md +97 -0
- package/claude-assets/agents/cfn-dev-team/developers/backend-developer.md +110 -13
- package/claude-assets/agents/cfn-dev-team/developers/data/data-engineer.md +106 -15
- package/claude-assets/agents/cfn-dev-team/developers/database/database-architect.md +115 -11
- package/claude-assets/agents/cfn-dev-team/developers/frontend/mobile-dev.md +94 -7
- package/claude-assets/agents/cfn-dev-team/developers/frontend/react-frontend-engineer.md +87 -9
- package/claude-assets/agents/cfn-dev-team/developers/frontend/typescript-specialist.md +85 -7
- package/claude-assets/agents/cfn-dev-team/developers/frontend/ui-designer.md +160 -28
- package/claude-assets/agents/cfn-dev-team/developers/graphql-specialist.md +101 -19
- package/claude-assets/agents/cfn-dev-team/developers/rust-developer.md +108 -14
- package/claude-assets/agents/cfn-dev-team/reviewers/{reviewer.md → code-reviewer.md} +95 -8
- package/claude-assets/agents/cfn-dev-team/reviewers/quality/code-quality-validator.md +107 -7
- package/claude-assets/agents/cfn-dev-team/reviewers/quality/perf-analyzer.md +98 -7
- package/claude-assets/agents/cfn-dev-team/reviewers/quality/performance-benchmarker.md +95 -7
- package/claude-assets/agents/cfn-dev-team/reviewers/quality/security-specialist.md +136 -9
- package/claude-assets/agents/cfn-dev-team/testers/api-testing-specialist.md +108 -1
- package/claude-assets/agents/cfn-dev-team/testers/chaos-engineering-specialist.md +107 -13
- package/claude-assets/agents/cfn-dev-team/testers/contract-tester.md +737 -0
- package/claude-assets/agents/cfn-dev-team/testers/e2e/playwright-tester.md +1 -1
- package/claude-assets/agents/cfn-dev-team/testers/integration-tester.md +828 -0
- package/claude-assets/agents/cfn-dev-team/testers/interaction-tester.md +106 -7
- package/claude-assets/agents/cfn-dev-team/testers/load-testing-specialist.md +77 -0
- package/claude-assets/agents/cfn-dev-team/testers/mutation-testing-specialist.md +684 -0
- package/claude-assets/agents/cfn-dev-team/testers/playwright-tester.md +110 -1
- package/claude-assets/agents/cfn-dev-team/testers/tester.md +94 -7
- package/claude-assets/agents/cfn-dev-team/utility/code-booster.md +1 -3
- package/claude-assets/agents/cfn-dev-team/utility/epic-creator.md +87 -13
- package/claude-assets/agents/cfn-dev-team/utility/memory-leak-specialist.md +103 -7
- package/claude-assets/agents/cfn-dev-team/utility/researcher.md +1 -3
- package/claude-assets/agents/cfn-dev-team/utility/z-ai-specialist.md +94 -7
- package/claude-assets/agents/docker-coordinators/cfn-docker-v3-coordinator.md +46 -0
- package/claude-assets/agents/project-only-agents/npm-package-specialist.md +1 -1
- package/claude-assets/cfn-extras/skills/advanced-features/cfn-agent-swap/recommend-swap.sh +59 -59
- package/claude-assets/cfn-extras/skills/analytics/cfn-improvement-recommender/recommend-improvements.sh +91 -91
- package/claude-assets/cfn-extras/skills/analytics/cfn-pattern-extraction/extract-patterns.sh +79 -79
- package/claude-assets/cfn-extras/skills/analytics/cfn-retrospective-report/generate-report.sh +100 -100
- package/claude-assets/cfn-extras/skills/analytics/cfn-telemetry/start-telemetry.sh +110 -110
- package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/add-bullet.sh +145 -145
- package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/log-merge.sh +67 -67
- package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/monitor-injection-performance.sh +137 -137
- package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/optimize-injection-pipeline.sh +168 -168
- package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/query-reflections.sh +35 -35
- package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/store-reflection.sh +45 -45
- package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/track-ab-test.sh +41 -41
- package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/update-reflection.sh +41 -41
- package/claude-assets/cfn-extras/skills/deprecated/cfn-cli-setup/validate-cli-environment.sh +191 -191
- package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/create-campaign.sh +231 -231
- package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/get-campaign-performance.sh +190 -190
- package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/pause-campaign.sh +142 -142
- package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/set-budget.sh +181 -181
- package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/update-bid-strategy.sh +133 -133
- package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/get-conversation-history.sh +121 -121
- package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/qualify-lead.sh +156 -156
- package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/schedule-demo.sh +181 -181
- package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/send-message.sh +137 -137
- package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/transfer-to-human.sh +179 -179
- package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/create-campaign.sh +183 -183
- package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/get-delivery-status.sh +139 -139
- package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/opt-out.sh +150 -150
- package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/schedule-campaign.sh +187 -187
- package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/send-sms.sh +181 -181
- package/claude-assets/cfn-extras/skills/ui-portal/cfn-web-portal/test-web-portal-skill.sh +50 -50
- package/claude-assets/cfn-extras/skills/ui-portal/cfn-web-portal/validate-deployment.sh +84 -84
- package/claude-assets/cfn-extras/skills/utility/cfn-environment-sanitization/sanitize-environment.sh +243 -243
- package/claude-assets/commands/cfn-loop-cli.md +16 -2
- package/claude-assets/commands/switch-api.md +31 -10
- package/claude-assets/hooks/cfn-lint-sql-injection.sh +61 -0
- package/claude-assets/hooks/cfn-post-edit-cfn-retrospective.sh +33 -2
- package/claude-assets/hooks/cfn-pre-edit-security-warning.sh +40 -0
- package/claude-assets/hooks/detect-hardcoded-credentials.sh +212 -0
- package/claude-assets/skills/SKILL_TEMPLATE.md +774 -0
- package/claude-assets/skills/agent-lifecycle/execute-lifecycle-hook.sh +84 -113
- package/claude-assets/skills/agent-lifecycle/simple-audit.sh +33 -6
- package/claude-assets/skills/agent-template-generator/SKILL.md +440 -0
- package/claude-assets/skills/agent-template-generator/generate-agent.sh +405 -0
- package/claude-assets/skills/agent-validation-linter/SKILL.md +589 -0
- package/claude-assets/skills/agent-validation-linter/lint-agents.sh +271 -0
- package/claude-assets/skills/bootstrap/bash-fundamentals.md +786 -0
- package/claude-assets/skills/bootstrap/database-connection.md +464 -0
- package/claude-assets/skills/bootstrap/error-handling.md +580 -0
- package/claude-assets/skills/bootstrap/file-operations.md +699 -0
- package/claude-assets/skills/bootstrap/skill-loader.md +616 -0
- package/claude-assets/skills/bootstrap/sqlite-params.sh +287 -0
- package/claude-assets/skills/cfn-agent-spawning/spawn-agent.sh +22 -24
- package/claude-assets/skills/cfn-automatic-memory-persistence/test-memory-persistence.sh +17 -16
- package/claude-assets/skills/cfn-deployment/SKILL.md +293 -0
- package/claude-assets/skills/cfn-deployment/execute.sh +21 -0
- package/claude-assets/skills/cfn-docker-agent-spawning/SKILL.md +28 -4
- package/claude-assets/skills/cfn-docker-agent-spawning/spawn-agent.sh +3 -1
- package/claude-assets/skills/cfn-docker-loop-orchestration/orchestrate.sh +224 -20
- package/claude-assets/skills/cfn-environment-sanitization/sanitize-environment.sh +38 -0
- package/claude-assets/skills/cfn-error-batching-strategy/lib/core-functions.sh +47 -47
- package/claude-assets/skills/cfn-file-operations/SKILL.md +290 -0
- package/claude-assets/skills/cfn-file-operations/execute.sh +129 -0
- package/claude-assets/skills/cfn-file-operations/lib/atomic-write.sh +294 -0
- package/claude-assets/skills/cfn-file-operations/lib/lock.sh +361 -0
- package/claude-assets/skills/cfn-file-operations/test.sh +369 -0
- package/claude-assets/skills/cfn-log-operations/SKILL.md +308 -0
- package/claude-assets/skills/cfn-log-operations/execute.sh +420 -0
- package/claude-assets/skills/cfn-log-operations/lib/rotate.sh +406 -0
- package/claude-assets/skills/cfn-log-operations/lib/search.sh +448 -0
- package/claude-assets/skills/cfn-log-operations/test.sh +394 -0
- package/claude-assets/skills/cfn-loop-orchestration/helpers/gate-check.sh +550 -46
- package/claude-assets/skills/cfn-loop-orchestration/helpers/parse-test-results.sh +277 -0
- package/claude-assets/skills/cfn-loop-orchestration/orchestrate.sh +184 -23
- package/claude-assets/skills/cfn-loop-orchestration/security_utils.sh +24 -0
- package/claude-assets/skills/cfn-loop-orchestration/test-iteration-context-injection.sh +366 -0
- package/claude-assets/skills/cfn-parameterized-queries/SKILL.md +339 -0
- package/claude-assets/skills/cfn-playbook/query-playbook.sh +19 -15
- package/claude-assets/skills/cfn-playbook/update-playbook.sh +25 -14
- package/claude-assets/skills/cfn-process-instrumentation/instrument-process.sh +44 -0
- package/claude-assets/skills/cfn-promotion/SKILL.md +305 -0
- package/claude-assets/skills/cfn-redis-coordination/CENTRALIZED_REDIS_WRAPPER.md +319 -0
- package/claude-assets/skills/cfn-redis-coordination/agent-log.sh +4 -0
- package/claude-assets/skills/cfn-redis-coordination/agent-log.sh.bak +124 -0
- package/claude-assets/skills/cfn-redis-coordination/agent-recovery.sh +2 -2
- package/claude-assets/skills/cfn-redis-coordination/collect-confidence-scores.sh +30 -0
- package/claude-assets/skills/cfn-redis-coordination/get-context.sh +33 -0
- package/claude-assets/skills/cfn-redis-coordination/get-success-criteria.sh +54 -0
- package/claude-assets/skills/cfn-redis-coordination/invoke-waiting-mode.sh +3 -0
- package/claude-assets/skills/cfn-redis-coordination/redis-cli-wrapper.sh +24 -3
- package/claude-assets/skills/cfn-redis-coordination/redis-functions.sh +33 -0
- package/claude-assets/skills/cfn-redis-coordination/report-completion.sh +24 -31
- package/claude-assets/skills/cfn-redis-coordination/store-context.sh +4 -0
- package/claude-assets/skills/cfn-redis-coordination/store-success-criteria.sh +85 -0
- package/claude-assets/skills/cfn-redis-coordination/update-all-scripts.sh +67 -0
- package/claude-assets/skills/cfn-skill-loader/SKILL.md +466 -0
- package/claude-assets/skills/cfn-skill-loader/execute.sh +344 -0
- package/claude-assets/skills/cfn-sqlite-memory/ttl-cleanup.sh +17 -25
- package/claude-assets/skills/cfn-task-audit/get-audit-data.sh +42 -21
- package/claude-assets/skills/cfn-task-audit/store-task-audit.sh +17 -10
- package/claude-assets/skills/cfn-test-runner/detect-regressions.sh +17 -14
- package/claude-assets/skills/cfn-test-runner/detect-regressions.sh.backup-1763392821 +55 -0
- package/claude-assets/skills/cfn-test-runner/store-benchmarks.sh +17 -19
- package/claude-assets/skills/cfn-transparency-middleware/test-e2e.sh +15 -0
- package/claude-assets/skills/cfn-transparency-middleware/tests/input-validation.sh +15 -0
- package/claude-assets/skills/cfn-utilities/SKILL.md +237 -0
- package/claude-assets/skills/cfn-utilities/execute.sh +32 -0
- package/claude-assets/skills/cfn-utilities/lib/errors.sh +56 -0
- package/claude-assets/skills/cfn-utilities/lib/file-ops.sh +164 -0
- package/claude-assets/skills/cfn-utilities/lib/logging.sh +77 -0
- package/claude-assets/skills/cfn-utilities/lib/retry.sh +127 -0
- package/claude-assets/skills/cfn-utilities/test.sh +317 -0
- package/claude-assets/skills/integration/agent-handoff.sh +62 -64
- package/claude-assets/skills/json-validation/SKILL.md +431 -0
- package/claude-assets/skills/json-validation/test-validate-success-criteria.sh +421 -0
- package/claude-assets/skills/json-validation/validate-success-criteria.sh +197 -0
- package/claude-assets/skills/redis-coordination/validate-parameters.sh +34 -0
- package/claude-assets/skills/workflow-codification/DEPLOY_QUICK_REFERENCE.md +106 -0
- package/claude-assets/skills/workflow-codification/PROPAGATE_UPDATE_QUICK_REFERENCE.md +366 -0
- package/claude-assets/skills/workflow-codification/deploy-approved-skill.sh +481 -0
- package/claude-assets/skills/workflow-codification/deploy-approved-skill.sh.backup-1763392820 +512 -0
- package/claude-assets/skills/workflow-codification/lib/security-utils.sh +204 -0
- package/claude-assets/skills/workflow-codification/propagate-skill-update.sh +648 -0
- package/claude-assets/skills/workflow-codification/propagate-skill-update.sh.backup-1763392820 +664 -0
- package/claude-assets/skills/workflow-codification/test-integration.sh +15 -0
- package/claude-assets/skills/workflow-codification/test-metadata-update.sh +350 -0
- package/claude-assets/skills/workflow-codification/track-cost-savings.sh +55 -14
- package/claude-assets/skills/workflow-codification/track-cost-savings.sh.backup-1763392821 +445 -0
- package/claude-assets/skills/workflow-codification/track-edge-case.sh +27 -60
- package/claude-assets/skills/workflow-codification/workflow-codification.db +0 -0
- package/dist/ace/ace-curator.js +10 -2
- package/dist/ace/ace-curator.js.map +1 -1
- package/dist/ace/ace-generator.js +4 -0
- package/dist/ace/ace-generator.js.map +1 -1
- package/dist/ace/ace-reflector.js +1 -1
- package/dist/ace/ace-reflector.js.map +1 -1
- package/dist/ace/context-injection.js +24 -2
- package/dist/ace/context-injection.js.map +1 -1
- package/dist/agents/agent-loader.js +146 -165
- package/dist/agents/agent-loader.js.map +1 -1
- package/dist/agents/task-agent-integration.js +1 -1
- package/dist/agents/task-agent-integration.js.map +1 -1
- package/dist/api/health-endpoints.js +390 -0
- package/dist/api/health-endpoints.js.map +1 -0
- package/dist/cli/agent-executor.js +4 -1
- package/dist/cli/agent-executor.js.map +1 -1
- package/dist/cli/agent-prompt-builder.js +89 -1
- package/dist/cli/agent-prompt-builder.js.map +1 -1
- package/dist/cli/agent-spawn.js +130 -37
- package/dist/cli/agent-spawn.js.map +1 -1
- package/dist/cli/skill-cache-validator.js +412 -0
- package/dist/cli/skill-cache-validator.js.map +1 -0
- package/dist/cli/skill-cli.js +991 -0
- package/dist/cli/skill-cli.js.map +1 -0
- package/dist/cli/skill-execution-logger.js +284 -0
- package/dist/cli/skill-execution-logger.js.map +1 -0
- package/dist/cli/skill-loader.js +457 -0
- package/dist/cli/skill-loader.js.map +1 -0
- package/dist/coordination/event-bus.js +2 -2
- package/dist/coordination/event-bus.js.map +1 -1
- package/dist/coordination/fleet-manager.js +1 -1
- package/dist/coordination/fleet-manager.js.map +1 -1
- package/dist/coordination/index.js +23 -9
- package/dist/coordination/index.js.map +1 -1
- package/dist/coordination/types/fleet-manager.types.js.map +1 -1
- package/dist/db/migration-manager.js +483 -0
- package/dist/db/migration-manager.js.map +1 -0
- package/dist/db/skills-query.js +535 -0
- package/dist/db/skills-query.js.map +1 -0
- package/dist/integration/DatabaseHandoff.js +1 -1
- package/dist/integration/DatabaseHandoff.js.map +1 -1
- package/dist/jobs/edge-case-analyzer.js +367 -0
- package/dist/jobs/edge-case-analyzer.js.map +1 -0
- package/dist/jobs/promotion-sla-enforcer.js +288 -0
- package/dist/jobs/promotion-sla-enforcer.js.map +1 -0
- package/dist/lib/agent-output-parser.js.map +1 -1
- package/dist/lib/agent-output-validator.js.map +1 -1
- package/dist/lib/agent-workspace.js +281 -0
- package/dist/lib/agent-workspace.js.map +1 -0
- package/dist/lib/atomic-file-writer.js +377 -0
- package/dist/lib/atomic-file-writer.js.map +1 -0
- package/dist/lib/backup-manager.js +779 -0
- package/dist/lib/backup-manager.js.map +1 -0
- package/dist/lib/checkpoint-manager.js +837 -0
- package/dist/lib/checkpoint-manager.js.map +1 -0
- package/dist/lib/circuit-breaker.js +340 -0
- package/dist/lib/circuit-breaker.js.map +1 -0
- package/dist/lib/completion-signal-handler.js +243 -0
- package/dist/lib/completion-signal-handler.js.map +1 -0
- package/dist/lib/config-manager.js +312 -0
- package/dist/lib/config-manager.js.map +1 -0
- package/dist/lib/config-migrator.js +386 -0
- package/dist/lib/config-migrator.js.map +1 -0
- package/dist/lib/config-validator.js.map +1 -1
- package/dist/lib/correlation-cache.js +311 -0
- package/dist/lib/correlation-cache.js.map +1 -0
- package/dist/lib/correlation.js +263 -0
- package/dist/lib/correlation.js.map +1 -0
- package/dist/lib/database-service/connection-pool-manager.js +520 -0
- package/dist/lib/database-service/connection-pool-manager.js.map +1 -0
- package/dist/lib/database-service/correlation.js +329 -0
- package/dist/lib/database-service/correlation.js.map +1 -0
- package/dist/lib/database-service/errors.js +120 -0
- package/dist/lib/database-service/errors.js.map +1 -0
- package/dist/lib/database-service/index.js +168 -0
- package/dist/lib/database-service/index.js.map +1 -0
- package/dist/lib/database-service/postgres-adapter.js +526 -0
- package/dist/lib/database-service/postgres-adapter.js.map +1 -0
- package/dist/lib/database-service/redis-adapter.js +360 -0
- package/dist/lib/database-service/redis-adapter.js.map +1 -0
- package/dist/lib/database-service/sqlite-adapter.js +544 -0
- package/dist/lib/database-service/sqlite-adapter.js.map +1 -0
- package/dist/lib/database-service/transaction-manager.js +773 -0
- package/dist/lib/database-service/transaction-manager.js.map +1 -0
- package/dist/lib/database-service/types.js +23 -0
- package/dist/lib/database-service/types.js.map +1 -0
- package/dist/lib/deadlock-resolver.js +292 -0
- package/dist/lib/deadlock-resolver.js.map +1 -0
- package/dist/lib/distributed-lock.js +451 -0
- package/dist/lib/distributed-lock.js.map +1 -0
- package/dist/lib/edge-case-deduplicator.js +227 -0
- package/dist/lib/edge-case-deduplicator.js.map +1 -0
- package/dist/lib/encryption-manager.js +322 -0
- package/dist/lib/encryption-manager.js.map +1 -0
- package/dist/lib/error-aggregator.js +234 -0
- package/dist/lib/error-aggregator.js.map +1 -0
- package/dist/lib/errors.js +287 -0
- package/dist/lib/errors.js.map +1 -0
- package/dist/lib/file-lock-manager.js +578 -0
- package/dist/lib/file-lock-manager.js.map +1 -0
- package/dist/lib/file-operations.js +367 -0
- package/dist/lib/file-operations.js.map +1 -0
- package/dist/lib/idempotent-write.js +237 -0
- package/dist/lib/idempotent-write.js.map +1 -0
- package/dist/lib/integration-schema-validator.js +522 -0
- package/dist/lib/integration-schema-validator.js.map +1 -0
- package/dist/lib/lock-health-monitor.js +298 -0
- package/dist/lib/lock-health-monitor.js.map +1 -0
- package/dist/lib/log-shipper.js +422 -0
- package/dist/lib/log-shipper.js.map +1 -0
- package/dist/lib/logging.js +146 -0
- package/dist/lib/logging.js.map +1 -0
- package/dist/lib/message-deduplicator.js +439 -0
- package/dist/lib/message-deduplicator.js.map +1 -0
- package/dist/lib/multi-system-query.js +604 -0
- package/dist/lib/multi-system-query.js.map +1 -0
- package/dist/lib/orphan-detector.js +332 -0
- package/dist/lib/orphan-detector.js.map +1 -0
- package/dist/lib/password-generator.js +166 -0
- package/dist/lib/password-generator.js.map +1 -0
- package/dist/lib/path-validator.js +429 -0
- package/dist/lib/path-validator.js.map +1 -0
- package/dist/lib/query-translator.js +905 -0
- package/dist/lib/query-translator.js.map +1 -0
- package/dist/lib/queue-recovery.js +469 -0
- package/dist/lib/queue-recovery.js.map +1 -0
- package/dist/lib/redis-queue-manager.js +512 -0
- package/dist/lib/redis-queue-manager.js.map +1 -0
- package/dist/lib/reflection-archiver.js +272 -0
- package/dist/lib/reflection-archiver.js.map +1 -0
- package/dist/lib/retry-manager.js +453 -0
- package/dist/lib/retry-manager.js.map +1 -0
- package/dist/lib/retry.js +262 -0
- package/dist/lib/retry.js.map +1 -0
- package/dist/lib/schema-transform.js +695 -0
- package/dist/lib/schema-transform.js.map +1 -0
- package/dist/lib/schema-validator.js +491 -0
- package/dist/lib/schema-validator.js.map +1 -0
- package/dist/lib/skill-cache.js +297 -0
- package/dist/lib/skill-cache.js.map +1 -0
- package/dist/lib/skill-content-manager.js +337 -0
- package/dist/lib/skill-content-manager.js.map +1 -0
- package/dist/lib/skill-frontmatter-parser.js +237 -0
- package/dist/lib/skill-frontmatter-parser.js.map +1 -0
- package/dist/lib/skill-git-integration.js +275 -0
- package/dist/lib/skill-git-integration.js.map +1 -0
- package/dist/lib/skill-markdown-validator.js +396 -0
- package/dist/lib/skill-markdown-validator.js.map +1 -0
- package/dist/lib/skill-output-parser.js +312 -0
- package/dist/lib/skill-output-parser.js.map +1 -0
- package/dist/lib/unified-query-api.js +467 -0
- package/dist/lib/unified-query-api.js.map +1 -0
- package/dist/middleware/auth-middleware.js +350 -0
- package/dist/middleware/auth-middleware.js.map +1 -0
- package/dist/middleware/schema-validation.js +347 -0
- package/dist/middleware/schema-validation.js.map +1 -0
- package/dist/providers/anthropic-provider.js +1 -1
- package/dist/providers/anthropic-provider.js.map +1 -1
- package/dist/providers/provider-factory.js +2 -2
- package/dist/providers/provider-factory.js.map +1 -1
- package/dist/services/edge-case-analyzer.js +321 -0
- package/dist/services/edge-case-analyzer.js.map +1 -0
- package/dist/services/edge-case-deduplicator.js +266 -0
- package/dist/services/edge-case-deduplicator.js.map +1 -0
- package/dist/services/edge-case-detector.js +337 -0
- package/dist/services/edge-case-detector.js.map +1 -0
- package/dist/services/edge-case-tracker.js +547 -0
- package/dist/services/edge-case-tracker.js.map +1 -0
- package/dist/services/health-check-system.js +586 -0
- package/dist/services/health-check-system.js.map +1 -0
- package/dist/services/metrics-logger.js +412 -0
- package/dist/services/metrics-logger.js.map +1 -0
- package/dist/services/patch-generator.js +378 -0
- package/dist/services/patch-generator.js.map +1 -0
- package/dist/services/patch-validator.js +337 -0
- package/dist/services/patch-validator.js.map +1 -0
- package/dist/services/performance-monitor.js +811 -0
- package/dist/services/performance-monitor.js.map +1 -0
- package/dist/services/promotion-pipeline.js +918 -0
- package/dist/services/promotion-pipeline.js.map +1 -0
- package/dist/services/promotion-validator.js +394 -0
- package/dist/services/promotion-validator.js.map +1 -0
- package/dist/services/reflection-logger.js +388 -0
- package/dist/services/reflection-logger.js.map +1 -0
- package/dist/services/skill-deployment.js +472 -0
- package/dist/services/skill-deployment.js.map +1 -0
- package/dist/services/skill-loader.js +427 -0
- package/dist/services/skill-loader.js.map +1 -0
- package/dist/services/skill-promotion.js +372 -0
- package/dist/services/skill-promotion.js.map +1 -0
- package/dist/services/skill-validator.js +454 -0
- package/dist/services/skill-validator.js.map +1 -0
- package/dist/services/skill-versioning.js +244 -0
- package/dist/services/skill-versioning.js.map +1 -0
- package/dist/services/workspace-supervisor.js +597 -0
- package/dist/services/workspace-supervisor.js.map +1 -0
- package/dist/types/edge-case.js +45 -0
- package/dist/types/edge-case.js.map +1 -0
- package/package.json +201 -177
- package/readme/README.md +19 -4
- package/scripts/backup-cleanup.sh +627 -0
- package/scripts/cleanup-workspaces.sh +412 -0
- package/scripts/cleanup-yaml-configs.sh +141 -0
- package/scripts/deploy-approved-skills.sh +263 -0
- package/scripts/health-check.sh +447 -0
- package/scripts/log-aggregator.sh +554 -0
- package/scripts/log-monitor.sh +629 -0
- package/scripts/manage-agent-workspaces.sh +434 -0
- package/scripts/migrate-schema.sh +533 -0
- package/scripts/promote-staged-skills.sh +423 -0
- package/scripts/verify-no-secrets.sh +88 -35
- package/.claude/cfn-extras/agents/deprecated-coordinators/adaptive-coordinator.md.backup +0 -161
- package/.claude/cfn-extras/agents/deprecated-coordinators/blocking-coordinator-example.md.backup +0 -728
- package/.claude/cfn-extras/agents/deprecated-coordinators/mesh-coordinator.md.backup +0 -131
- package/.claude/skills/agent-lifecycle/SKILL.md +0 -60
- package/.claude/skills/agent-lifecycle/execute-lifecycle-hook.sh +0 -573
- package/.claude/skills/agent-lifecycle/simple-audit.sh +0 -31
- package/.claude/skills/cfn-agent-spawning/spawn-agent.sh.backup +0 -273
- package/.claude/skills/cfn-loop-orchestration/orchestrate.sh.backup +0 -949
- package/README.md.backup_before_replace +0 -781
- package/claude-assets/cfn-extras/agents/deprecated-coordinators/adaptive-coordinator.md.backup +0 -161
- package/claude-assets/cfn-extras/agents/deprecated-coordinators/blocking-coordinator-example.md.backup +0 -728
- package/claude-assets/cfn-extras/agents/deprecated-coordinators/mesh-coordinator.md.backup +0 -131
- package/claude-assets/skills/cfn-agent-spawning/spawn-agent.sh.backup +0 -273
- package/claude-assets/skills/cfn-loop-orchestration/orchestrate.sh.backup +0 -949
|
@@ -0,0 +1,312 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Skill Output Parser
|
|
3
|
+
* Task 5.4: Eliminate Bash Output Parsing
|
|
4
|
+
*
|
|
5
|
+
* Parses structured JSON outputs from skill execution with legacy text fallback
|
|
6
|
+
*
|
|
7
|
+
* @version 1.0.0
|
|
8
|
+
*/ // ============================================================================
|
|
9
|
+
// Parser Class
|
|
10
|
+
// ============================================================================
|
|
11
|
+
/**
|
|
12
|
+
* SkillOutputParser: Parses skill execution outputs
|
|
13
|
+
*
|
|
14
|
+
* Primary path: JSON parsing with schema validation
|
|
15
|
+
* Fallback path: Legacy text parsing
|
|
16
|
+
*/ export class SkillOutputParser {
|
|
17
|
+
config;
|
|
18
|
+
constructor(config = {}){
|
|
19
|
+
this.config = {
|
|
20
|
+
enableLegacyParsing: config.enableLegacyParsing ?? true,
|
|
21
|
+
defaultConfidence: config.defaultConfidence ?? 0.5,
|
|
22
|
+
strictValidation: config.strictValidation ?? false
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
// ==========================================================================
|
|
26
|
+
// Public API
|
|
27
|
+
// ==========================================================================
|
|
28
|
+
/**
|
|
29
|
+
* Parse skill output (JSON or legacy text)
|
|
30
|
+
*
|
|
31
|
+
* @param output - Raw skill output string
|
|
32
|
+
* @returns Parse result
|
|
33
|
+
*/ parse(output) {
|
|
34
|
+
const errors = [];
|
|
35
|
+
const warnings = [];
|
|
36
|
+
// Handle empty input
|
|
37
|
+
if (!output || output.trim().length === 0) {
|
|
38
|
+
warnings.push('Empty input received');
|
|
39
|
+
return this.createLegacyParseResult(output, warnings);
|
|
40
|
+
}
|
|
41
|
+
// Try JSON parsing first
|
|
42
|
+
const jsonResult = this.tryParseJSON(output);
|
|
43
|
+
if (jsonResult.success && jsonResult.data) {
|
|
44
|
+
// Validate JSON schema
|
|
45
|
+
const validationResult = this.validateSkillOutput(jsonResult.data);
|
|
46
|
+
if (validationResult.valid) {
|
|
47
|
+
return {
|
|
48
|
+
success: true,
|
|
49
|
+
output: jsonResult.data,
|
|
50
|
+
parseMethod: 'json',
|
|
51
|
+
confidence: 0.95,
|
|
52
|
+
errors: [],
|
|
53
|
+
warnings: this.config.strictValidation ? validationResult.warnings : []
|
|
54
|
+
};
|
|
55
|
+
} else {
|
|
56
|
+
// JSON parsed but validation failed - don't fall back to legacy
|
|
57
|
+
// because JSON structure exists, it's just invalid
|
|
58
|
+
errors.push(...validationResult.errors);
|
|
59
|
+
return {
|
|
60
|
+
success: false,
|
|
61
|
+
output: this.createDefaultOutput(),
|
|
62
|
+
parseMethod: 'validation_failed',
|
|
63
|
+
confidence: 0.0,
|
|
64
|
+
errors,
|
|
65
|
+
warnings
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
// JSON parsing failed
|
|
70
|
+
if (this.config.enableLegacyParsing) {
|
|
71
|
+
warnings.push('Using legacy text parsing (consider migrating to JSON output)');
|
|
72
|
+
return this.createLegacyParseResult(output, warnings);
|
|
73
|
+
} else {
|
|
74
|
+
errors.push('JSON parsing failed and legacy parsing disabled');
|
|
75
|
+
return {
|
|
76
|
+
success: false,
|
|
77
|
+
output: this.createDefaultOutput(),
|
|
78
|
+
parseMethod: 'validation_failed',
|
|
79
|
+
confidence: 0.0,
|
|
80
|
+
errors,
|
|
81
|
+
warnings
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Parse multiple skill outputs in batch
|
|
87
|
+
*
|
|
88
|
+
* @param outputs - Array of raw skill output strings
|
|
89
|
+
* @returns Array of parse results
|
|
90
|
+
*/ parseBatch(outputs) {
|
|
91
|
+
return outputs.map((output)=>this.parse(output));
|
|
92
|
+
}
|
|
93
|
+
// ==========================================================================
|
|
94
|
+
// JSON Parsing
|
|
95
|
+
// ==========================================================================
|
|
96
|
+
/**
|
|
97
|
+
* Try to parse output as JSON
|
|
98
|
+
*
|
|
99
|
+
* @param output - Raw output string
|
|
100
|
+
* @returns Parse result with success flag and data
|
|
101
|
+
*/ tryParseJSON(output) {
|
|
102
|
+
try {
|
|
103
|
+
// Try to extract JSON from mixed output
|
|
104
|
+
const jsonMatch = output.match(/\{[\s\S]*\}/);
|
|
105
|
+
if (jsonMatch) {
|
|
106
|
+
const data = JSON.parse(jsonMatch[0]);
|
|
107
|
+
return {
|
|
108
|
+
success: true,
|
|
109
|
+
data
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
// Try parsing entire output
|
|
113
|
+
const data = JSON.parse(output);
|
|
114
|
+
return {
|
|
115
|
+
success: true,
|
|
116
|
+
data
|
|
117
|
+
};
|
|
118
|
+
} catch (error) {
|
|
119
|
+
return {
|
|
120
|
+
success: false
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Validate skill output against schema
|
|
126
|
+
*
|
|
127
|
+
* @param data - Parsed JSON data
|
|
128
|
+
* @returns Validation result
|
|
129
|
+
*/ validateSkillOutput(data) {
|
|
130
|
+
const errors = [];
|
|
131
|
+
const warnings = [];
|
|
132
|
+
// Required fields
|
|
133
|
+
if (typeof data.success !== 'boolean') {
|
|
134
|
+
errors.push('Missing required field: success (must be boolean)');
|
|
135
|
+
}
|
|
136
|
+
if (typeof data.confidence !== 'number') {
|
|
137
|
+
errors.push('Missing required field: confidence (must be number)');
|
|
138
|
+
} else if (data.confidence < 0.0 || data.confidence > 1.0) {
|
|
139
|
+
errors.push('Confidence must be between 0.0 and 1.0');
|
|
140
|
+
}
|
|
141
|
+
if (!Array.isArray(data.deliverables)) {
|
|
142
|
+
errors.push('Deliverables must be an array');
|
|
143
|
+
}
|
|
144
|
+
if (typeof data.metrics !== 'object' || data.metrics === null || Array.isArray(data.metrics)) {
|
|
145
|
+
errors.push('Metrics must be an object');
|
|
146
|
+
}
|
|
147
|
+
if (!Array.isArray(data.errors)) {
|
|
148
|
+
errors.push('Errors must be an array');
|
|
149
|
+
}
|
|
150
|
+
// Strict mode: check for unexpected fields
|
|
151
|
+
if (this.config.strictValidation) {
|
|
152
|
+
const allowedFields = new Set([
|
|
153
|
+
'success',
|
|
154
|
+
'confidence',
|
|
155
|
+
'deliverables',
|
|
156
|
+
'metrics',
|
|
157
|
+
'errors'
|
|
158
|
+
]);
|
|
159
|
+
const actualFields = Object.keys(data);
|
|
160
|
+
const unexpectedFields = actualFields.filter((field)=>!allowedFields.has(field));
|
|
161
|
+
if (unexpectedFields.length > 0) {
|
|
162
|
+
warnings.push(`Unexpected fields in output: ${unexpectedFields.join(', ')}`);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
return {
|
|
166
|
+
valid: errors.length === 0,
|
|
167
|
+
errors,
|
|
168
|
+
warnings
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
// ==========================================================================
|
|
172
|
+
// Legacy Parsing
|
|
173
|
+
// ==========================================================================
|
|
174
|
+
/**
|
|
175
|
+
* Parse legacy text output
|
|
176
|
+
*
|
|
177
|
+
* @param output - Raw text output
|
|
178
|
+
* @param warnings - Existing warnings to include
|
|
179
|
+
* @returns Parse result
|
|
180
|
+
*/ createLegacyParseResult(output, warnings = []) {
|
|
181
|
+
// Special handling for empty input
|
|
182
|
+
const isEmpty = !output || output.trim().length === 0;
|
|
183
|
+
const parsedOutput = {
|
|
184
|
+
success: isEmpty ? false : this.detectSuccess(output),
|
|
185
|
+
confidence: isEmpty ? 0.0 : this.extractConfidence(output),
|
|
186
|
+
deliverables: this.extractDeliverables(output),
|
|
187
|
+
metrics: this.extractMetrics(output),
|
|
188
|
+
errors: this.extractErrors(output)
|
|
189
|
+
};
|
|
190
|
+
return {
|
|
191
|
+
success: true,
|
|
192
|
+
output: parsedOutput,
|
|
193
|
+
parseMethod: 'legacy',
|
|
194
|
+
confidence: parsedOutput.confidence,
|
|
195
|
+
errors: [],
|
|
196
|
+
warnings
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Detect success from text patterns
|
|
201
|
+
*/ detectSuccess(output) {
|
|
202
|
+
const successPatterns = [
|
|
203
|
+
/SUCCESS/i,
|
|
204
|
+
/complete(d)?/i,
|
|
205
|
+
/passed/i,
|
|
206
|
+
/\[OK\]/i,
|
|
207
|
+
/✓/
|
|
208
|
+
];
|
|
209
|
+
const failurePatterns = [
|
|
210
|
+
/ERROR/i,
|
|
211
|
+
/FAILED/i,
|
|
212
|
+
/ABORT/i,
|
|
213
|
+
/\[FAIL\]/i,
|
|
214
|
+
/✗/
|
|
215
|
+
];
|
|
216
|
+
// Check for explicit failure first
|
|
217
|
+
for (const pattern of failurePatterns){
|
|
218
|
+
if (pattern.test(output)) {
|
|
219
|
+
return false;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
// Check for success patterns
|
|
223
|
+
for (const pattern of successPatterns){
|
|
224
|
+
if (pattern.test(output)) {
|
|
225
|
+
return true;
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
// Default: assume success if no clear failure
|
|
229
|
+
return output.trim().length > 0;
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Extract confidence from text
|
|
233
|
+
*/ extractConfidence(output) {
|
|
234
|
+
// Look for explicit confidence marker
|
|
235
|
+
const confidenceMatch = output.match(/confidence:?\s*(0?\.\d+|1\.0|0|1)/i);
|
|
236
|
+
if (confidenceMatch) {
|
|
237
|
+
return parseFloat(confidenceMatch[1]);
|
|
238
|
+
}
|
|
239
|
+
// Return default confidence
|
|
240
|
+
return this.config.defaultConfidence;
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* Extract deliverables from text
|
|
244
|
+
*/ extractDeliverables(output) {
|
|
245
|
+
const deliverables = [];
|
|
246
|
+
// Look for file patterns
|
|
247
|
+
const patterns = [
|
|
248
|
+
/(?:created|modified|updated|generated):?\s+([^\s\n]+)/gi,
|
|
249
|
+
/(?:file|path):?\s+([^\s\n]+)/gi
|
|
250
|
+
];
|
|
251
|
+
for (const pattern of patterns){
|
|
252
|
+
let match;
|
|
253
|
+
while((match = pattern.exec(output)) !== null){
|
|
254
|
+
const file = match[1].trim();
|
|
255
|
+
if (file && !deliverables.includes(file)) {
|
|
256
|
+
deliverables.push(file);
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
return deliverables;
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Extract metrics from text
|
|
264
|
+
*/ extractMetrics(output) {
|
|
265
|
+
const metrics = {};
|
|
266
|
+
// Extract execution time
|
|
267
|
+
const timeMatch = output.match(/(?:execution\s+time|duration|took):?\s*(\d+)\s*ms/i);
|
|
268
|
+
if (timeMatch) {
|
|
269
|
+
metrics.execution_time_ms = parseInt(timeMatch[1], 10);
|
|
270
|
+
}
|
|
271
|
+
// Extract file count
|
|
272
|
+
const fileCountMatch = output.match(/(?:modified|created|updated)\s+(\d+)\s+files?/i);
|
|
273
|
+
if (fileCountMatch) {
|
|
274
|
+
metrics.files_modified = parseInt(fileCountMatch[1], 10);
|
|
275
|
+
}
|
|
276
|
+
return metrics;
|
|
277
|
+
}
|
|
278
|
+
/**
|
|
279
|
+
* Extract errors from text
|
|
280
|
+
*/ extractErrors(output) {
|
|
281
|
+
const errors = [];
|
|
282
|
+
// Look for error patterns
|
|
283
|
+
const errorMatches = output.matchAll(/ERROR:?\s*([^\n]+)/gi);
|
|
284
|
+
for (const match of errorMatches){
|
|
285
|
+
errors.push({
|
|
286
|
+
code: 'LEGACY_ERROR',
|
|
287
|
+
message: match[1].trim()
|
|
288
|
+
});
|
|
289
|
+
}
|
|
290
|
+
return errors;
|
|
291
|
+
}
|
|
292
|
+
// ==========================================================================
|
|
293
|
+
// Utilities
|
|
294
|
+
// ==========================================================================
|
|
295
|
+
/**
|
|
296
|
+
* Create default empty output
|
|
297
|
+
*/ createDefaultOutput() {
|
|
298
|
+
return {
|
|
299
|
+
success: false,
|
|
300
|
+
confidence: 0.0,
|
|
301
|
+
deliverables: [],
|
|
302
|
+
metrics: {},
|
|
303
|
+
errors: []
|
|
304
|
+
};
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
// ============================================================================
|
|
308
|
+
// Exports
|
|
309
|
+
// ============================================================================
|
|
310
|
+
export default SkillOutputParser;
|
|
311
|
+
|
|
312
|
+
//# sourceMappingURL=skill-output-parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/lib/skill-output-parser.ts"],"sourcesContent":["/**\r\n * Skill Output Parser\r\n * Task 5.4: Eliminate Bash Output Parsing\r\n *\r\n * Parses structured JSON outputs from skill execution with legacy text fallback\r\n *\r\n * @version 1.0.0\r\n */\r\n\r\nimport { ErrorCode, createError, createValidationError } from './errors.js';\r\n\r\n// ============================================================================\r\n// Types\r\n// ============================================================================\r\n\r\n/**\r\n * Skill execution output (structured JSON format)\r\n */\r\nexport interface SkillOutput {\r\n /** Whether skill execution was successful */\r\n success: boolean;\r\n\r\n /** Confidence score (0.0-1.0) */\r\n confidence: number;\r\n\r\n /** Files created or modified */\r\n deliverables: string[];\r\n\r\n /** Execution metrics */\r\n metrics: SkillMetrics;\r\n\r\n /** Errors encountered during execution */\r\n errors: SkillError[];\r\n}\r\n\r\n/**\r\n * Skill execution metrics\r\n */\r\nexport interface SkillMetrics {\r\n /** Execution time in milliseconds */\r\n execution_time_ms?: number;\r\n\r\n /** Number of files modified */\r\n files_modified?: number;\r\n\r\n /** Additional custom metrics */\r\n [key: string]: number | undefined;\r\n}\r\n\r\n/**\r\n * Skill execution error\r\n */\r\nexport interface SkillError {\r\n /** Error code */\r\n code: string;\r\n\r\n /** Error message */\r\n message: string;\r\n\r\n /** Error stack trace (optional) */\r\n stack?: string;\r\n\r\n /** Additional error context */\r\n context?: Record<string, any>;\r\n}\r\n\r\n/**\r\n * Skill output parse result\r\n */\r\nexport interface SkillParseResult {\r\n /** Whether parsing was successful */\r\n success: boolean;\r\n\r\n /** Parsed skill output */\r\n output: SkillOutput;\r\n\r\n /** Parse method used: json | legacy | validation_failed */\r\n parseMethod: 'json' | 'legacy' | 'validation_failed';\r\n\r\n /** Parsing confidence (0.0-1.0) */\r\n confidence: number;\r\n\r\n /** Parsing errors */\r\n errors: string[];\r\n\r\n /** Parsing warnings */\r\n warnings: string[];\r\n}\r\n\r\n/**\r\n * Parser configuration\r\n */\r\nexport interface SkillOutputParserConfig {\r\n /** Enable legacy text parsing fallback (default: true) */\r\n enableLegacyParsing?: boolean;\r\n\r\n /** Default confidence for legacy parsing (default: 0.5) */\r\n defaultConfidence?: number;\r\n\r\n /** Enable strict validation mode (default: false) */\r\n strictValidation?: boolean;\r\n}\r\n\r\n// ============================================================================\r\n// Parser Class\r\n// ============================================================================\r\n\r\n/**\r\n * SkillOutputParser: Parses skill execution outputs\r\n *\r\n * Primary path: JSON parsing with schema validation\r\n * Fallback path: Legacy text parsing\r\n */\r\nexport class SkillOutputParser {\r\n private config: Required<SkillOutputParserConfig>;\r\n\r\n constructor(config: SkillOutputParserConfig = {}) {\r\n this.config = {\r\n enableLegacyParsing: config.enableLegacyParsing ?? true,\r\n defaultConfidence: config.defaultConfidence ?? 0.5,\r\n strictValidation: config.strictValidation ?? false,\r\n };\r\n }\r\n\r\n // ==========================================================================\r\n // Public API\r\n // ==========================================================================\r\n\r\n /**\r\n * Parse skill output (JSON or legacy text)\r\n *\r\n * @param output - Raw skill output string\r\n * @returns Parse result\r\n */\r\n public parse(output: string): SkillParseResult {\r\n const errors: string[] = [];\r\n const warnings: string[] = [];\r\n\r\n // Handle empty input\r\n if (!output || output.trim().length === 0) {\r\n warnings.push('Empty input received');\r\n return this.createLegacyParseResult(output, warnings);\r\n }\r\n\r\n // Try JSON parsing first\r\n const jsonResult = this.tryParseJSON(output);\r\n if (jsonResult.success && jsonResult.data) {\r\n // Validate JSON schema\r\n const validationResult = this.validateSkillOutput(jsonResult.data);\r\n\r\n if (validationResult.valid) {\r\n return {\r\n success: true,\r\n output: jsonResult.data,\r\n parseMethod: 'json',\r\n confidence: 0.95, // High confidence for valid JSON\r\n errors: [],\r\n warnings: this.config.strictValidation ? validationResult.warnings : [],\r\n };\r\n } else {\r\n // JSON parsed but validation failed - don't fall back to legacy\r\n // because JSON structure exists, it's just invalid\r\n errors.push(...validationResult.errors);\r\n return {\r\n success: false,\r\n output: this.createDefaultOutput(),\r\n parseMethod: 'validation_failed',\r\n confidence: 0.0,\r\n errors,\r\n warnings,\r\n };\r\n }\r\n }\r\n\r\n // JSON parsing failed\r\n if (this.config.enableLegacyParsing) {\r\n warnings.push('Using legacy text parsing (consider migrating to JSON output)');\r\n return this.createLegacyParseResult(output, warnings);\r\n } else {\r\n errors.push('JSON parsing failed and legacy parsing disabled');\r\n return {\r\n success: false,\r\n output: this.createDefaultOutput(),\r\n parseMethod: 'validation_failed',\r\n confidence: 0.0,\r\n errors,\r\n warnings,\r\n };\r\n }\r\n }\r\n\r\n /**\r\n * Parse multiple skill outputs in batch\r\n *\r\n * @param outputs - Array of raw skill output strings\r\n * @returns Array of parse results\r\n */\r\n public parseBatch(outputs: string[]): SkillParseResult[] {\r\n return outputs.map((output) => this.parse(output));\r\n }\r\n\r\n // ==========================================================================\r\n // JSON Parsing\r\n // ==========================================================================\r\n\r\n /**\r\n * Try to parse output as JSON\r\n *\r\n * @param output - Raw output string\r\n * @returns Parse result with success flag and data\r\n */\r\n private tryParseJSON(output: string): { success: boolean; data?: any } {\r\n try {\r\n // Try to extract JSON from mixed output\r\n const jsonMatch = output.match(/\\{[\\s\\S]*\\}/);\r\n if (jsonMatch) {\r\n const data = JSON.parse(jsonMatch[0]);\r\n return { success: true, data };\r\n }\r\n\r\n // Try parsing entire output\r\n const data = JSON.parse(output);\r\n return { success: true, data };\r\n } catch (error) {\r\n return { success: false };\r\n }\r\n }\r\n\r\n /**\r\n * Validate skill output against schema\r\n *\r\n * @param data - Parsed JSON data\r\n * @returns Validation result\r\n */\r\n private validateSkillOutput(data: any): {\r\n valid: boolean;\r\n errors: string[];\r\n warnings: string[];\r\n } {\r\n const errors: string[] = [];\r\n const warnings: string[] = [];\r\n\r\n // Required fields\r\n if (typeof data.success !== 'boolean') {\r\n errors.push('Missing required field: success (must be boolean)');\r\n }\r\n\r\n if (typeof data.confidence !== 'number') {\r\n errors.push('Missing required field: confidence (must be number)');\r\n } else if (data.confidence < 0.0 || data.confidence > 1.0) {\r\n errors.push('Confidence must be between 0.0 and 1.0');\r\n }\r\n\r\n if (!Array.isArray(data.deliverables)) {\r\n errors.push('Deliverables must be an array');\r\n }\r\n\r\n if (typeof data.metrics !== 'object' || data.metrics === null || Array.isArray(data.metrics)) {\r\n errors.push('Metrics must be an object');\r\n }\r\n\r\n if (!Array.isArray(data.errors)) {\r\n errors.push('Errors must be an array');\r\n }\r\n\r\n // Strict mode: check for unexpected fields\r\n if (this.config.strictValidation) {\r\n const allowedFields = new Set(['success', 'confidence', 'deliverables', 'metrics', 'errors']);\r\n const actualFields = Object.keys(data);\r\n const unexpectedFields = actualFields.filter((field) => !allowedFields.has(field));\r\n\r\n if (unexpectedFields.length > 0) {\r\n warnings.push(`Unexpected fields in output: ${unexpectedFields.join(', ')}`);\r\n }\r\n }\r\n\r\n return {\r\n valid: errors.length === 0,\r\n errors,\r\n warnings,\r\n };\r\n }\r\n\r\n // ==========================================================================\r\n // Legacy Parsing\r\n // ==========================================================================\r\n\r\n /**\r\n * Parse legacy text output\r\n *\r\n * @param output - Raw text output\r\n * @param warnings - Existing warnings to include\r\n * @returns Parse result\r\n */\r\n private createLegacyParseResult(output: string, warnings: string[] = []): SkillParseResult {\r\n // Special handling for empty input\r\n const isEmpty = !output || output.trim().length === 0;\r\n\r\n const parsedOutput: SkillOutput = {\r\n success: isEmpty ? false : this.detectSuccess(output),\r\n confidence: isEmpty ? 0.0 : this.extractConfidence(output),\r\n deliverables: this.extractDeliverables(output),\r\n metrics: this.extractMetrics(output),\r\n errors: this.extractErrors(output),\r\n };\r\n\r\n return {\r\n success: true,\r\n output: parsedOutput,\r\n parseMethod: 'legacy',\r\n confidence: parsedOutput.confidence,\r\n errors: [],\r\n warnings,\r\n };\r\n }\r\n\r\n /**\r\n * Detect success from text patterns\r\n */\r\n private detectSuccess(output: string): boolean {\r\n const successPatterns = [\r\n /SUCCESS/i,\r\n /complete(d)?/i,\r\n /passed/i,\r\n /\\[OK\\]/i,\r\n /✓/,\r\n ];\r\n\r\n const failurePatterns = [\r\n /ERROR/i,\r\n /FAILED/i,\r\n /ABORT/i,\r\n /\\[FAIL\\]/i,\r\n /✗/,\r\n ];\r\n\r\n // Check for explicit failure first\r\n for (const pattern of failurePatterns) {\r\n if (pattern.test(output)) {\r\n return false;\r\n }\r\n }\r\n\r\n // Check for success patterns\r\n for (const pattern of successPatterns) {\r\n if (pattern.test(output)) {\r\n return true;\r\n }\r\n }\r\n\r\n // Default: assume success if no clear failure\r\n return output.trim().length > 0;\r\n }\r\n\r\n /**\r\n * Extract confidence from text\r\n */\r\n private extractConfidence(output: string): number {\r\n // Look for explicit confidence marker\r\n const confidenceMatch = output.match(/confidence:?\\s*(0?\\.\\d+|1\\.0|0|1)/i);\r\n if (confidenceMatch) {\r\n return parseFloat(confidenceMatch[1]);\r\n }\r\n\r\n // Return default confidence\r\n return this.config.defaultConfidence;\r\n }\r\n\r\n /**\r\n * Extract deliverables from text\r\n */\r\n private extractDeliverables(output: string): string[] {\r\n const deliverables: string[] = [];\r\n\r\n // Look for file patterns\r\n const patterns = [\r\n /(?:created|modified|updated|generated):?\\s+([^\\s\\n]+)/gi,\r\n /(?:file|path):?\\s+([^\\s\\n]+)/gi,\r\n ];\r\n\r\n for (const pattern of patterns) {\r\n let match;\r\n while ((match = pattern.exec(output)) !== null) {\r\n const file = match[1].trim();\r\n if (file && !deliverables.includes(file)) {\r\n deliverables.push(file);\r\n }\r\n }\r\n }\r\n\r\n return deliverables;\r\n }\r\n\r\n /**\r\n * Extract metrics from text\r\n */\r\n private extractMetrics(output: string): SkillMetrics {\r\n const metrics: SkillMetrics = {};\r\n\r\n // Extract execution time\r\n const timeMatch = output.match(/(?:execution\\s+time|duration|took):?\\s*(\\d+)\\s*ms/i);\r\n if (timeMatch) {\r\n metrics.execution_time_ms = parseInt(timeMatch[1], 10);\r\n }\r\n\r\n // Extract file count\r\n const fileCountMatch = output.match(/(?:modified|created|updated)\\s+(\\d+)\\s+files?/i);\r\n if (fileCountMatch) {\r\n metrics.files_modified = parseInt(fileCountMatch[1], 10);\r\n }\r\n\r\n return metrics;\r\n }\r\n\r\n /**\r\n * Extract errors from text\r\n */\r\n private extractErrors(output: string): SkillError[] {\r\n const errors: SkillError[] = [];\r\n\r\n // Look for error patterns\r\n const errorMatches = output.matchAll(/ERROR:?\\s*([^\\n]+)/gi);\r\n for (const match of errorMatches) {\r\n errors.push({\r\n code: 'LEGACY_ERROR',\r\n message: match[1].trim(),\r\n });\r\n }\r\n\r\n return errors;\r\n }\r\n\r\n // ==========================================================================\r\n // Utilities\r\n // ==========================================================================\r\n\r\n /**\r\n * Create default empty output\r\n */\r\n private createDefaultOutput(): SkillOutput {\r\n return {\r\n success: false,\r\n confidence: 0.0,\r\n deliverables: [],\r\n metrics: {},\r\n errors: [],\r\n };\r\n }\r\n}\r\n\r\n// ============================================================================\r\n// Exports\r\n// ============================================================================\r\n\r\nexport default SkillOutputParser;\r\n"],"names":["SkillOutputParser","config","enableLegacyParsing","defaultConfidence","strictValidation","parse","output","errors","warnings","trim","length","push","createLegacyParseResult","jsonResult","tryParseJSON","success","data","validationResult","validateSkillOutput","valid","parseMethod","confidence","createDefaultOutput","parseBatch","outputs","map","jsonMatch","match","JSON","error","Array","isArray","deliverables","metrics","allowedFields","Set","actualFields","Object","keys","unexpectedFields","filter","field","has","join","isEmpty","parsedOutput","detectSuccess","extractConfidence","extractDeliverables","extractMetrics","extractErrors","successPatterns","failurePatterns","pattern","test","confidenceMatch","parseFloat","patterns","exec","file","includes","timeMatch","execution_time_ms","parseInt","fileCountMatch","files_modified","errorMatches","matchAll","code","message"],"mappings":"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"}
|