claude-flow-novice 2.15.3 → 2.15.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (473) hide show
  1. package/.claude/cfn-extras/skills/advanced-features/cfn-agent-swap/recommend-swap.sh +59 -59
  2. package/.claude/cfn-extras/skills/analytics/cfn-improvement-recommender/recommend-improvements.sh +91 -91
  3. package/.claude/cfn-extras/skills/analytics/cfn-pattern-extraction/extract-patterns.sh +79 -79
  4. package/.claude/cfn-extras/skills/analytics/cfn-retrospective-report/generate-report.sh +100 -100
  5. package/.claude/cfn-extras/skills/analytics/cfn-telemetry/start-telemetry.sh +110 -110
  6. package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/add-bullet.sh +145 -145
  7. package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/log-merge.sh +67 -67
  8. package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/monitor-injection-performance.sh +137 -137
  9. package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/optimize-injection-pipeline.sh +168 -168
  10. package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/query-reflections.sh +35 -35
  11. package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/store-reflection.sh +45 -45
  12. package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/track-ab-test.sh +41 -41
  13. package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/update-reflection.sh +41 -41
  14. package/.claude/cfn-extras/skills/deprecated/cfn-cli-setup/validate-cli-environment.sh +191 -191
  15. package/.claude/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/create-campaign.sh +231 -231
  16. package/.claude/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/get-campaign-performance.sh +190 -190
  17. package/.claude/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/pause-campaign.sh +142 -142
  18. package/.claude/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/set-budget.sh +181 -181
  19. package/.claude/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/update-bid-strategy.sh +133 -133
  20. package/.claude/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/get-conversation-history.sh +121 -121
  21. package/.claude/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/qualify-lead.sh +156 -156
  22. package/.claude/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/schedule-demo.sh +181 -181
  23. package/.claude/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/send-message.sh +137 -137
  24. package/.claude/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/transfer-to-human.sh +179 -179
  25. package/.claude/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/create-campaign.sh +183 -183
  26. package/.claude/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/get-delivery-status.sh +139 -139
  27. package/.claude/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/opt-out.sh +150 -150
  28. package/.claude/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/schedule-campaign.sh +187 -187
  29. package/.claude/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/send-sms.sh +181 -181
  30. package/.claude/cfn-extras/skills/ui-portal/cfn-web-portal/test-web-portal-skill.sh +50 -50
  31. package/.claude/cfn-extras/skills/ui-portal/cfn-web-portal/validate-deployment.sh +84 -84
  32. package/.claude/cfn-extras/skills/utility/cfn-environment-sanitization/sanitize-environment.sh +243 -243
  33. package/.claude/commands/cfn-loop-cli.md +29 -6
  34. package/.claude/commands/switch-api.md +31 -10
  35. package/.claude/hooks/cfn-lint-sql-injection.sh +61 -0
  36. package/.claude/hooks/cfn-post-edit-cfn-retrospective.sh +33 -2
  37. package/.claude/hooks/cfn-pre-edit-security-warning.sh +40 -0
  38. package/.claude/skills/cfn-agent-spawning/spawn-agent.sh +22 -24
  39. package/.claude/skills/cfn-docker-agent-spawning/SKILL.md +28 -4
  40. package/.claude/skills/cfn-docker-agent-spawning/spawn-agent.sh +3 -1
  41. package/.claude/skills/cfn-docker-loop-orchestration/orchestrate.sh +224 -20
  42. package/.claude/skills/cfn-loop-orchestration/helpers/gate-check.sh +550 -46
  43. package/.claude/skills/cfn-loop-orchestration/helpers/parse-test-results.sh +277 -0
  44. package/.claude/skills/cfn-loop-orchestration/orchestrate.sh +238 -29
  45. package/.claude/skills/cfn-loop-orchestration/security_utils.sh +24 -0
  46. package/.claude/skills/cfn-loop-orchestration/test-iteration-context-injection.sh +366 -0
  47. package/.claude/skills/cfn-redis-coordination/CENTRALIZED_REDIS_WRAPPER.md +319 -0
  48. package/.claude/skills/cfn-redis-coordination/agent-log.sh +4 -0
  49. package/.claude/skills/cfn-redis-coordination/agent-log.sh.bak +124 -0
  50. package/.claude/skills/cfn-redis-coordination/agent-recovery.sh +2 -2
  51. package/.claude/skills/cfn-redis-coordination/collect-confidence-scores.sh +30 -0
  52. package/.claude/skills/cfn-redis-coordination/get-context.sh +33 -0
  53. package/.claude/skills/cfn-redis-coordination/get-success-criteria.sh +54 -0
  54. package/.claude/skills/cfn-redis-coordination/invoke-waiting-mode.sh +6 -2
  55. package/.claude/skills/cfn-redis-coordination/redis-cli-wrapper.sh +24 -3
  56. package/.claude/skills/cfn-redis-coordination/redis-functions.sh +34 -0
  57. package/.claude/skills/cfn-redis-coordination/report-completion.sh +24 -31
  58. package/.claude/skills/cfn-redis-coordination/store-context.sh +4 -0
  59. package/.claude/skills/cfn-redis-coordination/store-success-criteria.sh +85 -0
  60. package/.claude/skills/cfn-redis-coordination/update-all-scripts.sh +67 -0
  61. package/.claude/skills/cfn-sqlite-memory/ttl-cleanup.sh +17 -25
  62. package/.claude/skills/cfn-transparency-middleware/test-e2e.sh +15 -0
  63. package/.claude/skills/cfn-transparency-middleware/tests/input-validation.sh +15 -0
  64. package/README.md +116 -475
  65. package/claude-assets/agents/cfn-dev-team/README.md +103 -0
  66. package/claude-assets/agents/cfn-dev-team/architecture/goal-planner.md +1 -1
  67. package/claude-assets/agents/cfn-dev-team/coordinators/cfn-frontend-coordinator.md +77 -15
  68. package/claude-assets/agents/cfn-dev-team/coordinators/cfn-v3-coordinator.md +355 -6
  69. package/claude-assets/agents/cfn-dev-team/coordinators/consensus-builder.md +82 -1
  70. package/claude-assets/agents/cfn-dev-team/coordinators/handoff-coordinator.md +82 -1
  71. package/claude-assets/agents/cfn-dev-team/coordinators/multi-sprint-coordinator.md +77 -15
  72. package/claude-assets/agents/cfn-dev-team/dev-ops/docker-specialist.md +99 -12
  73. package/claude-assets/agents/cfn-dev-team/dev-ops/github-commit-agent.md +1 -1
  74. package/claude-assets/agents/cfn-dev-team/dev-ops/kubernetes-specialist.md +97 -0
  75. package/claude-assets/agents/cfn-dev-team/dev-ops/monitoring-specialist.md +20 -1
  76. package/claude-assets/agents/cfn-dev-team/developers/api-gateway-specialist.md +97 -0
  77. package/claude-assets/agents/cfn-dev-team/developers/backend-developer.md +110 -13
  78. package/claude-assets/agents/cfn-dev-team/developers/data/data-engineer.md +106 -15
  79. package/claude-assets/agents/cfn-dev-team/developers/database/database-architect.md +115 -11
  80. package/claude-assets/agents/cfn-dev-team/developers/frontend/mobile-dev.md +94 -7
  81. package/claude-assets/agents/cfn-dev-team/developers/frontend/react-frontend-engineer.md +87 -9
  82. package/claude-assets/agents/cfn-dev-team/developers/frontend/typescript-specialist.md +85 -7
  83. package/claude-assets/agents/cfn-dev-team/developers/frontend/ui-designer.md +160 -28
  84. package/claude-assets/agents/cfn-dev-team/developers/graphql-specialist.md +101 -19
  85. package/claude-assets/agents/cfn-dev-team/developers/rust-developer.md +108 -14
  86. package/claude-assets/agents/cfn-dev-team/reviewers/{reviewer.md → code-reviewer.md} +95 -8
  87. package/claude-assets/agents/cfn-dev-team/reviewers/quality/code-quality-validator.md +107 -7
  88. package/claude-assets/agents/cfn-dev-team/reviewers/quality/perf-analyzer.md +98 -7
  89. package/claude-assets/agents/cfn-dev-team/reviewers/quality/performance-benchmarker.md +95 -7
  90. package/claude-assets/agents/cfn-dev-team/reviewers/quality/security-specialist.md +136 -9
  91. package/claude-assets/agents/cfn-dev-team/testers/api-testing-specialist.md +108 -1
  92. package/claude-assets/agents/cfn-dev-team/testers/chaos-engineering-specialist.md +107 -13
  93. package/claude-assets/agents/cfn-dev-team/testers/contract-tester.md +737 -0
  94. package/claude-assets/agents/cfn-dev-team/testers/e2e/playwright-tester.md +1 -1
  95. package/claude-assets/agents/cfn-dev-team/testers/integration-tester.md +828 -0
  96. package/claude-assets/agents/cfn-dev-team/testers/interaction-tester.md +106 -7
  97. package/claude-assets/agents/cfn-dev-team/testers/load-testing-specialist.md +77 -0
  98. package/claude-assets/agents/cfn-dev-team/testers/mutation-testing-specialist.md +684 -0
  99. package/claude-assets/agents/cfn-dev-team/testers/playwright-tester.md +110 -1
  100. package/claude-assets/agents/cfn-dev-team/testers/tester.md +94 -7
  101. package/claude-assets/agents/cfn-dev-team/utility/code-booster.md +1 -3
  102. package/claude-assets/agents/cfn-dev-team/utility/epic-creator.md +87 -13
  103. package/claude-assets/agents/cfn-dev-team/utility/memory-leak-specialist.md +103 -7
  104. package/claude-assets/agents/cfn-dev-team/utility/researcher.md +1 -3
  105. package/claude-assets/agents/cfn-dev-team/utility/z-ai-specialist.md +94 -7
  106. package/claude-assets/agents/docker-coordinators/cfn-docker-v3-coordinator.md +46 -0
  107. package/claude-assets/agents/project-only-agents/npm-package-specialist.md +1 -1
  108. package/claude-assets/cfn-extras/skills/advanced-features/cfn-agent-swap/recommend-swap.sh +59 -59
  109. package/claude-assets/cfn-extras/skills/analytics/cfn-improvement-recommender/recommend-improvements.sh +91 -91
  110. package/claude-assets/cfn-extras/skills/analytics/cfn-pattern-extraction/extract-patterns.sh +79 -79
  111. package/claude-assets/cfn-extras/skills/analytics/cfn-retrospective-report/generate-report.sh +100 -100
  112. package/claude-assets/cfn-extras/skills/analytics/cfn-telemetry/start-telemetry.sh +110 -110
  113. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/add-bullet.sh +145 -145
  114. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/log-merge.sh +67 -67
  115. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/monitor-injection-performance.sh +137 -137
  116. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/optimize-injection-pipeline.sh +168 -168
  117. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/query-reflections.sh +35 -35
  118. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/store-reflection.sh +45 -45
  119. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/track-ab-test.sh +41 -41
  120. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/update-reflection.sh +41 -41
  121. package/claude-assets/cfn-extras/skills/deprecated/cfn-cli-setup/validate-cli-environment.sh +191 -191
  122. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/create-campaign.sh +231 -231
  123. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/get-campaign-performance.sh +190 -190
  124. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/pause-campaign.sh +142 -142
  125. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/set-budget.sh +181 -181
  126. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/update-bid-strategy.sh +133 -133
  127. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/get-conversation-history.sh +121 -121
  128. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/qualify-lead.sh +156 -156
  129. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/schedule-demo.sh +181 -181
  130. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/send-message.sh +137 -137
  131. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/transfer-to-human.sh +179 -179
  132. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/create-campaign.sh +183 -183
  133. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/get-delivery-status.sh +139 -139
  134. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/opt-out.sh +150 -150
  135. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/schedule-campaign.sh +187 -187
  136. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/send-sms.sh +181 -181
  137. package/claude-assets/cfn-extras/skills/ui-portal/cfn-web-portal/test-web-portal-skill.sh +50 -50
  138. package/claude-assets/cfn-extras/skills/ui-portal/cfn-web-portal/validate-deployment.sh +84 -84
  139. package/claude-assets/cfn-extras/skills/utility/cfn-environment-sanitization/sanitize-environment.sh +243 -243
  140. package/claude-assets/commands/cfn-loop-cli.md +29 -6
  141. package/claude-assets/commands/switch-api.md +31 -10
  142. package/claude-assets/hooks/cfn-lint-sql-injection.sh +61 -0
  143. package/claude-assets/hooks/cfn-post-edit-cfn-retrospective.sh +33 -2
  144. package/claude-assets/hooks/cfn-pre-edit-security-warning.sh +40 -0
  145. package/claude-assets/hooks/detect-hardcoded-credentials.sh +212 -0
  146. package/claude-assets/skills/SKILL_TEMPLATE.md +774 -0
  147. package/claude-assets/skills/agent-lifecycle/execute-lifecycle-hook.sh +84 -113
  148. package/claude-assets/skills/agent-lifecycle/simple-audit.sh +33 -6
  149. package/claude-assets/skills/agent-template-generator/SKILL.md +440 -0
  150. package/claude-assets/skills/agent-template-generator/generate-agent.sh +405 -0
  151. package/claude-assets/skills/agent-validation-linter/SKILL.md +589 -0
  152. package/claude-assets/skills/agent-validation-linter/lint-agents.sh +271 -0
  153. package/claude-assets/skills/bootstrap/bash-fundamentals.md +786 -0
  154. package/claude-assets/skills/bootstrap/database-connection.md +464 -0
  155. package/claude-assets/skills/bootstrap/error-handling.md +580 -0
  156. package/claude-assets/skills/bootstrap/file-operations.md +699 -0
  157. package/claude-assets/skills/bootstrap/skill-loader.md +616 -0
  158. package/claude-assets/skills/bootstrap/sqlite-params.sh +287 -0
  159. package/claude-assets/skills/cfn-agent-spawning/spawn-agent.sh +22 -24
  160. package/claude-assets/skills/cfn-automatic-memory-persistence/test-memory-persistence.sh +17 -16
  161. package/claude-assets/skills/cfn-deployment/SKILL.md +293 -0
  162. package/claude-assets/skills/cfn-deployment/execute.sh +21 -0
  163. package/claude-assets/skills/cfn-docker-agent-spawning/SKILL.md +28 -4
  164. package/claude-assets/skills/cfn-docker-agent-spawning/spawn-agent.sh +3 -1
  165. package/claude-assets/skills/cfn-docker-loop-orchestration/orchestrate.sh +224 -20
  166. package/claude-assets/skills/cfn-environment-sanitization/sanitize-environment.sh +38 -0
  167. package/claude-assets/skills/cfn-error-batching-strategy/lib/core-functions.sh +47 -47
  168. package/claude-assets/skills/cfn-file-operations/SKILL.md +290 -0
  169. package/claude-assets/skills/cfn-file-operations/execute.sh +129 -0
  170. package/claude-assets/skills/cfn-file-operations/lib/atomic-write.sh +294 -0
  171. package/claude-assets/skills/cfn-file-operations/lib/lock.sh +361 -0
  172. package/claude-assets/skills/cfn-file-operations/test.sh +369 -0
  173. package/claude-assets/skills/cfn-log-operations/SKILL.md +308 -0
  174. package/claude-assets/skills/cfn-log-operations/execute.sh +420 -0
  175. package/claude-assets/skills/cfn-log-operations/lib/rotate.sh +406 -0
  176. package/claude-assets/skills/cfn-log-operations/lib/search.sh +448 -0
  177. package/claude-assets/skills/cfn-log-operations/test.sh +394 -0
  178. package/claude-assets/skills/cfn-loop-orchestration/helpers/gate-check.sh +550 -46
  179. package/claude-assets/skills/cfn-loop-orchestration/helpers/parse-test-results.sh +277 -0
  180. package/claude-assets/skills/cfn-loop-orchestration/orchestrate.sh +238 -29
  181. package/claude-assets/skills/cfn-loop-orchestration/security_utils.sh +24 -0
  182. package/claude-assets/skills/cfn-loop-orchestration/test-iteration-context-injection.sh +366 -0
  183. package/claude-assets/skills/cfn-parameterized-queries/SKILL.md +339 -0
  184. package/claude-assets/skills/cfn-playbook/query-playbook.sh +19 -15
  185. package/claude-assets/skills/cfn-playbook/update-playbook.sh +25 -14
  186. package/claude-assets/skills/cfn-process-instrumentation/instrument-process.sh +44 -0
  187. package/claude-assets/skills/cfn-promotion/SKILL.md +305 -0
  188. package/claude-assets/skills/cfn-redis-coordination/CENTRALIZED_REDIS_WRAPPER.md +319 -0
  189. package/claude-assets/skills/cfn-redis-coordination/agent-log.sh +4 -0
  190. package/claude-assets/skills/cfn-redis-coordination/agent-log.sh.bak +124 -0
  191. package/claude-assets/skills/cfn-redis-coordination/agent-recovery.sh +2 -2
  192. package/claude-assets/skills/cfn-redis-coordination/collect-confidence-scores.sh +30 -0
  193. package/claude-assets/skills/cfn-redis-coordination/get-context.sh +33 -0
  194. package/claude-assets/skills/cfn-redis-coordination/get-success-criteria.sh +54 -0
  195. package/claude-assets/skills/cfn-redis-coordination/invoke-waiting-mode.sh +6 -2
  196. package/claude-assets/skills/cfn-redis-coordination/redis-cli-wrapper.sh +24 -3
  197. package/claude-assets/skills/cfn-redis-coordination/redis-functions.sh +34 -0
  198. package/claude-assets/skills/cfn-redis-coordination/report-completion.sh +24 -31
  199. package/claude-assets/skills/cfn-redis-coordination/store-context.sh +4 -0
  200. package/claude-assets/skills/cfn-redis-coordination/store-success-criteria.sh +85 -0
  201. package/claude-assets/skills/cfn-redis-coordination/update-all-scripts.sh +67 -0
  202. package/claude-assets/skills/cfn-skill-loader/SKILL.md +466 -0
  203. package/claude-assets/skills/cfn-skill-loader/execute.sh +344 -0
  204. package/claude-assets/skills/cfn-sqlite-memory/ttl-cleanup.sh +17 -25
  205. package/claude-assets/skills/cfn-task-audit/get-audit-data.sh +42 -21
  206. package/claude-assets/skills/cfn-task-audit/store-task-audit.sh +17 -10
  207. package/claude-assets/skills/cfn-test-runner/detect-regressions.sh +17 -14
  208. package/claude-assets/skills/cfn-test-runner/detect-regressions.sh.backup-1763392821 +55 -0
  209. package/claude-assets/skills/cfn-test-runner/store-benchmarks.sh +17 -19
  210. package/claude-assets/skills/cfn-transparency-middleware/test-e2e.sh +15 -0
  211. package/claude-assets/skills/cfn-transparency-middleware/tests/input-validation.sh +15 -0
  212. package/claude-assets/skills/cfn-utilities/SKILL.md +237 -0
  213. package/claude-assets/skills/cfn-utilities/execute.sh +32 -0
  214. package/claude-assets/skills/cfn-utilities/lib/errors.sh +56 -0
  215. package/claude-assets/skills/cfn-utilities/lib/file-ops.sh +164 -0
  216. package/claude-assets/skills/cfn-utilities/lib/logging.sh +77 -0
  217. package/claude-assets/skills/cfn-utilities/lib/retry.sh +127 -0
  218. package/claude-assets/skills/cfn-utilities/test.sh +317 -0
  219. package/claude-assets/skills/integration/agent-handoff.sh +62 -64
  220. package/claude-assets/skills/json-validation/SKILL.md +431 -0
  221. package/claude-assets/skills/json-validation/test-validate-success-criteria.sh +421 -0
  222. package/claude-assets/skills/json-validation/validate-success-criteria.sh +197 -0
  223. package/claude-assets/skills/redis-coordination/validate-parameters.sh +34 -0
  224. package/claude-assets/skills/workflow-codification/DEPLOY_QUICK_REFERENCE.md +106 -0
  225. package/claude-assets/skills/workflow-codification/PROPAGATE_UPDATE_QUICK_REFERENCE.md +366 -0
  226. package/claude-assets/skills/workflow-codification/deploy-approved-skill.sh +481 -0
  227. package/claude-assets/skills/workflow-codification/deploy-approved-skill.sh.backup-1763392820 +512 -0
  228. package/claude-assets/skills/workflow-codification/lib/security-utils.sh +204 -0
  229. package/claude-assets/skills/workflow-codification/propagate-skill-update.sh +648 -0
  230. package/claude-assets/skills/workflow-codification/propagate-skill-update.sh.backup-1763392820 +664 -0
  231. package/claude-assets/skills/workflow-codification/test-integration.sh +15 -0
  232. package/claude-assets/skills/workflow-codification/test-metadata-update.sh +350 -0
  233. package/claude-assets/skills/workflow-codification/track-cost-savings.sh +55 -14
  234. package/claude-assets/skills/workflow-codification/track-cost-savings.sh.backup-1763392821 +445 -0
  235. package/claude-assets/skills/workflow-codification/track-edge-case.sh +27 -60
  236. package/claude-assets/skills/workflow-codification/workflow-codification.db +0 -0
  237. package/dist/ace/ace-curator.js +10 -2
  238. package/dist/ace/ace-curator.js.map +1 -1
  239. package/dist/ace/ace-generator.js +4 -0
  240. package/dist/ace/ace-generator.js.map +1 -1
  241. package/dist/ace/ace-reflector.js +1 -1
  242. package/dist/ace/ace-reflector.js.map +1 -1
  243. package/dist/ace/context-injection.js +24 -2
  244. package/dist/ace/context-injection.js.map +1 -1
  245. package/dist/agents/task-agent-integration.js +1 -1
  246. package/dist/agents/task-agent-integration.js.map +1 -1
  247. package/dist/api/health-endpoints.js +390 -0
  248. package/dist/api/health-endpoints.js.map +1 -0
  249. package/dist/cli/agent-executor.js +4 -1
  250. package/dist/cli/agent-executor.js.map +1 -1
  251. package/dist/cli/agent-prompt-builder.js +89 -1
  252. package/dist/cli/agent-prompt-builder.js.map +1 -1
  253. package/dist/cli/agent-spawn.js +130 -37
  254. package/dist/cli/agent-spawn.js.map +1 -1
  255. package/dist/cli/config-manager.js +109 -91
  256. package/dist/cli/config-manager.js.map +1 -1
  257. package/dist/cli/conversation-fork-cleanup.js +201 -0
  258. package/dist/cli/conversation-fork-cleanup.js.map +1 -0
  259. package/dist/cli/conversation-fork.js +16 -3
  260. package/dist/cli/conversation-fork.js.map +1 -1
  261. package/dist/cli/skill-cache-validator.js +412 -0
  262. package/dist/cli/skill-cache-validator.js.map +1 -0
  263. package/dist/cli/skill-cli.js +991 -0
  264. package/dist/cli/skill-cli.js.map +1 -0
  265. package/dist/cli/skill-execution-logger.js +284 -0
  266. package/dist/cli/skill-execution-logger.js.map +1 -0
  267. package/dist/cli/skill-loader.js +457 -0
  268. package/dist/cli/skill-loader.js.map +1 -0
  269. package/dist/coordination/event-bus.js +2 -2
  270. package/dist/coordination/event-bus.js.map +1 -1
  271. package/dist/coordination/fleet-manager.js +1 -1
  272. package/dist/coordination/fleet-manager.js.map +1 -1
  273. package/dist/coordination/index.js +23 -9
  274. package/dist/coordination/index.js.map +1 -1
  275. package/dist/coordination/types/fleet-manager.types.js.map +1 -1
  276. package/dist/db/migration-manager.js +483 -0
  277. package/dist/db/migration-manager.js.map +1 -0
  278. package/dist/db/skills-query.js +535 -0
  279. package/dist/db/skills-query.js.map +1 -0
  280. package/dist/integration/DatabaseHandoff.js +1 -1
  281. package/dist/integration/DatabaseHandoff.js.map +1 -1
  282. package/dist/jobs/edge-case-analyzer.js +367 -0
  283. package/dist/jobs/edge-case-analyzer.js.map +1 -0
  284. package/dist/jobs/promotion-sla-enforcer.js +288 -0
  285. package/dist/jobs/promotion-sla-enforcer.js.map +1 -0
  286. package/dist/lib/agent-output-parser.js.map +1 -1
  287. package/dist/lib/agent-output-validator.js.map +1 -1
  288. package/dist/lib/agent-workspace.js +281 -0
  289. package/dist/lib/agent-workspace.js.map +1 -0
  290. package/dist/lib/atomic-file-writer.js +377 -0
  291. package/dist/lib/atomic-file-writer.js.map +1 -0
  292. package/dist/lib/backup-manager.js +779 -0
  293. package/dist/lib/backup-manager.js.map +1 -0
  294. package/dist/lib/checkpoint-manager.js +837 -0
  295. package/dist/lib/checkpoint-manager.js.map +1 -0
  296. package/dist/lib/circuit-breaker.js +340 -0
  297. package/dist/lib/circuit-breaker.js.map +1 -0
  298. package/dist/lib/completion-signal-handler.js +243 -0
  299. package/dist/lib/completion-signal-handler.js.map +1 -0
  300. package/dist/lib/config-manager.js +312 -0
  301. package/dist/lib/config-manager.js.map +1 -0
  302. package/dist/lib/config-migrator.js +386 -0
  303. package/dist/lib/config-migrator.js.map +1 -0
  304. package/dist/lib/config-validator.js.map +1 -1
  305. package/dist/lib/correlation-cache.js +311 -0
  306. package/dist/lib/correlation-cache.js.map +1 -0
  307. package/dist/lib/correlation.js +263 -0
  308. package/dist/lib/correlation.js.map +1 -0
  309. package/dist/lib/database-service/connection-pool-manager.js +520 -0
  310. package/dist/lib/database-service/connection-pool-manager.js.map +1 -0
  311. package/dist/lib/database-service/correlation.js +329 -0
  312. package/dist/lib/database-service/correlation.js.map +1 -0
  313. package/dist/lib/database-service/errors.js +120 -0
  314. package/dist/lib/database-service/errors.js.map +1 -0
  315. package/dist/lib/database-service/index.js +168 -0
  316. package/dist/lib/database-service/index.js.map +1 -0
  317. package/dist/lib/database-service/postgres-adapter.js +526 -0
  318. package/dist/lib/database-service/postgres-adapter.js.map +1 -0
  319. package/dist/lib/database-service/redis-adapter.js +360 -0
  320. package/dist/lib/database-service/redis-adapter.js.map +1 -0
  321. package/dist/lib/database-service/sqlite-adapter.js +544 -0
  322. package/dist/lib/database-service/sqlite-adapter.js.map +1 -0
  323. package/dist/lib/database-service/transaction-manager.js +773 -0
  324. package/dist/lib/database-service/transaction-manager.js.map +1 -0
  325. package/dist/lib/database-service/types.js +23 -0
  326. package/dist/lib/database-service/types.js.map +1 -0
  327. package/dist/lib/deadlock-resolver.js +292 -0
  328. package/dist/lib/deadlock-resolver.js.map +1 -0
  329. package/dist/lib/distributed-lock.js +451 -0
  330. package/dist/lib/distributed-lock.js.map +1 -0
  331. package/dist/lib/edge-case-deduplicator.js +227 -0
  332. package/dist/lib/edge-case-deduplicator.js.map +1 -0
  333. package/dist/lib/encryption-manager.js +322 -0
  334. package/dist/lib/encryption-manager.js.map +1 -0
  335. package/dist/lib/error-aggregator.js +234 -0
  336. package/dist/lib/error-aggregator.js.map +1 -0
  337. package/dist/lib/errors.js +287 -0
  338. package/dist/lib/errors.js.map +1 -0
  339. package/dist/lib/file-lock-manager.js +578 -0
  340. package/dist/lib/file-lock-manager.js.map +1 -0
  341. package/dist/lib/file-operations.js +367 -0
  342. package/dist/lib/file-operations.js.map +1 -0
  343. package/dist/lib/idempotent-write.js +237 -0
  344. package/dist/lib/idempotent-write.js.map +1 -0
  345. package/dist/lib/integration-schema-validator.js +522 -0
  346. package/dist/lib/integration-schema-validator.js.map +1 -0
  347. package/dist/lib/lock-health-monitor.js +298 -0
  348. package/dist/lib/lock-health-monitor.js.map +1 -0
  349. package/dist/lib/log-shipper.js +422 -0
  350. package/dist/lib/log-shipper.js.map +1 -0
  351. package/dist/lib/logging.js +146 -0
  352. package/dist/lib/logging.js.map +1 -0
  353. package/dist/lib/message-deduplicator.js +439 -0
  354. package/dist/lib/message-deduplicator.js.map +1 -0
  355. package/dist/lib/multi-system-query.js +604 -0
  356. package/dist/lib/multi-system-query.js.map +1 -0
  357. package/dist/lib/orphan-detector.js +332 -0
  358. package/dist/lib/orphan-detector.js.map +1 -0
  359. package/dist/lib/password-generator.js +166 -0
  360. package/dist/lib/password-generator.js.map +1 -0
  361. package/dist/lib/path-validator.js +429 -0
  362. package/dist/lib/path-validator.js.map +1 -0
  363. package/dist/lib/query-translator.js +905 -0
  364. package/dist/lib/query-translator.js.map +1 -0
  365. package/dist/lib/queue-recovery.js +469 -0
  366. package/dist/lib/queue-recovery.js.map +1 -0
  367. package/dist/lib/redis-queue-manager.js +512 -0
  368. package/dist/lib/redis-queue-manager.js.map +1 -0
  369. package/dist/lib/reflection-archiver.js +272 -0
  370. package/dist/lib/reflection-archiver.js.map +1 -0
  371. package/dist/lib/retry-manager.js +453 -0
  372. package/dist/lib/retry-manager.js.map +1 -0
  373. package/dist/lib/retry.js +262 -0
  374. package/dist/lib/retry.js.map +1 -0
  375. package/dist/lib/schema-transform.js +695 -0
  376. package/dist/lib/schema-transform.js.map +1 -0
  377. package/dist/lib/schema-validator.js +491 -0
  378. package/dist/lib/schema-validator.js.map +1 -0
  379. package/dist/lib/skill-cache.js +297 -0
  380. package/dist/lib/skill-cache.js.map +1 -0
  381. package/dist/lib/skill-content-manager.js +337 -0
  382. package/dist/lib/skill-content-manager.js.map +1 -0
  383. package/dist/lib/skill-frontmatter-parser.js +237 -0
  384. package/dist/lib/skill-frontmatter-parser.js.map +1 -0
  385. package/dist/lib/skill-git-integration.js +275 -0
  386. package/dist/lib/skill-git-integration.js.map +1 -0
  387. package/dist/lib/skill-markdown-validator.js +396 -0
  388. package/dist/lib/skill-markdown-validator.js.map +1 -0
  389. package/dist/lib/skill-output-parser.js +312 -0
  390. package/dist/lib/skill-output-parser.js.map +1 -0
  391. package/dist/lib/unified-query-api.js +467 -0
  392. package/dist/lib/unified-query-api.js.map +1 -0
  393. package/dist/middleware/auth-middleware.js +350 -0
  394. package/dist/middleware/auth-middleware.js.map +1 -0
  395. package/dist/middleware/schema-validation.js +347 -0
  396. package/dist/middleware/schema-validation.js.map +1 -0
  397. package/dist/providers/anthropic-provider.js +1 -1
  398. package/dist/providers/anthropic-provider.js.map +1 -1
  399. package/dist/providers/provider-factory.js +2 -2
  400. package/dist/providers/provider-factory.js.map +1 -1
  401. package/dist/services/edge-case-analyzer.js +321 -0
  402. package/dist/services/edge-case-analyzer.js.map +1 -0
  403. package/dist/services/edge-case-deduplicator.js +266 -0
  404. package/dist/services/edge-case-deduplicator.js.map +1 -0
  405. package/dist/services/edge-case-detector.js +337 -0
  406. package/dist/services/edge-case-detector.js.map +1 -0
  407. package/dist/services/edge-case-tracker.js +547 -0
  408. package/dist/services/edge-case-tracker.js.map +1 -0
  409. package/dist/services/health-check-system.js +586 -0
  410. package/dist/services/health-check-system.js.map +1 -0
  411. package/dist/services/metrics-logger.js +412 -0
  412. package/dist/services/metrics-logger.js.map +1 -0
  413. package/dist/services/patch-generator.js +378 -0
  414. package/dist/services/patch-generator.js.map +1 -0
  415. package/dist/services/patch-validator.js +337 -0
  416. package/dist/services/patch-validator.js.map +1 -0
  417. package/dist/services/performance-monitor.js +811 -0
  418. package/dist/services/performance-monitor.js.map +1 -0
  419. package/dist/services/promotion-pipeline.js +918 -0
  420. package/dist/services/promotion-pipeline.js.map +1 -0
  421. package/dist/services/promotion-validator.js +394 -0
  422. package/dist/services/promotion-validator.js.map +1 -0
  423. package/dist/services/reflection-logger.js +388 -0
  424. package/dist/services/reflection-logger.js.map +1 -0
  425. package/dist/services/skill-deployment.js +472 -0
  426. package/dist/services/skill-deployment.js.map +1 -0
  427. package/dist/services/skill-loader.js +427 -0
  428. package/dist/services/skill-loader.js.map +1 -0
  429. package/dist/services/skill-promotion.js +372 -0
  430. package/dist/services/skill-promotion.js.map +1 -0
  431. package/dist/services/skill-validator.js +454 -0
  432. package/dist/services/skill-validator.js.map +1 -0
  433. package/dist/services/skill-versioning.js +244 -0
  434. package/dist/services/skill-versioning.js.map +1 -0
  435. package/dist/services/workspace-supervisor.js +597 -0
  436. package/dist/services/workspace-supervisor.js.map +1 -0
  437. package/dist/types/edge-case.js +45 -0
  438. package/dist/types/edge-case.js.map +1 -0
  439. package/docs/BUG_19_MEMORY_LEAK_TASK_MODE.md +405 -0
  440. package/docs/MEMORY_CLEANUP_GUIDE.md +358 -0
  441. package/docs/MEMORY_LEAK_FIX_SUMMARY.md +322 -0
  442. package/docs/REDIS_CLEANUP_EXECUTIVE_SUMMARY.md +319 -0
  443. package/docs/REDIS_CLEANUP_VERIFICATION_REPORT.md +574 -0
  444. package/package.json +35 -4
  445. package/readme/README.md +53 -5
  446. package/scripts/backup-cleanup.sh +627 -0
  447. package/scripts/cleanup-workspaces.sh +412 -0
  448. package/scripts/cleanup-yaml-configs.sh +141 -0
  449. package/scripts/deploy-approved-skills.sh +263 -0
  450. package/scripts/health-check.sh +447 -0
  451. package/scripts/log-aggregator.sh +554 -0
  452. package/scripts/log-monitor.sh +629 -0
  453. package/scripts/manage-agent-workspaces.sh +434 -0
  454. package/scripts/migrate-schema.sh +533 -0
  455. package/scripts/promote-staged-skills.sh +423 -0
  456. package/scripts/verify-no-secrets.sh +88 -35
  457. package/scripts/verify-redis-cleanup.sh +173 -0
  458. package/tests/README.md +84 -0
  459. package/tests/test-memory-leak-task-mode.sh +435 -0
  460. package/.claude/cfn-extras/agents/deprecated-coordinators/adaptive-coordinator.md.backup +0 -161
  461. package/.claude/cfn-extras/agents/deprecated-coordinators/blocking-coordinator-example.md.backup +0 -728
  462. package/.claude/cfn-extras/agents/deprecated-coordinators/mesh-coordinator.md.backup +0 -131
  463. package/.claude/skills/agent-lifecycle/SKILL.md +0 -60
  464. package/.claude/skills/agent-lifecycle/execute-lifecycle-hook.sh +0 -573
  465. package/.claude/skills/agent-lifecycle/simple-audit.sh +0 -31
  466. package/.claude/skills/cfn-agent-spawning/spawn-agent.sh.backup +0 -273
  467. package/.claude/skills/cfn-loop-orchestration/orchestrate.sh.backup +0 -949
  468. package/README.md.backup_before_replace +0 -781
  469. package/claude-assets/cfn-extras/agents/deprecated-coordinators/adaptive-coordinator.md.backup +0 -161
  470. package/claude-assets/cfn-extras/agents/deprecated-coordinators/blocking-coordinator-example.md.backup +0 -728
  471. package/claude-assets/cfn-extras/agents/deprecated-coordinators/mesh-coordinator.md.backup +0 -131
  472. package/claude-assets/skills/cfn-agent-spawning/spawn-agent.sh.backup +0 -273
  473. package/claude-assets/skills/cfn-loop-orchestration/orchestrate.sh.backup +0 -949
@@ -0,0 +1,629 @@
1
+ #!/bin/bash
2
+ ################################################################################
3
+ # CFN Distributed Log Monitor
4
+ # Task 4.4: Distributed Logging Standardization
5
+ #
6
+ # Monitors logs in real-time for errors, alerts, and performance issues.
7
+ # Provides metrics collection, threshold checking, and alerting capabilities.
8
+ #
9
+ # Usage:
10
+ # ./log-monitor.sh [OPTIONS]
11
+ #
12
+ # Options:
13
+ # --log-dir DIR Directory to monitor (default: /var/log/cfn)
14
+ # --interval SECONDS Check interval (default: 60)
15
+ # --alert-on LEVEL Alert levels (error,fatal) (default: error,fatal)
16
+ # --error-threshold COUNT Error count threshold (default: 10)
17
+ # --pattern PATTERN Log file pattern (default: *.log)
18
+ # --output-file FILE Metrics output file
19
+ # --action ACTION Action on alert (log, email, webhook)
20
+ # --webhook-url URL Webhook URL for alerts
21
+ # --email-to EMAIL Email address for alerts
22
+ # --cpu-warning PERCENT CPU warning threshold (default: 75)
23
+ # --memory-warning PERCENT Memory warning threshold (default: 85)
24
+ # --retention-check Check log retention and cleanup
25
+ # --performance-check Monitor performance impact
26
+ # --daemon Run as daemon
27
+ # --dry-run Simulate without taking action
28
+ # --debug Enable debug output
29
+ # --help Display this message
30
+ #
31
+ ################################################################################
32
+
33
+ set -euo pipefail
34
+
35
+ # Script configuration
36
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
37
+ PROJECT_ROOT="$(dirname "$SCRIPT_DIR")"
38
+
39
+ # Default configuration
40
+ LOG_DIR="/var/log/cfn"
41
+ CHECK_INTERVAL=60
42
+ ALERT_LEVELS=("error" "fatal")
43
+ ERROR_THRESHOLD=10
44
+ LOG_PATTERN="*.log"
45
+ ACTION="log"
46
+ WEBHOOK_URL=""
47
+ EMAIL_TO=""
48
+ CPU_WARNING=75
49
+ MEMORY_WARNING=85
50
+ RETENTION_CHECK=false
51
+ PERFORMANCE_CHECK=false
52
+ RUN_DAEMON=false
53
+ DRY_RUN=false
54
+ DEBUG=false
55
+ OUTPUT_METRICS=""
56
+ MONITOR_PID=$$
57
+ MONITOR_STARTTIME=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
58
+ STATE_DIR="/tmp/cfn-monitor-${MONITOR_PID}"
59
+
60
+ # Metrics tracking
61
+ declare -A error_counts
62
+ declare -A warning_counts
63
+ declare -A log_file_sizes
64
+
65
+ # Colors
66
+ RED='\033[0;31m'
67
+ GREEN='\033[0;32m'
68
+ YELLOW='\033[1;33m'
69
+ BLUE='\033[0;34m'
70
+ NC='\033[0m'
71
+
72
+ ################################################################################
73
+ # Utility Functions
74
+ ################################################################################
75
+
76
+ log_info() {
77
+ echo -e "${BLUE}[$(date +'%Y-%m-%d %H:%M:%S')]${NC} [INFO] $*" >&2
78
+ }
79
+
80
+ log_error() {
81
+ echo -e "${RED}[$(date +'%Y-%m-%d %H:%M:%S')]${NC} [ERROR] $*" >&2
82
+ }
83
+
84
+ log_success() {
85
+ echo -e "${GREEN}[$(date +'%Y-%m-%d %H:%M:%S')]${NC} [SUCCESS] $*" >&2
86
+ }
87
+
88
+ log_warn() {
89
+ echo -e "${YELLOW}[$(date +'%Y-%m-%d %H:%M:%S')]${NC} [WARN] $*" >&2
90
+ }
91
+
92
+ debug() {
93
+ if [ "$DEBUG" = true ]; then
94
+ echo -e "${BLUE}[$(date +'%Y-%m-%d %H:%M:%S')]${NC} [DEBUG] $*" >&2
95
+ fi
96
+ }
97
+
98
+ # Display usage
99
+ usage() {
100
+ sed -n '2,/^$/p' "$0" | head -n -1
101
+ exit 0
102
+ }
103
+
104
+ # Initialize state directory
105
+ init_state() {
106
+ mkdir -p "$STATE_DIR"
107
+ touch "$STATE_DIR/started" "$STATE_DIR/last-check"
108
+ }
109
+
110
+ # Cleanup
111
+ cleanup() {
112
+ log_info "Shutting down log monitor (PID: $MONITOR_PID)"
113
+ [ -d "$STATE_DIR" ] && rm -rf "$STATE_DIR"
114
+ }
115
+
116
+ trap cleanup EXIT
117
+
118
+ ################################################################################
119
+ # Error and Warning Detection
120
+ ################################################################################
121
+
122
+ # Count errors and warnings in log files
123
+ count_errors() {
124
+ local log_file="$1"
125
+ local error_count=0
126
+ local warning_count=0
127
+
128
+ if [ ! -f "$log_file" ]; then
129
+ return 0
130
+ fi
131
+
132
+ # Check for error level logs in JSON format
133
+ error_count=$(jq -r 'select(.level == "error" or .level == "ERROR")' \
134
+ "$log_file" 2>/dev/null | wc -l || echo 0)
135
+
136
+ # Check for warning level logs
137
+ warning_count=$(jq -r 'select(.level == "warn" or .level == "WARN" or .level == "warning")' \
138
+ "$log_file" 2>/dev/null | wc -l || echo 0)
139
+
140
+ echo "$error_count|$warning_count"
141
+ }
142
+
143
+ # Extract recent error messages
144
+ extract_error_messages() {
145
+ local log_file="$1"
146
+ local limit="${2:-5}"
147
+
148
+ jq -r 'select(.level == "error" or .level == "ERROR") |
149
+ "\(.timestamp) [\(.level)] \(.message)"' \
150
+ "$log_file" 2>/dev/null | tail -n "$limit" || true
151
+ }
152
+
153
+ # Extract error context for detailed reporting
154
+ extract_error_context() {
155
+ local log_file="$1"
156
+
157
+ jq 'select(.level == "error" or .level == "ERROR") |
158
+ {timestamp, level, message, correlationId, source, context, metadata}' \
159
+ "$log_file" 2>/dev/null | head -n 20 || true
160
+ }
161
+
162
+ ################################################################################
163
+ # Log File Analysis
164
+ ################################################################################
165
+
166
+ # Analyze log file growth
167
+ analyze_log_growth() {
168
+ local log_file="$1"
169
+ local output_file="${STATE_DIR}/growth-analysis.json"
170
+
171
+ if [ ! -f "$log_file" ]; then
172
+ return 0
173
+ fi
174
+
175
+ local current_size=$(stat -c%s "$log_file" 2>/dev/null || echo 0)
176
+ local current_time=$(date +%s)
177
+ local growth_rate=0
178
+
179
+ # Compare with previous size
180
+ if [ -f "$STATE_DIR/size-$log_file" ]; then
181
+ local prev_size=$(cat "$STATE_DIR/size-$log_file" 2>/dev/null || echo 0)
182
+ local prev_time=$(cat "$STATE_DIR/time-$log_file" 2>/dev/null || echo 0)
183
+
184
+ if [ "$prev_time" -gt 0 ]; then
185
+ local time_diff=$(( current_time - prev_time ))
186
+ [ "$time_diff" -gt 0 ] && growth_rate=$(( (current_size - prev_size) / time_diff ))
187
+ fi
188
+ fi
189
+
190
+ # Store current state
191
+ echo "$current_size" > "$STATE_DIR/size-$log_file"
192
+ echo "$current_time" > "$STATE_DIR/time-$log_file"
193
+
194
+ # Check if growth is abnormal (>10MB per minute)
195
+ if [ "$growth_rate" -gt $((10 * 1024 * 1024)) ]; then
196
+ log_warn "Abnormal log growth detected: ${log_file##*/} (${growth_rate} bytes/sec)"
197
+ return 1
198
+ fi
199
+
200
+ return 0
201
+ }
202
+
203
+ # Count total logs and distribution by level
204
+ analyze_log_distribution() {
205
+ local log_file="$1"
206
+
207
+ if [ ! -f "$log_file" ]; then
208
+ return 0
209
+ fi
210
+
211
+ jq -s '{
212
+ total: length,
213
+ byLevel: (group_by(.level) | map({level: .[0].level, count: length}) | sort_by(.count) | reverse)
214
+ }' "$log_file" 2>/dev/null || true
215
+ }
216
+
217
+ ################################################################################
218
+ # Performance Monitoring
219
+ ################################################################################
220
+
221
+ # Check CPU and memory usage of log operations
222
+ check_system_performance() {
223
+ local monitor_duration=10 # Check CPU/memory for 10 seconds
224
+
225
+ debug "Checking system performance (${monitor_duration}s window)"
226
+
227
+ # Get CPU usage
228
+ local cpu_usage=$(top -bn1 | grep "Cpu(s)" | \
229
+ sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | \
230
+ awk '{print 100 - $1}' 2>/dev/null || echo 0)
231
+
232
+ # Get memory usage
233
+ local mem_usage=$(free | grep Mem | \
234
+ awk '{printf("%.0f", ($3/$2) * 100)}' 2>/dev/null || echo 0)
235
+
236
+ # Log disk usage
237
+ local disk_usage=$(df "$LOG_DIR" | tail -1 | awk '{print $5}' | sed 's/%//' 2>/dev/null || echo 0)
238
+
239
+ debug "CPU: ${cpu_usage}%, Memory: ${mem_usage}%, Disk: ${disk_usage}%"
240
+
241
+ # Generate performance report
242
+ cat > "${STATE_DIR}/performance.json" <<EOF
243
+ {
244
+ "timestamp": "$(date -u +"%Y-%m-%dT%H:%M:%SZ")",
245
+ "cpuUsage": $cpu_usage,
246
+ "cpuWarning": $CPU_WARNING,
247
+ "cpuCritical": $((CPU_WARNING + 15)),
248
+ "memoryUsage": $mem_usage,
249
+ "memoryWarning": $MEMORY_WARNING,
250
+ "memoryCritical": $((MEMORY_WARNING + 10)),
251
+ "diskUsage": $disk_usage,
252
+ "diskWarning": 80,
253
+ "diskCritical": 90
254
+ }
255
+ EOF
256
+
257
+ # Check thresholds
258
+ if [ "$cpu_usage" -gt "$CPU_WARNING" ]; then
259
+ log_warn "CPU usage high: ${cpu_usage}% (threshold: ${CPU_WARNING}%)"
260
+ [ "$DRY_RUN" = false ] && trigger_alert "CPU_HIGH" "$cpu_usage%"
261
+ fi
262
+
263
+ if [ "$mem_usage" -gt "$MEMORY_WARNING" ]; then
264
+ log_warn "Memory usage high: ${mem_usage}% (threshold: ${MEMORY_WARNING}%)"
265
+ [ "$DRY_RUN" = false ] && trigger_alert "MEMORY_HIGH" "$mem_usage%"
266
+ fi
267
+
268
+ if [ "$disk_usage" -gt 90 ]; then
269
+ log_error "CRITICAL: Disk space low: ${disk_usage}%"
270
+ [ "$DRY_RUN" = false ] && trigger_alert "DISK_CRITICAL" "$disk_usage%"
271
+ fi
272
+ }
273
+
274
+ # Calculate logging overhead
275
+ measure_logging_overhead() {
276
+ local start_time=$(date +%s%N)
277
+ local cpu_before=$(ps aux | grep -v grep | awk '{sum+=$3} END {print sum}')
278
+
279
+ # Run a sample aggregation
280
+ if [ -x "$SCRIPT_DIR/log-aggregator.sh" ]; then
281
+ timeout 5 "$SCRIPT_DIR/log-aggregator.sh" --source filesystem --pattern "*.log" >/dev/null 2>&1 || true
282
+ fi
283
+
284
+ local cpu_after=$(ps aux | grep -v grep | awk '{sum+=$3} END {print sum}')
285
+ local end_time=$(date +%s%N)
286
+
287
+ local duration_ms=$(( (end_time - start_time) / 1000000 ))
288
+ local cpu_delta=$(( cpu_after - cpu_before ))
289
+
290
+ debug "Logging overhead: ${cpu_delta}% CPU in ${duration_ms}ms"
291
+
292
+ # Check if overhead is acceptable (<5%)
293
+ if [ "$cpu_delta" -gt 5 ]; then
294
+ log_warn "High logging overhead detected: ${cpu_delta}%"
295
+ fi
296
+ }
297
+
298
+ ################################################################################
299
+ # Retention and Cleanup
300
+ ################################################################################
301
+
302
+ # Check log retention compliance
303
+ check_retention() {
304
+ local retention_days=30
305
+ local debug_retention_days=7
306
+
307
+ log_info "Checking log retention (standard: ${retention_days}d, debug: ${debug_retention_days}d)"
308
+
309
+ local expired_count=0
310
+
311
+ # Find and report expired logs
312
+ find "$LOG_DIR" -name "$LOG_PATTERN" -type f -mtime +$retention_days 2>/dev/null | while read -r log_file; do
313
+ local age=$(stat -c%Y "$log_file" | awk '{print int((systime() - $1) / 86400)}')
314
+ log_warn "Expired log file (${age}d old): $log_file"
315
+ ((expired_count++))
316
+
317
+ if [ "$DRY_RUN" = false ]; then
318
+ rm -f "$log_file"
319
+ debug "Removed expired log: $log_file"
320
+ fi
321
+ done
322
+
323
+ # Check debug logs
324
+ find "$LOG_DIR/debug" -name "*.log" -type f -mtime +$debug_retention_days 2>/dev/null | while read -r log_file; do
325
+ if [ "$DRY_RUN" = false ]; then
326
+ rm -f "$log_file"
327
+ debug "Removed expired debug log: $log_file"
328
+ fi
329
+ done
330
+
331
+ log_info "Retention check complete (expired: $expired_count)"
332
+ }
333
+
334
+ # Cleanup orphaned log files
335
+ cleanup_orphaned_logs() {
336
+ log_info "Cleaning up orphaned log files..."
337
+
338
+ # Remove empty log files
339
+ find "$LOG_DIR" -name "$LOG_PATTERN" -type f -empty 2>/dev/null | while read -r empty_file; do
340
+ debug "Removing empty log file: $empty_file"
341
+ [ "$DRY_RUN" = false ] && rm -f "$empty_file"
342
+ done
343
+
344
+ # Remove logs from deleted containers
345
+ find "$LOG_DIR/containers" -name "*.log" -type f ! -exec fuser -s {} \; 2>/dev/null | while read -r orphaned; do
346
+ debug "Removing orphaned log: $orphaned"
347
+ [ "$DRY_RUN" = false ] && rm -f "$orphaned"
348
+ done
349
+ }
350
+
351
+ ################################################################################
352
+ # Alerting
353
+ ################################################################################
354
+
355
+ # Trigger an alert
356
+ trigger_alert() {
357
+ local alert_type="$1"
358
+ local alert_message="$2"
359
+ local alert_timestamp=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
360
+
361
+ log_error "ALERT: $alert_type - $alert_message"
362
+
363
+ # Create alert record
364
+ local alert_file="${STATE_DIR}/alert-${alert_type}-${alert_timestamp}.json"
365
+ cat > "$alert_file" <<EOF
366
+ {
367
+ "timestamp": "$alert_timestamp",
368
+ "type": "$alert_type",
369
+ "message": "$alert_message",
370
+ "severity": "high",
371
+ "monitor_pid": $MONITOR_PID
372
+ }
373
+ EOF
374
+
375
+ case "$ACTION" in
376
+ log)
377
+ debug "Alert logged to: $alert_file"
378
+ ;;
379
+ email)
380
+ if [ -n "$EMAIL_TO" ]; then
381
+ send_email_alert "$alert_type" "$alert_message" || log_error "Failed to send email alert"
382
+ fi
383
+ ;;
384
+ webhook)
385
+ if [ -n "$WEBHOOK_URL" ]; then
386
+ send_webhook_alert "$alert_type" "$alert_message" || log_error "Failed to send webhook alert"
387
+ fi
388
+ ;;
389
+ esac
390
+ }
391
+
392
+ # Send email alert
393
+ send_email_alert() {
394
+ local alert_type="$1"
395
+ local alert_message="$2"
396
+
397
+ if ! command -v mail &>/dev/null && ! command -v sendmail &>/dev/null; then
398
+ return 1
399
+ fi
400
+
401
+ local subject="CFN Log Monitor Alert: $alert_type"
402
+ local body="Alert Type: $alert_type\nMessage: $alert_message\nTime: $(date)\nHost: $(hostname)"
403
+
404
+ echo -e "$body" | mail -s "$subject" "$EMAIL_TO" 2>/dev/null || return 1
405
+ log_info "Email alert sent to: $EMAIL_TO"
406
+ }
407
+
408
+ # Send webhook alert
409
+ send_webhook_alert() {
410
+ local alert_type="$1"
411
+ local alert_message="$2"
412
+
413
+ if ! command -v curl &>/dev/null; then
414
+ return 1
415
+ fi
416
+
417
+ local payload=$(jq -n \
418
+ --arg type "$alert_type" \
419
+ --arg message "$alert_message" \
420
+ --arg timestamp "$(date -u +"%Y-%m-%dT%H:%M:%SZ")" \
421
+ '{alert_type: $type, message: $message, timestamp: $timestamp}')
422
+
423
+ curl -X POST -H "Content-Type: application/json" \
424
+ -d "$payload" \
425
+ "$WEBHOOK_URL" 2>/dev/null || return 1
426
+
427
+ log_info "Webhook alert sent to: $WEBHOOK_URL"
428
+ }
429
+
430
+ ################################################################################
431
+ # Metrics Output
432
+ ################################################################################
433
+
434
+ # Generate and output metrics
435
+ generate_metrics() {
436
+ local metric_timestamp=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
437
+
438
+ # Collect all metrics
439
+ local total_errors=0
440
+ local total_warnings=0
441
+ local log_files_monitored=0
442
+
443
+ find "$LOG_DIR" -name "$LOG_PATTERN" -type f 2>/dev/null | while read -r log_file; do
444
+ ((log_files_monitored++))
445
+ local counts=$(count_errors "$log_file")
446
+ local errors="${counts%|*}"
447
+ local warnings="${counts#*|}"
448
+ ((total_errors += errors))
449
+ ((total_warnings += warnings))
450
+ done
451
+
452
+ local metrics_file="${OUTPUT_METRICS:-${STATE_DIR}/metrics-${metric_timestamp}.json}"
453
+
454
+ cat > "$metrics_file" <<EOF
455
+ {
456
+ "timestamp": "$metric_timestamp",
457
+ "monitoring": {
458
+ "startTime": "$MONITOR_STARTTIME",
459
+ "uptime": "$(date -u -d@$(($(date +%s) - $(date -d "$MONITOR_STARTTIME" +%s))) +%H:%M:%S)",
460
+ "checkInterval": $CHECK_INTERVAL
461
+ },
462
+ "logs": {
463
+ "monitored": $log_files_monitored,
464
+ "errors": $total_errors,
465
+ "warnings": $total_warnings,
466
+ "errorThreshold": $ERROR_THRESHOLD
467
+ },
468
+ "performance": $([ -f "${STATE_DIR}/performance.json" ] && cat "${STATE_DIR}/performance.json" || echo '{}'),
469
+ "alerts": {
470
+ "totalAlerts": $(ls -1 "$STATE_DIR"/alert-*.json 2>/dev/null | wc -l),
471
+ "lastAlert": "$(ls -t "$STATE_DIR"/alert-*.json 2>/dev/null | head -1 | xargs -I {} jq -r .timestamp {} 2>/dev/null || echo "none")"
472
+ }
473
+ }
474
+ EOF
475
+
476
+ debug "Metrics written to: $metrics_file"
477
+ }
478
+
479
+ ################################################################################
480
+ # Monitoring Loop
481
+ ################################################################################
482
+
483
+ # Main monitoring loop
484
+ monitor_logs() {
485
+ init_state
486
+ log_info "CFN Log Monitor started (PID: $MONITOR_PID)"
487
+ log_info "Monitoring directory: $LOG_DIR"
488
+ log_info "Check interval: ${CHECK_INTERVAL}s"
489
+
490
+ local check_count=0
491
+
492
+ while true; do
493
+ ((check_count++))
494
+ local check_timestamp=$(date -u +"%Y-%m-%dT%H:%M:%S%Z")
495
+
496
+ debug "Check #$check_count at $check_timestamp"
497
+
498
+ # Monitor each log file
499
+ find "$LOG_DIR" -name "$LOG_PATTERN" -type f 2>/dev/null | while read -r log_file; do
500
+ debug "Analyzing: $log_file"
501
+
502
+ # Count errors
503
+ local counts=$(count_errors "$log_file")
504
+ local errors="${counts%|*}"
505
+ local warnings="${counts#*|}"
506
+
507
+ if [ "$errors" -gt "$ERROR_THRESHOLD" ]; then
508
+ log_warn "Error threshold exceeded in ${log_file##*/}: $errors > $ERROR_THRESHOLD"
509
+ trigger_alert "ERROR_THRESHOLD" "$errors errors in ${log_file##*/}"
510
+ fi
511
+
512
+ # Analyze growth
513
+ analyze_log_growth "$log_file" || true
514
+
515
+ # Show recent errors
516
+ if [ "$errors" -gt 0 ]; then
517
+ log_info "Recent errors in ${log_file##*/}:"
518
+ extract_error_messages "$log_file" 3 | sed 's/^/ /'
519
+ fi
520
+ done
521
+
522
+ # Performance checks
523
+ if [ "$PERFORMANCE_CHECK" = true ]; then
524
+ check_system_performance
525
+ fi
526
+
527
+ # Retention checks
528
+ if [ "$RETENTION_CHECK" = true ]; then
529
+ check_retention
530
+ cleanup_orphaned_logs
531
+ fi
532
+
533
+ # Generate metrics
534
+ generate_metrics
535
+
536
+ # Exit if not running as daemon
537
+ if [ "$RUN_DAEMON" = false ]; then
538
+ break
539
+ fi
540
+
541
+ # Wait for next check
542
+ sleep "$CHECK_INTERVAL"
543
+ done
544
+
545
+ log_success "Log monitoring complete"
546
+ }
547
+
548
+ ################################################################################
549
+ # Argument Parsing
550
+ ################################################################################
551
+
552
+ while [[ $# -gt 0 ]]; do
553
+ case "$1" in
554
+ --log-dir)
555
+ LOG_DIR="$2"
556
+ shift 2
557
+ ;;
558
+ --interval)
559
+ CHECK_INTERVAL="$2"
560
+ shift 2
561
+ ;;
562
+ --alert-on)
563
+ IFS=',' read -ra ALERT_LEVELS <<< "$2"
564
+ shift 2
565
+ ;;
566
+ --error-threshold)
567
+ ERROR_THRESHOLD="$2"
568
+ shift 2
569
+ ;;
570
+ --pattern)
571
+ LOG_PATTERN="$2"
572
+ shift 2
573
+ ;;
574
+ --output-file)
575
+ OUTPUT_METRICS="$2"
576
+ shift 2
577
+ ;;
578
+ --action)
579
+ ACTION="$2"
580
+ shift 2
581
+ ;;
582
+ --webhook-url)
583
+ WEBHOOK_URL="$2"
584
+ shift 2
585
+ ;;
586
+ --email-to)
587
+ EMAIL_TO="$2"
588
+ shift 2
589
+ ;;
590
+ --cpu-warning)
591
+ CPU_WARNING="$2"
592
+ shift 2
593
+ ;;
594
+ --memory-warning)
595
+ MEMORY_WARNING="$2"
596
+ shift 2
597
+ ;;
598
+ --retention-check)
599
+ RETENTION_CHECK=true
600
+ shift
601
+ ;;
602
+ --performance-check)
603
+ PERFORMANCE_CHECK=true
604
+ shift
605
+ ;;
606
+ --daemon)
607
+ RUN_DAEMON=true
608
+ shift
609
+ ;;
610
+ --dry-run)
611
+ DRY_RUN=true
612
+ shift
613
+ ;;
614
+ --debug)
615
+ DEBUG=true
616
+ shift
617
+ ;;
618
+ --help)
619
+ usage
620
+ ;;
621
+ *)
622
+ log_error "Unknown option: $1"
623
+ usage
624
+ ;;
625
+ esac
626
+ done
627
+
628
+ # Run monitoring
629
+ monitor_logs "$@"