claude-flow-novice 2.15.11 → 2.16.0

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 (636) hide show
  1. package/.claude/cfn-extras/agents/cfn-v3-coordinator.md +517 -0
  2. package/.claude/commands/cfn-loop-cli.md +158 -464
  3. package/.claude/commands/cfn-loop-trigger.md +114 -0
  4. package/.claude/hooks/cfn-invoke-post-edit-ts.sh +100 -0
  5. package/.claude/hooks/cfn-invoke-post-edit-ts.sh.backup +78 -0
  6. package/.claude/hooks/cfn-invoke-post-edit.sh +22 -0
  7. package/.claude/hooks/cfn-invoke-post-edit.sh.backup +87 -0
  8. package/.claude/hooks/cfn-invoke-pre-edit-ts.sh +116 -0
  9. package/.claude/hooks/cfn-invoke-pre-edit-ts.sh.backup +94 -0
  10. package/.claude/hooks/cfn-invoke-pre-edit.sh +22 -0
  11. package/.claude/hooks/cfn-invoke-pre-edit.sh.backup +88 -0
  12. package/.claude/skills/cfn-agent-spawning/SKILL.md +48 -1
  13. package/.claude/skills/cfn-agent-spawning/SKILL.md.backup +135 -0
  14. package/.claude/skills/cfn-agent-spawning/TYPESCRIPT_MIGRATION.md +567 -0
  15. package/.claude/skills/cfn-agent-spawning/check-dependencies.sh +22 -0
  16. package/.claude/skills/{cfn-redis-coordination/check-dependencies.sh → cfn-agent-spawning/check-dependencies.sh.backup} +3 -5
  17. package/.claude/skills/cfn-agent-spawning/get-agent-provider-env.sh +22 -0
  18. package/.claude/skills/cfn-agent-spawning/get-agent-provider-env.sh.backup +127 -0
  19. package/.claude/skills/cfn-agent-spawning/parse-agent-provider.sh +22 -0
  20. package/.claude/skills/cfn-agent-spawning/parse-agent-provider.sh.backup +59 -0
  21. package/.claude/skills/cfn-agent-spawning/spawn-agent-wrapper.sh +63 -0
  22. package/.claude/skills/cfn-agent-spawning/spawn-agent-wrapper.sh.backup +41 -0
  23. package/.claude/skills/cfn-agent-spawning/spawn-agent.sh +26 -1
  24. package/.claude/skills/cfn-agent-spawning/spawn-templates.sh +22 -0
  25. package/.claude/skills/cfn-agent-spawning/spawn-templates.sh.backup +613 -0
  26. package/.claude/skills/cfn-agent-spawning/spawn-worker.sh +22 -0
  27. package/.claude/skills/cfn-agent-spawning/spawn-worker.sh.backup +176 -0
  28. package/.claude/skills/cfn-loop-orchestration/.backups/unknown/1763619700_33aff4a69b99159e4e849107ebc4d09f/metadata.json +8 -0
  29. package/.claude/skills/cfn-loop-orchestration/.backups/unknown/1763619700_33aff4a69b99159e4e849107ebc4d09f/original +271 -0
  30. package/.claude/skills/cfn-loop-orchestration/.backups/unknown/1763619700_33aff4a69b99159e4e849107ebc4d09f/revert.sh +7 -0
  31. package/.claude/skills/cfn-loop-orchestration/.backups/unknown/1763671642_06496e8c399a79db08167cc00ed4b31e/metadata.json +8 -0
  32. package/.claude/skills/cfn-loop-orchestration/.backups/unknown/1763671642_06496e8c399a79db08167cc00ed4b31e/original +325 -0
  33. package/.claude/skills/cfn-loop-orchestration/.backups/unknown/1763671642_06496e8c399a79db08167cc00ed4b31e/revert.sh +7 -0
  34. package/.claude/skills/cfn-loop-orchestration/CLI_IMPLEMENTATION_SUMMARY.md +330 -0
  35. package/.claude/skills/cfn-loop-orchestration/CONFIGURATION_IMPROVEMENTS.md +318 -0
  36. package/.claude/skills/cfn-loop-orchestration/CONTEXT_LOOKUP_MIGRATION.md +308 -0
  37. package/.claude/skills/cfn-loop-orchestration/CONTEXT_LOOKUP_QUICK_START.md +378 -0
  38. package/.claude/skills/cfn-loop-orchestration/E2E_VALIDATION_REPORT.md +262 -0
  39. package/.claude/skills/cfn-loop-orchestration/IMPLEMENTATION_SUMMARY.md +319 -519
  40. package/.claude/skills/cfn-loop-orchestration/NORTH_STAR_E2E_REPORT.md +299 -0
  41. package/.claude/skills/cfn-loop-orchestration/NORTH_STAR_EXECUTION_SUMMARY.md +403 -0
  42. package/.claude/skills/cfn-loop-orchestration/NORTH_STAR_INDEX.md +323 -0
  43. package/.claude/skills/cfn-loop-orchestration/SKILL.md +159 -48
  44. package/.claude/skills/cfn-loop-orchestration/SPAWN_AGENTS_IMPLEMENTATION.md +188 -0
  45. package/.claude/skills/cfn-loop-orchestration/TEST_COVERAGE_REPORT.md +335 -0
  46. package/.claude/skills/cfn-loop-orchestration/TEST_COVERAGE_SUMMARY.md +456 -0
  47. package/.claude/skills/cfn-loop-orchestration/TYPESCRIPT_INTEGRATION_REPORT.md +709 -0
  48. package/.claude/skills/cfn-loop-orchestration/TYPESCRIPT_INTEGRATION_SUMMARY.md +257 -0
  49. package/.claude/skills/cfn-loop-orchestration/VALIDATION_REPORT.md +572 -0
  50. package/.claude/skills/cfn-loop-orchestration/VALIDATION_SUMMARY.txt +196 -0
  51. package/.claude/skills/cfn-loop-orchestration/VALIDATOR_MODULE_GUIDE.md +526 -0
  52. package/.claude/skills/cfn-loop-orchestration/archive/legacy-bash/README.md +167 -0
  53. package/.claude/skills/cfn-loop-orchestration/archive/legacy-bash/orchestrate-enhanced.sh +548 -0
  54. package/{claude-assets/skills/cfn-loop-orchestration → .claude/skills/cfn-loop-orchestration/archive/legacy-bash}/orchestrate-wrapper.sh +11 -1
  55. package/.claude/skills/cfn-loop-orchestration/archive/legacy-bash/orchestrate.sh +182 -0
  56. package/.claude/skills/cfn-loop-orchestration/e2e-validation-fixed.js +240 -0
  57. package/.claude/skills/cfn-loop-orchestration/e2e-validation.js +213 -0
  58. package/.claude/skills/cfn-loop-orchestration/package-lock.json +3 -0
  59. package/.claude/skills/cfn-loop-orchestration/package.json +4 -0
  60. package/.claude/skills/cfn-loop-orchestration/run-north-star-e2e.ts +210 -0
  61. package/.claude/skills/cfn-loop-orchestration/src/cli/orchestrator-cli.ts +396 -0
  62. package/.claude/skills/cfn-loop-orchestration/src/helpers/CONFIDENCE_AGGREGATOR.md +564 -0
  63. package/.claude/skills/cfn-loop-orchestration/src/helpers/CONFIDENCE_AGGREGATOR_QUICK_REF.md +241 -0
  64. package/.claude/skills/cfn-loop-orchestration/src/helpers/CONTEXT_INJECTOR_IMPLEMENTATION.md +375 -0
  65. package/.claude/skills/cfn-loop-orchestration/src/helpers/CONTEXT_INJECTOR_QUICK_REFERENCE.md +362 -0
  66. package/.claude/skills/cfn-loop-orchestration/src/helpers/CONTEXT_INJECTOR_README.md +307 -0
  67. package/.claude/skills/cfn-loop-orchestration/src/helpers/CONTEXT_INJECTOR_USAGE_GUIDE.md +508 -0
  68. package/.claude/skills/cfn-loop-orchestration/src/helpers/confidence-aggregator.ts +473 -0
  69. package/.claude/skills/cfn-loop-orchestration/src/helpers/consensus.ts +1 -1
  70. package/.claude/skills/cfn-loop-orchestration/src/helpers/context-injector.ts +349 -0
  71. package/.claude/skills/cfn-loop-orchestration/src/helpers/context-lookup.ts +486 -0
  72. package/.claude/skills/cfn-loop-orchestration/src/helpers/deliverable-verifier.ts +6 -2
  73. package/.claude/skills/cfn-loop-orchestration/src/helpers/gate-check.ts +1 -1
  74. package/.claude/skills/cfn-loop-orchestration/src/helpers/product-owner-decision.ts +316 -0
  75. package/.claude/skills/cfn-loop-orchestration/src/helpers/spawn-agents.ts +357 -0
  76. package/.claude/skills/cfn-loop-orchestration/src/helpers/validator.ts +276 -0
  77. package/.claude/skills/cfn-loop-orchestration/src/index.ts +2 -0
  78. package/.claude/skills/cfn-loop-orchestration/src/orchestrate.ts +743 -2
  79. package/.claude/skills/cfn-loop-orchestration/src/types.ts +56 -0
  80. package/.claude/skills/cfn-loop-orchestration/test-cli.sh +92 -0
  81. package/.claude/skills/cfn-loop-orchestration/test-typescript-integration.sh +442 -0
  82. package/.claude/skills/cfn-loop-orchestration/tests/agent-spawner.test.ts +124 -0
  83. package/.claude/skills/cfn-loop-orchestration/tests/confidence-aggregator.test.ts +604 -0
  84. package/.claude/skills/cfn-loop-orchestration/tests/context-injector.test.ts +561 -0
  85. package/.claude/skills/cfn-loop-orchestration/tests/context-lookup.test.ts +661 -0
  86. package/.claude/skills/cfn-loop-orchestration/tests/deliverable-verifier.test.ts +2 -2
  87. package/.claude/skills/cfn-loop-orchestration/tests/gate-check-edge-cases.test.ts +422 -0
  88. package/.claude/skills/cfn-loop-orchestration/tests/gate-checker.test.ts +276 -0
  89. package/.claude/skills/cfn-loop-orchestration/tests/logger.test.ts +291 -0
  90. package/.claude/skills/cfn-loop-orchestration/tests/north-star-e2e.test.ts +334 -0
  91. package/.claude/skills/cfn-loop-orchestration/tests/redis-coordinator.test.ts +321 -0
  92. package/.claude/skills/cfn-loop-orchestration/tests/spawn-agents.test.ts +284 -0
  93. package/.claude/skills/cfn-loop-orchestration/tests/validator.test.ts +643 -0
  94. package/.claude/skills/cfn-loop-validation/IMPLEMENTATION_SUMMARY.md +672 -0
  95. package/.claude/skills/cfn-loop-validation/INDEX.md +531 -0
  96. package/.claude/skills/cfn-loop-validation/README_TYPESCRIPT.md +454 -0
  97. package/.claude/skills/cfn-loop-validation/SKILL.md +48 -1
  98. package/.claude/skills/cfn-loop-validation/SKILL.md.backup +353 -0
  99. package/.claude/skills/cfn-loop-validation/SKILL_TYPESCRIPT.md +782 -0
  100. package/.claude/skills/cfn-loop-validation/VAPOR_DETECTION_EXAMPLES.md +598 -0
  101. package/.claude/skills/cfn-loop-validation/check-dependencies.sh +22 -0
  102. package/{claude-assets/skills/cfn-redis-coordination/check-dependencies.sh → .claude/skills/cfn-loop-validation/check-dependencies.sh.backup} +4 -5
  103. package/.claude/skills/cfn-loop-validation/detect-vapor.sh +59 -0
  104. package/.claude/skills/cfn-loop-validation/detect-vapor.sh.backup +37 -0
  105. package/.claude/skills/cfn-loop-validation/dist/.tsbuildinfo +1 -0
  106. package/.claude/skills/cfn-loop-validation/dist/cli/detect-vapor.d.ts +14 -0
  107. package/.claude/skills/cfn-loop-validation/dist/cli/detect-vapor.d.ts.map +1 -0
  108. package/.claude/skills/cfn-loop-validation/dist/cli/detect-vapor.js +185 -0
  109. package/.claude/skills/cfn-loop-validation/dist/cli/detect-vapor.js.map +1 -0
  110. package/.claude/skills/cfn-loop-validation/dist/cli/validate-deliverables.d.ts +14 -0
  111. package/.claude/skills/cfn-loop-validation/dist/cli/validate-deliverables.d.ts.map +1 -0
  112. package/.claude/skills/cfn-loop-validation/dist/cli/validate-deliverables.js +176 -0
  113. package/.claude/skills/cfn-loop-validation/dist/cli/validate-deliverables.js.map +1 -0
  114. package/.claude/skills/cfn-loop-validation/dist/cli/validate-gate.d.ts +19 -0
  115. package/.claude/skills/cfn-loop-validation/dist/cli/validate-gate.d.ts.map +1 -0
  116. package/.claude/skills/cfn-loop-validation/dist/cli/validate-gate.js +123 -0
  117. package/.claude/skills/cfn-loop-validation/dist/cli/validate-gate.js.map +1 -0
  118. package/.claude/skills/cfn-loop-validation/dist/types.d.ts +156 -0
  119. package/.claude/skills/cfn-loop-validation/dist/types.d.ts.map +1 -0
  120. package/.claude/skills/cfn-loop-validation/dist/types.js +66 -0
  121. package/.claude/skills/cfn-loop-validation/dist/types.js.map +1 -0
  122. package/.claude/skills/cfn-loop-validation/dist/validator.d.ts +85 -0
  123. package/.claude/skills/cfn-loop-validation/dist/validator.d.ts.map +1 -0
  124. package/.claude/skills/cfn-loop-validation/dist/validator.js +411 -0
  125. package/.claude/skills/cfn-loop-validation/dist/validator.js.map +1 -0
  126. package/.claude/skills/cfn-loop-validation/orchestrate-cfn-loop.sh +22 -0
  127. package/.claude/skills/cfn-loop-validation/orchestrate-cfn-loop.sh.backup +252 -0
  128. package/.claude/skills/cfn-loop-validation/package.json +93 -0
  129. package/.claude/skills/cfn-loop-validation/src/cli/detect-vapor.ts +177 -0
  130. package/.claude/skills/cfn-loop-validation/src/cli/validate-deliverables.ts +161 -0
  131. package/.claude/skills/cfn-loop-validation/src/cli/validate-gate.ts +139 -0
  132. package/.claude/skills/cfn-loop-validation/src/types.ts +215 -0
  133. package/.claude/skills/cfn-loop-validation/src/validator.ts +503 -0
  134. package/.claude/skills/cfn-loop-validation/tests/validator.test.ts +537 -0
  135. package/.claude/skills/{cfn-redis-coordination → cfn-loop-validation}/tsconfig.json +34 -31
  136. package/.claude/skills/cfn-loop-validation/validate-deliverables.sh +59 -0
  137. package/.claude/skills/cfn-loop-validation/validate-deliverables.sh.backup +37 -0
  138. package/.claude/skills/cfn-loop-validation/validate-gate.sh +63 -0
  139. package/.claude/skills/cfn-loop-validation/validate-gate.sh.backup +41 -0
  140. package/.claude/skills/cfn-loop-validation/validate-iteration.sh +22 -0
  141. package/.claude/skills/cfn-loop-validation/validate-iteration.sh.backup +134 -0
  142. package/.claude/skills/cfn-product-owner-decision/SKILL.md +479 -147
  143. package/.claude/skills/cfn-product-owner-decision/TYPESCRIPT_IMPLEMENTATION.md +653 -0
  144. package/{claude-assets/skills/cfn-product-owner-decision → .claude/skills/cfn-product-owner-decision/archive/legacy-bash}/execute-decision.sh +24 -2
  145. package/.claude/skills/pre-edit-backup/SKILL.md +324 -0
  146. package/.claude/skills/pre-edit-backup/SKILL.md.backup +277 -0
  147. package/.claude/skills/pre-edit-backup/backup.sh +22 -0
  148. package/.claude/skills/pre-edit-backup/backup.sh.backup +107 -0
  149. package/claude-assets/agents/cfn-dev-team/coordinators/cfn-frontend-coordinator.md +1 -0
  150. package/claude-assets/agents/cfn-dev-team/coordinators/consensus-builder.md +1 -0
  151. package/claude-assets/agents/cfn-dev-team/coordinators/handoff-coordinator.md +1 -0
  152. package/claude-assets/agents/cfn-dev-team/coordinators/multi-sprint-coordinator.md +1 -0
  153. package/claude-assets/agents/cfn-dev-team/dev-ops/devops-engineer.md +10 -0
  154. package/claude-assets/agents/cfn-dev-team/dev-ops/docker-specialist.md +56 -33
  155. package/claude-assets/agents/cfn-dev-team/dev-ops/kubernetes-specialist.md +46 -36
  156. package/claude-assets/agents/cfn-dev-team/dev-ops/monitoring-specialist.md +9 -0
  157. package/claude-assets/agents/cfn-dev-team/developers/api-gateway-specialist.md +17 -17
  158. package/claude-assets/agents/cfn-dev-team/developers/backend-developer.md +40 -58
  159. package/claude-assets/agents/cfn-dev-team/developers/data/data-engineer.md +18 -20
  160. package/claude-assets/agents/cfn-dev-team/developers/database/database-architect.md +19 -28
  161. package/claude-assets/agents/cfn-dev-team/developers/frontend/mobile-dev.md +15 -19
  162. package/claude-assets/agents/cfn-dev-team/developers/frontend/react-frontend-engineer.md +15 -10
  163. package/claude-assets/agents/cfn-dev-team/developers/frontend/typescript-specialist.md +15 -10
  164. package/claude-assets/agents/cfn-dev-team/developers/frontend/ui-designer.md +15 -25
  165. package/claude-assets/agents/cfn-dev-team/developers/graphql-specialist.md +17 -21
  166. package/claude-assets/agents/cfn-dev-team/developers/rust-developer.md +17 -21
  167. package/claude-assets/agents/cfn-dev-team/product-owners/product-owner.md +1 -5
  168. package/claude-assets/agents/cfn-dev-team/reviewers/code-reviewer.md +20 -51
  169. package/claude-assets/agents/cfn-dev-team/reviewers/quality/code-quality-validator.md +22 -71
  170. package/claude-assets/agents/cfn-dev-team/reviewers/quality/perf-analyzer.md +21 -64
  171. package/claude-assets/agents/cfn-dev-team/reviewers/quality/performance-benchmarker.md +22 -67
  172. package/claude-assets/agents/cfn-dev-team/reviewers/quality/security-specialist.md +23 -67
  173. package/claude-assets/agents/cfn-dev-team/testers/api-testing-specialist.md +7 -35
  174. package/claude-assets/agents/cfn-dev-team/testers/chaos-engineering-specialist.md +8 -37
  175. package/claude-assets/agents/cfn-dev-team/testers/contract-tester.md +16 -54
  176. package/claude-assets/agents/cfn-dev-team/testers/integration-tester.md +17 -55
  177. package/claude-assets/agents/cfn-dev-team/testers/interaction-tester.md +9 -37
  178. package/claude-assets/agents/cfn-dev-team/testers/load-testing-specialist.md +17 -55
  179. package/claude-assets/agents/cfn-dev-team/testers/mutation-testing-specialist.md +17 -48
  180. package/claude-assets/agents/cfn-dev-team/testers/playwright-tester.md +8 -37
  181. package/claude-assets/agents/cfn-dev-team/testers/tester.md +7 -27
  182. package/claude-assets/agents/cfn-dev-team/utility/analyst.md +12 -28
  183. package/claude-assets/agents/cfn-dev-team/utility/code-booster.md +13 -13
  184. package/claude-assets/agents/cfn-dev-team/utility/context-curator.md +7 -2
  185. package/claude-assets/agents/cfn-dev-team/utility/epic-creator.md +5 -10
  186. package/claude-assets/agents/cfn-dev-team/utility/memory-leak-specialist.md +120 -714
  187. package/claude-assets/agents/cfn-dev-team/utility/researcher.md +12 -21
  188. package/claude-assets/agents/cfn-dev-team/utility/z-ai-specialist.md +146 -572
  189. package/claude-assets/agents/custom/cfn-docker-expert.md +102 -0
  190. package/claude-assets/agents/custom/cfn-loops-cli-expert.md +129 -0
  191. package/claude-assets/cfn-extras/agents/cfn-v3-coordinator.md +517 -0
  192. package/claude-assets/commands/cfn-loop-cli.md +158 -464
  193. package/claude-assets/commands/cfn-loop-trigger.md +114 -0
  194. package/claude-assets/hooks/SKILL.md +518 -0
  195. package/claude-assets/hooks/SKILL.md.backup +471 -0
  196. package/claude-assets/hooks/cfn-invoke-post-edit-ts.sh +100 -0
  197. package/claude-assets/hooks/cfn-invoke-post-edit-ts.sh.backup +78 -0
  198. package/claude-assets/hooks/cfn-invoke-post-edit.sh +22 -0
  199. package/claude-assets/hooks/cfn-invoke-post-edit.sh.backup +87 -0
  200. package/claude-assets/hooks/cfn-invoke-pre-edit-ts.sh +116 -0
  201. package/claude-assets/hooks/cfn-invoke-pre-edit-ts.sh.backup +94 -0
  202. package/claude-assets/hooks/cfn-invoke-pre-edit.sh +22 -0
  203. package/claude-assets/hooks/cfn-invoke-pre-edit.sh.backup +88 -0
  204. package/claude-assets/skills/cfn-agent-selection-with-fallback/DELIVERABLES.md +409 -0
  205. package/claude-assets/skills/cfn-agent-selection-with-fallback/IMPLEMENTATION_SUMMARY.md +396 -0
  206. package/claude-assets/skills/cfn-agent-selection-with-fallback/INTEGRATION_GUIDE.md +308 -0
  207. package/claude-assets/skills/cfn-agent-selection-with-fallback/QUICK_REFERENCE.md +239 -0
  208. package/claude-assets/skills/cfn-agent-selection-with-fallback/SKILL.md +107 -1
  209. package/claude-assets/skills/cfn-agent-selection-with-fallback/SKILL.md.backup +302 -0
  210. package/claude-assets/skills/cfn-agent-selection-with-fallback/TYPESCRIPT_MIGRATION.md +295 -0
  211. package/claude-assets/skills/cfn-agent-selection-with-fallback/dist/agent-selector.cjs +297 -0
  212. package/claude-assets/skills/cfn-agent-selection-with-fallback/dist/agent-selector.js +297 -0
  213. package/claude-assets/skills/cfn-agent-selection-with-fallback/dist/cli.cjs +96 -0
  214. package/claude-assets/skills/cfn-agent-selection-with-fallback/dist/cli.js +96 -0
  215. package/claude-assets/skills/cfn-agent-selection-with-fallback/select-agents-ts.sh +45 -0
  216. package/claude-assets/skills/cfn-agent-selection-with-fallback/select-agents-ts.sh.backup +23 -0
  217. package/claude-assets/skills/cfn-agent-selection-with-fallback/select-agents.sh +22 -0
  218. package/claude-assets/skills/cfn-agent-selection-with-fallback/select-agents.sh.backup +173 -0
  219. package/claude-assets/skills/cfn-agent-selection-with-fallback/src/agent-selector.test.ts +357 -0
  220. package/claude-assets/skills/cfn-agent-selection-with-fallback/src/agent-selector.ts +350 -0
  221. package/claude-assets/skills/cfn-agent-selection-with-fallback/src/cli.ts +74 -0
  222. package/claude-assets/skills/cfn-agent-selection-with-fallback/task-classifier.sh +22 -0
  223. package/claude-assets/skills/cfn-agent-selection-with-fallback/task-classifier.sh.backup +71 -0
  224. package/claude-assets/skills/cfn-agent-selection-with-fallback/tsconfig.json +18 -0
  225. package/claude-assets/skills/cfn-agent-spawning/SKILL.md +48 -1
  226. package/claude-assets/skills/cfn-agent-spawning/SKILL.md.backup +135 -0
  227. package/claude-assets/skills/cfn-agent-spawning/TYPESCRIPT_MIGRATION.md +567 -0
  228. package/claude-assets/skills/cfn-agent-spawning/check-dependencies.sh +22 -0
  229. package/claude-assets/skills/cfn-agent-spawning/check-dependencies.sh.backup +30 -0
  230. package/claude-assets/skills/cfn-agent-spawning/get-agent-provider-env.sh +22 -0
  231. package/claude-assets/skills/cfn-agent-spawning/get-agent-provider-env.sh.backup +127 -0
  232. package/claude-assets/skills/cfn-agent-spawning/parse-agent-provider.sh +22 -0
  233. package/claude-assets/skills/cfn-agent-spawning/parse-agent-provider.sh.backup +59 -0
  234. package/claude-assets/skills/cfn-agent-spawning/spawn-agent-wrapper.sh +63 -0
  235. package/claude-assets/skills/cfn-agent-spawning/spawn-agent-wrapper.sh.backup +41 -0
  236. package/claude-assets/skills/cfn-agent-spawning/spawn-agent.sh +26 -1
  237. package/claude-assets/skills/cfn-agent-spawning/spawn-templates.sh +22 -0
  238. package/claude-assets/skills/cfn-agent-spawning/spawn-templates.sh.backup +613 -0
  239. package/claude-assets/skills/cfn-agent-spawning/spawn-worker.sh +22 -0
  240. package/claude-assets/skills/cfn-agent-spawning/spawn-worker.sh.backup +176 -0
  241. package/claude-assets/skills/cfn-coordination/agent-completion.sh.backup +36 -0
  242. package/claude-assets/skills/cfn-coordination/coordination-signal.sh.backup +36 -0
  243. package/claude-assets/skills/cfn-coordination/coordination-wait.sh.backup +36 -0
  244. package/claude-assets/skills/cfn-dependency-ingestion/README.md +101 -0
  245. package/claude-assets/skills/cfn-dependency-ingestion/SKILL.md +369 -0
  246. package/claude-assets/skills/cfn-dependency-ingestion/build.sh +23 -0
  247. package/claude-assets/skills/cfn-dependency-ingestion/dist/ingest-dependencies.js +478 -0
  248. package/claude-assets/skills/cfn-dependency-ingestion/ingest-dependencies.sh +295 -0
  249. package/claude-assets/skills/cfn-dependency-ingestion/src/ingest-dependencies.ts +563 -0
  250. package/claude-assets/skills/cfn-loop-orchestration/.backups/unknown/1763619700_33aff4a69b99159e4e849107ebc4d09f/metadata.json +8 -0
  251. package/claude-assets/skills/cfn-loop-orchestration/.backups/unknown/1763619700_33aff4a69b99159e4e849107ebc4d09f/original +271 -0
  252. package/claude-assets/skills/cfn-loop-orchestration/.backups/unknown/1763619700_33aff4a69b99159e4e849107ebc4d09f/revert.sh +7 -0
  253. package/claude-assets/skills/cfn-loop-orchestration/.backups/unknown/1763671642_06496e8c399a79db08167cc00ed4b31e/metadata.json +8 -0
  254. package/claude-assets/skills/cfn-loop-orchestration/.backups/unknown/1763671642_06496e8c399a79db08167cc00ed4b31e/original +325 -0
  255. package/claude-assets/skills/cfn-loop-orchestration/.backups/unknown/1763671642_06496e8c399a79db08167cc00ed4b31e/revert.sh +7 -0
  256. package/claude-assets/skills/cfn-loop-orchestration/CLI_IMPLEMENTATION_SUMMARY.md +330 -0
  257. package/claude-assets/skills/cfn-loop-orchestration/CONFIGURATION_IMPROVEMENTS.md +318 -0
  258. package/claude-assets/skills/cfn-loop-orchestration/CONTEXT_LOOKUP_MIGRATION.md +308 -0
  259. package/claude-assets/skills/cfn-loop-orchestration/CONTEXT_LOOKUP_QUICK_START.md +378 -0
  260. package/claude-assets/skills/cfn-loop-orchestration/E2E_VALIDATION_REPORT.md +262 -0
  261. package/claude-assets/skills/cfn-loop-orchestration/IMPLEMENTATION_SUMMARY.md +319 -519
  262. package/claude-assets/skills/cfn-loop-orchestration/NORTH_STAR_E2E_REPORT.md +299 -0
  263. package/claude-assets/skills/cfn-loop-orchestration/NORTH_STAR_EXECUTION_SUMMARY.md +403 -0
  264. package/claude-assets/skills/cfn-loop-orchestration/NORTH_STAR_INDEX.md +323 -0
  265. package/claude-assets/skills/cfn-loop-orchestration/SKILL.md +159 -48
  266. package/claude-assets/skills/cfn-loop-orchestration/SPAWN_AGENTS_IMPLEMENTATION.md +188 -0
  267. package/claude-assets/skills/cfn-loop-orchestration/TEST_COVERAGE_REPORT.md +335 -0
  268. package/claude-assets/skills/cfn-loop-orchestration/TEST_COVERAGE_SUMMARY.md +456 -0
  269. package/claude-assets/skills/cfn-loop-orchestration/TYPESCRIPT_INTEGRATION_REPORT.md +709 -0
  270. package/claude-assets/skills/cfn-loop-orchestration/TYPESCRIPT_INTEGRATION_SUMMARY.md +257 -0
  271. package/claude-assets/skills/cfn-loop-orchestration/VALIDATION_REPORT.md +572 -0
  272. package/claude-assets/skills/cfn-loop-orchestration/VALIDATION_SUMMARY.txt +196 -0
  273. package/claude-assets/skills/cfn-loop-orchestration/VALIDATOR_MODULE_GUIDE.md +526 -0
  274. package/claude-assets/skills/cfn-loop-orchestration/archive/legacy-bash/README.md +167 -0
  275. package/claude-assets/skills/cfn-loop-orchestration/archive/legacy-bash/orchestrate-enhanced.sh +548 -0
  276. package/{.claude/skills/cfn-loop-orchestration → claude-assets/skills/cfn-loop-orchestration/archive/legacy-bash}/orchestrate-wrapper.sh +11 -1
  277. package/claude-assets/skills/cfn-loop-orchestration/archive/legacy-bash/orchestrate.sh +182 -0
  278. package/claude-assets/skills/cfn-loop-orchestration/e2e-validation-fixed.js +240 -0
  279. package/claude-assets/skills/cfn-loop-orchestration/e2e-validation.js +213 -0
  280. package/claude-assets/skills/cfn-loop-orchestration/package-lock.json +3 -0
  281. package/claude-assets/skills/cfn-loop-orchestration/package.json +4 -0
  282. package/claude-assets/skills/cfn-loop-orchestration/run-north-star-e2e.ts +210 -0
  283. package/claude-assets/skills/cfn-loop-orchestration/src/cli/orchestrator-cli.ts +396 -0
  284. package/claude-assets/skills/cfn-loop-orchestration/src/helpers/CONFIDENCE_AGGREGATOR.md +564 -0
  285. package/claude-assets/skills/cfn-loop-orchestration/src/helpers/CONFIDENCE_AGGREGATOR_QUICK_REF.md +241 -0
  286. package/claude-assets/skills/cfn-loop-orchestration/src/helpers/CONTEXT_INJECTOR_IMPLEMENTATION.md +375 -0
  287. package/claude-assets/skills/cfn-loop-orchestration/src/helpers/CONTEXT_INJECTOR_QUICK_REFERENCE.md +362 -0
  288. package/claude-assets/skills/cfn-loop-orchestration/src/helpers/CONTEXT_INJECTOR_README.md +307 -0
  289. package/claude-assets/skills/cfn-loop-orchestration/src/helpers/CONTEXT_INJECTOR_USAGE_GUIDE.md +508 -0
  290. package/claude-assets/skills/cfn-loop-orchestration/src/helpers/confidence-aggregator.ts +473 -0
  291. package/claude-assets/skills/cfn-loop-orchestration/src/helpers/consensus.ts +1 -1
  292. package/claude-assets/skills/cfn-loop-orchestration/src/helpers/context-injector.ts +349 -0
  293. package/claude-assets/skills/cfn-loop-orchestration/src/helpers/context-lookup.ts +486 -0
  294. package/claude-assets/skills/cfn-loop-orchestration/src/helpers/deliverable-verifier.ts +6 -2
  295. package/claude-assets/skills/cfn-loop-orchestration/src/helpers/gate-check.ts +1 -1
  296. package/claude-assets/skills/cfn-loop-orchestration/src/helpers/product-owner-decision.ts +316 -0
  297. package/claude-assets/skills/cfn-loop-orchestration/src/helpers/spawn-agents.ts +357 -0
  298. package/claude-assets/skills/cfn-loop-orchestration/src/helpers/validator.ts +276 -0
  299. package/claude-assets/skills/cfn-loop-orchestration/src/index.ts +2 -0
  300. package/claude-assets/skills/cfn-loop-orchestration/src/orchestrate.ts +743 -2
  301. package/claude-assets/skills/cfn-loop-orchestration/src/types.ts +56 -0
  302. package/claude-assets/skills/cfn-loop-orchestration/test-cli.sh +92 -0
  303. package/claude-assets/skills/cfn-loop-orchestration/test-typescript-integration.sh +442 -0
  304. package/claude-assets/skills/cfn-loop-orchestration/tests/agent-spawner.test.ts +124 -0
  305. package/claude-assets/skills/cfn-loop-orchestration/tests/confidence-aggregator.test.ts +604 -0
  306. package/claude-assets/skills/cfn-loop-orchestration/tests/context-injector.test.ts +561 -0
  307. package/claude-assets/skills/cfn-loop-orchestration/tests/context-lookup.test.ts +661 -0
  308. package/claude-assets/skills/cfn-loop-orchestration/tests/deliverable-verifier.test.ts +2 -2
  309. package/claude-assets/skills/cfn-loop-orchestration/tests/gate-check-edge-cases.test.ts +422 -0
  310. package/claude-assets/skills/cfn-loop-orchestration/tests/gate-checker.test.ts +276 -0
  311. package/claude-assets/skills/cfn-loop-orchestration/tests/logger.test.ts +291 -0
  312. package/claude-assets/skills/cfn-loop-orchestration/tests/north-star-e2e.test.ts +334 -0
  313. package/claude-assets/skills/cfn-loop-orchestration/tests/redis-coordinator.test.ts +321 -0
  314. package/claude-assets/skills/cfn-loop-orchestration/tests/spawn-agents.test.ts +284 -0
  315. package/claude-assets/skills/cfn-loop-orchestration/tests/validator.test.ts +643 -0
  316. package/claude-assets/skills/cfn-loop-output-processing/.eslintrc.json +33 -0
  317. package/claude-assets/skills/cfn-loop-output-processing/DELIVERY_SUMMARY.txt +462 -0
  318. package/claude-assets/skills/cfn-loop-output-processing/DEPRECATION_NOTICE.md +183 -0
  319. package/claude-assets/skills/cfn-loop-output-processing/EXAMPLES.md +609 -0
  320. package/claude-assets/skills/cfn-loop-output-processing/IMPLEMENTATION_SUMMARY.md +418 -0
  321. package/claude-assets/skills/cfn-loop-output-processing/INDEX.md +531 -0
  322. package/claude-assets/skills/cfn-loop-output-processing/MIGRATION.md +362 -0
  323. package/claude-assets/skills/cfn-loop-output-processing/README.md +114 -0
  324. package/claude-assets/skills/cfn-loop-output-processing/SKILL.md +633 -0
  325. package/{.claude/skills/cfn-docker-redis-coordination → claude-assets/skills/cfn-loop-output-processing}/jest.config.js +7 -15
  326. package/claude-assets/skills/cfn-loop-output-processing/package.json +50 -0
  327. package/claude-assets/skills/cfn-loop-output-processing/src/cli/process-loop2.ts +195 -0
  328. package/claude-assets/skills/cfn-loop-output-processing/src/cli/process-loop3.ts +157 -0
  329. package/claude-assets/skills/cfn-loop-output-processing/src/output-processor.ts +632 -0
  330. package/claude-assets/skills/cfn-loop-output-processing/tests/output-processor.test.ts +617 -0
  331. package/claude-assets/skills/{cfn-docker-redis-coordination → cfn-loop-output-processing}/tsconfig.json +16 -7
  332. package/claude-assets/skills/cfn-loop-validation/IMPLEMENTATION_SUMMARY.md +672 -0
  333. package/claude-assets/skills/cfn-loop-validation/INDEX.md +531 -0
  334. package/claude-assets/skills/cfn-loop-validation/README_TYPESCRIPT.md +454 -0
  335. package/claude-assets/skills/cfn-loop-validation/SKILL.md +48 -1
  336. package/claude-assets/skills/cfn-loop-validation/SKILL.md.backup +353 -0
  337. package/claude-assets/skills/cfn-loop-validation/SKILL_TYPESCRIPT.md +782 -0
  338. package/claude-assets/skills/cfn-loop-validation/VAPOR_DETECTION_EXAMPLES.md +598 -0
  339. package/claude-assets/skills/cfn-loop-validation/check-dependencies.sh +22 -0
  340. package/claude-assets/skills/cfn-loop-validation/check-dependencies.sh.backup +31 -0
  341. package/claude-assets/skills/cfn-loop-validation/detect-vapor.sh +59 -0
  342. package/claude-assets/skills/cfn-loop-validation/detect-vapor.sh.backup +37 -0
  343. package/claude-assets/skills/cfn-loop-validation/dist/.tsbuildinfo +1 -0
  344. package/claude-assets/skills/cfn-loop-validation/dist/cli/detect-vapor.d.ts +14 -0
  345. package/claude-assets/skills/cfn-loop-validation/dist/cli/detect-vapor.d.ts.map +1 -0
  346. package/claude-assets/skills/cfn-loop-validation/dist/cli/detect-vapor.js +185 -0
  347. package/claude-assets/skills/cfn-loop-validation/dist/cli/detect-vapor.js.map +1 -0
  348. package/claude-assets/skills/cfn-loop-validation/dist/cli/validate-deliverables.d.ts +14 -0
  349. package/claude-assets/skills/cfn-loop-validation/dist/cli/validate-deliverables.d.ts.map +1 -0
  350. package/claude-assets/skills/cfn-loop-validation/dist/cli/validate-deliverables.js +176 -0
  351. package/claude-assets/skills/cfn-loop-validation/dist/cli/validate-deliverables.js.map +1 -0
  352. package/claude-assets/skills/cfn-loop-validation/dist/cli/validate-gate.d.ts +19 -0
  353. package/claude-assets/skills/cfn-loop-validation/dist/cli/validate-gate.d.ts.map +1 -0
  354. package/claude-assets/skills/cfn-loop-validation/dist/cli/validate-gate.js +123 -0
  355. package/claude-assets/skills/cfn-loop-validation/dist/cli/validate-gate.js.map +1 -0
  356. package/claude-assets/skills/cfn-loop-validation/dist/types.d.ts +156 -0
  357. package/claude-assets/skills/cfn-loop-validation/dist/types.d.ts.map +1 -0
  358. package/claude-assets/skills/cfn-loop-validation/dist/types.js +66 -0
  359. package/claude-assets/skills/cfn-loop-validation/dist/types.js.map +1 -0
  360. package/claude-assets/skills/cfn-loop-validation/dist/validator.d.ts +85 -0
  361. package/claude-assets/skills/cfn-loop-validation/dist/validator.d.ts.map +1 -0
  362. package/claude-assets/skills/cfn-loop-validation/dist/validator.js +411 -0
  363. package/claude-assets/skills/cfn-loop-validation/dist/validator.js.map +1 -0
  364. package/claude-assets/skills/cfn-loop-validation/orchestrate-cfn-loop.sh +22 -0
  365. package/claude-assets/skills/cfn-loop-validation/orchestrate-cfn-loop.sh.backup +252 -0
  366. package/claude-assets/skills/cfn-loop-validation/package.json +93 -0
  367. package/claude-assets/skills/cfn-loop-validation/src/cli/detect-vapor.ts +177 -0
  368. package/claude-assets/skills/cfn-loop-validation/src/cli/validate-deliverables.ts +161 -0
  369. package/claude-assets/skills/cfn-loop-validation/src/cli/validate-gate.ts +139 -0
  370. package/claude-assets/skills/cfn-loop-validation/src/types.ts +215 -0
  371. package/claude-assets/skills/cfn-loop-validation/src/validator.ts +503 -0
  372. package/claude-assets/skills/cfn-loop-validation/tests/validator.test.ts +537 -0
  373. package/claude-assets/skills/{cfn-redis-coordination → cfn-loop-validation}/tsconfig.json +34 -31
  374. package/claude-assets/skills/cfn-loop-validation/validate-deliverables.sh +59 -0
  375. package/claude-assets/skills/cfn-loop-validation/validate-deliverables.sh.backup +37 -0
  376. package/claude-assets/skills/cfn-loop-validation/validate-gate.sh +63 -0
  377. package/claude-assets/skills/cfn-loop-validation/validate-gate.sh.backup +41 -0
  378. package/claude-assets/skills/cfn-loop-validation/validate-iteration.sh +22 -0
  379. package/claude-assets/skills/cfn-loop-validation/validate-iteration.sh.backup +134 -0
  380. package/claude-assets/skills/cfn-product-owner-decision/SKILL.md +479 -147
  381. package/claude-assets/skills/cfn-product-owner-decision/TYPESCRIPT_IMPLEMENTATION.md +653 -0
  382. package/{.claude/skills/cfn-product-owner-decision → claude-assets/skills/cfn-product-owner-decision/archive/legacy-bash}/execute-decision.sh +24 -2
  383. package/claude-assets/skills/cfn-provider-routing/README.md +129 -0
  384. package/claude-assets/skills/cfn-provider-routing/SKILL.md +192 -0
  385. package/claude-assets/skills/cfn-provider-routing/resolve-provider-model.ts +223 -0
  386. package/claude-assets/skills/pre-edit-backup/SKILL.md +324 -0
  387. package/claude-assets/skills/pre-edit-backup/SKILL.md.backup +277 -0
  388. package/claude-assets/skills/pre-edit-backup/backup.sh +22 -0
  389. package/claude-assets/skills/pre-edit-backup/backup.sh.backup +107 -0
  390. package/dist/agents/agent-loader.js +146 -165
  391. package/dist/agents/agent-loader.js.map +1 -1
  392. package/dist/api/auth-endpoints.js +415 -0
  393. package/dist/api/auth-endpoints.js.map +1 -0
  394. package/dist/api/task-endpoints.js +562 -0
  395. package/dist/api/task-endpoints.js.map +1 -0
  396. package/dist/backend/server.js +418 -0
  397. package/dist/backend/server.js.map +1 -0
  398. package/dist/cfn-loop/product-owner/decision-parser.js +356 -0
  399. package/dist/cfn-loop/product-owner/decision-parser.js.map +1 -0
  400. package/dist/cfn-loop/product-owner/index.js +1 -0
  401. package/dist/cfn-loop/product-owner/index.js.map +1 -1
  402. package/dist/cli/agent-command.js +1 -1
  403. package/dist/cli/agent-command.js.map +1 -1
  404. package/dist/cli/agent-completion.js +273 -0
  405. package/dist/cli/agent-completion.js.map +1 -0
  406. package/dist/cli/agent-prompt-builder.js +83 -48
  407. package/dist/cli/agent-prompt-builder.js.map +1 -1
  408. package/dist/cli/agent-spawner.js +499 -0
  409. package/dist/cli/agent-spawner.js.map +1 -0
  410. package/dist/cli/anthropic-client.js +10 -3
  411. package/dist/cli/anthropic-client.js.map +1 -1
  412. package/dist/cli/config-manager.js +91 -109
  413. package/dist/cli/index.js +11 -0
  414. package/dist/cli/index.js.map +1 -1
  415. package/dist/cli/parse-decision-cli.js +268 -0
  416. package/dist/cli/parse-decision-cli.js.map +1 -0
  417. package/dist/cli/post-edit-hook.js +83 -0
  418. package/dist/cli/post-edit-hook.js.map +1 -0
  419. package/dist/cli/pre-edit-hook.js +77 -0
  420. package/dist/cli/pre-edit-hook.js.map +1 -0
  421. package/dist/cli/spawn-agent-cli.js +209 -0
  422. package/dist/cli/spawn-agent-cli.js.map +1 -0
  423. package/dist/coordination/coordination-wrapper.js +383 -0
  424. package/dist/coordination/coordination-wrapper.js.map +1 -0
  425. package/dist/coordination/store-success-criteria.js +68 -0
  426. package/dist/coordination/store-success-criteria.js.map +1 -0
  427. package/dist/coordination/store-task-context.js +65 -0
  428. package/dist/coordination/store-task-context.js.map +1 -0
  429. package/dist/hooks/backup-manager.js +273 -0
  430. package/dist/hooks/backup-manager.js.map +1 -0
  431. package/dist/hooks/post-edit-validator.js +388 -0
  432. package/dist/hooks/post-edit-validator.js.map +1 -0
  433. package/dist/integration/index.js +19 -0
  434. package/dist/integration/index.js.map +1 -0
  435. package/dist/integration/task-mode-adapter.js +297 -0
  436. package/dist/integration/task-mode-adapter.js.map +1 -0
  437. package/dist/integration/trigger-dev-client.js +253 -0
  438. package/dist/integration/trigger-dev-client.js.map +1 -0
  439. package/dist/integration/trigger-dev-webhooks.js +362 -0
  440. package/dist/integration/trigger-dev-webhooks.js.map +1 -0
  441. package/dist/lib/path-validator.js +14 -5
  442. package/dist/lib/path-validator.js.map +1 -1
  443. package/dist/lib/redis-queue-manager.js +5 -1
  444. package/dist/lib/redis-queue-manager.js.map +1 -1
  445. package/dist/middleware/authentication.js +317 -0
  446. package/dist/middleware/authentication.js.map +1 -0
  447. package/dist/services/authentication.js +669 -0
  448. package/dist/services/authentication.js.map +1 -0
  449. package/dist/services/session-management.js +436 -0
  450. package/dist/services/session-management.js.map +1 -0
  451. package/dist/services/skill-deployment.js +8 -6
  452. package/dist/services/skill-deployment.js.map +1 -1
  453. package/dist/services/user-service.js +710 -0
  454. package/dist/services/user-service.js.map +1 -0
  455. package/dist/types/trigger-dev-events.d.js +10 -0
  456. package/dist/types/trigger-dev-events.d.js.map +1 -0
  457. package/docs/README.md +240 -0
  458. package/package.json +13 -4
  459. package/scripts/compare-workflow-performance.sh +556 -0
  460. package/scripts/migrate-to-optimized-workflows.sh +438 -0
  461. package/scripts/organize-docs.sh +338 -0
  462. package/scripts/trigger-dev-setup.sh +267 -0
  463. package/.claude/skills/cfn-docker-redis-coordination/MIGRATION_SUMMARY.md +0 -348
  464. package/.claude/skills/cfn-docker-redis-coordination/README.md +0 -294
  465. package/.claude/skills/cfn-docker-redis-coordination/SKILL.md +0 -435
  466. package/.claude/skills/cfn-docker-redis-coordination/coordinate.sh +0 -650
  467. package/.claude/skills/cfn-docker-redis-coordination/coordinate.sh.backup-1763145142 +0 -641
  468. package/.claude/skills/cfn-docker-redis-coordination/package-lock.json +0 -5259
  469. package/.claude/skills/cfn-docker-redis-coordination/package.json +0 -40
  470. package/.claude/skills/cfn-docker-redis-coordination/src/coordinator.ts +0 -801
  471. package/.claude/skills/cfn-docker-redis-coordination/src/index.ts +0 -42
  472. package/.claude/skills/cfn-docker-redis-coordination/src/types.ts +0 -351
  473. package/.claude/skills/cfn-docker-redis-coordination/tests/coordinator.test.ts +0 -1464
  474. package/.claude/skills/cfn-docker-redis-coordination/tsconfig.json +0 -30
  475. package/.claude/skills/cfn-loop-orchestration/helpers/auto-tune-timeouts.sh +0 -228
  476. package/.claude/skills/cfn-loop-orchestration/helpers/consensus-ts.sh +0 -104
  477. package/.claude/skills/cfn-loop-orchestration/helpers/consensus.sh +0 -94
  478. package/.claude/skills/cfn-loop-orchestration/helpers/context-injection.sh +0 -142
  479. package/.claude/skills/cfn-loop-orchestration/helpers/context-lookup.sh +0 -359
  480. package/.claude/skills/cfn-loop-orchestration/helpers/deliverable-verifier-ts.sh +0 -123
  481. package/.claude/skills/cfn-loop-orchestration/helpers/deliverable-verifier.sh +0 -71
  482. package/.claude/skills/cfn-loop-orchestration/helpers/gate-check.sh +0 -56
  483. package/.claude/skills/cfn-loop-orchestration/helpers/iteration-manager-ts.sh +0 -89
  484. package/.claude/skills/cfn-loop-orchestration/helpers/iteration-manager.sh +0 -87
  485. package/.claude/skills/cfn-loop-orchestration/helpers/orchestrate-ts.sh +0 -104
  486. package/.claude/skills/cfn-loop-orchestration/helpers/parse-test-results.sh +0 -56
  487. package/.claude/skills/cfn-loop-orchestration/helpers/spawn-agents.sh +0 -290
  488. package/.claude/skills/cfn-loop-orchestration/helpers/timeout-calculator-ts.sh +0 -47
  489. package/.claude/skills/cfn-loop-orchestration/helpers/timeout-calculator.sh +0 -51
  490. package/.claude/skills/cfn-loop-orchestration/orchestrate.sh +0 -1345
  491. package/.claude/skills/cfn-redis-coordination/AGENT_LOGGING.md +0 -280
  492. package/.claude/skills/cfn-redis-coordination/BZPOPMIN_FIX_SUMMARY.md +0 -209
  493. package/.claude/skills/cfn-redis-coordination/CENTRALIZED_REDIS_WRAPPER.md +0 -319
  494. package/.claude/skills/cfn-redis-coordination/agent-log.sh.bak +0 -124
  495. package/.claude/skills/cfn-redis-coordination/config.json +0 -61
  496. package/.claude/skills/cfn-redis-coordination/demos/phase4-wake-queue-test-report.md +0 -82
  497. package/.claude/skills/cfn-redis-coordination/demos/test-bzpopmin-fix.sh +0 -274
  498. package/.claude/skills/cfn-redis-coordination/demos/test-cancel-swarm.sh +0 -0
  499. package/.claude/skills/cfn-redis-coordination/docs/migration/PHASE_3_REDIS_COORDINATION_COMPLETION_REPORT.md +0 -553
  500. package/.claude/skills/cfn-redis-coordination/jest.config.js +0 -23
  501. package/.claude/skills/cfn-redis-coordination/package-lock.json +0 -5272
  502. package/.claude/skills/cfn-redis-coordination/package.json +0 -45
  503. package/.claude/skills/cfn-redis-coordination/src/agent-logger.ts +0 -446
  504. package/.claude/skills/cfn-redis-coordination/src/agent-recovery.ts +0 -454
  505. package/.claude/skills/cfn-redis-coordination/src/completion-reporter.ts +0 -396
  506. package/.claude/skills/cfn-redis-coordination/src/context-manager.ts +0 -327
  507. package/.claude/skills/cfn-redis-coordination/src/index.ts +0 -82
  508. package/.claude/skills/cfn-redis-coordination/src/mode-detector.ts +0 -155
  509. package/.claude/skills/cfn-redis-coordination/src/redis/redis-client.ts +0 -305
  510. package/.claude/skills/cfn-redis-coordination/src/redis/redis-functions.ts +0 -283
  511. package/.claude/skills/cfn-redis-coordination/src/redis-client.ts +0 -654
  512. package/.claude/skills/cfn-redis-coordination/src/result-collector.ts +0 -437
  513. package/.claude/skills/cfn-redis-coordination/src/swarm-manager.ts +0 -494
  514. package/.claude/skills/cfn-redis-coordination/src/task-analyzer.ts +0 -404
  515. package/.claude/skills/cfn-redis-coordination/src/task-executor.ts +0 -423
  516. package/.claude/skills/cfn-redis-coordination/src/types.ts +0 -235
  517. package/.claude/skills/cfn-redis-coordination/src/waiting-coordinator.ts +0 -587
  518. package/.claude/skills/cfn-redis-coordination/store-success-criteria.sh +0 -85
  519. package/.claude/skills/cfn-redis-coordination/test-connection-attempts.js +0 -70
  520. package/.claude/skills/cfn-redis-coordination/test-mode-simple.js +0 -121
  521. package/.claude/skills/cfn-redis-coordination/test-redis-check.js +0 -84
  522. package/.claude/skills/cfn-redis-coordination/test-task-mode-redis.cjs +0 -391
  523. package/.claude/skills/cfn-redis-coordination/tests/coordination.test.ts +0 -788
  524. package/.claude/skills/cfn-redis-coordination/update-all-scripts.sh +0 -67
  525. package/claude-assets/agents/cfn-dev-team/coordinators/cfn-v3-coordinator.md +0 -980
  526. package/claude-assets/agents/typescript-specialist.md +0 -280
  527. package/claude-assets/skills/cfn-docker-redis-coordination/MIGRATION_SUMMARY.md +0 -348
  528. package/claude-assets/skills/cfn-docker-redis-coordination/README.md +0 -294
  529. package/claude-assets/skills/cfn-docker-redis-coordination/SKILL.md +0 -435
  530. package/claude-assets/skills/cfn-docker-redis-coordination/coordinate.sh +0 -650
  531. package/claude-assets/skills/cfn-docker-redis-coordination/coordinate.sh.backup-1763145142 +0 -641
  532. package/claude-assets/skills/cfn-docker-redis-coordination/jest.config.js +0 -37
  533. package/claude-assets/skills/cfn-docker-redis-coordination/package-lock.json +0 -5259
  534. package/claude-assets/skills/cfn-docker-redis-coordination/package.json +0 -40
  535. package/claude-assets/skills/cfn-docker-redis-coordination/src/coordinator.ts +0 -801
  536. package/claude-assets/skills/cfn-docker-redis-coordination/src/index.ts +0 -42
  537. package/claude-assets/skills/cfn-docker-redis-coordination/src/types.ts +0 -351
  538. package/claude-assets/skills/cfn-docker-redis-coordination/tests/coordinator.test.ts +0 -1464
  539. package/claude-assets/skills/cfn-loop-orchestration/helpers/auto-tune-timeouts.sh +0 -228
  540. package/claude-assets/skills/cfn-loop-orchestration/helpers/consensus-ts.sh +0 -104
  541. package/claude-assets/skills/cfn-loop-orchestration/helpers/consensus.sh +0 -94
  542. package/claude-assets/skills/cfn-loop-orchestration/helpers/context-injection.sh +0 -142
  543. package/claude-assets/skills/cfn-loop-orchestration/helpers/context-lookup.sh +0 -359
  544. package/claude-assets/skills/cfn-loop-orchestration/helpers/deliverable-verifier-ts.sh +0 -123
  545. package/claude-assets/skills/cfn-loop-orchestration/helpers/deliverable-verifier.sh +0 -71
  546. package/claude-assets/skills/cfn-loop-orchestration/helpers/gate-check.sh +0 -56
  547. package/claude-assets/skills/cfn-loop-orchestration/helpers/iteration-manager-ts.sh +0 -89
  548. package/claude-assets/skills/cfn-loop-orchestration/helpers/iteration-manager.sh +0 -87
  549. package/claude-assets/skills/cfn-loop-orchestration/helpers/orchestrate-ts.sh +0 -104
  550. package/claude-assets/skills/cfn-loop-orchestration/helpers/parse-test-results.sh +0 -56
  551. package/claude-assets/skills/cfn-loop-orchestration/helpers/spawn-agents.sh +0 -290
  552. package/claude-assets/skills/cfn-loop-orchestration/helpers/timeout-calculator-ts.sh +0 -47
  553. package/claude-assets/skills/cfn-loop-orchestration/helpers/timeout-calculator.sh +0 -51
  554. package/claude-assets/skills/cfn-loop-orchestration/orchestrate.sh +0 -1345
  555. package/claude-assets/skills/cfn-redis-cleanup/cleanup-redis.sh +0 -130
  556. package/claude-assets/skills/cfn-redis-coordination/AGENT_LOGGING.md +0 -280
  557. package/claude-assets/skills/cfn-redis-coordination/BZPOPMIN_FIX_SUMMARY.md +0 -209
  558. package/claude-assets/skills/cfn-redis-coordination/CENTRALIZED_REDIS_WRAPPER.md +0 -319
  559. package/claude-assets/skills/cfn-redis-coordination/agent-log.sh.bak +0 -124
  560. package/claude-assets/skills/cfn-redis-coordination/config.json +0 -61
  561. package/claude-assets/skills/cfn-redis-coordination/demos/phase4-wake-queue-test-report.md +0 -82
  562. package/claude-assets/skills/cfn-redis-coordination/demos/test-bzpopmin-fix.sh +0 -274
  563. package/claude-assets/skills/cfn-redis-coordination/demos/test-cancel-swarm.sh +0 -0
  564. package/claude-assets/skills/cfn-redis-coordination/docs/migration/PHASE_3_REDIS_COORDINATION_COMPLETION_REPORT.md +0 -553
  565. package/claude-assets/skills/cfn-redis-coordination/jest.config.js +0 -23
  566. package/claude-assets/skills/cfn-redis-coordination/package-lock.json +0 -5272
  567. package/claude-assets/skills/cfn-redis-coordination/package.json +0 -45
  568. package/claude-assets/skills/cfn-redis-coordination/src/agent-logger.ts +0 -446
  569. package/claude-assets/skills/cfn-redis-coordination/src/agent-recovery.ts +0 -454
  570. package/claude-assets/skills/cfn-redis-coordination/src/completion-reporter.ts +0 -396
  571. package/claude-assets/skills/cfn-redis-coordination/src/context-manager.ts +0 -327
  572. package/claude-assets/skills/cfn-redis-coordination/src/index.ts +0 -82
  573. package/claude-assets/skills/cfn-redis-coordination/src/mode-detector.ts +0 -155
  574. package/claude-assets/skills/cfn-redis-coordination/src/redis/redis-client.ts +0 -305
  575. package/claude-assets/skills/cfn-redis-coordination/src/redis/redis-functions.ts +0 -283
  576. package/claude-assets/skills/cfn-redis-coordination/src/redis-client.ts +0 -654
  577. package/claude-assets/skills/cfn-redis-coordination/src/result-collector.ts +0 -437
  578. package/claude-assets/skills/cfn-redis-coordination/src/swarm-manager.ts +0 -494
  579. package/claude-assets/skills/cfn-redis-coordination/src/task-analyzer.ts +0 -404
  580. package/claude-assets/skills/cfn-redis-coordination/src/task-executor.ts +0 -423
  581. package/claude-assets/skills/cfn-redis-coordination/src/types.ts +0 -235
  582. package/claude-assets/skills/cfn-redis-coordination/src/waiting-coordinator.ts +0 -587
  583. package/claude-assets/skills/cfn-redis-coordination/store-success-criteria.sh +0 -85
  584. package/claude-assets/skills/cfn-redis-coordination/test-connection-attempts.js +0 -70
  585. package/claude-assets/skills/cfn-redis-coordination/test-mode-simple.js +0 -121
  586. package/claude-assets/skills/cfn-redis-coordination/test-redis-check.js +0 -84
  587. package/claude-assets/skills/cfn-redis-coordination/test-task-mode-redis.cjs +0 -391
  588. package/claude-assets/skills/cfn-redis-coordination/tests/coordination.test.ts +0 -788
  589. package/claude-assets/skills/cfn-redis-coordination/update-all-scripts.sh +0 -67
  590. package/claude-assets/skills/cfn-redis-data-extraction/SKILL.md +0 -442
  591. package/claude-assets/skills/cfn-redis-data-extraction/extract.sh +0 -306
  592. package/dist/coordination/index.js +0 -25
  593. package/dist/coordination/index.js.map +0 -1
  594. package/docs/BUG_19_MEMORY_LEAK_TASK_MODE.md +0 -405
  595. package/docs/MEMORY_CLEANUP_GUIDE.md +0 -358
  596. package/docs/MEMORY_LEAK_FIX_SUMMARY.md +0 -322
  597. package/docs/REDIS_CLEANUP_EXECUTIVE_SUMMARY.md +0 -319
  598. package/docs/REDIS_CLEANUP_VERIFICATION_REPORT.md +0 -574
  599. /package/.claude/skills/cfn-loop-orchestration/{inject-loop-context.sh → archive/legacy-bash/inject-loop-context.sh} +0 -0
  600. /package/.claude/skills/cfn-loop-orchestration/{monitor-execution.sh → archive/legacy-bash/monitor-execution.sh} +0 -0
  601. /package/.claude/skills/cfn-redis-coordination/{agent-log.sh → agent-log.sh.backup} +0 -0
  602. /package/.claude/skills/cfn-redis-coordination/{agent-recovery.sh → agent-recovery.sh.backup} +0 -0
  603. /package/.claude/skills/cfn-redis-coordination/{analyze-task-complexity.sh → analyze-task-complexity.sh.backup} +0 -0
  604. /package/.claude/skills/cfn-redis-coordination/bash-wrappers/{store-context.sh → store-context.sh.backup} +0 -0
  605. /package/.claude/skills/cfn-redis-coordination/{cancel-swarm.sh → cancel-swarm.sh.backup} +0 -0
  606. /package/.claude/skills/cfn-redis-coordination/{cfn-loop-exec.sh → cfn-loop-exec.sh.backup} +0 -0
  607. /package/.claude/skills/cfn-redis-coordination/{cfn-loop-relaunch.sh → cfn-loop-relaunch.sh.backup} +0 -0
  608. /package/.claude/skills/cfn-redis-coordination/{collect-confidence-scores.sh → collect-confidence-scores.sh.backup} +0 -0
  609. /package/.claude/skills/cfn-redis-coordination/{collect-results.sh → collect-results.sh.backup} +0 -0
  610. /package/.claude/skills/cfn-redis-coordination/{complete-swarm.sh → complete-swarm.sh.backup} +0 -0
  611. /package/.claude/skills/cfn-redis-coordination/{get-context.sh → get-context.sh.backup} +0 -0
  612. /package/.claude/skills/cfn-redis-coordination/{get-success-criteria.sh → get-success-criteria.sh.backup} +0 -0
  613. /package/.claude/skills/cfn-redis-coordination/{invoke-waiting-mode.sh → invoke-waiting-mode.sh.backup} +0 -0
  614. /package/.claude/skills/cfn-redis-coordination/{redis-cli-wrapper.sh → redis-cli-wrapper.sh.backup} +0 -0
  615. /package/.claude/skills/cfn-redis-coordination/{redis-functions.sh → redis-functions.sh.backup} +0 -0
  616. /package/.claude/skills/cfn-redis-coordination/{report-completion.sh → report-completion.sh.backup} +0 -0
  617. /package/.claude/skills/cfn-redis-coordination/{store-context.sh → store-context.sh.backup} +0 -0
  618. /package/claude-assets/skills/cfn-loop-orchestration/{inject-loop-context.sh → archive/legacy-bash/inject-loop-context.sh} +0 -0
  619. /package/claude-assets/skills/cfn-loop-orchestration/{monitor-execution.sh → archive/legacy-bash/monitor-execution.sh} +0 -0
  620. /package/claude-assets/skills/cfn-redis-coordination/{agent-log.sh → agent-log.sh.backup} +0 -0
  621. /package/claude-assets/skills/cfn-redis-coordination/{agent-recovery.sh → agent-recovery.sh.backup} +0 -0
  622. /package/claude-assets/skills/cfn-redis-coordination/{analyze-task-complexity.sh → analyze-task-complexity.sh.backup} +0 -0
  623. /package/claude-assets/skills/cfn-redis-coordination/bash-wrappers/{store-context.sh → store-context.sh.backup} +0 -0
  624. /package/claude-assets/skills/cfn-redis-coordination/{cancel-swarm.sh → cancel-swarm.sh.backup} +0 -0
  625. /package/claude-assets/skills/cfn-redis-coordination/{cfn-loop-exec.sh → cfn-loop-exec.sh.backup} +0 -0
  626. /package/claude-assets/skills/cfn-redis-coordination/{cfn-loop-relaunch.sh → cfn-loop-relaunch.sh.backup} +0 -0
  627. /package/claude-assets/skills/cfn-redis-coordination/{collect-confidence-scores.sh → collect-confidence-scores.sh.backup} +0 -0
  628. /package/claude-assets/skills/cfn-redis-coordination/{collect-results.sh → collect-results.sh.backup} +0 -0
  629. /package/claude-assets/skills/cfn-redis-coordination/{complete-swarm.sh → complete-swarm.sh.backup} +0 -0
  630. /package/claude-assets/skills/cfn-redis-coordination/{get-context.sh → get-context.sh.backup} +0 -0
  631. /package/claude-assets/skills/cfn-redis-coordination/{get-success-criteria.sh → get-success-criteria.sh.backup} +0 -0
  632. /package/claude-assets/skills/cfn-redis-coordination/{invoke-waiting-mode.sh → invoke-waiting-mode.sh.backup} +0 -0
  633. /package/claude-assets/skills/cfn-redis-coordination/{redis-cli-wrapper.sh → redis-cli-wrapper.sh.backup} +0 -0
  634. /package/claude-assets/skills/cfn-redis-coordination/{redis-functions.sh → redis-functions.sh.backup} +0 -0
  635. /package/claude-assets/skills/cfn-redis-coordination/{report-completion.sh → report-completion.sh.backup} +0 -0
  636. /package/claude-assets/skills/cfn-redis-coordination/{store-context.sh → store-context.sh.backup} +0 -0
@@ -0,0 +1,68 @@
1
+ import Redis from 'ioredis';
2
+ const argValue = (flag)=>{
3
+ const index = process.argv.indexOf(flag);
4
+ if (index === -1 || index + 1 >= process.argv.length) {
5
+ return undefined;
6
+ }
7
+ return process.argv[index + 1];
8
+ };
9
+ const parseArgs = ()=>{
10
+ const taskId = argValue('--task-id');
11
+ const criteriaRaw = argValue('--criteria');
12
+ if (!taskId) throw new Error('--task-id is required');
13
+ if (!/^[A-Za-z0-9_-]+$/.test(taskId)) {
14
+ throw new Error('Invalid task id format; use alphanumeric, dash, underscore only');
15
+ }
16
+ if (!criteriaRaw) throw new Error('--criteria is required');
17
+ return {
18
+ taskId,
19
+ criteriaRaw,
20
+ redisHost: process.env.REDIS_HOST || 'localhost',
21
+ redisPort: Number(process.env.REDIS_PORT || 6379),
22
+ ttlSeconds: 86400
23
+ };
24
+ };
25
+ const validateCriteria = (criteria)=>{
26
+ if (!Array.isArray(criteria.test_suites)) {
27
+ throw new Error('success criteria must include test_suites array');
28
+ }
29
+ if (criteria.test_suites.length === 0) {
30
+ throw new Error('test_suites cannot be empty');
31
+ }
32
+ };
33
+ const storeCriteria = async (args)=>{
34
+ let parsed;
35
+ try {
36
+ parsed = JSON.parse(args.criteriaRaw);
37
+ } catch {
38
+ throw new Error('criteria is not valid JSON');
39
+ }
40
+ validateCriteria(parsed);
41
+ const redis = new Redis({
42
+ host: args.redisHost,
43
+ port: args.redisPort,
44
+ lazyConnect: true
45
+ });
46
+ try {
47
+ await redis.connect();
48
+ const key = `swarm:${args.taskId}:context`;
49
+ const serialized = JSON.stringify(parsed);
50
+ await redis.hset(key, 'success-criteria', serialized);
51
+ await redis.expire(key, args.ttlSeconds);
52
+ console.log(`✅ Success criteria stored in Redis: ${key}`);
53
+ console.log(` Test suites: ${parsed.test_suites.length}`);
54
+ console.log(` TTL: ${args.ttlSeconds} seconds`);
55
+ } finally{
56
+ redis.disconnect();
57
+ }
58
+ };
59
+ const main = async ()=>{
60
+ const args = parseArgs();
61
+ await storeCriteria(args);
62
+ };
63
+ main().catch((error)=>{
64
+ console.error(`❌ Failed to store success criteria: ${error.message}`);
65
+ process.exitCode = 1;
66
+ });
67
+
68
+ //# sourceMappingURL=store-success-criteria.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/coordination/store-success-criteria.ts"],"sourcesContent":["import Redis from 'ioredis';\n\ninterface SuccessCriteriaArgs {\n taskId: string;\n criteriaRaw: string;\n redisHost: string;\n redisPort: number;\n ttlSeconds: number;\n}\n\ntype TestSuite = {\n name: string;\n command: string;\n required?: boolean;\n pass_threshold?: number;\n};\n\ninterface SuccessCriteria {\n test_suites: TestSuite[];\n gate_mode?: string;\n metadata?: Record<string, unknown>;\n}\n\nconst argValue = (flag: string): string | undefined => {\n const index = process.argv.indexOf(flag);\n if (index === -1 || index + 1 >= process.argv.length) {\n return undefined;\n }\n return process.argv[index + 1];\n};\n\nconst parseArgs = (): SuccessCriteriaArgs => {\n const taskId = argValue('--task-id');\n const criteriaRaw = argValue('--criteria');\n\n if (!taskId) throw new Error('--task-id is required');\n if (!/^[A-Za-z0-9_-]+$/.test(taskId)) {\n throw new Error('Invalid task id format; use alphanumeric, dash, underscore only');\n }\n\n if (!criteriaRaw) throw new Error('--criteria is required');\n\n return {\n taskId,\n criteriaRaw,\n redisHost: process.env.REDIS_HOST || 'localhost',\n redisPort: Number(process.env.REDIS_PORT || 6379),\n ttlSeconds: 86400,\n };\n};\n\nconst validateCriteria = (criteria: SuccessCriteria) => {\n if (!Array.isArray(criteria.test_suites)) {\n throw new Error('success criteria must include test_suites array');\n }\n if (criteria.test_suites.length === 0) {\n throw new Error('test_suites cannot be empty');\n }\n};\n\nconst storeCriteria = async (args: SuccessCriteriaArgs) => {\n let parsed: SuccessCriteria;\n try {\n parsed = JSON.parse(args.criteriaRaw) as SuccessCriteria;\n } catch {\n throw new Error('criteria is not valid JSON');\n }\n\n validateCriteria(parsed);\n\n const redis = new Redis({\n host: args.redisHost,\n port: args.redisPort,\n lazyConnect: true,\n });\n\n try {\n await redis.connect();\n const key = `swarm:${args.taskId}:context`;\n const serialized = JSON.stringify(parsed);\n\n await redis.hset(key, 'success-criteria', serialized);\n await redis.expire(key, args.ttlSeconds);\n\n console.log(`✅ Success criteria stored in Redis: ${key}`);\n console.log(` Test suites: ${parsed.test_suites.length}`);\n console.log(` TTL: ${args.ttlSeconds} seconds`);\n } finally {\n redis.disconnect();\n }\n};\n\nconst main = async () => {\n const args = parseArgs();\n await storeCriteria(args);\n};\n\nmain().catch((error) => {\n console.error(`❌ Failed to store success criteria: ${error.message}`);\n process.exitCode = 1;\n});\n"],"names":["Redis","argValue","flag","index","process","argv","indexOf","length","undefined","parseArgs","taskId","criteriaRaw","Error","test","redisHost","env","REDIS_HOST","redisPort","Number","REDIS_PORT","ttlSeconds","validateCriteria","criteria","Array","isArray","test_suites","storeCriteria","args","parsed","JSON","parse","redis","host","port","lazyConnect","connect","key","serialized","stringify","hset","expire","console","log","disconnect","main","catch","error","message","exitCode"],"mappings":"AAAA,OAAOA,WAAW,UAAU;AAuB5B,MAAMC,WAAW,CAACC;IAChB,MAAMC,QAAQC,QAAQC,IAAI,CAACC,OAAO,CAACJ;IACnC,IAAIC,UAAU,CAAC,KAAKA,QAAQ,KAAKC,QAAQC,IAAI,CAACE,MAAM,EAAE;QACpD,OAAOC;IACT;IACA,OAAOJ,QAAQC,IAAI,CAACF,QAAQ,EAAE;AAChC;AAEA,MAAMM,YAAY;IAChB,MAAMC,SAAST,SAAS;IACxB,MAAMU,cAAcV,SAAS;IAE7B,IAAI,CAACS,QAAQ,MAAM,IAAIE,MAAM;IAC7B,IAAI,CAAC,mBAAmBC,IAAI,CAACH,SAAS;QACpC,MAAM,IAAIE,MAAM;IAClB;IAEA,IAAI,CAACD,aAAa,MAAM,IAAIC,MAAM;IAElC,OAAO;QACLF;QACAC;QACAG,WAAWV,QAAQW,GAAG,CAACC,UAAU,IAAI;QACrCC,WAAWC,OAAOd,QAAQW,GAAG,CAACI,UAAU,IAAI;QAC5CC,YAAY;IACd;AACF;AAEA,MAAMC,mBAAmB,CAACC;IACxB,IAAI,CAACC,MAAMC,OAAO,CAACF,SAASG,WAAW,GAAG;QACxC,MAAM,IAAIb,MAAM;IAClB;IACA,IAAIU,SAASG,WAAW,CAAClB,MAAM,KAAK,GAAG;QACrC,MAAM,IAAIK,MAAM;IAClB;AACF;AAEA,MAAMc,gBAAgB,OAAOC;IAC3B,IAAIC;IACJ,IAAI;QACFA,SAASC,KAAKC,KAAK,CAACH,KAAKhB,WAAW;IACtC,EAAE,OAAM;QACN,MAAM,IAAIC,MAAM;IAClB;IAEAS,iBAAiBO;IAEjB,MAAMG,QAAQ,IAAI/B,MAAM;QACtBgC,MAAML,KAAKb,SAAS;QACpBmB,MAAMN,KAAKV,SAAS;QACpBiB,aAAa;IACf;IAEA,IAAI;QACF,MAAMH,MAAMI,OAAO;QACnB,MAAMC,MAAM,CAAC,MAAM,EAAET,KAAKjB,MAAM,CAAC,QAAQ,CAAC;QAC1C,MAAM2B,aAAaR,KAAKS,SAAS,CAACV;QAElC,MAAMG,MAAMQ,IAAI,CAACH,KAAK,oBAAoBC;QAC1C,MAAMN,MAAMS,MAAM,CAACJ,KAAKT,KAAKP,UAAU;QAEvCqB,QAAQC,GAAG,CAAC,CAAC,oCAAoC,EAAEN,KAAK;QACxDK,QAAQC,GAAG,CAAC,CAAC,gBAAgB,EAAEd,OAAOH,WAAW,CAAClB,MAAM,EAAE;QAC1DkC,QAAQC,GAAG,CAAC,CAAC,QAAQ,EAAEf,KAAKP,UAAU,CAAC,QAAQ,CAAC;IAClD,SAAU;QACRW,MAAMY,UAAU;IAClB;AACF;AAEA,MAAMC,OAAO;IACX,MAAMjB,OAAOlB;IACb,MAAMiB,cAAcC;AACtB;AAEAiB,OAAOC,KAAK,CAAC,CAACC;IACZL,QAAQK,KAAK,CAAC,CAAC,oCAAoC,EAAEA,MAAMC,OAAO,EAAE;IACpE3C,QAAQ4C,QAAQ,GAAG;AACrB"}
@@ -0,0 +1,65 @@
1
+ import Redis from 'ioredis';
2
+ const argValue = (flag)=>{
3
+ const index = process.argv.indexOf(flag);
4
+ if (index === -1 || index + 1 >= process.argv.length) {
5
+ return undefined;
6
+ }
7
+ return process.argv[index + 1];
8
+ };
9
+ const parseArgs = ()=>{
10
+ const taskId = argValue('--task-id');
11
+ const description = argValue('--description');
12
+ const mode = argValue('--mode');
13
+ const maxIterationsRaw = argValue('--max-iterations');
14
+ if (!taskId) throw new Error('--task-id is required');
15
+ if (!/^[A-Za-z0-9_-]+$/.test(taskId)) {
16
+ throw new Error('Invalid task id format; use alphanumeric, dash, underscore only');
17
+ }
18
+ if (!description) throw new Error('--description is required');
19
+ if (!mode) throw new Error('--mode is required');
20
+ if (!maxIterationsRaw) throw new Error('--max-iterations is required');
21
+ const maxIterations = Number(maxIterationsRaw);
22
+ if (!Number.isFinite(maxIterations) || maxIterations <= 0) {
23
+ throw new Error('--max-iterations must be a positive number');
24
+ }
25
+ return {
26
+ taskId,
27
+ description,
28
+ mode,
29
+ maxIterations,
30
+ redisHost: process.env.REDIS_HOST || 'localhost',
31
+ redisPort: Number(process.env.REDIS_PORT || 6379),
32
+ ttlSeconds: 86400
33
+ };
34
+ };
35
+ const storeContext = async (args)=>{
36
+ const redis = new Redis({
37
+ host: args.redisHost,
38
+ port: args.redisPort,
39
+ lazyConnect: true
40
+ });
41
+ try {
42
+ await redis.connect();
43
+ const key = `swarm:${args.taskId}:context`;
44
+ await redis.hset(key, {
45
+ 'task_description': args.description,
46
+ 'mode': args.mode,
47
+ 'max_iterations': String(args.maxIterations)
48
+ });
49
+ await redis.expire(key, args.ttlSeconds);
50
+ console.log(`✅ Task context stored in Redis: ${key}`);
51
+ console.log(` TTL: ${args.ttlSeconds} seconds`);
52
+ } finally{
53
+ redis.disconnect();
54
+ }
55
+ };
56
+ const main = async ()=>{
57
+ const args = parseArgs();
58
+ await storeContext(args);
59
+ };
60
+ main().catch((error)=>{
61
+ console.error(`❌ Failed to store task context: ${error.message}`);
62
+ process.exitCode = 1;
63
+ });
64
+
65
+ //# sourceMappingURL=store-task-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/coordination/store-task-context.ts"],"sourcesContent":["import Redis from 'ioredis';\n\ninterface TaskContextArgs {\n taskId: string;\n description: string;\n mode: string;\n maxIterations: number;\n redisHost: string;\n redisPort: number;\n ttlSeconds: number;\n}\n\nconst argValue = (flag: string): string | undefined => {\n const index = process.argv.indexOf(flag);\n if (index === -1 || index + 1 >= process.argv.length) {\n return undefined;\n }\n return process.argv[index + 1];\n};\n\nconst parseArgs = (): TaskContextArgs => {\n const taskId = argValue('--task-id');\n const description = argValue('--description');\n const mode = argValue('--mode');\n const maxIterationsRaw = argValue('--max-iterations');\n\n if (!taskId) throw new Error('--task-id is required');\n if (!/^[A-Za-z0-9_-]+$/.test(taskId)) {\n throw new Error('Invalid task id format; use alphanumeric, dash, underscore only');\n }\n\n if (!description) throw new Error('--description is required');\n if (!mode) throw new Error('--mode is required');\n if (!maxIterationsRaw) throw new Error('--max-iterations is required');\n\n const maxIterations = Number(maxIterationsRaw);\n if (!Number.isFinite(maxIterations) || maxIterations <= 0) {\n throw new Error('--max-iterations must be a positive number');\n }\n\n return {\n taskId,\n description,\n mode,\n maxIterations,\n redisHost: process.env.REDIS_HOST || 'localhost',\n redisPort: Number(process.env.REDIS_PORT || 6379),\n ttlSeconds: 86400,\n };\n};\n\nconst storeContext = async (args: TaskContextArgs) => {\n const redis = new Redis({\n host: args.redisHost,\n port: args.redisPort,\n lazyConnect: true,\n });\n\n try {\n await redis.connect();\n const key = `swarm:${args.taskId}:context`;\n\n await redis.hset(key, {\n 'task_description': args.description,\n 'mode': args.mode,\n 'max_iterations': String(args.maxIterations),\n });\n\n await redis.expire(key, args.ttlSeconds);\n\n console.log(`✅ Task context stored in Redis: ${key}`);\n console.log(` TTL: ${args.ttlSeconds} seconds`);\n } finally {\n redis.disconnect();\n }\n};\n\nconst main = async () => {\n const args = parseArgs();\n await storeContext(args);\n};\n\nmain().catch((error) => {\n console.error(`❌ Failed to store task context: ${error.message}`);\n process.exitCode = 1;\n});\n"],"names":["Redis","argValue","flag","index","process","argv","indexOf","length","undefined","parseArgs","taskId","description","mode","maxIterationsRaw","Error","test","maxIterations","Number","isFinite","redisHost","env","REDIS_HOST","redisPort","REDIS_PORT","ttlSeconds","storeContext","args","redis","host","port","lazyConnect","connect","key","hset","String","expire","console","log","disconnect","main","catch","error","message","exitCode"],"mappings":"AAAA,OAAOA,WAAW,UAAU;AAY5B,MAAMC,WAAW,CAACC;IAChB,MAAMC,QAAQC,QAAQC,IAAI,CAACC,OAAO,CAACJ;IACnC,IAAIC,UAAU,CAAC,KAAKA,QAAQ,KAAKC,QAAQC,IAAI,CAACE,MAAM,EAAE;QACpD,OAAOC;IACT;IACA,OAAOJ,QAAQC,IAAI,CAACF,QAAQ,EAAE;AAChC;AAEA,MAAMM,YAAY;IAChB,MAAMC,SAAST,SAAS;IACxB,MAAMU,cAAcV,SAAS;IAC7B,MAAMW,OAAOX,SAAS;IACtB,MAAMY,mBAAmBZ,SAAS;IAElC,IAAI,CAACS,QAAQ,MAAM,IAAII,MAAM;IAC7B,IAAI,CAAC,mBAAmBC,IAAI,CAACL,SAAS;QACpC,MAAM,IAAII,MAAM;IAClB;IAEA,IAAI,CAACH,aAAa,MAAM,IAAIG,MAAM;IAClC,IAAI,CAACF,MAAM,MAAM,IAAIE,MAAM;IAC3B,IAAI,CAACD,kBAAkB,MAAM,IAAIC,MAAM;IAEvC,MAAME,gBAAgBC,OAAOJ;IAC7B,IAAI,CAACI,OAAOC,QAAQ,CAACF,kBAAkBA,iBAAiB,GAAG;QACzD,MAAM,IAAIF,MAAM;IAClB;IAEA,OAAO;QACLJ;QACAC;QACAC;QACAI;QACAG,WAAWf,QAAQgB,GAAG,CAACC,UAAU,IAAI;QACrCC,WAAWL,OAAOb,QAAQgB,GAAG,CAACG,UAAU,IAAI;QAC5CC,YAAY;IACd;AACF;AAEA,MAAMC,eAAe,OAAOC;IAC1B,MAAMC,QAAQ,IAAI3B,MAAM;QACtB4B,MAAMF,KAAKP,SAAS;QACpBU,MAAMH,KAAKJ,SAAS;QACpBQ,aAAa;IACf;IAEA,IAAI;QACF,MAAMH,MAAMI,OAAO;QACnB,MAAMC,MAAM,CAAC,MAAM,EAAEN,KAAKhB,MAAM,CAAC,QAAQ,CAAC;QAE1C,MAAMiB,MAAMM,IAAI,CAACD,KAAK;YACpB,oBAAoBN,KAAKf,WAAW;YACpC,QAAQe,KAAKd,IAAI;YACjB,kBAAkBsB,OAAOR,KAAKV,aAAa;QAC7C;QAEA,MAAMW,MAAMQ,MAAM,CAACH,KAAKN,KAAKF,UAAU;QAEvCY,QAAQC,GAAG,CAAC,CAAC,gCAAgC,EAAEL,KAAK;QACpDI,QAAQC,GAAG,CAAC,CAAC,QAAQ,EAAEX,KAAKF,UAAU,CAAC,QAAQ,CAAC;IAClD,SAAU;QACRG,MAAMW,UAAU;IAClB;AACF;AAEA,MAAMC,OAAO;IACX,MAAMb,OAAOjB;IACb,MAAMgB,aAAaC;AACrB;AAEAa,OAAOC,KAAK,CAAC,CAACC;IACZL,QAAQK,KAAK,CAAC,CAAC,gCAAgC,EAAEA,MAAMC,OAAO,EAAE;IAChEtC,QAAQuC,QAAQ,GAAG;AACrB"}
@@ -0,0 +1,273 @@
1
+ /**
2
+ * Backup Manager - File lifecycle backup creation and restoration
3
+ * Manages pre-edit backups with metadata, hash generation, and cleanup
4
+ */ import * as fs from 'fs/promises';
5
+ import * as path from 'path';
6
+ import * as crypto from 'crypto';
7
+ export class BackupManager {
8
+ config;
9
+ projectRoot;
10
+ constructor(projectRoot = process.cwd(), config){
11
+ this.projectRoot = projectRoot;
12
+ this.config = {
13
+ retentionHours: config?.retentionHours ?? 24,
14
+ maxBackups: config?.maxBackups ?? 10,
15
+ backupDir: config?.backupDir ?? '.backups'
16
+ };
17
+ }
18
+ /**
19
+ * Generate SHA256 hash of file content (8 char truncated)
20
+ */ async generateFileHash(filePath) {
21
+ try {
22
+ const content = await fs.readFile(filePath);
23
+ const hash = crypto.createHash('sha256').update(content).digest('hex');
24
+ return hash.substring(0, 8);
25
+ } catch (error) {
26
+ throw new Error(`Failed to generate hash for ${filePath}: ${error}`);
27
+ }
28
+ }
29
+ /**
30
+ * Count lines in a file
31
+ */ async countLines(filePath) {
32
+ try {
33
+ const content = await fs.readFile(filePath, 'utf-8');
34
+ return content.split('\n').length - 1; // Subtract 1 for trailing newline
35
+ } catch {
36
+ return 0;
37
+ }
38
+ }
39
+ /**
40
+ * Get file size in bytes
41
+ */ async getFileSize(filePath) {
42
+ try {
43
+ const stat = await fs.stat(filePath);
44
+ return stat.size;
45
+ } catch {
46
+ return 0;
47
+ }
48
+ }
49
+ /**
50
+ * Create a backup of a file before editing
51
+ */ async createBackup(filePath, agentId) {
52
+ // Validate inputs
53
+ if (!filePath) {
54
+ throw new Error('File path is required');
55
+ }
56
+ if (!agentId) {
57
+ throw new Error('Agent ID is required');
58
+ }
59
+ // Check if file exists
60
+ try {
61
+ await fs.stat(filePath);
62
+ } catch {
63
+ throw new Error(`File does not exist: ${filePath}`);
64
+ }
65
+ try {
66
+ // Generate timestamp and hash
67
+ const timestamp = new Date().toISOString();
68
+ const fileHash = await this.generateFileHash(filePath);
69
+ const unixTimestamp = Date.now();
70
+ // Create backup directory structure: .backups/agent-id/timestamp_hash/
71
+ const backupBaseDir = path.join(this.projectRoot, this.config.backupDir, agentId);
72
+ const backupName = `${unixTimestamp}_${fileHash}`;
73
+ const fullBackupPath = path.join(backupBaseDir, backupName);
74
+ // Create backup directory
75
+ await fs.mkdir(fullBackupPath, {
76
+ recursive: true
77
+ });
78
+ // Copy original file to backup location
79
+ const originalFileName = path.basename(filePath);
80
+ const backupFilePath = path.join(fullBackupPath, originalFileName);
81
+ await fs.copyFile(filePath, backupFilePath);
82
+ // Gather metadata
83
+ const fileSize = await this.getFileSize(filePath);
84
+ const lineCount = await this.countLines(filePath);
85
+ // Create metadata file
86
+ const metadata = {
87
+ timestamp,
88
+ agentId,
89
+ originalFile: filePath,
90
+ fileHash,
91
+ backupPath: fullBackupPath,
92
+ createdAt: new Date().toISOString(),
93
+ fileSize,
94
+ lineCount
95
+ };
96
+ const metadataPath = path.join(fullBackupPath, 'metadata.json');
97
+ await fs.writeFile(metadataPath, JSON.stringify(metadata, null, 2));
98
+ // Create revert script
99
+ const revertScriptPath = path.join(fullBackupPath, 'revert.sh');
100
+ const revertScript = `#!/bin/bash
101
+ # Auto-generated revert script for ${filePath}
102
+ set -euo pipefail
103
+
104
+ echo "Reverting: ${filePath}"
105
+ cp "${backupFilePath}" "${filePath}"
106
+ echo "✅ File reverted successfully"
107
+ `;
108
+ await fs.writeFile(revertScriptPath, revertScript, {
109
+ mode: 0o755
110
+ });
111
+ // Clean up old backups
112
+ await this.cleanOldBackups(agentId);
113
+ return {
114
+ backupPath: fullBackupPath,
115
+ timestamp: new Date().toISOString(),
116
+ fileHash,
117
+ originalPath: filePath,
118
+ metadata
119
+ };
120
+ } catch (error) {
121
+ throw new Error(`Backup creation failed for ${filePath}: ${error}`);
122
+ }
123
+ }
124
+ /**
125
+ * Revert a file from its backup
126
+ */ async revertFile(filePath, agentId) {
127
+ try {
128
+ // Find the most recent backup for this file
129
+ const backups = await this.listBackups(filePath);
130
+ if (backups.length === 0) {
131
+ throw new Error(`No backups found for ${filePath}`);
132
+ }
133
+ // Get the most recent backup
134
+ const mostRecentBackup = backups[0];
135
+ const backupedFile = path.join(mostRecentBackup.metadata.backupPath, path.basename(filePath));
136
+ // Verify backup file exists
137
+ await fs.stat(backupedFile);
138
+ // Restore file
139
+ await fs.copyFile(backupedFile, filePath);
140
+ } catch (error) {
141
+ throw new Error(`Failed to revert ${filePath}: ${error}`);
142
+ }
143
+ }
144
+ /**
145
+ * List all backups for a given file
146
+ */ async listBackups(filePath) {
147
+ try {
148
+ const backupBaseDir = path.join(this.projectRoot, this.config.backupDir);
149
+ const fileName = path.basename(filePath);
150
+ // Recursively search for backups
151
+ const backups = [];
152
+ const searchDir = async (dir)=>{
153
+ try {
154
+ const entries = await fs.readdir(dir, {
155
+ withFileTypes: true
156
+ });
157
+ for (const entry of entries){
158
+ const fullPath = path.join(dir, entry.name);
159
+ if (entry.isDirectory()) {
160
+ // Try to read metadata.json
161
+ const metadataPath = path.join(fullPath, 'metadata.json');
162
+ try {
163
+ const metadataContent = await fs.readFile(metadataPath, 'utf-8');
164
+ const metadata = JSON.parse(metadataContent);
165
+ // Check if this backup is for our file
166
+ if (metadata.originalFile === filePath) {
167
+ backups.push({
168
+ backupPath: fullPath,
169
+ timestamp: metadata.timestamp,
170
+ fileHash: metadata.fileHash,
171
+ originalPath: metadata.originalFile,
172
+ metadata
173
+ });
174
+ }
175
+ } catch {
176
+ // Not a backup directory, recurse
177
+ await searchDir(fullPath);
178
+ }
179
+ }
180
+ }
181
+ } catch (error) {
182
+ // Directory doesn't exist or other read error
183
+ return;
184
+ }
185
+ };
186
+ await searchDir(backupBaseDir);
187
+ // Sort by timestamp descending (most recent first)
188
+ return backups.sort((a, b)=>new Date(b.metadata.createdAt).getTime() - new Date(a.metadata.createdAt).getTime());
189
+ } catch {
190
+ return [];
191
+ }
192
+ }
193
+ /**
194
+ * Clean up old backups for an agent
195
+ */ async cleanOldBackups(agentId) {
196
+ try {
197
+ const backupDir = path.join(this.projectRoot, this.config.backupDir, agentId);
198
+ const retentionMs = this.config.retentionHours * 60 * 60 * 1000;
199
+ const cutoffTime = Date.now() - retentionMs;
200
+ let deletedCount = 0;
201
+ // Read agent backup directory
202
+ let entries = [];
203
+ try {
204
+ entries = await fs.readdir(backupDir);
205
+ } catch {
206
+ // Directory doesn't exist
207
+ return 0;
208
+ }
209
+ // Get backup metadata and timestamps
210
+ const backupTimestamps = [];
211
+ for (const entry of entries){
212
+ const fullPath = path.join(backupDir, entry);
213
+ const metadataPath = path.join(fullPath, 'metadata.json');
214
+ try {
215
+ const metadataContent = await fs.readFile(metadataPath, 'utf-8');
216
+ const metadata = JSON.parse(metadataContent);
217
+ const timestamp = new Date(metadata.createdAt).getTime();
218
+ backupTimestamps.push({
219
+ name: entry,
220
+ timestamp
221
+ });
222
+ } catch {
223
+ // Skip invalid backup directories
224
+ }
225
+ }
226
+ // Sort by timestamp descending
227
+ backupTimestamps.sort((a, b)=>b.timestamp - a.timestamp);
228
+ // Remove old backups (either too old or exceed max count)
229
+ for(let i = 0; i < backupTimestamps.length; i++){
230
+ const { name, timestamp } = backupTimestamps[i];
231
+ // Remove if older than retention or if exceeds max count
232
+ if (timestamp < cutoffTime || i >= this.config.maxBackups) {
233
+ const fullPath = path.join(backupDir, name);
234
+ try {
235
+ await fs.rm(fullPath, {
236
+ recursive: true,
237
+ force: true
238
+ });
239
+ deletedCount++;
240
+ } catch {
241
+ // Continue with next backup
242
+ }
243
+ }
244
+ }
245
+ return deletedCount;
246
+ } catch {
247
+ return 0;
248
+ }
249
+ }
250
+ /**
251
+ * Verify backup integrity
252
+ */ async verifyBackup(backupPath) {
253
+ try {
254
+ const metadataPath = path.join(backupPath, 'metadata.json');
255
+ const metadata = JSON.parse(await fs.readFile(metadataPath, 'utf-8'));
256
+ // Check backup file exists
257
+ const fileName = path.basename(metadata.originalFile);
258
+ const backupFilePath = path.join(backupPath, fileName);
259
+ const stat = await fs.stat(backupFilePath);
260
+ // Verify size matches metadata
261
+ if (stat.size !== metadata.fileSize) {
262
+ return false;
263
+ }
264
+ // Verify hash matches
265
+ const actualHash = await this.generateFileHash(backupFilePath);
266
+ return actualHash === metadata.fileHash;
267
+ } catch {
268
+ return false;
269
+ }
270
+ }
271
+ }
272
+
273
+ //# sourceMappingURL=backup-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/hooks/backup-manager.ts"],"sourcesContent":["/**\r\n * Backup Manager - File lifecycle backup creation and restoration\r\n * Manages pre-edit backups with metadata, hash generation, and cleanup\r\n */\r\n\r\nimport * as fs from 'fs/promises';\r\nimport * as path from 'path';\r\nimport * as crypto from 'crypto';\r\nimport { fileURLToPath } from 'url';\r\n\r\ninterface BackupConfig {\r\n retentionHours: number;\r\n maxBackups: number;\r\n backupDir: string;\r\n}\r\n\r\ninterface BackupMetadata {\r\n timestamp: string;\r\n agentId: string;\r\n originalFile: string;\r\n fileHash: string;\r\n backupPath: string;\r\n createdAt: string;\r\n fileSize: number;\r\n lineCount: number;\r\n}\r\n\r\ninterface BackupResult {\r\n backupPath: string;\r\n timestamp: string;\r\n fileHash: string;\r\n originalPath: string;\r\n metadata: BackupMetadata;\r\n}\r\n\r\nexport class BackupManager {\r\n private config: BackupConfig;\r\n private projectRoot: string;\r\n\r\n constructor(projectRoot: string = process.cwd(), config?: Partial<BackupConfig>) {\r\n this.projectRoot = projectRoot;\r\n this.config = {\r\n retentionHours: config?.retentionHours ?? 24,\r\n maxBackups: config?.maxBackups ?? 10,\r\n backupDir: config?.backupDir ?? '.backups',\r\n };\r\n }\r\n\r\n /**\r\n * Generate SHA256 hash of file content (8 char truncated)\r\n */\r\n private async generateFileHash(filePath: string): Promise<string> {\r\n try {\r\n const content = await fs.readFile(filePath);\r\n const hash = crypto.createHash('sha256').update(content).digest('hex');\r\n return hash.substring(0, 8);\r\n } catch (error) {\r\n throw new Error(`Failed to generate hash for ${filePath}: ${error}`);\r\n }\r\n }\r\n\r\n /**\r\n * Count lines in a file\r\n */\r\n private async countLines(filePath: string): Promise<number> {\r\n try {\r\n const content = await fs.readFile(filePath, 'utf-8');\r\n return content.split('\\n').length - 1; // Subtract 1 for trailing newline\r\n } catch {\r\n return 0;\r\n }\r\n }\r\n\r\n /**\r\n * Get file size in bytes\r\n */\r\n private async getFileSize(filePath: string): Promise<number> {\r\n try {\r\n const stat = await fs.stat(filePath);\r\n return stat.size;\r\n } catch {\r\n return 0;\r\n }\r\n }\r\n\r\n /**\r\n * Create a backup of a file before editing\r\n */\r\n async createBackup(filePath: string, agentId: string): Promise<BackupResult> {\r\n // Validate inputs\r\n if (!filePath) {\r\n throw new Error('File path is required');\r\n }\r\n\r\n if (!agentId) {\r\n throw new Error('Agent ID is required');\r\n }\r\n\r\n // Check if file exists\r\n try {\r\n await fs.stat(filePath);\r\n } catch {\r\n throw new Error(`File does not exist: ${filePath}`);\r\n }\r\n\r\n try {\r\n // Generate timestamp and hash\r\n const timestamp = new Date().toISOString();\r\n const fileHash = await this.generateFileHash(filePath);\r\n const unixTimestamp = Date.now();\r\n\r\n // Create backup directory structure: .backups/agent-id/timestamp_hash/\r\n const backupBaseDir = path.join(this.projectRoot, this.config.backupDir, agentId);\r\n const backupName = `${unixTimestamp}_${fileHash}`;\r\n const fullBackupPath = path.join(backupBaseDir, backupName);\r\n\r\n // Create backup directory\r\n await fs.mkdir(fullBackupPath, { recursive: true });\r\n\r\n // Copy original file to backup location\r\n const originalFileName = path.basename(filePath);\r\n const backupFilePath = path.join(fullBackupPath, originalFileName);\r\n await fs.copyFile(filePath, backupFilePath);\r\n\r\n // Gather metadata\r\n const fileSize = await this.getFileSize(filePath);\r\n const lineCount = await this.countLines(filePath);\r\n\r\n // Create metadata file\r\n const metadata: BackupMetadata = {\r\n timestamp,\r\n agentId,\r\n originalFile: filePath,\r\n fileHash,\r\n backupPath: fullBackupPath,\r\n createdAt: new Date().toISOString(),\r\n fileSize,\r\n lineCount,\r\n };\r\n\r\n const metadataPath = path.join(fullBackupPath, 'metadata.json');\r\n await fs.writeFile(metadataPath, JSON.stringify(metadata, null, 2));\r\n\r\n // Create revert script\r\n const revertScriptPath = path.join(fullBackupPath, 'revert.sh');\r\n const revertScript = `#!/bin/bash\r\n# Auto-generated revert script for ${filePath}\r\nset -euo pipefail\r\n\r\necho \"Reverting: ${filePath}\"\r\ncp \"${backupFilePath}\" \"${filePath}\"\r\necho \"✅ File reverted successfully\"\r\n`;\r\n await fs.writeFile(revertScriptPath, revertScript, { mode: 0o755 });\r\n\r\n // Clean up old backups\r\n await this.cleanOldBackups(agentId);\r\n\r\n return {\r\n backupPath: fullBackupPath,\r\n timestamp: new Date().toISOString(),\r\n fileHash,\r\n originalPath: filePath,\r\n metadata,\r\n };\r\n } catch (error) {\r\n throw new Error(`Backup creation failed for ${filePath}: ${error}`);\r\n }\r\n }\r\n\r\n /**\r\n * Revert a file from its backup\r\n */\r\n async revertFile(filePath: string, agentId: string): Promise<void> {\r\n try {\r\n // Find the most recent backup for this file\r\n const backups = await this.listBackups(filePath);\r\n if (backups.length === 0) {\r\n throw new Error(`No backups found for ${filePath}`);\r\n }\r\n\r\n // Get the most recent backup\r\n const mostRecentBackup = backups[0];\r\n const backupedFile = path.join(\r\n mostRecentBackup.metadata.backupPath,\r\n path.basename(filePath)\r\n );\r\n\r\n // Verify backup file exists\r\n await fs.stat(backupedFile);\r\n\r\n // Restore file\r\n await fs.copyFile(backupedFile, filePath);\r\n } catch (error) {\r\n throw new Error(`Failed to revert ${filePath}: ${error}`);\r\n }\r\n }\r\n\r\n /**\r\n * List all backups for a given file\r\n */\r\n async listBackups(filePath: string): Promise<BackupResult[]> {\r\n try {\r\n const backupBaseDir = path.join(this.projectRoot, this.config.backupDir);\r\n const fileName = path.basename(filePath);\r\n\r\n // Recursively search for backups\r\n const backups: BackupResult[] = [];\r\n const searchDir = async (dir: string) => {\r\n try {\r\n const entries = await fs.readdir(dir, { withFileTypes: true });\r\n\r\n for (const entry of entries) {\r\n const fullPath = path.join(dir, entry.name);\r\n\r\n if (entry.isDirectory()) {\r\n // Try to read metadata.json\r\n const metadataPath = path.join(fullPath, 'metadata.json');\r\n try {\r\n const metadataContent = await fs.readFile(metadataPath, 'utf-8');\r\n const metadata: BackupMetadata = JSON.parse(metadataContent);\r\n\r\n // Check if this backup is for our file\r\n if (metadata.originalFile === filePath) {\r\n backups.push({\r\n backupPath: fullPath,\r\n timestamp: metadata.timestamp,\r\n fileHash: metadata.fileHash,\r\n originalPath: metadata.originalFile,\r\n metadata,\r\n });\r\n }\r\n } catch {\r\n // Not a backup directory, recurse\r\n await searchDir(fullPath);\r\n }\r\n }\r\n }\r\n } catch (error) {\r\n // Directory doesn't exist or other read error\r\n return;\r\n }\r\n };\r\n\r\n await searchDir(backupBaseDir);\r\n\r\n // Sort by timestamp descending (most recent first)\r\n return backups.sort(\r\n (a, b) =>\r\n new Date(b.metadata.createdAt).getTime() -\r\n new Date(a.metadata.createdAt).getTime()\r\n );\r\n } catch {\r\n return [];\r\n }\r\n }\r\n\r\n /**\r\n * Clean up old backups for an agent\r\n */\r\n async cleanOldBackups(agentId: string): Promise<number> {\r\n try {\r\n const backupDir = path.join(this.projectRoot, this.config.backupDir, agentId);\r\n const retentionMs = this.config.retentionHours * 60 * 60 * 1000;\r\n const cutoffTime = Date.now() - retentionMs;\r\n let deletedCount = 0;\r\n\r\n // Read agent backup directory\r\n let entries: string[] = [];\r\n try {\r\n entries = await fs.readdir(backupDir);\r\n } catch {\r\n // Directory doesn't exist\r\n return 0;\r\n }\r\n\r\n // Get backup metadata and timestamps\r\n const backupTimestamps: Array<{ name: string; timestamp: number }> = [];\r\n\r\n for (const entry of entries) {\r\n const fullPath = path.join(backupDir, entry);\r\n const metadataPath = path.join(fullPath, 'metadata.json');\r\n\r\n try {\r\n const metadataContent = await fs.readFile(metadataPath, 'utf-8');\r\n const metadata: BackupMetadata = JSON.parse(metadataContent);\r\n const timestamp = new Date(metadata.createdAt).getTime();\r\n\r\n backupTimestamps.push({ name: entry, timestamp });\r\n } catch {\r\n // Skip invalid backup directories\r\n }\r\n }\r\n\r\n // Sort by timestamp descending\r\n backupTimestamps.sort((a, b) => b.timestamp - a.timestamp);\r\n\r\n // Remove old backups (either too old or exceed max count)\r\n for (let i = 0; i < backupTimestamps.length; i++) {\r\n const { name, timestamp } = backupTimestamps[i];\r\n\r\n // Remove if older than retention or if exceeds max count\r\n if (timestamp < cutoffTime || i >= this.config.maxBackups) {\r\n const fullPath = path.join(backupDir, name);\r\n try {\r\n await fs.rm(fullPath, { recursive: true, force: true });\r\n deletedCount++;\r\n } catch {\r\n // Continue with next backup\r\n }\r\n }\r\n }\r\n\r\n return deletedCount;\r\n } catch {\r\n return 0;\r\n }\r\n }\r\n\r\n /**\r\n * Verify backup integrity\r\n */\r\n async verifyBackup(backupPath: string): Promise<boolean> {\r\n try {\r\n const metadataPath = path.join(backupPath, 'metadata.json');\r\n const metadata: BackupMetadata = JSON.parse(\r\n await fs.readFile(metadataPath, 'utf-8')\r\n );\r\n\r\n // Check backup file exists\r\n const fileName = path.basename(metadata.originalFile);\r\n const backupFilePath = path.join(backupPath, fileName);\r\n const stat = await fs.stat(backupFilePath);\r\n\r\n // Verify size matches metadata\r\n if (stat.size !== metadata.fileSize) {\r\n return false;\r\n }\r\n\r\n // Verify hash matches\r\n const actualHash = await this.generateFileHash(backupFilePath);\r\n return actualHash === metadata.fileHash;\r\n } catch {\r\n return false;\r\n }\r\n }\r\n}\r\n"],"names":["fs","path","crypto","BackupManager","config","projectRoot","process","cwd","retentionHours","maxBackups","backupDir","generateFileHash","filePath","content","readFile","hash","createHash","update","digest","substring","error","Error","countLines","split","length","getFileSize","stat","size","createBackup","agentId","timestamp","Date","toISOString","fileHash","unixTimestamp","now","backupBaseDir","join","backupName","fullBackupPath","mkdir","recursive","originalFileName","basename","backupFilePath","copyFile","fileSize","lineCount","metadata","originalFile","backupPath","createdAt","metadataPath","writeFile","JSON","stringify","revertScriptPath","revertScript","mode","cleanOldBackups","originalPath","revertFile","backups","listBackups","mostRecentBackup","backupedFile","fileName","searchDir","dir","entries","readdir","withFileTypes","entry","fullPath","name","isDirectory","metadataContent","parse","push","sort","a","b","getTime","retentionMs","cutoffTime","deletedCount","backupTimestamps","i","rm","force","verifyBackup","actualHash"],"mappings":"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"}