claude-flow-novice 2.15.2 → 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.
Files changed (533) 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 +16 -2
  34. package/.claude/commands/switch-api.md +31 -10
  35. package/.claude/hooks/cfn-BACKUP_USAGE.md +243 -243
  36. package/.claude/hooks/cfn-invoke-security-validation.sh +69 -69
  37. package/.claude/hooks/cfn-lint-sql-injection.sh +61 -0
  38. package/.claude/hooks/cfn-post-edit-cfn-retrospective.sh +109 -78
  39. package/.claude/hooks/cfn-post-edit.config.json +44 -44
  40. package/.claude/hooks/cfn-pre-edit-security-warning.sh +40 -0
  41. package/.claude/skills/cfn-agent-spawning/spawn-agent.sh +22 -24
  42. package/.claude/skills/cfn-docker-agent-spawning/SKILL.md +28 -4
  43. package/.claude/skills/cfn-docker-agent-spawning/spawn-agent.sh +3 -1
  44. package/.claude/skills/cfn-docker-loop-orchestration/orchestrate.sh +224 -20
  45. package/.claude/skills/cfn-hybrid-routing/check-dependencies.sh +51 -51
  46. package/.claude/skills/cfn-loop-orchestration/helpers/gate-check.sh +550 -46
  47. package/.claude/skills/cfn-loop-orchestration/helpers/parse-test-results.sh +277 -0
  48. package/.claude/skills/cfn-loop-orchestration/orchestrate.sh +184 -23
  49. package/.claude/skills/cfn-loop-orchestration/security_utils.sh +24 -0
  50. package/.claude/skills/cfn-loop-orchestration/test-iteration-context-injection.sh +366 -0
  51. package/.claude/skills/cfn-loop-validation/orchestrate-cfn-loop.sh +252 -252
  52. package/.claude/skills/cfn-redis-coordination/CENTRALIZED_REDIS_WRAPPER.md +319 -0
  53. package/.claude/skills/cfn-redis-coordination/agent-log.sh +4 -0
  54. package/.claude/skills/cfn-redis-coordination/agent-log.sh.bak +124 -0
  55. package/.claude/skills/cfn-redis-coordination/agent-recovery.sh +74 -74
  56. package/.claude/skills/cfn-redis-coordination/collect-confidence-scores.sh +30 -0
  57. package/.claude/skills/cfn-redis-coordination/get-context.sh +145 -112
  58. package/.claude/skills/cfn-redis-coordination/get-success-criteria.sh +54 -0
  59. package/.claude/skills/cfn-redis-coordination/invoke-waiting-mode.sh +3 -0
  60. package/.claude/skills/cfn-redis-coordination/redis-cli-wrapper.sh +24 -3
  61. package/.claude/skills/cfn-redis-coordination/redis-functions.sh +33 -0
  62. package/.claude/skills/cfn-redis-coordination/report-completion.sh +24 -31
  63. package/.claude/skills/cfn-redis-coordination/store-context.sh +4 -0
  64. package/.claude/skills/cfn-redis-coordination/store-success-criteria.sh +85 -0
  65. package/.claude/skills/cfn-redis-coordination/update-all-scripts.sh +67 -0
  66. package/.claude/skills/cfn-sqlite-memory/ttl-cleanup.sh +17 -25
  67. package/.claude/skills/cfn-transparency-middleware/middleware-config.sh +28 -28
  68. package/.claude/skills/cfn-transparency-middleware/performance-benchmark.sh +78 -78
  69. package/.claude/skills/cfn-transparency-middleware/test-e2e.sh +15 -0
  70. package/.claude/skills/cfn-transparency-middleware/test-integration.sh +161 -161
  71. package/.claude/skills/cfn-transparency-middleware/test-transparency-skill.sh +367 -367
  72. package/.claude/skills/cfn-transparency-middleware/tests/input-validation.sh +107 -92
  73. package/.claude/skills/cfn-transparency-middleware/wrap-agent.sh +131 -131
  74. package/README.md +116 -475
  75. package/claude-assets/agents/cfn-dev-team/README.md +103 -0
  76. package/claude-assets/agents/cfn-dev-team/architecture/goal-planner.md +1 -1
  77. package/claude-assets/agents/cfn-dev-team/coordinators/cfn-frontend-coordinator.md +77 -15
  78. package/claude-assets/agents/cfn-dev-team/coordinators/cfn-v3-coordinator.md +355 -6
  79. package/claude-assets/agents/cfn-dev-team/coordinators/consensus-builder.md +82 -1
  80. package/claude-assets/agents/cfn-dev-team/coordinators/handoff-coordinator.md +82 -1
  81. package/claude-assets/agents/cfn-dev-team/coordinators/multi-sprint-coordinator.md +77 -15
  82. package/claude-assets/agents/cfn-dev-team/dev-ops/docker-specialist.md +99 -12
  83. package/claude-assets/agents/cfn-dev-team/dev-ops/github-commit-agent.md +1 -1
  84. package/claude-assets/agents/cfn-dev-team/dev-ops/kubernetes-specialist.md +97 -0
  85. package/claude-assets/agents/cfn-dev-team/dev-ops/monitoring-specialist.md +20 -1
  86. package/claude-assets/agents/cfn-dev-team/developers/api-gateway-specialist.md +97 -0
  87. package/claude-assets/agents/cfn-dev-team/developers/backend-developer.md +110 -13
  88. package/claude-assets/agents/cfn-dev-team/developers/data/data-engineer.md +106 -15
  89. package/claude-assets/agents/cfn-dev-team/developers/database/database-architect.md +115 -11
  90. package/claude-assets/agents/cfn-dev-team/developers/frontend/mobile-dev.md +94 -7
  91. package/claude-assets/agents/cfn-dev-team/developers/frontend/react-frontend-engineer.md +87 -9
  92. package/claude-assets/agents/cfn-dev-team/developers/frontend/typescript-specialist.md +85 -7
  93. package/claude-assets/agents/cfn-dev-team/developers/frontend/ui-designer.md +160 -28
  94. package/claude-assets/agents/cfn-dev-team/developers/graphql-specialist.md +101 -19
  95. package/claude-assets/agents/cfn-dev-team/developers/rust-developer.md +108 -14
  96. package/claude-assets/agents/cfn-dev-team/reviewers/{reviewer.md → code-reviewer.md} +95 -8
  97. package/claude-assets/agents/cfn-dev-team/reviewers/quality/code-quality-validator.md +107 -7
  98. package/claude-assets/agents/cfn-dev-team/reviewers/quality/perf-analyzer.md +98 -7
  99. package/claude-assets/agents/cfn-dev-team/reviewers/quality/performance-benchmarker.md +95 -7
  100. package/claude-assets/agents/cfn-dev-team/reviewers/quality/security-specialist.md +136 -9
  101. package/claude-assets/agents/cfn-dev-team/testers/api-testing-specialist.md +108 -1
  102. package/claude-assets/agents/cfn-dev-team/testers/chaos-engineering-specialist.md +107 -13
  103. package/claude-assets/agents/cfn-dev-team/testers/contract-tester.md +737 -0
  104. package/claude-assets/agents/cfn-dev-team/testers/e2e/playwright-tester.md +1 -1
  105. package/claude-assets/agents/cfn-dev-team/testers/integration-tester.md +828 -0
  106. package/claude-assets/agents/cfn-dev-team/testers/interaction-tester.md +106 -7
  107. package/claude-assets/agents/cfn-dev-team/testers/load-testing-specialist.md +77 -0
  108. package/claude-assets/agents/cfn-dev-team/testers/mutation-testing-specialist.md +684 -0
  109. package/claude-assets/agents/cfn-dev-team/testers/playwright-tester.md +110 -1
  110. package/claude-assets/agents/cfn-dev-team/testers/tester.md +94 -7
  111. package/claude-assets/agents/cfn-dev-team/utility/code-booster.md +1 -3
  112. package/claude-assets/agents/cfn-dev-team/utility/epic-creator.md +87 -13
  113. package/claude-assets/agents/cfn-dev-team/utility/memory-leak-specialist.md +103 -7
  114. package/claude-assets/agents/cfn-dev-team/utility/researcher.md +1 -3
  115. package/claude-assets/agents/cfn-dev-team/utility/z-ai-specialist.md +94 -7
  116. package/claude-assets/agents/docker-coordinators/cfn-docker-v3-coordinator.md +46 -0
  117. package/claude-assets/agents/project-only-agents/npm-package-specialist.md +1 -1
  118. package/claude-assets/cfn-extras/skills/advanced-features/cfn-agent-swap/recommend-swap.sh +59 -59
  119. package/claude-assets/cfn-extras/skills/analytics/cfn-improvement-recommender/recommend-improvements.sh +91 -91
  120. package/claude-assets/cfn-extras/skills/analytics/cfn-pattern-extraction/extract-patterns.sh +79 -79
  121. package/claude-assets/cfn-extras/skills/analytics/cfn-retrospective-report/generate-report.sh +100 -100
  122. package/claude-assets/cfn-extras/skills/analytics/cfn-telemetry/start-telemetry.sh +110 -110
  123. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/add-bullet.sh +145 -145
  124. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/log-merge.sh +67 -67
  125. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/monitor-injection-performance.sh +137 -137
  126. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/optimize-injection-pipeline.sh +168 -168
  127. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/query-reflections.sh +35 -35
  128. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/store-reflection.sh +45 -45
  129. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/track-ab-test.sh +41 -41
  130. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/update-reflection.sh +41 -41
  131. package/claude-assets/cfn-extras/skills/deprecated/cfn-cli-setup/validate-cli-environment.sh +191 -191
  132. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/create-campaign.sh +231 -231
  133. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/get-campaign-performance.sh +190 -190
  134. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/pause-campaign.sh +142 -142
  135. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/set-budget.sh +181 -181
  136. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/update-bid-strategy.sh +133 -133
  137. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/get-conversation-history.sh +121 -121
  138. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/qualify-lead.sh +156 -156
  139. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/schedule-demo.sh +181 -181
  140. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/send-message.sh +137 -137
  141. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/transfer-to-human.sh +179 -179
  142. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/create-campaign.sh +183 -183
  143. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/get-delivery-status.sh +139 -139
  144. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/opt-out.sh +150 -150
  145. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/schedule-campaign.sh +187 -187
  146. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/send-sms.sh +181 -181
  147. package/claude-assets/cfn-extras/skills/ui-portal/cfn-web-portal/test-web-portal-skill.sh +50 -50
  148. package/claude-assets/cfn-extras/skills/ui-portal/cfn-web-portal/validate-deployment.sh +84 -84
  149. package/claude-assets/cfn-extras/skills/utility/cfn-environment-sanitization/sanitize-environment.sh +243 -243
  150. package/claude-assets/commands/cfn-loop-cli.md +16 -2
  151. package/claude-assets/commands/switch-api.md +31 -10
  152. package/claude-assets/hooks/cfn-BACKUP_USAGE.md +243 -243
  153. package/claude-assets/hooks/cfn-invoke-security-validation.sh +69 -69
  154. package/claude-assets/hooks/cfn-lint-sql-injection.sh +61 -0
  155. package/claude-assets/hooks/cfn-post-edit-cfn-retrospective.sh +109 -78
  156. package/claude-assets/hooks/cfn-post-edit.config.json +44 -44
  157. package/claude-assets/hooks/cfn-post-execution/memory-cleanup.sh +19 -19
  158. package/claude-assets/hooks/cfn-pre-edit-security-warning.sh +40 -0
  159. package/claude-assets/hooks/cfn-pre-execution/memory-check.sh +19 -19
  160. package/claude-assets/hooks/detect-hardcoded-credentials.sh +212 -0
  161. package/claude-assets/skills/SKILL_TEMPLATE.md +774 -0
  162. package/claude-assets/skills/agent-lifecycle/execute-lifecycle-hook.sh +543 -572
  163. package/claude-assets/skills/agent-lifecycle/simple-audit.sh +57 -30
  164. package/claude-assets/skills/agent-template-generator/SKILL.md +440 -0
  165. package/claude-assets/skills/agent-template-generator/generate-agent.sh +405 -0
  166. package/claude-assets/skills/agent-validation-linter/SKILL.md +589 -0
  167. package/claude-assets/skills/agent-validation-linter/lint-agents.sh +271 -0
  168. package/claude-assets/skills/bootstrap/bash-fundamentals.md +786 -0
  169. package/claude-assets/skills/bootstrap/database-connection.md +464 -0
  170. package/claude-assets/skills/bootstrap/error-handling.md +580 -0
  171. package/claude-assets/skills/bootstrap/file-operations.md +699 -0
  172. package/claude-assets/skills/bootstrap/skill-loader.md +616 -0
  173. package/claude-assets/skills/bootstrap/sqlite-params.sh +287 -0
  174. package/claude-assets/skills/cfn-agent-spawning/spawn-agent.sh +22 -24
  175. package/claude-assets/skills/cfn-automatic-memory-persistence/persist-agent-output.sh +48 -48
  176. package/claude-assets/skills/cfn-automatic-memory-persistence/query-agent-history.sh +34 -34
  177. package/claude-assets/skills/cfn-automatic-memory-persistence/test-memory-persistence.sh +17 -16
  178. package/claude-assets/skills/cfn-deliverable-validation/confidence-calculator.sh +261 -261
  179. package/claude-assets/skills/cfn-deployment/SKILL.md +293 -0
  180. package/claude-assets/skills/cfn-deployment/execute.sh +21 -0
  181. package/claude-assets/skills/cfn-docker-agent-spawning/SKILL.md +28 -4
  182. package/claude-assets/skills/cfn-docker-agent-spawning/spawn-agent.sh +3 -1
  183. package/claude-assets/skills/cfn-docker-loop-orchestration/orchestrate.sh +224 -20
  184. package/claude-assets/skills/cfn-environment-sanitization/sanitize-environment.sh +38 -0
  185. package/claude-assets/skills/cfn-error-batching-strategy/lib/core-functions.sh +47 -47
  186. package/claude-assets/skills/cfn-expert-update/update-expert.sh +345 -345
  187. package/claude-assets/skills/cfn-file-operations/SKILL.md +290 -0
  188. package/claude-assets/skills/cfn-file-operations/execute.sh +129 -0
  189. package/claude-assets/skills/cfn-file-operations/lib/atomic-write.sh +294 -0
  190. package/claude-assets/skills/cfn-file-operations/lib/lock.sh +361 -0
  191. package/claude-assets/skills/cfn-file-operations/test.sh +369 -0
  192. package/claude-assets/skills/cfn-hybrid-routing/check-dependencies.sh +51 -51
  193. package/claude-assets/skills/cfn-intervention-detector/detect-intervention.sh +110 -110
  194. package/claude-assets/skills/cfn-intervention-orchestrator/execute-intervention.sh +58 -58
  195. package/claude-assets/skills/cfn-log-operations/SKILL.md +308 -0
  196. package/claude-assets/skills/cfn-log-operations/execute.sh +420 -0
  197. package/claude-assets/skills/cfn-log-operations/lib/rotate.sh +406 -0
  198. package/claude-assets/skills/cfn-log-operations/lib/search.sh +448 -0
  199. package/claude-assets/skills/cfn-log-operations/test.sh +394 -0
  200. package/claude-assets/skills/cfn-loop-orchestration/helpers/gate-check.sh +550 -46
  201. package/claude-assets/skills/cfn-loop-orchestration/helpers/parse-test-results.sh +277 -0
  202. package/claude-assets/skills/cfn-loop-orchestration/orchestrate.sh +184 -23
  203. package/claude-assets/skills/cfn-loop-orchestration/security_utils.sh +24 -0
  204. package/claude-assets/skills/cfn-loop-orchestration/test-iteration-context-injection.sh +366 -0
  205. package/claude-assets/skills/cfn-loop-validation/orchestrate-cfn-loop.sh +252 -252
  206. package/claude-assets/skills/cfn-loop2-output-processing/process-validator-output.sh +275 -275
  207. package/claude-assets/skills/cfn-memory-management/check-memory.sh +159 -159
  208. package/claude-assets/skills/cfn-memory-management/cleanup-memory.sh +196 -196
  209. package/claude-assets/skills/cfn-node-heap-sizer/task-mode-heap-limiter.sh +325 -325
  210. package/claude-assets/skills/cfn-parameterized-queries/SKILL.md +339 -0
  211. package/claude-assets/skills/cfn-playbook/query-playbook.sh +19 -15
  212. package/claude-assets/skills/cfn-playbook/update-playbook.sh +25 -14
  213. package/claude-assets/skills/cfn-playbook-auto-update/auto-update-playbook.sh +85 -85
  214. package/claude-assets/skills/cfn-process-instrumentation/instrument-process.sh +44 -0
  215. package/claude-assets/skills/cfn-promotion/SKILL.md +305 -0
  216. package/claude-assets/skills/cfn-redis-coordination/CENTRALIZED_REDIS_WRAPPER.md +319 -0
  217. package/claude-assets/skills/cfn-redis-coordination/agent-log.sh +4 -0
  218. package/claude-assets/skills/cfn-redis-coordination/agent-log.sh.bak +124 -0
  219. package/claude-assets/skills/cfn-redis-coordination/agent-recovery.sh +74 -74
  220. package/claude-assets/skills/cfn-redis-coordination/collect-confidence-scores.sh +30 -0
  221. package/claude-assets/skills/cfn-redis-coordination/get-context.sh +145 -112
  222. package/claude-assets/skills/cfn-redis-coordination/get-success-criteria.sh +54 -0
  223. package/claude-assets/skills/cfn-redis-coordination/invoke-waiting-mode.sh +3 -0
  224. package/claude-assets/skills/cfn-redis-coordination/redis-cli-wrapper.sh +24 -3
  225. package/claude-assets/skills/cfn-redis-coordination/redis-functions.sh +33 -0
  226. package/claude-assets/skills/cfn-redis-coordination/report-completion.sh +24 -31
  227. package/claude-assets/skills/cfn-redis-coordination/store-context.sh +4 -0
  228. package/claude-assets/skills/cfn-redis-coordination/store-success-criteria.sh +85 -0
  229. package/claude-assets/skills/cfn-redis-coordination/update-all-scripts.sh +67 -0
  230. package/claude-assets/skills/cfn-scope-simplifier/simplify-scope.sh +67 -67
  231. package/claude-assets/skills/cfn-skill-loader/SKILL.md +466 -0
  232. package/claude-assets/skills/cfn-skill-loader/execute.sh +344 -0
  233. package/claude-assets/skills/cfn-specialist-injection/recommend-specialist.sh +56 -56
  234. package/claude-assets/skills/cfn-sqlite-memory/ttl-cleanup.sh +17 -25
  235. package/claude-assets/skills/cfn-standardized-error-handling/capture-agent-error.sh +86 -86
  236. package/claude-assets/skills/cfn-standardized-error-handling/test-error-handling.sh +165 -165
  237. package/claude-assets/skills/cfn-task-audit/get-audit-data.sh +42 -21
  238. package/claude-assets/skills/cfn-task-audit/store-task-audit.sh +17 -10
  239. package/claude-assets/skills/cfn-task-config-init/initialize-config.sh +264 -264
  240. package/claude-assets/skills/cfn-task-decomposition/task-decomposer.sh +278 -278
  241. package/claude-assets/skills/cfn-test-runner/detect-regressions.sh +17 -14
  242. package/claude-assets/skills/cfn-test-runner/detect-regressions.sh.backup-1763392821 +55 -0
  243. package/claude-assets/skills/cfn-test-runner/store-benchmarks.sh +17 -19
  244. package/claude-assets/skills/cfn-transparency-middleware/middleware-config.sh +28 -28
  245. package/claude-assets/skills/cfn-transparency-middleware/performance-benchmark.sh +78 -78
  246. package/claude-assets/skills/cfn-transparency-middleware/test-e2e.sh +15 -0
  247. package/claude-assets/skills/cfn-transparency-middleware/test-integration.sh +161 -161
  248. package/claude-assets/skills/cfn-transparency-middleware/test-transparency-skill.sh +367 -367
  249. package/claude-assets/skills/cfn-transparency-middleware/tests/input-validation.sh +107 -92
  250. package/claude-assets/skills/cfn-transparency-middleware/wrap-agent.sh +131 -131
  251. package/claude-assets/skills/cfn-utilities/SKILL.md +237 -0
  252. package/claude-assets/skills/cfn-utilities/execute.sh +32 -0
  253. package/claude-assets/skills/cfn-utilities/lib/errors.sh +56 -0
  254. package/claude-assets/skills/cfn-utilities/lib/file-ops.sh +164 -0
  255. package/claude-assets/skills/cfn-utilities/lib/logging.sh +77 -0
  256. package/claude-assets/skills/cfn-utilities/lib/retry.sh +127 -0
  257. package/claude-assets/skills/cfn-utilities/test.sh +317 -0
  258. package/claude-assets/skills/docker-build/SKILL.md +96 -203
  259. package/claude-assets/skills/docker-build/build.sh +73 -73
  260. package/claude-assets/skills/integration/agent-handoff.sh +492 -0
  261. package/claude-assets/skills/integration/file-operations.sh +414 -0
  262. package/claude-assets/skills/json-validation/SKILL.md +431 -0
  263. package/claude-assets/skills/json-validation/test-validate-success-criteria.sh +421 -0
  264. package/claude-assets/skills/json-validation/validate-success-criteria.sh +197 -0
  265. package/claude-assets/skills/redis-coordination/validate-parameters.sh +34 -0
  266. package/claude-assets/skills/workflow-codification/APPROVAL_WORKFLOW.md +806 -0
  267. package/claude-assets/skills/workflow-codification/COST_TRACKING.md +637 -0
  268. package/claude-assets/skills/workflow-codification/DEPLOY_QUICK_REFERENCE.md +106 -0
  269. package/claude-assets/skills/workflow-codification/EDGE_CASE_TRACKING.md +404 -0
  270. package/claude-assets/skills/workflow-codification/PROPAGATE_UPDATE_QUICK_REFERENCE.md +366 -0
  271. package/claude-assets/skills/workflow-codification/README_PHASE4.md +457 -0
  272. package/claude-assets/skills/workflow-codification/SKILL.md +110 -0
  273. package/claude-assets/skills/workflow-codification/analyze-patterns.sh +899 -0
  274. package/claude-assets/skills/workflow-codification/approval-workflow.sh +514 -0
  275. package/claude-assets/skills/workflow-codification/deploy-approved-skill.sh +481 -0
  276. package/claude-assets/skills/workflow-codification/deploy-approved-skill.sh.backup-1763392820 +512 -0
  277. package/claude-assets/skills/workflow-codification/generate-skill-update.sh +525 -0
  278. package/claude-assets/skills/workflow-codification/lib/security-utils.sh +204 -0
  279. package/claude-assets/skills/workflow-codification/propagate-skill-update.sh +648 -0
  280. package/claude-assets/skills/workflow-codification/propagate-skill-update.sh.backup-1763392820 +664 -0
  281. package/claude-assets/skills/workflow-codification/review-skill.sh +643 -0
  282. package/claude-assets/skills/workflow-codification/templates/email-notification.txt +114 -0
  283. package/claude-assets/skills/workflow-codification/templates/slack-notification.md +85 -0
  284. package/claude-assets/skills/workflow-codification/test-integration.sh +296 -0
  285. package/claude-assets/skills/workflow-codification/test-metadata-update.sh +350 -0
  286. package/claude-assets/skills/workflow-codification/track-cost-savings.sh +486 -0
  287. package/claude-assets/skills/workflow-codification/track-cost-savings.sh.backup-1763392821 +445 -0
  288. package/claude-assets/skills/workflow-codification/track-edge-case.sh +290 -0
  289. package/claude-assets/skills/workflow-codification/workflow-codification.db +0 -0
  290. package/dist/ace/ace-curator.js +10 -2
  291. package/dist/ace/ace-curator.js.map +1 -1
  292. package/dist/ace/ace-generator.js +4 -0
  293. package/dist/ace/ace-generator.js.map +1 -1
  294. package/dist/ace/ace-reflector.js +1 -1
  295. package/dist/ace/ace-reflector.js.map +1 -1
  296. package/dist/ace/context-injection.js +24 -2
  297. package/dist/ace/context-injection.js.map +1 -1
  298. package/dist/agents/agent-loader.js +146 -165
  299. package/dist/agents/agent-loader.js.map +1 -1
  300. package/dist/agents/task-agent-integration.js +1 -1
  301. package/dist/agents/task-agent-integration.js.map +1 -1
  302. package/dist/api/health-endpoints.js +390 -0
  303. package/dist/api/health-endpoints.js.map +1 -0
  304. package/dist/cli/agent-executor.js +4 -1
  305. package/dist/cli/agent-executor.js.map +1 -1
  306. package/dist/cli/agent-prompt-builder.js +89 -1
  307. package/dist/cli/agent-prompt-builder.js.map +1 -1
  308. package/dist/cli/agent-spawn.js +130 -37
  309. package/dist/cli/agent-spawn.js.map +1 -1
  310. package/dist/cli/config-manager.js +91 -109
  311. package/dist/cli/config-manager.js.map +1 -1
  312. package/dist/cli/skill-cache-validator.js +412 -0
  313. package/dist/cli/skill-cache-validator.js.map +1 -0
  314. package/dist/cli/skill-cli.js +991 -0
  315. package/dist/cli/skill-cli.js.map +1 -0
  316. package/dist/cli/skill-execution-logger.js +284 -0
  317. package/dist/cli/skill-execution-logger.js.map +1 -0
  318. package/dist/cli/skill-loader.js +457 -0
  319. package/dist/cli/skill-loader.js.map +1 -0
  320. package/dist/coordination/event-bus.js +2 -2
  321. package/dist/coordination/event-bus.js.map +1 -1
  322. package/dist/coordination/fleet-manager.js +1 -1
  323. package/dist/coordination/fleet-manager.js.map +1 -1
  324. package/dist/coordination/index.js +23 -9
  325. package/dist/coordination/index.js.map +1 -1
  326. package/dist/coordination/types/fleet-manager.types.js.map +1 -1
  327. package/dist/db/migration-manager.js +483 -0
  328. package/dist/db/migration-manager.js.map +1 -0
  329. package/dist/db/skills-query.js +535 -0
  330. package/dist/db/skills-query.js.map +1 -0
  331. package/dist/integration/DatabaseHandoff.js +507 -0
  332. package/dist/integration/DatabaseHandoff.js.map +1 -0
  333. package/dist/integration/StandardAdapter.js +291 -0
  334. package/dist/integration/StandardAdapter.js.map +1 -0
  335. package/dist/jobs/edge-case-analyzer.js +367 -0
  336. package/dist/jobs/edge-case-analyzer.js.map +1 -0
  337. package/dist/jobs/promotion-sla-enforcer.js +288 -0
  338. package/dist/jobs/promotion-sla-enforcer.js.map +1 -0
  339. package/dist/lib/agent-output-parser.js +518 -0
  340. package/dist/lib/agent-output-parser.js.map +1 -0
  341. package/dist/lib/agent-output-validator.js +950 -0
  342. package/dist/lib/agent-output-validator.js.map +1 -0
  343. package/dist/lib/agent-workspace.js +281 -0
  344. package/dist/lib/agent-workspace.js.map +1 -0
  345. package/dist/lib/artifact-registry.js +443 -0
  346. package/dist/lib/artifact-registry.js.map +1 -0
  347. package/dist/lib/atomic-file-writer.js +377 -0
  348. package/dist/lib/atomic-file-writer.js.map +1 -0
  349. package/dist/lib/backup-manager.js +779 -0
  350. package/dist/lib/backup-manager.js.map +1 -0
  351. package/dist/lib/checkpoint-manager.js +837 -0
  352. package/dist/lib/checkpoint-manager.js.map +1 -0
  353. package/dist/lib/circuit-breaker.js +340 -0
  354. package/dist/lib/circuit-breaker.js.map +1 -0
  355. package/dist/lib/completion-signal-handler.js +243 -0
  356. package/dist/lib/completion-signal-handler.js.map +1 -0
  357. package/dist/lib/config-manager.js +312 -0
  358. package/dist/lib/config-manager.js.map +1 -0
  359. package/dist/lib/config-migrator.js +386 -0
  360. package/dist/lib/config-migrator.js.map +1 -0
  361. package/dist/lib/config-validator.js +687 -0
  362. package/dist/lib/config-validator.js.map +1 -0
  363. package/dist/lib/correlation-cache.js +311 -0
  364. package/dist/lib/correlation-cache.js.map +1 -0
  365. package/dist/lib/correlation.js +263 -0
  366. package/dist/lib/correlation.js.map +1 -0
  367. package/dist/lib/database-service/connection-pool-manager.js +520 -0
  368. package/dist/lib/database-service/connection-pool-manager.js.map +1 -0
  369. package/dist/lib/database-service/correlation.js +329 -0
  370. package/dist/lib/database-service/correlation.js.map +1 -0
  371. package/dist/lib/database-service/errors.js +120 -0
  372. package/dist/lib/database-service/errors.js.map +1 -0
  373. package/dist/lib/database-service/index.js +168 -0
  374. package/dist/lib/database-service/index.js.map +1 -0
  375. package/dist/lib/database-service/postgres-adapter.js +526 -0
  376. package/dist/lib/database-service/postgres-adapter.js.map +1 -0
  377. package/dist/lib/database-service/redis-adapter.js +360 -0
  378. package/dist/lib/database-service/redis-adapter.js.map +1 -0
  379. package/dist/lib/database-service/sqlite-adapter.js +544 -0
  380. package/dist/lib/database-service/sqlite-adapter.js.map +1 -0
  381. package/dist/lib/database-service/transaction-manager.js +773 -0
  382. package/dist/lib/database-service/transaction-manager.js.map +1 -0
  383. package/dist/lib/database-service/types.js +23 -0
  384. package/dist/lib/database-service/types.js.map +1 -0
  385. package/dist/lib/deadlock-resolver.js +292 -0
  386. package/dist/lib/deadlock-resolver.js.map +1 -0
  387. package/dist/lib/distributed-lock.js +451 -0
  388. package/dist/lib/distributed-lock.js.map +1 -0
  389. package/dist/lib/edge-case-deduplicator.js +227 -0
  390. package/dist/lib/edge-case-deduplicator.js.map +1 -0
  391. package/dist/lib/encryption-manager.js +322 -0
  392. package/dist/lib/encryption-manager.js.map +1 -0
  393. package/dist/lib/error-aggregator.js +234 -0
  394. package/dist/lib/error-aggregator.js.map +1 -0
  395. package/dist/lib/errors.js +287 -0
  396. package/dist/lib/errors.js.map +1 -0
  397. package/dist/lib/file-lock-manager.js +578 -0
  398. package/dist/lib/file-lock-manager.js.map +1 -0
  399. package/dist/lib/file-operations.js +367 -0
  400. package/dist/lib/file-operations.js.map +1 -0
  401. package/dist/lib/idempotent-write.js +237 -0
  402. package/dist/lib/idempotent-write.js.map +1 -0
  403. package/dist/lib/integration-schema-validator.js +522 -0
  404. package/dist/lib/integration-schema-validator.js.map +1 -0
  405. package/dist/lib/lock-health-monitor.js +298 -0
  406. package/dist/lib/lock-health-monitor.js.map +1 -0
  407. package/dist/lib/log-shipper.js +422 -0
  408. package/dist/lib/log-shipper.js.map +1 -0
  409. package/dist/lib/logging.js +146 -0
  410. package/dist/lib/logging.js.map +1 -0
  411. package/dist/lib/message-deduplicator.js +439 -0
  412. package/dist/lib/message-deduplicator.js.map +1 -0
  413. package/dist/lib/multi-system-query.js +604 -0
  414. package/dist/lib/multi-system-query.js.map +1 -0
  415. package/dist/lib/orphan-detector.js +332 -0
  416. package/dist/lib/orphan-detector.js.map +1 -0
  417. package/dist/lib/password-generator.js +166 -0
  418. package/dist/lib/password-generator.js.map +1 -0
  419. package/dist/lib/path-validator.js +429 -0
  420. package/dist/lib/path-validator.js.map +1 -0
  421. package/dist/lib/query-translator.js +905 -0
  422. package/dist/lib/query-translator.js.map +1 -0
  423. package/dist/lib/queue-recovery.js +469 -0
  424. package/dist/lib/queue-recovery.js.map +1 -0
  425. package/dist/lib/redis-queue-manager.js +512 -0
  426. package/dist/lib/redis-queue-manager.js.map +1 -0
  427. package/dist/lib/reflection-archiver.js +272 -0
  428. package/dist/lib/reflection-archiver.js.map +1 -0
  429. package/dist/lib/retry-manager.js +453 -0
  430. package/dist/lib/retry-manager.js.map +1 -0
  431. package/dist/lib/retry.js +262 -0
  432. package/dist/lib/retry.js.map +1 -0
  433. package/dist/lib/schema-transform.js +695 -0
  434. package/dist/lib/schema-transform.js.map +1 -0
  435. package/dist/lib/schema-validator.js +491 -0
  436. package/dist/lib/schema-validator.js.map +1 -0
  437. package/dist/lib/skill-cache.js +297 -0
  438. package/dist/lib/skill-cache.js.map +1 -0
  439. package/dist/lib/skill-content-manager.js +337 -0
  440. package/dist/lib/skill-content-manager.js.map +1 -0
  441. package/dist/lib/skill-frontmatter-parser.js +237 -0
  442. package/dist/lib/skill-frontmatter-parser.js.map +1 -0
  443. package/dist/lib/skill-git-integration.js +275 -0
  444. package/dist/lib/skill-git-integration.js.map +1 -0
  445. package/dist/lib/skill-markdown-validator.js +396 -0
  446. package/dist/lib/skill-markdown-validator.js.map +1 -0
  447. package/dist/lib/skill-output-parser.js +312 -0
  448. package/dist/lib/skill-output-parser.js.map +1 -0
  449. package/dist/lib/unified-query-api.js +467 -0
  450. package/dist/lib/unified-query-api.js.map +1 -0
  451. package/dist/middleware/auth-middleware.js +350 -0
  452. package/dist/middleware/auth-middleware.js.map +1 -0
  453. package/dist/middleware/schema-validation.js +347 -0
  454. package/dist/middleware/schema-validation.js.map +1 -0
  455. package/dist/providers/anthropic-provider.js +1 -1
  456. package/dist/providers/anthropic-provider.js.map +1 -1
  457. package/dist/providers/provider-factory.js +2 -2
  458. package/dist/providers/provider-factory.js.map +1 -1
  459. package/dist/services/edge-case-analyzer.js +321 -0
  460. package/dist/services/edge-case-analyzer.js.map +1 -0
  461. package/dist/services/edge-case-deduplicator.js +266 -0
  462. package/dist/services/edge-case-deduplicator.js.map +1 -0
  463. package/dist/services/edge-case-detector.js +337 -0
  464. package/dist/services/edge-case-detector.js.map +1 -0
  465. package/dist/services/edge-case-tracker.js +547 -0
  466. package/dist/services/edge-case-tracker.js.map +1 -0
  467. package/dist/services/health-check-system.js +586 -0
  468. package/dist/services/health-check-system.js.map +1 -0
  469. package/dist/services/metrics-logger.js +412 -0
  470. package/dist/services/metrics-logger.js.map +1 -0
  471. package/dist/services/patch-generator.js +378 -0
  472. package/dist/services/patch-generator.js.map +1 -0
  473. package/dist/services/patch-validator.js +337 -0
  474. package/dist/services/patch-validator.js.map +1 -0
  475. package/dist/services/performance-monitor.js +811 -0
  476. package/dist/services/performance-monitor.js.map +1 -0
  477. package/dist/services/promotion-pipeline.js +918 -0
  478. package/dist/services/promotion-pipeline.js.map +1 -0
  479. package/dist/services/promotion-validator.js +394 -0
  480. package/dist/services/promotion-validator.js.map +1 -0
  481. package/dist/services/reflection-logger.js +388 -0
  482. package/dist/services/reflection-logger.js.map +1 -0
  483. package/dist/services/skill-deployment.js +472 -0
  484. package/dist/services/skill-deployment.js.map +1 -0
  485. package/dist/services/skill-loader.js +427 -0
  486. package/dist/services/skill-loader.js.map +1 -0
  487. package/dist/services/skill-promotion.js +372 -0
  488. package/dist/services/skill-promotion.js.map +1 -0
  489. package/dist/services/skill-validator.js +454 -0
  490. package/dist/services/skill-validator.js.map +1 -0
  491. package/dist/services/skill-versioning.js +244 -0
  492. package/dist/services/skill-versioning.js.map +1 -0
  493. package/dist/services/workspace-supervisor.js +597 -0
  494. package/dist/services/workspace-supervisor.js.map +1 -0
  495. package/dist/types/agent-output.js +44 -0
  496. package/dist/types/agent-output.js.map +1 -0
  497. package/dist/types/config.js +28 -0
  498. package/dist/types/config.js.map +1 -0
  499. package/dist/types/edge-case.js +45 -0
  500. package/dist/types/edge-case.js.map +1 -0
  501. package/package.json +201 -176
  502. package/readme/README.md +19 -4
  503. package/scripts/artifact-cleanup.sh +392 -0
  504. package/scripts/backup-cleanup.sh +627 -0
  505. package/scripts/cleanup-workspaces.sh +412 -0
  506. package/scripts/cleanup-yaml-configs.sh +141 -0
  507. package/scripts/deploy-approved-skills.sh +263 -0
  508. package/scripts/deploy-production.sh +355 -355
  509. package/scripts/docker-playwright-fix.sh +311 -311
  510. package/scripts/docker-rebuild-all-agents.sh +127 -127
  511. package/scripts/health-check.sh +447 -0
  512. package/scripts/log-aggregator.sh +554 -0
  513. package/scripts/log-monitor.sh +629 -0
  514. package/scripts/manage-agent-workspaces.sh +434 -0
  515. package/scripts/memory-leak-prevention.sh +305 -305
  516. package/scripts/migrate-artifacts.sh +563 -0
  517. package/scripts/migrate-schema.sh +533 -0
  518. package/scripts/migrate-yaml-to-json.sh +465 -0
  519. package/scripts/promote-staged-skills.sh +423 -0
  520. package/scripts/run-marketing-tests.sh +42 -42
  521. package/scripts/update_paths.sh +46 -46
  522. package/scripts/verify-no-secrets.sh +88 -35
  523. package/.claude/cfn-extras/agents/deprecated-coordinators/adaptive-coordinator.md.backup +0 -161
  524. package/.claude/cfn-extras/agents/deprecated-coordinators/blocking-coordinator-example.md.backup +0 -728
  525. package/.claude/cfn-extras/agents/deprecated-coordinators/mesh-coordinator.md.backup +0 -131
  526. package/.claude/skills/cfn-agent-spawning/spawn-agent.sh.backup +0 -273
  527. package/.claude/skills/cfn-loop-orchestration/orchestrate.sh.backup +0 -949
  528. package/README.md.backup_before_replace +0 -781
  529. package/claude-assets/cfn-extras/agents/deprecated-coordinators/adaptive-coordinator.md.backup +0 -161
  530. package/claude-assets/cfn-extras/agents/deprecated-coordinators/blocking-coordinator-example.md.backup +0 -728
  531. package/claude-assets/cfn-extras/agents/deprecated-coordinators/mesh-coordinator.md.backup +0 -131
  532. package/claude-assets/skills/cfn-agent-spawning/spawn-agent.sh.backup +0 -273
  533. package/claude-assets/skills/cfn-loop-orchestration/orchestrate.sh.backup +0 -949
@@ -0,0 +1,337 @@
1
+ /**
2
+ * Patch Validator
3
+ * Part of Task 5.1: Edge Case Analyzer & Skill Patcher
4
+ *
5
+ * Validates patches in isolated environment before applying to production skills.
6
+ * Ensures safety through dry-run execution, automatic rollback, and backup integration.
7
+ *
8
+ * Features:
9
+ * - Dry-run execution in /tmp/patch-validation/
10
+ * - Automatic rollback on failure
11
+ * - Integration with BackupManager
12
+ * - Performance tracking (<5s target)
13
+ * - Success/failure detection
14
+ * - Comprehensive validation logging
15
+ *
16
+ * Safety Guarantees:
17
+ * - Original files never modified during validation
18
+ * - Backups created before any changes
19
+ * - Isolated validation environment
20
+ * - Automatic cleanup after validation
21
+ *
22
+ * Usage:
23
+ * const validator = new PatchValidator({ dbPath: './validation.db', backupManager });
24
+ * const result = await validator.validatePatch(patch, skillPath);
25
+ * if (result.status === ValidationStatus.SUCCESS) {
26
+ * // Proceed with deployment
27
+ * }
28
+ */ import * as fs from 'fs';
29
+ import * as path from 'path';
30
+ import * as crypto from 'crypto';
31
+ import { promisify } from 'util';
32
+ import Database from 'better-sqlite3';
33
+ import { createLogger } from '../lib/logging.js';
34
+ import { ErrorCode, createError } from '../lib/errors.js';
35
+ import { BackupType } from '../lib/backup-manager.js';
36
+ const logger = createLogger('patch-validator');
37
+ const fsReadFile = promisify(fs.readFile);
38
+ const fsWriteFile = promisify(fs.writeFile);
39
+ const fsMkdir = promisify(fs.mkdir);
40
+ const fsCopyFile = promisify(fs.copyFile);
41
+ const fsAccess = promisify(fs.access);
42
+ const fsRmdir = promisify(fs.rmdir);
43
+ const fsUnlink = promisify(fs.unlink);
44
+ /**
45
+ * Validation status
46
+ */ export var ValidationStatus = /*#__PURE__*/ function(ValidationStatus) {
47
+ ValidationStatus["SUCCESS"] = "SUCCESS";
48
+ ValidationStatus["FAILED"] = "FAILED";
49
+ ValidationStatus["SKIPPED"] = "SKIPPED";
50
+ return ValidationStatus;
51
+ }({});
52
+ /**
53
+ * Patch Validator Service
54
+ */ export class PatchValidator {
55
+ db;
56
+ validationDir;
57
+ backupManager;
58
+ constructor(config){
59
+ this.db = new Database(config.dbPath);
60
+ this.validationDir = config.validationDir || '/tmp/patch-validation';
61
+ this.backupManager = config.backupManager;
62
+ this.initializeDatabase();
63
+ }
64
+ /**
65
+ * Initialize database schema
66
+ */ initializeDatabase() {
67
+ this.db.exec(`
68
+ CREATE TABLE IF NOT EXISTS patch_validations (
69
+ id TEXT PRIMARY KEY,
70
+ patch_id TEXT NOT NULL,
71
+ status TEXT NOT NULL,
72
+ duration_ms INTEGER,
73
+ error_message TEXT,
74
+ validated_at TEXT DEFAULT CURRENT_TIMESTAMP
75
+ );
76
+
77
+ CREATE INDEX IF NOT EXISTS idx_patch_validations_patch ON patch_validations(patch_id);
78
+ CREATE INDEX IF NOT EXISTS idx_patch_validations_status ON patch_validations(status);
79
+ `);
80
+ }
81
+ /**
82
+ * Validate patch in isolated environment
83
+ *
84
+ * Process:
85
+ * 1. Create backup of original file
86
+ * 2. Copy file to isolated validation directory
87
+ * 3. Apply patch to isolated copy
88
+ * 4. Validate syntax (basic check)
89
+ * 5. Clean up isolated copy
90
+ * 6. Return result (original file untouched)
91
+ *
92
+ * Performance target: <5s
93
+ */ async validatePatch(patch, skillPath) {
94
+ const startTime = Date.now();
95
+ const validationId = crypto.randomUUID();
96
+ logger.info('Starting patch validation', {
97
+ patchId: patch.id,
98
+ skillPath,
99
+ validationId
100
+ });
101
+ try {
102
+ // Ensure validation directory exists
103
+ await this.ensureValidationDir();
104
+ // Check if original file exists
105
+ try {
106
+ await fsAccess(skillPath, fs.constants.R_OK);
107
+ } catch (error) {
108
+ throw createError(ErrorCode.FILE_NOT_FOUND, `Skill file not found: ${skillPath}`, {
109
+ skillPath
110
+ });
111
+ }
112
+ // Create backup of original file
113
+ logger.debug('Creating backup of original file', {
114
+ skillPath
115
+ });
116
+ await this.backupManager.createBackup(skillPath, {
117
+ agentId: 'patch-validator',
118
+ backupType: BackupType.PRE_EDIT,
119
+ metadata: {
120
+ patchId: patch.id,
121
+ validationId
122
+ }
123
+ });
124
+ // Copy file to isolated validation directory
125
+ const isolatedPath = path.join(this.validationDir, path.basename(skillPath));
126
+ await fsCopyFile(skillPath, isolatedPath);
127
+ logger.debug('Copied file to validation directory', {
128
+ original: skillPath,
129
+ isolated: isolatedPath
130
+ });
131
+ // Apply patch to isolated copy
132
+ await fsWriteFile(isolatedPath, patch.content, 'utf-8');
133
+ logger.debug('Applied patch to isolated copy', {
134
+ isolatedPath
135
+ });
136
+ // Validate syntax (basic check - try to read and parse)
137
+ try {
138
+ const patchedContent = await fsReadFile(isolatedPath, 'utf-8');
139
+ // Basic syntax validation (more sophisticated validation could be added)
140
+ if (!this.validateSyntax(patchedContent)) {
141
+ throw new Error('Syntax validation failed');
142
+ }
143
+ logger.debug('Syntax validation passed', {
144
+ isolatedPath
145
+ });
146
+ } catch (error) {
147
+ // Validation failed
148
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error';
149
+ logger.warn('Patch validation failed', {
150
+ patchId: patch.id,
151
+ error: errorMessage
152
+ });
153
+ // Clean up
154
+ await this.cleanupValidation(isolatedPath);
155
+ // Store validation result
156
+ const duration = Date.now() - startTime;
157
+ await this.storeValidationResult({
158
+ patchId: patch.id,
159
+ status: "FAILED",
160
+ durationMs: duration,
161
+ error: errorMessage,
162
+ validatedAt: new Date()
163
+ });
164
+ return {
165
+ patchId: patch.id,
166
+ status: "FAILED",
167
+ durationMs: duration,
168
+ error: errorMessage,
169
+ validatedAt: new Date()
170
+ };
171
+ }
172
+ // Clean up isolated copy
173
+ await this.cleanupValidation(isolatedPath);
174
+ // Validation successful
175
+ const duration = Date.now() - startTime;
176
+ logger.info('Patch validation successful', {
177
+ patchId: patch.id,
178
+ durationMs: duration
179
+ });
180
+ // Store validation result
181
+ await this.storeValidationResult({
182
+ patchId: patch.id,
183
+ status: "SUCCESS",
184
+ durationMs: duration,
185
+ validatedAt: new Date()
186
+ });
187
+ return {
188
+ patchId: patch.id,
189
+ status: "SUCCESS",
190
+ durationMs: duration,
191
+ validatedAt: new Date()
192
+ };
193
+ } catch (error) {
194
+ const duration = Date.now() - startTime;
195
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error';
196
+ logger.error('Patch validation error', error, {
197
+ patchId: patch.id,
198
+ durationMs: duration
199
+ });
200
+ // Store validation result
201
+ await this.storeValidationResult({
202
+ patchId: patch.id,
203
+ status: "FAILED",
204
+ durationMs: duration,
205
+ error: errorMessage,
206
+ validatedAt: new Date()
207
+ });
208
+ return {
209
+ patchId: patch.id,
210
+ status: "FAILED",
211
+ durationMs: duration,
212
+ error: errorMessage,
213
+ validatedAt: new Date()
214
+ };
215
+ }
216
+ }
217
+ /**
218
+ * Validate syntax (basic check)
219
+ */ validateSyntax(content) {
220
+ // Basic syntax checks
221
+ // 1. Check for balanced braces
222
+ const openBraces = (content.match(/{/g) || []).length;
223
+ const closeBraces = (content.match(/}/g) || []).length;
224
+ if (openBraces !== closeBraces) {
225
+ logger.debug('Unbalanced braces detected', {
226
+ openBraces,
227
+ closeBraces
228
+ });
229
+ return false;
230
+ }
231
+ // 2. Check for balanced parentheses
232
+ const openParens = (content.match(/\(/g) || []).length;
233
+ const closeParens = (content.match(/\)/g) || []).length;
234
+ if (openParens !== closeParens) {
235
+ logger.debug('Unbalanced parentheses detected', {
236
+ openParens,
237
+ closeParens
238
+ });
239
+ return false;
240
+ }
241
+ // 3. Check for basic structure (export, function, etc.)
242
+ if (!content.includes('export') && !content.includes('function')) {
243
+ logger.debug('Missing basic structure (export/function)');
244
+ return false;
245
+ }
246
+ return true;
247
+ }
248
+ /**
249
+ * Ensure validation directory exists
250
+ */ async ensureValidationDir() {
251
+ try {
252
+ await fsAccess(this.validationDir);
253
+ } catch {
254
+ // Directory doesn't exist, create it
255
+ await fsMkdir(this.validationDir, {
256
+ recursive: true
257
+ });
258
+ logger.debug('Created validation directory', {
259
+ validationDir: this.validationDir
260
+ });
261
+ }
262
+ }
263
+ /**
264
+ * Clean up validation files
265
+ */ async cleanupValidation(isolatedPath) {
266
+ try {
267
+ if (fs.existsSync(isolatedPath)) {
268
+ await fsUnlink(isolatedPath);
269
+ logger.debug('Cleaned up isolated file', {
270
+ isolatedPath
271
+ });
272
+ }
273
+ } catch (error) {
274
+ logger.warn('Failed to clean up validation file', error, {
275
+ isolatedPath
276
+ });
277
+ }
278
+ }
279
+ /**
280
+ * Store validation result
281
+ */ async storeValidationResult(result) {
282
+ this.db.prepare(`
283
+ INSERT INTO patch_validations (id, patch_id, status, duration_ms, error_message)
284
+ VALUES (?, ?, ?, ?, ?)
285
+ `).run(crypto.randomUUID(), result.patchId, result.status, result.durationMs, result.error || null);
286
+ }
287
+ /**
288
+ * Get validation result by patch ID
289
+ */ getValidationResult(patchId) {
290
+ const stmt = this.db.prepare(`
291
+ SELECT * FROM patch_validations
292
+ WHERE patch_id = ?
293
+ ORDER BY validated_at DESC
294
+ LIMIT 1
295
+ `);
296
+ const row = stmt.get(patchId);
297
+ if (!row) {
298
+ return undefined;
299
+ }
300
+ return {
301
+ patchId: row.patch_id,
302
+ status: row.status,
303
+ durationMs: row.duration_ms,
304
+ error: row.error_message,
305
+ validatedAt: new Date(row.validated_at)
306
+ };
307
+ }
308
+ /**
309
+ * Get validation statistics
310
+ */ getValidationStats() {
311
+ const totalStmt = this.db.prepare('SELECT COUNT(*) as count FROM patch_validations');
312
+ const totalResult = totalStmt.get();
313
+ const totalValidations = totalResult.count;
314
+ const successStmt = this.db.prepare("SELECT COUNT(*) as count FROM patch_validations WHERE status = 'SUCCESS'");
315
+ const successResult = successStmt.get();
316
+ const successCount = successResult.count;
317
+ const failureStmt = this.db.prepare("SELECT COUNT(*) as count FROM patch_validations WHERE status = 'FAILED'");
318
+ const failureResult = failureStmt.get();
319
+ const failureCount = failureResult.count;
320
+ const avgStmt = this.db.prepare('SELECT AVG(duration_ms) as avg FROM patch_validations');
321
+ const avgResult = avgStmt.get();
322
+ const averageDurationMs = avgResult.avg || 0;
323
+ return {
324
+ totalValidations,
325
+ successCount,
326
+ failureCount,
327
+ averageDurationMs: Math.round(averageDurationMs)
328
+ };
329
+ }
330
+ /**
331
+ * Close database connection
332
+ */ close() {
333
+ this.db.close();
334
+ }
335
+ }
336
+
337
+ //# sourceMappingURL=patch-validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/services/patch-validator.ts"],"sourcesContent":["/**\r\n * Patch Validator\r\n * Part of Task 5.1: Edge Case Analyzer & Skill Patcher\r\n *\r\n * Validates patches in isolated environment before applying to production skills.\r\n * Ensures safety through dry-run execution, automatic rollback, and backup integration.\r\n *\r\n * Features:\r\n * - Dry-run execution in /tmp/patch-validation/\r\n * - Automatic rollback on failure\r\n * - Integration with BackupManager\r\n * - Performance tracking (<5s target)\r\n * - Success/failure detection\r\n * - Comprehensive validation logging\r\n *\r\n * Safety Guarantees:\r\n * - Original files never modified during validation\r\n * - Backups created before any changes\r\n * - Isolated validation environment\r\n * - Automatic cleanup after validation\r\n *\r\n * Usage:\r\n * const validator = new PatchValidator({ dbPath: './validation.db', backupManager });\r\n * const result = await validator.validatePatch(patch, skillPath);\r\n * if (result.status === ValidationStatus.SUCCESS) {\r\n * // Proceed with deployment\r\n * }\r\n */\r\n\r\nimport * as fs from 'fs';\r\nimport * as path from 'path';\r\nimport * as crypto from 'crypto';\r\nimport { promisify } from 'util';\r\nimport Database from 'better-sqlite3';\r\nimport { createLogger } from '../lib/logging.js';\r\nimport { StandardError, ErrorCode, createError } from '../lib/errors.js';\r\nimport { BackupManager, BackupType } from '../lib/backup-manager.js';\r\nimport { Patch } from './patch-generator.js';\r\n\r\nconst logger = createLogger('patch-validator');\r\n\r\nconst fsReadFile = promisify(fs.readFile);\r\nconst fsWriteFile = promisify(fs.writeFile);\r\nconst fsMkdir = promisify(fs.mkdir);\r\nconst fsCopyFile = promisify(fs.copyFile);\r\nconst fsAccess = promisify(fs.access);\r\nconst fsRmdir = promisify(fs.rmdir);\r\nconst fsUnlink = promisify(fs.unlink);\r\n\r\n/**\r\n * Validation status\r\n */\r\nexport enum ValidationStatus {\r\n SUCCESS = 'SUCCESS',\r\n FAILED = 'FAILED',\r\n SKIPPED = 'SKIPPED',\r\n}\r\n\r\n/**\r\n * Validation result\r\n */\r\nexport interface ValidationResult {\r\n patchId: string;\r\n status: ValidationStatus;\r\n durationMs: number;\r\n error?: string;\r\n validatedAt: Date;\r\n}\r\n\r\n/**\r\n * Validation statistics\r\n */\r\nexport interface ValidationStats {\r\n totalValidations: number;\r\n successCount: number;\r\n failureCount: number;\r\n averageDurationMs: number;\r\n}\r\n\r\n/**\r\n * Validator configuration\r\n */\r\nexport interface PatchValidatorConfig {\r\n dbPath: string;\r\n validationDir?: string;\r\n backupManager: BackupManager;\r\n}\r\n\r\n/**\r\n * Patch Validator Service\r\n */\r\nexport class PatchValidator {\r\n private db: Database.Database;\r\n private validationDir: string;\r\n private backupManager: BackupManager;\r\n\r\n constructor(config: PatchValidatorConfig) {\r\n this.db = new Database(config.dbPath);\r\n this.validationDir = config.validationDir || '/tmp/patch-validation';\r\n this.backupManager = config.backupManager;\r\n this.initializeDatabase();\r\n }\r\n\r\n /**\r\n * Initialize database schema\r\n */\r\n private initializeDatabase(): void {\r\n this.db.exec(`\r\n CREATE TABLE IF NOT EXISTS patch_validations (\r\n id TEXT PRIMARY KEY,\r\n patch_id TEXT NOT NULL,\r\n status TEXT NOT NULL,\r\n duration_ms INTEGER,\r\n error_message TEXT,\r\n validated_at TEXT DEFAULT CURRENT_TIMESTAMP\r\n );\r\n\r\n CREATE INDEX IF NOT EXISTS idx_patch_validations_patch ON patch_validations(patch_id);\r\n CREATE INDEX IF NOT EXISTS idx_patch_validations_status ON patch_validations(status);\r\n `);\r\n }\r\n\r\n /**\r\n * Validate patch in isolated environment\r\n *\r\n * Process:\r\n * 1. Create backup of original file\r\n * 2. Copy file to isolated validation directory\r\n * 3. Apply patch to isolated copy\r\n * 4. Validate syntax (basic check)\r\n * 5. Clean up isolated copy\r\n * 6. Return result (original file untouched)\r\n *\r\n * Performance target: <5s\r\n */\r\n async validatePatch(patch: Patch, skillPath: string): Promise<ValidationResult> {\r\n const startTime = Date.now();\r\n const validationId = crypto.randomUUID();\r\n\r\n logger.info('Starting patch validation', {\r\n patchId: patch.id,\r\n skillPath,\r\n validationId,\r\n });\r\n\r\n try {\r\n // Ensure validation directory exists\r\n await this.ensureValidationDir();\r\n\r\n // Check if original file exists\r\n try {\r\n await fsAccess(skillPath, fs.constants.R_OK);\r\n } catch (error) {\r\n throw createError(\r\n ErrorCode.FILE_NOT_FOUND,\r\n `Skill file not found: ${skillPath}`,\r\n { skillPath }\r\n );\r\n }\r\n\r\n // Create backup of original file\r\n logger.debug('Creating backup of original file', { skillPath });\r\n await this.backupManager.createBackup(skillPath, {\r\n agentId: 'patch-validator',\r\n backupType: BackupType.PRE_EDIT,\r\n metadata: {\r\n patchId: patch.id,\r\n validationId,\r\n },\r\n });\r\n\r\n // Copy file to isolated validation directory\r\n const isolatedPath = path.join(this.validationDir, path.basename(skillPath));\r\n await fsCopyFile(skillPath, isolatedPath);\r\n\r\n logger.debug('Copied file to validation directory', {\r\n original: skillPath,\r\n isolated: isolatedPath,\r\n });\r\n\r\n // Apply patch to isolated copy\r\n await fsWriteFile(isolatedPath, patch.content, 'utf-8');\r\n\r\n logger.debug('Applied patch to isolated copy', { isolatedPath });\r\n\r\n // Validate syntax (basic check - try to read and parse)\r\n try {\r\n const patchedContent = await fsReadFile(isolatedPath, 'utf-8');\r\n\r\n // Basic syntax validation (more sophisticated validation could be added)\r\n if (!this.validateSyntax(patchedContent)) {\r\n throw new Error('Syntax validation failed');\r\n }\r\n\r\n logger.debug('Syntax validation passed', { isolatedPath });\r\n } catch (error) {\r\n // Validation failed\r\n const errorMessage = error instanceof Error ? error.message : 'Unknown error';\r\n\r\n logger.warn('Patch validation failed', {\r\n patchId: patch.id,\r\n error: errorMessage,\r\n });\r\n\r\n // Clean up\r\n await this.cleanupValidation(isolatedPath);\r\n\r\n // Store validation result\r\n const duration = Date.now() - startTime;\r\n await this.storeValidationResult({\r\n patchId: patch.id,\r\n status: ValidationStatus.FAILED,\r\n durationMs: duration,\r\n error: errorMessage,\r\n validatedAt: new Date(),\r\n });\r\n\r\n return {\r\n patchId: patch.id,\r\n status: ValidationStatus.FAILED,\r\n durationMs: duration,\r\n error: errorMessage,\r\n validatedAt: new Date(),\r\n };\r\n }\r\n\r\n // Clean up isolated copy\r\n await this.cleanupValidation(isolatedPath);\r\n\r\n // Validation successful\r\n const duration = Date.now() - startTime;\r\n\r\n logger.info('Patch validation successful', {\r\n patchId: patch.id,\r\n durationMs: duration,\r\n });\r\n\r\n // Store validation result\r\n await this.storeValidationResult({\r\n patchId: patch.id,\r\n status: ValidationStatus.SUCCESS,\r\n durationMs: duration,\r\n validatedAt: new Date(),\r\n });\r\n\r\n return {\r\n patchId: patch.id,\r\n status: ValidationStatus.SUCCESS,\r\n durationMs: duration,\r\n validatedAt: new Date(),\r\n };\r\n } catch (error) {\r\n const duration = Date.now() - startTime;\r\n const errorMessage = error instanceof Error ? error.message : 'Unknown error';\r\n\r\n logger.error('Patch validation error', error as Error, {\r\n patchId: patch.id,\r\n durationMs: duration,\r\n });\r\n\r\n // Store validation result\r\n await this.storeValidationResult({\r\n patchId: patch.id,\r\n status: ValidationStatus.FAILED,\r\n durationMs: duration,\r\n error: errorMessage,\r\n validatedAt: new Date(),\r\n });\r\n\r\n return {\r\n patchId: patch.id,\r\n status: ValidationStatus.FAILED,\r\n durationMs: duration,\r\n error: errorMessage,\r\n validatedAt: new Date(),\r\n };\r\n }\r\n }\r\n\r\n /**\r\n * Validate syntax (basic check)\r\n */\r\n private validateSyntax(content: string): boolean {\r\n // Basic syntax checks\r\n // 1. Check for balanced braces\r\n const openBraces = (content.match(/{/g) || []).length;\r\n const closeBraces = (content.match(/}/g) || []).length;\r\n\r\n if (openBraces !== closeBraces) {\r\n logger.debug('Unbalanced braces detected', { openBraces, closeBraces });\r\n return false;\r\n }\r\n\r\n // 2. Check for balanced parentheses\r\n const openParens = (content.match(/\\(/g) || []).length;\r\n const closeParens = (content.match(/\\)/g) || []).length;\r\n\r\n if (openParens !== closeParens) {\r\n logger.debug('Unbalanced parentheses detected', { openParens, closeParens });\r\n return false;\r\n }\r\n\r\n // 3. Check for basic structure (export, function, etc.)\r\n if (!content.includes('export') && !content.includes('function')) {\r\n logger.debug('Missing basic structure (export/function)');\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Ensure validation directory exists\r\n */\r\n private async ensureValidationDir(): Promise<void> {\r\n try {\r\n await fsAccess(this.validationDir);\r\n } catch {\r\n // Directory doesn't exist, create it\r\n await fsMkdir(this.validationDir, { recursive: true });\r\n logger.debug('Created validation directory', { validationDir: this.validationDir });\r\n }\r\n }\r\n\r\n /**\r\n * Clean up validation files\r\n */\r\n private async cleanupValidation(isolatedPath: string): Promise<void> {\r\n try {\r\n if (fs.existsSync(isolatedPath)) {\r\n await fsUnlink(isolatedPath);\r\n logger.debug('Cleaned up isolated file', { isolatedPath });\r\n }\r\n } catch (error) {\r\n logger.warn('Failed to clean up validation file', error as Error, { isolatedPath });\r\n }\r\n }\r\n\r\n /**\r\n * Store validation result\r\n */\r\n private async storeValidationResult(result: ValidationResult): Promise<void> {\r\n this.db\r\n .prepare(\r\n `\r\n INSERT INTO patch_validations (id, patch_id, status, duration_ms, error_message)\r\n VALUES (?, ?, ?, ?, ?)\r\n `\r\n )\r\n .run(\r\n crypto.randomUUID(),\r\n result.patchId,\r\n result.status,\r\n result.durationMs,\r\n result.error || null\r\n );\r\n }\r\n\r\n /**\r\n * Get validation result by patch ID\r\n */\r\n getValidationResult(patchId: string): ValidationResult | undefined {\r\n const stmt = this.db.prepare(`\r\n SELECT * FROM patch_validations\r\n WHERE patch_id = ?\r\n ORDER BY validated_at DESC\r\n LIMIT 1\r\n `);\r\n\r\n const row = stmt.get(patchId) as any;\r\n\r\n if (!row) {\r\n return undefined;\r\n }\r\n\r\n return {\r\n patchId: row.patch_id,\r\n status: row.status as ValidationStatus,\r\n durationMs: row.duration_ms,\r\n error: row.error_message,\r\n validatedAt: new Date(row.validated_at),\r\n };\r\n }\r\n\r\n /**\r\n * Get validation statistics\r\n */\r\n getValidationStats(): ValidationStats {\r\n const totalStmt = this.db.prepare('SELECT COUNT(*) as count FROM patch_validations');\r\n const totalResult = totalStmt.get() as any;\r\n const totalValidations = totalResult.count;\r\n\r\n const successStmt = this.db.prepare(\r\n \"SELECT COUNT(*) as count FROM patch_validations WHERE status = 'SUCCESS'\"\r\n );\r\n const successResult = successStmt.get() as any;\r\n const successCount = successResult.count;\r\n\r\n const failureStmt = this.db.prepare(\r\n \"SELECT COUNT(*) as count FROM patch_validations WHERE status = 'FAILED'\"\r\n );\r\n const failureResult = failureStmt.get() as any;\r\n const failureCount = failureResult.count;\r\n\r\n const avgStmt = this.db.prepare('SELECT AVG(duration_ms) as avg FROM patch_validations');\r\n const avgResult = avgStmt.get() as any;\r\n const averageDurationMs = avgResult.avg || 0;\r\n\r\n return {\r\n totalValidations,\r\n successCount,\r\n failureCount,\r\n averageDurationMs: Math.round(averageDurationMs),\r\n };\r\n }\r\n\r\n /**\r\n * Close database connection\r\n */\r\n close(): void {\r\n this.db.close();\r\n }\r\n}\r\n"],"names":["fs","path","crypto","promisify","Database","createLogger","ErrorCode","createError","BackupType","logger","fsReadFile","readFile","fsWriteFile","writeFile","fsMkdir","mkdir","fsCopyFile","copyFile","fsAccess","access","fsRmdir","rmdir","fsUnlink","unlink","ValidationStatus","PatchValidator","db","validationDir","backupManager","config","dbPath","initializeDatabase","exec","validatePatch","patch","skillPath","startTime","Date","now","validationId","randomUUID","info","patchId","id","ensureValidationDir","constants","R_OK","error","FILE_NOT_FOUND","debug","createBackup","agentId","backupType","PRE_EDIT","metadata","isolatedPath","join","basename","original","isolated","content","patchedContent","validateSyntax","Error","errorMessage","message","warn","cleanupValidation","duration","storeValidationResult","status","durationMs","validatedAt","openBraces","match","length","closeBraces","openParens","closeParens","includes","recursive","existsSync","result","prepare","run","getValidationResult","stmt","row","get","undefined","patch_id","duration_ms","error_message","validated_at","getValidationStats","totalStmt","totalResult","totalValidations","count","successStmt","successResult","successCount","failureStmt","failureResult","failureCount","avgStmt","avgResult","averageDurationMs","avg","Math","round","close"],"mappings":"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"}