claude-flow-novice 2.15.11 → 2.16.1

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 (741) hide show
  1. package/.claude/cfn-extras/agents/cfn-v3-coordinator.md +517 -0
  2. package/.claude/cfn-extras/skills/GOOGLE_SHEETS_SKILLS_README.md +1 -1
  3. package/.claude/cfn-extras/skills/google-sheets-api-coordinator/SKILL.md +1 -1
  4. package/.claude/cfn-extras/skills/google-sheets-formula-builder/SKILL.md +1 -1
  5. package/.claude/cfn-extras/skills/google-sheets-progress/SKILL.md +1 -1
  6. package/.claude/commands/CFN_LOOP_FRONTEND.md +1 -1
  7. package/.claude/commands/cfn-loop-cli.md +214 -442
  8. package/.claude/commands/cfn-loop-frontend.md +1 -1
  9. package/.claude/commands/cfn-loop-task.md +2 -2
  10. package/.claude/commands/cfn-loop-trigger.md +114 -0
  11. package/.claude/commands/deprecated/cfn-loop.md +2 -2
  12. package/.claude/hooks/cfn-invoke-post-edit-ts.sh +100 -0
  13. package/.claude/hooks/cfn-invoke-post-edit-ts.sh.backup +78 -0
  14. package/.claude/hooks/cfn-invoke-post-edit.sh +53 -5
  15. package/.claude/hooks/cfn-invoke-post-edit.sh.backup +87 -0
  16. package/.claude/hooks/cfn-invoke-pre-edit-ts.sh +116 -0
  17. package/.claude/hooks/cfn-invoke-pre-edit-ts.sh.backup +94 -0
  18. package/.claude/hooks/cfn-invoke-pre-edit.sh +22 -0
  19. package/.claude/hooks/cfn-invoke-pre-edit.sh.backup +88 -0
  20. package/.claude/hooks/cfn-post-edit.config.json +9 -2
  21. package/.claude/root-claude-distribute/CFN-CLAUDE.md +1 -1
  22. package/.claude/skills/cfn-agent-spawning/SKILL.md +48 -1
  23. package/.claude/skills/cfn-agent-spawning/SKILL.md.backup +135 -0
  24. package/.claude/skills/cfn-agent-spawning/TYPESCRIPT_MIGRATION.md +567 -0
  25. package/.claude/skills/cfn-agent-spawning/check-dependencies.sh +22 -0
  26. package/.claude/skills/{cfn-redis-coordination/check-dependencies.sh → cfn-agent-spawning/check-dependencies.sh.backup} +3 -5
  27. package/.claude/skills/cfn-agent-spawning/get-agent-provider-env.sh +22 -0
  28. package/.claude/skills/cfn-agent-spawning/get-agent-provider-env.sh.backup +127 -0
  29. package/.claude/skills/cfn-agent-spawning/parse-agent-provider.sh +22 -0
  30. package/.claude/skills/cfn-agent-spawning/parse-agent-provider.sh.backup +59 -0
  31. package/.claude/skills/cfn-agent-spawning/spawn-agent-wrapper.sh +63 -0
  32. package/.claude/skills/cfn-agent-spawning/spawn-agent-wrapper.sh.backup +41 -0
  33. package/.claude/skills/cfn-agent-spawning/spawn-agent.sh +26 -1
  34. package/.claude/skills/cfn-agent-spawning/spawn-templates.sh +22 -0
  35. package/.claude/skills/cfn-agent-spawning/spawn-templates.sh.backup +613 -0
  36. package/.claude/skills/cfn-agent-spawning/spawn-worker.sh +22 -0
  37. package/.claude/skills/cfn-agent-spawning/spawn-worker.sh.backup +176 -0
  38. package/.claude/skills/cfn-backlog-management/SKILL.md +1 -1
  39. package/.claude/skills/cfn-loop-orchestration/.backups/unknown/1763619700_33aff4a69b99159e4e849107ebc4d09f/metadata.json +8 -0
  40. package/.claude/skills/cfn-loop-orchestration/.backups/unknown/1763619700_33aff4a69b99159e4e849107ebc4d09f/original +271 -0
  41. package/.claude/skills/cfn-loop-orchestration/.backups/unknown/1763619700_33aff4a69b99159e4e849107ebc4d09f/revert.sh +7 -0
  42. package/.claude/skills/cfn-loop-orchestration/.backups/unknown/1763671642_06496e8c399a79db08167cc00ed4b31e/metadata.json +8 -0
  43. package/.claude/skills/cfn-loop-orchestration/.backups/unknown/1763671642_06496e8c399a79db08167cc00ed4b31e/original +325 -0
  44. package/.claude/skills/cfn-loop-orchestration/.backups/unknown/1763671642_06496e8c399a79db08167cc00ed4b31e/revert.sh +7 -0
  45. package/.claude/skills/cfn-loop-orchestration/CLI_IMPLEMENTATION_SUMMARY.md +330 -0
  46. package/.claude/skills/cfn-loop-orchestration/CONFIGURATION_IMPROVEMENTS.md +318 -0
  47. package/.claude/skills/cfn-loop-orchestration/CONTEXT_LOOKUP_MIGRATION.md +308 -0
  48. package/.claude/skills/cfn-loop-orchestration/CONTEXT_LOOKUP_QUICK_START.md +378 -0
  49. package/.claude/skills/cfn-loop-orchestration/E2E_VALIDATION_REPORT.md +262 -0
  50. package/.claude/skills/cfn-loop-orchestration/IMPLEMENTATION_SUMMARY.md +319 -519
  51. package/.claude/skills/cfn-loop-orchestration/NORTH_STAR_E2E_REPORT.md +299 -0
  52. package/.claude/skills/cfn-loop-orchestration/NORTH_STAR_EXECUTION_SUMMARY.md +403 -0
  53. package/.claude/skills/cfn-loop-orchestration/NORTH_STAR_INDEX.md +323 -0
  54. package/.claude/skills/cfn-loop-orchestration/SKILL.md +159 -48
  55. package/.claude/skills/cfn-loop-orchestration/SPAWN_AGENTS_IMPLEMENTATION.md +188 -0
  56. package/.claude/skills/cfn-loop-orchestration/TEST_COVERAGE_REPORT.md +335 -0
  57. package/.claude/skills/cfn-loop-orchestration/TEST_COVERAGE_SUMMARY.md +456 -0
  58. package/.claude/skills/cfn-loop-orchestration/TYPESCRIPT_INTEGRATION_REPORT.md +709 -0
  59. package/.claude/skills/cfn-loop-orchestration/TYPESCRIPT_INTEGRATION_SUMMARY.md +257 -0
  60. package/.claude/skills/cfn-loop-orchestration/VALIDATION_REPORT.md +572 -0
  61. package/.claude/skills/cfn-loop-orchestration/VALIDATION_SUMMARY.txt +196 -0
  62. package/.claude/skills/cfn-loop-orchestration/VALIDATOR_MODULE_GUIDE.md +526 -0
  63. package/.claude/skills/cfn-loop-orchestration/archive/legacy-bash/README.md +167 -0
  64. package/.claude/skills/cfn-loop-orchestration/archive/legacy-bash/orchestrate-enhanced.sh +548 -0
  65. package/.claude/skills/cfn-loop-orchestration/{orchestrate-wrapper.sh → archive/legacy-bash/orchestrate-wrapper.sh} +11 -1
  66. package/.claude/skills/cfn-loop-orchestration/archive/legacy-bash/orchestrate.sh +182 -0
  67. package/.claude/skills/cfn-loop-orchestration/e2e-validation-fixed.js +240 -0
  68. package/.claude/skills/cfn-loop-orchestration/e2e-validation.js +213 -0
  69. package/.claude/skills/cfn-loop-orchestration/package-lock.json +3 -0
  70. package/.claude/skills/cfn-loop-orchestration/package.json +4 -0
  71. package/.claude/skills/cfn-loop-orchestration/run-north-star-e2e.ts +210 -0
  72. package/.claude/skills/cfn-loop-orchestration/src/cli/orchestrator-cli.ts +396 -0
  73. package/.claude/skills/cfn-loop-orchestration/src/helpers/CONFIDENCE_AGGREGATOR.md +564 -0
  74. package/.claude/skills/cfn-loop-orchestration/src/helpers/CONFIDENCE_AGGREGATOR_QUICK_REF.md +241 -0
  75. package/.claude/skills/cfn-loop-orchestration/src/helpers/CONTEXT_INJECTOR_IMPLEMENTATION.md +375 -0
  76. package/.claude/skills/cfn-loop-orchestration/src/helpers/CONTEXT_INJECTOR_QUICK_REFERENCE.md +362 -0
  77. package/.claude/skills/cfn-loop-orchestration/src/helpers/CONTEXT_INJECTOR_README.md +307 -0
  78. package/.claude/skills/cfn-loop-orchestration/src/helpers/CONTEXT_INJECTOR_USAGE_GUIDE.md +508 -0
  79. package/.claude/skills/cfn-loop-orchestration/src/helpers/confidence-aggregator.ts +473 -0
  80. package/.claude/skills/cfn-loop-orchestration/src/helpers/consensus.ts +1 -1
  81. package/.claude/skills/cfn-loop-orchestration/src/helpers/context-injector.ts +349 -0
  82. package/.claude/skills/cfn-loop-orchestration/src/helpers/context-lookup.ts +486 -0
  83. package/.claude/skills/cfn-loop-orchestration/src/helpers/deliverable-verifier.ts +6 -2
  84. package/.claude/skills/cfn-loop-orchestration/src/helpers/gate-check.ts +1 -1
  85. package/.claude/skills/cfn-loop-orchestration/src/helpers/product-owner-decision.ts +316 -0
  86. package/.claude/skills/cfn-loop-orchestration/src/helpers/spawn-agents.ts +357 -0
  87. package/.claude/skills/cfn-loop-orchestration/src/helpers/validator.ts +276 -0
  88. package/.claude/skills/cfn-loop-orchestration/src/index.ts +2 -0
  89. package/.claude/skills/cfn-loop-orchestration/src/orchestrate.ts +743 -2
  90. package/.claude/skills/cfn-loop-orchestration/src/types.ts +56 -0
  91. package/.claude/skills/cfn-loop-orchestration/test-cli.sh +92 -0
  92. package/.claude/skills/cfn-loop-orchestration/test-typescript-integration.sh +442 -0
  93. package/.claude/skills/cfn-loop-orchestration/tests/agent-spawner.test.ts +124 -0
  94. package/.claude/skills/cfn-loop-orchestration/tests/confidence-aggregator.test.ts +604 -0
  95. package/.claude/skills/cfn-loop-orchestration/tests/context-injector.test.ts +561 -0
  96. package/.claude/skills/cfn-loop-orchestration/tests/context-lookup.test.ts +661 -0
  97. package/.claude/skills/cfn-loop-orchestration/tests/deliverable-verifier.test.ts +2 -2
  98. package/.claude/skills/cfn-loop-orchestration/tests/gate-check-edge-cases.test.ts +422 -0
  99. package/.claude/skills/cfn-loop-orchestration/tests/gate-checker.test.ts +276 -0
  100. package/.claude/skills/cfn-loop-orchestration/tests/logger.test.ts +291 -0
  101. package/.claude/skills/cfn-loop-orchestration/tests/north-star-e2e.test.ts +334 -0
  102. package/.claude/skills/cfn-loop-orchestration/tests/redis-coordinator.test.ts +321 -0
  103. package/.claude/skills/cfn-loop-orchestration/tests/spawn-agents.test.ts +284 -0
  104. package/.claude/skills/cfn-loop-orchestration/tests/validator.test.ts +643 -0
  105. package/.claude/skills/cfn-loop-validation/IMPLEMENTATION_SUMMARY.md +672 -0
  106. package/.claude/skills/cfn-loop-validation/INDEX.md +531 -0
  107. package/.claude/skills/cfn-loop-validation/README_TYPESCRIPT.md +454 -0
  108. package/.claude/skills/cfn-loop-validation/SKILL.md +48 -1
  109. package/.claude/skills/cfn-loop-validation/SKILL.md.backup +353 -0
  110. package/.claude/skills/cfn-loop-validation/SKILL_TYPESCRIPT.md +782 -0
  111. package/.claude/skills/cfn-loop-validation/VAPOR_DETECTION_EXAMPLES.md +598 -0
  112. package/.claude/skills/cfn-loop-validation/check-dependencies.sh +22 -0
  113. package/{claude-assets/skills/cfn-redis-coordination/check-dependencies.sh → .claude/skills/cfn-loop-validation/check-dependencies.sh.backup} +4 -5
  114. package/.claude/skills/cfn-loop-validation/detect-vapor.sh +59 -0
  115. package/.claude/skills/cfn-loop-validation/detect-vapor.sh.backup +37 -0
  116. package/.claude/skills/cfn-loop-validation/dist/.tsbuildinfo +1 -0
  117. package/.claude/skills/cfn-loop-validation/dist/cli/detect-vapor.d.ts +14 -0
  118. package/.claude/skills/cfn-loop-validation/dist/cli/detect-vapor.d.ts.map +1 -0
  119. package/.claude/skills/cfn-loop-validation/dist/cli/detect-vapor.js +185 -0
  120. package/.claude/skills/cfn-loop-validation/dist/cli/detect-vapor.js.map +1 -0
  121. package/.claude/skills/cfn-loop-validation/dist/cli/validate-deliverables.d.ts +14 -0
  122. package/.claude/skills/cfn-loop-validation/dist/cli/validate-deliverables.d.ts.map +1 -0
  123. package/.claude/skills/cfn-loop-validation/dist/cli/validate-deliverables.js +176 -0
  124. package/.claude/skills/cfn-loop-validation/dist/cli/validate-deliverables.js.map +1 -0
  125. package/.claude/skills/cfn-loop-validation/dist/cli/validate-gate.d.ts +19 -0
  126. package/.claude/skills/cfn-loop-validation/dist/cli/validate-gate.d.ts.map +1 -0
  127. package/.claude/skills/cfn-loop-validation/dist/cli/validate-gate.js +123 -0
  128. package/.claude/skills/cfn-loop-validation/dist/cli/validate-gate.js.map +1 -0
  129. package/.claude/skills/cfn-loop-validation/dist/types.d.ts +156 -0
  130. package/.claude/skills/cfn-loop-validation/dist/types.d.ts.map +1 -0
  131. package/.claude/skills/cfn-loop-validation/dist/types.js +66 -0
  132. package/.claude/skills/cfn-loop-validation/dist/types.js.map +1 -0
  133. package/.claude/skills/cfn-loop-validation/dist/validator.d.ts +85 -0
  134. package/.claude/skills/cfn-loop-validation/dist/validator.d.ts.map +1 -0
  135. package/.claude/skills/cfn-loop-validation/dist/validator.js +411 -0
  136. package/.claude/skills/cfn-loop-validation/dist/validator.js.map +1 -0
  137. package/.claude/skills/cfn-loop-validation/orchestrate-cfn-loop.sh +22 -0
  138. package/.claude/skills/cfn-loop-validation/orchestrate-cfn-loop.sh.backup +252 -0
  139. package/.claude/skills/cfn-loop-validation/package.json +93 -0
  140. package/.claude/skills/cfn-loop-validation/src/cli/detect-vapor.ts +177 -0
  141. package/.claude/skills/cfn-loop-validation/src/cli/validate-deliverables.ts +161 -0
  142. package/.claude/skills/cfn-loop-validation/src/cli/validate-gate.ts +139 -0
  143. package/.claude/skills/cfn-loop-validation/src/types.ts +215 -0
  144. package/.claude/skills/cfn-loop-validation/src/validator.ts +503 -0
  145. package/.claude/skills/cfn-loop-validation/tests/validator.test.ts +537 -0
  146. package/.claude/skills/{cfn-redis-coordination → cfn-loop-validation}/tsconfig.json +34 -31
  147. package/.claude/skills/cfn-loop-validation/validate-deliverables.sh +59 -0
  148. package/.claude/skills/cfn-loop-validation/validate-deliverables.sh.backup +37 -0
  149. package/.claude/skills/cfn-loop-validation/validate-gate.sh +63 -0
  150. package/.claude/skills/cfn-loop-validation/validate-gate.sh.backup +41 -0
  151. package/.claude/skills/cfn-loop-validation/validate-iteration.sh +22 -0
  152. package/.claude/skills/cfn-loop-validation/validate-iteration.sh.backup +134 -0
  153. package/.claude/skills/cfn-product-owner-decision/SKILL.md +479 -147
  154. package/.claude/skills/cfn-product-owner-decision/TYPESCRIPT_IMPLEMENTATION.md +653 -0
  155. package/.claude/skills/cfn-product-owner-decision/{execute-decision.sh → archive/legacy-bash/execute-decision.sh} +24 -2
  156. package/.claude/skills/pre-edit-backup/SKILL.md +324 -0
  157. package/.claude/skills/pre-edit-backup/SKILL.md.backup +277 -0
  158. package/.claude/skills/pre-edit-backup/backup.sh +22 -0
  159. package/.claude/skills/pre-edit-backup/backup.sh.backup +107 -0
  160. package/claude-assets/agents/cfn-dev-team/analysts/root-cause-analyst.md +2 -2
  161. package/claude-assets/agents/cfn-dev-team/architecture/base-template-generator.md +1 -1
  162. package/claude-assets/agents/cfn-dev-team/coordinators/cfn-frontend-coordinator.md +3 -2
  163. package/claude-assets/agents/cfn-dev-team/coordinators/consensus-builder.md +1 -0
  164. package/claude-assets/agents/cfn-dev-team/coordinators/handoff-coordinator.md +2 -1
  165. package/claude-assets/agents/cfn-dev-team/coordinators/multi-sprint-coordinator.md +1 -0
  166. package/claude-assets/agents/cfn-dev-team/dev-ops/devops-engineer.md +11 -1
  167. package/claude-assets/agents/cfn-dev-team/dev-ops/docker-specialist.md +58 -35
  168. package/claude-assets/agents/cfn-dev-team/dev-ops/github-commit-agent.md +2 -2
  169. package/claude-assets/agents/cfn-dev-team/dev-ops/kubernetes-specialist.md +47 -37
  170. package/claude-assets/agents/cfn-dev-team/developers/api-gateway-specialist.md +18 -18
  171. package/claude-assets/agents/cfn-dev-team/developers/backend-developer.md +40 -58
  172. package/claude-assets/agents/cfn-dev-team/developers/data/data-engineer.md +19 -21
  173. package/claude-assets/agents/cfn-dev-team/developers/database/database-architect.md +20 -29
  174. package/claude-assets/agents/cfn-dev-team/developers/frontend/mobile-dev.md +15 -19
  175. package/claude-assets/agents/cfn-dev-team/developers/frontend/react-frontend-engineer.md +15 -10
  176. package/claude-assets/agents/cfn-dev-team/developers/frontend/typescript-specialist.md +16 -11
  177. package/claude-assets/agents/cfn-dev-team/developers/frontend/ui-designer.md +16 -26
  178. package/claude-assets/agents/cfn-dev-team/developers/graphql-specialist.md +18 -22
  179. package/claude-assets/agents/cfn-dev-team/developers/rust-developer.md +17 -21
  180. package/claude-assets/agents/cfn-dev-team/documentation/pseudocode.md +1 -1
  181. package/claude-assets/agents/cfn-dev-team/product-owners/accessibility-advocate-persona.md +1 -1
  182. package/claude-assets/agents/cfn-dev-team/product-owners/cto-agent.md +1 -1
  183. package/claude-assets/agents/cfn-dev-team/product-owners/power-user-persona.md +1 -1
  184. package/claude-assets/agents/cfn-dev-team/product-owners/product-owner.md +1 -5
  185. package/claude-assets/agents/cfn-dev-team/reviewers/code-reviewer.md +20 -51
  186. package/claude-assets/agents/cfn-dev-team/reviewers/quality/code-quality-validator.md +22 -71
  187. package/claude-assets/agents/cfn-dev-team/reviewers/quality/perf-analyzer.md +21 -64
  188. package/claude-assets/agents/cfn-dev-team/reviewers/quality/performance-benchmarker.md +22 -67
  189. package/claude-assets/agents/cfn-dev-team/reviewers/quality/security-specialist.md +24 -68
  190. package/claude-assets/agents/cfn-dev-team/testers/api-testing-specialist.md +8 -36
  191. package/claude-assets/agents/cfn-dev-team/testers/chaos-engineering-specialist.md +9 -38
  192. package/claude-assets/agents/cfn-dev-team/testers/contract-tester.md +17 -55
  193. package/claude-assets/agents/cfn-dev-team/testers/e2e/playwright-tester.md +1 -1
  194. package/claude-assets/agents/cfn-dev-team/testers/integration-tester.md +18 -56
  195. package/claude-assets/agents/cfn-dev-team/testers/interaction-tester.md +9 -37
  196. package/claude-assets/agents/cfn-dev-team/testers/load-testing-specialist.md +18 -56
  197. package/claude-assets/agents/cfn-dev-team/testers/mutation-testing-specialist.md +18 -49
  198. package/claude-assets/agents/cfn-dev-team/testers/playwright-tester.md +8 -37
  199. package/claude-assets/agents/cfn-dev-team/testers/tester.md +7 -27
  200. package/claude-assets/agents/cfn-dev-team/testers/unit/tdd-london-unit-swarm.md +1 -1
  201. package/claude-assets/agents/cfn-dev-team/utility/agent-builder.md +11 -0
  202. package/claude-assets/agents/cfn-dev-team/utility/analyst.md +13 -29
  203. package/claude-assets/agents/cfn-dev-team/utility/claude-code-expert.md +1 -1
  204. package/claude-assets/agents/cfn-dev-team/utility/code-booster.md +13 -13
  205. package/claude-assets/agents/cfn-dev-team/utility/context-curator.md +7 -2
  206. package/claude-assets/agents/cfn-dev-team/utility/epic-creator.md +6 -11
  207. package/claude-assets/agents/cfn-dev-team/utility/memory-leak-specialist.md +121 -715
  208. package/claude-assets/agents/cfn-dev-team/utility/researcher.md +13 -22
  209. package/claude-assets/agents/cfn-dev-team/utility/z-ai-specialist.md +147 -573
  210. package/claude-assets/agents/custom/cfn-docker-expert.md +103 -0
  211. package/claude-assets/agents/custom/cfn-loops-cli-expert.md +438 -0
  212. package/claude-assets/agents/custom/cfn-redis-operations.md +529 -529
  213. package/claude-assets/agents/custom/cfn-system-expert.md +1 -1
  214. package/claude-assets/agents/custom/trigger-dev-expert.md +369 -0
  215. package/claude-assets/agents/docker-team/micro-sprint-planner.md +747 -747
  216. package/claude-assets/agents/project-only-agents/npm-package-specialist.md +1 -1
  217. package/claude-assets/cfn-extras/agents/cfn-v3-coordinator.md +517 -0
  218. package/claude-assets/cfn-extras/skills/GOOGLE_SHEETS_SKILLS_README.md +1 -1
  219. package/claude-assets/cfn-extras/skills/google-sheets-api-coordinator/SKILL.md +1 -1
  220. package/claude-assets/cfn-extras/skills/google-sheets-formula-builder/SKILL.md +1 -1
  221. package/claude-assets/cfn-extras/skills/google-sheets-progress/SKILL.md +1 -1
  222. package/claude-assets/commands/CFN_LOOP_FRONTEND.md +1 -1
  223. package/claude-assets/commands/cfn-loop-cli.md +214 -442
  224. package/claude-assets/commands/cfn-loop-frontend.md +1 -1
  225. package/claude-assets/commands/cfn-loop-task.md +2 -2
  226. package/claude-assets/commands/cfn-loop-trigger.md +114 -0
  227. package/claude-assets/commands/deprecated/cfn-loop.md +2 -2
  228. package/claude-assets/hooks/GIT-HOOKS-USAGE-EXAMPLES.md +116 -0
  229. package/claude-assets/hooks/README-GIT-HOOKS.md +443 -0
  230. package/claude-assets/hooks/SKILL.md +518 -0
  231. package/claude-assets/hooks/SKILL.md.backup +471 -0
  232. package/claude-assets/hooks/cfn-invoke-post-edit-ts.sh +100 -0
  233. package/claude-assets/hooks/cfn-invoke-post-edit-ts.sh.backup +78 -0
  234. package/claude-assets/hooks/cfn-invoke-post-edit.sh +53 -5
  235. package/claude-assets/hooks/cfn-invoke-post-edit.sh.backup +87 -0
  236. package/claude-assets/hooks/cfn-invoke-pre-edit-ts.sh +116 -0
  237. package/claude-assets/hooks/cfn-invoke-pre-edit-ts.sh.backup +94 -0
  238. package/claude-assets/hooks/cfn-invoke-pre-edit.sh +22 -0
  239. package/claude-assets/hooks/cfn-invoke-pre-edit.sh.backup +88 -0
  240. package/claude-assets/hooks/cfn-post-edit.config.json +9 -2
  241. package/claude-assets/hooks/install-git-hooks.sh +243 -0
  242. package/claude-assets/hooks/subagent-start.sh +98 -0
  243. package/claude-assets/hooks/subagent-stop.sh +93 -0
  244. package/claude-assets/hooks/validators/credential-scanner.sh +172 -0
  245. package/claude-assets/root-claude-distribute/CFN-CLAUDE.md +1 -1
  246. package/claude-assets/skills/cfn-agent-selection-with-fallback/DELIVERABLES.md +409 -0
  247. package/claude-assets/skills/cfn-agent-selection-with-fallback/IMPLEMENTATION_SUMMARY.md +396 -0
  248. package/claude-assets/skills/cfn-agent-selection-with-fallback/INTEGRATION_GUIDE.md +308 -0
  249. package/claude-assets/skills/cfn-agent-selection-with-fallback/QUICK_REFERENCE.md +239 -0
  250. package/claude-assets/skills/cfn-agent-selection-with-fallback/SKILL.md +107 -1
  251. package/claude-assets/skills/cfn-agent-selection-with-fallback/SKILL.md.backup +302 -0
  252. package/claude-assets/skills/cfn-agent-selection-with-fallback/TYPESCRIPT_MIGRATION.md +295 -0
  253. package/claude-assets/skills/cfn-agent-selection-with-fallback/dist/agent-selector.cjs +297 -0
  254. package/claude-assets/skills/cfn-agent-selection-with-fallback/dist/agent-selector.js +297 -0
  255. package/claude-assets/skills/cfn-agent-selection-with-fallback/dist/cli.cjs +96 -0
  256. package/claude-assets/skills/cfn-agent-selection-with-fallback/dist/cli.js +96 -0
  257. package/claude-assets/skills/cfn-agent-selection-with-fallback/select-agents-ts.sh +45 -0
  258. package/claude-assets/skills/cfn-agent-selection-with-fallback/select-agents-ts.sh.backup +23 -0
  259. package/claude-assets/skills/cfn-agent-selection-with-fallback/select-agents.sh +22 -0
  260. package/claude-assets/skills/cfn-agent-selection-with-fallback/select-agents.sh.backup +173 -0
  261. package/claude-assets/skills/cfn-agent-selection-with-fallback/src/agent-selector.test.ts +357 -0
  262. package/claude-assets/skills/cfn-agent-selection-with-fallback/src/agent-selector.ts +350 -0
  263. package/claude-assets/skills/cfn-agent-selection-with-fallback/src/cli.ts +74 -0
  264. package/claude-assets/skills/cfn-agent-selection-with-fallback/task-classifier.sh +22 -0
  265. package/claude-assets/skills/cfn-agent-selection-with-fallback/task-classifier.sh.backup +71 -0
  266. package/claude-assets/skills/cfn-agent-selection-with-fallback/tsconfig.json +18 -0
  267. package/claude-assets/skills/cfn-agent-spawning/SKILL.md +48 -1
  268. package/claude-assets/skills/cfn-agent-spawning/SKILL.md.backup +135 -0
  269. package/claude-assets/skills/cfn-agent-spawning/TYPESCRIPT_MIGRATION.md +567 -0
  270. package/claude-assets/skills/cfn-agent-spawning/check-dependencies.sh +22 -0
  271. package/claude-assets/skills/cfn-agent-spawning/check-dependencies.sh.backup +30 -0
  272. package/claude-assets/skills/cfn-agent-spawning/get-agent-provider-env.sh +22 -0
  273. package/claude-assets/skills/cfn-agent-spawning/get-agent-provider-env.sh.backup +127 -0
  274. package/claude-assets/skills/cfn-agent-spawning/parse-agent-provider.sh +22 -0
  275. package/claude-assets/skills/cfn-agent-spawning/parse-agent-provider.sh.backup +59 -0
  276. package/claude-assets/skills/cfn-agent-spawning/spawn-agent-wrapper.sh +63 -0
  277. package/claude-assets/skills/cfn-agent-spawning/spawn-agent-wrapper.sh.backup +41 -0
  278. package/claude-assets/skills/cfn-agent-spawning/spawn-agent.sh +26 -1
  279. package/claude-assets/skills/cfn-agent-spawning/spawn-templates.sh +22 -0
  280. package/claude-assets/skills/cfn-agent-spawning/spawn-templates.sh.backup +613 -0
  281. package/claude-assets/skills/cfn-agent-spawning/spawn-worker.sh +22 -0
  282. package/claude-assets/skills/cfn-agent-spawning/spawn-worker.sh.backup +176 -0
  283. package/claude-assets/skills/cfn-backlog-management/SKILL.md +1 -1
  284. package/claude-assets/skills/cfn-coordination/agent-completion.sh.backup +36 -0
  285. package/claude-assets/skills/cfn-coordination/coordination-signal.sh.backup +36 -0
  286. package/claude-assets/skills/cfn-coordination/coordination-wait.sh.backup +36 -0
  287. package/claude-assets/skills/cfn-dependency-ingestion/README.md +101 -0
  288. package/claude-assets/skills/cfn-dependency-ingestion/SKILL.md +397 -0
  289. package/claude-assets/skills/cfn-dependency-ingestion/build.sh +23 -0
  290. package/claude-assets/skills/cfn-dependency-ingestion/dist/ingest-dependencies.js +478 -0
  291. package/claude-assets/skills/cfn-dependency-ingestion/ingest-dependencies.sh +295 -0
  292. package/claude-assets/skills/cfn-dependency-ingestion/ingest.sh +237 -0
  293. package/claude-assets/skills/cfn-dependency-ingestion/manifests/cli-mode-dependencies.txt +73 -0
  294. package/claude-assets/skills/cfn-dependency-ingestion/manifests/shared-dependencies.txt +57 -0
  295. package/claude-assets/skills/cfn-dependency-ingestion/manifests/trigger-dev-dependencies.txt +82 -0
  296. package/claude-assets/skills/cfn-dependency-ingestion/manifests/trigger-mode-dependencies.txt +80 -0
  297. package/claude-assets/skills/cfn-dependency-ingestion/src/ingest-dependencies.ts +563 -0
  298. package/claude-assets/skills/cfn-environment-sanitization/sanitize-environment.sh +14 -4
  299. package/claude-assets/skills/cfn-loop-orchestration/.backups/unknown/1763619700_33aff4a69b99159e4e849107ebc4d09f/metadata.json +8 -0
  300. package/claude-assets/skills/cfn-loop-orchestration/.backups/unknown/1763619700_33aff4a69b99159e4e849107ebc4d09f/original +271 -0
  301. package/claude-assets/skills/cfn-loop-orchestration/.backups/unknown/1763619700_33aff4a69b99159e4e849107ebc4d09f/revert.sh +7 -0
  302. package/claude-assets/skills/cfn-loop-orchestration/.backups/unknown/1763671642_06496e8c399a79db08167cc00ed4b31e/metadata.json +8 -0
  303. package/claude-assets/skills/cfn-loop-orchestration/.backups/unknown/1763671642_06496e8c399a79db08167cc00ed4b31e/original +325 -0
  304. package/claude-assets/skills/cfn-loop-orchestration/.backups/unknown/1763671642_06496e8c399a79db08167cc00ed4b31e/revert.sh +7 -0
  305. package/claude-assets/skills/cfn-loop-orchestration/CLI_IMPLEMENTATION_SUMMARY.md +330 -0
  306. package/claude-assets/skills/cfn-loop-orchestration/CONFIGURATION_IMPROVEMENTS.md +318 -0
  307. package/claude-assets/skills/cfn-loop-orchestration/CONTEXT_LOOKUP_MIGRATION.md +308 -0
  308. package/claude-assets/skills/cfn-loop-orchestration/CONTEXT_LOOKUP_QUICK_START.md +378 -0
  309. package/claude-assets/skills/cfn-loop-orchestration/E2E_VALIDATION_REPORT.md +262 -0
  310. package/claude-assets/skills/cfn-loop-orchestration/IMPLEMENTATION_SUMMARY.md +319 -519
  311. package/claude-assets/skills/cfn-loop-orchestration/NORTH_STAR_E2E_REPORT.md +299 -0
  312. package/claude-assets/skills/cfn-loop-orchestration/NORTH_STAR_EXECUTION_SUMMARY.md +403 -0
  313. package/claude-assets/skills/cfn-loop-orchestration/NORTH_STAR_INDEX.md +323 -0
  314. package/claude-assets/skills/cfn-loop-orchestration/SKILL.md +159 -48
  315. package/claude-assets/skills/cfn-loop-orchestration/SPAWN_AGENTS_IMPLEMENTATION.md +188 -0
  316. package/claude-assets/skills/cfn-loop-orchestration/TEST_COVERAGE_REPORT.md +335 -0
  317. package/claude-assets/skills/cfn-loop-orchestration/TEST_COVERAGE_SUMMARY.md +456 -0
  318. package/claude-assets/skills/cfn-loop-orchestration/TYPESCRIPT_INTEGRATION_REPORT.md +709 -0
  319. package/claude-assets/skills/cfn-loop-orchestration/TYPESCRIPT_INTEGRATION_SUMMARY.md +257 -0
  320. package/claude-assets/skills/cfn-loop-orchestration/VALIDATION_REPORT.md +572 -0
  321. package/claude-assets/skills/cfn-loop-orchestration/VALIDATION_SUMMARY.txt +196 -0
  322. package/claude-assets/skills/cfn-loop-orchestration/VALIDATOR_MODULE_GUIDE.md +526 -0
  323. package/claude-assets/skills/cfn-loop-orchestration/archive/legacy-bash/README.md +167 -0
  324. package/claude-assets/skills/cfn-loop-orchestration/archive/legacy-bash/orchestrate-enhanced.sh +548 -0
  325. package/claude-assets/skills/cfn-loop-orchestration/{orchestrate-wrapper.sh → archive/legacy-bash/orchestrate-wrapper.sh} +11 -1
  326. package/claude-assets/skills/cfn-loop-orchestration/archive/legacy-bash/orchestrate.sh +182 -0
  327. package/claude-assets/skills/cfn-loop-orchestration/e2e-validation-fixed.js +240 -0
  328. package/claude-assets/skills/cfn-loop-orchestration/e2e-validation.js +213 -0
  329. package/claude-assets/skills/cfn-loop-orchestration/package-lock.json +3 -0
  330. package/claude-assets/skills/cfn-loop-orchestration/package.json +4 -0
  331. package/claude-assets/skills/cfn-loop-orchestration/run-north-star-e2e.ts +210 -0
  332. package/claude-assets/skills/cfn-loop-orchestration/src/cli/orchestrator-cli.ts +396 -0
  333. package/claude-assets/skills/cfn-loop-orchestration/src/helpers/CONFIDENCE_AGGREGATOR.md +564 -0
  334. package/claude-assets/skills/cfn-loop-orchestration/src/helpers/CONFIDENCE_AGGREGATOR_QUICK_REF.md +241 -0
  335. package/claude-assets/skills/cfn-loop-orchestration/src/helpers/CONTEXT_INJECTOR_IMPLEMENTATION.md +375 -0
  336. package/claude-assets/skills/cfn-loop-orchestration/src/helpers/CONTEXT_INJECTOR_QUICK_REFERENCE.md +362 -0
  337. package/claude-assets/skills/cfn-loop-orchestration/src/helpers/CONTEXT_INJECTOR_README.md +307 -0
  338. package/claude-assets/skills/cfn-loop-orchestration/src/helpers/CONTEXT_INJECTOR_USAGE_GUIDE.md +508 -0
  339. package/claude-assets/skills/cfn-loop-orchestration/src/helpers/confidence-aggregator.ts +473 -0
  340. package/claude-assets/skills/cfn-loop-orchestration/src/helpers/consensus.ts +1 -1
  341. package/claude-assets/skills/cfn-loop-orchestration/src/helpers/context-injector.ts +349 -0
  342. package/claude-assets/skills/cfn-loop-orchestration/src/helpers/context-lookup.ts +486 -0
  343. package/claude-assets/skills/cfn-loop-orchestration/src/helpers/deliverable-verifier.ts +6 -2
  344. package/claude-assets/skills/cfn-loop-orchestration/src/helpers/gate-check.ts +1 -1
  345. package/claude-assets/skills/cfn-loop-orchestration/src/helpers/product-owner-decision.ts +316 -0
  346. package/claude-assets/skills/cfn-loop-orchestration/src/helpers/spawn-agents.ts +357 -0
  347. package/claude-assets/skills/cfn-loop-orchestration/src/helpers/validator.ts +276 -0
  348. package/claude-assets/skills/cfn-loop-orchestration/src/index.ts +2 -0
  349. package/claude-assets/skills/cfn-loop-orchestration/src/orchestrate.ts +743 -2
  350. package/claude-assets/skills/cfn-loop-orchestration/src/types.ts +56 -0
  351. package/claude-assets/skills/cfn-loop-orchestration/test-cli.sh +92 -0
  352. package/claude-assets/skills/cfn-loop-orchestration/test-typescript-integration.sh +442 -0
  353. package/claude-assets/skills/cfn-loop-orchestration/tests/agent-spawner.test.ts +124 -0
  354. package/claude-assets/skills/cfn-loop-orchestration/tests/confidence-aggregator.test.ts +604 -0
  355. package/claude-assets/skills/cfn-loop-orchestration/tests/context-injector.test.ts +561 -0
  356. package/claude-assets/skills/cfn-loop-orchestration/tests/context-lookup.test.ts +661 -0
  357. package/claude-assets/skills/cfn-loop-orchestration/tests/deliverable-verifier.test.ts +2 -2
  358. package/claude-assets/skills/cfn-loop-orchestration/tests/gate-check-edge-cases.test.ts +422 -0
  359. package/claude-assets/skills/cfn-loop-orchestration/tests/gate-checker.test.ts +276 -0
  360. package/claude-assets/skills/cfn-loop-orchestration/tests/logger.test.ts +291 -0
  361. package/claude-assets/skills/cfn-loop-orchestration/tests/north-star-e2e.test.ts +334 -0
  362. package/claude-assets/skills/cfn-loop-orchestration/tests/redis-coordinator.test.ts +321 -0
  363. package/claude-assets/skills/cfn-loop-orchestration/tests/spawn-agents.test.ts +284 -0
  364. package/claude-assets/skills/cfn-loop-orchestration/tests/validator.test.ts +643 -0
  365. package/claude-assets/skills/cfn-loop-output-processing/.eslintrc.json +33 -0
  366. package/claude-assets/skills/cfn-loop-output-processing/DELIVERY_SUMMARY.txt +462 -0
  367. package/claude-assets/skills/cfn-loop-output-processing/DEPRECATION_NOTICE.md +183 -0
  368. package/claude-assets/skills/cfn-loop-output-processing/EXAMPLES.md +609 -0
  369. package/claude-assets/skills/cfn-loop-output-processing/IMPLEMENTATION_SUMMARY.md +418 -0
  370. package/claude-assets/skills/cfn-loop-output-processing/INDEX.md +531 -0
  371. package/claude-assets/skills/cfn-loop-output-processing/MIGRATION.md +362 -0
  372. package/claude-assets/skills/cfn-loop-output-processing/README.md +114 -0
  373. package/claude-assets/skills/cfn-loop-output-processing/SKILL.md +633 -0
  374. package/{.claude/skills/cfn-docker-redis-coordination → claude-assets/skills/cfn-loop-output-processing}/jest.config.js +7 -15
  375. package/claude-assets/skills/cfn-loop-output-processing/package.json +50 -0
  376. package/claude-assets/skills/cfn-loop-output-processing/src/cli/process-loop2.ts +195 -0
  377. package/claude-assets/skills/cfn-loop-output-processing/src/cli/process-loop3.ts +157 -0
  378. package/claude-assets/skills/cfn-loop-output-processing/src/output-processor.ts +632 -0
  379. package/claude-assets/skills/cfn-loop-output-processing/tests/output-processor.test.ts +617 -0
  380. package/claude-assets/skills/{cfn-docker-redis-coordination → cfn-loop-output-processing}/tsconfig.json +16 -7
  381. package/claude-assets/skills/cfn-loop-validation/IMPLEMENTATION_SUMMARY.md +672 -0
  382. package/claude-assets/skills/cfn-loop-validation/INDEX.md +531 -0
  383. package/claude-assets/skills/cfn-loop-validation/README_TYPESCRIPT.md +454 -0
  384. package/claude-assets/skills/cfn-loop-validation/SKILL.md +48 -1
  385. package/claude-assets/skills/cfn-loop-validation/SKILL.md.backup +353 -0
  386. package/claude-assets/skills/cfn-loop-validation/SKILL_TYPESCRIPT.md +782 -0
  387. package/claude-assets/skills/cfn-loop-validation/VAPOR_DETECTION_EXAMPLES.md +598 -0
  388. package/claude-assets/skills/cfn-loop-validation/check-dependencies.sh +22 -0
  389. package/claude-assets/skills/cfn-loop-validation/check-dependencies.sh.backup +31 -0
  390. package/claude-assets/skills/cfn-loop-validation/detect-vapor.sh +59 -0
  391. package/claude-assets/skills/cfn-loop-validation/detect-vapor.sh.backup +37 -0
  392. package/claude-assets/skills/cfn-loop-validation/dist/.tsbuildinfo +1 -0
  393. package/claude-assets/skills/cfn-loop-validation/dist/cli/detect-vapor.d.ts +14 -0
  394. package/claude-assets/skills/cfn-loop-validation/dist/cli/detect-vapor.d.ts.map +1 -0
  395. package/claude-assets/skills/cfn-loop-validation/dist/cli/detect-vapor.js +185 -0
  396. package/claude-assets/skills/cfn-loop-validation/dist/cli/detect-vapor.js.map +1 -0
  397. package/claude-assets/skills/cfn-loop-validation/dist/cli/validate-deliverables.d.ts +14 -0
  398. package/claude-assets/skills/cfn-loop-validation/dist/cli/validate-deliverables.d.ts.map +1 -0
  399. package/claude-assets/skills/cfn-loop-validation/dist/cli/validate-deliverables.js +176 -0
  400. package/claude-assets/skills/cfn-loop-validation/dist/cli/validate-deliverables.js.map +1 -0
  401. package/claude-assets/skills/cfn-loop-validation/dist/cli/validate-gate.d.ts +19 -0
  402. package/claude-assets/skills/cfn-loop-validation/dist/cli/validate-gate.d.ts.map +1 -0
  403. package/claude-assets/skills/cfn-loop-validation/dist/cli/validate-gate.js +123 -0
  404. package/claude-assets/skills/cfn-loop-validation/dist/cli/validate-gate.js.map +1 -0
  405. package/claude-assets/skills/cfn-loop-validation/dist/types.d.ts +156 -0
  406. package/claude-assets/skills/cfn-loop-validation/dist/types.d.ts.map +1 -0
  407. package/claude-assets/skills/cfn-loop-validation/dist/types.js +66 -0
  408. package/claude-assets/skills/cfn-loop-validation/dist/types.js.map +1 -0
  409. package/claude-assets/skills/cfn-loop-validation/dist/validator.d.ts +85 -0
  410. package/claude-assets/skills/cfn-loop-validation/dist/validator.d.ts.map +1 -0
  411. package/claude-assets/skills/cfn-loop-validation/dist/validator.js +411 -0
  412. package/claude-assets/skills/cfn-loop-validation/dist/validator.js.map +1 -0
  413. package/claude-assets/skills/cfn-loop-validation/orchestrate-cfn-loop.sh +22 -0
  414. package/claude-assets/skills/cfn-loop-validation/orchestrate-cfn-loop.sh.backup +252 -0
  415. package/claude-assets/skills/cfn-loop-validation/package.json +93 -0
  416. package/claude-assets/skills/cfn-loop-validation/src/cli/detect-vapor.ts +177 -0
  417. package/claude-assets/skills/cfn-loop-validation/src/cli/validate-deliverables.ts +161 -0
  418. package/claude-assets/skills/cfn-loop-validation/src/cli/validate-gate.ts +139 -0
  419. package/claude-assets/skills/cfn-loop-validation/src/types.ts +215 -0
  420. package/claude-assets/skills/cfn-loop-validation/src/validator.ts +503 -0
  421. package/claude-assets/skills/cfn-loop-validation/tests/validator.test.ts +537 -0
  422. package/claude-assets/skills/{cfn-redis-coordination → cfn-loop-validation}/tsconfig.json +34 -31
  423. package/claude-assets/skills/cfn-loop-validation/validate-deliverables.sh +59 -0
  424. package/claude-assets/skills/cfn-loop-validation/validate-deliverables.sh.backup +37 -0
  425. package/claude-assets/skills/cfn-loop-validation/validate-gate.sh +63 -0
  426. package/claude-assets/skills/cfn-loop-validation/validate-gate.sh.backup +41 -0
  427. package/claude-assets/skills/cfn-loop-validation/validate-iteration.sh +22 -0
  428. package/claude-assets/skills/cfn-loop-validation/validate-iteration.sh.backup +134 -0
  429. package/claude-assets/skills/cfn-product-owner-decision/SKILL.md +479 -147
  430. package/claude-assets/skills/cfn-product-owner-decision/TYPESCRIPT_IMPLEMENTATION.md +653 -0
  431. package/claude-assets/skills/cfn-product-owner-decision/{execute-decision.sh → archive/legacy-bash/execute-decision.sh} +24 -2
  432. package/claude-assets/skills/cfn-provider-routing/README.md +129 -0
  433. package/claude-assets/skills/cfn-provider-routing/SKILL.md +215 -0
  434. package/claude-assets/skills/cfn-provider-routing/resolve-provider-model.ts +223 -0
  435. package/claude-assets/skills/docker-build/build.sh +1 -1
  436. package/claude-assets/skills/pre-edit-backup/SKILL.md +324 -0
  437. package/claude-assets/skills/pre-edit-backup/SKILL.md.backup +277 -0
  438. package/claude-assets/skills/pre-edit-backup/backup.sh +22 -0
  439. package/claude-assets/skills/pre-edit-backup/backup.sh.backup +107 -0
  440. package/dist/agent/skill-mcp-selector.js +2 -1
  441. package/dist/agent/skill-mcp-selector.js.map +1 -1
  442. package/dist/api/auth-endpoints.js +415 -0
  443. package/dist/api/auth-endpoints.js.map +1 -0
  444. package/dist/api/task-endpoints.js +562 -0
  445. package/dist/api/task-endpoints.js.map +1 -0
  446. package/dist/backend/server.js +418 -0
  447. package/dist/backend/server.js.map +1 -0
  448. package/dist/cfn-loop/product-owner/decision-parser.js +356 -0
  449. package/dist/cfn-loop/product-owner/decision-parser.js.map +1 -0
  450. package/dist/cfn-loop/product-owner/index.js +1 -0
  451. package/dist/cfn-loop/product-owner/index.js.map +1 -1
  452. package/dist/cli/agent-command.js +1 -1
  453. package/dist/cli/agent-command.js.map +1 -1
  454. package/dist/cli/agent-completion.js +273 -0
  455. package/dist/cli/agent-completion.js.map +1 -0
  456. package/dist/cli/agent-executor.js +470 -26
  457. package/dist/cli/agent-executor.js.map +1 -1
  458. package/dist/cli/agent-prompt-builder.js +83 -48
  459. package/dist/cli/agent-prompt-builder.js.map +1 -1
  460. package/dist/cli/agent-spawn.js +7 -4
  461. package/dist/cli/agent-spawn.js.map +1 -1
  462. package/dist/cli/agent-spawner.js +546 -0
  463. package/dist/cli/agent-spawner.js.map +1 -0
  464. package/dist/cli/agent-token-manager.js +2 -1
  465. package/dist/cli/agent-token-manager.js.map +1 -1
  466. package/dist/cli/anthropic-client.js +127 -14
  467. package/dist/cli/anthropic-client.js.map +1 -1
  468. package/dist/cli/cfn-context.js +2 -1
  469. package/dist/cli/cfn-context.js.map +1 -1
  470. package/dist/cli/cfn-metrics.js +2 -1
  471. package/dist/cli/cfn-metrics.js.map +1 -1
  472. package/dist/cli/cfn-redis.js +2 -1
  473. package/dist/cli/cfn-redis.js.map +1 -1
  474. package/dist/cli/cli-agent-context.js +2 -0
  475. package/dist/cli/cli-agent-context.js.map +1 -1
  476. package/dist/cli/config-manager.js +90 -356
  477. package/dist/cli/config-manager.js.map +1 -1
  478. package/dist/cli/conversation-fork-cleanup.js +2 -1
  479. package/dist/cli/conversation-fork-cleanup.js.map +1 -1
  480. package/dist/cli/conversation-fork.js +2 -1
  481. package/dist/cli/conversation-fork.js.map +1 -1
  482. package/dist/cli/coordination/agent-messaging.js +415 -0
  483. package/dist/cli/coordination/agent-messaging.js.map +1 -0
  484. package/dist/cli/coordination/wait-for-threshold.js +232 -0
  485. package/dist/cli/coordination/wait-for-threshold.js.map +1 -0
  486. package/dist/cli/index.js +11 -0
  487. package/dist/cli/index.js.map +1 -1
  488. package/dist/cli/iteration-history.js +2 -1
  489. package/dist/cli/iteration-history.js.map +1 -1
  490. package/dist/cli/parse-decision-cli.js +268 -0
  491. package/dist/cli/parse-decision-cli.js.map +1 -0
  492. package/dist/cli/post-edit-hook.js +83 -0
  493. package/dist/cli/post-edit-hook.js.map +1 -0
  494. package/dist/cli/pre-edit-hook.js +77 -0
  495. package/dist/cli/pre-edit-hook.js.map +1 -0
  496. package/dist/cli/process-lifecycle.js +5 -1
  497. package/dist/cli/process-lifecycle.js.map +1 -1
  498. package/dist/cli/spawn-agent-cli.js +244 -0
  499. package/dist/cli/spawn-agent-cli.js.map +1 -0
  500. package/dist/coordination/coordination-wrapper.js +383 -0
  501. package/dist/coordination/coordination-wrapper.js.map +1 -0
  502. package/dist/coordination/redis-waiting-mode.js +4 -0
  503. package/dist/coordination/redis-waiting-mode.js.map +1 -1
  504. package/dist/coordination/store-success-criteria.js +68 -0
  505. package/dist/coordination/store-success-criteria.js.map +1 -0
  506. package/dist/coordination/store-task-context.js +65 -0
  507. package/dist/coordination/store-task-context.js.map +1 -0
  508. package/dist/hooks/backup-manager.js +273 -0
  509. package/dist/hooks/backup-manager.js.map +1 -0
  510. package/dist/hooks/post-edit-validator.js +388 -0
  511. package/dist/hooks/post-edit-validator.js.map +1 -0
  512. package/dist/integration/index.js +19 -0
  513. package/dist/integration/index.js.map +1 -0
  514. package/dist/integration/task-mode-adapter.js +297 -0
  515. package/dist/integration/task-mode-adapter.js.map +1 -0
  516. package/dist/integration/trigger-dev-client.js +253 -0
  517. package/dist/integration/trigger-dev-client.js.map +1 -0
  518. package/dist/integration/trigger-dev-webhooks.js +362 -0
  519. package/dist/integration/trigger-dev-webhooks.js.map +1 -0
  520. package/dist/lib/artifact-registry.js +4 -0
  521. package/dist/lib/artifact-registry.js.map +1 -1
  522. package/dist/lib/connection-pool.js +390 -0
  523. package/dist/lib/connection-pool.js.map +1 -0
  524. package/dist/lib/environment-contract.js +258 -0
  525. package/dist/lib/environment-contract.js.map +1 -0
  526. package/dist/lib/path-validator.js +14 -5
  527. package/dist/lib/path-validator.js.map +1 -1
  528. package/dist/lib/query-optimizer.js +388 -0
  529. package/dist/lib/query-optimizer.js.map +1 -0
  530. package/dist/lib/redis-queue-manager.js +5 -1
  531. package/dist/lib/redis-queue-manager.js.map +1 -1
  532. package/dist/lib/result-cache.js +285 -0
  533. package/dist/lib/result-cache.js.map +1 -0
  534. package/dist/mcp/auth-middleware.js +2 -1
  535. package/dist/mcp/auth-middleware.js.map +1 -1
  536. package/dist/mcp/playwright-mcp-server-auth.js +2 -1
  537. package/dist/mcp/playwright-mcp-server-auth.js.map +1 -1
  538. package/dist/middleware/authentication.js +317 -0
  539. package/dist/middleware/authentication.js.map +1 -0
  540. package/dist/services/authentication.js +669 -0
  541. package/dist/services/authentication.js.map +1 -0
  542. package/dist/services/session-management.js +436 -0
  543. package/dist/services/session-management.js.map +1 -0
  544. package/dist/services/skill-deployment.js +8 -6
  545. package/dist/services/skill-deployment.js.map +1 -1
  546. package/dist/services/user-service.js +710 -0
  547. package/dist/services/user-service.js.map +1 -0
  548. package/dist/types/trigger-dev-events.d.js +10 -0
  549. package/dist/types/trigger-dev-events.d.js.map +1 -0
  550. package/docs/README.md +240 -0
  551. package/package.json +15 -4
  552. package/scripts/build-agent-image.sh +1 -1
  553. package/scripts/compare-workflow-performance.sh +556 -0
  554. package/scripts/cost-allocation-tracker.sh +632 -0
  555. package/scripts/docker-rebuild-all-agents.sh +2 -2
  556. package/scripts/migrate-to-optimized-workflows.sh +438 -0
  557. package/scripts/organize-docs.sh +338 -0
  558. package/scripts/reorganize-tests.sh +280 -0
  559. package/scripts/trigger-dev-setup.sh +279 -0
  560. package/tests/README.md +45 -0
  561. package/.claude/commands/cost-savings-status.md +0 -34
  562. package/.claude/commands/metrics-summary.md +0 -58
  563. package/.claude/skills/cfn-docker-redis-coordination/MIGRATION_SUMMARY.md +0 -348
  564. package/.claude/skills/cfn-docker-redis-coordination/README.md +0 -294
  565. package/.claude/skills/cfn-docker-redis-coordination/SKILL.md +0 -435
  566. package/.claude/skills/cfn-docker-redis-coordination/coordinate.sh +0 -650
  567. package/.claude/skills/cfn-docker-redis-coordination/coordinate.sh.backup-1763145142 +0 -641
  568. package/.claude/skills/cfn-docker-redis-coordination/package-lock.json +0 -5259
  569. package/.claude/skills/cfn-docker-redis-coordination/package.json +0 -40
  570. package/.claude/skills/cfn-docker-redis-coordination/src/coordinator.ts +0 -801
  571. package/.claude/skills/cfn-docker-redis-coordination/src/index.ts +0 -42
  572. package/.claude/skills/cfn-docker-redis-coordination/src/types.ts +0 -351
  573. package/.claude/skills/cfn-docker-redis-coordination/tests/coordinator.test.ts +0 -1464
  574. package/.claude/skills/cfn-docker-redis-coordination/tsconfig.json +0 -30
  575. package/.claude/skills/cfn-loop-orchestration/helpers/auto-tune-timeouts.sh +0 -228
  576. package/.claude/skills/cfn-loop-orchestration/helpers/consensus-ts.sh +0 -104
  577. package/.claude/skills/cfn-loop-orchestration/helpers/consensus.sh +0 -94
  578. package/.claude/skills/cfn-loop-orchestration/helpers/context-injection.sh +0 -142
  579. package/.claude/skills/cfn-loop-orchestration/helpers/context-lookup.sh +0 -359
  580. package/.claude/skills/cfn-loop-orchestration/helpers/deliverable-verifier-ts.sh +0 -123
  581. package/.claude/skills/cfn-loop-orchestration/helpers/deliverable-verifier.sh +0 -71
  582. package/.claude/skills/cfn-loop-orchestration/helpers/gate-check.sh +0 -56
  583. package/.claude/skills/cfn-loop-orchestration/helpers/iteration-manager-ts.sh +0 -89
  584. package/.claude/skills/cfn-loop-orchestration/helpers/iteration-manager.sh +0 -87
  585. package/.claude/skills/cfn-loop-orchestration/helpers/orchestrate-ts.sh +0 -104
  586. package/.claude/skills/cfn-loop-orchestration/helpers/parse-test-results.sh +0 -56
  587. package/.claude/skills/cfn-loop-orchestration/helpers/spawn-agents.sh +0 -290
  588. package/.claude/skills/cfn-loop-orchestration/helpers/timeout-calculator-ts.sh +0 -47
  589. package/.claude/skills/cfn-loop-orchestration/helpers/timeout-calculator.sh +0 -51
  590. package/.claude/skills/cfn-loop-orchestration/orchestrate.sh +0 -1345
  591. package/.claude/skills/cfn-redis-coordination/AGENT_LOGGING.md +0 -280
  592. package/.claude/skills/cfn-redis-coordination/BZPOPMIN_FIX_SUMMARY.md +0 -209
  593. package/.claude/skills/cfn-redis-coordination/CENTRALIZED_REDIS_WRAPPER.md +0 -319
  594. package/.claude/skills/cfn-redis-coordination/agent-log.sh.bak +0 -124
  595. package/.claude/skills/cfn-redis-coordination/config.json +0 -61
  596. package/.claude/skills/cfn-redis-coordination/demos/phase4-wake-queue-test-report.md +0 -82
  597. package/.claude/skills/cfn-redis-coordination/demos/test-bzpopmin-fix.sh +0 -274
  598. package/.claude/skills/cfn-redis-coordination/demos/test-cancel-swarm.sh +0 -0
  599. package/.claude/skills/cfn-redis-coordination/docs/migration/PHASE_3_REDIS_COORDINATION_COMPLETION_REPORT.md +0 -553
  600. package/.claude/skills/cfn-redis-coordination/jest.config.js +0 -23
  601. package/.claude/skills/cfn-redis-coordination/package-lock.json +0 -5272
  602. package/.claude/skills/cfn-redis-coordination/package.json +0 -45
  603. package/.claude/skills/cfn-redis-coordination/src/agent-logger.ts +0 -446
  604. package/.claude/skills/cfn-redis-coordination/src/agent-recovery.ts +0 -454
  605. package/.claude/skills/cfn-redis-coordination/src/completion-reporter.ts +0 -396
  606. package/.claude/skills/cfn-redis-coordination/src/context-manager.ts +0 -327
  607. package/.claude/skills/cfn-redis-coordination/src/index.ts +0 -82
  608. package/.claude/skills/cfn-redis-coordination/src/mode-detector.ts +0 -155
  609. package/.claude/skills/cfn-redis-coordination/src/redis/redis-client.ts +0 -305
  610. package/.claude/skills/cfn-redis-coordination/src/redis/redis-functions.ts +0 -283
  611. package/.claude/skills/cfn-redis-coordination/src/redis-client.ts +0 -654
  612. package/.claude/skills/cfn-redis-coordination/src/result-collector.ts +0 -437
  613. package/.claude/skills/cfn-redis-coordination/src/swarm-manager.ts +0 -494
  614. package/.claude/skills/cfn-redis-coordination/src/task-analyzer.ts +0 -404
  615. package/.claude/skills/cfn-redis-coordination/src/task-executor.ts +0 -423
  616. package/.claude/skills/cfn-redis-coordination/src/types.ts +0 -235
  617. package/.claude/skills/cfn-redis-coordination/src/waiting-coordinator.ts +0 -587
  618. package/.claude/skills/cfn-redis-coordination/store-success-criteria.sh +0 -85
  619. package/.claude/skills/cfn-redis-coordination/test-connection-attempts.js +0 -70
  620. package/.claude/skills/cfn-redis-coordination/test-mode-simple.js +0 -121
  621. package/.claude/skills/cfn-redis-coordination/test-redis-check.js +0 -84
  622. package/.claude/skills/cfn-redis-coordination/test-task-mode-redis.cjs +0 -391
  623. package/.claude/skills/cfn-redis-coordination/tests/coordination.test.ts +0 -788
  624. package/.claude/skills/cfn-redis-coordination/update-all-scripts.sh +0 -67
  625. package/claude-assets/agents/cfn-dev-team/coordinators/cfn-v3-coordinator.md +0 -980
  626. package/claude-assets/agents/cfn-dev-team/dev-ops/monitoring-specialist.md +0 -759
  627. package/claude-assets/agents/custom/test-mcp-access.md +0 -24
  628. package/claude-assets/agents/typescript-specialist.md +0 -280
  629. package/claude-assets/commands/cost-savings-status.md +0 -34
  630. package/claude-assets/commands/metrics-summary.md +0 -58
  631. package/claude-assets/skills/cfn-docker-redis-coordination/MIGRATION_SUMMARY.md +0 -348
  632. package/claude-assets/skills/cfn-docker-redis-coordination/README.md +0 -294
  633. package/claude-assets/skills/cfn-docker-redis-coordination/SKILL.md +0 -435
  634. package/claude-assets/skills/cfn-docker-redis-coordination/coordinate.sh +0 -650
  635. package/claude-assets/skills/cfn-docker-redis-coordination/coordinate.sh.backup-1763145142 +0 -641
  636. package/claude-assets/skills/cfn-docker-redis-coordination/jest.config.js +0 -37
  637. package/claude-assets/skills/cfn-docker-redis-coordination/package-lock.json +0 -5259
  638. package/claude-assets/skills/cfn-docker-redis-coordination/package.json +0 -40
  639. package/claude-assets/skills/cfn-docker-redis-coordination/src/coordinator.ts +0 -801
  640. package/claude-assets/skills/cfn-docker-redis-coordination/src/index.ts +0 -42
  641. package/claude-assets/skills/cfn-docker-redis-coordination/src/types.ts +0 -351
  642. package/claude-assets/skills/cfn-docker-redis-coordination/tests/coordinator.test.ts +0 -1464
  643. package/claude-assets/skills/cfn-loop-orchestration/helpers/auto-tune-timeouts.sh +0 -228
  644. package/claude-assets/skills/cfn-loop-orchestration/helpers/consensus-ts.sh +0 -104
  645. package/claude-assets/skills/cfn-loop-orchestration/helpers/consensus.sh +0 -94
  646. package/claude-assets/skills/cfn-loop-orchestration/helpers/context-injection.sh +0 -142
  647. package/claude-assets/skills/cfn-loop-orchestration/helpers/context-lookup.sh +0 -359
  648. package/claude-assets/skills/cfn-loop-orchestration/helpers/deliverable-verifier-ts.sh +0 -123
  649. package/claude-assets/skills/cfn-loop-orchestration/helpers/deliverable-verifier.sh +0 -71
  650. package/claude-assets/skills/cfn-loop-orchestration/helpers/gate-check.sh +0 -56
  651. package/claude-assets/skills/cfn-loop-orchestration/helpers/iteration-manager-ts.sh +0 -89
  652. package/claude-assets/skills/cfn-loop-orchestration/helpers/iteration-manager.sh +0 -87
  653. package/claude-assets/skills/cfn-loop-orchestration/helpers/orchestrate-ts.sh +0 -104
  654. package/claude-assets/skills/cfn-loop-orchestration/helpers/parse-test-results.sh +0 -56
  655. package/claude-assets/skills/cfn-loop-orchestration/helpers/spawn-agents.sh +0 -290
  656. package/claude-assets/skills/cfn-loop-orchestration/helpers/timeout-calculator-ts.sh +0 -47
  657. package/claude-assets/skills/cfn-loop-orchestration/helpers/timeout-calculator.sh +0 -51
  658. package/claude-assets/skills/cfn-loop-orchestration/orchestrate.sh +0 -1345
  659. package/claude-assets/skills/cfn-redis-cleanup/cleanup-redis.sh +0 -130
  660. package/claude-assets/skills/cfn-redis-coordination/AGENT_LOGGING.md +0 -280
  661. package/claude-assets/skills/cfn-redis-coordination/BZPOPMIN_FIX_SUMMARY.md +0 -209
  662. package/claude-assets/skills/cfn-redis-coordination/CENTRALIZED_REDIS_WRAPPER.md +0 -319
  663. package/claude-assets/skills/cfn-redis-coordination/agent-log.sh.bak +0 -124
  664. package/claude-assets/skills/cfn-redis-coordination/config.json +0 -61
  665. package/claude-assets/skills/cfn-redis-coordination/demos/phase4-wake-queue-test-report.md +0 -82
  666. package/claude-assets/skills/cfn-redis-coordination/demos/test-bzpopmin-fix.sh +0 -274
  667. package/claude-assets/skills/cfn-redis-coordination/demos/test-cancel-swarm.sh +0 -0
  668. package/claude-assets/skills/cfn-redis-coordination/docs/migration/PHASE_3_REDIS_COORDINATION_COMPLETION_REPORT.md +0 -553
  669. package/claude-assets/skills/cfn-redis-coordination/jest.config.js +0 -23
  670. package/claude-assets/skills/cfn-redis-coordination/package-lock.json +0 -5272
  671. package/claude-assets/skills/cfn-redis-coordination/package.json +0 -45
  672. package/claude-assets/skills/cfn-redis-coordination/src/agent-logger.ts +0 -446
  673. package/claude-assets/skills/cfn-redis-coordination/src/agent-recovery.ts +0 -454
  674. package/claude-assets/skills/cfn-redis-coordination/src/completion-reporter.ts +0 -396
  675. package/claude-assets/skills/cfn-redis-coordination/src/context-manager.ts +0 -327
  676. package/claude-assets/skills/cfn-redis-coordination/src/index.ts +0 -82
  677. package/claude-assets/skills/cfn-redis-coordination/src/mode-detector.ts +0 -155
  678. package/claude-assets/skills/cfn-redis-coordination/src/redis/redis-client.ts +0 -305
  679. package/claude-assets/skills/cfn-redis-coordination/src/redis/redis-functions.ts +0 -283
  680. package/claude-assets/skills/cfn-redis-coordination/src/redis-client.ts +0 -654
  681. package/claude-assets/skills/cfn-redis-coordination/src/result-collector.ts +0 -437
  682. package/claude-assets/skills/cfn-redis-coordination/src/swarm-manager.ts +0 -494
  683. package/claude-assets/skills/cfn-redis-coordination/src/task-analyzer.ts +0 -404
  684. package/claude-assets/skills/cfn-redis-coordination/src/task-executor.ts +0 -423
  685. package/claude-assets/skills/cfn-redis-coordination/src/types.ts +0 -235
  686. package/claude-assets/skills/cfn-redis-coordination/src/waiting-coordinator.ts +0 -587
  687. package/claude-assets/skills/cfn-redis-coordination/store-success-criteria.sh +0 -85
  688. package/claude-assets/skills/cfn-redis-coordination/test-connection-attempts.js +0 -70
  689. package/claude-assets/skills/cfn-redis-coordination/test-mode-simple.js +0 -121
  690. package/claude-assets/skills/cfn-redis-coordination/test-redis-check.js +0 -84
  691. package/claude-assets/skills/cfn-redis-coordination/test-task-mode-redis.cjs +0 -391
  692. package/claude-assets/skills/cfn-redis-coordination/tests/coordination.test.ts +0 -788
  693. package/claude-assets/skills/cfn-redis-coordination/update-all-scripts.sh +0 -67
  694. package/claude-assets/skills/cfn-redis-data-extraction/SKILL.md +0 -442
  695. package/claude-assets/skills/cfn-redis-data-extraction/extract.sh +0 -306
  696. package/dist/coordination/index.js +0 -25
  697. package/dist/coordination/index.js.map +0 -1
  698. package/docs/BUG_19_MEMORY_LEAK_TASK_MODE.md +0 -405
  699. package/docs/MEMORY_CLEANUP_GUIDE.md +0 -358
  700. package/docs/MEMORY_LEAK_FIX_SUMMARY.md +0 -322
  701. package/docs/REDIS_CLEANUP_EXECUTIVE_SUMMARY.md +0 -319
  702. package/docs/REDIS_CLEANUP_VERIFICATION_REPORT.md +0 -574
  703. package/tests/test-memory-leak-task-mode.sh +0 -435
  704. /package/.claude/skills/cfn-loop-orchestration/{inject-loop-context.sh → archive/legacy-bash/inject-loop-context.sh} +0 -0
  705. /package/.claude/skills/cfn-loop-orchestration/{monitor-execution.sh → archive/legacy-bash/monitor-execution.sh} +0 -0
  706. /package/.claude/skills/cfn-redis-coordination/{agent-log.sh → agent-log.sh.backup} +0 -0
  707. /package/.claude/skills/cfn-redis-coordination/{agent-recovery.sh → agent-recovery.sh.backup} +0 -0
  708. /package/.claude/skills/cfn-redis-coordination/{analyze-task-complexity.sh → analyze-task-complexity.sh.backup} +0 -0
  709. /package/.claude/skills/cfn-redis-coordination/bash-wrappers/{store-context.sh → store-context.sh.backup} +0 -0
  710. /package/.claude/skills/cfn-redis-coordination/{cancel-swarm.sh → cancel-swarm.sh.backup} +0 -0
  711. /package/.claude/skills/cfn-redis-coordination/{cfn-loop-exec.sh → cfn-loop-exec.sh.backup} +0 -0
  712. /package/.claude/skills/cfn-redis-coordination/{cfn-loop-relaunch.sh → cfn-loop-relaunch.sh.backup} +0 -0
  713. /package/.claude/skills/cfn-redis-coordination/{collect-confidence-scores.sh → collect-confidence-scores.sh.backup} +0 -0
  714. /package/.claude/skills/cfn-redis-coordination/{collect-results.sh → collect-results.sh.backup} +0 -0
  715. /package/.claude/skills/cfn-redis-coordination/{complete-swarm.sh → complete-swarm.sh.backup} +0 -0
  716. /package/.claude/skills/cfn-redis-coordination/{get-context.sh → get-context.sh.backup} +0 -0
  717. /package/.claude/skills/cfn-redis-coordination/{get-success-criteria.sh → get-success-criteria.sh.backup} +0 -0
  718. /package/.claude/skills/cfn-redis-coordination/{invoke-waiting-mode.sh → invoke-waiting-mode.sh.backup} +0 -0
  719. /package/.claude/skills/cfn-redis-coordination/{redis-cli-wrapper.sh → redis-cli-wrapper.sh.backup} +0 -0
  720. /package/.claude/skills/cfn-redis-coordination/{redis-functions.sh → redis-functions.sh.backup} +0 -0
  721. /package/.claude/skills/cfn-redis-coordination/{report-completion.sh → report-completion.sh.backup} +0 -0
  722. /package/.claude/skills/cfn-redis-coordination/{store-context.sh → store-context.sh.backup} +0 -0
  723. /package/claude-assets/skills/cfn-loop-orchestration/{inject-loop-context.sh → archive/legacy-bash/inject-loop-context.sh} +0 -0
  724. /package/claude-assets/skills/cfn-loop-orchestration/{monitor-execution.sh → archive/legacy-bash/monitor-execution.sh} +0 -0
  725. /package/claude-assets/skills/cfn-redis-coordination/{agent-log.sh → agent-log.sh.backup} +0 -0
  726. /package/claude-assets/skills/cfn-redis-coordination/{agent-recovery.sh → agent-recovery.sh.backup} +0 -0
  727. /package/claude-assets/skills/cfn-redis-coordination/{analyze-task-complexity.sh → analyze-task-complexity.sh.backup} +0 -0
  728. /package/claude-assets/skills/cfn-redis-coordination/bash-wrappers/{store-context.sh → store-context.sh.backup} +0 -0
  729. /package/claude-assets/skills/cfn-redis-coordination/{cancel-swarm.sh → cancel-swarm.sh.backup} +0 -0
  730. /package/claude-assets/skills/cfn-redis-coordination/{cfn-loop-exec.sh → cfn-loop-exec.sh.backup} +0 -0
  731. /package/claude-assets/skills/cfn-redis-coordination/{cfn-loop-relaunch.sh → cfn-loop-relaunch.sh.backup} +0 -0
  732. /package/claude-assets/skills/cfn-redis-coordination/{collect-confidence-scores.sh → collect-confidence-scores.sh.backup} +0 -0
  733. /package/claude-assets/skills/cfn-redis-coordination/{collect-results.sh → collect-results.sh.backup} +0 -0
  734. /package/claude-assets/skills/cfn-redis-coordination/{complete-swarm.sh → complete-swarm.sh.backup} +0 -0
  735. /package/claude-assets/skills/cfn-redis-coordination/{get-context.sh → get-context.sh.backup} +0 -0
  736. /package/claude-assets/skills/cfn-redis-coordination/{get-success-criteria.sh → get-success-criteria.sh.backup} +0 -0
  737. /package/claude-assets/skills/cfn-redis-coordination/{invoke-waiting-mode.sh → invoke-waiting-mode.sh.backup} +0 -0
  738. /package/claude-assets/skills/cfn-redis-coordination/{redis-cli-wrapper.sh → redis-cli-wrapper.sh.backup} +0 -0
  739. /package/claude-assets/skills/cfn-redis-coordination/{redis-functions.sh → redis-functions.sh.backup} +0 -0
  740. /package/claude-assets/skills/cfn-redis-coordination/{report-completion.sh → report-completion.sh.backup} +0 -0
  741. /package/claude-assets/skills/cfn-redis-coordination/{store-context.sh → store-context.sh.backup} +0 -0
@@ -0,0 +1,390 @@
1
+ /**
2
+ * Connection Pool Manager - Phase 6 Performance Optimization
3
+ *
4
+ * Implements enterprise-grade connection pooling for PostgreSQL and Redis
5
+ * to achieve 3-5x throughput improvement over direct connections.
6
+ *
7
+ * Performance targets:
8
+ * - Direct connection: ~50ms overhead per query
9
+ * - Pooled connection: ~5ms overhead per query
10
+ * - 3-5x throughput improvement
11
+ *
12
+ * Features:
13
+ * - PostgreSQL pg-pool with configurable max connections (default 20)
14
+ * - Redis ioredis with connection pooling
15
+ * - Connection health checks
16
+ * - Graceful shutdown handlers
17
+ * - Error recovery with reconnection logic
18
+ * - Prometheus metrics exposure
19
+ * - TypeScript strict mode (no any types)
20
+ */ import { Pool } from 'pg';
21
+ import Redis from 'ioredis';
22
+ /**
23
+ * PostgreSQL connection pool singleton
24
+ */ export let pgPool = null;
25
+ /**
26
+ * Redis connection pool singleton
27
+ */ export let redisPool = null;
28
+ /**
29
+ * Initialization state tracking
30
+ */ let isInitialized = false;
31
+ let isShuttingDown = false;
32
+ let initializationPromise = null;
33
+ /**
34
+ * Metrics tracking
35
+ */ let postgresCommandsProcessed = 0;
36
+ let redisCommandsProcessed = 0;
37
+ /**
38
+ * Initialize connection pools
39
+ * Thread-safe initialization with promise-based mutex
40
+ */ export async function initializePools(config) {
41
+ // Return if already initialized
42
+ if (isInitialized && pgPool && redisPool) {
43
+ console.log('Connection pools already initialized');
44
+ return;
45
+ }
46
+ // Wait for in-progress initialization
47
+ if (initializationPromise) {
48
+ console.log('Waiting for in-progress initialization...');
49
+ return initializationPromise;
50
+ }
51
+ // Atomic initialization with promise-based mutex
52
+ initializationPromise = (async ()=>{
53
+ try {
54
+ console.log('Initializing connection pools...');
55
+ // Validate configuration
56
+ validatePoolConfig(config);
57
+ // Initialize PostgreSQL pool
58
+ await initializePostgresPool(config.postgres);
59
+ // Initialize Redis pool
60
+ await initializeRedisPool(config.redis);
61
+ // Register shutdown handlers
62
+ registerShutdownHandlers();
63
+ isInitialized = true;
64
+ console.log('Connection pools initialized successfully');
65
+ } catch (error) {
66
+ console.error('Failed to initialize connection pools:', error);
67
+ // Cleanup on failure
68
+ await shutdownPools();
69
+ throw error;
70
+ } finally{
71
+ // Clear lock after initialization completes or fails
72
+ initializationPromise = null;
73
+ }
74
+ })();
75
+ return initializationPromise;
76
+ }
77
+ /**
78
+ * Validate pool configuration
79
+ */ function validatePoolConfig(config) {
80
+ // Validate PostgreSQL config
81
+ if (config.postgres.max < 4) {
82
+ throw new Error(`Invalid PostgreSQL max connections: ${config.postgres.max}. Minimum allowed is 4.`);
83
+ }
84
+ if (config.postgres.max > 100) {
85
+ throw new Error(`Invalid PostgreSQL max connections: ${config.postgres.max}. Maximum allowed is 100.`);
86
+ }
87
+ if (config.postgres.idleTimeoutMillis < 1000) {
88
+ throw new Error(`Invalid idle timeout: ${config.postgres.idleTimeoutMillis}ms. Minimum allowed is 1000ms.`);
89
+ }
90
+ if (config.postgres.connectionTimeoutMillis < 1000) {
91
+ throw new Error(`Invalid connection timeout: ${config.postgres.connectionTimeoutMillis}ms. Minimum allowed is 1000ms.`);
92
+ }
93
+ // Validate Redis config
94
+ if (config.redis.maxRetriesPerRequest < 0) {
95
+ throw new Error(`Invalid max retries: ${config.redis.maxRetriesPerRequest}. Must be >= 0.`);
96
+ }
97
+ }
98
+ /**
99
+ * Initialize PostgreSQL connection pool
100
+ */ async function initializePostgresPool(config) {
101
+ const poolConfig = {
102
+ host: config.host,
103
+ port: config.port,
104
+ database: config.database,
105
+ user: config.user,
106
+ password: config.password,
107
+ max: config.max,
108
+ idleTimeoutMillis: config.idleTimeoutMillis,
109
+ connectionTimeoutMillis: config.connectionTimeoutMillis,
110
+ // Additional pool settings for production
111
+ allowExitOnIdle: false,
112
+ application_name: 'cfn-connection-pool'
113
+ };
114
+ pgPool = new Pool(poolConfig);
115
+ // Handle pool errors with reconnection logic
116
+ pgPool.on('error', (err, client)=>{
117
+ console.error('Unexpected error on idle PostgreSQL client:', err.message);
118
+ // Error will trigger reconnection on next query
119
+ });
120
+ // Connection event tracking
121
+ pgPool.on('connect', (client)=>{
122
+ console.log('New PostgreSQL client connected to pool');
123
+ });
124
+ pgPool.on('acquire', (client)=>{
125
+ // Connection acquired from pool
126
+ });
127
+ pgPool.on('remove', (client)=>{
128
+ console.log('PostgreSQL client removed from pool');
129
+ });
130
+ // Test connection with timeout
131
+ try {
132
+ const client = await pgPool.connect();
133
+ try {
134
+ await client.query('SELECT 1 AS health_check');
135
+ console.log('PostgreSQL connection pool health check passed');
136
+ } finally{
137
+ client.release();
138
+ }
139
+ } catch (err) {
140
+ const error = err;
141
+ console.error('Failed to initialize PostgreSQL connection pool:', error.message);
142
+ throw new Error(`PostgreSQL pool initialization failed: ${error.message}`);
143
+ }
144
+ }
145
+ /**
146
+ * Initialize Redis connection pool
147
+ */ async function initializeRedisPool(config) {
148
+ const redisOptions = {
149
+ host: config.host,
150
+ port: config.port,
151
+ password: config.password,
152
+ maxRetriesPerRequest: config.maxRetriesPerRequest,
153
+ // Connection pooling settings
154
+ lazyConnect: false,
155
+ keepAlive: 30000,
156
+ connectTimeout: 10000,
157
+ retryStrategy: (times)=>{
158
+ if (times > 10) {
159
+ console.error('Redis connection retry limit exceeded');
160
+ return undefined; // Stop retrying
161
+ }
162
+ // Exponential backoff: 100ms, 200ms, 400ms, 800ms, ...
163
+ const delay = Math.min(100 * Math.pow(2, times), 3000);
164
+ console.log(`Redis reconnection attempt ${times} in ${delay}ms`);
165
+ return delay;
166
+ },
167
+ reconnectOnError: (err)=>{
168
+ // Reconnect on specific errors
169
+ const targetErrors = [
170
+ 'READONLY',
171
+ 'ECONNREFUSED',
172
+ 'ETIMEDOUT'
173
+ ];
174
+ return targetErrors.some((target)=>err.message.includes(target));
175
+ },
176
+ enableReadyCheck: true,
177
+ enableOfflineQueue: true
178
+ };
179
+ redisPool = new Redis(redisOptions);
180
+ // Handle Redis events
181
+ redisPool.on('error', (err)=>{
182
+ console.error('Redis connection error:', err.message);
183
+ });
184
+ redisPool.on('ready', ()=>{
185
+ console.log('Redis connection ready');
186
+ });
187
+ redisPool.on('connect', ()=>{
188
+ console.log('Redis client connected');
189
+ });
190
+ redisPool.on('reconnecting', (delay)=>{
191
+ console.log(`Redis reconnecting in ${delay}ms`);
192
+ });
193
+ redisPool.on('close', ()=>{
194
+ console.log('Redis connection closed');
195
+ });
196
+ // Test connection with timeout
197
+ try {
198
+ const result = await redisPool.ping();
199
+ if (result !== 'PONG') {
200
+ throw new Error(`Unexpected ping response: ${result}`);
201
+ }
202
+ console.log('Redis connection pool health check passed');
203
+ } catch (err) {
204
+ const error = err;
205
+ console.error('Failed to initialize Redis connection pool:', error.message);
206
+ throw new Error(`Redis pool initialization failed: ${error.message}`);
207
+ }
208
+ }
209
+ /**
210
+ * Register graceful shutdown handlers
211
+ */ function registerShutdownHandlers() {
212
+ const shutdownHandler = async (signal)=>{
213
+ if (isShuttingDown) {
214
+ return;
215
+ }
216
+ console.log(`Received ${signal}, shutting down connection pools...`);
217
+ await shutdownPools();
218
+ process.exit(0);
219
+ };
220
+ process.on('SIGTERM', ()=>shutdownHandler('SIGTERM'));
221
+ process.on('SIGINT', ()=>shutdownHandler('SIGINT'));
222
+ // Handle uncaught errors
223
+ process.on('uncaughtException', async (err)=>{
224
+ console.error('Uncaught exception:', err);
225
+ await shutdownPools();
226
+ process.exit(1);
227
+ });
228
+ process.on('unhandledRejection', async (reason)=>{
229
+ console.error('Unhandled rejection:', reason);
230
+ await shutdownPools();
231
+ process.exit(1);
232
+ });
233
+ }
234
+ /**
235
+ * Gracefully shutdown all connection pools
236
+ */ export async function shutdownPools() {
237
+ if (isShuttingDown) {
238
+ console.log('Shutdown already in progress');
239
+ return;
240
+ }
241
+ console.log('Initiating graceful connection pool shutdown...');
242
+ isShuttingDown = true;
243
+ const shutdownPromises = [];
244
+ // Shutdown PostgreSQL pool
245
+ if (pgPool) {
246
+ shutdownPromises.push(pgPool.end().then(()=>{
247
+ console.log('PostgreSQL connection pool closed');
248
+ pgPool = null;
249
+ }).catch((err)=>{
250
+ console.error('Error closing PostgreSQL pool:', err.message);
251
+ }));
252
+ }
253
+ // Shutdown Redis pool
254
+ if (redisPool) {
255
+ shutdownPromises.push(redisPool.quit().then(()=>{
256
+ console.log('Redis connection pool closed');
257
+ redisPool = null;
258
+ }).catch((err)=>{
259
+ console.error('Error closing Redis pool:', err.message);
260
+ }));
261
+ }
262
+ await Promise.all(shutdownPromises);
263
+ isInitialized = false;
264
+ isShuttingDown = false;
265
+ console.log('Connection pool shutdown complete');
266
+ }
267
+ /**
268
+ * Get pool metrics for Prometheus monitoring
269
+ */ export function getPoolMetrics() {
270
+ if (!pgPool || !redisPool) {
271
+ throw new Error('Connection pools not initialized. Call initializePools first.');
272
+ }
273
+ return {
274
+ postgres: {
275
+ totalConnections: pgPool.totalCount,
276
+ idleConnections: pgPool.idleCount,
277
+ waitingRequests: pgPool.waitingCount,
278
+ activeConnections: pgPool.totalCount - pgPool.idleCount
279
+ },
280
+ redis: {
281
+ status: redisPool.status,
282
+ connectedClients: 1,
283
+ commandsProcessed: redisCommandsProcessed
284
+ },
285
+ timestamp: new Date().toISOString()
286
+ };
287
+ }
288
+ /**
289
+ * Execute PostgreSQL query with pooled connection
290
+ * Automatically handles connection acquisition and release
291
+ */ export async function executePostgresQuery(query, params) {
292
+ if (!pgPool) {
293
+ throw new Error('PostgreSQL pool not initialized. Call initializePools first.');
294
+ }
295
+ if (isShuttingDown) {
296
+ throw new Error('Connection pool is shutting down');
297
+ }
298
+ let client = null;
299
+ try {
300
+ client = await pgPool.connect();
301
+ const result = await client.query(query, params);
302
+ postgresCommandsProcessed++;
303
+ return result.rows;
304
+ } catch (err) {
305
+ const error = err;
306
+ console.error('PostgreSQL query error:', error.message);
307
+ throw new Error(`PostgreSQL query failed: ${error.message}`);
308
+ } finally{
309
+ if (client) {
310
+ client.release();
311
+ }
312
+ }
313
+ }
314
+ /**
315
+ * Execute Redis command with pooled connection
316
+ * Automatically handles reconnection on failure
317
+ */ export async function executeRedisCommand(command, ...args) {
318
+ if (!redisPool) {
319
+ throw new Error('Redis pool not initialized. Call initializePools first.');
320
+ }
321
+ if (isShuttingDown) {
322
+ throw new Error('Connection pool is shutting down');
323
+ }
324
+ try {
325
+ // Type-safe command execution using unknown cast
326
+ const redisClient = redisPool;
327
+ const result = await redisClient[command](...args);
328
+ redisCommandsProcessed++;
329
+ return result;
330
+ } catch (err) {
331
+ const error = err;
332
+ console.error(`Redis ${command} command error:`, error.message);
333
+ throw new Error(`Redis command failed: ${error.message}`);
334
+ }
335
+ }
336
+ /**
337
+ * Health check for all connection pools
338
+ */ export async function healthCheck() {
339
+ const health = {
340
+ postgres: false,
341
+ redis: false,
342
+ details: {
343
+ postgres: 'not initialized',
344
+ redis: 'not initialized'
345
+ }
346
+ };
347
+ // Check PostgreSQL
348
+ if (pgPool) {
349
+ try {
350
+ await executePostgresQuery('SELECT 1 AS health_check');
351
+ health.postgres = true;
352
+ health.details.postgres = 'healthy';
353
+ } catch (err) {
354
+ const error = err;
355
+ health.details.postgres = error.message;
356
+ }
357
+ }
358
+ // Check Redis
359
+ if (redisPool) {
360
+ try {
361
+ await redisPool.ping();
362
+ health.redis = true;
363
+ health.details.redis = 'healthy';
364
+ } catch (err) {
365
+ const error = err;
366
+ health.details.redis = error.message;
367
+ }
368
+ }
369
+ return health;
370
+ }
371
+ /**
372
+ * Get PostgreSQL pool instance (for advanced use cases)
373
+ * Most code should use executePostgresQuery instead
374
+ */ export function getPostgresPool() {
375
+ if (!pgPool) {
376
+ throw new Error('PostgreSQL pool not initialized. Call initializePools first.');
377
+ }
378
+ return pgPool;
379
+ }
380
+ /**
381
+ * Get Redis pool instance (for advanced use cases)
382
+ * Most code should use executeRedisCommand instead
383
+ */ export function getRedisPool() {
384
+ if (!redisPool) {
385
+ throw new Error('Redis pool not initialized. Call initializePools first.');
386
+ }
387
+ return redisPool;
388
+ }
389
+
390
+ //# sourceMappingURL=connection-pool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/lib/connection-pool.ts"],"sourcesContent":["/**\r\n * Connection Pool Manager - Phase 6 Performance Optimization\r\n *\r\n * Implements enterprise-grade connection pooling for PostgreSQL and Redis\r\n * to achieve 3-5x throughput improvement over direct connections.\r\n *\r\n * Performance targets:\r\n * - Direct connection: ~50ms overhead per query\r\n * - Pooled connection: ~5ms overhead per query\r\n * - 3-5x throughput improvement\r\n *\r\n * Features:\r\n * - PostgreSQL pg-pool with configurable max connections (default 20)\r\n * - Redis ioredis with connection pooling\r\n * - Connection health checks\r\n * - Graceful shutdown handlers\r\n * - Error recovery with reconnection logic\r\n * - Prometheus metrics exposure\r\n * - TypeScript strict mode (no any types)\r\n */\r\n\r\nimport { Pool, PoolClient, PoolConfig as PgPoolConfig } from 'pg';\r\nimport Redis, { RedisOptions } from 'ioredis';\r\n\r\n/**\r\n * Pool configuration interface\r\n */\r\nexport interface PoolConfig {\r\n postgres: {\r\n host: string;\r\n port: number;\r\n database: string;\r\n user: string;\r\n password: string;\r\n max: number; // Maximum pool size\r\n idleTimeoutMillis: number; // Idle connection timeout\r\n connectionTimeoutMillis: number; // Connection acquisition timeout\r\n };\r\n redis: {\r\n host: string;\r\n port: number;\r\n password?: string;\r\n maxRetriesPerRequest: number; // Max retry attempts per request\r\n };\r\n}\r\n\r\n/**\r\n * Pool metrics for Prometheus monitoring\r\n */\r\nexport interface PoolMetrics {\r\n postgres: {\r\n totalConnections: number;\r\n idleConnections: number;\r\n waitingRequests: number;\r\n activeConnections: number;\r\n };\r\n redis: {\r\n status: string;\r\n connectedClients: number;\r\n commandsProcessed: number;\r\n };\r\n timestamp: string;\r\n}\r\n\r\n/**\r\n * Health check result\r\n */\r\ninterface HealthCheckResult {\r\n postgres: boolean;\r\n redis: boolean;\r\n details: {\r\n postgres: string;\r\n redis: string;\r\n };\r\n}\r\n\r\n/**\r\n * PostgreSQL connection pool singleton\r\n */\r\nexport let pgPool: Pool | null = null;\r\n\r\n/**\r\n * Redis connection pool singleton\r\n */\r\nexport let redisPool: Redis | null = null;\r\n\r\n/**\r\n * Initialization state tracking\r\n */\r\nlet isInitialized = false;\r\nlet isShuttingDown = false;\r\nlet initializationPromise: Promise<void> | null = null;\r\n\r\n/**\r\n * Metrics tracking\r\n */\r\nlet postgresCommandsProcessed = 0;\r\nlet redisCommandsProcessed = 0;\r\n\r\n/**\r\n * Initialize connection pools\r\n * Thread-safe initialization with promise-based mutex\r\n */\r\nexport async function initializePools(config: PoolConfig): Promise<void> {\r\n // Return if already initialized\r\n if (isInitialized && pgPool && redisPool) {\r\n console.log('Connection pools already initialized');\r\n return;\r\n }\r\n\r\n // Wait for in-progress initialization\r\n if (initializationPromise) {\r\n console.log('Waiting for in-progress initialization...');\r\n return initializationPromise;\r\n }\r\n\r\n // Atomic initialization with promise-based mutex\r\n initializationPromise = (async () => {\r\n try {\r\n console.log('Initializing connection pools...');\r\n\r\n // Validate configuration\r\n validatePoolConfig(config);\r\n\r\n // Initialize PostgreSQL pool\r\n await initializePostgresPool(config.postgres);\r\n\r\n // Initialize Redis pool\r\n await initializeRedisPool(config.redis);\r\n\r\n // Register shutdown handlers\r\n registerShutdownHandlers();\r\n\r\n isInitialized = true;\r\n console.log('Connection pools initialized successfully');\r\n } catch (error) {\r\n console.error('Failed to initialize connection pools:', error);\r\n // Cleanup on failure\r\n await shutdownPools();\r\n throw error;\r\n } finally {\r\n // Clear lock after initialization completes or fails\r\n initializationPromise = null;\r\n }\r\n })();\r\n\r\n return initializationPromise;\r\n}\r\n\r\n/**\r\n * Validate pool configuration\r\n */\r\nfunction validatePoolConfig(config: PoolConfig): void {\r\n // Validate PostgreSQL config\r\n if (config.postgres.max < 4) {\r\n throw new Error(\r\n `Invalid PostgreSQL max connections: ${config.postgres.max}. Minimum allowed is 4.`\r\n );\r\n }\r\n if (config.postgres.max > 100) {\r\n throw new Error(\r\n `Invalid PostgreSQL max connections: ${config.postgres.max}. Maximum allowed is 100.`\r\n );\r\n }\r\n if (config.postgres.idleTimeoutMillis < 1000) {\r\n throw new Error(\r\n `Invalid idle timeout: ${config.postgres.idleTimeoutMillis}ms. Minimum allowed is 1000ms.`\r\n );\r\n }\r\n if (config.postgres.connectionTimeoutMillis < 1000) {\r\n throw new Error(\r\n `Invalid connection timeout: ${config.postgres.connectionTimeoutMillis}ms. Minimum allowed is 1000ms.`\r\n );\r\n }\r\n\r\n // Validate Redis config\r\n if (config.redis.maxRetriesPerRequest < 0) {\r\n throw new Error(\r\n `Invalid max retries: ${config.redis.maxRetriesPerRequest}. Must be >= 0.`\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * Initialize PostgreSQL connection pool\r\n */\r\nasync function initializePostgresPool(\r\n config: PoolConfig['postgres']\r\n): Promise<void> {\r\n const poolConfig: PgPoolConfig = {\r\n host: config.host,\r\n port: config.port,\r\n database: config.database,\r\n user: config.user,\r\n password: config.password,\r\n max: config.max,\r\n idleTimeoutMillis: config.idleTimeoutMillis,\r\n connectionTimeoutMillis: config.connectionTimeoutMillis,\r\n // Additional pool settings for production\r\n allowExitOnIdle: false,\r\n application_name: 'cfn-connection-pool',\r\n };\r\n\r\n pgPool = new Pool(poolConfig);\r\n\r\n // Handle pool errors with reconnection logic\r\n pgPool.on('error', (err: Error, client: PoolClient) => {\r\n console.error('Unexpected error on idle PostgreSQL client:', err.message);\r\n // Error will trigger reconnection on next query\r\n });\r\n\r\n // Connection event tracking\r\n pgPool.on('connect', (client: PoolClient) => {\r\n console.log('New PostgreSQL client connected to pool');\r\n });\r\n\r\n pgPool.on('acquire', (client: PoolClient) => {\r\n // Connection acquired from pool\r\n });\r\n\r\n pgPool.on('remove', (client: PoolClient) => {\r\n console.log('PostgreSQL client removed from pool');\r\n });\r\n\r\n // Test connection with timeout\r\n try {\r\n const client = await pgPool.connect();\r\n try {\r\n await client.query('SELECT 1 AS health_check');\r\n console.log('PostgreSQL connection pool health check passed');\r\n } finally {\r\n client.release();\r\n }\r\n } catch (err) {\r\n const error = err as Error;\r\n console.error('Failed to initialize PostgreSQL connection pool:', error.message);\r\n throw new Error(`PostgreSQL pool initialization failed: ${error.message}`);\r\n }\r\n}\r\n\r\n/**\r\n * Initialize Redis connection pool\r\n */\r\nasync function initializeRedisPool(config: PoolConfig['redis']): Promise<void> {\r\n const redisOptions: RedisOptions = {\r\n host: config.host,\r\n port: config.port,\r\n password: config.password,\r\n maxRetriesPerRequest: config.maxRetriesPerRequest,\r\n // Connection pooling settings\r\n lazyConnect: false,\r\n keepAlive: 30000, // Keep connections alive\r\n connectTimeout: 10000, // 10s connection timeout\r\n retryStrategy: (times: number): number | void => {\r\n if (times > 10) {\r\n console.error('Redis connection retry limit exceeded');\r\n return undefined; // Stop retrying\r\n }\r\n // Exponential backoff: 100ms, 200ms, 400ms, 800ms, ...\r\n const delay = Math.min(100 * Math.pow(2, times), 3000);\r\n console.log(`Redis reconnection attempt ${times} in ${delay}ms`);\r\n return delay;\r\n },\r\n reconnectOnError: (err: Error): boolean => {\r\n // Reconnect on specific errors\r\n const targetErrors = ['READONLY', 'ECONNREFUSED', 'ETIMEDOUT'];\r\n return targetErrors.some((target) => err.message.includes(target));\r\n },\r\n enableReadyCheck: true,\r\n enableOfflineQueue: true,\r\n };\r\n\r\n redisPool = new Redis(redisOptions);\r\n\r\n // Handle Redis events\r\n redisPool.on('error', (err: Error) => {\r\n console.error('Redis connection error:', err.message);\r\n });\r\n\r\n redisPool.on('ready', () => {\r\n console.log('Redis connection ready');\r\n });\r\n\r\n redisPool.on('connect', () => {\r\n console.log('Redis client connected');\r\n });\r\n\r\n redisPool.on('reconnecting', (delay: number) => {\r\n console.log(`Redis reconnecting in ${delay}ms`);\r\n });\r\n\r\n redisPool.on('close', () => {\r\n console.log('Redis connection closed');\r\n });\r\n\r\n // Test connection with timeout\r\n try {\r\n const result = await redisPool.ping();\r\n if (result !== 'PONG') {\r\n throw new Error(`Unexpected ping response: ${result}`);\r\n }\r\n console.log('Redis connection pool health check passed');\r\n } catch (err) {\r\n const error = err as Error;\r\n console.error('Failed to initialize Redis connection pool:', error.message);\r\n throw new Error(`Redis pool initialization failed: ${error.message}`);\r\n }\r\n}\r\n\r\n/**\r\n * Register graceful shutdown handlers\r\n */\r\nfunction registerShutdownHandlers(): void {\r\n const shutdownHandler = async (signal: string): Promise<void> => {\r\n if (isShuttingDown) {\r\n return;\r\n }\r\n console.log(`Received ${signal}, shutting down connection pools...`);\r\n await shutdownPools();\r\n process.exit(0);\r\n };\r\n\r\n process.on('SIGTERM', () => shutdownHandler('SIGTERM'));\r\n process.on('SIGINT', () => shutdownHandler('SIGINT'));\r\n\r\n // Handle uncaught errors\r\n process.on('uncaughtException', async (err: Error) => {\r\n console.error('Uncaught exception:', err);\r\n await shutdownPools();\r\n process.exit(1);\r\n });\r\n\r\n process.on('unhandledRejection', async (reason: unknown) => {\r\n console.error('Unhandled rejection:', reason);\r\n await shutdownPools();\r\n process.exit(1);\r\n });\r\n}\r\n\r\n/**\r\n * Gracefully shutdown all connection pools\r\n */\r\nexport async function shutdownPools(): Promise<void> {\r\n if (isShuttingDown) {\r\n console.log('Shutdown already in progress');\r\n return;\r\n }\r\n\r\n console.log('Initiating graceful connection pool shutdown...');\r\n isShuttingDown = true;\r\n\r\n const shutdownPromises: Promise<void>[] = [];\r\n\r\n // Shutdown PostgreSQL pool\r\n if (pgPool) {\r\n shutdownPromises.push(\r\n pgPool\r\n .end()\r\n .then(() => {\r\n console.log('PostgreSQL connection pool closed');\r\n pgPool = null;\r\n })\r\n .catch((err: Error) => {\r\n console.error('Error closing PostgreSQL pool:', err.message);\r\n })\r\n );\r\n }\r\n\r\n // Shutdown Redis pool\r\n if (redisPool) {\r\n shutdownPromises.push(\r\n redisPool\r\n .quit()\r\n .then(() => {\r\n console.log('Redis connection pool closed');\r\n redisPool = null;\r\n })\r\n .catch((err: Error) => {\r\n console.error('Error closing Redis pool:', err.message);\r\n })\r\n );\r\n }\r\n\r\n await Promise.all(shutdownPromises);\r\n\r\n isInitialized = false;\r\n isShuttingDown = false;\r\n console.log('Connection pool shutdown complete');\r\n}\r\n\r\n/**\r\n * Get pool metrics for Prometheus monitoring\r\n */\r\nexport function getPoolMetrics(): PoolMetrics {\r\n if (!pgPool || !redisPool) {\r\n throw new Error('Connection pools not initialized. Call initializePools first.');\r\n }\r\n\r\n return {\r\n postgres: {\r\n totalConnections: pgPool.totalCount,\r\n idleConnections: pgPool.idleCount,\r\n waitingRequests: pgPool.waitingCount,\r\n activeConnections: pgPool.totalCount - pgPool.idleCount,\r\n },\r\n redis: {\r\n status: redisPool.status,\r\n connectedClients: 1, // Single connection per pool\r\n commandsProcessed: redisCommandsProcessed,\r\n },\r\n timestamp: new Date().toISOString(),\r\n };\r\n}\r\n\r\n/**\r\n * Execute PostgreSQL query with pooled connection\r\n * Automatically handles connection acquisition and release\r\n */\r\nexport async function executePostgresQuery<T = Record<string, unknown>>(\r\n query: string,\r\n params?: unknown[]\r\n): Promise<T[]> {\r\n if (!pgPool) {\r\n throw new Error('PostgreSQL pool not initialized. Call initializePools first.');\r\n }\r\n\r\n if (isShuttingDown) {\r\n throw new Error('Connection pool is shutting down');\r\n }\r\n\r\n let client: PoolClient | null = null;\r\n try {\r\n client = await pgPool.connect();\r\n const result = await client.query(query, params);\r\n postgresCommandsProcessed++;\r\n return result.rows as T[];\r\n } catch (err) {\r\n const error = err as Error;\r\n console.error('PostgreSQL query error:', error.message);\r\n throw new Error(`PostgreSQL query failed: ${error.message}`);\r\n } finally {\r\n if (client) {\r\n client.release();\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Execute Redis command with pooled connection\r\n * Automatically handles reconnection on failure\r\n */\r\nexport async function executeRedisCommand<T = unknown>(\r\n command: string,\r\n ...args: unknown[]\r\n): Promise<T> {\r\n if (!redisPool) {\r\n throw new Error('Redis pool not initialized. Call initializePools first.');\r\n }\r\n\r\n if (isShuttingDown) {\r\n throw new Error('Connection pool is shutting down');\r\n }\r\n\r\n try {\r\n // Type-safe command execution using unknown cast\r\n const redisClient = redisPool as unknown as Record<\r\n string,\r\n (...args: unknown[]) => Promise<T>\r\n >;\r\n const result = await redisClient[command](...args);\r\n redisCommandsProcessed++;\r\n return result;\r\n } catch (err) {\r\n const error = err as Error;\r\n console.error(`Redis ${command} command error:`, error.message);\r\n throw new Error(`Redis command failed: ${error.message}`);\r\n }\r\n}\r\n\r\n/**\r\n * Health check for all connection pools\r\n */\r\nexport async function healthCheck(): Promise<HealthCheckResult> {\r\n const health: HealthCheckResult = {\r\n postgres: false,\r\n redis: false,\r\n details: {\r\n postgres: 'not initialized',\r\n redis: 'not initialized',\r\n },\r\n };\r\n\r\n // Check PostgreSQL\r\n if (pgPool) {\r\n try {\r\n await executePostgresQuery('SELECT 1 AS health_check');\r\n health.postgres = true;\r\n health.details.postgres = 'healthy';\r\n } catch (err) {\r\n const error = err as Error;\r\n health.details.postgres = error.message;\r\n }\r\n }\r\n\r\n // Check Redis\r\n if (redisPool) {\r\n try {\r\n await redisPool.ping();\r\n health.redis = true;\r\n health.details.redis = 'healthy';\r\n } catch (err) {\r\n const error = err as Error;\r\n health.details.redis = error.message;\r\n }\r\n }\r\n\r\n return health;\r\n}\r\n\r\n/**\r\n * Get PostgreSQL pool instance (for advanced use cases)\r\n * Most code should use executePostgresQuery instead\r\n */\r\nexport function getPostgresPool(): Pool {\r\n if (!pgPool) {\r\n throw new Error('PostgreSQL pool not initialized. Call initializePools first.');\r\n }\r\n return pgPool;\r\n}\r\n\r\n/**\r\n * Get Redis pool instance (for advanced use cases)\r\n * Most code should use executeRedisCommand instead\r\n */\r\nexport function getRedisPool(): Redis {\r\n if (!redisPool) {\r\n throw new Error('Redis pool not initialized. Call initializePools first.');\r\n }\r\n return redisPool;\r\n}\r\n"],"names":["Pool","Redis","pgPool","redisPool","isInitialized","isShuttingDown","initializationPromise","postgresCommandsProcessed","redisCommandsProcessed","initializePools","config","console","log","validatePoolConfig","initializePostgresPool","postgres","initializeRedisPool","redis","registerShutdownHandlers","error","shutdownPools","max","Error","idleTimeoutMillis","connectionTimeoutMillis","maxRetriesPerRequest","poolConfig","host","port","database","user","password","allowExitOnIdle","application_name","on","err","client","message","connect","query","release","redisOptions","lazyConnect","keepAlive","connectTimeout","retryStrategy","times","undefined","delay","Math","min","pow","reconnectOnError","targetErrors","some","target","includes","enableReadyCheck","enableOfflineQueue","result","ping","shutdownHandler","signal","process","exit","reason","shutdownPromises","push","end","then","catch","quit","Promise","all","getPoolMetrics","totalConnections","totalCount","idleConnections","idleCount","waitingRequests","waitingCount","activeConnections","status","connectedClients","commandsProcessed","timestamp","Date","toISOString","executePostgresQuery","params","rows","executeRedisCommand","command","args","redisClient","healthCheck","health","details","getPostgresPool","getRedisPool"],"mappings":"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"}