claude-flow-novice 2.15.2 → 2.15.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (533) hide show
  1. package/.claude/cfn-extras/skills/advanced-features/cfn-agent-swap/recommend-swap.sh +59 -59
  2. package/.claude/cfn-extras/skills/analytics/cfn-improvement-recommender/recommend-improvements.sh +91 -91
  3. package/.claude/cfn-extras/skills/analytics/cfn-pattern-extraction/extract-patterns.sh +79 -79
  4. package/.claude/cfn-extras/skills/analytics/cfn-retrospective-report/generate-report.sh +100 -100
  5. package/.claude/cfn-extras/skills/analytics/cfn-telemetry/start-telemetry.sh +110 -110
  6. package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/add-bullet.sh +145 -145
  7. package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/log-merge.sh +67 -67
  8. package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/monitor-injection-performance.sh +137 -137
  9. package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/optimize-injection-pipeline.sh +168 -168
  10. package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/query-reflections.sh +35 -35
  11. package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/store-reflection.sh +45 -45
  12. package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/track-ab-test.sh +41 -41
  13. package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/update-reflection.sh +41 -41
  14. package/.claude/cfn-extras/skills/deprecated/cfn-cli-setup/validate-cli-environment.sh +191 -191
  15. package/.claude/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/create-campaign.sh +231 -231
  16. package/.claude/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/get-campaign-performance.sh +190 -190
  17. package/.claude/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/pause-campaign.sh +142 -142
  18. package/.claude/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/set-budget.sh +181 -181
  19. package/.claude/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/update-bid-strategy.sh +133 -133
  20. package/.claude/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/get-conversation-history.sh +121 -121
  21. package/.claude/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/qualify-lead.sh +156 -156
  22. package/.claude/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/schedule-demo.sh +181 -181
  23. package/.claude/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/send-message.sh +137 -137
  24. package/.claude/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/transfer-to-human.sh +179 -179
  25. package/.claude/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/create-campaign.sh +183 -183
  26. package/.claude/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/get-delivery-status.sh +139 -139
  27. package/.claude/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/opt-out.sh +150 -150
  28. package/.claude/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/schedule-campaign.sh +187 -187
  29. package/.claude/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/send-sms.sh +181 -181
  30. package/.claude/cfn-extras/skills/ui-portal/cfn-web-portal/test-web-portal-skill.sh +50 -50
  31. package/.claude/cfn-extras/skills/ui-portal/cfn-web-portal/validate-deployment.sh +84 -84
  32. package/.claude/cfn-extras/skills/utility/cfn-environment-sanitization/sanitize-environment.sh +243 -243
  33. package/.claude/commands/cfn-loop-cli.md +16 -2
  34. package/.claude/commands/switch-api.md +31 -10
  35. package/.claude/hooks/cfn-BACKUP_USAGE.md +243 -243
  36. package/.claude/hooks/cfn-invoke-security-validation.sh +69 -69
  37. package/.claude/hooks/cfn-lint-sql-injection.sh +61 -0
  38. package/.claude/hooks/cfn-post-edit-cfn-retrospective.sh +109 -78
  39. package/.claude/hooks/cfn-post-edit.config.json +44 -44
  40. package/.claude/hooks/cfn-pre-edit-security-warning.sh +40 -0
  41. package/.claude/skills/cfn-agent-spawning/spawn-agent.sh +22 -24
  42. package/.claude/skills/cfn-docker-agent-spawning/SKILL.md +28 -4
  43. package/.claude/skills/cfn-docker-agent-spawning/spawn-agent.sh +3 -1
  44. package/.claude/skills/cfn-docker-loop-orchestration/orchestrate.sh +224 -20
  45. package/.claude/skills/cfn-hybrid-routing/check-dependencies.sh +51 -51
  46. package/.claude/skills/cfn-loop-orchestration/helpers/gate-check.sh +550 -46
  47. package/.claude/skills/cfn-loop-orchestration/helpers/parse-test-results.sh +277 -0
  48. package/.claude/skills/cfn-loop-orchestration/orchestrate.sh +184 -23
  49. package/.claude/skills/cfn-loop-orchestration/security_utils.sh +24 -0
  50. package/.claude/skills/cfn-loop-orchestration/test-iteration-context-injection.sh +366 -0
  51. package/.claude/skills/cfn-loop-validation/orchestrate-cfn-loop.sh +252 -252
  52. package/.claude/skills/cfn-redis-coordination/CENTRALIZED_REDIS_WRAPPER.md +319 -0
  53. package/.claude/skills/cfn-redis-coordination/agent-log.sh +4 -0
  54. package/.claude/skills/cfn-redis-coordination/agent-log.sh.bak +124 -0
  55. package/.claude/skills/cfn-redis-coordination/agent-recovery.sh +74 -74
  56. package/.claude/skills/cfn-redis-coordination/collect-confidence-scores.sh +30 -0
  57. package/.claude/skills/cfn-redis-coordination/get-context.sh +145 -112
  58. package/.claude/skills/cfn-redis-coordination/get-success-criteria.sh +54 -0
  59. package/.claude/skills/cfn-redis-coordination/invoke-waiting-mode.sh +3 -0
  60. package/.claude/skills/cfn-redis-coordination/redis-cli-wrapper.sh +24 -3
  61. package/.claude/skills/cfn-redis-coordination/redis-functions.sh +33 -0
  62. package/.claude/skills/cfn-redis-coordination/report-completion.sh +24 -31
  63. package/.claude/skills/cfn-redis-coordination/store-context.sh +4 -0
  64. package/.claude/skills/cfn-redis-coordination/store-success-criteria.sh +85 -0
  65. package/.claude/skills/cfn-redis-coordination/update-all-scripts.sh +67 -0
  66. package/.claude/skills/cfn-sqlite-memory/ttl-cleanup.sh +17 -25
  67. package/.claude/skills/cfn-transparency-middleware/middleware-config.sh +28 -28
  68. package/.claude/skills/cfn-transparency-middleware/performance-benchmark.sh +78 -78
  69. package/.claude/skills/cfn-transparency-middleware/test-e2e.sh +15 -0
  70. package/.claude/skills/cfn-transparency-middleware/test-integration.sh +161 -161
  71. package/.claude/skills/cfn-transparency-middleware/test-transparency-skill.sh +367 -367
  72. package/.claude/skills/cfn-transparency-middleware/tests/input-validation.sh +107 -92
  73. package/.claude/skills/cfn-transparency-middleware/wrap-agent.sh +131 -131
  74. package/README.md +116 -475
  75. package/claude-assets/agents/cfn-dev-team/README.md +103 -0
  76. package/claude-assets/agents/cfn-dev-team/architecture/goal-planner.md +1 -1
  77. package/claude-assets/agents/cfn-dev-team/coordinators/cfn-frontend-coordinator.md +77 -15
  78. package/claude-assets/agents/cfn-dev-team/coordinators/cfn-v3-coordinator.md +355 -6
  79. package/claude-assets/agents/cfn-dev-team/coordinators/consensus-builder.md +82 -1
  80. package/claude-assets/agents/cfn-dev-team/coordinators/handoff-coordinator.md +82 -1
  81. package/claude-assets/agents/cfn-dev-team/coordinators/multi-sprint-coordinator.md +77 -15
  82. package/claude-assets/agents/cfn-dev-team/dev-ops/docker-specialist.md +99 -12
  83. package/claude-assets/agents/cfn-dev-team/dev-ops/github-commit-agent.md +1 -1
  84. package/claude-assets/agents/cfn-dev-team/dev-ops/kubernetes-specialist.md +97 -0
  85. package/claude-assets/agents/cfn-dev-team/dev-ops/monitoring-specialist.md +20 -1
  86. package/claude-assets/agents/cfn-dev-team/developers/api-gateway-specialist.md +97 -0
  87. package/claude-assets/agents/cfn-dev-team/developers/backend-developer.md +110 -13
  88. package/claude-assets/agents/cfn-dev-team/developers/data/data-engineer.md +106 -15
  89. package/claude-assets/agents/cfn-dev-team/developers/database/database-architect.md +115 -11
  90. package/claude-assets/agents/cfn-dev-team/developers/frontend/mobile-dev.md +94 -7
  91. package/claude-assets/agents/cfn-dev-team/developers/frontend/react-frontend-engineer.md +87 -9
  92. package/claude-assets/agents/cfn-dev-team/developers/frontend/typescript-specialist.md +85 -7
  93. package/claude-assets/agents/cfn-dev-team/developers/frontend/ui-designer.md +160 -28
  94. package/claude-assets/agents/cfn-dev-team/developers/graphql-specialist.md +101 -19
  95. package/claude-assets/agents/cfn-dev-team/developers/rust-developer.md +108 -14
  96. package/claude-assets/agents/cfn-dev-team/reviewers/{reviewer.md → code-reviewer.md} +95 -8
  97. package/claude-assets/agents/cfn-dev-team/reviewers/quality/code-quality-validator.md +107 -7
  98. package/claude-assets/agents/cfn-dev-team/reviewers/quality/perf-analyzer.md +98 -7
  99. package/claude-assets/agents/cfn-dev-team/reviewers/quality/performance-benchmarker.md +95 -7
  100. package/claude-assets/agents/cfn-dev-team/reviewers/quality/security-specialist.md +136 -9
  101. package/claude-assets/agents/cfn-dev-team/testers/api-testing-specialist.md +108 -1
  102. package/claude-assets/agents/cfn-dev-team/testers/chaos-engineering-specialist.md +107 -13
  103. package/claude-assets/agents/cfn-dev-team/testers/contract-tester.md +737 -0
  104. package/claude-assets/agents/cfn-dev-team/testers/e2e/playwright-tester.md +1 -1
  105. package/claude-assets/agents/cfn-dev-team/testers/integration-tester.md +828 -0
  106. package/claude-assets/agents/cfn-dev-team/testers/interaction-tester.md +106 -7
  107. package/claude-assets/agents/cfn-dev-team/testers/load-testing-specialist.md +77 -0
  108. package/claude-assets/agents/cfn-dev-team/testers/mutation-testing-specialist.md +684 -0
  109. package/claude-assets/agents/cfn-dev-team/testers/playwright-tester.md +110 -1
  110. package/claude-assets/agents/cfn-dev-team/testers/tester.md +94 -7
  111. package/claude-assets/agents/cfn-dev-team/utility/code-booster.md +1 -3
  112. package/claude-assets/agents/cfn-dev-team/utility/epic-creator.md +87 -13
  113. package/claude-assets/agents/cfn-dev-team/utility/memory-leak-specialist.md +103 -7
  114. package/claude-assets/agents/cfn-dev-team/utility/researcher.md +1 -3
  115. package/claude-assets/agents/cfn-dev-team/utility/z-ai-specialist.md +94 -7
  116. package/claude-assets/agents/docker-coordinators/cfn-docker-v3-coordinator.md +46 -0
  117. package/claude-assets/agents/project-only-agents/npm-package-specialist.md +1 -1
  118. package/claude-assets/cfn-extras/skills/advanced-features/cfn-agent-swap/recommend-swap.sh +59 -59
  119. package/claude-assets/cfn-extras/skills/analytics/cfn-improvement-recommender/recommend-improvements.sh +91 -91
  120. package/claude-assets/cfn-extras/skills/analytics/cfn-pattern-extraction/extract-patterns.sh +79 -79
  121. package/claude-assets/cfn-extras/skills/analytics/cfn-retrospective-report/generate-report.sh +100 -100
  122. package/claude-assets/cfn-extras/skills/analytics/cfn-telemetry/start-telemetry.sh +110 -110
  123. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/add-bullet.sh +145 -145
  124. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/log-merge.sh +67 -67
  125. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/monitor-injection-performance.sh +137 -137
  126. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/optimize-injection-pipeline.sh +168 -168
  127. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/query-reflections.sh +35 -35
  128. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/store-reflection.sh +45 -45
  129. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/track-ab-test.sh +41 -41
  130. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/update-reflection.sh +41 -41
  131. package/claude-assets/cfn-extras/skills/deprecated/cfn-cli-setup/validate-cli-environment.sh +191 -191
  132. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/create-campaign.sh +231 -231
  133. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/get-campaign-performance.sh +190 -190
  134. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/pause-campaign.sh +142 -142
  135. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/set-budget.sh +181 -181
  136. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/update-bid-strategy.sh +133 -133
  137. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/get-conversation-history.sh +121 -121
  138. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/qualify-lead.sh +156 -156
  139. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/schedule-demo.sh +181 -181
  140. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/send-message.sh +137 -137
  141. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/transfer-to-human.sh +179 -179
  142. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/create-campaign.sh +183 -183
  143. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/get-delivery-status.sh +139 -139
  144. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/opt-out.sh +150 -150
  145. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/schedule-campaign.sh +187 -187
  146. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/send-sms.sh +181 -181
  147. package/claude-assets/cfn-extras/skills/ui-portal/cfn-web-portal/test-web-portal-skill.sh +50 -50
  148. package/claude-assets/cfn-extras/skills/ui-portal/cfn-web-portal/validate-deployment.sh +84 -84
  149. package/claude-assets/cfn-extras/skills/utility/cfn-environment-sanitization/sanitize-environment.sh +243 -243
  150. package/claude-assets/commands/cfn-loop-cli.md +16 -2
  151. package/claude-assets/commands/switch-api.md +31 -10
  152. package/claude-assets/hooks/cfn-BACKUP_USAGE.md +243 -243
  153. package/claude-assets/hooks/cfn-invoke-security-validation.sh +69 -69
  154. package/claude-assets/hooks/cfn-lint-sql-injection.sh +61 -0
  155. package/claude-assets/hooks/cfn-post-edit-cfn-retrospective.sh +109 -78
  156. package/claude-assets/hooks/cfn-post-edit.config.json +44 -44
  157. package/claude-assets/hooks/cfn-post-execution/memory-cleanup.sh +19 -19
  158. package/claude-assets/hooks/cfn-pre-edit-security-warning.sh +40 -0
  159. package/claude-assets/hooks/cfn-pre-execution/memory-check.sh +19 -19
  160. package/claude-assets/hooks/detect-hardcoded-credentials.sh +212 -0
  161. package/claude-assets/skills/SKILL_TEMPLATE.md +774 -0
  162. package/claude-assets/skills/agent-lifecycle/execute-lifecycle-hook.sh +543 -572
  163. package/claude-assets/skills/agent-lifecycle/simple-audit.sh +57 -30
  164. package/claude-assets/skills/agent-template-generator/SKILL.md +440 -0
  165. package/claude-assets/skills/agent-template-generator/generate-agent.sh +405 -0
  166. package/claude-assets/skills/agent-validation-linter/SKILL.md +589 -0
  167. package/claude-assets/skills/agent-validation-linter/lint-agents.sh +271 -0
  168. package/claude-assets/skills/bootstrap/bash-fundamentals.md +786 -0
  169. package/claude-assets/skills/bootstrap/database-connection.md +464 -0
  170. package/claude-assets/skills/bootstrap/error-handling.md +580 -0
  171. package/claude-assets/skills/bootstrap/file-operations.md +699 -0
  172. package/claude-assets/skills/bootstrap/skill-loader.md +616 -0
  173. package/claude-assets/skills/bootstrap/sqlite-params.sh +287 -0
  174. package/claude-assets/skills/cfn-agent-spawning/spawn-agent.sh +22 -24
  175. package/claude-assets/skills/cfn-automatic-memory-persistence/persist-agent-output.sh +48 -48
  176. package/claude-assets/skills/cfn-automatic-memory-persistence/query-agent-history.sh +34 -34
  177. package/claude-assets/skills/cfn-automatic-memory-persistence/test-memory-persistence.sh +17 -16
  178. package/claude-assets/skills/cfn-deliverable-validation/confidence-calculator.sh +261 -261
  179. package/claude-assets/skills/cfn-deployment/SKILL.md +293 -0
  180. package/claude-assets/skills/cfn-deployment/execute.sh +21 -0
  181. package/claude-assets/skills/cfn-docker-agent-spawning/SKILL.md +28 -4
  182. package/claude-assets/skills/cfn-docker-agent-spawning/spawn-agent.sh +3 -1
  183. package/claude-assets/skills/cfn-docker-loop-orchestration/orchestrate.sh +224 -20
  184. package/claude-assets/skills/cfn-environment-sanitization/sanitize-environment.sh +38 -0
  185. package/claude-assets/skills/cfn-error-batching-strategy/lib/core-functions.sh +47 -47
  186. package/claude-assets/skills/cfn-expert-update/update-expert.sh +345 -345
  187. package/claude-assets/skills/cfn-file-operations/SKILL.md +290 -0
  188. package/claude-assets/skills/cfn-file-operations/execute.sh +129 -0
  189. package/claude-assets/skills/cfn-file-operations/lib/atomic-write.sh +294 -0
  190. package/claude-assets/skills/cfn-file-operations/lib/lock.sh +361 -0
  191. package/claude-assets/skills/cfn-file-operations/test.sh +369 -0
  192. package/claude-assets/skills/cfn-hybrid-routing/check-dependencies.sh +51 -51
  193. package/claude-assets/skills/cfn-intervention-detector/detect-intervention.sh +110 -110
  194. package/claude-assets/skills/cfn-intervention-orchestrator/execute-intervention.sh +58 -58
  195. package/claude-assets/skills/cfn-log-operations/SKILL.md +308 -0
  196. package/claude-assets/skills/cfn-log-operations/execute.sh +420 -0
  197. package/claude-assets/skills/cfn-log-operations/lib/rotate.sh +406 -0
  198. package/claude-assets/skills/cfn-log-operations/lib/search.sh +448 -0
  199. package/claude-assets/skills/cfn-log-operations/test.sh +394 -0
  200. package/claude-assets/skills/cfn-loop-orchestration/helpers/gate-check.sh +550 -46
  201. package/claude-assets/skills/cfn-loop-orchestration/helpers/parse-test-results.sh +277 -0
  202. package/claude-assets/skills/cfn-loop-orchestration/orchestrate.sh +184 -23
  203. package/claude-assets/skills/cfn-loop-orchestration/security_utils.sh +24 -0
  204. package/claude-assets/skills/cfn-loop-orchestration/test-iteration-context-injection.sh +366 -0
  205. package/claude-assets/skills/cfn-loop-validation/orchestrate-cfn-loop.sh +252 -252
  206. package/claude-assets/skills/cfn-loop2-output-processing/process-validator-output.sh +275 -275
  207. package/claude-assets/skills/cfn-memory-management/check-memory.sh +159 -159
  208. package/claude-assets/skills/cfn-memory-management/cleanup-memory.sh +196 -196
  209. package/claude-assets/skills/cfn-node-heap-sizer/task-mode-heap-limiter.sh +325 -325
  210. package/claude-assets/skills/cfn-parameterized-queries/SKILL.md +339 -0
  211. package/claude-assets/skills/cfn-playbook/query-playbook.sh +19 -15
  212. package/claude-assets/skills/cfn-playbook/update-playbook.sh +25 -14
  213. package/claude-assets/skills/cfn-playbook-auto-update/auto-update-playbook.sh +85 -85
  214. package/claude-assets/skills/cfn-process-instrumentation/instrument-process.sh +44 -0
  215. package/claude-assets/skills/cfn-promotion/SKILL.md +305 -0
  216. package/claude-assets/skills/cfn-redis-coordination/CENTRALIZED_REDIS_WRAPPER.md +319 -0
  217. package/claude-assets/skills/cfn-redis-coordination/agent-log.sh +4 -0
  218. package/claude-assets/skills/cfn-redis-coordination/agent-log.sh.bak +124 -0
  219. package/claude-assets/skills/cfn-redis-coordination/agent-recovery.sh +74 -74
  220. package/claude-assets/skills/cfn-redis-coordination/collect-confidence-scores.sh +30 -0
  221. package/claude-assets/skills/cfn-redis-coordination/get-context.sh +145 -112
  222. package/claude-assets/skills/cfn-redis-coordination/get-success-criteria.sh +54 -0
  223. package/claude-assets/skills/cfn-redis-coordination/invoke-waiting-mode.sh +3 -0
  224. package/claude-assets/skills/cfn-redis-coordination/redis-cli-wrapper.sh +24 -3
  225. package/claude-assets/skills/cfn-redis-coordination/redis-functions.sh +33 -0
  226. package/claude-assets/skills/cfn-redis-coordination/report-completion.sh +24 -31
  227. package/claude-assets/skills/cfn-redis-coordination/store-context.sh +4 -0
  228. package/claude-assets/skills/cfn-redis-coordination/store-success-criteria.sh +85 -0
  229. package/claude-assets/skills/cfn-redis-coordination/update-all-scripts.sh +67 -0
  230. package/claude-assets/skills/cfn-scope-simplifier/simplify-scope.sh +67 -67
  231. package/claude-assets/skills/cfn-skill-loader/SKILL.md +466 -0
  232. package/claude-assets/skills/cfn-skill-loader/execute.sh +344 -0
  233. package/claude-assets/skills/cfn-specialist-injection/recommend-specialist.sh +56 -56
  234. package/claude-assets/skills/cfn-sqlite-memory/ttl-cleanup.sh +17 -25
  235. package/claude-assets/skills/cfn-standardized-error-handling/capture-agent-error.sh +86 -86
  236. package/claude-assets/skills/cfn-standardized-error-handling/test-error-handling.sh +165 -165
  237. package/claude-assets/skills/cfn-task-audit/get-audit-data.sh +42 -21
  238. package/claude-assets/skills/cfn-task-audit/store-task-audit.sh +17 -10
  239. package/claude-assets/skills/cfn-task-config-init/initialize-config.sh +264 -264
  240. package/claude-assets/skills/cfn-task-decomposition/task-decomposer.sh +278 -278
  241. package/claude-assets/skills/cfn-test-runner/detect-regressions.sh +17 -14
  242. package/claude-assets/skills/cfn-test-runner/detect-regressions.sh.backup-1763392821 +55 -0
  243. package/claude-assets/skills/cfn-test-runner/store-benchmarks.sh +17 -19
  244. package/claude-assets/skills/cfn-transparency-middleware/middleware-config.sh +28 -28
  245. package/claude-assets/skills/cfn-transparency-middleware/performance-benchmark.sh +78 -78
  246. package/claude-assets/skills/cfn-transparency-middleware/test-e2e.sh +15 -0
  247. package/claude-assets/skills/cfn-transparency-middleware/test-integration.sh +161 -161
  248. package/claude-assets/skills/cfn-transparency-middleware/test-transparency-skill.sh +367 -367
  249. package/claude-assets/skills/cfn-transparency-middleware/tests/input-validation.sh +107 -92
  250. package/claude-assets/skills/cfn-transparency-middleware/wrap-agent.sh +131 -131
  251. package/claude-assets/skills/cfn-utilities/SKILL.md +237 -0
  252. package/claude-assets/skills/cfn-utilities/execute.sh +32 -0
  253. package/claude-assets/skills/cfn-utilities/lib/errors.sh +56 -0
  254. package/claude-assets/skills/cfn-utilities/lib/file-ops.sh +164 -0
  255. package/claude-assets/skills/cfn-utilities/lib/logging.sh +77 -0
  256. package/claude-assets/skills/cfn-utilities/lib/retry.sh +127 -0
  257. package/claude-assets/skills/cfn-utilities/test.sh +317 -0
  258. package/claude-assets/skills/docker-build/SKILL.md +96 -203
  259. package/claude-assets/skills/docker-build/build.sh +73 -73
  260. package/claude-assets/skills/integration/agent-handoff.sh +492 -0
  261. package/claude-assets/skills/integration/file-operations.sh +414 -0
  262. package/claude-assets/skills/json-validation/SKILL.md +431 -0
  263. package/claude-assets/skills/json-validation/test-validate-success-criteria.sh +421 -0
  264. package/claude-assets/skills/json-validation/validate-success-criteria.sh +197 -0
  265. package/claude-assets/skills/redis-coordination/validate-parameters.sh +34 -0
  266. package/claude-assets/skills/workflow-codification/APPROVAL_WORKFLOW.md +806 -0
  267. package/claude-assets/skills/workflow-codification/COST_TRACKING.md +637 -0
  268. package/claude-assets/skills/workflow-codification/DEPLOY_QUICK_REFERENCE.md +106 -0
  269. package/claude-assets/skills/workflow-codification/EDGE_CASE_TRACKING.md +404 -0
  270. package/claude-assets/skills/workflow-codification/PROPAGATE_UPDATE_QUICK_REFERENCE.md +366 -0
  271. package/claude-assets/skills/workflow-codification/README_PHASE4.md +457 -0
  272. package/claude-assets/skills/workflow-codification/SKILL.md +110 -0
  273. package/claude-assets/skills/workflow-codification/analyze-patterns.sh +899 -0
  274. package/claude-assets/skills/workflow-codification/approval-workflow.sh +514 -0
  275. package/claude-assets/skills/workflow-codification/deploy-approved-skill.sh +481 -0
  276. package/claude-assets/skills/workflow-codification/deploy-approved-skill.sh.backup-1763392820 +512 -0
  277. package/claude-assets/skills/workflow-codification/generate-skill-update.sh +525 -0
  278. package/claude-assets/skills/workflow-codification/lib/security-utils.sh +204 -0
  279. package/claude-assets/skills/workflow-codification/propagate-skill-update.sh +648 -0
  280. package/claude-assets/skills/workflow-codification/propagate-skill-update.sh.backup-1763392820 +664 -0
  281. package/claude-assets/skills/workflow-codification/review-skill.sh +643 -0
  282. package/claude-assets/skills/workflow-codification/templates/email-notification.txt +114 -0
  283. package/claude-assets/skills/workflow-codification/templates/slack-notification.md +85 -0
  284. package/claude-assets/skills/workflow-codification/test-integration.sh +296 -0
  285. package/claude-assets/skills/workflow-codification/test-metadata-update.sh +350 -0
  286. package/claude-assets/skills/workflow-codification/track-cost-savings.sh +486 -0
  287. package/claude-assets/skills/workflow-codification/track-cost-savings.sh.backup-1763392821 +445 -0
  288. package/claude-assets/skills/workflow-codification/track-edge-case.sh +290 -0
  289. package/claude-assets/skills/workflow-codification/workflow-codification.db +0 -0
  290. package/dist/ace/ace-curator.js +10 -2
  291. package/dist/ace/ace-curator.js.map +1 -1
  292. package/dist/ace/ace-generator.js +4 -0
  293. package/dist/ace/ace-generator.js.map +1 -1
  294. package/dist/ace/ace-reflector.js +1 -1
  295. package/dist/ace/ace-reflector.js.map +1 -1
  296. package/dist/ace/context-injection.js +24 -2
  297. package/dist/ace/context-injection.js.map +1 -1
  298. package/dist/agents/agent-loader.js +146 -165
  299. package/dist/agents/agent-loader.js.map +1 -1
  300. package/dist/agents/task-agent-integration.js +1 -1
  301. package/dist/agents/task-agent-integration.js.map +1 -1
  302. package/dist/api/health-endpoints.js +390 -0
  303. package/dist/api/health-endpoints.js.map +1 -0
  304. package/dist/cli/agent-executor.js +4 -1
  305. package/dist/cli/agent-executor.js.map +1 -1
  306. package/dist/cli/agent-prompt-builder.js +89 -1
  307. package/dist/cli/agent-prompt-builder.js.map +1 -1
  308. package/dist/cli/agent-spawn.js +130 -37
  309. package/dist/cli/agent-spawn.js.map +1 -1
  310. package/dist/cli/config-manager.js +91 -109
  311. package/dist/cli/config-manager.js.map +1 -1
  312. package/dist/cli/skill-cache-validator.js +412 -0
  313. package/dist/cli/skill-cache-validator.js.map +1 -0
  314. package/dist/cli/skill-cli.js +991 -0
  315. package/dist/cli/skill-cli.js.map +1 -0
  316. package/dist/cli/skill-execution-logger.js +284 -0
  317. package/dist/cli/skill-execution-logger.js.map +1 -0
  318. package/dist/cli/skill-loader.js +457 -0
  319. package/dist/cli/skill-loader.js.map +1 -0
  320. package/dist/coordination/event-bus.js +2 -2
  321. package/dist/coordination/event-bus.js.map +1 -1
  322. package/dist/coordination/fleet-manager.js +1 -1
  323. package/dist/coordination/fleet-manager.js.map +1 -1
  324. package/dist/coordination/index.js +23 -9
  325. package/dist/coordination/index.js.map +1 -1
  326. package/dist/coordination/types/fleet-manager.types.js.map +1 -1
  327. package/dist/db/migration-manager.js +483 -0
  328. package/dist/db/migration-manager.js.map +1 -0
  329. package/dist/db/skills-query.js +535 -0
  330. package/dist/db/skills-query.js.map +1 -0
  331. package/dist/integration/DatabaseHandoff.js +507 -0
  332. package/dist/integration/DatabaseHandoff.js.map +1 -0
  333. package/dist/integration/StandardAdapter.js +291 -0
  334. package/dist/integration/StandardAdapter.js.map +1 -0
  335. package/dist/jobs/edge-case-analyzer.js +367 -0
  336. package/dist/jobs/edge-case-analyzer.js.map +1 -0
  337. package/dist/jobs/promotion-sla-enforcer.js +288 -0
  338. package/dist/jobs/promotion-sla-enforcer.js.map +1 -0
  339. package/dist/lib/agent-output-parser.js +518 -0
  340. package/dist/lib/agent-output-parser.js.map +1 -0
  341. package/dist/lib/agent-output-validator.js +950 -0
  342. package/dist/lib/agent-output-validator.js.map +1 -0
  343. package/dist/lib/agent-workspace.js +281 -0
  344. package/dist/lib/agent-workspace.js.map +1 -0
  345. package/dist/lib/artifact-registry.js +443 -0
  346. package/dist/lib/artifact-registry.js.map +1 -0
  347. package/dist/lib/atomic-file-writer.js +377 -0
  348. package/dist/lib/atomic-file-writer.js.map +1 -0
  349. package/dist/lib/backup-manager.js +779 -0
  350. package/dist/lib/backup-manager.js.map +1 -0
  351. package/dist/lib/checkpoint-manager.js +837 -0
  352. package/dist/lib/checkpoint-manager.js.map +1 -0
  353. package/dist/lib/circuit-breaker.js +340 -0
  354. package/dist/lib/circuit-breaker.js.map +1 -0
  355. package/dist/lib/completion-signal-handler.js +243 -0
  356. package/dist/lib/completion-signal-handler.js.map +1 -0
  357. package/dist/lib/config-manager.js +312 -0
  358. package/dist/lib/config-manager.js.map +1 -0
  359. package/dist/lib/config-migrator.js +386 -0
  360. package/dist/lib/config-migrator.js.map +1 -0
  361. package/dist/lib/config-validator.js +687 -0
  362. package/dist/lib/config-validator.js.map +1 -0
  363. package/dist/lib/correlation-cache.js +311 -0
  364. package/dist/lib/correlation-cache.js.map +1 -0
  365. package/dist/lib/correlation.js +263 -0
  366. package/dist/lib/correlation.js.map +1 -0
  367. package/dist/lib/database-service/connection-pool-manager.js +520 -0
  368. package/dist/lib/database-service/connection-pool-manager.js.map +1 -0
  369. package/dist/lib/database-service/correlation.js +329 -0
  370. package/dist/lib/database-service/correlation.js.map +1 -0
  371. package/dist/lib/database-service/errors.js +120 -0
  372. package/dist/lib/database-service/errors.js.map +1 -0
  373. package/dist/lib/database-service/index.js +168 -0
  374. package/dist/lib/database-service/index.js.map +1 -0
  375. package/dist/lib/database-service/postgres-adapter.js +526 -0
  376. package/dist/lib/database-service/postgres-adapter.js.map +1 -0
  377. package/dist/lib/database-service/redis-adapter.js +360 -0
  378. package/dist/lib/database-service/redis-adapter.js.map +1 -0
  379. package/dist/lib/database-service/sqlite-adapter.js +544 -0
  380. package/dist/lib/database-service/sqlite-adapter.js.map +1 -0
  381. package/dist/lib/database-service/transaction-manager.js +773 -0
  382. package/dist/lib/database-service/transaction-manager.js.map +1 -0
  383. package/dist/lib/database-service/types.js +23 -0
  384. package/dist/lib/database-service/types.js.map +1 -0
  385. package/dist/lib/deadlock-resolver.js +292 -0
  386. package/dist/lib/deadlock-resolver.js.map +1 -0
  387. package/dist/lib/distributed-lock.js +451 -0
  388. package/dist/lib/distributed-lock.js.map +1 -0
  389. package/dist/lib/edge-case-deduplicator.js +227 -0
  390. package/dist/lib/edge-case-deduplicator.js.map +1 -0
  391. package/dist/lib/encryption-manager.js +322 -0
  392. package/dist/lib/encryption-manager.js.map +1 -0
  393. package/dist/lib/error-aggregator.js +234 -0
  394. package/dist/lib/error-aggregator.js.map +1 -0
  395. package/dist/lib/errors.js +287 -0
  396. package/dist/lib/errors.js.map +1 -0
  397. package/dist/lib/file-lock-manager.js +578 -0
  398. package/dist/lib/file-lock-manager.js.map +1 -0
  399. package/dist/lib/file-operations.js +367 -0
  400. package/dist/lib/file-operations.js.map +1 -0
  401. package/dist/lib/idempotent-write.js +237 -0
  402. package/dist/lib/idempotent-write.js.map +1 -0
  403. package/dist/lib/integration-schema-validator.js +522 -0
  404. package/dist/lib/integration-schema-validator.js.map +1 -0
  405. package/dist/lib/lock-health-monitor.js +298 -0
  406. package/dist/lib/lock-health-monitor.js.map +1 -0
  407. package/dist/lib/log-shipper.js +422 -0
  408. package/dist/lib/log-shipper.js.map +1 -0
  409. package/dist/lib/logging.js +146 -0
  410. package/dist/lib/logging.js.map +1 -0
  411. package/dist/lib/message-deduplicator.js +439 -0
  412. package/dist/lib/message-deduplicator.js.map +1 -0
  413. package/dist/lib/multi-system-query.js +604 -0
  414. package/dist/lib/multi-system-query.js.map +1 -0
  415. package/dist/lib/orphan-detector.js +332 -0
  416. package/dist/lib/orphan-detector.js.map +1 -0
  417. package/dist/lib/password-generator.js +166 -0
  418. package/dist/lib/password-generator.js.map +1 -0
  419. package/dist/lib/path-validator.js +429 -0
  420. package/dist/lib/path-validator.js.map +1 -0
  421. package/dist/lib/query-translator.js +905 -0
  422. package/dist/lib/query-translator.js.map +1 -0
  423. package/dist/lib/queue-recovery.js +469 -0
  424. package/dist/lib/queue-recovery.js.map +1 -0
  425. package/dist/lib/redis-queue-manager.js +512 -0
  426. package/dist/lib/redis-queue-manager.js.map +1 -0
  427. package/dist/lib/reflection-archiver.js +272 -0
  428. package/dist/lib/reflection-archiver.js.map +1 -0
  429. package/dist/lib/retry-manager.js +453 -0
  430. package/dist/lib/retry-manager.js.map +1 -0
  431. package/dist/lib/retry.js +262 -0
  432. package/dist/lib/retry.js.map +1 -0
  433. package/dist/lib/schema-transform.js +695 -0
  434. package/dist/lib/schema-transform.js.map +1 -0
  435. package/dist/lib/schema-validator.js +491 -0
  436. package/dist/lib/schema-validator.js.map +1 -0
  437. package/dist/lib/skill-cache.js +297 -0
  438. package/dist/lib/skill-cache.js.map +1 -0
  439. package/dist/lib/skill-content-manager.js +337 -0
  440. package/dist/lib/skill-content-manager.js.map +1 -0
  441. package/dist/lib/skill-frontmatter-parser.js +237 -0
  442. package/dist/lib/skill-frontmatter-parser.js.map +1 -0
  443. package/dist/lib/skill-git-integration.js +275 -0
  444. package/dist/lib/skill-git-integration.js.map +1 -0
  445. package/dist/lib/skill-markdown-validator.js +396 -0
  446. package/dist/lib/skill-markdown-validator.js.map +1 -0
  447. package/dist/lib/skill-output-parser.js +312 -0
  448. package/dist/lib/skill-output-parser.js.map +1 -0
  449. package/dist/lib/unified-query-api.js +467 -0
  450. package/dist/lib/unified-query-api.js.map +1 -0
  451. package/dist/middleware/auth-middleware.js +350 -0
  452. package/dist/middleware/auth-middleware.js.map +1 -0
  453. package/dist/middleware/schema-validation.js +347 -0
  454. package/dist/middleware/schema-validation.js.map +1 -0
  455. package/dist/providers/anthropic-provider.js +1 -1
  456. package/dist/providers/anthropic-provider.js.map +1 -1
  457. package/dist/providers/provider-factory.js +2 -2
  458. package/dist/providers/provider-factory.js.map +1 -1
  459. package/dist/services/edge-case-analyzer.js +321 -0
  460. package/dist/services/edge-case-analyzer.js.map +1 -0
  461. package/dist/services/edge-case-deduplicator.js +266 -0
  462. package/dist/services/edge-case-deduplicator.js.map +1 -0
  463. package/dist/services/edge-case-detector.js +337 -0
  464. package/dist/services/edge-case-detector.js.map +1 -0
  465. package/dist/services/edge-case-tracker.js +547 -0
  466. package/dist/services/edge-case-tracker.js.map +1 -0
  467. package/dist/services/health-check-system.js +586 -0
  468. package/dist/services/health-check-system.js.map +1 -0
  469. package/dist/services/metrics-logger.js +412 -0
  470. package/dist/services/metrics-logger.js.map +1 -0
  471. package/dist/services/patch-generator.js +378 -0
  472. package/dist/services/patch-generator.js.map +1 -0
  473. package/dist/services/patch-validator.js +337 -0
  474. package/dist/services/patch-validator.js.map +1 -0
  475. package/dist/services/performance-monitor.js +811 -0
  476. package/dist/services/performance-monitor.js.map +1 -0
  477. package/dist/services/promotion-pipeline.js +918 -0
  478. package/dist/services/promotion-pipeline.js.map +1 -0
  479. package/dist/services/promotion-validator.js +394 -0
  480. package/dist/services/promotion-validator.js.map +1 -0
  481. package/dist/services/reflection-logger.js +388 -0
  482. package/dist/services/reflection-logger.js.map +1 -0
  483. package/dist/services/skill-deployment.js +472 -0
  484. package/dist/services/skill-deployment.js.map +1 -0
  485. package/dist/services/skill-loader.js +427 -0
  486. package/dist/services/skill-loader.js.map +1 -0
  487. package/dist/services/skill-promotion.js +372 -0
  488. package/dist/services/skill-promotion.js.map +1 -0
  489. package/dist/services/skill-validator.js +454 -0
  490. package/dist/services/skill-validator.js.map +1 -0
  491. package/dist/services/skill-versioning.js +244 -0
  492. package/dist/services/skill-versioning.js.map +1 -0
  493. package/dist/services/workspace-supervisor.js +597 -0
  494. package/dist/services/workspace-supervisor.js.map +1 -0
  495. package/dist/types/agent-output.js +44 -0
  496. package/dist/types/agent-output.js.map +1 -0
  497. package/dist/types/config.js +28 -0
  498. package/dist/types/config.js.map +1 -0
  499. package/dist/types/edge-case.js +45 -0
  500. package/dist/types/edge-case.js.map +1 -0
  501. package/package.json +201 -176
  502. package/readme/README.md +19 -4
  503. package/scripts/artifact-cleanup.sh +392 -0
  504. package/scripts/backup-cleanup.sh +627 -0
  505. package/scripts/cleanup-workspaces.sh +412 -0
  506. package/scripts/cleanup-yaml-configs.sh +141 -0
  507. package/scripts/deploy-approved-skills.sh +263 -0
  508. package/scripts/deploy-production.sh +355 -355
  509. package/scripts/docker-playwright-fix.sh +311 -311
  510. package/scripts/docker-rebuild-all-agents.sh +127 -127
  511. package/scripts/health-check.sh +447 -0
  512. package/scripts/log-aggregator.sh +554 -0
  513. package/scripts/log-monitor.sh +629 -0
  514. package/scripts/manage-agent-workspaces.sh +434 -0
  515. package/scripts/memory-leak-prevention.sh +305 -305
  516. package/scripts/migrate-artifacts.sh +563 -0
  517. package/scripts/migrate-schema.sh +533 -0
  518. package/scripts/migrate-yaml-to-json.sh +465 -0
  519. package/scripts/promote-staged-skills.sh +423 -0
  520. package/scripts/run-marketing-tests.sh +42 -42
  521. package/scripts/update_paths.sh +46 -46
  522. package/scripts/verify-no-secrets.sh +88 -35
  523. package/.claude/cfn-extras/agents/deprecated-coordinators/adaptive-coordinator.md.backup +0 -161
  524. package/.claude/cfn-extras/agents/deprecated-coordinators/blocking-coordinator-example.md.backup +0 -728
  525. package/.claude/cfn-extras/agents/deprecated-coordinators/mesh-coordinator.md.backup +0 -131
  526. package/.claude/skills/cfn-agent-spawning/spawn-agent.sh.backup +0 -273
  527. package/.claude/skills/cfn-loop-orchestration/orchestrate.sh.backup +0 -949
  528. package/README.md.backup_before_replace +0 -781
  529. package/claude-assets/cfn-extras/agents/deprecated-coordinators/adaptive-coordinator.md.backup +0 -161
  530. package/claude-assets/cfn-extras/agents/deprecated-coordinators/blocking-coordinator-example.md.backup +0 -728
  531. package/claude-assets/cfn-extras/agents/deprecated-coordinators/mesh-coordinator.md.backup +0 -131
  532. package/claude-assets/skills/cfn-agent-spawning/spawn-agent.sh.backup +0 -273
  533. package/claude-assets/skills/cfn-loop-orchestration/orchestrate.sh.backup +0 -949
@@ -0,0 +1,627 @@
1
+ #!/bin/bash
2
+
3
+ ##############################################################################
4
+ # Unified Backup Cleanup Script
5
+ # Part of Task 4.3: Unified Backup & Restore System
6
+ # Version: 1.0.0
7
+ #
8
+ # Features:
9
+ # - Automated cleanup based on TTL
10
+ # - Configurable TTL per backup type
11
+ # - Manual cleanup with filters (agent, date, type)
12
+ # - Disk usage monitoring and reporting
13
+ # - Compression for old backups (>7 days)
14
+ # - Cleanup dry-run mode
15
+ # - Integration with SQLite metadata
16
+ #
17
+ # Usage:
18
+ # ./scripts/backup-cleanup.sh [OPTIONS]
19
+ #
20
+ # Options:
21
+ # --dry-run Run in dry-run mode (no actual deletions)
22
+ # --agent-id AGENT Filter by agent ID
23
+ # --backup-type TYPE Filter by backup type (pre-edit, checkpoint, manual)
24
+ # --older-than DAYS Delete backups older than N days
25
+ # --compress Compress old backups instead of deleting
26
+ # --compress-age DAYS Compress backups older than N days (default: 7)
27
+ # --force Skip confirmation prompts
28
+ # --report Show disk usage report only
29
+ # --db-path PATH Path to SQLite database
30
+ # --backup-dir PATH Path to backup directory
31
+ # --verbose Verbose output
32
+ # --help Show this help message
33
+ #
34
+ # Examples:
35
+ # # Show disk usage report
36
+ # ./scripts/backup-cleanup.sh --report
37
+ #
38
+ # # Delete expired backups (dry-run)
39
+ # ./scripts/backup-cleanup.sh --dry-run
40
+ #
41
+ # # Delete backups older than 30 days for specific agent
42
+ # ./scripts/backup-cleanup.sh --agent-id backend-dev-001 --older-than 30
43
+ #
44
+ # # Compress backups older than 7 days
45
+ # ./scripts/backup-cleanup.sh --compress
46
+ #
47
+ ##############################################################################
48
+
49
+ set -euo pipefail
50
+
51
+ # === Default Configuration ===
52
+
53
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
54
+ PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
55
+ BACKUP_DIR="${PROJECT_ROOT}/.backups"
56
+ DB_PATH="${PROJECT_ROOT}/claude-assets/skills/cfn-redis-coordination/data/backups.db"
57
+ DRY_RUN=false
58
+ AGENT_ID=""
59
+ BACKUP_TYPE=""
60
+ OLDER_THAN_DAYS=""
61
+ COMPRESS=false
62
+ COMPRESS_AGE_DAYS=7
63
+ FORCE=false
64
+ REPORT_ONLY=false
65
+ VERBOSE=false
66
+
67
+ # === Color Codes ===
68
+
69
+ RED='\033[0;31m'
70
+ GREEN='\033[0;32m'
71
+ YELLOW='\033[1;33m'
72
+ BLUE='\033[0;34m'
73
+ NC='\033[0m' # No Color
74
+
75
+ # === Helper Functions ===
76
+
77
+ log_info() {
78
+ echo -e "${BLUE}[INFO]${NC} $*"
79
+ }
80
+
81
+ log_success() {
82
+ echo -e "${GREEN}[SUCCESS]${NC} $*"
83
+ }
84
+
85
+ log_warning() {
86
+ echo -e "${YELLOW}[WARNING]${NC} $*"
87
+ }
88
+
89
+ log_error() {
90
+ echo -e "${RED}[ERROR]${NC} $*" >&2
91
+ }
92
+
93
+ log_verbose() {
94
+ if [[ "$VERBOSE" == "true" ]]; then
95
+ echo -e "${BLUE}[VERBOSE]${NC} $*"
96
+ fi
97
+ }
98
+
99
+ show_help() {
100
+ cat << EOF
101
+ Unified Backup Cleanup Script
102
+
103
+ Usage:
104
+ ./scripts/backup-cleanup.sh [OPTIONS]
105
+
106
+ Options:
107
+ --dry-run Run in dry-run mode (no actual deletions)
108
+ --agent-id AGENT Filter by agent ID
109
+ --backup-type TYPE Filter by backup type (pre-edit, checkpoint, manual)
110
+ --older-than DAYS Delete backups older than N days
111
+ --compress Compress old backups instead of deleting
112
+ --compress-age DAYS Compress backups older than N days (default: 7)
113
+ --force Skip confirmation prompts
114
+ --report Show disk usage report only
115
+ --db-path PATH Path to SQLite database
116
+ --backup-dir PATH Path to backup directory
117
+ --verbose Verbose output
118
+ --help Show this help message
119
+
120
+ Examples:
121
+ # Show disk usage report
122
+ ./scripts/backup-cleanup.sh --report
123
+
124
+ # Delete expired backups (dry-run)
125
+ ./scripts/backup-cleanup.sh --dry-run
126
+
127
+ # Delete backups older than 30 days for specific agent
128
+ ./scripts/backup-cleanup.sh --agent-id backend-dev-001 --older-than 30
129
+
130
+ # Compress backups older than 7 days
131
+ ./scripts/backup-cleanup.sh --compress
132
+
133
+ EOF
134
+ }
135
+
136
+ format_bytes() {
137
+ local bytes="$1"
138
+
139
+ if [[ -z "$bytes" ]] || [[ "$bytes" == "null" ]] || [[ "$bytes" -eq 0 ]]; then
140
+ echo "0 B"
141
+ return
142
+ fi
143
+
144
+ if [[ "$bytes" -lt 1024 ]]; then
145
+ echo "${bytes} B"
146
+ elif [[ "$bytes" -lt 1048576 ]]; then
147
+ echo "$((bytes / 1024)) KB"
148
+ elif [[ "$bytes" -lt 1073741824 ]]; then
149
+ echo "$((bytes / 1048576)) MB"
150
+ else
151
+ echo "$((bytes / 1073741824)) GB"
152
+ fi
153
+ }
154
+
155
+ # === Database Query Functions ===
156
+
157
+ get_disk_usage_stats() {
158
+ sqlite3 "$DB_PATH" <<EOF
159
+ .mode json
160
+ SELECT
161
+ COUNT(*) as total_backups,
162
+ SUM(CASE WHEN deleted_at IS NULL AND expires_at > datetime('now') THEN 1 ELSE 0 END) as active_backups,
163
+ SUM(CASE WHEN deleted_at IS NULL AND expires_at <= datetime('now') THEN 1 ELSE 0 END) as expired_backups,
164
+ SUM(file_size) as total_size_bytes,
165
+ SUM(CASE WHEN is_compressed = 1 THEN file_size ELSE 0 END) as compressed_size_bytes,
166
+ AVG(CASE WHEN is_compressed = 1 THEN compression_ratio ELSE NULL END) as avg_compression_ratio
167
+ FROM backups
168
+ WHERE deleted_at IS NULL;
169
+ EOF
170
+ }
171
+
172
+ get_backups_by_type() {
173
+ sqlite3 "$DB_PATH" <<EOF
174
+ .mode json
175
+ SELECT
176
+ backup_type,
177
+ COUNT(*) as count,
178
+ SUM(file_size) as total_size
179
+ FROM backups
180
+ WHERE deleted_at IS NULL
181
+ GROUP BY backup_type;
182
+ EOF
183
+ }
184
+
185
+ get_backups_by_agent() {
186
+ sqlite3 "$DB_PATH" <<EOF
187
+ .mode json
188
+ SELECT
189
+ agent_id,
190
+ COUNT(*) as count,
191
+ SUM(file_size) as total_size
192
+ FROM backups
193
+ WHERE deleted_at IS NULL
194
+ GROUP BY agent_id
195
+ ORDER BY total_size DESC
196
+ LIMIT 10;
197
+ EOF
198
+ }
199
+
200
+ get_expired_backups() {
201
+ local where_clauses="deleted_at IS NULL AND expires_at <= datetime('now')"
202
+
203
+ if [[ -n "$AGENT_ID" ]]; then
204
+ where_clauses="$where_clauses AND agent_id = '$AGENT_ID'"
205
+ fi
206
+
207
+ if [[ -n "$BACKUP_TYPE" ]]; then
208
+ where_clauses="$where_clauses AND backup_type = '$BACKUP_TYPE'"
209
+ fi
210
+
211
+ if [[ -n "$OLDER_THAN_DAYS" ]]; then
212
+ where_clauses="$where_clauses AND created_at < datetime('now', '-$OLDER_THAN_DAYS days')"
213
+ fi
214
+
215
+ sqlite3 "$DB_PATH" <<EOF
216
+ .mode json
217
+ SELECT id, agent_id, file_path, backup_path, file_size, backup_type, created_at
218
+ FROM backups
219
+ WHERE $where_clauses;
220
+ EOF
221
+ }
222
+
223
+ get_compressible_backups() {
224
+ local compress_age="${COMPRESS_AGE_DAYS:-7}"
225
+ local where_clauses="deleted_at IS NULL AND is_compressed = 0 AND created_at < datetime('now', '-$compress_age days')"
226
+
227
+ if [[ -n "$AGENT_ID" ]]; then
228
+ where_clauses="$where_clauses AND agent_id = '$AGENT_ID'"
229
+ fi
230
+
231
+ if [[ -n "$BACKUP_TYPE" ]]; then
232
+ where_clauses="$where_clauses AND backup_type = '$BACKUP_TYPE'"
233
+ fi
234
+
235
+ sqlite3 "$DB_PATH" <<EOF
236
+ .mode json
237
+ SELECT id, agent_id, file_path, backup_path, file_size, backup_type, created_at
238
+ FROM backups
239
+ WHERE $where_clauses;
240
+ EOF
241
+ }
242
+
243
+ mark_backup_deleted() {
244
+ local backup_id="$1"
245
+
246
+ sqlite3 "$DB_PATH" <<EOF
247
+ UPDATE backups SET deleted_at = datetime('now') WHERE id = '$backup_id';
248
+ EOF
249
+ }
250
+
251
+ mark_backup_compressed() {
252
+ local backup_id="$1"
253
+ local original_size="$2"
254
+ local compressed_size="$3"
255
+ local compression_ratio=$(echo "scale=4; $compressed_size / $original_size" | bc)
256
+
257
+ sqlite3 "$DB_PATH" <<EOF
258
+ UPDATE backups
259
+ SET is_compressed = 1,
260
+ compressed_at = datetime('now'),
261
+ compression_ratio = $compression_ratio,
262
+ backup_size = $compressed_size
263
+ WHERE id = '$backup_id';
264
+ EOF
265
+ }
266
+
267
+ # === Cleanup Functions ===
268
+
269
+ show_disk_usage_report() {
270
+ log_info "Generating disk usage report..."
271
+ echo ""
272
+
273
+ # Overall statistics
274
+ local stats
275
+ stats=$(get_disk_usage_stats)
276
+
277
+ local total_backups=$(echo "$stats" | jq -r '.[0].total_backups // 0')
278
+ local active_backups=$(echo "$stats" | jq -r '.[0].active_backups // 0')
279
+ local expired_backups=$(echo "$stats" | jq -r '.[0].expired_backups // 0')
280
+ local total_size=$(echo "$stats" | jq -r '.[0].total_size_bytes // 0')
281
+ local compressed_size=$(echo "$stats" | jq -r '.[0].compressed_size_bytes // 0')
282
+ local avg_compression=$(echo "$stats" | jq -r '.[0].avg_compression_ratio // 0')
283
+
284
+ echo "==================================================================="
285
+ echo " BACKUP DISK USAGE REPORT"
286
+ echo "==================================================================="
287
+ echo ""
288
+ echo "Overall Statistics:"
289
+ echo " Total Backups: $total_backups"
290
+ echo " Active Backups: $active_backups"
291
+ echo " Expired Backups: $expired_backups"
292
+ echo " Total Size: $(format_bytes "$total_size")"
293
+ echo " Compressed Size: $(format_bytes "$compressed_size")"
294
+ echo " Avg Compression: $(printf "%.2f%%" "$(echo "$avg_compression * 100" | bc)")"
295
+ echo ""
296
+
297
+ # By type
298
+ local by_type
299
+ by_type=$(get_backups_by_type)
300
+
301
+ echo "Backups by Type:"
302
+ echo "$by_type" | jq -r '.[] | " \(.backup_type): \(.count) backups, \(.total_size) bytes"'
303
+ echo ""
304
+
305
+ # By agent (top 10)
306
+ local by_agent
307
+ by_agent=$(get_backups_by_agent)
308
+
309
+ echo "Top 10 Agents by Size:"
310
+ echo "$by_agent" | jq -r '.[] | " \(.agent_id): \(.count) backups, \(.total_size) bytes"'
311
+ echo ""
312
+
313
+ # Disk usage of backup directory
314
+ if [[ -d "$BACKUP_DIR" ]]; then
315
+ local disk_usage
316
+ disk_usage=$(du -sb "$BACKUP_DIR" 2>/dev/null | cut -f1)
317
+ echo "Backup Directory:"
318
+ echo " Path: $BACKUP_DIR"
319
+ echo " Disk Usage: $(format_bytes "$disk_usage")"
320
+ echo ""
321
+ fi
322
+
323
+ echo "==================================================================="
324
+ }
325
+
326
+ compress_backup() {
327
+ local backup_path="$1"
328
+ local backup_id="$2"
329
+
330
+ if [[ ! -f "$backup_path" ]]; then
331
+ log_warning "Backup file not found: $backup_path"
332
+ return 1
333
+ fi
334
+
335
+ local original_size
336
+ original_size=$(stat -f%z "$backup_path" 2>/dev/null || stat -c%s "$backup_path" 2>/dev/null)
337
+
338
+ local compressed_path="${backup_path}.gz"
339
+
340
+ if [[ "$DRY_RUN" == "true" ]]; then
341
+ log_info "[DRY-RUN] Would compress: $backup_path"
342
+ return 0
343
+ fi
344
+
345
+ # Compress file
346
+ if gzip -c "$backup_path" > "$compressed_path" 2>/dev/null; then
347
+ local compressed_size
348
+ compressed_size=$(stat -f%z "$compressed_path" 2>/dev/null || stat -c%s "$compressed_path" 2>/dev/null)
349
+
350
+ # Remove original
351
+ rm "$backup_path"
352
+
353
+ # Update database
354
+ mark_backup_compressed "$backup_id" "$original_size" "$compressed_size"
355
+
356
+ local savings=$((original_size - compressed_size))
357
+ local savings_pct=$(echo "scale=2; ($savings * 100) / $original_size" | bc)
358
+
359
+ log_success "Compressed: $backup_path (saved $(format_bytes "$savings"), ${savings_pct}%)"
360
+ return 0
361
+ else
362
+ log_error "Compression failed: $backup_path"
363
+ rm -f "$compressed_path"
364
+ return 1
365
+ fi
366
+ }
367
+
368
+ delete_backup() {
369
+ local backup_path="$1"
370
+ local backup_id="$2"
371
+
372
+ if [[ ! -f "$backup_path" ]] && [[ ! -f "${backup_path}.gz" ]]; then
373
+ log_verbose "Backup file not found: $backup_path"
374
+ # Still mark as deleted in database
375
+ if [[ "$DRY_RUN" == "false" ]]; then
376
+ mark_backup_deleted "$backup_id"
377
+ fi
378
+ return 0
379
+ fi
380
+
381
+ local file_to_delete="$backup_path"
382
+ if [[ -f "${backup_path}.gz" ]]; then
383
+ file_to_delete="${backup_path}.gz"
384
+ fi
385
+
386
+ if [[ "$DRY_RUN" == "true" ]]; then
387
+ log_info "[DRY-RUN] Would delete: $file_to_delete"
388
+ return 0
389
+ fi
390
+
391
+ # Delete file
392
+ if rm "$file_to_delete" 2>/dev/null; then
393
+ # Delete parent directory if empty
394
+ local parent_dir
395
+ parent_dir=$(dirname "$file_to_delete")
396
+ if [[ -d "$parent_dir" ]] && [[ -z "$(ls -A "$parent_dir")" ]]; then
397
+ rmdir "$parent_dir" 2>/dev/null || true
398
+ fi
399
+
400
+ # Mark as deleted in database
401
+ mark_backup_deleted "$backup_id"
402
+
403
+ log_verbose "Deleted: $file_to_delete"
404
+ return 0
405
+ else
406
+ log_error "Deletion failed: $file_to_delete"
407
+ return 1
408
+ fi
409
+ }
410
+
411
+ cleanup_expired_backups() {
412
+ log_info "Finding expired backups..."
413
+
414
+ local expired_backups
415
+ expired_backups=$(get_expired_backups)
416
+
417
+ local count
418
+ count=$(echo "$expired_backups" | jq 'length')
419
+
420
+ if [[ "$count" -eq 0 ]]; then
421
+ log_success "No expired backups found"
422
+ return 0
423
+ fi
424
+
425
+ log_warning "Found $count expired backups"
426
+
427
+ # Calculate total size
428
+ local total_size=0
429
+ while IFS= read -r backup; do
430
+ local size
431
+ size=$(echo "$backup" | jq -r '.file_size')
432
+ total_size=$((total_size + size))
433
+ done < <(echo "$expired_backups" | jq -c '.[]')
434
+
435
+ log_info "Total size to clean: $(format_bytes "$total_size")"
436
+
437
+ # Confirm deletion unless forced
438
+ if [[ "$FORCE" == "false" ]] && [[ "$DRY_RUN" == "false" ]]; then
439
+ echo ""
440
+ read -p "Proceed with deletion? (y/N): " -n 1 -r
441
+ echo ""
442
+ if [[ ! $REPLY =~ ^[Yy]$ ]]; then
443
+ log_warning "Cleanup cancelled"
444
+ return 0
445
+ fi
446
+ fi
447
+
448
+ # Delete backups
449
+ local deleted_count=0
450
+ local failed_count=0
451
+
452
+ while IFS= read -r backup; do
453
+ local backup_id
454
+ backup_id=$(echo "$backup" | jq -r '.id')
455
+ local backup_path
456
+ backup_path=$(echo "$backup" | jq -r '.backup_path')
457
+
458
+ if delete_backup "$backup_path" "$backup_id"; then
459
+ ((deleted_count++)) || true
460
+ else
461
+ ((failed_count++)) || true
462
+ fi
463
+ done < <(echo "$expired_backups" | jq -c '.[]')
464
+
465
+ if [[ "$DRY_RUN" == "true" ]]; then
466
+ log_info "[DRY-RUN] Would delete $count backups ($(format_bytes "$total_size"))"
467
+ else
468
+ log_success "Deleted $deleted_count backups, $failed_count failed"
469
+ fi
470
+ }
471
+
472
+ compress_old_backups() {
473
+ log_info "Finding backups to compress (older than $COMPRESS_AGE_DAYS days)..."
474
+
475
+ local compressible_backups
476
+ compressible_backups=$(get_compressible_backups)
477
+
478
+ local count
479
+ count=$(echo "$compressible_backups" | jq 'length')
480
+
481
+ if [[ "$count" -eq 0 ]]; then
482
+ log_success "No backups to compress"
483
+ return 0
484
+ fi
485
+
486
+ log_info "Found $count backups to compress"
487
+
488
+ # Compress backups
489
+ local compressed_count=0
490
+ local failed_count=0
491
+ local total_savings=0
492
+
493
+ while IFS= read -r backup; do
494
+ local backup_id
495
+ backup_id=$(echo "$backup" | jq -r '.id')
496
+ local backup_path
497
+ backup_path=$(echo "$backup" | jq -r '.backup_path')
498
+
499
+ if compress_backup "$backup_path" "$backup_id"; then
500
+ ((compressed_count++)) || true
501
+ else
502
+ ((failed_count++)) || true
503
+ fi
504
+ done < <(echo "$compressible_backups" | jq -c '.[]')
505
+
506
+ if [[ "$DRY_RUN" == "true" ]]; then
507
+ log_info "[DRY-RUN] Would compress $count backups"
508
+ else
509
+ log_success "Compressed $compressed_count backups, $failed_count failed"
510
+ fi
511
+ }
512
+
513
+ # === Parse Arguments ===
514
+
515
+ while [[ "$#" -gt 0 ]]; do
516
+ case $1 in
517
+ --dry-run)
518
+ DRY_RUN=true
519
+ shift
520
+ ;;
521
+ --agent-id)
522
+ AGENT_ID="$2"
523
+ shift 2
524
+ ;;
525
+ --backup-type)
526
+ BACKUP_TYPE="$2"
527
+ shift 2
528
+ ;;
529
+ --older-than)
530
+ OLDER_THAN_DAYS="$2"
531
+ shift 2
532
+ ;;
533
+ --compress)
534
+ COMPRESS=true
535
+ shift
536
+ ;;
537
+ --compress-age)
538
+ COMPRESS_AGE_DAYS="$2"
539
+ shift 2
540
+ ;;
541
+ --force)
542
+ FORCE=true
543
+ shift
544
+ ;;
545
+ --report)
546
+ REPORT_ONLY=true
547
+ shift
548
+ ;;
549
+ --db-path)
550
+ DB_PATH="$2"
551
+ shift 2
552
+ ;;
553
+ --backup-dir)
554
+ BACKUP_DIR="$2"
555
+ shift 2
556
+ ;;
557
+ --verbose)
558
+ VERBOSE=true
559
+ shift
560
+ ;;
561
+ --help)
562
+ show_help
563
+ exit 0
564
+ ;;
565
+ *)
566
+ log_error "Unknown option: $1"
567
+ show_help
568
+ exit 1
569
+ ;;
570
+ esac
571
+ done
572
+
573
+ # === Validation ===
574
+
575
+ if [[ ! -f "$DB_PATH" ]]; then
576
+ log_error "Database not found: $DB_PATH"
577
+ exit 1
578
+ fi
579
+
580
+ if [[ ! -d "$BACKUP_DIR" ]]; then
581
+ log_warning "Backup directory not found: $BACKUP_DIR"
582
+ fi
583
+
584
+ # Check for required tools
585
+ if ! command -v sqlite3 &> /dev/null; then
586
+ log_error "sqlite3 is required but not installed"
587
+ exit 1
588
+ fi
589
+
590
+ if ! command -v jq &> /dev/null; then
591
+ log_error "jq is required but not installed"
592
+ exit 1
593
+ fi
594
+
595
+ if [[ "$COMPRESS" == "true" ]] && ! command -v gzip &> /dev/null; then
596
+ log_error "gzip is required for compression but not installed"
597
+ exit 1
598
+ fi
599
+
600
+ # === Main Execution ===
601
+
602
+ log_info "Backup Cleanup Script"
603
+ log_info "Database: $DB_PATH"
604
+ log_info "Backup Directory: $BACKUP_DIR"
605
+
606
+ if [[ "$DRY_RUN" == "true" ]]; then
607
+ log_warning "Running in DRY-RUN mode (no changes will be made)"
608
+ fi
609
+
610
+ echo ""
611
+
612
+ # Report only mode
613
+ if [[ "$REPORT_ONLY" == "true" ]]; then
614
+ show_disk_usage_report
615
+ exit 0
616
+ fi
617
+
618
+ # Compression mode
619
+ if [[ "$COMPRESS" == "true" ]]; then
620
+ compress_old_backups
621
+ exit 0
622
+ fi
623
+
624
+ # Default: cleanup expired backups
625
+ cleanup_expired_backups
626
+
627
+ log_success "Cleanup completed"