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
@@ -0,0 +1,290 @@
1
+ # File Operations Skill
2
+
3
+ Centralized file locking and atomic write operations for bash scripts.
4
+
5
+ **Part of Task 4.2: Centralized File Locking & Atomic Operations**
6
+
7
+ ## Overview
8
+
9
+ This skill provides:
10
+ - **File Locking**: Acquire, release, and renew locks with queuing
11
+ - **Atomic Writes**: Write-then-move pattern with SHA256 verification
12
+ - **Safety**: Backup creation, rollback, permission preservation
13
+ - **Performance**: <100ms lock acquisition target, efficient retry logic
14
+
15
+ ## Features
16
+
17
+ ### File Locking
18
+ - Lock acquisition with configurable timeout (default: 300s)
19
+ - Waiting queue for blocked processes
20
+ - Lock renewal for long-running operations
21
+ - Force release for stuck locks
22
+ - Owner tracking (process ID, agent ID, hostname)
23
+ - Stale lock detection and automatic cleanup
24
+
25
+ ### Atomic Writes
26
+ - Write-then-move pattern (atomic operation)
27
+ - SHA256 checksum verification
28
+ - Automatic backup creation
29
+ - Rollback on failure
30
+ - Permission and ownership preservation
31
+ - Integration with file locking
32
+
33
+ ## Usage
34
+
35
+ ### Acquire Lock
36
+
37
+ ```bash
38
+ # Basic usage
39
+ ./.claude/skills/cfn-file-operations/execute.sh acquire-lock /path/to/file.txt
40
+
41
+ # With agent ID tracking
42
+ ./.claude/skills/cfn-file-operations/execute.sh acquire-lock /path/to/file.txt --agent-id agent-001
43
+
44
+ # With custom timeout (30 seconds)
45
+ ./.claude/skills/cfn-file-operations/execute.sh acquire-lock /path/to/file.txt --timeout 30000
46
+
47
+ # Output: LOCK_ID:LOCK_PATH (e.g., "lock-1234567890-999:/tmp/cfn-locks/abc123.lock")
48
+ ```
49
+
50
+ ### Release Lock
51
+
52
+ ```bash
53
+ # Release lock using lock info from acquire
54
+ LOCK_INFO=$(./execute.sh acquire-lock /path/to/file.txt)
55
+ # ... perform operations ...
56
+ ./execute.sh release-lock "$LOCK_INFO"
57
+ ```
58
+
59
+ ### Renew Lock
60
+
61
+ ```bash
62
+ # Renew lock with 5-minute extension (default)
63
+ ./execute.sh renew-lock "$LOCK_INFO"
64
+
65
+ # Custom extension (10 minutes)
66
+ ./execute.sh renew-lock "$LOCK_INFO" --extension 600000
67
+ ```
68
+
69
+ ### Force Release
70
+
71
+ ```bash
72
+ # Force release a stuck lock
73
+ ./execute.sh force-release /tmp/cfn-locks/abc123.lock
74
+ ```
75
+
76
+ ### Atomic Write
77
+
78
+ ```bash
79
+ # Basic write
80
+ ./execute.sh atomic-write /path/to/file.txt "Content here"
81
+
82
+ # With checksum verification
83
+ ./execute.sh atomic-write /path/to/file.txt "Content" --checksum
84
+
85
+ # With backup creation
86
+ ./execute.sh atomic-write /path/to/file.txt "Content" --backup
87
+
88
+ # With lock (auto-acquire and release)
89
+ ./execute.sh atomic-write /path/to/file.txt "Content" --lock
90
+
91
+ # All features combined
92
+ ./execute.sh atomic-write /path/to/file.txt "Content" --checksum --backup --lock
93
+ ```
94
+
95
+ ### Atomic Read
96
+
97
+ ```bash
98
+ # Read with checksum
99
+ ./execute.sh atomic-read /path/to/file.txt
100
+
101
+ # Verify expected checksum
102
+ ./execute.sh atomic-read /path/to/file.txt --expected-checksum abc123...
103
+ ```
104
+
105
+ ### Verify Checksum
106
+
107
+ ```bash
108
+ ./execute.sh verify-checksum /path/to/file.txt expected_sha256_hash
109
+ ```
110
+
111
+ ### Get Metrics
112
+
113
+ ```bash
114
+ ./execute.sh get-metrics
115
+
116
+ # Output (JSON):
117
+ # {
118
+ # "activeLocks": 3,
119
+ # "staleLocks": 0,
120
+ # "lockDirectory": "/tmp/cfn-locks"
121
+ # }
122
+ ```
123
+
124
+ ## Complete Workflow Example
125
+
126
+ ```bash
127
+ #!/bin/bash
128
+ set -euo pipefail
129
+
130
+ SKILL_PATH="./.claude/skills/cfn-file-operations/execute.sh"
131
+ FILE_PATH="/path/to/important-file.txt"
132
+ AGENT_ID="backend-dev-001"
133
+
134
+ # Acquire lock
135
+ echo "Acquiring lock..."
136
+ LOCK_INFO=$($SKILL_PATH acquire-lock "$FILE_PATH" --agent-id "$AGENT_ID" --timeout 60000)
137
+
138
+ if [ $? -ne 0 ]; then
139
+ echo "Failed to acquire lock"
140
+ exit 1
141
+ fi
142
+
143
+ echo "Lock acquired: $LOCK_INFO"
144
+
145
+ # Perform operations with atomic write
146
+ echo "Writing file..."
147
+ RESULT=$($SKILL_PATH atomic-write "$FILE_PATH" "New content here" --checksum --backup)
148
+
149
+ if [ $? -ne 0 ]; then
150
+ echo "Write failed, releasing lock"
151
+ $SKILL_PATH release-lock "$LOCK_INFO"
152
+ exit 1
153
+ fi
154
+
155
+ echo "Write successful: $RESULT"
156
+
157
+ # Renew lock for extended operation
158
+ echo "Renewing lock for extended operation..."
159
+ $SKILL_PATH renew-lock "$LOCK_INFO" --extension 300000
160
+
161
+ # Release lock
162
+ echo "Releasing lock..."
163
+ $SKILL_PATH release-lock "$LOCK_INFO"
164
+
165
+ echo "Complete!"
166
+ ```
167
+
168
+ ## Lock File Format
169
+
170
+ Locks are stored in `/tmp/cfn-locks/` (configurable via `CFN_LOCK_DIR`).
171
+
172
+ Lock file naming: `${SHA256_HASH_OF_TARGET_PATH}.lock`
173
+
174
+ Lock metadata (JSON):
175
+ ```json
176
+ {
177
+ "lockId": "lock-1234567890-999",
178
+ "filePath": "/absolute/path/to/file.txt",
179
+ "owner": {
180
+ "pid": 12345,
181
+ "agentId": "backend-dev-001",
182
+ "hostname": "server01"
183
+ },
184
+ "acquiredAt": "2025-11-16T04:00:00.123Z",
185
+ "expiresAt": "2025-11-16T04:05:00.123Z",
186
+ "timeoutMs": 300000,
187
+ "renewalCount": 0,
188
+ "lastRenewedAt": null
189
+ }
190
+ ```
191
+
192
+ ## Write Result Format
193
+
194
+ Atomic write operations return JSON:
195
+ ```json
196
+ {
197
+ "success": true,
198
+ "filePath": "/absolute/path/to/file.txt",
199
+ "checksum": "abc123def456...",
200
+ "bytesWritten": 1024,
201
+ "durationMs": 45,
202
+ "backupPath": "/absolute/path/to/file.txt.2025-11-16T04-00-00.backup"
203
+ }
204
+ ```
205
+
206
+ ## Integration with TypeScript
207
+
208
+ This skill integrates with the TypeScript file operations:
209
+
210
+ ```typescript
211
+ import { FileLockManager } from './lib/file-lock-manager';
212
+ import { AtomicFileWriter } from './lib/atomic-file-writer';
213
+
214
+ // Use TypeScript API
215
+ const manager = new FileLockManager();
216
+ const lock = await manager.acquireLock('/path/to/file.txt', {
217
+ agentId: 'agent-001',
218
+ timeout: 30000
219
+ });
220
+
221
+ try {
222
+ const writer = new AtomicFileWriter();
223
+ await writer.writeFile('/path/to/file.txt', content, {
224
+ verifyChecksum: true,
225
+ createBackup: true
226
+ });
227
+ } finally {
228
+ await manager.releaseLock(lock.id);
229
+ }
230
+ ```
231
+
232
+ ## Configuration
233
+
234
+ Environment variables:
235
+ - `CFN_LOCK_DIR`: Lock directory (default: `/tmp/cfn-locks`)
236
+
237
+ Default timeouts:
238
+ - Lock acquisition: 300000ms (5 minutes)
239
+ - Retry interval: 100ms
240
+ - Stale lock detection: 300000ms (5 minutes)
241
+
242
+ ## Error Handling
243
+
244
+ The skill uses exit codes for error signaling:
245
+ - `0`: Success
246
+ - `1`: General error (invalid arguments, operation failed)
247
+
248
+ Error messages are written to stderr.
249
+
250
+ ## Performance
251
+
252
+ Target metrics:
253
+ - Lock acquisition: <100ms (when lock available)
254
+ - Atomic write: <50ms (small files)
255
+ - Checksum calculation: O(file size)
256
+
257
+ ## Stale Lock Cleanup
258
+
259
+ Stale locks are automatically cleaned up:
260
+ - Locks past expiration time are considered stale
261
+ - Cleanup occurs during lock acquisition attempts
262
+ - Manual cleanup via `force-release` command
263
+
264
+ ## Security Considerations
265
+
266
+ - Locks are process-scoped (not system-wide semaphores)
267
+ - Lock files are world-readable by default (chmod 644)
268
+ - Force release should be used with caution
269
+ - Ownership verification prevents unauthorized release
270
+
271
+ ## Testing
272
+
273
+ See `test.sh` for comprehensive test suite covering:
274
+ - Lock acquisition and release
275
+ - Timeout scenarios
276
+ - Concurrent access
277
+ - Atomic writes with verification
278
+ - Stale lock detection
279
+ - Error handling
280
+
281
+ ## See Also
282
+
283
+ - TypeScript API: `src/lib/file-lock-manager.ts`
284
+ - Atomic Writer: `src/lib/atomic-file-writer.ts`
285
+ - Usage Guide: `docs/FILE_OPERATIONS_GUIDE.md`
286
+ - Tests: `.claude/skills/cfn-file-operations/test.sh`
287
+
288
+ ## Version
289
+
290
+ 1.0.0 (Task 4.2 - November 2025)
@@ -0,0 +1,129 @@
1
+ #!/bin/bash
2
+ #
3
+ # File Operations Skill - Main Entry Point
4
+ #
5
+ # Provides file locking and atomic write operations for bash scripts.
6
+ # Part of Task 4.2: Centralized File Locking & Atomic Operations
7
+ #
8
+ # Usage:
9
+ # # Acquire lock
10
+ # ./.claude/skills/cfn-file-operations/execute.sh acquire-lock /path/to/file.txt --agent-id agent-001
11
+ #
12
+ # # Write atomically
13
+ # ./.claude/skills/cfn-file-operations/execute.sh atomic-write /path/to/file.txt "content" --checksum
14
+ #
15
+ # # Release lock
16
+ # ./.claude/skills/cfn-file-operations/execute.sh release-lock LOCK_ID
17
+ #
18
+
19
+ set -euo pipefail
20
+
21
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
22
+ source "${SCRIPT_DIR}/lib/lock.sh"
23
+ source "${SCRIPT_DIR}/lib/atomic-write.sh"
24
+
25
+ # Command dispatcher
26
+ COMMAND="${1:-help}"
27
+ shift || true
28
+
29
+ case "$COMMAND" in
30
+ acquire-lock)
31
+ file_path="${1:-}"
32
+ shift || true
33
+ acquire_file_lock "$file_path" "$@"
34
+ ;;
35
+
36
+ release-lock)
37
+ lock_id="${1:-}"
38
+ shift || true
39
+ release_file_lock "$lock_id" "$@"
40
+ ;;
41
+
42
+ renew-lock)
43
+ lock_id="${1:-}"
44
+ shift || true
45
+ renew_file_lock "$lock_id" "$@"
46
+ ;;
47
+
48
+ force-release)
49
+ lock_path="${1:-}"
50
+ shift || true
51
+ force_release_lock "$lock_path" "$@"
52
+ ;;
53
+
54
+ atomic-write)
55
+ file_path="${1:-}"
56
+ content="${2:-}"
57
+ shift 2 || true
58
+ atomic_write_file "$file_path" "$content" "$@"
59
+ ;;
60
+
61
+ atomic-read)
62
+ file_path="${1:-}"
63
+ shift || true
64
+ atomic_read_file "$file_path" "$@"
65
+ ;;
66
+
67
+ verify-checksum)
68
+ file_path="${1:-}"
69
+ expected_checksum="${2:-}"
70
+ shift 2 || true
71
+ verify_file_checksum "$file_path" "$expected_checksum" "$@"
72
+ ;;
73
+
74
+ get-metrics)
75
+ get_lock_metrics
76
+ ;;
77
+
78
+ help|--help|-h)
79
+ cat <<EOF
80
+ File Operations Skill - Usage
81
+
82
+ Commands:
83
+ acquire-lock <file-path> [--agent-id ID] [--timeout MS]
84
+ Acquire a file lock
85
+
86
+ release-lock <lock-id>
87
+ Release a file lock
88
+
89
+ renew-lock <lock-id> [--extension MS]
90
+ Renew a file lock (extend expiration)
91
+
92
+ force-release <lock-path>
93
+ Force release a stuck lock
94
+
95
+ atomic-write <file-path> <content> [--checksum] [--backup]
96
+ Write file atomically with optional checksum verification
97
+
98
+ atomic-read <file-path> [--expected-checksum HASH]
99
+ Read file with optional checksum verification
100
+
101
+ verify-checksum <file-path> <expected-checksum>
102
+ Verify file SHA256 checksum
103
+
104
+ get-metrics
105
+ Get lock manager metrics
106
+
107
+ help
108
+ Show this help message
109
+
110
+ Examples:
111
+ # Acquire lock
112
+ ./execute.sh acquire-lock /tmp/test.txt --agent-id agent-001
113
+
114
+ # Write atomically
115
+ ./execute.sh atomic-write /tmp/test.txt "Hello World" --checksum --backup
116
+
117
+ # Release lock
118
+ ./execute.sh release-lock abc123-lock-id
119
+
120
+ For more information, see SKILL.md
121
+ EOF
122
+ ;;
123
+
124
+ *)
125
+ echo "Error: Unknown command: $COMMAND" >&2
126
+ echo "Run '$0 help' for usage information" >&2
127
+ exit 1
128
+ ;;
129
+ esac
@@ -0,0 +1,294 @@
1
+ #!/bin/bash
2
+ #
3
+ # Atomic Write Operations Library
4
+ #
5
+ # Provides atomic file write functions with SHA256 verification.
6
+ # Part of Task 4.2: Centralized File Locking & Atomic Operations
7
+ #
8
+
9
+ #
10
+ # Calculate SHA256 checksum of content
11
+ #
12
+ # Usage: calculate_checksum <content>
13
+ #
14
+ calculate_checksum() {
15
+ local content="$1"
16
+ echo -n "$content" | sha256sum | awk '{print $1}'
17
+ }
18
+
19
+ #
20
+ # Calculate SHA256 checksum of file
21
+ #
22
+ # Usage: calculate_file_checksum <file-path>
23
+ #
24
+ calculate_file_checksum() {
25
+ local file_path="$1"
26
+
27
+ if [ ! -f "$file_path" ]; then
28
+ echo "Error: File not found: $file_path" >&2
29
+ return 1
30
+ fi
31
+
32
+ sha256sum "$file_path" | awk '{print $1}'
33
+ }
34
+
35
+ #
36
+ # Write file atomically
37
+ #
38
+ # Usage: atomic_write_file <file-path> <content> [--checksum] [--backup] [--lock]
39
+ #
40
+ atomic_write_file() {
41
+ local file_path="$1"
42
+ local content="$2"
43
+ shift 2
44
+
45
+ if [ -z "$file_path" ]; then
46
+ echo "Error: file-path required" >&2
47
+ return 1
48
+ fi
49
+
50
+ local verify_checksum=0
51
+ local create_backup=0
52
+ local use_lock=0
53
+ local lock_info=""
54
+
55
+ # Parse options
56
+ while [[ $# -gt 0 ]]; do
57
+ case "$1" in
58
+ --checksum)
59
+ verify_checksum=1
60
+ shift
61
+ ;;
62
+ --backup)
63
+ create_backup=1
64
+ shift
65
+ ;;
66
+ --lock)
67
+ use_lock=1
68
+ shift
69
+ ;;
70
+ *)
71
+ shift
72
+ ;;
73
+ esac
74
+ done
75
+
76
+ local start_time
77
+ start_time=$(date +%s%3N)
78
+
79
+ # Acquire lock if requested
80
+ if [ "$use_lock" -eq 1 ]; then
81
+ lock_info=$(acquire_file_lock "$file_path" --timeout 30000)
82
+ if [ $? -ne 0 ]; then
83
+ echo "Error: Failed to acquire lock for $file_path" >&2
84
+ return 1
85
+ fi
86
+ fi
87
+
88
+ local dir
89
+ dir=$(dirname "$file_path")
90
+
91
+ local temp_path
92
+ temp_path="${dir}/.$(basename "$file_path").$(date +%s%N).tmp"
93
+
94
+ local backup_path=""
95
+ local success=0
96
+
97
+ # Calculate expected checksum
98
+ local expected_checksum
99
+ expected_checksum=$(calculate_checksum "$content")
100
+
101
+ # Create backup if requested and file exists
102
+ if [ "$create_backup" -eq 1 ] && [ -f "$file_path" ]; then
103
+ local timestamp
104
+ timestamp=$(date -u +"%Y-%m-%dT%H-%M-%S")
105
+ backup_path="${file_path}.${timestamp}.backup"
106
+
107
+ cp "$file_path" "$backup_path" 2>/dev/null || {
108
+ echo "Error: Failed to create backup" >&2
109
+ [ -n "$lock_info" ] && release_file_lock "$lock_info"
110
+ return 1
111
+ }
112
+
113
+ echo "Backup created: $backup_path" >&2
114
+ fi
115
+
116
+ # Write to temporary file
117
+ echo -n "$content" > "$temp_path" || {
118
+ echo "Error: Failed to write temporary file" >&2
119
+ [ -n "$lock_info" ] && release_file_lock "$lock_info"
120
+ return 1
121
+ }
122
+
123
+ # Verify checksum if requested
124
+ if [ "$verify_checksum" -eq 1 ]; then
125
+ local actual_checksum
126
+ actual_checksum=$(calculate_file_checksum "$temp_path")
127
+
128
+ if [ "$actual_checksum" != "$expected_checksum" ]; then
129
+ echo "Error: Checksum verification failed" >&2
130
+ echo " Expected: $expected_checksum" >&2
131
+ echo " Actual: $actual_checksum" >&2
132
+ rm -f "$temp_path"
133
+ [ -n "$lock_info" ] && release_file_lock "$lock_info"
134
+ return 1
135
+ fi
136
+
137
+ echo "Checksum verified: $actual_checksum" >&2
138
+ fi
139
+
140
+ # Preserve permissions if file exists
141
+ if [ -f "$file_path" ]; then
142
+ chmod --reference="$file_path" "$temp_path" 2>/dev/null || true
143
+ fi
144
+
145
+ # Atomic move
146
+ if mv "$temp_path" "$file_path" 2>/dev/null; then
147
+ success=1
148
+ else
149
+ echo "Error: Failed to move temporary file to target" >&2
150
+
151
+ # Rollback from backup if available
152
+ if [ -n "$backup_path" ] && [ -f "$backup_path" ]; then
153
+ cp "$backup_path" "$file_path" 2>/dev/null && {
154
+ echo "Restored from backup after failed write" >&2
155
+ }
156
+ fi
157
+
158
+ rm -f "$temp_path"
159
+ [ -n "$lock_info" ] && release_file_lock "$lock_info"
160
+ return 1
161
+ fi
162
+
163
+ # Get file size
164
+ local bytes_written
165
+ bytes_written=$(stat -f%z "$file_path" 2>/dev/null || stat -c%s "$file_path" 2>/dev/null || echo "0")
166
+
167
+ local end_time
168
+ end_time=$(date +%s%3N)
169
+ local duration=$((end_time - start_time))
170
+
171
+ # Release lock if acquired
172
+ if [ -n "$lock_info" ]; then
173
+ release_file_lock "$lock_info"
174
+ fi
175
+
176
+ # Output result as JSON
177
+ jq -n \
178
+ --argjson success "$success" \
179
+ --arg filePath "$file_path" \
180
+ --arg checksum "$expected_checksum" \
181
+ --argjson bytesWritten "$bytes_written" \
182
+ --argjson durationMs "$duration" \
183
+ --arg backupPath "$backup_path" \
184
+ '{
185
+ success: $success,
186
+ filePath: $filePath,
187
+ checksum: $checksum,
188
+ bytesWritten: $bytesWritten,
189
+ durationMs: $durationMs,
190
+ backupPath: $backupPath
191
+ }'
192
+ }
193
+
194
+ #
195
+ # Read file atomically
196
+ #
197
+ # Usage: atomic_read_file <file-path> [--expected-checksum HASH]
198
+ #
199
+ atomic_read_file() {
200
+ local file_path="$1"
201
+ shift
202
+
203
+ if [ -z "$file_path" ]; then
204
+ echo "Error: file-path required" >&2
205
+ return 1
206
+ fi
207
+
208
+ if [ ! -f "$file_path" ]; then
209
+ echo "Error: File not found: $file_path" >&2
210
+ return 1
211
+ fi
212
+
213
+ local expected_checksum=""
214
+
215
+ # Parse options
216
+ while [[ $# -gt 0 ]]; do
217
+ case "$1" in
218
+ --expected-checksum)
219
+ expected_checksum="$2"
220
+ shift 2
221
+ ;;
222
+ *)
223
+ shift
224
+ ;;
225
+ esac
226
+ done
227
+
228
+ # Read content
229
+ local content
230
+ content=$(cat "$file_path")
231
+
232
+ # Calculate checksum
233
+ local actual_checksum
234
+ actual_checksum=$(calculate_checksum "$content")
235
+
236
+ # Verify if expected checksum provided
237
+ if [ -n "$expected_checksum" ]; then
238
+ if [ "$actual_checksum" != "$expected_checksum" ]; then
239
+ echo "Error: Checksum verification failed" >&2
240
+ echo " Expected: $expected_checksum" >&2
241
+ echo " Actual: $actual_checksum" >&2
242
+ return 1
243
+ fi
244
+ fi
245
+
246
+ # Output result as JSON
247
+ jq -n \
248
+ --arg content "$content" \
249
+ --arg checksum "$actual_checksum" \
250
+ '{
251
+ content: $content,
252
+ checksum: $checksum
253
+ }'
254
+ }
255
+
256
+ #
257
+ # Verify file checksum
258
+ #
259
+ # Usage: verify_file_checksum <file-path> <expected-checksum>
260
+ #
261
+ verify_file_checksum() {
262
+ local file_path="$1"
263
+ local expected_checksum="$2"
264
+
265
+ if [ -z "$file_path" ] || [ -z "$expected_checksum" ]; then
266
+ echo "Error: file-path and expected-checksum required" >&2
267
+ return 1
268
+ fi
269
+
270
+ if [ ! -f "$file_path" ]; then
271
+ echo "Error: File not found: $file_path" >&2
272
+ return 1
273
+ fi
274
+
275
+ local actual_checksum
276
+ actual_checksum=$(calculate_file_checksum "$file_path")
277
+
278
+ local matches=0
279
+ if [ "$actual_checksum" = "$expected_checksum" ]; then
280
+ matches=1
281
+ fi
282
+
283
+ jq -n \
284
+ --arg filePath "$file_path" \
285
+ --arg expected "$expected_checksum" \
286
+ --arg actual "$actual_checksum" \
287
+ --argjson matches "$matches" \
288
+ '{
289
+ filePath: $filePath,
290
+ expectedChecksum: $expected,
291
+ actualChecksum: $actual,
292
+ matches: $matches
293
+ }'
294
+ }