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.
Files changed (473) hide show
  1. package/.claude/cfn-extras/skills/advanced-features/cfn-agent-swap/recommend-swap.sh +59 -59
  2. package/.claude/cfn-extras/skills/analytics/cfn-improvement-recommender/recommend-improvements.sh +91 -91
  3. package/.claude/cfn-extras/skills/analytics/cfn-pattern-extraction/extract-patterns.sh +79 -79
  4. package/.claude/cfn-extras/skills/analytics/cfn-retrospective-report/generate-report.sh +100 -100
  5. package/.claude/cfn-extras/skills/analytics/cfn-telemetry/start-telemetry.sh +110 -110
  6. package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/add-bullet.sh +145 -145
  7. package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/log-merge.sh +67 -67
  8. package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/monitor-injection-performance.sh +137 -137
  9. package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/optimize-injection-pipeline.sh +168 -168
  10. package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/query-reflections.sh +35 -35
  11. package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/store-reflection.sh +45 -45
  12. package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/track-ab-test.sh +41 -41
  13. package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/update-reflection.sh +41 -41
  14. package/.claude/cfn-extras/skills/deprecated/cfn-cli-setup/validate-cli-environment.sh +191 -191
  15. package/.claude/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/create-campaign.sh +231 -231
  16. package/.claude/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/get-campaign-performance.sh +190 -190
  17. package/.claude/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/pause-campaign.sh +142 -142
  18. package/.claude/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/set-budget.sh +181 -181
  19. package/.claude/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/update-bid-strategy.sh +133 -133
  20. package/.claude/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/get-conversation-history.sh +121 -121
  21. package/.claude/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/qualify-lead.sh +156 -156
  22. package/.claude/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/schedule-demo.sh +181 -181
  23. package/.claude/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/send-message.sh +137 -137
  24. package/.claude/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/transfer-to-human.sh +179 -179
  25. package/.claude/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/create-campaign.sh +183 -183
  26. package/.claude/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/get-delivery-status.sh +139 -139
  27. package/.claude/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/opt-out.sh +150 -150
  28. package/.claude/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/schedule-campaign.sh +187 -187
  29. package/.claude/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/send-sms.sh +181 -181
  30. package/.claude/cfn-extras/skills/ui-portal/cfn-web-portal/test-web-portal-skill.sh +50 -50
  31. package/.claude/cfn-extras/skills/ui-portal/cfn-web-portal/validate-deployment.sh +84 -84
  32. package/.claude/cfn-extras/skills/utility/cfn-environment-sanitization/sanitize-environment.sh +243 -243
  33. package/.claude/commands/cfn-loop-cli.md +29 -6
  34. package/.claude/commands/switch-api.md +31 -10
  35. package/.claude/hooks/cfn-lint-sql-injection.sh +61 -0
  36. package/.claude/hooks/cfn-post-edit-cfn-retrospective.sh +33 -2
  37. package/.claude/hooks/cfn-pre-edit-security-warning.sh +40 -0
  38. package/.claude/skills/cfn-agent-spawning/spawn-agent.sh +22 -24
  39. package/.claude/skills/cfn-docker-agent-spawning/SKILL.md +28 -4
  40. package/.claude/skills/cfn-docker-agent-spawning/spawn-agent.sh +3 -1
  41. package/.claude/skills/cfn-docker-loop-orchestration/orchestrate.sh +224 -20
  42. package/.claude/skills/cfn-loop-orchestration/helpers/gate-check.sh +550 -46
  43. package/.claude/skills/cfn-loop-orchestration/helpers/parse-test-results.sh +277 -0
  44. package/.claude/skills/cfn-loop-orchestration/orchestrate.sh +238 -29
  45. package/.claude/skills/cfn-loop-orchestration/security_utils.sh +24 -0
  46. package/.claude/skills/cfn-loop-orchestration/test-iteration-context-injection.sh +366 -0
  47. package/.claude/skills/cfn-redis-coordination/CENTRALIZED_REDIS_WRAPPER.md +319 -0
  48. package/.claude/skills/cfn-redis-coordination/agent-log.sh +4 -0
  49. package/.claude/skills/cfn-redis-coordination/agent-log.sh.bak +124 -0
  50. package/.claude/skills/cfn-redis-coordination/agent-recovery.sh +2 -2
  51. package/.claude/skills/cfn-redis-coordination/collect-confidence-scores.sh +30 -0
  52. package/.claude/skills/cfn-redis-coordination/get-context.sh +33 -0
  53. package/.claude/skills/cfn-redis-coordination/get-success-criteria.sh +54 -0
  54. package/.claude/skills/cfn-redis-coordination/invoke-waiting-mode.sh +6 -2
  55. package/.claude/skills/cfn-redis-coordination/redis-cli-wrapper.sh +24 -3
  56. package/.claude/skills/cfn-redis-coordination/redis-functions.sh +34 -0
  57. package/.claude/skills/cfn-redis-coordination/report-completion.sh +24 -31
  58. package/.claude/skills/cfn-redis-coordination/store-context.sh +4 -0
  59. package/.claude/skills/cfn-redis-coordination/store-success-criteria.sh +85 -0
  60. package/.claude/skills/cfn-redis-coordination/update-all-scripts.sh +67 -0
  61. package/.claude/skills/cfn-sqlite-memory/ttl-cleanup.sh +17 -25
  62. package/.claude/skills/cfn-transparency-middleware/test-e2e.sh +15 -0
  63. package/.claude/skills/cfn-transparency-middleware/tests/input-validation.sh +15 -0
  64. package/README.md +116 -475
  65. package/claude-assets/agents/cfn-dev-team/README.md +103 -0
  66. package/claude-assets/agents/cfn-dev-team/architecture/goal-planner.md +1 -1
  67. package/claude-assets/agents/cfn-dev-team/coordinators/cfn-frontend-coordinator.md +77 -15
  68. package/claude-assets/agents/cfn-dev-team/coordinators/cfn-v3-coordinator.md +355 -6
  69. package/claude-assets/agents/cfn-dev-team/coordinators/consensus-builder.md +82 -1
  70. package/claude-assets/agents/cfn-dev-team/coordinators/handoff-coordinator.md +82 -1
  71. package/claude-assets/agents/cfn-dev-team/coordinators/multi-sprint-coordinator.md +77 -15
  72. package/claude-assets/agents/cfn-dev-team/dev-ops/docker-specialist.md +99 -12
  73. package/claude-assets/agents/cfn-dev-team/dev-ops/github-commit-agent.md +1 -1
  74. package/claude-assets/agents/cfn-dev-team/dev-ops/kubernetes-specialist.md +97 -0
  75. package/claude-assets/agents/cfn-dev-team/dev-ops/monitoring-specialist.md +20 -1
  76. package/claude-assets/agents/cfn-dev-team/developers/api-gateway-specialist.md +97 -0
  77. package/claude-assets/agents/cfn-dev-team/developers/backend-developer.md +110 -13
  78. package/claude-assets/agents/cfn-dev-team/developers/data/data-engineer.md +106 -15
  79. package/claude-assets/agents/cfn-dev-team/developers/database/database-architect.md +115 -11
  80. package/claude-assets/agents/cfn-dev-team/developers/frontend/mobile-dev.md +94 -7
  81. package/claude-assets/agents/cfn-dev-team/developers/frontend/react-frontend-engineer.md +87 -9
  82. package/claude-assets/agents/cfn-dev-team/developers/frontend/typescript-specialist.md +85 -7
  83. package/claude-assets/agents/cfn-dev-team/developers/frontend/ui-designer.md +160 -28
  84. package/claude-assets/agents/cfn-dev-team/developers/graphql-specialist.md +101 -19
  85. package/claude-assets/agents/cfn-dev-team/developers/rust-developer.md +108 -14
  86. package/claude-assets/agents/cfn-dev-team/reviewers/{reviewer.md → code-reviewer.md} +95 -8
  87. package/claude-assets/agents/cfn-dev-team/reviewers/quality/code-quality-validator.md +107 -7
  88. package/claude-assets/agents/cfn-dev-team/reviewers/quality/perf-analyzer.md +98 -7
  89. package/claude-assets/agents/cfn-dev-team/reviewers/quality/performance-benchmarker.md +95 -7
  90. package/claude-assets/agents/cfn-dev-team/reviewers/quality/security-specialist.md +136 -9
  91. package/claude-assets/agents/cfn-dev-team/testers/api-testing-specialist.md +108 -1
  92. package/claude-assets/agents/cfn-dev-team/testers/chaos-engineering-specialist.md +107 -13
  93. package/claude-assets/agents/cfn-dev-team/testers/contract-tester.md +737 -0
  94. package/claude-assets/agents/cfn-dev-team/testers/e2e/playwright-tester.md +1 -1
  95. package/claude-assets/agents/cfn-dev-team/testers/integration-tester.md +828 -0
  96. package/claude-assets/agents/cfn-dev-team/testers/interaction-tester.md +106 -7
  97. package/claude-assets/agents/cfn-dev-team/testers/load-testing-specialist.md +77 -0
  98. package/claude-assets/agents/cfn-dev-team/testers/mutation-testing-specialist.md +684 -0
  99. package/claude-assets/agents/cfn-dev-team/testers/playwright-tester.md +110 -1
  100. package/claude-assets/agents/cfn-dev-team/testers/tester.md +94 -7
  101. package/claude-assets/agents/cfn-dev-team/utility/code-booster.md +1 -3
  102. package/claude-assets/agents/cfn-dev-team/utility/epic-creator.md +87 -13
  103. package/claude-assets/agents/cfn-dev-team/utility/memory-leak-specialist.md +103 -7
  104. package/claude-assets/agents/cfn-dev-team/utility/researcher.md +1 -3
  105. package/claude-assets/agents/cfn-dev-team/utility/z-ai-specialist.md +94 -7
  106. package/claude-assets/agents/docker-coordinators/cfn-docker-v3-coordinator.md +46 -0
  107. package/claude-assets/agents/project-only-agents/npm-package-specialist.md +1 -1
  108. package/claude-assets/cfn-extras/skills/advanced-features/cfn-agent-swap/recommend-swap.sh +59 -59
  109. package/claude-assets/cfn-extras/skills/analytics/cfn-improvement-recommender/recommend-improvements.sh +91 -91
  110. package/claude-assets/cfn-extras/skills/analytics/cfn-pattern-extraction/extract-patterns.sh +79 -79
  111. package/claude-assets/cfn-extras/skills/analytics/cfn-retrospective-report/generate-report.sh +100 -100
  112. package/claude-assets/cfn-extras/skills/analytics/cfn-telemetry/start-telemetry.sh +110 -110
  113. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/add-bullet.sh +145 -145
  114. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/log-merge.sh +67 -67
  115. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/monitor-injection-performance.sh +137 -137
  116. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/optimize-injection-pipeline.sh +168 -168
  117. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/query-reflections.sh +35 -35
  118. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/store-reflection.sh +45 -45
  119. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/track-ab-test.sh +41 -41
  120. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/update-reflection.sh +41 -41
  121. package/claude-assets/cfn-extras/skills/deprecated/cfn-cli-setup/validate-cli-environment.sh +191 -191
  122. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/create-campaign.sh +231 -231
  123. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/get-campaign-performance.sh +190 -190
  124. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/pause-campaign.sh +142 -142
  125. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/set-budget.sh +181 -181
  126. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/update-bid-strategy.sh +133 -133
  127. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/get-conversation-history.sh +121 -121
  128. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/qualify-lead.sh +156 -156
  129. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/schedule-demo.sh +181 -181
  130. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/send-message.sh +137 -137
  131. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/transfer-to-human.sh +179 -179
  132. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/create-campaign.sh +183 -183
  133. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/get-delivery-status.sh +139 -139
  134. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/opt-out.sh +150 -150
  135. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/schedule-campaign.sh +187 -187
  136. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/send-sms.sh +181 -181
  137. package/claude-assets/cfn-extras/skills/ui-portal/cfn-web-portal/test-web-portal-skill.sh +50 -50
  138. package/claude-assets/cfn-extras/skills/ui-portal/cfn-web-portal/validate-deployment.sh +84 -84
  139. package/claude-assets/cfn-extras/skills/utility/cfn-environment-sanitization/sanitize-environment.sh +243 -243
  140. package/claude-assets/commands/cfn-loop-cli.md +29 -6
  141. package/claude-assets/commands/switch-api.md +31 -10
  142. package/claude-assets/hooks/cfn-lint-sql-injection.sh +61 -0
  143. package/claude-assets/hooks/cfn-post-edit-cfn-retrospective.sh +33 -2
  144. package/claude-assets/hooks/cfn-pre-edit-security-warning.sh +40 -0
  145. package/claude-assets/hooks/detect-hardcoded-credentials.sh +212 -0
  146. package/claude-assets/skills/SKILL_TEMPLATE.md +774 -0
  147. package/claude-assets/skills/agent-lifecycle/execute-lifecycle-hook.sh +84 -113
  148. package/claude-assets/skills/agent-lifecycle/simple-audit.sh +33 -6
  149. package/claude-assets/skills/agent-template-generator/SKILL.md +440 -0
  150. package/claude-assets/skills/agent-template-generator/generate-agent.sh +405 -0
  151. package/claude-assets/skills/agent-validation-linter/SKILL.md +589 -0
  152. package/claude-assets/skills/agent-validation-linter/lint-agents.sh +271 -0
  153. package/claude-assets/skills/bootstrap/bash-fundamentals.md +786 -0
  154. package/claude-assets/skills/bootstrap/database-connection.md +464 -0
  155. package/claude-assets/skills/bootstrap/error-handling.md +580 -0
  156. package/claude-assets/skills/bootstrap/file-operations.md +699 -0
  157. package/claude-assets/skills/bootstrap/skill-loader.md +616 -0
  158. package/claude-assets/skills/bootstrap/sqlite-params.sh +287 -0
  159. package/claude-assets/skills/cfn-agent-spawning/spawn-agent.sh +22 -24
  160. package/claude-assets/skills/cfn-automatic-memory-persistence/test-memory-persistence.sh +17 -16
  161. package/claude-assets/skills/cfn-deployment/SKILL.md +293 -0
  162. package/claude-assets/skills/cfn-deployment/execute.sh +21 -0
  163. package/claude-assets/skills/cfn-docker-agent-spawning/SKILL.md +28 -4
  164. package/claude-assets/skills/cfn-docker-agent-spawning/spawn-agent.sh +3 -1
  165. package/claude-assets/skills/cfn-docker-loop-orchestration/orchestrate.sh +224 -20
  166. package/claude-assets/skills/cfn-environment-sanitization/sanitize-environment.sh +38 -0
  167. package/claude-assets/skills/cfn-error-batching-strategy/lib/core-functions.sh +47 -47
  168. package/claude-assets/skills/cfn-file-operations/SKILL.md +290 -0
  169. package/claude-assets/skills/cfn-file-operations/execute.sh +129 -0
  170. package/claude-assets/skills/cfn-file-operations/lib/atomic-write.sh +294 -0
  171. package/claude-assets/skills/cfn-file-operations/lib/lock.sh +361 -0
  172. package/claude-assets/skills/cfn-file-operations/test.sh +369 -0
  173. package/claude-assets/skills/cfn-log-operations/SKILL.md +308 -0
  174. package/claude-assets/skills/cfn-log-operations/execute.sh +420 -0
  175. package/claude-assets/skills/cfn-log-operations/lib/rotate.sh +406 -0
  176. package/claude-assets/skills/cfn-log-operations/lib/search.sh +448 -0
  177. package/claude-assets/skills/cfn-log-operations/test.sh +394 -0
  178. package/claude-assets/skills/cfn-loop-orchestration/helpers/gate-check.sh +550 -46
  179. package/claude-assets/skills/cfn-loop-orchestration/helpers/parse-test-results.sh +277 -0
  180. package/claude-assets/skills/cfn-loop-orchestration/orchestrate.sh +238 -29
  181. package/claude-assets/skills/cfn-loop-orchestration/security_utils.sh +24 -0
  182. package/claude-assets/skills/cfn-loop-orchestration/test-iteration-context-injection.sh +366 -0
  183. package/claude-assets/skills/cfn-parameterized-queries/SKILL.md +339 -0
  184. package/claude-assets/skills/cfn-playbook/query-playbook.sh +19 -15
  185. package/claude-assets/skills/cfn-playbook/update-playbook.sh +25 -14
  186. package/claude-assets/skills/cfn-process-instrumentation/instrument-process.sh +44 -0
  187. package/claude-assets/skills/cfn-promotion/SKILL.md +305 -0
  188. package/claude-assets/skills/cfn-redis-coordination/CENTRALIZED_REDIS_WRAPPER.md +319 -0
  189. package/claude-assets/skills/cfn-redis-coordination/agent-log.sh +4 -0
  190. package/claude-assets/skills/cfn-redis-coordination/agent-log.sh.bak +124 -0
  191. package/claude-assets/skills/cfn-redis-coordination/agent-recovery.sh +2 -2
  192. package/claude-assets/skills/cfn-redis-coordination/collect-confidence-scores.sh +30 -0
  193. package/claude-assets/skills/cfn-redis-coordination/get-context.sh +33 -0
  194. package/claude-assets/skills/cfn-redis-coordination/get-success-criteria.sh +54 -0
  195. package/claude-assets/skills/cfn-redis-coordination/invoke-waiting-mode.sh +6 -2
  196. package/claude-assets/skills/cfn-redis-coordination/redis-cli-wrapper.sh +24 -3
  197. package/claude-assets/skills/cfn-redis-coordination/redis-functions.sh +34 -0
  198. package/claude-assets/skills/cfn-redis-coordination/report-completion.sh +24 -31
  199. package/claude-assets/skills/cfn-redis-coordination/store-context.sh +4 -0
  200. package/claude-assets/skills/cfn-redis-coordination/store-success-criteria.sh +85 -0
  201. package/claude-assets/skills/cfn-redis-coordination/update-all-scripts.sh +67 -0
  202. package/claude-assets/skills/cfn-skill-loader/SKILL.md +466 -0
  203. package/claude-assets/skills/cfn-skill-loader/execute.sh +344 -0
  204. package/claude-assets/skills/cfn-sqlite-memory/ttl-cleanup.sh +17 -25
  205. package/claude-assets/skills/cfn-task-audit/get-audit-data.sh +42 -21
  206. package/claude-assets/skills/cfn-task-audit/store-task-audit.sh +17 -10
  207. package/claude-assets/skills/cfn-test-runner/detect-regressions.sh +17 -14
  208. package/claude-assets/skills/cfn-test-runner/detect-regressions.sh.backup-1763392821 +55 -0
  209. package/claude-assets/skills/cfn-test-runner/store-benchmarks.sh +17 -19
  210. package/claude-assets/skills/cfn-transparency-middleware/test-e2e.sh +15 -0
  211. package/claude-assets/skills/cfn-transparency-middleware/tests/input-validation.sh +15 -0
  212. package/claude-assets/skills/cfn-utilities/SKILL.md +237 -0
  213. package/claude-assets/skills/cfn-utilities/execute.sh +32 -0
  214. package/claude-assets/skills/cfn-utilities/lib/errors.sh +56 -0
  215. package/claude-assets/skills/cfn-utilities/lib/file-ops.sh +164 -0
  216. package/claude-assets/skills/cfn-utilities/lib/logging.sh +77 -0
  217. package/claude-assets/skills/cfn-utilities/lib/retry.sh +127 -0
  218. package/claude-assets/skills/cfn-utilities/test.sh +317 -0
  219. package/claude-assets/skills/integration/agent-handoff.sh +62 -64
  220. package/claude-assets/skills/json-validation/SKILL.md +431 -0
  221. package/claude-assets/skills/json-validation/test-validate-success-criteria.sh +421 -0
  222. package/claude-assets/skills/json-validation/validate-success-criteria.sh +197 -0
  223. package/claude-assets/skills/redis-coordination/validate-parameters.sh +34 -0
  224. package/claude-assets/skills/workflow-codification/DEPLOY_QUICK_REFERENCE.md +106 -0
  225. package/claude-assets/skills/workflow-codification/PROPAGATE_UPDATE_QUICK_REFERENCE.md +366 -0
  226. package/claude-assets/skills/workflow-codification/deploy-approved-skill.sh +481 -0
  227. package/claude-assets/skills/workflow-codification/deploy-approved-skill.sh.backup-1763392820 +512 -0
  228. package/claude-assets/skills/workflow-codification/lib/security-utils.sh +204 -0
  229. package/claude-assets/skills/workflow-codification/propagate-skill-update.sh +648 -0
  230. package/claude-assets/skills/workflow-codification/propagate-skill-update.sh.backup-1763392820 +664 -0
  231. package/claude-assets/skills/workflow-codification/test-integration.sh +15 -0
  232. package/claude-assets/skills/workflow-codification/test-metadata-update.sh +350 -0
  233. package/claude-assets/skills/workflow-codification/track-cost-savings.sh +55 -14
  234. package/claude-assets/skills/workflow-codification/track-cost-savings.sh.backup-1763392821 +445 -0
  235. package/claude-assets/skills/workflow-codification/track-edge-case.sh +27 -60
  236. package/claude-assets/skills/workflow-codification/workflow-codification.db +0 -0
  237. package/dist/ace/ace-curator.js +10 -2
  238. package/dist/ace/ace-curator.js.map +1 -1
  239. package/dist/ace/ace-generator.js +4 -0
  240. package/dist/ace/ace-generator.js.map +1 -1
  241. package/dist/ace/ace-reflector.js +1 -1
  242. package/dist/ace/ace-reflector.js.map +1 -1
  243. package/dist/ace/context-injection.js +24 -2
  244. package/dist/ace/context-injection.js.map +1 -1
  245. package/dist/agents/task-agent-integration.js +1 -1
  246. package/dist/agents/task-agent-integration.js.map +1 -1
  247. package/dist/api/health-endpoints.js +390 -0
  248. package/dist/api/health-endpoints.js.map +1 -0
  249. package/dist/cli/agent-executor.js +4 -1
  250. package/dist/cli/agent-executor.js.map +1 -1
  251. package/dist/cli/agent-prompt-builder.js +89 -1
  252. package/dist/cli/agent-prompt-builder.js.map +1 -1
  253. package/dist/cli/agent-spawn.js +130 -37
  254. package/dist/cli/agent-spawn.js.map +1 -1
  255. package/dist/cli/config-manager.js +109 -91
  256. package/dist/cli/config-manager.js.map +1 -1
  257. package/dist/cli/conversation-fork-cleanup.js +201 -0
  258. package/dist/cli/conversation-fork-cleanup.js.map +1 -0
  259. package/dist/cli/conversation-fork.js +16 -3
  260. package/dist/cli/conversation-fork.js.map +1 -1
  261. package/dist/cli/skill-cache-validator.js +412 -0
  262. package/dist/cli/skill-cache-validator.js.map +1 -0
  263. package/dist/cli/skill-cli.js +991 -0
  264. package/dist/cli/skill-cli.js.map +1 -0
  265. package/dist/cli/skill-execution-logger.js +284 -0
  266. package/dist/cli/skill-execution-logger.js.map +1 -0
  267. package/dist/cli/skill-loader.js +457 -0
  268. package/dist/cli/skill-loader.js.map +1 -0
  269. package/dist/coordination/event-bus.js +2 -2
  270. package/dist/coordination/event-bus.js.map +1 -1
  271. package/dist/coordination/fleet-manager.js +1 -1
  272. package/dist/coordination/fleet-manager.js.map +1 -1
  273. package/dist/coordination/index.js +23 -9
  274. package/dist/coordination/index.js.map +1 -1
  275. package/dist/coordination/types/fleet-manager.types.js.map +1 -1
  276. package/dist/db/migration-manager.js +483 -0
  277. package/dist/db/migration-manager.js.map +1 -0
  278. package/dist/db/skills-query.js +535 -0
  279. package/dist/db/skills-query.js.map +1 -0
  280. package/dist/integration/DatabaseHandoff.js +1 -1
  281. package/dist/integration/DatabaseHandoff.js.map +1 -1
  282. package/dist/jobs/edge-case-analyzer.js +367 -0
  283. package/dist/jobs/edge-case-analyzer.js.map +1 -0
  284. package/dist/jobs/promotion-sla-enforcer.js +288 -0
  285. package/dist/jobs/promotion-sla-enforcer.js.map +1 -0
  286. package/dist/lib/agent-output-parser.js.map +1 -1
  287. package/dist/lib/agent-output-validator.js.map +1 -1
  288. package/dist/lib/agent-workspace.js +281 -0
  289. package/dist/lib/agent-workspace.js.map +1 -0
  290. package/dist/lib/atomic-file-writer.js +377 -0
  291. package/dist/lib/atomic-file-writer.js.map +1 -0
  292. package/dist/lib/backup-manager.js +779 -0
  293. package/dist/lib/backup-manager.js.map +1 -0
  294. package/dist/lib/checkpoint-manager.js +837 -0
  295. package/dist/lib/checkpoint-manager.js.map +1 -0
  296. package/dist/lib/circuit-breaker.js +340 -0
  297. package/dist/lib/circuit-breaker.js.map +1 -0
  298. package/dist/lib/completion-signal-handler.js +243 -0
  299. package/dist/lib/completion-signal-handler.js.map +1 -0
  300. package/dist/lib/config-manager.js +312 -0
  301. package/dist/lib/config-manager.js.map +1 -0
  302. package/dist/lib/config-migrator.js +386 -0
  303. package/dist/lib/config-migrator.js.map +1 -0
  304. package/dist/lib/config-validator.js.map +1 -1
  305. package/dist/lib/correlation-cache.js +311 -0
  306. package/dist/lib/correlation-cache.js.map +1 -0
  307. package/dist/lib/correlation.js +263 -0
  308. package/dist/lib/correlation.js.map +1 -0
  309. package/dist/lib/database-service/connection-pool-manager.js +520 -0
  310. package/dist/lib/database-service/connection-pool-manager.js.map +1 -0
  311. package/dist/lib/database-service/correlation.js +329 -0
  312. package/dist/lib/database-service/correlation.js.map +1 -0
  313. package/dist/lib/database-service/errors.js +120 -0
  314. package/dist/lib/database-service/errors.js.map +1 -0
  315. package/dist/lib/database-service/index.js +168 -0
  316. package/dist/lib/database-service/index.js.map +1 -0
  317. package/dist/lib/database-service/postgres-adapter.js +526 -0
  318. package/dist/lib/database-service/postgres-adapter.js.map +1 -0
  319. package/dist/lib/database-service/redis-adapter.js +360 -0
  320. package/dist/lib/database-service/redis-adapter.js.map +1 -0
  321. package/dist/lib/database-service/sqlite-adapter.js +544 -0
  322. package/dist/lib/database-service/sqlite-adapter.js.map +1 -0
  323. package/dist/lib/database-service/transaction-manager.js +773 -0
  324. package/dist/lib/database-service/transaction-manager.js.map +1 -0
  325. package/dist/lib/database-service/types.js +23 -0
  326. package/dist/lib/database-service/types.js.map +1 -0
  327. package/dist/lib/deadlock-resolver.js +292 -0
  328. package/dist/lib/deadlock-resolver.js.map +1 -0
  329. package/dist/lib/distributed-lock.js +451 -0
  330. package/dist/lib/distributed-lock.js.map +1 -0
  331. package/dist/lib/edge-case-deduplicator.js +227 -0
  332. package/dist/lib/edge-case-deduplicator.js.map +1 -0
  333. package/dist/lib/encryption-manager.js +322 -0
  334. package/dist/lib/encryption-manager.js.map +1 -0
  335. package/dist/lib/error-aggregator.js +234 -0
  336. package/dist/lib/error-aggregator.js.map +1 -0
  337. package/dist/lib/errors.js +287 -0
  338. package/dist/lib/errors.js.map +1 -0
  339. package/dist/lib/file-lock-manager.js +578 -0
  340. package/dist/lib/file-lock-manager.js.map +1 -0
  341. package/dist/lib/file-operations.js +367 -0
  342. package/dist/lib/file-operations.js.map +1 -0
  343. package/dist/lib/idempotent-write.js +237 -0
  344. package/dist/lib/idempotent-write.js.map +1 -0
  345. package/dist/lib/integration-schema-validator.js +522 -0
  346. package/dist/lib/integration-schema-validator.js.map +1 -0
  347. package/dist/lib/lock-health-monitor.js +298 -0
  348. package/dist/lib/lock-health-monitor.js.map +1 -0
  349. package/dist/lib/log-shipper.js +422 -0
  350. package/dist/lib/log-shipper.js.map +1 -0
  351. package/dist/lib/logging.js +146 -0
  352. package/dist/lib/logging.js.map +1 -0
  353. package/dist/lib/message-deduplicator.js +439 -0
  354. package/dist/lib/message-deduplicator.js.map +1 -0
  355. package/dist/lib/multi-system-query.js +604 -0
  356. package/dist/lib/multi-system-query.js.map +1 -0
  357. package/dist/lib/orphan-detector.js +332 -0
  358. package/dist/lib/orphan-detector.js.map +1 -0
  359. package/dist/lib/password-generator.js +166 -0
  360. package/dist/lib/password-generator.js.map +1 -0
  361. package/dist/lib/path-validator.js +429 -0
  362. package/dist/lib/path-validator.js.map +1 -0
  363. package/dist/lib/query-translator.js +905 -0
  364. package/dist/lib/query-translator.js.map +1 -0
  365. package/dist/lib/queue-recovery.js +469 -0
  366. package/dist/lib/queue-recovery.js.map +1 -0
  367. package/dist/lib/redis-queue-manager.js +512 -0
  368. package/dist/lib/redis-queue-manager.js.map +1 -0
  369. package/dist/lib/reflection-archiver.js +272 -0
  370. package/dist/lib/reflection-archiver.js.map +1 -0
  371. package/dist/lib/retry-manager.js +453 -0
  372. package/dist/lib/retry-manager.js.map +1 -0
  373. package/dist/lib/retry.js +262 -0
  374. package/dist/lib/retry.js.map +1 -0
  375. package/dist/lib/schema-transform.js +695 -0
  376. package/dist/lib/schema-transform.js.map +1 -0
  377. package/dist/lib/schema-validator.js +491 -0
  378. package/dist/lib/schema-validator.js.map +1 -0
  379. package/dist/lib/skill-cache.js +297 -0
  380. package/dist/lib/skill-cache.js.map +1 -0
  381. package/dist/lib/skill-content-manager.js +337 -0
  382. package/dist/lib/skill-content-manager.js.map +1 -0
  383. package/dist/lib/skill-frontmatter-parser.js +237 -0
  384. package/dist/lib/skill-frontmatter-parser.js.map +1 -0
  385. package/dist/lib/skill-git-integration.js +275 -0
  386. package/dist/lib/skill-git-integration.js.map +1 -0
  387. package/dist/lib/skill-markdown-validator.js +396 -0
  388. package/dist/lib/skill-markdown-validator.js.map +1 -0
  389. package/dist/lib/skill-output-parser.js +312 -0
  390. package/dist/lib/skill-output-parser.js.map +1 -0
  391. package/dist/lib/unified-query-api.js +467 -0
  392. package/dist/lib/unified-query-api.js.map +1 -0
  393. package/dist/middleware/auth-middleware.js +350 -0
  394. package/dist/middleware/auth-middleware.js.map +1 -0
  395. package/dist/middleware/schema-validation.js +347 -0
  396. package/dist/middleware/schema-validation.js.map +1 -0
  397. package/dist/providers/anthropic-provider.js +1 -1
  398. package/dist/providers/anthropic-provider.js.map +1 -1
  399. package/dist/providers/provider-factory.js +2 -2
  400. package/dist/providers/provider-factory.js.map +1 -1
  401. package/dist/services/edge-case-analyzer.js +321 -0
  402. package/dist/services/edge-case-analyzer.js.map +1 -0
  403. package/dist/services/edge-case-deduplicator.js +266 -0
  404. package/dist/services/edge-case-deduplicator.js.map +1 -0
  405. package/dist/services/edge-case-detector.js +337 -0
  406. package/dist/services/edge-case-detector.js.map +1 -0
  407. package/dist/services/edge-case-tracker.js +547 -0
  408. package/dist/services/edge-case-tracker.js.map +1 -0
  409. package/dist/services/health-check-system.js +586 -0
  410. package/dist/services/health-check-system.js.map +1 -0
  411. package/dist/services/metrics-logger.js +412 -0
  412. package/dist/services/metrics-logger.js.map +1 -0
  413. package/dist/services/patch-generator.js +378 -0
  414. package/dist/services/patch-generator.js.map +1 -0
  415. package/dist/services/patch-validator.js +337 -0
  416. package/dist/services/patch-validator.js.map +1 -0
  417. package/dist/services/performance-monitor.js +811 -0
  418. package/dist/services/performance-monitor.js.map +1 -0
  419. package/dist/services/promotion-pipeline.js +918 -0
  420. package/dist/services/promotion-pipeline.js.map +1 -0
  421. package/dist/services/promotion-validator.js +394 -0
  422. package/dist/services/promotion-validator.js.map +1 -0
  423. package/dist/services/reflection-logger.js +388 -0
  424. package/dist/services/reflection-logger.js.map +1 -0
  425. package/dist/services/skill-deployment.js +472 -0
  426. package/dist/services/skill-deployment.js.map +1 -0
  427. package/dist/services/skill-loader.js +427 -0
  428. package/dist/services/skill-loader.js.map +1 -0
  429. package/dist/services/skill-promotion.js +372 -0
  430. package/dist/services/skill-promotion.js.map +1 -0
  431. package/dist/services/skill-validator.js +454 -0
  432. package/dist/services/skill-validator.js.map +1 -0
  433. package/dist/services/skill-versioning.js +244 -0
  434. package/dist/services/skill-versioning.js.map +1 -0
  435. package/dist/services/workspace-supervisor.js +597 -0
  436. package/dist/services/workspace-supervisor.js.map +1 -0
  437. package/dist/types/edge-case.js +45 -0
  438. package/dist/types/edge-case.js.map +1 -0
  439. package/docs/BUG_19_MEMORY_LEAK_TASK_MODE.md +405 -0
  440. package/docs/MEMORY_CLEANUP_GUIDE.md +358 -0
  441. package/docs/MEMORY_LEAK_FIX_SUMMARY.md +322 -0
  442. package/docs/REDIS_CLEANUP_EXECUTIVE_SUMMARY.md +319 -0
  443. package/docs/REDIS_CLEANUP_VERIFICATION_REPORT.md +574 -0
  444. package/package.json +35 -4
  445. package/readme/README.md +53 -5
  446. package/scripts/backup-cleanup.sh +627 -0
  447. package/scripts/cleanup-workspaces.sh +412 -0
  448. package/scripts/cleanup-yaml-configs.sh +141 -0
  449. package/scripts/deploy-approved-skills.sh +263 -0
  450. package/scripts/health-check.sh +447 -0
  451. package/scripts/log-aggregator.sh +554 -0
  452. package/scripts/log-monitor.sh +629 -0
  453. package/scripts/manage-agent-workspaces.sh +434 -0
  454. package/scripts/migrate-schema.sh +533 -0
  455. package/scripts/promote-staged-skills.sh +423 -0
  456. package/scripts/verify-no-secrets.sh +88 -35
  457. package/scripts/verify-redis-cleanup.sh +173 -0
  458. package/tests/README.md +84 -0
  459. package/tests/test-memory-leak-task-mode.sh +435 -0
  460. package/.claude/cfn-extras/agents/deprecated-coordinators/adaptive-coordinator.md.backup +0 -161
  461. package/.claude/cfn-extras/agents/deprecated-coordinators/blocking-coordinator-example.md.backup +0 -728
  462. package/.claude/cfn-extras/agents/deprecated-coordinators/mesh-coordinator.md.backup +0 -131
  463. package/.claude/skills/agent-lifecycle/SKILL.md +0 -60
  464. package/.claude/skills/agent-lifecycle/execute-lifecycle-hook.sh +0 -573
  465. package/.claude/skills/agent-lifecycle/simple-audit.sh +0 -31
  466. package/.claude/skills/cfn-agent-spawning/spawn-agent.sh.backup +0 -273
  467. package/.claude/skills/cfn-loop-orchestration/orchestrate.sh.backup +0 -949
  468. package/README.md.backup_before_replace +0 -781
  469. package/claude-assets/cfn-extras/agents/deprecated-coordinators/adaptive-coordinator.md.backup +0 -161
  470. package/claude-assets/cfn-extras/agents/deprecated-coordinators/blocking-coordinator-example.md.backup +0 -728
  471. package/claude-assets/cfn-extras/agents/deprecated-coordinators/mesh-coordinator.md.backup +0 -131
  472. package/claude-assets/skills/cfn-agent-spawning/spawn-agent.sh.backup +0 -273
  473. 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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"}