claude-flow-novice 2.15.3 → 2.15.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (461) hide show
  1. package/.claude/cfn-extras/skills/advanced-features/cfn-agent-swap/recommend-swap.sh +59 -59
  2. package/.claude/cfn-extras/skills/analytics/cfn-improvement-recommender/recommend-improvements.sh +91 -91
  3. package/.claude/cfn-extras/skills/analytics/cfn-pattern-extraction/extract-patterns.sh +79 -79
  4. package/.claude/cfn-extras/skills/analytics/cfn-retrospective-report/generate-report.sh +100 -100
  5. package/.claude/cfn-extras/skills/analytics/cfn-telemetry/start-telemetry.sh +110 -110
  6. package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/add-bullet.sh +145 -145
  7. package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/log-merge.sh +67 -67
  8. package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/monitor-injection-performance.sh +137 -137
  9. package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/optimize-injection-pipeline.sh +168 -168
  10. package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/query-reflections.sh +35 -35
  11. package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/store-reflection.sh +45 -45
  12. package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/track-ab-test.sh +41 -41
  13. package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/update-reflection.sh +41 -41
  14. package/.claude/cfn-extras/skills/deprecated/cfn-cli-setup/validate-cli-environment.sh +191 -191
  15. package/.claude/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/create-campaign.sh +231 -231
  16. package/.claude/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/get-campaign-performance.sh +190 -190
  17. package/.claude/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/pause-campaign.sh +142 -142
  18. package/.claude/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/set-budget.sh +181 -181
  19. package/.claude/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/update-bid-strategy.sh +133 -133
  20. package/.claude/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/get-conversation-history.sh +121 -121
  21. package/.claude/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/qualify-lead.sh +156 -156
  22. package/.claude/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/schedule-demo.sh +181 -181
  23. package/.claude/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/send-message.sh +137 -137
  24. package/.claude/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/transfer-to-human.sh +179 -179
  25. package/.claude/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/create-campaign.sh +183 -183
  26. package/.claude/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/get-delivery-status.sh +139 -139
  27. package/.claude/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/opt-out.sh +150 -150
  28. package/.claude/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/schedule-campaign.sh +187 -187
  29. package/.claude/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/send-sms.sh +181 -181
  30. package/.claude/cfn-extras/skills/ui-portal/cfn-web-portal/test-web-portal-skill.sh +50 -50
  31. package/.claude/cfn-extras/skills/ui-portal/cfn-web-portal/validate-deployment.sh +84 -84
  32. package/.claude/cfn-extras/skills/utility/cfn-environment-sanitization/sanitize-environment.sh +243 -243
  33. package/.claude/commands/cfn-loop-cli.md +16 -2
  34. package/.claude/commands/switch-api.md +31 -10
  35. package/.claude/hooks/cfn-lint-sql-injection.sh +61 -0
  36. package/.claude/hooks/cfn-post-edit-cfn-retrospective.sh +33 -2
  37. package/.claude/hooks/cfn-pre-edit-security-warning.sh +40 -0
  38. package/.claude/skills/cfn-agent-spawning/spawn-agent.sh +22 -24
  39. package/.claude/skills/cfn-docker-agent-spawning/SKILL.md +28 -4
  40. package/.claude/skills/cfn-docker-agent-spawning/spawn-agent.sh +3 -1
  41. package/.claude/skills/cfn-docker-loop-orchestration/orchestrate.sh +224 -20
  42. package/.claude/skills/cfn-loop-orchestration/helpers/gate-check.sh +550 -46
  43. package/.claude/skills/cfn-loop-orchestration/helpers/parse-test-results.sh +277 -0
  44. package/.claude/skills/cfn-loop-orchestration/orchestrate.sh +184 -23
  45. package/.claude/skills/cfn-loop-orchestration/security_utils.sh +24 -0
  46. package/.claude/skills/cfn-loop-orchestration/test-iteration-context-injection.sh +366 -0
  47. package/.claude/skills/cfn-redis-coordination/CENTRALIZED_REDIS_WRAPPER.md +319 -0
  48. package/.claude/skills/cfn-redis-coordination/agent-log.sh +4 -0
  49. package/.claude/skills/cfn-redis-coordination/agent-log.sh.bak +124 -0
  50. package/.claude/skills/cfn-redis-coordination/agent-recovery.sh +2 -2
  51. package/.claude/skills/cfn-redis-coordination/collect-confidence-scores.sh +30 -0
  52. package/.claude/skills/cfn-redis-coordination/get-context.sh +33 -0
  53. package/.claude/skills/cfn-redis-coordination/get-success-criteria.sh +54 -0
  54. package/.claude/skills/cfn-redis-coordination/invoke-waiting-mode.sh +3 -0
  55. package/.claude/skills/cfn-redis-coordination/redis-cli-wrapper.sh +24 -3
  56. package/.claude/skills/cfn-redis-coordination/redis-functions.sh +33 -0
  57. package/.claude/skills/cfn-redis-coordination/report-completion.sh +24 -31
  58. package/.claude/skills/cfn-redis-coordination/store-context.sh +4 -0
  59. package/.claude/skills/cfn-redis-coordination/store-success-criteria.sh +85 -0
  60. package/.claude/skills/cfn-redis-coordination/update-all-scripts.sh +67 -0
  61. package/.claude/skills/cfn-sqlite-memory/ttl-cleanup.sh +17 -25
  62. package/.claude/skills/cfn-transparency-middleware/test-e2e.sh +15 -0
  63. package/.claude/skills/cfn-transparency-middleware/tests/input-validation.sh +15 -0
  64. package/README.md +116 -475
  65. package/claude-assets/agents/cfn-dev-team/README.md +103 -0
  66. package/claude-assets/agents/cfn-dev-team/architecture/goal-planner.md +1 -1
  67. package/claude-assets/agents/cfn-dev-team/coordinators/cfn-frontend-coordinator.md +77 -15
  68. package/claude-assets/agents/cfn-dev-team/coordinators/cfn-v3-coordinator.md +355 -6
  69. package/claude-assets/agents/cfn-dev-team/coordinators/consensus-builder.md +82 -1
  70. package/claude-assets/agents/cfn-dev-team/coordinators/handoff-coordinator.md +82 -1
  71. package/claude-assets/agents/cfn-dev-team/coordinators/multi-sprint-coordinator.md +77 -15
  72. package/claude-assets/agents/cfn-dev-team/dev-ops/docker-specialist.md +99 -12
  73. package/claude-assets/agents/cfn-dev-team/dev-ops/github-commit-agent.md +1 -1
  74. package/claude-assets/agents/cfn-dev-team/dev-ops/kubernetes-specialist.md +97 -0
  75. package/claude-assets/agents/cfn-dev-team/dev-ops/monitoring-specialist.md +20 -1
  76. package/claude-assets/agents/cfn-dev-team/developers/api-gateway-specialist.md +97 -0
  77. package/claude-assets/agents/cfn-dev-team/developers/backend-developer.md +110 -13
  78. package/claude-assets/agents/cfn-dev-team/developers/data/data-engineer.md +106 -15
  79. package/claude-assets/agents/cfn-dev-team/developers/database/database-architect.md +115 -11
  80. package/claude-assets/agents/cfn-dev-team/developers/frontend/mobile-dev.md +94 -7
  81. package/claude-assets/agents/cfn-dev-team/developers/frontend/react-frontend-engineer.md +87 -9
  82. package/claude-assets/agents/cfn-dev-team/developers/frontend/typescript-specialist.md +85 -7
  83. package/claude-assets/agents/cfn-dev-team/developers/frontend/ui-designer.md +160 -28
  84. package/claude-assets/agents/cfn-dev-team/developers/graphql-specialist.md +101 -19
  85. package/claude-assets/agents/cfn-dev-team/developers/rust-developer.md +108 -14
  86. package/claude-assets/agents/cfn-dev-team/reviewers/{reviewer.md → code-reviewer.md} +95 -8
  87. package/claude-assets/agents/cfn-dev-team/reviewers/quality/code-quality-validator.md +107 -7
  88. package/claude-assets/agents/cfn-dev-team/reviewers/quality/perf-analyzer.md +98 -7
  89. package/claude-assets/agents/cfn-dev-team/reviewers/quality/performance-benchmarker.md +95 -7
  90. package/claude-assets/agents/cfn-dev-team/reviewers/quality/security-specialist.md +136 -9
  91. package/claude-assets/agents/cfn-dev-team/testers/api-testing-specialist.md +108 -1
  92. package/claude-assets/agents/cfn-dev-team/testers/chaos-engineering-specialist.md +107 -13
  93. package/claude-assets/agents/cfn-dev-team/testers/contract-tester.md +737 -0
  94. package/claude-assets/agents/cfn-dev-team/testers/e2e/playwright-tester.md +1 -1
  95. package/claude-assets/agents/cfn-dev-team/testers/integration-tester.md +828 -0
  96. package/claude-assets/agents/cfn-dev-team/testers/interaction-tester.md +106 -7
  97. package/claude-assets/agents/cfn-dev-team/testers/load-testing-specialist.md +77 -0
  98. package/claude-assets/agents/cfn-dev-team/testers/mutation-testing-specialist.md +684 -0
  99. package/claude-assets/agents/cfn-dev-team/testers/playwright-tester.md +110 -1
  100. package/claude-assets/agents/cfn-dev-team/testers/tester.md +94 -7
  101. package/claude-assets/agents/cfn-dev-team/utility/code-booster.md +1 -3
  102. package/claude-assets/agents/cfn-dev-team/utility/epic-creator.md +87 -13
  103. package/claude-assets/agents/cfn-dev-team/utility/memory-leak-specialist.md +103 -7
  104. package/claude-assets/agents/cfn-dev-team/utility/researcher.md +1 -3
  105. package/claude-assets/agents/cfn-dev-team/utility/z-ai-specialist.md +94 -7
  106. package/claude-assets/agents/docker-coordinators/cfn-docker-v3-coordinator.md +46 -0
  107. package/claude-assets/agents/project-only-agents/npm-package-specialist.md +1 -1
  108. package/claude-assets/cfn-extras/skills/advanced-features/cfn-agent-swap/recommend-swap.sh +59 -59
  109. package/claude-assets/cfn-extras/skills/analytics/cfn-improvement-recommender/recommend-improvements.sh +91 -91
  110. package/claude-assets/cfn-extras/skills/analytics/cfn-pattern-extraction/extract-patterns.sh +79 -79
  111. package/claude-assets/cfn-extras/skills/analytics/cfn-retrospective-report/generate-report.sh +100 -100
  112. package/claude-assets/cfn-extras/skills/analytics/cfn-telemetry/start-telemetry.sh +110 -110
  113. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/add-bullet.sh +145 -145
  114. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/log-merge.sh +67 -67
  115. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/monitor-injection-performance.sh +137 -137
  116. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/optimize-injection-pipeline.sh +168 -168
  117. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/query-reflections.sh +35 -35
  118. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/store-reflection.sh +45 -45
  119. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/track-ab-test.sh +41 -41
  120. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/update-reflection.sh +41 -41
  121. package/claude-assets/cfn-extras/skills/deprecated/cfn-cli-setup/validate-cli-environment.sh +191 -191
  122. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/create-campaign.sh +231 -231
  123. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/get-campaign-performance.sh +190 -190
  124. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/pause-campaign.sh +142 -142
  125. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/set-budget.sh +181 -181
  126. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/update-bid-strategy.sh +133 -133
  127. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/get-conversation-history.sh +121 -121
  128. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/qualify-lead.sh +156 -156
  129. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/schedule-demo.sh +181 -181
  130. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/send-message.sh +137 -137
  131. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/transfer-to-human.sh +179 -179
  132. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/create-campaign.sh +183 -183
  133. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/get-delivery-status.sh +139 -139
  134. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/opt-out.sh +150 -150
  135. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/schedule-campaign.sh +187 -187
  136. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/send-sms.sh +181 -181
  137. package/claude-assets/cfn-extras/skills/ui-portal/cfn-web-portal/test-web-portal-skill.sh +50 -50
  138. package/claude-assets/cfn-extras/skills/ui-portal/cfn-web-portal/validate-deployment.sh +84 -84
  139. package/claude-assets/cfn-extras/skills/utility/cfn-environment-sanitization/sanitize-environment.sh +243 -243
  140. package/claude-assets/commands/cfn-loop-cli.md +16 -2
  141. package/claude-assets/commands/switch-api.md +31 -10
  142. package/claude-assets/hooks/cfn-lint-sql-injection.sh +61 -0
  143. package/claude-assets/hooks/cfn-post-edit-cfn-retrospective.sh +33 -2
  144. package/claude-assets/hooks/cfn-pre-edit-security-warning.sh +40 -0
  145. package/claude-assets/hooks/detect-hardcoded-credentials.sh +212 -0
  146. package/claude-assets/skills/SKILL_TEMPLATE.md +774 -0
  147. package/claude-assets/skills/agent-lifecycle/execute-lifecycle-hook.sh +84 -113
  148. package/claude-assets/skills/agent-lifecycle/simple-audit.sh +33 -6
  149. package/claude-assets/skills/agent-template-generator/SKILL.md +440 -0
  150. package/claude-assets/skills/agent-template-generator/generate-agent.sh +405 -0
  151. package/claude-assets/skills/agent-validation-linter/SKILL.md +589 -0
  152. package/claude-assets/skills/agent-validation-linter/lint-agents.sh +271 -0
  153. package/claude-assets/skills/bootstrap/bash-fundamentals.md +786 -0
  154. package/claude-assets/skills/bootstrap/database-connection.md +464 -0
  155. package/claude-assets/skills/bootstrap/error-handling.md +580 -0
  156. package/claude-assets/skills/bootstrap/file-operations.md +699 -0
  157. package/claude-assets/skills/bootstrap/skill-loader.md +616 -0
  158. package/claude-assets/skills/bootstrap/sqlite-params.sh +287 -0
  159. package/claude-assets/skills/cfn-agent-spawning/spawn-agent.sh +22 -24
  160. package/claude-assets/skills/cfn-automatic-memory-persistence/test-memory-persistence.sh +17 -16
  161. package/claude-assets/skills/cfn-deployment/SKILL.md +293 -0
  162. package/claude-assets/skills/cfn-deployment/execute.sh +21 -0
  163. package/claude-assets/skills/cfn-docker-agent-spawning/SKILL.md +28 -4
  164. package/claude-assets/skills/cfn-docker-agent-spawning/spawn-agent.sh +3 -1
  165. package/claude-assets/skills/cfn-docker-loop-orchestration/orchestrate.sh +224 -20
  166. package/claude-assets/skills/cfn-environment-sanitization/sanitize-environment.sh +38 -0
  167. package/claude-assets/skills/cfn-error-batching-strategy/lib/core-functions.sh +47 -47
  168. package/claude-assets/skills/cfn-file-operations/SKILL.md +290 -0
  169. package/claude-assets/skills/cfn-file-operations/execute.sh +129 -0
  170. package/claude-assets/skills/cfn-file-operations/lib/atomic-write.sh +294 -0
  171. package/claude-assets/skills/cfn-file-operations/lib/lock.sh +361 -0
  172. package/claude-assets/skills/cfn-file-operations/test.sh +369 -0
  173. package/claude-assets/skills/cfn-log-operations/SKILL.md +308 -0
  174. package/claude-assets/skills/cfn-log-operations/execute.sh +420 -0
  175. package/claude-assets/skills/cfn-log-operations/lib/rotate.sh +406 -0
  176. package/claude-assets/skills/cfn-log-operations/lib/search.sh +448 -0
  177. package/claude-assets/skills/cfn-log-operations/test.sh +394 -0
  178. package/claude-assets/skills/cfn-loop-orchestration/helpers/gate-check.sh +550 -46
  179. package/claude-assets/skills/cfn-loop-orchestration/helpers/parse-test-results.sh +277 -0
  180. package/claude-assets/skills/cfn-loop-orchestration/orchestrate.sh +184 -23
  181. package/claude-assets/skills/cfn-loop-orchestration/security_utils.sh +24 -0
  182. package/claude-assets/skills/cfn-loop-orchestration/test-iteration-context-injection.sh +366 -0
  183. package/claude-assets/skills/cfn-parameterized-queries/SKILL.md +339 -0
  184. package/claude-assets/skills/cfn-playbook/query-playbook.sh +19 -15
  185. package/claude-assets/skills/cfn-playbook/update-playbook.sh +25 -14
  186. package/claude-assets/skills/cfn-process-instrumentation/instrument-process.sh +44 -0
  187. package/claude-assets/skills/cfn-promotion/SKILL.md +305 -0
  188. package/claude-assets/skills/cfn-redis-coordination/CENTRALIZED_REDIS_WRAPPER.md +319 -0
  189. package/claude-assets/skills/cfn-redis-coordination/agent-log.sh +4 -0
  190. package/claude-assets/skills/cfn-redis-coordination/agent-log.sh.bak +124 -0
  191. package/claude-assets/skills/cfn-redis-coordination/agent-recovery.sh +2 -2
  192. package/claude-assets/skills/cfn-redis-coordination/collect-confidence-scores.sh +30 -0
  193. package/claude-assets/skills/cfn-redis-coordination/get-context.sh +33 -0
  194. package/claude-assets/skills/cfn-redis-coordination/get-success-criteria.sh +54 -0
  195. package/claude-assets/skills/cfn-redis-coordination/invoke-waiting-mode.sh +3 -0
  196. package/claude-assets/skills/cfn-redis-coordination/redis-cli-wrapper.sh +24 -3
  197. package/claude-assets/skills/cfn-redis-coordination/redis-functions.sh +33 -0
  198. package/claude-assets/skills/cfn-redis-coordination/report-completion.sh +24 -31
  199. package/claude-assets/skills/cfn-redis-coordination/store-context.sh +4 -0
  200. package/claude-assets/skills/cfn-redis-coordination/store-success-criteria.sh +85 -0
  201. package/claude-assets/skills/cfn-redis-coordination/update-all-scripts.sh +67 -0
  202. package/claude-assets/skills/cfn-skill-loader/SKILL.md +466 -0
  203. package/claude-assets/skills/cfn-skill-loader/execute.sh +344 -0
  204. package/claude-assets/skills/cfn-sqlite-memory/ttl-cleanup.sh +17 -25
  205. package/claude-assets/skills/cfn-task-audit/get-audit-data.sh +42 -21
  206. package/claude-assets/skills/cfn-task-audit/store-task-audit.sh +17 -10
  207. package/claude-assets/skills/cfn-test-runner/detect-regressions.sh +17 -14
  208. package/claude-assets/skills/cfn-test-runner/detect-regressions.sh.backup-1763392821 +55 -0
  209. package/claude-assets/skills/cfn-test-runner/store-benchmarks.sh +17 -19
  210. package/claude-assets/skills/cfn-transparency-middleware/test-e2e.sh +15 -0
  211. package/claude-assets/skills/cfn-transparency-middleware/tests/input-validation.sh +15 -0
  212. package/claude-assets/skills/cfn-utilities/SKILL.md +237 -0
  213. package/claude-assets/skills/cfn-utilities/execute.sh +32 -0
  214. package/claude-assets/skills/cfn-utilities/lib/errors.sh +56 -0
  215. package/claude-assets/skills/cfn-utilities/lib/file-ops.sh +164 -0
  216. package/claude-assets/skills/cfn-utilities/lib/logging.sh +77 -0
  217. package/claude-assets/skills/cfn-utilities/lib/retry.sh +127 -0
  218. package/claude-assets/skills/cfn-utilities/test.sh +317 -0
  219. package/claude-assets/skills/integration/agent-handoff.sh +62 -64
  220. package/claude-assets/skills/json-validation/SKILL.md +431 -0
  221. package/claude-assets/skills/json-validation/test-validate-success-criteria.sh +421 -0
  222. package/claude-assets/skills/json-validation/validate-success-criteria.sh +197 -0
  223. package/claude-assets/skills/redis-coordination/validate-parameters.sh +34 -0
  224. package/claude-assets/skills/workflow-codification/DEPLOY_QUICK_REFERENCE.md +106 -0
  225. package/claude-assets/skills/workflow-codification/PROPAGATE_UPDATE_QUICK_REFERENCE.md +366 -0
  226. package/claude-assets/skills/workflow-codification/deploy-approved-skill.sh +481 -0
  227. package/claude-assets/skills/workflow-codification/deploy-approved-skill.sh.backup-1763392820 +512 -0
  228. package/claude-assets/skills/workflow-codification/lib/security-utils.sh +204 -0
  229. package/claude-assets/skills/workflow-codification/propagate-skill-update.sh +648 -0
  230. package/claude-assets/skills/workflow-codification/propagate-skill-update.sh.backup-1763392820 +664 -0
  231. package/claude-assets/skills/workflow-codification/test-integration.sh +15 -0
  232. package/claude-assets/skills/workflow-codification/test-metadata-update.sh +350 -0
  233. package/claude-assets/skills/workflow-codification/track-cost-savings.sh +55 -14
  234. package/claude-assets/skills/workflow-codification/track-cost-savings.sh.backup-1763392821 +445 -0
  235. package/claude-assets/skills/workflow-codification/track-edge-case.sh +27 -60
  236. package/claude-assets/skills/workflow-codification/workflow-codification.db +0 -0
  237. package/dist/ace/ace-curator.js +10 -2
  238. package/dist/ace/ace-curator.js.map +1 -1
  239. package/dist/ace/ace-generator.js +4 -0
  240. package/dist/ace/ace-generator.js.map +1 -1
  241. package/dist/ace/ace-reflector.js +1 -1
  242. package/dist/ace/ace-reflector.js.map +1 -1
  243. package/dist/ace/context-injection.js +24 -2
  244. package/dist/ace/context-injection.js.map +1 -1
  245. package/dist/agents/agent-loader.js +146 -165
  246. package/dist/agents/agent-loader.js.map +1 -1
  247. package/dist/agents/task-agent-integration.js +1 -1
  248. package/dist/agents/task-agent-integration.js.map +1 -1
  249. package/dist/api/health-endpoints.js +390 -0
  250. package/dist/api/health-endpoints.js.map +1 -0
  251. package/dist/cli/agent-executor.js +4 -1
  252. package/dist/cli/agent-executor.js.map +1 -1
  253. package/dist/cli/agent-prompt-builder.js +89 -1
  254. package/dist/cli/agent-prompt-builder.js.map +1 -1
  255. package/dist/cli/agent-spawn.js +130 -37
  256. package/dist/cli/agent-spawn.js.map +1 -1
  257. package/dist/cli/skill-cache-validator.js +412 -0
  258. package/dist/cli/skill-cache-validator.js.map +1 -0
  259. package/dist/cli/skill-cli.js +991 -0
  260. package/dist/cli/skill-cli.js.map +1 -0
  261. package/dist/cli/skill-execution-logger.js +284 -0
  262. package/dist/cli/skill-execution-logger.js.map +1 -0
  263. package/dist/cli/skill-loader.js +457 -0
  264. package/dist/cli/skill-loader.js.map +1 -0
  265. package/dist/coordination/event-bus.js +2 -2
  266. package/dist/coordination/event-bus.js.map +1 -1
  267. package/dist/coordination/fleet-manager.js +1 -1
  268. package/dist/coordination/fleet-manager.js.map +1 -1
  269. package/dist/coordination/index.js +23 -9
  270. package/dist/coordination/index.js.map +1 -1
  271. package/dist/coordination/types/fleet-manager.types.js.map +1 -1
  272. package/dist/db/migration-manager.js +483 -0
  273. package/dist/db/migration-manager.js.map +1 -0
  274. package/dist/db/skills-query.js +535 -0
  275. package/dist/db/skills-query.js.map +1 -0
  276. package/dist/integration/DatabaseHandoff.js +1 -1
  277. package/dist/integration/DatabaseHandoff.js.map +1 -1
  278. package/dist/jobs/edge-case-analyzer.js +367 -0
  279. package/dist/jobs/edge-case-analyzer.js.map +1 -0
  280. package/dist/jobs/promotion-sla-enforcer.js +288 -0
  281. package/dist/jobs/promotion-sla-enforcer.js.map +1 -0
  282. package/dist/lib/agent-output-parser.js.map +1 -1
  283. package/dist/lib/agent-output-validator.js.map +1 -1
  284. package/dist/lib/agent-workspace.js +281 -0
  285. package/dist/lib/agent-workspace.js.map +1 -0
  286. package/dist/lib/atomic-file-writer.js +377 -0
  287. package/dist/lib/atomic-file-writer.js.map +1 -0
  288. package/dist/lib/backup-manager.js +779 -0
  289. package/dist/lib/backup-manager.js.map +1 -0
  290. package/dist/lib/checkpoint-manager.js +837 -0
  291. package/dist/lib/checkpoint-manager.js.map +1 -0
  292. package/dist/lib/circuit-breaker.js +340 -0
  293. package/dist/lib/circuit-breaker.js.map +1 -0
  294. package/dist/lib/completion-signal-handler.js +243 -0
  295. package/dist/lib/completion-signal-handler.js.map +1 -0
  296. package/dist/lib/config-manager.js +312 -0
  297. package/dist/lib/config-manager.js.map +1 -0
  298. package/dist/lib/config-migrator.js +386 -0
  299. package/dist/lib/config-migrator.js.map +1 -0
  300. package/dist/lib/config-validator.js.map +1 -1
  301. package/dist/lib/correlation-cache.js +311 -0
  302. package/dist/lib/correlation-cache.js.map +1 -0
  303. package/dist/lib/correlation.js +263 -0
  304. package/dist/lib/correlation.js.map +1 -0
  305. package/dist/lib/database-service/connection-pool-manager.js +520 -0
  306. package/dist/lib/database-service/connection-pool-manager.js.map +1 -0
  307. package/dist/lib/database-service/correlation.js +329 -0
  308. package/dist/lib/database-service/correlation.js.map +1 -0
  309. package/dist/lib/database-service/errors.js +120 -0
  310. package/dist/lib/database-service/errors.js.map +1 -0
  311. package/dist/lib/database-service/index.js +168 -0
  312. package/dist/lib/database-service/index.js.map +1 -0
  313. package/dist/lib/database-service/postgres-adapter.js +526 -0
  314. package/dist/lib/database-service/postgres-adapter.js.map +1 -0
  315. package/dist/lib/database-service/redis-adapter.js +360 -0
  316. package/dist/lib/database-service/redis-adapter.js.map +1 -0
  317. package/dist/lib/database-service/sqlite-adapter.js +544 -0
  318. package/dist/lib/database-service/sqlite-adapter.js.map +1 -0
  319. package/dist/lib/database-service/transaction-manager.js +773 -0
  320. package/dist/lib/database-service/transaction-manager.js.map +1 -0
  321. package/dist/lib/database-service/types.js +23 -0
  322. package/dist/lib/database-service/types.js.map +1 -0
  323. package/dist/lib/deadlock-resolver.js +292 -0
  324. package/dist/lib/deadlock-resolver.js.map +1 -0
  325. package/dist/lib/distributed-lock.js +451 -0
  326. package/dist/lib/distributed-lock.js.map +1 -0
  327. package/dist/lib/edge-case-deduplicator.js +227 -0
  328. package/dist/lib/edge-case-deduplicator.js.map +1 -0
  329. package/dist/lib/encryption-manager.js +322 -0
  330. package/dist/lib/encryption-manager.js.map +1 -0
  331. package/dist/lib/error-aggregator.js +234 -0
  332. package/dist/lib/error-aggregator.js.map +1 -0
  333. package/dist/lib/errors.js +287 -0
  334. package/dist/lib/errors.js.map +1 -0
  335. package/dist/lib/file-lock-manager.js +578 -0
  336. package/dist/lib/file-lock-manager.js.map +1 -0
  337. package/dist/lib/file-operations.js +367 -0
  338. package/dist/lib/file-operations.js.map +1 -0
  339. package/dist/lib/idempotent-write.js +237 -0
  340. package/dist/lib/idempotent-write.js.map +1 -0
  341. package/dist/lib/integration-schema-validator.js +522 -0
  342. package/dist/lib/integration-schema-validator.js.map +1 -0
  343. package/dist/lib/lock-health-monitor.js +298 -0
  344. package/dist/lib/lock-health-monitor.js.map +1 -0
  345. package/dist/lib/log-shipper.js +422 -0
  346. package/dist/lib/log-shipper.js.map +1 -0
  347. package/dist/lib/logging.js +146 -0
  348. package/dist/lib/logging.js.map +1 -0
  349. package/dist/lib/message-deduplicator.js +439 -0
  350. package/dist/lib/message-deduplicator.js.map +1 -0
  351. package/dist/lib/multi-system-query.js +604 -0
  352. package/dist/lib/multi-system-query.js.map +1 -0
  353. package/dist/lib/orphan-detector.js +332 -0
  354. package/dist/lib/orphan-detector.js.map +1 -0
  355. package/dist/lib/password-generator.js +166 -0
  356. package/dist/lib/password-generator.js.map +1 -0
  357. package/dist/lib/path-validator.js +429 -0
  358. package/dist/lib/path-validator.js.map +1 -0
  359. package/dist/lib/query-translator.js +905 -0
  360. package/dist/lib/query-translator.js.map +1 -0
  361. package/dist/lib/queue-recovery.js +469 -0
  362. package/dist/lib/queue-recovery.js.map +1 -0
  363. package/dist/lib/redis-queue-manager.js +512 -0
  364. package/dist/lib/redis-queue-manager.js.map +1 -0
  365. package/dist/lib/reflection-archiver.js +272 -0
  366. package/dist/lib/reflection-archiver.js.map +1 -0
  367. package/dist/lib/retry-manager.js +453 -0
  368. package/dist/lib/retry-manager.js.map +1 -0
  369. package/dist/lib/retry.js +262 -0
  370. package/dist/lib/retry.js.map +1 -0
  371. package/dist/lib/schema-transform.js +695 -0
  372. package/dist/lib/schema-transform.js.map +1 -0
  373. package/dist/lib/schema-validator.js +491 -0
  374. package/dist/lib/schema-validator.js.map +1 -0
  375. package/dist/lib/skill-cache.js +297 -0
  376. package/dist/lib/skill-cache.js.map +1 -0
  377. package/dist/lib/skill-content-manager.js +337 -0
  378. package/dist/lib/skill-content-manager.js.map +1 -0
  379. package/dist/lib/skill-frontmatter-parser.js +237 -0
  380. package/dist/lib/skill-frontmatter-parser.js.map +1 -0
  381. package/dist/lib/skill-git-integration.js +275 -0
  382. package/dist/lib/skill-git-integration.js.map +1 -0
  383. package/dist/lib/skill-markdown-validator.js +396 -0
  384. package/dist/lib/skill-markdown-validator.js.map +1 -0
  385. package/dist/lib/skill-output-parser.js +312 -0
  386. package/dist/lib/skill-output-parser.js.map +1 -0
  387. package/dist/lib/unified-query-api.js +467 -0
  388. package/dist/lib/unified-query-api.js.map +1 -0
  389. package/dist/middleware/auth-middleware.js +350 -0
  390. package/dist/middleware/auth-middleware.js.map +1 -0
  391. package/dist/middleware/schema-validation.js +347 -0
  392. package/dist/middleware/schema-validation.js.map +1 -0
  393. package/dist/providers/anthropic-provider.js +1 -1
  394. package/dist/providers/anthropic-provider.js.map +1 -1
  395. package/dist/providers/provider-factory.js +2 -2
  396. package/dist/providers/provider-factory.js.map +1 -1
  397. package/dist/services/edge-case-analyzer.js +321 -0
  398. package/dist/services/edge-case-analyzer.js.map +1 -0
  399. package/dist/services/edge-case-deduplicator.js +266 -0
  400. package/dist/services/edge-case-deduplicator.js.map +1 -0
  401. package/dist/services/edge-case-detector.js +337 -0
  402. package/dist/services/edge-case-detector.js.map +1 -0
  403. package/dist/services/edge-case-tracker.js +547 -0
  404. package/dist/services/edge-case-tracker.js.map +1 -0
  405. package/dist/services/health-check-system.js +586 -0
  406. package/dist/services/health-check-system.js.map +1 -0
  407. package/dist/services/metrics-logger.js +412 -0
  408. package/dist/services/metrics-logger.js.map +1 -0
  409. package/dist/services/patch-generator.js +378 -0
  410. package/dist/services/patch-generator.js.map +1 -0
  411. package/dist/services/patch-validator.js +337 -0
  412. package/dist/services/patch-validator.js.map +1 -0
  413. package/dist/services/performance-monitor.js +811 -0
  414. package/dist/services/performance-monitor.js.map +1 -0
  415. package/dist/services/promotion-pipeline.js +918 -0
  416. package/dist/services/promotion-pipeline.js.map +1 -0
  417. package/dist/services/promotion-validator.js +394 -0
  418. package/dist/services/promotion-validator.js.map +1 -0
  419. package/dist/services/reflection-logger.js +388 -0
  420. package/dist/services/reflection-logger.js.map +1 -0
  421. package/dist/services/skill-deployment.js +472 -0
  422. package/dist/services/skill-deployment.js.map +1 -0
  423. package/dist/services/skill-loader.js +427 -0
  424. package/dist/services/skill-loader.js.map +1 -0
  425. package/dist/services/skill-promotion.js +372 -0
  426. package/dist/services/skill-promotion.js.map +1 -0
  427. package/dist/services/skill-validator.js +454 -0
  428. package/dist/services/skill-validator.js.map +1 -0
  429. package/dist/services/skill-versioning.js +244 -0
  430. package/dist/services/skill-versioning.js.map +1 -0
  431. package/dist/services/workspace-supervisor.js +597 -0
  432. package/dist/services/workspace-supervisor.js.map +1 -0
  433. package/dist/types/edge-case.js +45 -0
  434. package/dist/types/edge-case.js.map +1 -0
  435. package/package.json +201 -177
  436. package/readme/README.md +19 -4
  437. package/scripts/backup-cleanup.sh +627 -0
  438. package/scripts/cleanup-workspaces.sh +412 -0
  439. package/scripts/cleanup-yaml-configs.sh +141 -0
  440. package/scripts/deploy-approved-skills.sh +263 -0
  441. package/scripts/health-check.sh +447 -0
  442. package/scripts/log-aggregator.sh +554 -0
  443. package/scripts/log-monitor.sh +629 -0
  444. package/scripts/manage-agent-workspaces.sh +434 -0
  445. package/scripts/migrate-schema.sh +533 -0
  446. package/scripts/promote-staged-skills.sh +423 -0
  447. package/scripts/verify-no-secrets.sh +88 -35
  448. package/.claude/cfn-extras/agents/deprecated-coordinators/adaptive-coordinator.md.backup +0 -161
  449. package/.claude/cfn-extras/agents/deprecated-coordinators/blocking-coordinator-example.md.backup +0 -728
  450. package/.claude/cfn-extras/agents/deprecated-coordinators/mesh-coordinator.md.backup +0 -131
  451. package/.claude/skills/agent-lifecycle/SKILL.md +0 -60
  452. package/.claude/skills/agent-lifecycle/execute-lifecycle-hook.sh +0 -573
  453. package/.claude/skills/agent-lifecycle/simple-audit.sh +0 -31
  454. package/.claude/skills/cfn-agent-spawning/spawn-agent.sh.backup +0 -273
  455. package/.claude/skills/cfn-loop-orchestration/orchestrate.sh.backup +0 -949
  456. package/README.md.backup_before_replace +0 -781
  457. package/claude-assets/cfn-extras/agents/deprecated-coordinators/adaptive-coordinator.md.backup +0 -161
  458. package/claude-assets/cfn-extras/agents/deprecated-coordinators/blocking-coordinator-example.md.backup +0 -728
  459. package/claude-assets/cfn-extras/agents/deprecated-coordinators/mesh-coordinator.md.backup +0 -131
  460. package/claude-assets/skills/cfn-agent-spawning/spawn-agent.sh.backup +0 -273
  461. package/claude-assets/skills/cfn-loop-orchestration/orchestrate.sh.backup +0 -949
@@ -0,0 +1,453 @@
1
+ /**
2
+ * Enhanced Retry Manager with Circuit Breaker Integration
3
+ *
4
+ * Provides advanced retry logic with:
5
+ * - Exponential backoff with jitter
6
+ * - Circuit breaker integration
7
+ * - Correlation ID tracking
8
+ * - Configurable retry policies
9
+ * - Detailed retry attempt logging
10
+ * - Retryable error classification
11
+ *
12
+ * Part of HIGH-PRIORITY retry logic implementation
13
+ *
14
+ * Usage:
15
+ * const manager = new RetryManager({ correlationId: 'req-123' });
16
+ * const result = await manager.executeWithRetry(
17
+ * async () => await databaseQuery(),
18
+ * { maxAttempts: 3, baseDelayMs: 1000 }
19
+ * );
20
+ */ import { withRetry } from './retry.js';
21
+ import { StandardError, ErrorCode, isRetryableError } from './errors.js';
22
+ import { createLogger } from './logging.js';
23
+ const logger = createLogger('retry-manager');
24
+ /**
25
+ * Circuit breaker state
26
+ */ export var CircuitState = /*#__PURE__*/ function(CircuitState) {
27
+ CircuitState["CLOSED"] = "CLOSED";
28
+ CircuitState["OPEN"] = "OPEN";
29
+ CircuitState["HALF_OPEN"] = "HALF_OPEN";
30
+ return CircuitState;
31
+ }({});
32
+ /**
33
+ * Predefined retry policies
34
+ */ export const RetryPolicies = {
35
+ /** Quick retry for fast operations (3 attempts, 500ms base, 5s max) */ QUICK: {
36
+ name: 'QUICK',
37
+ maxAttempts: 3,
38
+ baseDelayMs: 500,
39
+ maxDelayMs: 5000,
40
+ exponential: true,
41
+ jitter: true
42
+ },
43
+ /** Standard retry for typical operations (3 attempts, 1s base, 30s max) */ STANDARD: {
44
+ name: 'STANDARD',
45
+ maxAttempts: 3,
46
+ baseDelayMs: 1000,
47
+ maxDelayMs: 30000,
48
+ exponential: true,
49
+ jitter: true
50
+ },
51
+ /** Aggressive retry for critical operations (5 attempts, 2s base, 60s max) */ AGGRESSIVE: {
52
+ name: 'AGGRESSIVE',
53
+ maxAttempts: 5,
54
+ baseDelayMs: 2000,
55
+ maxDelayMs: 60000,
56
+ exponential: true,
57
+ jitter: true
58
+ },
59
+ /** Database-specific retry (3 attempts, 1s base, 30s max, only retryable errors) */ DATABASE: {
60
+ name: 'DATABASE',
61
+ maxAttempts: 3,
62
+ baseDelayMs: 1000,
63
+ maxDelayMs: 30000,
64
+ exponential: true,
65
+ jitter: true,
66
+ shouldRetry: (error)=>{
67
+ // Only retry specific database errors
68
+ if (error instanceof StandardError) {
69
+ return error.isRetryable;
70
+ }
71
+ return isRetryableError(error);
72
+ }
73
+ },
74
+ /** Network-specific retry (4 attempts, 2s base, 45s max) */ NETWORK: {
75
+ name: 'NETWORK',
76
+ maxAttempts: 4,
77
+ baseDelayMs: 2000,
78
+ maxDelayMs: 45000,
79
+ exponential: true,
80
+ jitter: true,
81
+ shouldRetry: (error)=>{
82
+ if (error instanceof StandardError) {
83
+ return error.code === ErrorCode.NETWORK_ERROR || error.isRetryable;
84
+ }
85
+ return isRetryableError(error);
86
+ }
87
+ },
88
+ /** File system retry (2 attempts, 500ms base, 5s max) */ FILE_SYSTEM: {
89
+ name: 'FILE_SYSTEM',
90
+ maxAttempts: 2,
91
+ baseDelayMs: 500,
92
+ maxDelayMs: 5000,
93
+ exponential: false,
94
+ jitter: false
95
+ }
96
+ };
97
+ /**
98
+ * Enhanced Retry Manager with circuit breaker and correlation tracking
99
+ */ export class RetryManager {
100
+ config;
101
+ circuitState = "CLOSED";
102
+ failureCount = 0;
103
+ successCount = 0;
104
+ lastFailureTime;
105
+ retryAttempts = [];
106
+ constructor(config = {}){
107
+ this.config = {
108
+ correlationId: config.correlationId,
109
+ circuitBreaker: {
110
+ failureThreshold: 5,
111
+ successThreshold: 2,
112
+ openTimeoutMs: 60000,
113
+ enabled: false,
114
+ ...config.circuitBreaker
115
+ },
116
+ defaultPolicy: config.defaultPolicy || RetryPolicies.STANDARD,
117
+ enableLogging: config.enableLogging ?? true
118
+ };
119
+ }
120
+ /**
121
+ * Execute operation with retry logic
122
+ *
123
+ * @param fn - Async function to execute
124
+ * @param policyOrOptions - Retry policy or custom options
125
+ * @returns Result of the function
126
+ * @throws Error if all retry attempts fail or circuit is open
127
+ */ async executeWithRetry(fn, policyOrOptions) {
128
+ // Check circuit breaker
129
+ if (this.config.circuitBreaker.enabled) {
130
+ this.checkCircuitBreaker();
131
+ }
132
+ // Determine retry options
133
+ const options = this.buildRetryOptions(policyOrOptions);
134
+ const policyName = policyOrOptions?.name;
135
+ // Clear retry attempts for new operation
136
+ this.retryAttempts = [];
137
+ // Log operation start
138
+ if (this.config.enableLogging) {
139
+ logger.debug('Starting operation with retry', {
140
+ correlationId: this.config.correlationId,
141
+ policy: policyName || 'custom',
142
+ maxAttempts: options.maxAttempts,
143
+ circuitState: this.circuitState
144
+ });
145
+ }
146
+ try {
147
+ // Execute with retry
148
+ const result = await withRetry(fn, {
149
+ ...options,
150
+ onRetry: (attempt, error, delayMs)=>{
151
+ // Track retry attempt
152
+ this.retryAttempts.push({
153
+ attemptNumber: attempt,
154
+ correlationId: this.config.correlationId,
155
+ error,
156
+ delayMs,
157
+ timestamp: new Date(),
158
+ policyName
159
+ });
160
+ // Log retry attempt
161
+ if (this.config.enableLogging) {
162
+ logger.warn('Retry attempt', {
163
+ correlationId: this.config.correlationId,
164
+ attempt,
165
+ maxAttempts: options.maxAttempts,
166
+ error: error.message,
167
+ delayMs,
168
+ policyName,
169
+ isRetryable: error instanceof StandardError ? error.isRetryable : isRetryableError(error)
170
+ });
171
+ }
172
+ // Call custom onRetry if provided
173
+ if (options.onRetry) {
174
+ options.onRetry(attempt, error, delayMs);
175
+ }
176
+ }
177
+ });
178
+ // Record success for circuit breaker
179
+ if (this.config.circuitBreaker.enabled) {
180
+ this.recordSuccess();
181
+ }
182
+ // Log success
183
+ if (this.config.enableLogging) {
184
+ logger.debug('Operation succeeded', {
185
+ correlationId: this.config.correlationId,
186
+ retryAttempts: this.retryAttempts.length,
187
+ circuitState: this.circuitState
188
+ });
189
+ }
190
+ return result;
191
+ } catch (error) {
192
+ // Record failure for circuit breaker
193
+ if (this.config.circuitBreaker.enabled) {
194
+ this.recordFailure();
195
+ }
196
+ // Log failure
197
+ if (this.config.enableLogging) {
198
+ logger.error('Operation failed after retries', {
199
+ correlationId: this.config.correlationId,
200
+ retryAttempts: this.retryAttempts.length,
201
+ finalError: error instanceof Error ? error.message : String(error),
202
+ circuitState: this.circuitState
203
+ });
204
+ }
205
+ throw error;
206
+ }
207
+ }
208
+ /**
209
+ * Execute operation with retry and return statistics
210
+ *
211
+ * @param fn - Async function to execute
212
+ * @param policyOrOptions - Retry policy or custom options
213
+ * @returns Result and retry statistics
214
+ */ async executeWithRetryStats(fn, policyOrOptions) {
215
+ const startTime = Date.now();
216
+ let result;
217
+ try {
218
+ result = await this.executeWithRetry(fn, policyOrOptions);
219
+ } catch (error) {
220
+ const stats = {
221
+ totalAttempts: this.retryAttempts.length + 1,
222
+ succeeded: false,
223
+ totalTimeMs: Date.now() - startTime,
224
+ delays: this.retryAttempts.map((a)=>a.delayMs),
225
+ errors: this.retryAttempts.map((a)=>a.error)
226
+ };
227
+ throw error;
228
+ }
229
+ const stats = {
230
+ totalAttempts: this.retryAttempts.length + 1,
231
+ succeeded: true,
232
+ totalTimeMs: Date.now() - startTime,
233
+ delays: this.retryAttempts.map((a)=>a.delayMs),
234
+ errors: this.retryAttempts.map((a)=>a.error)
235
+ };
236
+ return {
237
+ result,
238
+ stats,
239
+ attempts: [
240
+ ...this.retryAttempts
241
+ ]
242
+ };
243
+ }
244
+ /**
245
+ * Get current circuit breaker state
246
+ */ getCircuitState() {
247
+ return this.circuitState;
248
+ }
249
+ /**
250
+ * Get circuit breaker statistics
251
+ */ getCircuitStats() {
252
+ return {
253
+ state: this.circuitState,
254
+ failureCount: this.failureCount,
255
+ successCount: this.successCount,
256
+ lastFailureTime: this.lastFailureTime
257
+ };
258
+ }
259
+ /**
260
+ * Manually reset circuit breaker
261
+ */ resetCircuit() {
262
+ this.circuitState = "CLOSED";
263
+ this.failureCount = 0;
264
+ this.successCount = 0;
265
+ this.lastFailureTime = undefined;
266
+ if (this.config.enableLogging) {
267
+ logger.info('Circuit breaker manually reset', {
268
+ correlationId: this.config.correlationId
269
+ });
270
+ }
271
+ }
272
+ /**
273
+ * Build retry options from policy or custom options
274
+ */ buildRetryOptions(policyOrOptions) {
275
+ if (!policyOrOptions) {
276
+ // Use default policy
277
+ return {
278
+ maxAttempts: this.config.defaultPolicy.maxAttempts,
279
+ baseDelayMs: this.config.defaultPolicy.baseDelayMs,
280
+ maxDelayMs: this.config.defaultPolicy.maxDelayMs,
281
+ exponential: this.config.defaultPolicy.exponential,
282
+ jitter: this.config.defaultPolicy.jitter,
283
+ shouldRetry: this.config.defaultPolicy.shouldRetry
284
+ };
285
+ }
286
+ // Check if it's a retry policy
287
+ if ('name' in policyOrOptions) {
288
+ const policy = policyOrOptions;
289
+ return {
290
+ maxAttempts: policy.maxAttempts,
291
+ baseDelayMs: policy.baseDelayMs,
292
+ maxDelayMs: policy.maxDelayMs,
293
+ exponential: policy.exponential,
294
+ jitter: policy.jitter,
295
+ shouldRetry: policy.shouldRetry
296
+ };
297
+ }
298
+ // It's custom retry options
299
+ return policyOrOptions;
300
+ }
301
+ /**
302
+ * Check circuit breaker state and throw if open
303
+ */ checkCircuitBreaker() {
304
+ const now = Date.now();
305
+ switch(this.circuitState){
306
+ case "OPEN":
307
+ // Check if timeout has elapsed
308
+ if (this.lastFailureTime && now - this.lastFailureTime.getTime() >= this.config.circuitBreaker.openTimeoutMs) {
309
+ // Transition to half-open
310
+ this.circuitState = "HALF_OPEN";
311
+ this.successCount = 0;
312
+ if (this.config.enableLogging) {
313
+ logger.info('Circuit breaker transitioning to half-open', {
314
+ correlationId: this.config.correlationId,
315
+ timeSinceOpen: now - this.lastFailureTime.getTime()
316
+ });
317
+ }
318
+ } else {
319
+ // Circuit is still open, reject request
320
+ throw new StandardError(ErrorCode.OPERATION_TIMEOUT, 'Circuit breaker is open - service unavailable', {
321
+ circuitState: this.circuitState,
322
+ failureCount: this.failureCount,
323
+ timeSinceOpen: this.lastFailureTime ? now - this.lastFailureTime.getTime() : 0
324
+ }, undefined, false // Not retryable
325
+ );
326
+ }
327
+ break;
328
+ case "HALF_OPEN":
329
+ // Allow request through for testing
330
+ if (this.config.enableLogging) {
331
+ logger.debug('Allowing request through half-open circuit', {
332
+ correlationId: this.config.correlationId,
333
+ successCount: this.successCount,
334
+ successThreshold: this.config.circuitBreaker.successThreshold
335
+ });
336
+ }
337
+ break;
338
+ case "CLOSED":
339
+ break;
340
+ }
341
+ }
342
+ /**
343
+ * Record successful operation for circuit breaker
344
+ */ recordSuccess() {
345
+ switch(this.circuitState){
346
+ case "HALF_OPEN":
347
+ this.successCount++;
348
+ if (this.successCount >= this.config.circuitBreaker.successThreshold) {
349
+ // Close the circuit
350
+ this.circuitState = "CLOSED";
351
+ this.failureCount = 0;
352
+ this.successCount = 0;
353
+ if (this.config.enableLogging) {
354
+ logger.info('Circuit breaker closed after recovery', {
355
+ correlationId: this.config.correlationId
356
+ });
357
+ }
358
+ }
359
+ break;
360
+ case "CLOSED":
361
+ // Reset failure count on success
362
+ if (this.failureCount > 0) {
363
+ this.failureCount = 0;
364
+ }
365
+ break;
366
+ }
367
+ }
368
+ /**
369
+ * Record failed operation for circuit breaker
370
+ */ recordFailure() {
371
+ this.lastFailureTime = new Date();
372
+ switch(this.circuitState){
373
+ case "HALF_OPEN":
374
+ // Failed during recovery, reopen circuit
375
+ this.circuitState = "OPEN";
376
+ this.successCount = 0;
377
+ if (this.config.enableLogging) {
378
+ logger.warn('Circuit breaker reopened after failed recovery', {
379
+ correlationId: this.config.correlationId
380
+ });
381
+ }
382
+ break;
383
+ case "CLOSED":
384
+ this.failureCount++;
385
+ if (this.failureCount >= this.config.circuitBreaker.failureThreshold) {
386
+ // Open the circuit
387
+ this.circuitState = "OPEN";
388
+ if (this.config.enableLogging) {
389
+ logger.error('Circuit breaker opened due to failures', {
390
+ correlationId: this.config.correlationId,
391
+ failureCount: this.failureCount,
392
+ threshold: this.config.circuitBreaker.failureThreshold
393
+ });
394
+ }
395
+ }
396
+ break;
397
+ }
398
+ }
399
+ }
400
+ /**
401
+ * Create a retry manager instance with correlation ID
402
+ *
403
+ * @param correlationId - Correlation ID for tracking
404
+ * @param config - Additional configuration
405
+ * @returns RetryManager instance
406
+ */ export function createRetryManager(correlationId, config) {
407
+ return new RetryManager({
408
+ ...config,
409
+ correlationId
410
+ });
411
+ }
412
+ /**
413
+ * Execute operation with standard retry policy
414
+ *
415
+ * @param fn - Async function to execute
416
+ * @param correlationId - Optional correlation ID
417
+ * @returns Result of the function
418
+ */ export async function withStandardRetry(fn, correlationId) {
419
+ const manager = createRetryManager(correlationId);
420
+ return manager.executeWithRetry(fn, RetryPolicies.STANDARD);
421
+ }
422
+ /**
423
+ * Execute database operation with retry policy
424
+ *
425
+ * @param fn - Async function to execute
426
+ * @param correlationId - Optional correlation ID
427
+ * @returns Result of the function
428
+ */ export async function withDatabaseRetry(fn, correlationId) {
429
+ const manager = createRetryManager(correlationId);
430
+ return manager.executeWithRetry(fn, RetryPolicies.DATABASE);
431
+ }
432
+ /**
433
+ * Execute network operation with retry policy
434
+ *
435
+ * @param fn - Async function to execute
436
+ * @param correlationId - Optional correlation ID
437
+ * @returns Result of the function
438
+ */ export async function withNetworkRetry(fn, correlationId) {
439
+ const manager = createRetryManager(correlationId);
440
+ return manager.executeWithRetry(fn, RetryPolicies.NETWORK);
441
+ }
442
+ /**
443
+ * Execute file system operation with retry policy
444
+ *
445
+ * @param fn - Async function to execute
446
+ * @param correlationId - Optional correlation ID
447
+ * @returns Result of the function
448
+ */ export async function withFileSystemRetry(fn, correlationId) {
449
+ const manager = createRetryManager(correlationId);
450
+ return manager.executeWithRetry(fn, RetryPolicies.FILE_SYSTEM);
451
+ }
452
+
453
+ //# sourceMappingURL=retry-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/lib/retry-manager.ts"],"sourcesContent":["/**\r\n * Enhanced Retry Manager with Circuit Breaker Integration\r\n *\r\n * Provides advanced retry logic with:\r\n * - Exponential backoff with jitter\r\n * - Circuit breaker integration\r\n * - Correlation ID tracking\r\n * - Configurable retry policies\r\n * - Detailed retry attempt logging\r\n * - Retryable error classification\r\n *\r\n * Part of HIGH-PRIORITY retry logic implementation\r\n *\r\n * Usage:\r\n * const manager = new RetryManager({ correlationId: 'req-123' });\r\n * const result = await manager.executeWithRetry(\r\n * async () => await databaseQuery(),\r\n * { maxAttempts: 3, baseDelayMs: 1000 }\r\n * );\r\n */\r\n\r\nimport { withRetry, RetryOptions, RetryStats, sleep } from './retry.js';\r\nimport { StandardError, ErrorCode, isRetryableError } from './errors.js';\r\nimport { createLogger } from './logging.js';\r\n\r\nconst logger = createLogger('retry-manager');\r\n\r\n/**\r\n * Circuit breaker state\r\n */\r\nexport enum CircuitState {\r\n CLOSED = 'CLOSED', // Normal operation\r\n OPEN = 'OPEN', // Failing, reject all requests\r\n HALF_OPEN = 'HALF_OPEN', // Testing if service recovered\r\n}\r\n\r\n/**\r\n * Circuit breaker configuration\r\n */\r\nexport interface CircuitBreakerConfig {\r\n /** Failure threshold to open circuit (default: 5) */\r\n failureThreshold?: number;\r\n /** Success threshold to close circuit from half-open (default: 2) */\r\n successThreshold?: number;\r\n /** Timeout in ms before attempting recovery (default: 60000) */\r\n openTimeoutMs?: number;\r\n /** Enable circuit breaker (default: false) */\r\n enabled?: boolean;\r\n}\r\n\r\n/**\r\n * Retry policy configuration\r\n */\r\nexport interface RetryPolicy {\r\n /** Policy name for logging */\r\n name: string;\r\n /** Maximum retry attempts */\r\n maxAttempts: number;\r\n /** Base delay in milliseconds */\r\n baseDelayMs: number;\r\n /** Maximum delay in milliseconds */\r\n maxDelayMs: number;\r\n /** Use exponential backoff */\r\n exponential: boolean;\r\n /** Add jitter to delays */\r\n jitter: boolean;\r\n /** Custom retry condition */\r\n shouldRetry?: (error: Error) => boolean;\r\n}\r\n\r\n/**\r\n * Predefined retry policies\r\n */\r\nexport const RetryPolicies = {\r\n /** Quick retry for fast operations (3 attempts, 500ms base, 5s max) */\r\n QUICK: {\r\n name: 'QUICK',\r\n maxAttempts: 3,\r\n baseDelayMs: 500,\r\n maxDelayMs: 5000,\r\n exponential: true,\r\n jitter: true,\r\n } as RetryPolicy,\r\n\r\n /** Standard retry for typical operations (3 attempts, 1s base, 30s max) */\r\n STANDARD: {\r\n name: 'STANDARD',\r\n maxAttempts: 3,\r\n baseDelayMs: 1000,\r\n maxDelayMs: 30000,\r\n exponential: true,\r\n jitter: true,\r\n } as RetryPolicy,\r\n\r\n /** Aggressive retry for critical operations (5 attempts, 2s base, 60s max) */\r\n AGGRESSIVE: {\r\n name: 'AGGRESSIVE',\r\n maxAttempts: 5,\r\n baseDelayMs: 2000,\r\n maxDelayMs: 60000,\r\n exponential: true,\r\n jitter: true,\r\n } as RetryPolicy,\r\n\r\n /** Database-specific retry (3 attempts, 1s base, 30s max, only retryable errors) */\r\n DATABASE: {\r\n name: 'DATABASE',\r\n maxAttempts: 3,\r\n baseDelayMs: 1000,\r\n maxDelayMs: 30000,\r\n exponential: true,\r\n jitter: true,\r\n shouldRetry: (error: Error) => {\r\n // Only retry specific database errors\r\n if (error instanceof StandardError) {\r\n return error.isRetryable;\r\n }\r\n return isRetryableError(error);\r\n },\r\n } as RetryPolicy,\r\n\r\n /** Network-specific retry (4 attempts, 2s base, 45s max) */\r\n NETWORK: {\r\n name: 'NETWORK',\r\n maxAttempts: 4,\r\n baseDelayMs: 2000,\r\n maxDelayMs: 45000,\r\n exponential: true,\r\n jitter: true,\r\n shouldRetry: (error: Error) => {\r\n if (error instanceof StandardError) {\r\n return error.code === ErrorCode.NETWORK_ERROR || error.isRetryable;\r\n }\r\n return isRetryableError(error);\r\n },\r\n } as RetryPolicy,\r\n\r\n /** File system retry (2 attempts, 500ms base, 5s max) */\r\n FILE_SYSTEM: {\r\n name: 'FILE_SYSTEM',\r\n maxAttempts: 2,\r\n baseDelayMs: 500,\r\n maxDelayMs: 5000,\r\n exponential: false,\r\n jitter: false,\r\n } as RetryPolicy,\r\n};\r\n\r\n/**\r\n * Retry manager configuration\r\n */\r\nexport interface RetryManagerConfig {\r\n /** Correlation ID for tracking related operations */\r\n correlationId?: string;\r\n /** Circuit breaker configuration */\r\n circuitBreaker?: CircuitBreakerConfig;\r\n /** Default retry policy */\r\n defaultPolicy?: RetryPolicy;\r\n /** Enable detailed logging */\r\n enableLogging?: boolean;\r\n}\r\n\r\n/**\r\n * Retry attempt metadata\r\n */\r\nexport interface RetryAttemptMetadata {\r\n attemptNumber: number;\r\n correlationId?: string;\r\n error: Error;\r\n delayMs: number;\r\n timestamp: Date;\r\n policyName?: string;\r\n}\r\n\r\n/**\r\n * Enhanced Retry Manager with circuit breaker and correlation tracking\r\n */\r\nexport class RetryManager {\r\n private readonly config: Required<RetryManagerConfig>;\r\n private circuitState: CircuitState = CircuitState.CLOSED;\r\n private failureCount: number = 0;\r\n private successCount: number = 0;\r\n private lastFailureTime?: Date;\r\n private retryAttempts: RetryAttemptMetadata[] = [];\r\n\r\n constructor(config: RetryManagerConfig = {}) {\r\n this.config = {\r\n correlationId: config.correlationId,\r\n circuitBreaker: {\r\n failureThreshold: 5,\r\n successThreshold: 2,\r\n openTimeoutMs: 60000,\r\n enabled: false,\r\n ...config.circuitBreaker,\r\n },\r\n defaultPolicy: config.defaultPolicy || RetryPolicies.STANDARD,\r\n enableLogging: config.enableLogging ?? true,\r\n };\r\n }\r\n\r\n /**\r\n * Execute operation with retry logic\r\n *\r\n * @param fn - Async function to execute\r\n * @param policyOrOptions - Retry policy or custom options\r\n * @returns Result of the function\r\n * @throws Error if all retry attempts fail or circuit is open\r\n */\r\n async executeWithRetry<T>(\r\n fn: () => Promise<T>,\r\n policyOrOptions?: RetryPolicy | RetryOptions\r\n ): Promise<T> {\r\n // Check circuit breaker\r\n if (this.config.circuitBreaker.enabled) {\r\n this.checkCircuitBreaker();\r\n }\r\n\r\n // Determine retry options\r\n const options = this.buildRetryOptions(policyOrOptions);\r\n const policyName = (policyOrOptions as RetryPolicy)?.name;\r\n\r\n // Clear retry attempts for new operation\r\n this.retryAttempts = [];\r\n\r\n // Log operation start\r\n if (this.config.enableLogging) {\r\n logger.debug('Starting operation with retry', {\r\n correlationId: this.config.correlationId,\r\n policy: policyName || 'custom',\r\n maxAttempts: options.maxAttempts,\r\n circuitState: this.circuitState,\r\n });\r\n }\r\n\r\n try {\r\n // Execute with retry\r\n const result = await withRetry(fn, {\r\n ...options,\r\n onRetry: (attempt, error, delayMs) => {\r\n // Track retry attempt\r\n this.retryAttempts.push({\r\n attemptNumber: attempt,\r\n correlationId: this.config.correlationId,\r\n error,\r\n delayMs,\r\n timestamp: new Date(),\r\n policyName,\r\n });\r\n\r\n // Log retry attempt\r\n if (this.config.enableLogging) {\r\n logger.warn('Retry attempt', {\r\n correlationId: this.config.correlationId,\r\n attempt,\r\n maxAttempts: options.maxAttempts,\r\n error: error.message,\r\n delayMs,\r\n policyName,\r\n isRetryable: error instanceof StandardError ? error.isRetryable : isRetryableError(error),\r\n });\r\n }\r\n\r\n // Call custom onRetry if provided\r\n if (options.onRetry) {\r\n options.onRetry(attempt, error, delayMs);\r\n }\r\n },\r\n });\r\n\r\n // Record success for circuit breaker\r\n if (this.config.circuitBreaker.enabled) {\r\n this.recordSuccess();\r\n }\r\n\r\n // Log success\r\n if (this.config.enableLogging) {\r\n logger.debug('Operation succeeded', {\r\n correlationId: this.config.correlationId,\r\n retryAttempts: this.retryAttempts.length,\r\n circuitState: this.circuitState,\r\n });\r\n }\r\n\r\n return result;\r\n } catch (error) {\r\n // Record failure for circuit breaker\r\n if (this.config.circuitBreaker.enabled) {\r\n this.recordFailure();\r\n }\r\n\r\n // Log failure\r\n if (this.config.enableLogging) {\r\n logger.error('Operation failed after retries', {\r\n correlationId: this.config.correlationId,\r\n retryAttempts: this.retryAttempts.length,\r\n finalError: error instanceof Error ? error.message : String(error),\r\n circuitState: this.circuitState,\r\n });\r\n }\r\n\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Execute operation with retry and return statistics\r\n *\r\n * @param fn - Async function to execute\r\n * @param policyOrOptions - Retry policy or custom options\r\n * @returns Result and retry statistics\r\n */\r\n async executeWithRetryStats<T>(\r\n fn: () => Promise<T>,\r\n policyOrOptions?: RetryPolicy | RetryOptions\r\n ): Promise<{ result: T; stats: RetryStats; attempts: RetryAttemptMetadata[] }> {\r\n const startTime = Date.now();\r\n let result: T;\r\n\r\n try {\r\n result = await this.executeWithRetry(fn, policyOrOptions);\r\n } catch (error) {\r\n const stats: RetryStats = {\r\n totalAttempts: this.retryAttempts.length + 1,\r\n succeeded: false,\r\n totalTimeMs: Date.now() - startTime,\r\n delays: this.retryAttempts.map((a) => a.delayMs),\r\n errors: this.retryAttempts.map((a) => a.error),\r\n };\r\n throw error;\r\n }\r\n\r\n const stats: RetryStats = {\r\n totalAttempts: this.retryAttempts.length + 1,\r\n succeeded: true,\r\n totalTimeMs: Date.now() - startTime,\r\n delays: this.retryAttempts.map((a) => a.delayMs),\r\n errors: this.retryAttempts.map((a) => a.error),\r\n };\r\n\r\n return {\r\n result,\r\n stats,\r\n attempts: [...this.retryAttempts],\r\n };\r\n }\r\n\r\n /**\r\n * Get current circuit breaker state\r\n */\r\n getCircuitState(): CircuitState {\r\n return this.circuitState;\r\n }\r\n\r\n /**\r\n * Get circuit breaker statistics\r\n */\r\n getCircuitStats() {\r\n return {\r\n state: this.circuitState,\r\n failureCount: this.failureCount,\r\n successCount: this.successCount,\r\n lastFailureTime: this.lastFailureTime,\r\n };\r\n }\r\n\r\n /**\r\n * Manually reset circuit breaker\r\n */\r\n resetCircuit(): void {\r\n this.circuitState = CircuitState.CLOSED;\r\n this.failureCount = 0;\r\n this.successCount = 0;\r\n this.lastFailureTime = undefined;\r\n\r\n if (this.config.enableLogging) {\r\n logger.info('Circuit breaker manually reset', {\r\n correlationId: this.config.correlationId,\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Build retry options from policy or custom options\r\n */\r\n private buildRetryOptions(policyOrOptions?: RetryPolicy | RetryOptions): RetryOptions {\r\n if (!policyOrOptions) {\r\n // Use default policy\r\n return {\r\n maxAttempts: this.config.defaultPolicy.maxAttempts,\r\n baseDelayMs: this.config.defaultPolicy.baseDelayMs,\r\n maxDelayMs: this.config.defaultPolicy.maxDelayMs,\r\n exponential: this.config.defaultPolicy.exponential,\r\n jitter: this.config.defaultPolicy.jitter,\r\n shouldRetry: this.config.defaultPolicy.shouldRetry,\r\n };\r\n }\r\n\r\n // Check if it's a retry policy\r\n if ('name' in policyOrOptions) {\r\n const policy = policyOrOptions as RetryPolicy;\r\n return {\r\n maxAttempts: policy.maxAttempts,\r\n baseDelayMs: policy.baseDelayMs,\r\n maxDelayMs: policy.maxDelayMs,\r\n exponential: policy.exponential,\r\n jitter: policy.jitter,\r\n shouldRetry: policy.shouldRetry,\r\n };\r\n }\r\n\r\n // It's custom retry options\r\n return policyOrOptions as RetryOptions;\r\n }\r\n\r\n /**\r\n * Check circuit breaker state and throw if open\r\n */\r\n private checkCircuitBreaker(): void {\r\n const now = Date.now();\r\n\r\n switch (this.circuitState) {\r\n case CircuitState.OPEN:\r\n // Check if timeout has elapsed\r\n if (\r\n this.lastFailureTime &&\r\n now - this.lastFailureTime.getTime() >= this.config.circuitBreaker.openTimeoutMs\r\n ) {\r\n // Transition to half-open\r\n this.circuitState = CircuitState.HALF_OPEN;\r\n this.successCount = 0;\r\n\r\n if (this.config.enableLogging) {\r\n logger.info('Circuit breaker transitioning to half-open', {\r\n correlationId: this.config.correlationId,\r\n timeSinceOpen: now - this.lastFailureTime.getTime(),\r\n });\r\n }\r\n } else {\r\n // Circuit is still open, reject request\r\n throw new StandardError(\r\n ErrorCode.OPERATION_TIMEOUT,\r\n 'Circuit breaker is open - service unavailable',\r\n {\r\n circuitState: this.circuitState,\r\n failureCount: this.failureCount,\r\n timeSinceOpen: this.lastFailureTime\r\n ? now - this.lastFailureTime.getTime()\r\n : 0,\r\n },\r\n undefined,\r\n false // Not retryable\r\n );\r\n }\r\n break;\r\n\r\n case CircuitState.HALF_OPEN:\r\n // Allow request through for testing\r\n if (this.config.enableLogging) {\r\n logger.debug('Allowing request through half-open circuit', {\r\n correlationId: this.config.correlationId,\r\n successCount: this.successCount,\r\n successThreshold: this.config.circuitBreaker.successThreshold,\r\n });\r\n }\r\n break;\r\n\r\n case CircuitState.CLOSED:\r\n // Normal operation\r\n break;\r\n }\r\n }\r\n\r\n /**\r\n * Record successful operation for circuit breaker\r\n */\r\n private recordSuccess(): void {\r\n switch (this.circuitState) {\r\n case CircuitState.HALF_OPEN:\r\n this.successCount++;\r\n\r\n if (this.successCount >= this.config.circuitBreaker.successThreshold) {\r\n // Close the circuit\r\n this.circuitState = CircuitState.CLOSED;\r\n this.failureCount = 0;\r\n this.successCount = 0;\r\n\r\n if (this.config.enableLogging) {\r\n logger.info('Circuit breaker closed after recovery', {\r\n correlationId: this.config.correlationId,\r\n });\r\n }\r\n }\r\n break;\r\n\r\n case CircuitState.CLOSED:\r\n // Reset failure count on success\r\n if (this.failureCount > 0) {\r\n this.failureCount = 0;\r\n }\r\n break;\r\n }\r\n }\r\n\r\n /**\r\n * Record failed operation for circuit breaker\r\n */\r\n private recordFailure(): void {\r\n this.lastFailureTime = new Date();\r\n\r\n switch (this.circuitState) {\r\n case CircuitState.HALF_OPEN:\r\n // Failed during recovery, reopen circuit\r\n this.circuitState = CircuitState.OPEN;\r\n this.successCount = 0;\r\n\r\n if (this.config.enableLogging) {\r\n logger.warn('Circuit breaker reopened after failed recovery', {\r\n correlationId: this.config.correlationId,\r\n });\r\n }\r\n break;\r\n\r\n case CircuitState.CLOSED:\r\n this.failureCount++;\r\n\r\n if (this.failureCount >= this.config.circuitBreaker.failureThreshold) {\r\n // Open the circuit\r\n this.circuitState = CircuitState.OPEN;\r\n\r\n if (this.config.enableLogging) {\r\n logger.error('Circuit breaker opened due to failures', {\r\n correlationId: this.config.correlationId,\r\n failureCount: this.failureCount,\r\n threshold: this.config.circuitBreaker.failureThreshold,\r\n });\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Create a retry manager instance with correlation ID\r\n *\r\n * @param correlationId - Correlation ID for tracking\r\n * @param config - Additional configuration\r\n * @returns RetryManager instance\r\n */\r\nexport function createRetryManager(\r\n correlationId?: string,\r\n config?: Omit<RetryManagerConfig, 'correlationId'>\r\n): RetryManager {\r\n return new RetryManager({\r\n ...config,\r\n correlationId,\r\n });\r\n}\r\n\r\n/**\r\n * Execute operation with standard retry policy\r\n *\r\n * @param fn - Async function to execute\r\n * @param correlationId - Optional correlation ID\r\n * @returns Result of the function\r\n */\r\nexport async function withStandardRetry<T>(\r\n fn: () => Promise<T>,\r\n correlationId?: string\r\n): Promise<T> {\r\n const manager = createRetryManager(correlationId);\r\n return manager.executeWithRetry(fn, RetryPolicies.STANDARD);\r\n}\r\n\r\n/**\r\n * Execute database operation with retry policy\r\n *\r\n * @param fn - Async function to execute\r\n * @param correlationId - Optional correlation ID\r\n * @returns Result of the function\r\n */\r\nexport async function withDatabaseRetry<T>(\r\n fn: () => Promise<T>,\r\n correlationId?: string\r\n): Promise<T> {\r\n const manager = createRetryManager(correlationId);\r\n return manager.executeWithRetry(fn, RetryPolicies.DATABASE);\r\n}\r\n\r\n/**\r\n * Execute network operation with retry policy\r\n *\r\n * @param fn - Async function to execute\r\n * @param correlationId - Optional correlation ID\r\n * @returns Result of the function\r\n */\r\nexport async function withNetworkRetry<T>(\r\n fn: () => Promise<T>,\r\n correlationId?: string\r\n): Promise<T> {\r\n const manager = createRetryManager(correlationId);\r\n return manager.executeWithRetry(fn, RetryPolicies.NETWORK);\r\n}\r\n\r\n/**\r\n * Execute file system operation with retry policy\r\n *\r\n * @param fn - Async function to execute\r\n * @param correlationId - Optional correlation ID\r\n * @returns Result of the function\r\n */\r\nexport async function withFileSystemRetry<T>(\r\n fn: () => Promise<T>,\r\n correlationId?: string\r\n): Promise<T> {\r\n const manager = createRetryManager(correlationId);\r\n return manager.executeWithRetry(fn, RetryPolicies.FILE_SYSTEM);\r\n}\r\n"],"names":["withRetry","StandardError","ErrorCode","isRetryableError","createLogger","logger","CircuitState","RetryPolicies","QUICK","name","maxAttempts","baseDelayMs","maxDelayMs","exponential","jitter","STANDARD","AGGRESSIVE","DATABASE","shouldRetry","error","isRetryable","NETWORK","code","NETWORK_ERROR","FILE_SYSTEM","RetryManager","config","circuitState","failureCount","successCount","lastFailureTime","retryAttempts","correlationId","circuitBreaker","failureThreshold","successThreshold","openTimeoutMs","enabled","defaultPolicy","enableLogging","executeWithRetry","fn","policyOrOptions","checkCircuitBreaker","options","buildRetryOptions","policyName","debug","policy","result","onRetry","attempt","delayMs","push","attemptNumber","timestamp","Date","warn","message","recordSuccess","length","recordFailure","finalError","Error","String","executeWithRetryStats","startTime","now","stats","totalAttempts","succeeded","totalTimeMs","delays","map","a","errors","attempts","getCircuitState","getCircuitStats","state","resetCircuit","undefined","info","getTime","timeSinceOpen","OPERATION_TIMEOUT","threshold","createRetryManager","withStandardRetry","manager","withDatabaseRetry","withNetworkRetry","withFileSystemRetry"],"mappings":"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"}