claude-flow-novice 2.15.3 → 2.15.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (461) 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-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 +184 -23
  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 +3 -0
  55. package/.claude/skills/cfn-redis-coordination/redis-cli-wrapper.sh +24 -3
  56. package/.claude/skills/cfn-redis-coordination/redis-functions.sh +33 -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 +16 -2
  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 +184 -23
  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 +3 -0
  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 +33 -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/agent-loader.js +146 -165
  246. package/dist/agents/agent-loader.js.map +1 -1
  247. package/dist/agents/task-agent-integration.js +1 -1
  248. package/dist/agents/task-agent-integration.js.map +1 -1
  249. package/dist/api/health-endpoints.js +390 -0
  250. package/dist/api/health-endpoints.js.map +1 -0
  251. package/dist/cli/agent-executor.js +4 -1
  252. package/dist/cli/agent-executor.js.map +1 -1
  253. package/dist/cli/agent-prompt-builder.js +89 -1
  254. package/dist/cli/agent-prompt-builder.js.map +1 -1
  255. package/dist/cli/agent-spawn.js +130 -37
  256. package/dist/cli/agent-spawn.js.map +1 -1
  257. package/dist/cli/skill-cache-validator.js +412 -0
  258. package/dist/cli/skill-cache-validator.js.map +1 -0
  259. package/dist/cli/skill-cli.js +991 -0
  260. package/dist/cli/skill-cli.js.map +1 -0
  261. package/dist/cli/skill-execution-logger.js +284 -0
  262. package/dist/cli/skill-execution-logger.js.map +1 -0
  263. package/dist/cli/skill-loader.js +457 -0
  264. package/dist/cli/skill-loader.js.map +1 -0
  265. package/dist/coordination/event-bus.js +2 -2
  266. package/dist/coordination/event-bus.js.map +1 -1
  267. package/dist/coordination/fleet-manager.js +1 -1
  268. package/dist/coordination/fleet-manager.js.map +1 -1
  269. package/dist/coordination/index.js +23 -9
  270. package/dist/coordination/index.js.map +1 -1
  271. package/dist/coordination/types/fleet-manager.types.js.map +1 -1
  272. package/dist/db/migration-manager.js +483 -0
  273. package/dist/db/migration-manager.js.map +1 -0
  274. package/dist/db/skills-query.js +535 -0
  275. package/dist/db/skills-query.js.map +1 -0
  276. package/dist/integration/DatabaseHandoff.js +1 -1
  277. package/dist/integration/DatabaseHandoff.js.map +1 -1
  278. package/dist/jobs/edge-case-analyzer.js +367 -0
  279. package/dist/jobs/edge-case-analyzer.js.map +1 -0
  280. package/dist/jobs/promotion-sla-enforcer.js +288 -0
  281. package/dist/jobs/promotion-sla-enforcer.js.map +1 -0
  282. package/dist/lib/agent-output-parser.js.map +1 -1
  283. package/dist/lib/agent-output-validator.js.map +1 -1
  284. package/dist/lib/agent-workspace.js +281 -0
  285. package/dist/lib/agent-workspace.js.map +1 -0
  286. package/dist/lib/atomic-file-writer.js +377 -0
  287. package/dist/lib/atomic-file-writer.js.map +1 -0
  288. package/dist/lib/backup-manager.js +779 -0
  289. package/dist/lib/backup-manager.js.map +1 -0
  290. package/dist/lib/checkpoint-manager.js +837 -0
  291. package/dist/lib/checkpoint-manager.js.map +1 -0
  292. package/dist/lib/circuit-breaker.js +340 -0
  293. package/dist/lib/circuit-breaker.js.map +1 -0
  294. package/dist/lib/completion-signal-handler.js +243 -0
  295. package/dist/lib/completion-signal-handler.js.map +1 -0
  296. package/dist/lib/config-manager.js +312 -0
  297. package/dist/lib/config-manager.js.map +1 -0
  298. package/dist/lib/config-migrator.js +386 -0
  299. package/dist/lib/config-migrator.js.map +1 -0
  300. package/dist/lib/config-validator.js.map +1 -1
  301. package/dist/lib/correlation-cache.js +311 -0
  302. package/dist/lib/correlation-cache.js.map +1 -0
  303. package/dist/lib/correlation.js +263 -0
  304. package/dist/lib/correlation.js.map +1 -0
  305. package/dist/lib/database-service/connection-pool-manager.js +520 -0
  306. package/dist/lib/database-service/connection-pool-manager.js.map +1 -0
  307. package/dist/lib/database-service/correlation.js +329 -0
  308. package/dist/lib/database-service/correlation.js.map +1 -0
  309. package/dist/lib/database-service/errors.js +120 -0
  310. package/dist/lib/database-service/errors.js.map +1 -0
  311. package/dist/lib/database-service/index.js +168 -0
  312. package/dist/lib/database-service/index.js.map +1 -0
  313. package/dist/lib/database-service/postgres-adapter.js +526 -0
  314. package/dist/lib/database-service/postgres-adapter.js.map +1 -0
  315. package/dist/lib/database-service/redis-adapter.js +360 -0
  316. package/dist/lib/database-service/redis-adapter.js.map +1 -0
  317. package/dist/lib/database-service/sqlite-adapter.js +544 -0
  318. package/dist/lib/database-service/sqlite-adapter.js.map +1 -0
  319. package/dist/lib/database-service/transaction-manager.js +773 -0
  320. package/dist/lib/database-service/transaction-manager.js.map +1 -0
  321. package/dist/lib/database-service/types.js +23 -0
  322. package/dist/lib/database-service/types.js.map +1 -0
  323. package/dist/lib/deadlock-resolver.js +292 -0
  324. package/dist/lib/deadlock-resolver.js.map +1 -0
  325. package/dist/lib/distributed-lock.js +451 -0
  326. package/dist/lib/distributed-lock.js.map +1 -0
  327. package/dist/lib/edge-case-deduplicator.js +227 -0
  328. package/dist/lib/edge-case-deduplicator.js.map +1 -0
  329. package/dist/lib/encryption-manager.js +322 -0
  330. package/dist/lib/encryption-manager.js.map +1 -0
  331. package/dist/lib/error-aggregator.js +234 -0
  332. package/dist/lib/error-aggregator.js.map +1 -0
  333. package/dist/lib/errors.js +287 -0
  334. package/dist/lib/errors.js.map +1 -0
  335. package/dist/lib/file-lock-manager.js +578 -0
  336. package/dist/lib/file-lock-manager.js.map +1 -0
  337. package/dist/lib/file-operations.js +367 -0
  338. package/dist/lib/file-operations.js.map +1 -0
  339. package/dist/lib/idempotent-write.js +237 -0
  340. package/dist/lib/idempotent-write.js.map +1 -0
  341. package/dist/lib/integration-schema-validator.js +522 -0
  342. package/dist/lib/integration-schema-validator.js.map +1 -0
  343. package/dist/lib/lock-health-monitor.js +298 -0
  344. package/dist/lib/lock-health-monitor.js.map +1 -0
  345. package/dist/lib/log-shipper.js +422 -0
  346. package/dist/lib/log-shipper.js.map +1 -0
  347. package/dist/lib/logging.js +146 -0
  348. package/dist/lib/logging.js.map +1 -0
  349. package/dist/lib/message-deduplicator.js +439 -0
  350. package/dist/lib/message-deduplicator.js.map +1 -0
  351. package/dist/lib/multi-system-query.js +604 -0
  352. package/dist/lib/multi-system-query.js.map +1 -0
  353. package/dist/lib/orphan-detector.js +332 -0
  354. package/dist/lib/orphan-detector.js.map +1 -0
  355. package/dist/lib/password-generator.js +166 -0
  356. package/dist/lib/password-generator.js.map +1 -0
  357. package/dist/lib/path-validator.js +429 -0
  358. package/dist/lib/path-validator.js.map +1 -0
  359. package/dist/lib/query-translator.js +905 -0
  360. package/dist/lib/query-translator.js.map +1 -0
  361. package/dist/lib/queue-recovery.js +469 -0
  362. package/dist/lib/queue-recovery.js.map +1 -0
  363. package/dist/lib/redis-queue-manager.js +512 -0
  364. package/dist/lib/redis-queue-manager.js.map +1 -0
  365. package/dist/lib/reflection-archiver.js +272 -0
  366. package/dist/lib/reflection-archiver.js.map +1 -0
  367. package/dist/lib/retry-manager.js +453 -0
  368. package/dist/lib/retry-manager.js.map +1 -0
  369. package/dist/lib/retry.js +262 -0
  370. package/dist/lib/retry.js.map +1 -0
  371. package/dist/lib/schema-transform.js +695 -0
  372. package/dist/lib/schema-transform.js.map +1 -0
  373. package/dist/lib/schema-validator.js +491 -0
  374. package/dist/lib/schema-validator.js.map +1 -0
  375. package/dist/lib/skill-cache.js +297 -0
  376. package/dist/lib/skill-cache.js.map +1 -0
  377. package/dist/lib/skill-content-manager.js +337 -0
  378. package/dist/lib/skill-content-manager.js.map +1 -0
  379. package/dist/lib/skill-frontmatter-parser.js +237 -0
  380. package/dist/lib/skill-frontmatter-parser.js.map +1 -0
  381. package/dist/lib/skill-git-integration.js +275 -0
  382. package/dist/lib/skill-git-integration.js.map +1 -0
  383. package/dist/lib/skill-markdown-validator.js +396 -0
  384. package/dist/lib/skill-markdown-validator.js.map +1 -0
  385. package/dist/lib/skill-output-parser.js +312 -0
  386. package/dist/lib/skill-output-parser.js.map +1 -0
  387. package/dist/lib/unified-query-api.js +467 -0
  388. package/dist/lib/unified-query-api.js.map +1 -0
  389. package/dist/middleware/auth-middleware.js +350 -0
  390. package/dist/middleware/auth-middleware.js.map +1 -0
  391. package/dist/middleware/schema-validation.js +347 -0
  392. package/dist/middleware/schema-validation.js.map +1 -0
  393. package/dist/providers/anthropic-provider.js +1 -1
  394. package/dist/providers/anthropic-provider.js.map +1 -1
  395. package/dist/providers/provider-factory.js +2 -2
  396. package/dist/providers/provider-factory.js.map +1 -1
  397. package/dist/services/edge-case-analyzer.js +321 -0
  398. package/dist/services/edge-case-analyzer.js.map +1 -0
  399. package/dist/services/edge-case-deduplicator.js +266 -0
  400. package/dist/services/edge-case-deduplicator.js.map +1 -0
  401. package/dist/services/edge-case-detector.js +337 -0
  402. package/dist/services/edge-case-detector.js.map +1 -0
  403. package/dist/services/edge-case-tracker.js +547 -0
  404. package/dist/services/edge-case-tracker.js.map +1 -0
  405. package/dist/services/health-check-system.js +586 -0
  406. package/dist/services/health-check-system.js.map +1 -0
  407. package/dist/services/metrics-logger.js +412 -0
  408. package/dist/services/metrics-logger.js.map +1 -0
  409. package/dist/services/patch-generator.js +378 -0
  410. package/dist/services/patch-generator.js.map +1 -0
  411. package/dist/services/patch-validator.js +337 -0
  412. package/dist/services/patch-validator.js.map +1 -0
  413. package/dist/services/performance-monitor.js +811 -0
  414. package/dist/services/performance-monitor.js.map +1 -0
  415. package/dist/services/promotion-pipeline.js +918 -0
  416. package/dist/services/promotion-pipeline.js.map +1 -0
  417. package/dist/services/promotion-validator.js +394 -0
  418. package/dist/services/promotion-validator.js.map +1 -0
  419. package/dist/services/reflection-logger.js +388 -0
  420. package/dist/services/reflection-logger.js.map +1 -0
  421. package/dist/services/skill-deployment.js +472 -0
  422. package/dist/services/skill-deployment.js.map +1 -0
  423. package/dist/services/skill-loader.js +427 -0
  424. package/dist/services/skill-loader.js.map +1 -0
  425. package/dist/services/skill-promotion.js +372 -0
  426. package/dist/services/skill-promotion.js.map +1 -0
  427. package/dist/services/skill-validator.js +454 -0
  428. package/dist/services/skill-validator.js.map +1 -0
  429. package/dist/services/skill-versioning.js +244 -0
  430. package/dist/services/skill-versioning.js.map +1 -0
  431. package/dist/services/workspace-supervisor.js +597 -0
  432. package/dist/services/workspace-supervisor.js.map +1 -0
  433. package/dist/types/edge-case.js +45 -0
  434. package/dist/types/edge-case.js.map +1 -0
  435. package/package.json +201 -177
  436. package/readme/README.md +19 -4
  437. package/scripts/backup-cleanup.sh +627 -0
  438. package/scripts/cleanup-workspaces.sh +412 -0
  439. package/scripts/cleanup-yaml-configs.sh +141 -0
  440. package/scripts/deploy-approved-skills.sh +263 -0
  441. package/scripts/health-check.sh +447 -0
  442. package/scripts/log-aggregator.sh +554 -0
  443. package/scripts/log-monitor.sh +629 -0
  444. package/scripts/manage-agent-workspaces.sh +434 -0
  445. package/scripts/migrate-schema.sh +533 -0
  446. package/scripts/promote-staged-skills.sh +423 -0
  447. package/scripts/verify-no-secrets.sh +88 -35
  448. package/.claude/cfn-extras/agents/deprecated-coordinators/adaptive-coordinator.md.backup +0 -161
  449. package/.claude/cfn-extras/agents/deprecated-coordinators/blocking-coordinator-example.md.backup +0 -728
  450. package/.claude/cfn-extras/agents/deprecated-coordinators/mesh-coordinator.md.backup +0 -131
  451. package/.claude/skills/agent-lifecycle/SKILL.md +0 -60
  452. package/.claude/skills/agent-lifecycle/execute-lifecycle-hook.sh +0 -573
  453. package/.claude/skills/agent-lifecycle/simple-audit.sh +0 -31
  454. package/.claude/skills/cfn-agent-spawning/spawn-agent.sh.backup +0 -273
  455. package/.claude/skills/cfn-loop-orchestration/orchestrate.sh.backup +0 -949
  456. package/README.md.backup_before_replace +0 -781
  457. package/claude-assets/cfn-extras/agents/deprecated-coordinators/adaptive-coordinator.md.backup +0 -161
  458. package/claude-assets/cfn-extras/agents/deprecated-coordinators/blocking-coordinator-example.md.backup +0 -728
  459. package/claude-assets/cfn-extras/agents/deprecated-coordinators/mesh-coordinator.md.backup +0 -131
  460. package/claude-assets/skills/cfn-agent-spawning/spawn-agent.sh.backup +0 -273
  461. package/claude-assets/skills/cfn-loop-orchestration/orchestrate.sh.backup +0 -949
@@ -1,10 +1,15 @@
1
1
  #!/bin/bash
2
2
  # Store test benchmarks in SQLite
3
+ # SECURITY: Uses Pattern B parameterized queries to prevent SQL injection
3
4
  set -euo pipefail
4
5
 
5
6
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
6
7
  PROJECT_ROOT="$(cd "$SCRIPT_DIR/../../.." && pwd)"
7
- DB_FILE="$PROJECT_ROOT/.artifacts/test-benchmarks.db"
8
+ # Allow DB_FILE override for testing (security: prevents modification of production DB during tests)
9
+ DB_FILE="${DB_FILE:-$PROJECT_ROOT/.artifacts/test-benchmarks.db}"
10
+
11
+ # Source sqlite parameter binding library
12
+ source "$PROJECT_ROOT/.claude/skills/bootstrap/sqlite-params.sh"
8
13
 
9
14
  # Parse arguments
10
15
  SUITE=""
@@ -32,24 +37,17 @@ done
32
37
 
33
38
  SUCCESS_RATE=$(awk "BEGIN {printf \"%.4f\", ($PASSED / $TOTAL)}")
34
39
 
35
- # Get or create suite ID
36
- SUITE_ID=$(sqlite3 "$DB_FILE" "SELECT id FROM test_suites WHERE name='$SUITE'")
40
+ # Get or create suite ID using parameterized query (Pattern B)
41
+ SUITE_ID=$(sqlite_select "$DB_FILE" "SELECT id FROM test_suites WHERE name = ?1" "$SUITE")
37
42
  if [ -z "$SUITE_ID" ]; then
38
- sqlite3 "$DB_FILE" "INSERT INTO test_suites (name) VALUES ('$SUITE')"
39
- SUITE_ID=$(sqlite3 "$DB_FILE" "SELECT last_insert_rowid()")
43
+ sqlite_insert "$DB_FILE" "INSERT INTO test_suites (name) VALUES (?1)" "$SUITE"
44
+ SUITE_ID=$(sqlite_select "$DB_FILE" "SELECT last_insert_rowid()")
40
45
  fi
41
46
 
42
- # Insert test run
43
- sqlite3 "$DB_FILE" << EOFSQL
44
- INSERT INTO test_runs (
45
- suite_id, git_commit, git_branch,
46
- total_tests, passed, failed, skipped,
47
- duration_seconds, success_rate
48
- ) VALUES (
49
- $SUITE_ID, '$COMMIT', '$BRANCH',
50
- $TOTAL, $PASSED, $FAILED, $SKIPPED,
51
- $DURATION, $SUCCESS_RATE
52
- );
53
- EOFSQL
54
-
55
- echo "✅ Benchmark stored (run_id: $(sqlite3 "$DB_FILE" "SELECT last_insert_rowid()"))"
47
+ # Insert test run using parameterized query (Pattern B)
48
+ sqlite_insert "$DB_FILE" \
49
+ "INSERT INTO test_runs (suite_id, git_commit, git_branch, total_tests, passed, failed, skipped, duration_seconds, success_rate) VALUES (?1, ?2, ?3, ?4, ?5, ?6, ?7, ?8, ?9)" \
50
+ "$SUITE_ID" "$COMMIT" "$BRANCH" "$TOTAL" "$PASSED" "$FAILED" "$SKIPPED" "$DURATION" "$SUCCESS_RATE"
51
+
52
+ RUN_ID=$(sqlite_select "$DB_FILE" "SELECT last_insert_rowid()")
53
+ echo "✅ Benchmark stored (run_id: $RUN_ID)"
@@ -4,6 +4,21 @@
4
4
 
5
5
  set -euo pipefail
6
6
 
7
+ # Input validation (SQL injection prevention)
8
+ validate_identifier() {
9
+ local input="$1"
10
+ local max_length="${2:-255}"
11
+ if ! [[ "$input" =~ ^[a-zA-Z0-9_-]+$ ]]; then
12
+ echo "ERROR: Invalid identifier (alphanumeric + underscore/hyphen only): $input" >&2
13
+ return 1
14
+ fi
15
+ if [ ${#input} -gt $max_length ]; then
16
+ echo "ERROR: Identifier exceeds max length ($max_length chars)" >&2
17
+ return 1
18
+ fi
19
+ return 0
20
+ }
21
+
7
22
  # Test configuration
8
23
  TEST_TASK_ID="e2e-test-$(date +%s)"
9
24
  TEST_AGENT_ID="backend-dev-e2e"
@@ -4,6 +4,21 @@
4
4
 
5
5
  set -euo pipefail
6
6
 
7
+ # Input validation (SQL injection prevention)
8
+ validate_identifier() {
9
+ local input="$1"
10
+ local max_length="${2:-255}"
11
+ if ! [[ "$input" =~ ^[a-zA-Z0-9_-]+$ ]]; then
12
+ echo "ERROR: Invalid identifier (alphanumeric + underscore/hyphen only): $input" >&2
13
+ return 1
14
+ fi
15
+ if [ ${#input} -gt $max_length ]; then
16
+ echo "ERROR: Identifier exceeds max length ($max_length chars)" >&2
17
+ return 1
18
+ fi
19
+ return 0
20
+ }
21
+
7
22
  # Source the main script to access validation functions
8
23
  source "$(dirname "$0")/.claude/skills/cfn-cfn-test-integration.sh"
9
24
 
@@ -0,0 +1,237 @@
1
+ # CFN Utilities Skill
2
+
3
+ ---
4
+ name: cfn-utilities
5
+ category: utilities
6
+ version: 1.0.0
7
+ tags: [bash, logging, error-handling, retry, file-operations, utilities]
8
+ ---
9
+
10
+ ## Description
11
+
12
+ Reusable bash utility functions for the CFN Loop system. Provides standardized logging, error handling, retry logic, and atomic file operations with zero external dependencies.
13
+
14
+ ## Purpose
15
+
16
+ - **Structured Logging**: JSON-formatted logs compatible with TypeScript logging system
17
+ - **Error Handling**: Consistent error management across bash scripts
18
+ - **Retry Logic**: Exponential backoff for transient failures
19
+ - **File Operations**: Atomic writes and file locking primitives
20
+
21
+ ## Dependencies
22
+
23
+ - POSIX-compliant bash (4.0+)
24
+ - Coreutils (standard Linux/macOS utilities)
25
+ - No external dependencies required
26
+
27
+ ## Usage
28
+
29
+ ### Direct Function Invocation
30
+
31
+ ```bash
32
+ # Source all utilities
33
+ source ./.claude/skills/cfn-utilities/execute.sh
34
+
35
+ # Use individual functions
36
+ log_info "Task started" '{"task_id":"abc123"}'
37
+ retry_with_backoff 3 2 curl https://api.example.com
38
+ atomic_write "/path/to/file.txt" "content here"
39
+ ```
40
+
41
+ ### Via Execute Script
42
+
43
+ ```bash
44
+ # Execute specific function
45
+ ./.claude/skills/cfn-utilities/execute.sh log_json "info" "Message" '{"key":"value"}'
46
+
47
+ # Source and call
48
+ source ./.claude/skills/cfn-utilities/execute.sh
49
+ log_error "Operation failed" '{"error_code":"E001"}'
50
+ ```
51
+
52
+ ## Available Functions
53
+
54
+ ### Logging (lib/logging.sh)
55
+
56
+ **log_json(level, message, context)**
57
+ ```bash
58
+ log_json "info" "Task started" '{"task_id":"abc123","agent":"backend-dev"}'
59
+ # Output: {"timestamp":"2025-11-15T20:00:00Z","level":"info","message":"Task started","context":{"task_id":"abc123","agent":"backend-dev"}}
60
+ ```
61
+
62
+ **log_info(message, context)**
63
+ ```bash
64
+ log_info "Processing file" '{"file":"data.txt"}'
65
+ ```
66
+
67
+ **log_warn(message, context)**
68
+ ```bash
69
+ log_warn "Deprecated function used" '{"function":"old_func"}'
70
+ ```
71
+
72
+ **log_error(message, context)**
73
+ ```bash
74
+ log_error "Failed to connect" '{"host":"api.example.com","code":500}'
75
+ ```
76
+
77
+ **log_debug(message, context)**
78
+ ```bash
79
+ export LOG_LEVEL=debug
80
+ log_debug "Variable state" '{"var":"value"}'
81
+ ```
82
+
83
+ ### Error Handling (lib/errors.sh)
84
+
85
+ **error_exit(message, exit_code, context)**
86
+ ```bash
87
+ error_exit "Database connection failed" 1 '{"db":"postgres"}'
88
+ ```
89
+
90
+ **error_handle(message, context)**
91
+ ```bash
92
+ if ! validate_input "$data"; then
93
+ error_handle "Invalid input" '{"input":"'$data'"}'
94
+ return 1
95
+ fi
96
+ ```
97
+
98
+ **is_error_code(expected_code)**
99
+ ```bash
100
+ curl https://api.example.com
101
+ if is_error_code 7; then
102
+ echo "Connection failed"
103
+ fi
104
+ ```
105
+
106
+ ### Retry Logic (lib/retry.sh)
107
+
108
+ **retry_with_backoff(max_attempts, base_delay_sec, command, args...)**
109
+ ```bash
110
+ # Retry curl with exponential backoff (2s, 4s, 8s)
111
+ retry_with_backoff 3 2 curl -f https://api.example.com/data
112
+
113
+ # Retry custom command
114
+ retry_with_backoff 5 1 cfn-spawn agent "backend-developer" --task "task"
115
+ ```
116
+
117
+ ### File Operations (lib/file-ops.sh)
118
+
119
+ **atomic_write(filepath, content)**
120
+ ```bash
121
+ atomic_write "/tmp/data.json" '{"status":"complete"}'
122
+ ```
123
+
124
+ **acquire_lock(lockfile, timeout_sec)**
125
+ ```bash
126
+ if acquire_lock "/tmp/resource.lock" 30; then
127
+ # Critical section
128
+ release_lock "/tmp/resource.lock"
129
+ fi
130
+ ```
131
+
132
+ **release_lock(lockfile)**
133
+ ```bash
134
+ release_lock "/tmp/resource.lock"
135
+ ```
136
+
137
+ **with_lock(lockfile, timeout_sec, command, args...)**
138
+ ```bash
139
+ with_lock "/tmp/database.lock" 60 ./scripts/migrate-db.sh
140
+ ```
141
+
142
+ ## Integration Points
143
+
144
+ ### TypeScript Compatibility
145
+
146
+ **Logging Format**:
147
+ - JSON output compatible with `src/utils/logging.ts`
148
+ - Correlation ID format matches TypeScript UUID generation
149
+ - Timestamp format: ISO 8601 (UTC)
150
+
151
+ **Error Codes**:
152
+ - Error codes align with `src/utils/errors.ts`
153
+ - Exit codes: 0=success, 1=general error, 2=usage error, 130=timeout
154
+
155
+ **File Locking**:
156
+ - Lock files use `.lock` extension (same as `src/utils/file-operations.ts`)
157
+ - Timeout behavior matches TypeScript implementation
158
+
159
+ ### CFN System Integration
160
+
161
+ **Used By**:
162
+ - `.claude/hooks/cfn-invoke-pre-edit.sh` - atomic backup creation
163
+ - `.claude/skills/cfn-coordination/` - structured logging
164
+ - `.claude/skills/cfn-loop-orchestration/orchestrate.sh` - retry logic
165
+ - All CFN agents - standardized error handling
166
+
167
+ **Correlation IDs**:
168
+ ```bash
169
+ # Generate correlation ID (compatible with TypeScript)
170
+ CORRELATION_ID=$(uuidgen 2>/dev/null || echo "$(date +%s)-$$-$RANDOM")
171
+ log_info "Request started" '{"correlation_id":"'$CORRELATION_ID'"}'
172
+ ```
173
+
174
+ ## Testing
175
+
176
+ ```bash
177
+ # Run all tests
178
+ ./.claude/skills/cfn-utilities/test.sh
179
+
180
+ # Expected output:
181
+ # PASS: log_json outputs valid JSON
182
+ # PASS: retry_with_backoff succeeds after failures
183
+ # PASS: atomic_write creates file atomically
184
+ # PASS: with_lock prevents concurrent execution
185
+ # All tests passed (15/15)
186
+ ```
187
+
188
+ ## Implementation Patterns
189
+
190
+ ### Safe Script Template
191
+
192
+ ```bash
193
+ #!/usr/bin/env bash
194
+ set -euo pipefail
195
+
196
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
197
+ source "$SCRIPT_DIR/.claude/skills/cfn-utilities/execute.sh"
198
+
199
+ main() {
200
+ log_info "Script started" '{"script":"'$(basename "$0")'"}'
201
+
202
+ retry_with_backoff 3 2 risky_operation || {
203
+ error_exit "Operation failed after retries" 1
204
+ }
205
+
206
+ atomic_write "/tmp/result.txt" "Success"
207
+ log_info "Script completed" '{"status":"success"}'
208
+ }
209
+
210
+ main "$@"
211
+ ```
212
+
213
+ ### Critical Section Pattern
214
+
215
+ ```bash
216
+ #!/usr/bin/env bash
217
+ source ./.claude/skills/cfn-utilities/execute.sh
218
+
219
+ # Ensure only one instance modifies shared resource
220
+ with_lock "/tmp/shared-resource.lock" 30 bash -c '
221
+ log_info "Updating shared resource"
222
+ echo "new data" >> /tmp/shared-resource.txt
223
+ log_info "Update complete"
224
+ '
225
+ ```
226
+
227
+ ## Best Practices
228
+
229
+ 1. **Always use structured logging** - Include context objects for debugging
230
+ 2. **Set strict mode** - Use `set -euo pipefail` in all scripts
231
+ 3. **Use atomic operations** - Prevent partial writes with atomic_write()
232
+ 4. **Implement retries** - Handle transient failures gracefully
233
+ 5. **Lock shared resources** - Prevent race conditions with file locks
234
+
235
+ ## Version History
236
+
237
+ - **1.0.0** (2025-11-15): Initial release with logging, errors, retry, and file ops
@@ -0,0 +1,32 @@
1
+ #!/usr/bin/env bash
2
+ # CFN Utilities - Main entry point
3
+ # Sources all utility libraries and provides function execution
4
+ # Usage: ./.claude/skills/cfn-utilities/execute.sh <function> <args>
5
+
6
+ set -euo pipefail
7
+
8
+ # Get script directory (absolute path)
9
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
10
+
11
+ # Source all utility libraries
12
+ source "$SCRIPT_DIR/lib/logging.sh"
13
+ source "$SCRIPT_DIR/lib/errors.sh"
14
+ source "$SCRIPT_DIR/lib/retry.sh"
15
+ source "$SCRIPT_DIR/lib/file-ops.sh"
16
+
17
+ # If script is executed directly (not sourced), run the requested function
18
+ if [ "${BASH_SOURCE[0]}" = "${0}" ]; then
19
+ if [ $# -eq 0 ]; then
20
+ echo "Usage: $0 <function> [args...]" >&2
21
+ echo "" >&2
22
+ echo "Available functions:" >&2
23
+ echo " Logging: log_json, log_info, log_warn, log_error, log_debug" >&2
24
+ echo " Errors: error_exit, error_handle, is_error_code" >&2
25
+ echo " Retry: retry_with_backoff, retry_fixed, retry_until_timeout" >&2
26
+ echo " File Ops: atomic_write, acquire_lock, release_lock, with_lock, is_locked" >&2
27
+ exit 2
28
+ fi
29
+
30
+ # Execute the requested function with its arguments
31
+ "$@"
32
+ fi
@@ -0,0 +1,56 @@
1
+ #!/usr/bin/env bash
2
+ # Error handling utilities for CFN system
3
+ # Compatible with TypeScript errors.ts conventions
4
+
5
+ # Source logging if not already loaded
6
+ if ! declare -f log_error >/dev/null 2>&1; then
7
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
8
+ source "$SCRIPT_DIR/logging.sh"
9
+ fi
10
+
11
+ # Log error and exit with specified code
12
+ # Usage: error_exit "message" exit_code '{"context":"json"}'
13
+ error_exit() {
14
+ local message="${1:-Unknown error}"
15
+ local exit_code="${2:-1}"
16
+ local context="${3:-{}}"
17
+
18
+ log_error "$message" "$context"
19
+ exit "$exit_code"
20
+ }
21
+
22
+ # Handle error without exiting (just log and return error code)
23
+ # Usage: error_handle "message" '{"context":"json"}' || return 1
24
+ error_handle() {
25
+ local message="${1:-Unknown error}"
26
+ local context="${2:-{}}"
27
+
28
+ log_error "$message" "$context"
29
+ return 1
30
+ }
31
+
32
+ # Check if exit code matches expected value
33
+ # Usage: some_command; EXITCODE=$?; if is_error_code $EXITCODE 7; then echo "Connection failed"; fi
34
+ is_error_code() {
35
+ local actual_code="${1:?Exit code required}"
36
+ local expected_code="${2:-1}"
37
+
38
+ [ "$actual_code" -eq "$expected_code" ]
39
+ }
40
+
41
+ # Capture error context from last failed command
42
+ # Usage: get_error_context
43
+ get_error_context() {
44
+ local exit_code=$?
45
+ local line_number="${BASH_LINENO[0]}"
46
+ local function_name="${FUNCNAME[1]}"
47
+
48
+ echo "{\"exit_code\":$exit_code,\"line\":$line_number,\"function\":\"$function_name\"}"
49
+ }
50
+
51
+ # Standard exit codes (compatible with TypeScript errors.ts)
52
+ readonly EXIT_SUCCESS=0
53
+ readonly EXIT_GENERAL_ERROR=1
54
+ readonly EXIT_USAGE_ERROR=2
55
+ readonly EXIT_TIMEOUT=130
56
+ readonly EXIT_INTERRUPT=143
@@ -0,0 +1,164 @@
1
+ #!/usr/bin/env bash
2
+ # Atomic file operations and locking for CFN system
3
+
4
+ # Source logging if not already loaded
5
+ if ! declare -f log_info >/dev/null 2>&1; then
6
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
7
+ source "$SCRIPT_DIR/logging.sh"
8
+ fi
9
+
10
+ # Atomic file write (write-then-move pattern)
11
+ # Usage: atomic_write "/path/to/file.txt" "content here"
12
+ atomic_write() {
13
+ local filepath="${1:?Filepath required}"
14
+ local content="${2:?Content required}"
15
+
16
+ # Create parent directory if needed
17
+ local dirpath
18
+ dirpath=$(dirname "$filepath")
19
+ mkdir -p "$dirpath"
20
+
21
+ # Write to temporary file first
22
+ local tmpfile
23
+ tmpfile="${filepath}.tmp.$$"
24
+
25
+ if ! echo "$content" > "$tmpfile"; then
26
+ log_error "Failed to write temporary file" "{\"file\":\"$tmpfile\"}"
27
+ rm -f "$tmpfile"
28
+ return 1
29
+ fi
30
+
31
+ # Atomic move
32
+ if ! mv "$tmpfile" "$filepath"; then
33
+ log_error "Failed to move temporary file" "{\"tmpfile\":\"$tmpfile\",\"target\":\"$filepath\"}"
34
+ rm -f "$tmpfile"
35
+ return 1
36
+ fi
37
+
38
+ log_debug "Atomic write succeeded" "{\"file\":\"$filepath\",\"bytes\":${#content}}"
39
+ return 0
40
+ }
41
+
42
+ # Acquire file lock with timeout
43
+ # Usage: if acquire_lock "/path/to/resource.lock" 30; then ... fi
44
+ acquire_lock() {
45
+ local lockfile="${1:?Lockfile required}"
46
+ local timeout_sec="${2:-30}"
47
+
48
+ local start_time
49
+ start_time=$(date +%s)
50
+ local end_time=$((start_time + timeout_sec))
51
+
52
+ # Create lock directory if needed
53
+ local lockdir
54
+ lockdir=$(dirname "$lockfile")
55
+ mkdir -p "$lockdir"
56
+
57
+ while [ "$(date +%s)" -lt "$end_time" ]; do
58
+ # Try to create lock file atomically
59
+ if (set -o noclobber; echo $$ > "$lockfile") 2>/dev/null; then
60
+ log_debug "Lock acquired" "{\"lockfile\":\"$lockfile\",\"pid\":$$}"
61
+ return 0
62
+ fi
63
+
64
+ # Check if lock holder is still alive
65
+ if [ -f "$lockfile" ]; then
66
+ local lock_pid
67
+ lock_pid=$(cat "$lockfile" 2>/dev/null || echo "")
68
+
69
+ if [ -n "$lock_pid" ] && ! kill -0 "$lock_pid" 2>/dev/null; then
70
+ log_warn "Stale lock detected, removing" "{\"lockfile\":\"$lockfile\",\"stale_pid\":$lock_pid}"
71
+ rm -f "$lockfile"
72
+ continue
73
+ fi
74
+ fi
75
+
76
+ # Wait before retry
77
+ sleep 0.5
78
+ done
79
+
80
+ log_error "Failed to acquire lock (timeout)" "{\"lockfile\":\"$lockfile\",\"timeout\":$timeout_sec}"
81
+ return 1
82
+ }
83
+
84
+ # Release file lock
85
+ # Usage: release_lock "/path/to/resource.lock"
86
+ release_lock() {
87
+ local lockfile="${1:?Lockfile required}"
88
+
89
+ if [ ! -f "$lockfile" ]; then
90
+ log_warn "Lock file does not exist" "{\"lockfile\":\"$lockfile\"}"
91
+ return 1
92
+ fi
93
+
94
+ # Verify we own the lock
95
+ local lock_pid
96
+ lock_pid=$(cat "$lockfile" 2>/dev/null || echo "")
97
+
98
+ if [ "$lock_pid" != "$$" ]; then
99
+ log_warn "Cannot release lock owned by another process" "{\"lockfile\":\"$lockfile\",\"owner\":$lock_pid,\"current\":$$}"
100
+ return 1
101
+ fi
102
+
103
+ if ! rm -f "$lockfile"; then
104
+ log_error "Failed to remove lock file" "{\"lockfile\":\"$lockfile\"}"
105
+ return 1
106
+ fi
107
+
108
+ log_debug "Lock released" "{\"lockfile\":\"$lockfile\",\"pid\":$$}"
109
+ return 0
110
+ }
111
+
112
+ # Execute command with file lock held
113
+ # Usage: with_lock "/path/to/resource.lock" timeout_sec command [args...]
114
+ with_lock() {
115
+ local lockfile="${1:?Lockfile required}"
116
+ local timeout_sec="${2:?Timeout required}"
117
+ shift 2
118
+ local command=("$@")
119
+
120
+ # Acquire lock
121
+ if ! acquire_lock "$lockfile" "$timeout_sec"; then
122
+ log_error "Failed to acquire lock for command execution" "{\"lockfile\":\"$lockfile\",\"command\":\"${command[0]}\"}"
123
+ return 1
124
+ fi
125
+
126
+ # Setup trap to release lock on exit
127
+ trap "release_lock '$lockfile'" EXIT INT TERM
128
+
129
+ # Execute command
130
+ local exit_code=0
131
+ "${command[@]}" || exit_code=$?
132
+
133
+ # Release lock
134
+ release_lock "$lockfile" || true
135
+
136
+ # Remove trap
137
+ trap - EXIT INT TERM
138
+
139
+ return $exit_code
140
+ }
141
+
142
+ # Check if file lock exists and is held by a living process
143
+ # Usage: if is_locked "/path/to/resource.lock"; then ... fi
144
+ is_locked() {
145
+ local lockfile="${1:?Lockfile required}"
146
+
147
+ if [ ! -f "$lockfile" ]; then
148
+ return 1
149
+ fi
150
+
151
+ local lock_pid
152
+ lock_pid=$(cat "$lockfile" 2>/dev/null || echo "")
153
+
154
+ if [ -z "$lock_pid" ]; then
155
+ return 1
156
+ fi
157
+
158
+ # Check if process is alive
159
+ if kill -0 "$lock_pid" 2>/dev/null; then
160
+ return 0 # Locked by living process
161
+ else
162
+ return 1 # Stale lock
163
+ fi
164
+ }
@@ -0,0 +1,77 @@
1
+ #!/usr/bin/env bash
2
+ # Structured logging utilities for CFN system
3
+ # Compatible with TypeScript logging.ts format
4
+
5
+ # Get current timestamp in ISO 8601 format (UTC)
6
+ get_timestamp() {
7
+ date -u +"%Y-%m-%dT%H:%M:%SZ"
8
+ }
9
+
10
+ # Output structured JSON log
11
+ # Usage: log_json "level" "message" '{"context":"json"}'
12
+ log_json() {
13
+ local level="${1:-info}"
14
+ local message="${2:-}"
15
+ local context="${3:-{}}"
16
+ local timestamp
17
+ timestamp=$(get_timestamp)
18
+
19
+ # Escape message for JSON (basic escaping)
20
+ message=$(echo "$message" | sed 's/"/\\"/g' | sed 's/\\/\\\\/g')
21
+
22
+ # Output JSON (ensure context is valid JSON)
23
+ if [ "$context" = "{}" ]; then
24
+ echo "{\"timestamp\":\"$timestamp\",\"level\":\"$level\",\"message\":\"$message\"}"
25
+ else
26
+ # Remove outer braces from context and merge
27
+ context_inner=$(echo "$context" | sed 's/^{//' | sed 's/}$//')
28
+ echo "{\"timestamp\":\"$timestamp\",\"level\":\"$level\",\"message\":\"$message\",\"context\":{$context_inner}}"
29
+ fi
30
+ }
31
+
32
+ # Info level log
33
+ # Usage: log_info "message" '{"key":"value"}'
34
+ log_info() {
35
+ local message="${1:-}"
36
+ local context="${2:-{}}"
37
+ log_json "info" "$message" "$context" >&2
38
+ }
39
+
40
+ # Warning level log
41
+ # Usage: log_warn "message" '{"key":"value"}'
42
+ log_warn() {
43
+ local message="${1:-}"
44
+ local context="${2:-{}}"
45
+ log_json "warn" "$message" "$context" >&2
46
+ }
47
+
48
+ # Error level log
49
+ # Usage: log_error "message" '{"key":"value"}'
50
+ log_error() {
51
+ local message="${1:-}"
52
+ local context="${2:-{}}"
53
+ log_json "error" "$message" "$context" >&2
54
+ }
55
+
56
+ # Debug level log (respects LOG_LEVEL env var)
57
+ # Usage: LOG_LEVEL=debug log_debug "message" '{"key":"value"}'
58
+ log_debug() {
59
+ local message="${1:-}"
60
+ local context="${2:-{}}"
61
+
62
+ # Only output if LOG_LEVEL is debug or trace
63
+ if [[ "${LOG_LEVEL:-info}" =~ ^(debug|trace)$ ]]; then
64
+ log_json "debug" "$message" "$context" >&2
65
+ fi
66
+ }
67
+
68
+ # Generate correlation ID (compatible with TypeScript UUID format)
69
+ # Usage: CORRELATION_ID=$(generate_correlation_id)
70
+ generate_correlation_id() {
71
+ # Try uuidgen first, fallback to timestamp+pid+random
72
+ if command -v uuidgen >/dev/null 2>&1; then
73
+ uuidgen | tr '[:upper:]' '[:lower:]'
74
+ else
75
+ echo "$(date +%s)-$$-$RANDOM"
76
+ fi
77
+ }