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,386 @@
1
+ /**
2
+ * Configuration Migrator
3
+ * Migrate legacy configuration formats to YAML
4
+ *
5
+ * @version 1.0.0
6
+ * @description Handles migration from JSON, ENV, and bash variable formats
7
+ */ import * as fs from 'fs/promises';
8
+ import * as path from 'path';
9
+ import * as yaml from 'js-yaml';
10
+ import Ajv from 'ajv';
11
+ /**
12
+ * ConfigMigrator - Convert legacy formats to YAML
13
+ */ export class ConfigMigrator {
14
+ schemaPath;
15
+ ajv;
16
+ constructor(schemaPath){
17
+ this.schemaPath = schemaPath;
18
+ this.ajv = new Ajv({
19
+ allErrors: true,
20
+ strict: false
21
+ });
22
+ }
23
+ /**
24
+ * Migrate JSON configuration to YAML
25
+ */ async migrateJsonToYaml(jsonPath, yamlPath, options = {}) {
26
+ const opts = {
27
+ dryRun: false,
28
+ createBackup: true,
29
+ validate: true,
30
+ ...options
31
+ };
32
+ try {
33
+ // Read JSON file
34
+ const jsonContent = await fs.readFile(jsonPath, 'utf-8');
35
+ const config = JSON.parse(jsonContent);
36
+ // Validate if schema provided
37
+ if (opts.validate && this.schemaPath) {
38
+ await this.validateConfig(config);
39
+ }
40
+ // Convert to YAML
41
+ const yamlContent = yaml.dump(config, {
42
+ indent: 2,
43
+ lineWidth: 80,
44
+ noRefs: true,
45
+ quotingType: "'"
46
+ });
47
+ // Dry run - return preview without writing
48
+ if (opts.dryRun) {
49
+ return yamlContent;
50
+ }
51
+ // Create backup of source file
52
+ if (opts.createBackup) {
53
+ await this.createBackup(jsonPath);
54
+ }
55
+ // Write YAML file
56
+ await fs.writeFile(yamlPath, yamlContent, 'utf-8');
57
+ return yamlContent;
58
+ } catch (error) {
59
+ if (error instanceof Error) {
60
+ throw new Error(`JSON to YAML migration failed: ${error.message}`);
61
+ }
62
+ throw error;
63
+ }
64
+ }
65
+ /**
66
+ * Migrate .env file to YAML
67
+ */ async migrateEnvToYaml(envPath, yamlPath, options = {}) {
68
+ const opts = {
69
+ dryRun: false,
70
+ createBackup: true,
71
+ validate: false,
72
+ ...options
73
+ };
74
+ try {
75
+ // Read ENV file
76
+ const envContent = await fs.readFile(envPath, 'utf-8');
77
+ // Parse ENV variables
78
+ const config = this.parseEnvFile(envContent);
79
+ // Convert flat structure to nested
80
+ const nestedConfig = this.unflattenObject(config);
81
+ // Validate if schema provided
82
+ if (opts.validate && this.schemaPath) {
83
+ await this.validateConfig(nestedConfig);
84
+ }
85
+ // Convert to YAML
86
+ const yamlContent = yaml.dump(nestedConfig, {
87
+ indent: 2,
88
+ lineWidth: 80,
89
+ noRefs: true
90
+ });
91
+ // Dry run - return preview
92
+ if (opts.dryRun) {
93
+ return yamlContent;
94
+ }
95
+ // Create backup
96
+ if (opts.createBackup) {
97
+ await this.createBackup(envPath);
98
+ }
99
+ // Write YAML file
100
+ await fs.writeFile(yamlPath, yamlContent, 'utf-8');
101
+ return yamlContent;
102
+ } catch (error) {
103
+ if (error instanceof Error) {
104
+ throw new Error(`ENV to YAML migration failed: ${error.message}`);
105
+ }
106
+ throw error;
107
+ }
108
+ }
109
+ /**
110
+ * Migrate bash variable file to YAML
111
+ */ async migrateBashToYaml(bashPath, yamlPath, options = {}) {
112
+ const opts = {
113
+ dryRun: false,
114
+ createBackup: true,
115
+ validate: false,
116
+ ...options
117
+ };
118
+ try {
119
+ // Read bash file
120
+ const bashContent = await fs.readFile(bashPath, 'utf-8');
121
+ // Parse bash variables
122
+ const config = this.parseBashFile(bashContent);
123
+ // Convert flat structure to nested
124
+ const nestedConfig = this.unflattenObject(config);
125
+ // Validate if schema provided
126
+ if (opts.validate && this.schemaPath) {
127
+ await this.validateConfig(nestedConfig);
128
+ }
129
+ // Convert to YAML
130
+ const yamlContent = yaml.dump(nestedConfig, {
131
+ indent: 2,
132
+ lineWidth: 80,
133
+ noRefs: true
134
+ });
135
+ // Dry run - return preview
136
+ if (opts.dryRun) {
137
+ return yamlContent;
138
+ }
139
+ // Create backup
140
+ if (opts.createBackup) {
141
+ await this.createBackup(bashPath);
142
+ }
143
+ // Write YAML file
144
+ await fs.writeFile(yamlPath, yamlContent, 'utf-8');
145
+ return yamlContent;
146
+ } catch (error) {
147
+ if (error instanceof Error) {
148
+ throw new Error(`Bash to YAML migration failed: ${error.message}`);
149
+ }
150
+ throw error;
151
+ }
152
+ }
153
+ /**
154
+ * Parse .env file into key-value pairs
155
+ */ parseEnvFile(content) {
156
+ const config = {};
157
+ const lines = content.split('\n');
158
+ for (const line of lines){
159
+ const trimmed = line.trim();
160
+ // Skip comments and empty lines
161
+ if (!trimmed || trimmed.startsWith('#')) {
162
+ continue;
163
+ }
164
+ // Parse KEY=value format
165
+ const match = trimmed.match(/^([A-Z_][A-Z0-9_]*)=(.*)$/);
166
+ if (match) {
167
+ const [, key, value] = match;
168
+ config[this.toCamelCase(key)] = this.inferType(value.trim());
169
+ }
170
+ }
171
+ return config;
172
+ }
173
+ /**
174
+ * Parse bash variable file
175
+ */ parseBashFile(content) {
176
+ const config = {};
177
+ const lines = content.split('\n');
178
+ for (const line of lines){
179
+ const trimmed = line.trim();
180
+ // Skip comments, empty lines, and shebang
181
+ if (!trimmed || trimmed.startsWith('#') || trimmed.startsWith('export ')) {
182
+ continue;
183
+ }
184
+ // Parse variable assignments
185
+ const match = trimmed.match(/^([A-Z_][A-Z0-9_]*)=["']?([^"']*)["']?$/);
186
+ if (match) {
187
+ const [, key, value] = match;
188
+ config[this.toCamelCase(key)] = this.inferType(value.trim());
189
+ }
190
+ }
191
+ return config;
192
+ }
193
+ /**
194
+ * Infer type from string value
195
+ */ inferType(value) {
196
+ // Remove quotes if present
197
+ const unquoted = value.replace(/^["']|["']$/g, '');
198
+ // Boolean
199
+ if (unquoted.toLowerCase() === 'true') return true;
200
+ if (unquoted.toLowerCase() === 'false') return false;
201
+ // Null
202
+ if (unquoted.toLowerCase() === 'null') return null;
203
+ // Number (integer)
204
+ if (/^-?\d+$/.test(unquoted)) {
205
+ return parseInt(unquoted, 10);
206
+ }
207
+ // Number (float)
208
+ if (/^-?\d+\.\d+$/.test(unquoted)) {
209
+ return parseFloat(unquoted);
210
+ }
211
+ // String
212
+ return unquoted;
213
+ }
214
+ /**
215
+ * Convert SCREAMING_SNAKE_CASE to camelCase
216
+ */ toCamelCase(str) {
217
+ return str.toLowerCase().replace(/_([a-z0-9])/g, (_, letter)=>letter.toUpperCase());
218
+ }
219
+ /**
220
+ * Convert flat object to nested structure
221
+ * Example: { databaseType: 'sqlite', databasePath: './data' }
222
+ * Becomes: { database: { type: 'sqlite', path: './data' } }
223
+ */ unflattenObject(flat) {
224
+ const nested = {};
225
+ // Group by common prefixes
226
+ for (const [key, value] of Object.entries(flat)){
227
+ // Try to detect nested structure by camelCase boundaries
228
+ const parts = this.splitCamelCase(key);
229
+ if (parts.length === 1) {
230
+ // No nesting detected
231
+ nested[key] = value;
232
+ } else if (parts.length === 2) {
233
+ // Two-level nesting: databaseType → database.type
234
+ const [prefix, suffix] = parts;
235
+ if (!(prefix in nested)) {
236
+ nested[prefix] = {};
237
+ }
238
+ if (typeof nested[prefix] === 'object') {
239
+ nested[prefix][suffix] = value;
240
+ }
241
+ } else if (parts.length >= 3) {
242
+ // Multi-level nesting: databasePoolMin → database.pool.min
243
+ let current = nested;
244
+ for(let i = 0; i < parts.length - 1; i++){
245
+ const part = parts[i];
246
+ if (!(part in current)) {
247
+ current[part] = {};
248
+ }
249
+ if (typeof current[part] !== 'object' || Array.isArray(current[part])) {
250
+ // Can't nest further, use flat key instead
251
+ nested[key] = value;
252
+ break;
253
+ }
254
+ current = current[part];
255
+ }
256
+ if (typeof current === 'object' && !Array.isArray(current)) {
257
+ current[parts[parts.length - 1]] = value;
258
+ }
259
+ }
260
+ }
261
+ return nested;
262
+ }
263
+ /**
264
+ * Split camelCase string into parts
265
+ */ splitCamelCase(str) {
266
+ // Handle common patterns: databaseType, redisHost, etc.
267
+ // Split on uppercase boundaries, keeping the uppercase letter
268
+ const parts = [];
269
+ let current = '';
270
+ for(let i = 0; i < str.length; i++){
271
+ const char = str[i];
272
+ if (char === char.toUpperCase() && char !== char.toLowerCase()) {
273
+ // Uppercase letter - start new part
274
+ if (current) {
275
+ parts.push(current.toLowerCase());
276
+ }
277
+ current = char;
278
+ } else {
279
+ current += char;
280
+ }
281
+ }
282
+ if (current) {
283
+ parts.push(current.toLowerCase());
284
+ }
285
+ return parts.length > 0 ? parts : [
286
+ str.toLowerCase()
287
+ ];
288
+ }
289
+ /**
290
+ * Validate configuration against schema
291
+ */ async validateConfig(config) {
292
+ if (!this.schemaPath) {
293
+ throw new Error('Schema path not provided for validation');
294
+ }
295
+ const schemaContent = await fs.readFile(this.schemaPath, 'utf-8');
296
+ const schema = JSON.parse(schemaContent);
297
+ const validate = this.ajv.compile(schema);
298
+ const valid = validate(config);
299
+ if (!valid) {
300
+ const errors = validate.errors?.map((err)=>`${err.instancePath} ${err.message}`).join(', ');
301
+ throw new Error(`Configuration validation failed: ${errors}`);
302
+ }
303
+ }
304
+ /**
305
+ * Create backup of file
306
+ */ async createBackup(filePath) {
307
+ const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
308
+ const ext = path.extname(filePath);
309
+ const base = path.basename(filePath, ext);
310
+ const dir = path.dirname(filePath);
311
+ const backupPath = path.join(dir, `${base}.${timestamp}.backup${ext}`);
312
+ await fs.copyFile(filePath, backupPath);
313
+ return backupPath;
314
+ }
315
+ /**
316
+ * Scan directory for legacy configuration files
317
+ */ async scanForLegacyConfigs(directory) {
318
+ const legacyFiles = [];
319
+ try {
320
+ const files = await fs.readdir(directory, {
321
+ withFileTypes: true
322
+ });
323
+ for (const file of files){
324
+ if (file.isFile()) {
325
+ const fullPath = path.join(directory, file.name);
326
+ // Check for legacy formats
327
+ if (file.name.endsWith('.json') || file.name === '.env' || file.name.endsWith('.env') || file.name.endsWith('.sh') && file.name.includes('config')) {
328
+ legacyFiles.push(fullPath);
329
+ }
330
+ }
331
+ }
332
+ } catch (error) {
333
+ // Directory doesn't exist or not accessible
334
+ return [];
335
+ }
336
+ return legacyFiles;
337
+ }
338
+ /**
339
+ * Batch migrate multiple files
340
+ */ async batchMigrate(files, outputDir, options = {}) {
341
+ const results = [];
342
+ for (const filePath of files){
343
+ const ext = path.extname(filePath);
344
+ const base = path.basename(filePath, ext);
345
+ const yamlPath = path.join(outputDir, `${base}.yml`);
346
+ try {
347
+ let preview;
348
+ if (ext === '.json') {
349
+ preview = await this.migrateJsonToYaml(filePath, yamlPath, options);
350
+ } else if (filePath.includes('.env')) {
351
+ preview = await this.migrateEnvToYaml(filePath, yamlPath, options);
352
+ } else if (ext === '.sh') {
353
+ preview = await this.migrateBashToYaml(filePath, yamlPath, options);
354
+ } else {
355
+ results.push({
356
+ success: false,
357
+ sourcePath: filePath,
358
+ targetPath: yamlPath,
359
+ errors: [
360
+ `Unsupported file format: ${ext}`
361
+ ]
362
+ });
363
+ continue;
364
+ }
365
+ results.push({
366
+ success: true,
367
+ sourcePath: filePath,
368
+ targetPath: yamlPath,
369
+ preview: options.dryRun ? preview : undefined
370
+ });
371
+ } catch (error) {
372
+ results.push({
373
+ success: false,
374
+ sourcePath: filePath,
375
+ targetPath: yamlPath,
376
+ errors: [
377
+ error instanceof Error ? error.message : 'Unknown error'
378
+ ]
379
+ });
380
+ }
381
+ }
382
+ return results;
383
+ }
384
+ }
385
+
386
+ //# sourceMappingURL=config-migrator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/lib/config-migrator.ts"],"sourcesContent":["/**\r\n * Configuration Migrator\r\n * Migrate legacy configuration formats to YAML\r\n *\r\n * @version 1.0.0\r\n * @description Handles migration from JSON, ENV, and bash variable formats\r\n */\r\n\r\nimport * as fs from 'fs/promises';\r\nimport * as path from 'path';\r\nimport * as yaml from 'js-yaml';\r\nimport Ajv from 'ajv';\r\nimport { ConfigSchema } from './config-manager.js';\r\n\r\nexport interface MigrationOptions {\r\n dryRun?: boolean;\r\n createBackup?: boolean;\r\n validate?: boolean;\r\n}\r\n\r\nexport interface MigrationResult {\r\n success: boolean;\r\n sourcePath: string;\r\n targetPath: string;\r\n backupPath?: string;\r\n preview?: string;\r\n errors?: string[];\r\n}\r\n\r\n/**\r\n * ConfigMigrator - Convert legacy formats to YAML\r\n */\r\nexport class ConfigMigrator {\r\n private schemaPath?: string;\r\n private ajv: Ajv;\r\n\r\n constructor(schemaPath?: string) {\r\n this.schemaPath = schemaPath;\r\n this.ajv = new Ajv({ allErrors: true, strict: false });\r\n }\r\n\r\n /**\r\n * Migrate JSON configuration to YAML\r\n */\r\n async migrateJsonToYaml(\r\n jsonPath: string,\r\n yamlPath: string,\r\n options: MigrationOptions = {}\r\n ): Promise<string> {\r\n const opts = {\r\n dryRun: false,\r\n createBackup: true,\r\n validate: true,\r\n ...options\r\n };\r\n\r\n try {\r\n // Read JSON file\r\n const jsonContent = await fs.readFile(jsonPath, 'utf-8');\r\n const config = JSON.parse(jsonContent) as ConfigSchema;\r\n\r\n // Validate if schema provided\r\n if (opts.validate && this.schemaPath) {\r\n await this.validateConfig(config);\r\n }\r\n\r\n // Convert to YAML\r\n const yamlContent = yaml.dump(config, {\r\n indent: 2,\r\n lineWidth: 80,\r\n noRefs: true,\r\n quotingType: \"'\"\r\n });\r\n\r\n // Dry run - return preview without writing\r\n if (opts.dryRun) {\r\n return yamlContent;\r\n }\r\n\r\n // Create backup of source file\r\n if (opts.createBackup) {\r\n await this.createBackup(jsonPath);\r\n }\r\n\r\n // Write YAML file\r\n await fs.writeFile(yamlPath, yamlContent, 'utf-8');\r\n\r\n return yamlContent;\r\n } catch (error) {\r\n if (error instanceof Error) {\r\n throw new Error(`JSON to YAML migration failed: ${error.message}`);\r\n }\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Migrate .env file to YAML\r\n */\r\n async migrateEnvToYaml(\r\n envPath: string,\r\n yamlPath: string,\r\n options: MigrationOptions = {}\r\n ): Promise<string> {\r\n const opts = {\r\n dryRun: false,\r\n createBackup: true,\r\n validate: false, // ENV files typically don't match schema directly\r\n ...options\r\n };\r\n\r\n try {\r\n // Read ENV file\r\n const envContent = await fs.readFile(envPath, 'utf-8');\r\n\r\n // Parse ENV variables\r\n const config = this.parseEnvFile(envContent);\r\n\r\n // Convert flat structure to nested\r\n const nestedConfig = this.unflattenObject(config);\r\n\r\n // Validate if schema provided\r\n if (opts.validate && this.schemaPath) {\r\n await this.validateConfig(nestedConfig);\r\n }\r\n\r\n // Convert to YAML\r\n const yamlContent = yaml.dump(nestedConfig, {\r\n indent: 2,\r\n lineWidth: 80,\r\n noRefs: true\r\n });\r\n\r\n // Dry run - return preview\r\n if (opts.dryRun) {\r\n return yamlContent;\r\n }\r\n\r\n // Create backup\r\n if (opts.createBackup) {\r\n await this.createBackup(envPath);\r\n }\r\n\r\n // Write YAML file\r\n await fs.writeFile(yamlPath, yamlContent, 'utf-8');\r\n\r\n return yamlContent;\r\n } catch (error) {\r\n if (error instanceof Error) {\r\n throw new Error(`ENV to YAML migration failed: ${error.message}`);\r\n }\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Migrate bash variable file to YAML\r\n */\r\n async migrateBashToYaml(\r\n bashPath: string,\r\n yamlPath: string,\r\n options: MigrationOptions = {}\r\n ): Promise<string> {\r\n const opts = {\r\n dryRun: false,\r\n createBackup: true,\r\n validate: false,\r\n ...options\r\n };\r\n\r\n try {\r\n // Read bash file\r\n const bashContent = await fs.readFile(bashPath, 'utf-8');\r\n\r\n // Parse bash variables\r\n const config = this.parseBashFile(bashContent);\r\n\r\n // Convert flat structure to nested\r\n const nestedConfig = this.unflattenObject(config);\r\n\r\n // Validate if schema provided\r\n if (opts.validate && this.schemaPath) {\r\n await this.validateConfig(nestedConfig);\r\n }\r\n\r\n // Convert to YAML\r\n const yamlContent = yaml.dump(nestedConfig, {\r\n indent: 2,\r\n lineWidth: 80,\r\n noRefs: true\r\n });\r\n\r\n // Dry run - return preview\r\n if (opts.dryRun) {\r\n return yamlContent;\r\n }\r\n\r\n // Create backup\r\n if (opts.createBackup) {\r\n await this.createBackup(bashPath);\r\n }\r\n\r\n // Write YAML file\r\n await fs.writeFile(yamlPath, yamlContent, 'utf-8');\r\n\r\n return yamlContent;\r\n } catch (error) {\r\n if (error instanceof Error) {\r\n throw new Error(`Bash to YAML migration failed: ${error.message}`);\r\n }\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Parse .env file into key-value pairs\r\n */\r\n private parseEnvFile(content: string): Record<string, any> {\r\n const config: Record<string, any> = {};\r\n const lines = content.split('\\n');\r\n\r\n for (const line of lines) {\r\n const trimmed = line.trim();\r\n\r\n // Skip comments and empty lines\r\n if (!trimmed || trimmed.startsWith('#')) {\r\n continue;\r\n }\r\n\r\n // Parse KEY=value format\r\n const match = trimmed.match(/^([A-Z_][A-Z0-9_]*)=(.*)$/);\r\n if (match) {\r\n const [, key, value] = match;\r\n config[this.toCamelCase(key)] = this.inferType(value.trim());\r\n }\r\n }\r\n\r\n return config;\r\n }\r\n\r\n /**\r\n * Parse bash variable file\r\n */\r\n private parseBashFile(content: string): Record<string, any> {\r\n const config: Record<string, any> = {};\r\n const lines = content.split('\\n');\r\n\r\n for (const line of lines) {\r\n const trimmed = line.trim();\r\n\r\n // Skip comments, empty lines, and shebang\r\n if (!trimmed || trimmed.startsWith('#') || trimmed.startsWith('export ')) {\r\n continue;\r\n }\r\n\r\n // Parse variable assignments\r\n const match = trimmed.match(/^([A-Z_][A-Z0-9_]*)=[\"']?([^\"']*)[\"']?$/);\r\n if (match) {\r\n const [, key, value] = match;\r\n config[this.toCamelCase(key)] = this.inferType(value.trim());\r\n }\r\n }\r\n\r\n return config;\r\n }\r\n\r\n /**\r\n * Infer type from string value\r\n */\r\n private inferType(value: string): any {\r\n // Remove quotes if present\r\n const unquoted = value.replace(/^[\"']|[\"']$/g, '');\r\n\r\n // Boolean\r\n if (unquoted.toLowerCase() === 'true') return true;\r\n if (unquoted.toLowerCase() === 'false') return false;\r\n\r\n // Null\r\n if (unquoted.toLowerCase() === 'null') return null;\r\n\r\n // Number (integer)\r\n if (/^-?\\d+$/.test(unquoted)) {\r\n return parseInt(unquoted, 10);\r\n }\r\n\r\n // Number (float)\r\n if (/^-?\\d+\\.\\d+$/.test(unquoted)) {\r\n return parseFloat(unquoted);\r\n }\r\n\r\n // String\r\n return unquoted;\r\n }\r\n\r\n /**\r\n * Convert SCREAMING_SNAKE_CASE to camelCase\r\n */\r\n private toCamelCase(str: string): string {\r\n return str\r\n .toLowerCase()\r\n .replace(/_([a-z0-9])/g, (_, letter) => letter.toUpperCase());\r\n }\r\n\r\n /**\r\n * Convert flat object to nested structure\r\n * Example: { databaseType: 'sqlite', databasePath: './data' }\r\n * Becomes: { database: { type: 'sqlite', path: './data' } }\r\n */\r\n private unflattenObject(flat: Record<string, any>): any {\r\n const nested: any = {};\r\n\r\n // Group by common prefixes\r\n for (const [key, value] of Object.entries(flat)) {\r\n // Try to detect nested structure by camelCase boundaries\r\n const parts = this.splitCamelCase(key);\r\n\r\n if (parts.length === 1) {\r\n // No nesting detected\r\n nested[key] = value;\r\n } else if (parts.length === 2) {\r\n // Two-level nesting: databaseType → database.type\r\n const [prefix, suffix] = parts;\r\n if (!(prefix in nested)) {\r\n nested[prefix] = {};\r\n }\r\n if (typeof nested[prefix] === 'object') {\r\n nested[prefix][suffix] = value;\r\n }\r\n } else if (parts.length >= 3) {\r\n // Multi-level nesting: databasePoolMin → database.pool.min\r\n let current = nested;\r\n for (let i = 0; i < parts.length - 1; i++) {\r\n const part = parts[i];\r\n if (!(part in current)) {\r\n current[part] = {};\r\n }\r\n if (typeof current[part] !== 'object' || Array.isArray(current[part])) {\r\n // Can't nest further, use flat key instead\r\n nested[key] = value;\r\n break;\r\n }\r\n current = current[part];\r\n }\r\n if (typeof current === 'object' && !Array.isArray(current)) {\r\n current[parts[parts.length - 1]] = value;\r\n }\r\n }\r\n }\r\n\r\n return nested;\r\n }\r\n\r\n /**\r\n * Split camelCase string into parts\r\n */\r\n private splitCamelCase(str: string): string[] {\r\n // Handle common patterns: databaseType, redisHost, etc.\r\n // Split on uppercase boundaries, keeping the uppercase letter\r\n const parts: string[] = [];\r\n let current = '';\r\n\r\n for (let i = 0; i < str.length; i++) {\r\n const char = str[i];\r\n\r\n if (char === char.toUpperCase() && char !== char.toLowerCase()) {\r\n // Uppercase letter - start new part\r\n if (current) {\r\n parts.push(current.toLowerCase());\r\n }\r\n current = char;\r\n } else {\r\n current += char;\r\n }\r\n }\r\n\r\n if (current) {\r\n parts.push(current.toLowerCase());\r\n }\r\n\r\n return parts.length > 0 ? parts : [str.toLowerCase()];\r\n }\r\n\r\n /**\r\n * Validate configuration against schema\r\n */\r\n private async validateConfig(config: ConfigSchema): Promise<void> {\r\n if (!this.schemaPath) {\r\n throw new Error('Schema path not provided for validation');\r\n }\r\n\r\n const schemaContent = await fs.readFile(this.schemaPath, 'utf-8');\r\n const schema = JSON.parse(schemaContent);\r\n\r\n const validate = this.ajv.compile(schema);\r\n const valid = validate(config);\r\n\r\n if (!valid) {\r\n const errors = validate.errors?.map(err =>\r\n `${err.instancePath} ${err.message}`\r\n ).join(', ');\r\n throw new Error(`Configuration validation failed: ${errors}`);\r\n }\r\n }\r\n\r\n /**\r\n * Create backup of file\r\n */\r\n private async createBackup(filePath: string): Promise<string> {\r\n const timestamp = new Date().toISOString().replace(/[:.]/g, '-');\r\n const ext = path.extname(filePath);\r\n const base = path.basename(filePath, ext);\r\n const dir = path.dirname(filePath);\r\n\r\n const backupPath = path.join(dir, `${base}.${timestamp}.backup${ext}`);\r\n\r\n await fs.copyFile(filePath, backupPath);\r\n\r\n return backupPath;\r\n }\r\n\r\n /**\r\n * Scan directory for legacy configuration files\r\n */\r\n async scanForLegacyConfigs(directory: string): Promise<string[]> {\r\n const legacyFiles: string[] = [];\r\n\r\n try {\r\n const files = await fs.readdir(directory, { withFileTypes: true });\r\n\r\n for (const file of files) {\r\n if (file.isFile()) {\r\n const fullPath = path.join(directory, file.name);\r\n\r\n // Check for legacy formats\r\n if (\r\n file.name.endsWith('.json') ||\r\n file.name === '.env' ||\r\n file.name.endsWith('.env') ||\r\n (file.name.endsWith('.sh') && file.name.includes('config'))\r\n ) {\r\n legacyFiles.push(fullPath);\r\n }\r\n }\r\n }\r\n } catch (error) {\r\n // Directory doesn't exist or not accessible\r\n return [];\r\n }\r\n\r\n return legacyFiles;\r\n }\r\n\r\n /**\r\n * Batch migrate multiple files\r\n */\r\n async batchMigrate(\r\n files: string[],\r\n outputDir: string,\r\n options: MigrationOptions = {}\r\n ): Promise<MigrationResult[]> {\r\n const results: MigrationResult[] = [];\r\n\r\n for (const filePath of files) {\r\n const ext = path.extname(filePath);\r\n const base = path.basename(filePath, ext);\r\n const yamlPath = path.join(outputDir, `${base}.yml`);\r\n\r\n try {\r\n let preview: string | undefined;\r\n\r\n if (ext === '.json') {\r\n preview = await this.migrateJsonToYaml(filePath, yamlPath, options);\r\n } else if (filePath.includes('.env')) {\r\n preview = await this.migrateEnvToYaml(filePath, yamlPath, options);\r\n } else if (ext === '.sh') {\r\n preview = await this.migrateBashToYaml(filePath, yamlPath, options);\r\n } else {\r\n results.push({\r\n success: false,\r\n sourcePath: filePath,\r\n targetPath: yamlPath,\r\n errors: [`Unsupported file format: ${ext}`]\r\n });\r\n continue;\r\n }\r\n\r\n results.push({\r\n success: true,\r\n sourcePath: filePath,\r\n targetPath: yamlPath,\r\n preview: options.dryRun ? preview : undefined\r\n });\r\n } catch (error) {\r\n results.push({\r\n success: false,\r\n sourcePath: filePath,\r\n targetPath: yamlPath,\r\n errors: [error instanceof Error ? error.message : 'Unknown error']\r\n });\r\n }\r\n }\r\n\r\n return results;\r\n }\r\n}\r\n"],"names":["fs","path","yaml","Ajv","ConfigMigrator","schemaPath","ajv","allErrors","strict","migrateJsonToYaml","jsonPath","yamlPath","options","opts","dryRun","createBackup","validate","jsonContent","readFile","config","JSON","parse","validateConfig","yamlContent","dump","indent","lineWidth","noRefs","quotingType","writeFile","error","Error","message","migrateEnvToYaml","envPath","envContent","parseEnvFile","nestedConfig","unflattenObject","migrateBashToYaml","bashPath","bashContent","parseBashFile","content","lines","split","line","trimmed","trim","startsWith","match","key","value","toCamelCase","inferType","unquoted","replace","toLowerCase","test","parseInt","parseFloat","str","_","letter","toUpperCase","flat","nested","Object","entries","parts","splitCamelCase","length","prefix","suffix","current","i","part","Array","isArray","char","push","schemaContent","schema","compile","valid","errors","map","err","instancePath","join","filePath","timestamp","Date","toISOString","ext","extname","base","basename","dir","dirname","backupPath","copyFile","scanForLegacyConfigs","directory","legacyFiles","files","readdir","withFileTypes","file","isFile","fullPath","name","endsWith","includes","batchMigrate","outputDir","results","preview","success","sourcePath","targetPath","undefined"],"mappings":"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"}