claude-flow-novice 2.15.4 → 2.15.6

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 (456) hide show
  1. package/.claude/cfn-extras/.gs-api-quota.json +16 -0
  2. package/.claude/cfn-extras/.gs-progress-state.json +22 -0
  3. package/.claude/cfn-extras/GOOGLE_SHEETS_IMPLEMENTATION_SUMMARY.md +414 -0
  4. package/.claude/cfn-extras/agents/google-sheets/README.md +114 -0
  5. package/.claude/cfn-extras/agents/google-sheets/google-sheets-advanced-analytics-specialist.md +288 -0
  6. package/.claude/cfn-extras/agents/google-sheets/google-sheets-api-integrator.md +127 -0
  7. package/.claude/cfn-extras/agents/google-sheets/google-sheets-automation-scripting-specialist.md +195 -0
  8. package/.claude/cfn-extras/agents/google-sheets/google-sheets-business-validator.md +179 -0
  9. package/.claude/cfn-extras/agents/google-sheets/google-sheets-collaboration-security-specialist.md +240 -0
  10. package/.claude/cfn-extras/agents/google-sheets/google-sheets-coordinator.md +214 -0
  11. package/.claude/cfn-extras/agents/google-sheets/google-sheets-data-transformer.md +127 -0
  12. package/.claude/cfn-extras/agents/google-sheets/google-sheets-data-validation-quality-specialist.md +177 -0
  13. package/.claude/cfn-extras/agents/google-sheets/google-sheets-data-validator.md +119 -0
  14. package/.claude/cfn-extras/agents/google-sheets/google-sheets-data-visualization-specialist.md +135 -0
  15. package/.claude/cfn-extras/agents/google-sheets/google-sheets-design-layout-specialist.md +109 -0
  16. package/.claude/cfn-extras/agents/google-sheets/google-sheets-formula-engineer.md +127 -0
  17. package/.claude/cfn-extras/agents/google-sheets/google-sheets-formula-engineering-specialist.md +138 -0
  18. package/.claude/cfn-extras/agents/google-sheets/google-sheets-formula-validator.md +128 -0
  19. package/.claude/cfn-extras/agents/google-sheets/google-sheets-generalist.md +645 -0
  20. package/.claude/cfn-extras/agents/google-sheets/google-sheets-integration-api-specialist.md +258 -0
  21. package/.claude/cfn-extras/agents/google-sheets/google-sheets-performance-analyst.md +125 -0
  22. package/.claude/cfn-extras/agents/google-sheets/google-sheets-performance-optimization-specialist.md +211 -0
  23. package/.claude/cfn-extras/agents/google-sheets/google-sheets-schema-designer.md +130 -0
  24. package/.claude/cfn-extras/agents/google-sheets/google-sheets-template-architecture-specialist.md +259 -0
  25. package/.claude/cfn-extras/docs/GOOGLE_SHEETS_CFN_LOOP.md +617 -0
  26. package/.claude/cfn-extras/skills/GOOGLE_SHEETS_SKILLS_README.md +453 -0
  27. package/.claude/cfn-extras/skills/google-sheets-api-coordinator/SKILL.md +272 -0
  28. package/.claude/cfn-extras/skills/google-sheets-api-coordinator/api-call.sh +254 -0
  29. package/.claude/cfn-extras/skills/google-sheets-api-coordinator/test.sh +174 -0
  30. package/.claude/cfn-extras/skills/google-sheets-api-coordinator/validate.sh +98 -0
  31. package/.claude/cfn-extras/skills/google-sheets-decomposition/SKILL.md +269 -0
  32. package/.claude/cfn-extras/skills/google-sheets-decomposition/decompose.sh +313 -0
  33. package/.claude/cfn-extras/skills/google-sheets-formula-builder/SKILL.md +237 -0
  34. package/.claude/cfn-extras/skills/google-sheets-formula-builder/build-formula.sh +220 -0
  35. package/.claude/cfn-extras/skills/google-sheets-formula-builder/test.sh +172 -0
  36. package/.claude/cfn-extras/skills/google-sheets-formula-builder/validate.sh +98 -0
  37. package/.claude/cfn-extras/skills/google-sheets-progress/SKILL.md +287 -0
  38. package/.claude/cfn-extras/skills/google-sheets-progress/test.sh +385 -0
  39. package/.claude/cfn-extras/skills/google-sheets-progress/track-progress.sh +516 -0
  40. package/.claude/cfn-extras/skills/google-sheets-progress/validate.sh +119 -0
  41. package/.claude/cfn-extras/skills/google-sheets-sprint-order/SKILL.md +277 -0
  42. package/.claude/cfn-extras/skills/google-sheets-sprint-order/order-sprints.sh +233 -0
  43. package/.claude/cfn-extras/skills/google-sheets-validation/SKILL.md +352 -0
  44. package/.claude/cfn-extras/skills/google-sheets-validation/test.sh +355 -0
  45. package/.claude/cfn-extras/skills/google-sheets-validation/validate-state.sh +374 -0
  46. package/.claude/cfn-extras/skills/google-sheets-validation/validate.sh +128 -0
  47. package/.claude/commands/cfn-context.md +10 -0
  48. package/.claude/commands/cfn-loop-cli.md +44 -14
  49. package/.claude/commands/google-sheets/google-sheets-loop.md +289 -0
  50. package/.claude/skills/cfn-agent-selector/SKILL.md +143 -0
  51. package/.claude/skills/cfn-agent-selector/select-agents.sh +94 -0
  52. package/.claude/skills/cfn-agent-spawning/get-agent-provider-env.sh +22 -2
  53. package/.claude/skills/cfn-docker-agent-spawning/spawn-agent.sh +21 -2
  54. package/.claude/skills/cfn-docker-loop-orchestration/orchestrate.sh +11 -5
  55. package/.claude/skills/cfn-docker-redis-coordination/MIGRATION_SUMMARY.md +348 -0
  56. package/.claude/skills/cfn-docker-redis-coordination/README.md +294 -0
  57. package/.claude/skills/cfn-docker-redis-coordination/jest.config.js +37 -0
  58. package/.claude/skills/cfn-docker-redis-coordination/package-lock.json +5259 -0
  59. package/.claude/skills/cfn-docker-redis-coordination/package.json +40 -0
  60. package/.claude/skills/cfn-docker-redis-coordination/src/coordinator.ts +801 -0
  61. package/.claude/skills/cfn-docker-redis-coordination/src/index.ts +42 -0
  62. package/.claude/skills/cfn-docker-redis-coordination/src/types.ts +351 -0
  63. package/.claude/skills/cfn-docker-redis-coordination/tests/coordinator.test.ts +1464 -0
  64. package/.claude/skills/cfn-docker-redis-coordination/tsconfig.json +30 -0
  65. package/.claude/skills/cfn-loop-orchestration/.eslintrc.js +56 -0
  66. package/.claude/skills/cfn-loop-orchestration/.prettierrc.json +18 -0
  67. package/.claude/skills/cfn-loop-orchestration/README.md +149 -41
  68. package/.claude/skills/cfn-loop-orchestration/jest.config.js +67 -0
  69. package/.claude/skills/cfn-loop-orchestration/orchestrate-wrapper.sh +268 -0
  70. package/.claude/skills/cfn-loop-orchestration/orchestrate.sh +147 -16
  71. package/.claude/skills/cfn-loop-orchestration/package-lock.json +5470 -0
  72. package/.claude/skills/cfn-loop-orchestration/package.json +49 -0
  73. package/.claude/skills/cfn-loop-orchestration/src/agent-spawner/agent-spawner.ts +34 -0
  74. package/.claude/skills/cfn-loop-orchestration/src/gate-checker/gate-checker.ts +36 -0
  75. package/.claude/skills/cfn-loop-orchestration/src/index.ts +14 -0
  76. package/.claude/skills/cfn-loop-orchestration/src/orchestrator/orchestrator.ts +31 -0
  77. package/.claude/skills/cfn-loop-orchestration/src/redis/redis-coordinator.ts +72 -0
  78. package/.claude/skills/cfn-loop-orchestration/src/types.ts +188 -0
  79. package/.claude/skills/cfn-loop-orchestration/src/utils/logger.ts +32 -0
  80. package/.claude/skills/cfn-loop-orchestration/tests/setup.ts +22 -0
  81. package/.claude/skills/cfn-loop-orchestration/tests/types.test.ts +132 -0
  82. package/.claude/skills/cfn-loop-orchestration/tsconfig.json +54 -0
  83. package/.claude/skills/cfn-redis-coordination/bash-wrappers/store-context.sh +23 -0
  84. package/.claude/skills/cfn-redis-coordination/dist/agent-logger.d.ts +92 -0
  85. package/.claude/skills/cfn-redis-coordination/dist/agent-logger.d.ts.map +1 -0
  86. package/.claude/skills/cfn-redis-coordination/dist/agent-logger.js +329 -0
  87. package/.claude/skills/cfn-redis-coordination/dist/agent-logger.js.map +1 -0
  88. package/.claude/skills/cfn-redis-coordination/dist/agent-recovery.d.ts +75 -0
  89. package/.claude/skills/cfn-redis-coordination/dist/agent-recovery.d.ts.map +1 -0
  90. package/.claude/skills/cfn-redis-coordination/dist/agent-recovery.js +302 -0
  91. package/.claude/skills/cfn-redis-coordination/dist/agent-recovery.js.map +1 -0
  92. package/.claude/skills/cfn-redis-coordination/dist/completion-reporter.d.ts +58 -0
  93. package/.claude/skills/cfn-redis-coordination/dist/completion-reporter.d.ts.map +1 -0
  94. package/.claude/skills/cfn-redis-coordination/dist/completion-reporter.js +237 -0
  95. package/.claude/skills/cfn-redis-coordination/dist/completion-reporter.js.map +1 -0
  96. package/.claude/skills/cfn-redis-coordination/dist/context-manager.d.ts +63 -0
  97. package/.claude/skills/cfn-redis-coordination/dist/context-manager.d.ts.map +1 -0
  98. package/.claude/skills/cfn-redis-coordination/dist/context-manager.js +230 -0
  99. package/.claude/skills/cfn-redis-coordination/dist/context-manager.js.map +1 -0
  100. package/.claude/skills/cfn-redis-coordination/dist/index.d.ts +45 -0
  101. package/.claude/skills/cfn-redis-coordination/dist/index.d.ts.map +1 -0
  102. package/.claude/skills/cfn-redis-coordination/dist/index.js +114 -0
  103. package/.claude/skills/cfn-redis-coordination/dist/index.js.map +1 -0
  104. package/.claude/skills/cfn-redis-coordination/dist/mode-detector.d.ts +31 -0
  105. package/.claude/skills/cfn-redis-coordination/dist/mode-detector.d.ts.map +1 -0
  106. package/.claude/skills/cfn-redis-coordination/dist/mode-detector.js +185 -0
  107. package/.claude/skills/cfn-redis-coordination/dist/mode-detector.js.map +1 -0
  108. package/.claude/skills/cfn-redis-coordination/dist/redis-client.d.ts +191 -0
  109. package/.claude/skills/cfn-redis-coordination/dist/redis-client.d.ts.map +1 -0
  110. package/.claude/skills/cfn-redis-coordination/dist/redis-client.js +509 -0
  111. package/.claude/skills/cfn-redis-coordination/dist/redis-client.js.map +1 -0
  112. package/.claude/skills/cfn-redis-coordination/dist/result-collector.d.ts +75 -0
  113. package/.claude/skills/cfn-redis-coordination/dist/result-collector.d.ts.map +1 -0
  114. package/.claude/skills/cfn-redis-coordination/dist/result-collector.js +281 -0
  115. package/.claude/skills/cfn-redis-coordination/dist/result-collector.js.map +1 -0
  116. package/.claude/skills/cfn-redis-coordination/dist/swarm-manager.d.ts +75 -0
  117. package/.claude/skills/cfn-redis-coordination/dist/swarm-manager.d.ts.map +1 -0
  118. package/.claude/skills/cfn-redis-coordination/dist/swarm-manager.js +354 -0
  119. package/.claude/skills/cfn-redis-coordination/dist/swarm-manager.js.map +1 -0
  120. package/.claude/skills/cfn-redis-coordination/dist/task-analyzer.d.ts +62 -0
  121. package/.claude/skills/cfn-redis-coordination/dist/task-analyzer.d.ts.map +1 -0
  122. package/.claude/skills/cfn-redis-coordination/dist/task-analyzer.js +305 -0
  123. package/.claude/skills/cfn-redis-coordination/dist/task-analyzer.js.map +1 -0
  124. package/.claude/skills/cfn-redis-coordination/dist/task-executor.d.ts +97 -0
  125. package/.claude/skills/cfn-redis-coordination/dist/task-executor.d.ts.map +1 -0
  126. package/.claude/skills/cfn-redis-coordination/dist/task-executor.js +283 -0
  127. package/.claude/skills/cfn-redis-coordination/dist/task-executor.js.map +1 -0
  128. package/.claude/skills/cfn-redis-coordination/dist/types.d.ts +176 -0
  129. package/.claude/skills/cfn-redis-coordination/dist/types.d.ts.map +1 -0
  130. package/.claude/skills/cfn-redis-coordination/dist/types.js +81 -0
  131. package/.claude/skills/cfn-redis-coordination/dist/types.js.map +1 -0
  132. package/.claude/skills/cfn-redis-coordination/dist/waiting-coordinator.d.ts +86 -0
  133. package/.claude/skills/cfn-redis-coordination/dist/waiting-coordinator.d.ts.map +1 -0
  134. package/.claude/skills/cfn-redis-coordination/dist/waiting-coordinator.js +419 -0
  135. package/.claude/skills/cfn-redis-coordination/dist/waiting-coordinator.js.map +1 -0
  136. package/.claude/skills/cfn-redis-coordination/docs/migration/PHASE_3_REDIS_COORDINATION_COMPLETION_REPORT.md +553 -0
  137. package/.claude/skills/cfn-redis-coordination/invoke-waiting-mode.sh +3 -2
  138. package/.claude/skills/cfn-redis-coordination/jest.config.js +23 -0
  139. package/.claude/skills/cfn-redis-coordination/package-lock.json +5272 -0
  140. package/.claude/skills/cfn-redis-coordination/package.json +45 -0
  141. package/.claude/skills/cfn-redis-coordination/redis-cli-wrapper.sh +21 -8
  142. package/.claude/skills/cfn-redis-coordination/redis-functions.sh +3 -2
  143. package/.claude/skills/cfn-redis-coordination/src/agent-logger.ts +446 -0
  144. package/.claude/skills/cfn-redis-coordination/src/agent-recovery.ts +454 -0
  145. package/.claude/skills/cfn-redis-coordination/src/completion-reporter.ts +396 -0
  146. package/.claude/skills/cfn-redis-coordination/src/context-manager.ts +327 -0
  147. package/.claude/skills/cfn-redis-coordination/src/index.ts +82 -0
  148. package/.claude/skills/cfn-redis-coordination/src/mode-detector.ts +155 -0
  149. package/.claude/skills/cfn-redis-coordination/src/redis/redis-client.ts +305 -0
  150. package/.claude/skills/cfn-redis-coordination/src/redis/redis-functions.ts +283 -0
  151. package/.claude/skills/cfn-redis-coordination/src/redis-client.ts +654 -0
  152. package/.claude/skills/cfn-redis-coordination/src/result-collector.ts +437 -0
  153. package/.claude/skills/cfn-redis-coordination/src/swarm-manager.ts +494 -0
  154. package/.claude/skills/cfn-redis-coordination/src/task-analyzer.ts +404 -0
  155. package/.claude/skills/cfn-redis-coordination/src/task-executor.ts +423 -0
  156. package/.claude/skills/cfn-redis-coordination/src/types.ts +235 -0
  157. package/.claude/skills/cfn-redis-coordination/src/waiting-coordinator.ts +587 -0
  158. package/.claude/skills/cfn-redis-coordination/test-connection-attempts.js +70 -0
  159. package/.claude/skills/cfn-redis-coordination/test-mode-simple.js +121 -0
  160. package/.claude/skills/cfn-redis-coordination/test-redis-check.js +84 -0
  161. package/.claude/skills/cfn-redis-coordination/test-task-mode-redis.cjs +391 -0
  162. package/.claude/skills/cfn-redis-coordination/tests/coordination.test.ts +779 -0
  163. package/.claude/skills/cfn-redis-coordination/tsconfig.json +31 -0
  164. package/claude-assets/agents/cfn-dev-team/coordinators/cfn-v3-coordinator.md +172 -2
  165. package/claude-assets/agents/cfn-dev-team/testers/api-testing-specialist.md +1 -1
  166. package/claude-assets/agents/custom/cfn-redis-operations.md +530 -0
  167. package/claude-assets/agents/custom/cfn-system-expert.md +77 -0
  168. package/claude-assets/cfn-extras/.gs-api-quota.json +16 -0
  169. package/claude-assets/cfn-extras/.gs-progress-state.json +22 -0
  170. package/claude-assets/cfn-extras/GOOGLE_SHEETS_IMPLEMENTATION_SUMMARY.md +414 -0
  171. package/claude-assets/cfn-extras/agents/google-sheets/README.md +114 -0
  172. package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-advanced-analytics-specialist.md +288 -0
  173. package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-api-integrator.md +127 -0
  174. package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-automation-scripting-specialist.md +195 -0
  175. package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-business-validator.md +179 -0
  176. package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-collaboration-security-specialist.md +240 -0
  177. package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-coordinator.md +214 -0
  178. package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-data-transformer.md +127 -0
  179. package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-data-validation-quality-specialist.md +177 -0
  180. package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-data-validator.md +119 -0
  181. package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-data-visualization-specialist.md +135 -0
  182. package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-design-layout-specialist.md +109 -0
  183. package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-formula-engineer.md +127 -0
  184. package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-formula-engineering-specialist.md +138 -0
  185. package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-formula-validator.md +128 -0
  186. package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-generalist.md +645 -0
  187. package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-integration-api-specialist.md +258 -0
  188. package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-performance-analyst.md +125 -0
  189. package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-performance-optimization-specialist.md +211 -0
  190. package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-schema-designer.md +130 -0
  191. package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-template-architecture-specialist.md +259 -0
  192. package/claude-assets/cfn-extras/docs/GOOGLE_SHEETS_CFN_LOOP.md +617 -0
  193. package/claude-assets/cfn-extras/skills/GOOGLE_SHEETS_SKILLS_README.md +453 -0
  194. package/claude-assets/cfn-extras/skills/google-sheets-api-coordinator/SKILL.md +272 -0
  195. package/claude-assets/cfn-extras/skills/google-sheets-api-coordinator/api-call.sh +254 -0
  196. package/claude-assets/cfn-extras/skills/google-sheets-api-coordinator/test.sh +174 -0
  197. package/claude-assets/cfn-extras/skills/google-sheets-api-coordinator/validate.sh +98 -0
  198. package/claude-assets/cfn-extras/skills/google-sheets-decomposition/SKILL.md +269 -0
  199. package/claude-assets/cfn-extras/skills/google-sheets-decomposition/decompose.sh +313 -0
  200. package/claude-assets/cfn-extras/skills/google-sheets-formula-builder/SKILL.md +237 -0
  201. package/claude-assets/cfn-extras/skills/google-sheets-formula-builder/build-formula.sh +220 -0
  202. package/claude-assets/cfn-extras/skills/google-sheets-formula-builder/test.sh +172 -0
  203. package/claude-assets/cfn-extras/skills/google-sheets-formula-builder/validate.sh +98 -0
  204. package/claude-assets/cfn-extras/skills/google-sheets-progress/SKILL.md +287 -0
  205. package/claude-assets/cfn-extras/skills/google-sheets-progress/test.sh +385 -0
  206. package/claude-assets/cfn-extras/skills/google-sheets-progress/track-progress.sh +516 -0
  207. package/claude-assets/cfn-extras/skills/google-sheets-progress/validate.sh +119 -0
  208. package/claude-assets/cfn-extras/skills/google-sheets-sprint-order/SKILL.md +277 -0
  209. package/claude-assets/cfn-extras/skills/google-sheets-sprint-order/order-sprints.sh +233 -0
  210. package/claude-assets/cfn-extras/skills/google-sheets-validation/SKILL.md +352 -0
  211. package/claude-assets/cfn-extras/skills/google-sheets-validation/test.sh +355 -0
  212. package/claude-assets/cfn-extras/skills/google-sheets-validation/validate-state.sh +374 -0
  213. package/claude-assets/cfn-extras/skills/google-sheets-validation/validate.sh +128 -0
  214. package/claude-assets/commands/cfn-context.md +10 -0
  215. package/claude-assets/commands/cfn-loop-cli.md +44 -14
  216. package/claude-assets/commands/google-sheets/google-sheets-loop.md +289 -0
  217. package/claude-assets/hooks/cfn-pre-execution/SESSION_START_README.md +87 -0
  218. package/claude-assets/hooks/cfn-pre-execution/TEST_SESSION_START.md +128 -0
  219. package/claude-assets/hooks/cfn-pre-execution/session-start-context.sh +111 -0
  220. package/claude-assets/skills/cfn-agent-selection-with-fallback/INTEGRATION_EXAMPLE.md +209 -0
  221. package/claude-assets/skills/cfn-agent-selection-with-fallback/README.md +130 -0
  222. package/claude-assets/skills/cfn-agent-selection-with-fallback/SKILL.md +243 -0
  223. package/claude-assets/skills/cfn-agent-selection-with-fallback/agent-mappings.json +142 -0
  224. package/claude-assets/skills/cfn-agent-selection-with-fallback/select-agents.sh +173 -0
  225. package/claude-assets/skills/cfn-agent-selection-with-fallback/task-classifier.sh +71 -0
  226. package/claude-assets/skills/cfn-agent-selection-with-fallback/test-agent-selection.sh +282 -0
  227. package/claude-assets/skills/cfn-agent-selector/SKILL.md +143 -0
  228. package/claude-assets/skills/cfn-agent-selector/select-agents.sh +94 -0
  229. package/claude-assets/skills/cfn-agent-spawning/get-agent-provider-env.sh +22 -2
  230. package/claude-assets/skills/cfn-docker-agent-spawning/spawn-agent.sh +21 -2
  231. package/claude-assets/skills/cfn-docker-coordination/.eslintrc.json +33 -0
  232. package/claude-assets/skills/cfn-docker-coordination/README.md +349 -0
  233. package/claude-assets/skills/cfn-docker-coordination/docker-helpers.sh +433 -0
  234. package/claude-assets/skills/cfn-docker-coordination/jest.config.js +25 -0
  235. package/claude-assets/skills/cfn-docker-coordination/package-lock.json +6827 -0
  236. package/claude-assets/skills/cfn-docker-coordination/package.json +38 -0
  237. package/claude-assets/skills/cfn-docker-coordination/src/agent-container.ts +471 -0
  238. package/claude-assets/skills/cfn-docker-coordination/src/docker-client.ts +483 -0
  239. package/claude-assets/skills/cfn-docker-coordination/src/health-checker.ts +418 -0
  240. package/claude-assets/skills/cfn-docker-coordination/src/index.ts +45 -0
  241. package/claude-assets/skills/cfn-docker-coordination/src/network-manager.ts +377 -0
  242. package/claude-assets/skills/cfn-docker-coordination/src/types.ts +412 -0
  243. package/claude-assets/skills/cfn-docker-coordination/src/volume-manager.ts +389 -0
  244. package/claude-assets/skills/cfn-docker-coordination/tests/agent-container.test.ts +379 -0
  245. package/claude-assets/skills/cfn-docker-coordination/tests/docker-client.test.ts +345 -0
  246. package/claude-assets/skills/cfn-docker-coordination/tests/health-checker.test.ts +535 -0
  247. package/claude-assets/skills/cfn-docker-coordination/tests/integration.test.ts +193 -0
  248. package/claude-assets/skills/cfn-docker-coordination/tests/network-manager.test.ts +352 -0
  249. package/claude-assets/skills/cfn-docker-coordination/tests/setup.ts +36 -0
  250. package/claude-assets/skills/cfn-docker-coordination/tsconfig.json +29 -0
  251. package/claude-assets/skills/cfn-docker-logging/INTEGRATION.md +268 -0
  252. package/claude-assets/skills/cfn-docker-logging/SAMPLE_OUTPUTS.md +237 -0
  253. package/claude-assets/skills/cfn-docker-logging/SKILL.md +442 -0
  254. package/claude-assets/skills/cfn-docker-logging/capture-container-logs.sh +120 -0
  255. package/claude-assets/skills/cfn-docker-logging/enable-logging.sh +430 -0
  256. package/claude-assets/skills/cfn-docker-logging/init-hybrid-logging.sh +210 -0
  257. package/claude-assets/skills/cfn-docker-logging/queries/analytics-summary.sh +87 -0
  258. package/claude-assets/skills/cfn-docker-logging/queries/query-agent-timeline.sh +51 -0
  259. package/claude-assets/skills/cfn-docker-logging/queries/query-consensus-history.sh +56 -0
  260. package/claude-assets/skills/cfn-docker-logging/queries/query-coordination-timeline.sh +39 -0
  261. package/claude-assets/skills/cfn-docker-logging/queries/query-failed-containers.sh +40 -0
  262. package/claude-assets/skills/cfn-docker-logging/queries/query-gate-checks.sh +39 -0
  263. package/claude-assets/skills/cfn-docker-logging/schema.sql +111 -0
  264. package/claude-assets/skills/cfn-docker-logging/sqlite-helpers.sh +240 -0
  265. package/claude-assets/skills/cfn-docker-logging/test-hybrid-logging.sh +331 -0
  266. package/claude-assets/skills/cfn-docker-loop-orchestration/orchestrate.sh +11 -5
  267. package/claude-assets/skills/cfn-docker-redis-coordination/MIGRATION_SUMMARY.md +348 -0
  268. package/claude-assets/skills/cfn-docker-redis-coordination/README.md +294 -0
  269. package/claude-assets/skills/cfn-docker-redis-coordination/jest.config.js +37 -0
  270. package/claude-assets/skills/cfn-docker-redis-coordination/package-lock.json +5259 -0
  271. package/claude-assets/skills/cfn-docker-redis-coordination/package.json +40 -0
  272. package/claude-assets/skills/cfn-docker-redis-coordination/src/coordinator.ts +801 -0
  273. package/claude-assets/skills/cfn-docker-redis-coordination/src/index.ts +42 -0
  274. package/claude-assets/skills/cfn-docker-redis-coordination/src/types.ts +351 -0
  275. package/claude-assets/skills/cfn-docker-redis-coordination/tests/coordinator.test.ts +1464 -0
  276. package/claude-assets/skills/cfn-docker-redis-coordination/tsconfig.json +30 -0
  277. package/claude-assets/skills/cfn-error-logging/.eslintrc.json +57 -0
  278. package/claude-assets/skills/cfn-error-logging/.prettierrc.json +10 -0
  279. package/claude-assets/skills/cfn-error-logging/MIGRATION_SUMMARY.md +485 -0
  280. package/claude-assets/skills/cfn-error-logging/package.json +47 -0
  281. package/claude-assets/skills/cfn-error-logging/src/error-logger.ts +1042 -0
  282. package/claude-assets/skills/cfn-error-logging/src/index.ts +12 -0
  283. package/claude-assets/skills/cfn-error-logging/src/types.ts +456 -0
  284. package/claude-assets/skills/cfn-error-logging/tests/error-logger.test.ts +1302 -0
  285. package/claude-assets/skills/cfn-error-logging/tsconfig.json +38 -0
  286. package/claude-assets/skills/cfn-loop-orchestration/.eslintrc.js +56 -0
  287. package/claude-assets/skills/cfn-loop-orchestration/.prettierrc.json +18 -0
  288. package/claude-assets/skills/cfn-loop-orchestration/README.md +149 -41
  289. package/claude-assets/skills/cfn-loop-orchestration/jest.config.js +67 -0
  290. package/claude-assets/skills/cfn-loop-orchestration/orchestrate-wrapper.sh +268 -0
  291. package/claude-assets/skills/cfn-loop-orchestration/orchestrate.sh +147 -16
  292. package/claude-assets/skills/cfn-loop-orchestration/package-lock.json +5470 -0
  293. package/claude-assets/skills/cfn-loop-orchestration/package.json +49 -0
  294. package/claude-assets/skills/cfn-loop-orchestration/src/agent-spawner/agent-spawner.ts +34 -0
  295. package/claude-assets/skills/cfn-loop-orchestration/src/gate-checker/gate-checker.ts +36 -0
  296. package/claude-assets/skills/cfn-loop-orchestration/src/index.ts +14 -0
  297. package/claude-assets/skills/cfn-loop-orchestration/src/orchestrator/orchestrator.ts +31 -0
  298. package/claude-assets/skills/cfn-loop-orchestration/src/redis/redis-coordinator.ts +72 -0
  299. package/claude-assets/skills/cfn-loop-orchestration/src/types.ts +188 -0
  300. package/claude-assets/skills/cfn-loop-orchestration/src/utils/logger.ts +32 -0
  301. package/claude-assets/skills/cfn-loop-orchestration/tests/setup.ts +22 -0
  302. package/claude-assets/skills/cfn-loop-orchestration/tests/types.test.ts +132 -0
  303. package/claude-assets/skills/cfn-loop-orchestration/tsconfig.json +54 -0
  304. package/claude-assets/skills/cfn-redis-coordination/bash-wrappers/store-context.sh +23 -0
  305. package/claude-assets/skills/cfn-redis-coordination/dist/agent-logger.d.ts +92 -0
  306. package/claude-assets/skills/cfn-redis-coordination/dist/agent-logger.d.ts.map +1 -0
  307. package/claude-assets/skills/cfn-redis-coordination/dist/agent-logger.js +329 -0
  308. package/claude-assets/skills/cfn-redis-coordination/dist/agent-logger.js.map +1 -0
  309. package/claude-assets/skills/cfn-redis-coordination/dist/agent-recovery.d.ts +75 -0
  310. package/claude-assets/skills/cfn-redis-coordination/dist/agent-recovery.d.ts.map +1 -0
  311. package/claude-assets/skills/cfn-redis-coordination/dist/agent-recovery.js +302 -0
  312. package/claude-assets/skills/cfn-redis-coordination/dist/agent-recovery.js.map +1 -0
  313. package/claude-assets/skills/cfn-redis-coordination/dist/completion-reporter.d.ts +58 -0
  314. package/claude-assets/skills/cfn-redis-coordination/dist/completion-reporter.d.ts.map +1 -0
  315. package/claude-assets/skills/cfn-redis-coordination/dist/completion-reporter.js +237 -0
  316. package/claude-assets/skills/cfn-redis-coordination/dist/completion-reporter.js.map +1 -0
  317. package/claude-assets/skills/cfn-redis-coordination/dist/context-manager.d.ts +63 -0
  318. package/claude-assets/skills/cfn-redis-coordination/dist/context-manager.d.ts.map +1 -0
  319. package/claude-assets/skills/cfn-redis-coordination/dist/context-manager.js +230 -0
  320. package/claude-assets/skills/cfn-redis-coordination/dist/context-manager.js.map +1 -0
  321. package/claude-assets/skills/cfn-redis-coordination/dist/index.d.ts +45 -0
  322. package/claude-assets/skills/cfn-redis-coordination/dist/index.d.ts.map +1 -0
  323. package/claude-assets/skills/cfn-redis-coordination/dist/index.js +114 -0
  324. package/claude-assets/skills/cfn-redis-coordination/dist/index.js.map +1 -0
  325. package/claude-assets/skills/cfn-redis-coordination/dist/mode-detector.d.ts +31 -0
  326. package/claude-assets/skills/cfn-redis-coordination/dist/mode-detector.d.ts.map +1 -0
  327. package/claude-assets/skills/cfn-redis-coordination/dist/mode-detector.js +185 -0
  328. package/claude-assets/skills/cfn-redis-coordination/dist/mode-detector.js.map +1 -0
  329. package/claude-assets/skills/cfn-redis-coordination/dist/redis-client.d.ts +191 -0
  330. package/claude-assets/skills/cfn-redis-coordination/dist/redis-client.d.ts.map +1 -0
  331. package/claude-assets/skills/cfn-redis-coordination/dist/redis-client.js +509 -0
  332. package/claude-assets/skills/cfn-redis-coordination/dist/redis-client.js.map +1 -0
  333. package/claude-assets/skills/cfn-redis-coordination/dist/result-collector.d.ts +75 -0
  334. package/claude-assets/skills/cfn-redis-coordination/dist/result-collector.d.ts.map +1 -0
  335. package/claude-assets/skills/cfn-redis-coordination/dist/result-collector.js +281 -0
  336. package/claude-assets/skills/cfn-redis-coordination/dist/result-collector.js.map +1 -0
  337. package/claude-assets/skills/cfn-redis-coordination/dist/swarm-manager.d.ts +75 -0
  338. package/claude-assets/skills/cfn-redis-coordination/dist/swarm-manager.d.ts.map +1 -0
  339. package/claude-assets/skills/cfn-redis-coordination/dist/swarm-manager.js +354 -0
  340. package/claude-assets/skills/cfn-redis-coordination/dist/swarm-manager.js.map +1 -0
  341. package/claude-assets/skills/cfn-redis-coordination/dist/task-analyzer.d.ts +62 -0
  342. package/claude-assets/skills/cfn-redis-coordination/dist/task-analyzer.d.ts.map +1 -0
  343. package/claude-assets/skills/cfn-redis-coordination/dist/task-analyzer.js +305 -0
  344. package/claude-assets/skills/cfn-redis-coordination/dist/task-analyzer.js.map +1 -0
  345. package/claude-assets/skills/cfn-redis-coordination/dist/task-executor.d.ts +97 -0
  346. package/claude-assets/skills/cfn-redis-coordination/dist/task-executor.d.ts.map +1 -0
  347. package/claude-assets/skills/cfn-redis-coordination/dist/task-executor.js +283 -0
  348. package/claude-assets/skills/cfn-redis-coordination/dist/task-executor.js.map +1 -0
  349. package/claude-assets/skills/cfn-redis-coordination/dist/types.d.ts +176 -0
  350. package/claude-assets/skills/cfn-redis-coordination/dist/types.d.ts.map +1 -0
  351. package/claude-assets/skills/cfn-redis-coordination/dist/types.js +81 -0
  352. package/claude-assets/skills/cfn-redis-coordination/dist/types.js.map +1 -0
  353. package/claude-assets/skills/cfn-redis-coordination/dist/waiting-coordinator.d.ts +86 -0
  354. package/claude-assets/skills/cfn-redis-coordination/dist/waiting-coordinator.d.ts.map +1 -0
  355. package/claude-assets/skills/cfn-redis-coordination/dist/waiting-coordinator.js +419 -0
  356. package/claude-assets/skills/cfn-redis-coordination/dist/waiting-coordinator.js.map +1 -0
  357. package/claude-assets/skills/cfn-redis-coordination/docs/migration/PHASE_3_REDIS_COORDINATION_COMPLETION_REPORT.md +553 -0
  358. package/claude-assets/skills/cfn-redis-coordination/invoke-waiting-mode.sh +3 -2
  359. package/claude-assets/skills/cfn-redis-coordination/jest.config.js +23 -0
  360. package/claude-assets/skills/cfn-redis-coordination/package-lock.json +5272 -0
  361. package/claude-assets/skills/cfn-redis-coordination/package.json +45 -0
  362. package/claude-assets/skills/cfn-redis-coordination/redis-cli-wrapper.sh +21 -8
  363. package/claude-assets/skills/cfn-redis-coordination/redis-functions.sh +3 -2
  364. package/claude-assets/skills/cfn-redis-coordination/src/agent-logger.ts +446 -0
  365. package/claude-assets/skills/cfn-redis-coordination/src/agent-recovery.ts +454 -0
  366. package/claude-assets/skills/cfn-redis-coordination/src/completion-reporter.ts +396 -0
  367. package/claude-assets/skills/cfn-redis-coordination/src/context-manager.ts +327 -0
  368. package/claude-assets/skills/cfn-redis-coordination/src/index.ts +82 -0
  369. package/claude-assets/skills/cfn-redis-coordination/src/mode-detector.ts +155 -0
  370. package/claude-assets/skills/cfn-redis-coordination/src/redis/redis-client.ts +305 -0
  371. package/claude-assets/skills/cfn-redis-coordination/src/redis/redis-functions.ts +283 -0
  372. package/claude-assets/skills/cfn-redis-coordination/src/redis-client.ts +654 -0
  373. package/claude-assets/skills/cfn-redis-coordination/src/result-collector.ts +437 -0
  374. package/claude-assets/skills/cfn-redis-coordination/src/swarm-manager.ts +494 -0
  375. package/claude-assets/skills/cfn-redis-coordination/src/task-analyzer.ts +404 -0
  376. package/claude-assets/skills/cfn-redis-coordination/src/task-executor.ts +423 -0
  377. package/claude-assets/skills/cfn-redis-coordination/src/types.ts +235 -0
  378. package/claude-assets/skills/cfn-redis-coordination/src/waiting-coordinator.ts +587 -0
  379. package/claude-assets/skills/cfn-redis-coordination/test-connection-attempts.js +70 -0
  380. package/claude-assets/skills/cfn-redis-coordination/test-mode-simple.js +121 -0
  381. package/claude-assets/skills/cfn-redis-coordination/test-redis-check.js +84 -0
  382. package/claude-assets/skills/cfn-redis-coordination/test-task-mode-redis.cjs +391 -0
  383. package/claude-assets/skills/cfn-redis-coordination/tests/coordination.test.ts +779 -0
  384. package/claude-assets/skills/cfn-redis-coordination/tsconfig.json +31 -0
  385. package/claude-assets/skills/cfn-skill-propagation/README.md +233 -0
  386. package/claude-assets/skills/cfn-skill-propagation/package-lock.json +5174 -0
  387. package/claude-assets/skills/cfn-skill-propagation/package.json +52 -0
  388. package/claude-assets/skills/cfn-skill-propagation/propagate-skill-update.sh +32 -0
  389. package/claude-assets/skills/cfn-skill-propagation/src/cli.ts +75 -0
  390. package/claude-assets/skills/cfn-skill-propagation/src/database-adapter.ts +239 -0
  391. package/claude-assets/skills/cfn-skill-propagation/src/file-system-adapter.ts +113 -0
  392. package/claude-assets/skills/cfn-skill-propagation/src/index.ts +72 -0
  393. package/claude-assets/skills/cfn-skill-propagation/src/logger.ts +43 -0
  394. package/claude-assets/skills/cfn-skill-propagation/src/metadata-parser.ts +154 -0
  395. package/claude-assets/skills/cfn-skill-propagation/src/skill-propagator.ts +274 -0
  396. package/claude-assets/skills/cfn-skill-propagation/src/skill-validator.ts +179 -0
  397. package/claude-assets/skills/cfn-skill-propagation/src/types.ts +143 -0
  398. package/claude-assets/skills/cfn-skill-propagation/src/version-manager.ts +118 -0
  399. package/claude-assets/skills/cfn-skill-propagation/tests/file-system-adapter.test.ts +91 -0
  400. package/claude-assets/skills/cfn-skill-propagation/tests/metadata-parser.test.ts +176 -0
  401. package/claude-assets/skills/cfn-skill-propagation/tests/skill-propagator.test.ts +209 -0
  402. package/claude-assets/skills/cfn-skill-propagation/tests/skill-validator.test.ts +203 -0
  403. package/claude-assets/skills/cfn-skill-propagation/tests/version-manager.test.ts +115 -0
  404. package/claude-assets/skills/cfn-skill-propagation/tsconfig.json +34 -0
  405. package/claude-assets/skills/task-classifier/SKILL.md +81 -0
  406. package/claude-assets/skills/task-classifier/classify-task.sh +62 -0
  407. package/claude-assets/skills/workflow-codification/package-lock.json +5170 -0
  408. package/claude-assets/skills/workflow-codification/package.json +30 -0
  409. package/claude-assets/skills/workflow-codification/src/index.ts +24 -0
  410. package/claude-assets/skills/workflow-codification/src/pattern-analyzer.ts +537 -0
  411. package/claude-assets/skills/workflow-codification/src/types.ts +180 -0
  412. package/claude-assets/skills/workflow-codification/tests/pattern-analyzer.test.ts +960 -0
  413. package/claude-assets/skills/workflow-codification/tsconfig.json +34 -0
  414. package/claude-assets/skills/workflow-codification/workflow-codification.db +0 -0
  415. package/dist/agent-spawner/agent-spawner.js +448 -0
  416. package/dist/agent-spawner/agent-spawner.js.map +1 -0
  417. package/dist/agent-spawner/index.js +10 -0
  418. package/dist/agent-spawner/index.js.map +1 -0
  419. package/dist/agent-spawner/types.js +14 -0
  420. package/dist/agent-spawner/types.js.map +1 -0
  421. package/dist/cli/agent-executor.js +47 -1
  422. package/dist/cli/agent-executor.js.map +1 -1
  423. package/dist/cli/agent-spawn.js +4 -1
  424. package/dist/cli/agent-spawn.js.map +1 -1
  425. package/dist/cli/config-manager.js +109 -91
  426. package/dist/cli/config-manager.js.map +1 -1
  427. package/dist/cli/conversation-fork-cleanup.js +201 -0
  428. package/dist/cli/conversation-fork-cleanup.js.map +1 -0
  429. package/dist/cli/conversation-fork.js +16 -3
  430. package/dist/cli/conversation-fork.js.map +1 -1
  431. package/dist/cli/tool-executor.js +3 -1
  432. package/dist/cli/tool-executor.js.map +1 -1
  433. package/dist/gate-checker/gate-checker.js +292 -0
  434. package/dist/gate-checker/gate-checker.js.map +1 -0
  435. package/dist/gate-checker/types.js +94 -0
  436. package/dist/gate-checker/types.js.map +1 -0
  437. package/dist/lib/database-service/connection-pool-manager.js +2 -1
  438. package/dist/lib/database-service/connection-pool-manager.js.map +1 -1
  439. package/dist/orchestrator/index.js +10 -0
  440. package/dist/orchestrator/index.js.map +1 -0
  441. package/dist/orchestrator/orchestrate.js +496 -0
  442. package/dist/orchestrator/orchestrate.js.map +1 -0
  443. package/dist/orchestrator/types.js +58 -0
  444. package/dist/orchestrator/types.js.map +1 -0
  445. package/docs/BUG_19_MEMORY_LEAK_TASK_MODE.md +405 -0
  446. package/docs/MEMORY_CLEANUP_GUIDE.md +358 -0
  447. package/docs/MEMORY_LEAK_FIX_SUMMARY.md +322 -0
  448. package/docs/REDIS_CLEANUP_EXECUTIVE_SUMMARY.md +319 -0
  449. package/docs/REDIS_CLEANUP_VERIFICATION_REPORT.md +574 -0
  450. package/package.json +208 -201
  451. package/readme/README.md +34 -1
  452. package/scripts/switch-api.sh +142 -4
  453. package/scripts/verify-no-secrets.sh +6 -13
  454. package/scripts/verify-redis-cleanup.sh +173 -0
  455. package/tests/README.md +201 -0
  456. package/tests/test-memory-leak-task-mode.sh +435 -0
@@ -0,0 +1,209 @@
1
+ /**
2
+ * Integration tests for Skill Propagator
3
+ */
4
+
5
+ import { SkillPropagator } from '../src/skill-propagator';
6
+ import { MockFileSystemAdapter } from '../src/file-system-adapter';
7
+ import { MockDatabaseAdapter } from '../src/database-adapter';
8
+ import { NoOpLogger } from '../src/logger';
9
+ import type { SkillPropagationOptions } from '../src/types';
10
+
11
+ describe('SkillPropagator', () => {
12
+ let propagator: SkillPropagator;
13
+ let fs: MockFileSystemAdapter;
14
+ let db: MockDatabaseAdapter;
15
+
16
+ beforeEach(() => {
17
+ fs = new MockFileSystemAdapter();
18
+ db = new MockDatabaseAdapter();
19
+ const logger = new NoOpLogger();
20
+ propagator = new SkillPropagator(fs, db, logger);
21
+ });
22
+
23
+ afterEach(() => {
24
+ fs.clear();
25
+ db.clear();
26
+ });
27
+
28
+ describe('propagate', () => {
29
+ it('should propagate skill update successfully', async () => {
30
+ // Setup mock data
31
+ const skillContent = `---
32
+ name: test-skill
33
+ version: 2.0.0
34
+ description: Updated skill
35
+ tags: [tag1, tag2]
36
+ category: utilities
37
+ owner: team
38
+ approval_level: high
39
+ ---
40
+ Skill content`;
41
+
42
+ fs.setFile('/path/to/skill-v2.0.0.md', skillContent);
43
+ fs.setFile('./.claude/skills-database/skills.db', 'db');
44
+ fs.setHash('/path/to/skill-v2.0.0.md', 'newhash123');
45
+
46
+ // Mock database responses
47
+ db.setTableData('skills', [{
48
+ id: 1,
49
+ name: 'test-skill',
50
+ version: '1.0.0',
51
+ content_hash: 'oldhash456',
52
+ content_path: '/path/to/skill-v1.0.0.md',
53
+ tags: '["old"]',
54
+ category: 'old-cat',
55
+ owner: 'old-owner',
56
+ approval_level: 'low',
57
+ }]);
58
+
59
+ const options: SkillPropagationOptions = {
60
+ skillName: 'test-skill',
61
+ newVersion: '2.0.0',
62
+ updatePath: '/path/to/skill-v2.0.0.md',
63
+ changeType: 'major',
64
+ databasePath: './.claude/skills-database/skills.db',
65
+ };
66
+
67
+ const result = await propagator.propagate(options);
68
+
69
+ expect(result.success).toBe(true);
70
+ expect(result.skillName).toBe('test-skill');
71
+ expect(result.newVersion).toBe('2.0.0');
72
+ expect(result.oldVersion).toBe('1.0.0');
73
+ expect(result.changeType).toBe('major');
74
+ expect(result.contentHash).toBe('newhash123');
75
+ });
76
+
77
+ it('should throw on validation failure', async () => {
78
+ fs.setFile('./.claude/skills-database/skills.db', 'db');
79
+
80
+ const options: SkillPropagationOptions = {
81
+ skillName: 'test-skill',
82
+ newVersion: '1.0', // Invalid version
83
+ updatePath: '/path/to/skill.md',
84
+ databasePath: './.claude/skills-database/skills.db',
85
+ };
86
+
87
+ await expect(propagator.propagate(options)).rejects.toThrow();
88
+ });
89
+
90
+ it('should throw on missing skill in database', async () => {
91
+ fs.setFile('/path/to/skill.md', 'content');
92
+ fs.setFile('./.claude/skills-database/skills.db', 'db');
93
+ db.setTableData('skills', []); // Empty database
94
+
95
+ const options: SkillPropagationOptions = {
96
+ skillName: 'missing-skill',
97
+ newVersion: '1.0.0',
98
+ updatePath: '/path/to/skill.md',
99
+ databasePath: './.claude/skills-database/skills.db',
100
+ };
101
+
102
+ await expect(propagator.propagate(options)).rejects.toThrow('Skill not found');
103
+ });
104
+
105
+ it('should throw on version increment mismatch', async () => {
106
+ const skillContent = `---
107
+ name: test-skill
108
+ version: 1.1.0
109
+ description: Updated skill
110
+ ---
111
+ Content`;
112
+
113
+ fs.setFile('/path/to/skill.md', skillContent);
114
+ fs.setFile('./.claude/skills-database/skills.db', 'db');
115
+ fs.setHash('/path/to/skill.md', 'newhash');
116
+
117
+ db.setTableData('skills', [{
118
+ id: 1,
119
+ name: 'test-skill',
120
+ version: '1.0.0',
121
+ content_hash: 'oldhash',
122
+ content_path: '/path/to/old.md',
123
+ }]);
124
+
125
+ const options: SkillPropagationOptions = {
126
+ skillName: 'test-skill',
127
+ newVersion: '1.1.0',
128
+ updatePath: '/path/to/skill.md',
129
+ changeType: 'patch', // Mismatch: actual is minor
130
+ databasePath: './.claude/skills-database/skills.db',
131
+ };
132
+
133
+ await expect(propagator.propagate(options)).rejects.toThrow();
134
+ });
135
+
136
+ it('should throw on unchanged content hash', async () => {
137
+ const skillContent = `---
138
+ name: test-skill
139
+ version: 1.0.1
140
+ description: Updated skill
141
+ ---
142
+ Content`;
143
+
144
+ const hash = 'samehash123';
145
+
146
+ fs.setFile('/path/to/skill.md', skillContent);
147
+ fs.setFile('./.claude/skills-database/skills.db', 'db');
148
+ fs.setHash('/path/to/skill.md', hash);
149
+
150
+ db.setTableData('skills', [{
151
+ id: 1,
152
+ name: 'test-skill',
153
+ version: '1.0.0',
154
+ content_hash: hash, // Same hash
155
+ content_path: '/path/to/old.md',
156
+ }]);
157
+
158
+ const options: SkillPropagationOptions = {
159
+ skillName: 'test-skill',
160
+ newVersion: '1.0.1',
161
+ updatePath: '/path/to/skill.md',
162
+ changeType: 'patch',
163
+ databasePath: './.claude/skills-database/skills.db',
164
+ };
165
+
166
+ await expect(propagator.propagate(options)).rejects.toThrow('Content hash unchanged');
167
+ });
168
+
169
+ it('should support agent notifications', async () => {
170
+ const skillContent = `---
171
+ name: test-skill
172
+ version: 2.0.0
173
+ description: Updated skill
174
+ ---
175
+ Content`;
176
+
177
+ fs.setFile('/path/to/skill.md', skillContent);
178
+ fs.setFile('./.claude/skills-database/skills.db', 'db');
179
+ fs.setHash('/path/to/skill.md', 'newhash');
180
+
181
+ db.setTableData('skills', [{
182
+ id: 1,
183
+ name: 'test-skill',
184
+ version: '1.0.0',
185
+ content_hash: 'oldhash',
186
+ content_path: '/path/to/old.md',
187
+ }]);
188
+
189
+ db.setTableData('agent_skill_mappings', [
190
+ { skill_id: 1, agent_type: 'backend-developer' },
191
+ { skill_id: 1, agent_type: 'frontend-developer' },
192
+ ]);
193
+
194
+ const options: SkillPropagationOptions = {
195
+ skillName: 'test-skill',
196
+ newVersion: '2.0.0',
197
+ updatePath: '/path/to/skill.md',
198
+ changeType: 'major',
199
+ notifyAgents: true,
200
+ databasePath: './.claude/skills-database/skills.db',
201
+ };
202
+
203
+ const result = await propagator.propagate(options);
204
+
205
+ expect(result.success).toBe(true);
206
+ expect(result.affectedAgents).toBeDefined();
207
+ });
208
+ });
209
+ });
@@ -0,0 +1,203 @@
1
+ /**
2
+ * Tests for Skill Validator
3
+ */
4
+
5
+ import { SkillValidator } from '../src/skill-validator';
6
+ import { MockFileSystemAdapter } from '../src/file-system-adapter';
7
+ import { MockDatabaseAdapter } from '../src/database-adapter';
8
+
9
+ describe('SkillValidator', () => {
10
+ let validator: SkillValidator;
11
+ let fs: MockFileSystemAdapter;
12
+ let db: MockDatabaseAdapter;
13
+
14
+ beforeEach(() => {
15
+ fs = new MockFileSystemAdapter();
16
+ db = new MockDatabaseAdapter();
17
+ validator = new SkillValidator(fs, db);
18
+ });
19
+
20
+ afterEach(() => {
21
+ fs.clear();
22
+ db.clear();
23
+ });
24
+
25
+ describe('validateParameters', () => {
26
+ it('should validate complete options', async () => {
27
+ fs.setFile('/path/to/skill.md', '---\nname: test\n---');
28
+ fs.setFile('./.claude/skills-database/skills.db', 'db');
29
+
30
+ const options = {
31
+ skillName: 'test-skill',
32
+ newVersion: '1.0.0',
33
+ updatePath: '/path/to/skill.md',
34
+ changeType: 'patch' as const,
35
+ databasePath: './.claude/skills-database/skills.db',
36
+ };
37
+
38
+ const result = await validator.validateParameters(options);
39
+ expect(result.valid).toBe(true);
40
+ expect(result.errors).toHaveLength(0);
41
+ });
42
+
43
+ it('should error on missing skillName', async () => {
44
+ const options = {
45
+ skillName: '',
46
+ newVersion: '1.0.0',
47
+ updatePath: '/path/to/skill.md',
48
+ databasePath: './.claude/skills-database/skills.db',
49
+ };
50
+
51
+ const result = await validator.validateParameters(options);
52
+ expect(result.valid).toBe(false);
53
+ expect(result.errors.some(e => e.includes('skillName'))).toBe(true);
54
+ });
55
+
56
+ it('should error on missing newVersion', async () => {
57
+ const options = {
58
+ skillName: 'test-skill',
59
+ newVersion: '',
60
+ updatePath: '/path/to/skill.md',
61
+ databasePath: './.claude/skills-database/skills.db',
62
+ };
63
+
64
+ const result = await validator.validateParameters(options);
65
+ expect(result.valid).toBe(false);
66
+ expect(result.errors.some(e => e.includes('newVersion'))).toBe(true);
67
+ });
68
+
69
+ it('should error on missing updatePath', async () => {
70
+ const options = {
71
+ skillName: 'test-skill',
72
+ newVersion: '1.0.0',
73
+ updatePath: '',
74
+ databasePath: './.claude/skills-database/skills.db',
75
+ };
76
+
77
+ const result = await validator.validateParameters(options);
78
+ expect(result.valid).toBe(false);
79
+ expect(result.errors.some(e => e.includes('updatePath'))).toBe(true);
80
+ });
81
+
82
+ it('should error on invalid skill name', async () => {
83
+ fs.setFile('/path/to/skill.md', 'content');
84
+ fs.setFile('./.claude/skills-database/skills.db', 'db');
85
+
86
+ const options = {
87
+ skillName: 'skill@invalid!',
88
+ newVersion: '1.0.0',
89
+ updatePath: '/path/to/skill.md',
90
+ databasePath: './.claude/skills-database/skills.db',
91
+ };
92
+
93
+ const result = await validator.validateParameters(options);
94
+ expect(result.valid).toBe(false);
95
+ expect(result.errors.some(e => e.includes('Invalid skill name'))).toBe(true);
96
+ });
97
+
98
+ it('should error on invalid version format', async () => {
99
+ fs.setFile('/path/to/skill.md', 'content');
100
+ fs.setFile('./.claude/skills-database/skills.db', 'db');
101
+
102
+ const options = {
103
+ skillName: 'test-skill',
104
+ newVersion: '1.0',
105
+ updatePath: '/path/to/skill.md',
106
+ databasePath: './.claude/skills-database/skills.db',
107
+ };
108
+
109
+ const result = await validator.validateParameters(options);
110
+ expect(result.valid).toBe(false);
111
+ expect(result.errors.some(e => e.includes('Invalid version format'))).toBe(true);
112
+ });
113
+
114
+ it('should error on non-existent update file', async () => {
115
+ fs.setFile('./.claude/skills-database/skills.db', 'db');
116
+
117
+ const options = {
118
+ skillName: 'test-skill',
119
+ newVersion: '1.0.0',
120
+ updatePath: '/missing/file.md',
121
+ databasePath: './.claude/skills-database/skills.db',
122
+ };
123
+
124
+ const result = await validator.validateParameters(options);
125
+ expect(result.valid).toBe(false);
126
+ expect(result.errors.some(e => e.includes('Update file not found'))).toBe(true);
127
+ });
128
+
129
+ it('should error on invalid change type', async () => {
130
+ fs.setFile('/path/to/skill.md', 'content');
131
+ fs.setFile('./.claude/skills-database/skills.db', 'db');
132
+
133
+ const options = {
134
+ skillName: 'test-skill',
135
+ newVersion: '1.0.0',
136
+ updatePath: '/path/to/skill.md',
137
+ changeType: 'invalid' as any,
138
+ databasePath: './.claude/skills-database/skills.db',
139
+ };
140
+
141
+ const result = await validator.validateParameters(options);
142
+ expect(result.valid).toBe(false);
143
+ expect(result.errors.some(e => e.includes('Invalid changeType'))).toBe(true);
144
+ });
145
+ });
146
+
147
+ describe('validateVersionIncrement', () => {
148
+ it('should validate patch increment', async () => {
149
+ const result = await validator.validateVersionIncrement('1.0.0', '1.0.1', 'patch');
150
+ expect(result.valid).toBe(true);
151
+ expect(result.errors).toHaveLength(0);
152
+ });
153
+
154
+ it('should validate minor increment', async () => {
155
+ const result = await validator.validateVersionIncrement('1.0.0', '1.1.0', 'minor');
156
+ expect(result.valid).toBe(true);
157
+ expect(result.errors).toHaveLength(0);
158
+ });
159
+
160
+ it('should validate major increment', async () => {
161
+ const result = await validator.validateVersionIncrement('1.0.0', '2.0.0', 'major');
162
+ expect(result.valid).toBe(true);
163
+ expect(result.errors).toHaveLength(0);
164
+ });
165
+
166
+ it('should error on same version', async () => {
167
+ const result = await validator.validateVersionIncrement('1.0.0', '1.0.0', 'patch');
168
+ expect(result.valid).toBe(false);
169
+ expect(result.errors.some(e => e.includes('Version unchanged'))).toBe(true);
170
+ });
171
+
172
+ it('should error on downgrade', async () => {
173
+ const result = await validator.validateVersionIncrement('2.0.0', '1.0.0', 'major');
174
+ expect(result.valid).toBe(false);
175
+ expect(result.errors.some(e => e.includes('downgrade'))).toBe(true);
176
+ });
177
+
178
+ it('should error on type mismatch', async () => {
179
+ const result = await validator.validateVersionIncrement('1.0.0', '1.1.0', 'patch');
180
+ expect(result.valid).toBe(false);
181
+ expect(result.errors.some(e => e.includes('mismatch'))).toBe(true);
182
+ });
183
+ });
184
+
185
+ describe('validateContentHashChanged', () => {
186
+ it('should accept different hashes', () => {
187
+ const result = validator.validateContentHashChanged(
188
+ 'hash1',
189
+ 'hash2'
190
+ );
191
+ expect(result.valid).toBe(true);
192
+ });
193
+
194
+ it('should error on same hash', () => {
195
+ const result = validator.validateContentHashChanged(
196
+ 'samehash',
197
+ 'samehash'
198
+ );
199
+ expect(result.valid).toBe(false);
200
+ expect(result.errors.some(e => e.includes('Content hash unchanged'))).toBe(true);
201
+ });
202
+ });
203
+ });
@@ -0,0 +1,115 @@
1
+ /**
2
+ * Tests for Version Manager
3
+ */
4
+
5
+ import { VersionManager } from '../src/version-manager';
6
+
7
+ describe('VersionManager', () => {
8
+ describe('parseVersion', () => {
9
+ it('should parse valid semantic version', () => {
10
+ const result = VersionManager.parseVersion('1.2.3');
11
+ expect(result).toEqual({ major: 1, minor: 2, patch: 3 });
12
+ });
13
+
14
+ it('should parse zero versions', () => {
15
+ const result = VersionManager.parseVersion('0.0.0');
16
+ expect(result).toEqual({ major: 0, minor: 0, patch: 0 });
17
+ });
18
+
19
+ it('should throw on invalid format', () => {
20
+ expect(() => VersionManager.parseVersion('1.2')).toThrow();
21
+ expect(() => VersionManager.parseVersion('1.2.3.4')).toThrow();
22
+ expect(() => VersionManager.parseVersion('a.b.c')).toThrow();
23
+ });
24
+ });
25
+
26
+ describe('isValidVersion', () => {
27
+ it('should accept valid versions', () => {
28
+ expect(VersionManager.isValidVersion('1.0.0')).toBe(true);
29
+ expect(VersionManager.isValidVersion('0.0.1')).toBe(true);
30
+ expect(VersionManager.isValidVersion('10.20.30')).toBe(true);
31
+ });
32
+
33
+ it('should reject invalid versions', () => {
34
+ expect(VersionManager.isValidVersion('1.0')).toBe(false);
35
+ expect(VersionManager.isValidVersion('1.0.0.0')).toBe(false);
36
+ expect(VersionManager.isValidVersion('v1.0.0')).toBe(false);
37
+ });
38
+ });
39
+
40
+ describe('compareVersions', () => {
41
+ it('should detect major version increase', () => {
42
+ expect(VersionManager.compareVersions('1.0.0', '2.0.0')).toBe('major');
43
+ });
44
+
45
+ it('should detect minor version increase', () => {
46
+ expect(VersionManager.compareVersions('1.0.0', '1.1.0')).toBe('minor');
47
+ });
48
+
49
+ it('should detect patch version increase', () => {
50
+ expect(VersionManager.compareVersions('1.0.0', '1.0.1')).toBe('patch');
51
+ });
52
+
53
+ it('should detect same version', () => {
54
+ expect(VersionManager.compareVersions('1.0.0', '1.0.0')).toBe('same');
55
+ });
56
+
57
+ it('should detect downgrade', () => {
58
+ expect(VersionManager.compareVersions('2.0.0', '1.0.0')).toBe('downgrade');
59
+ expect(VersionManager.compareVersions('1.1.0', '1.0.0')).toBe('downgrade');
60
+ expect(VersionManager.compareVersions('1.0.1', '1.0.0')).toBe('downgrade');
61
+ });
62
+
63
+ it('should compare correctly with zero versions', () => {
64
+ expect(VersionManager.compareVersions('0.0.0', '0.0.1')).toBe('patch');
65
+ expect(VersionManager.compareVersions('0.0.1', '0.1.0')).toBe('minor');
66
+ expect(VersionManager.compareVersions('0.1.0', '1.0.0')).toBe('major');
67
+ });
68
+ });
69
+
70
+ describe('validateVersionIncrement', () => {
71
+ it('should validate patch version increment', () => {
72
+ const result = VersionManager.validateVersionIncrement('1.0.0', '1.0.1', 'patch');
73
+ expect(result.isValid).toBe(true);
74
+ expect(result.changeType).toBe('patch');
75
+ });
76
+
77
+ it('should validate minor version increment', () => {
78
+ const result = VersionManager.validateVersionIncrement('1.0.0', '1.1.0', 'minor');
79
+ expect(result.isValid).toBe(true);
80
+ expect(result.changeType).toBe('minor');
81
+ });
82
+
83
+ it('should validate major version increment', () => {
84
+ const result = VersionManager.validateVersionIncrement('1.0.0', '2.0.0', 'major');
85
+ expect(result.isValid).toBe(true);
86
+ expect(result.changeType).toBe('major');
87
+ });
88
+
89
+ it('should reject mismatched change types', () => {
90
+ const result = VersionManager.validateVersionIncrement('1.0.0', '1.1.0', 'patch');
91
+ expect(result.isValid).toBe(false);
92
+ expect(result.changeType).toBe('minor');
93
+ });
94
+
95
+ it('should reject same version', () => {
96
+ const result = VersionManager.validateVersionIncrement('1.0.0', '1.0.0', 'patch');
97
+ expect(result.isValid).toBe(false);
98
+ expect(result.changeType).toBe('same');
99
+ });
100
+
101
+ it('should reject downgrade', () => {
102
+ const result = VersionManager.validateVersionIncrement('1.0.0', '0.9.0', 'patch');
103
+ expect(result.isValid).toBe(false);
104
+ expect(result.changeType).toBe('downgrade');
105
+ });
106
+ });
107
+
108
+ describe('getChangeDescription', () => {
109
+ it('should return appropriate descriptions', () => {
110
+ expect(VersionManager.getChangeDescription('major')).toContain('Breaking');
111
+ expect(VersionManager.getChangeDescription('minor')).toContain('features');
112
+ expect(VersionManager.getChangeDescription('patch')).toContain('Bug fix');
113
+ });
114
+ });
115
+ });
@@ -0,0 +1,34 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES2020",
4
+ "module": "ESNext",
5
+ "lib": ["ES2020"],
6
+ "outDir": "./dist",
7
+ "rootDir": "./src",
8
+ "declaration": true,
9
+ "declarationMap": true,
10
+ "sourceMap": true,
11
+ "strict": true,
12
+ "esModuleInterop": true,
13
+ "skipLibCheck": true,
14
+ "forceConsistentCasingInFileNames": true,
15
+ "resolveJsonModule": true,
16
+ "allowSyntheticDefaultImports": true,
17
+ "moduleResolution": "node",
18
+ "noImplicitAny": true,
19
+ "strictNullChecks": true,
20
+ "strictFunctionTypes": true,
21
+ "strictBindCallApply": true,
22
+ "strictPropertyInitialization": true,
23
+ "noImplicitThis": true,
24
+ "alwaysStrict": true,
25
+ "noUnusedLocals": true,
26
+ "noUnusedParameters": true,
27
+ "noImplicitReturns": true,
28
+ "noFallthroughCasesInSwitch": true,
29
+ "noUncheckedIndexedAccess": true,
30
+ "noPropertyAccessFromIndexSignature": true
31
+ },
32
+ "include": ["src/**/*.ts"],
33
+ "exclude": ["node_modules", "dist", "tests"]
34
+ }
@@ -0,0 +1,81 @@
1
+ ---
2
+ name: task-classifier
3
+ description: Analyzes task descriptions and classifies them into categories for agent selection
4
+ version: 1.0.0
5
+ tags: [classification, agent-selection, automation]
6
+ ---
7
+
8
+ # Task Classifier Skill
9
+
10
+ Analyzes task descriptions using keyword matching to suggest appropriate agent specializations.
11
+
12
+ ## Usage
13
+
14
+ ```bash
15
+ ./.claude/skills/task-classifier/classify-task.sh "Task description"
16
+ ```
17
+
18
+ ## Classification Categories
19
+
20
+ | Category | Keywords | Use Case |
21
+ |----------|----------|----------|
22
+ | **frontend** | ui, ux, react, component, css, styling, layout, responsive, interface | UI/UX development |
23
+ | **backend** | api, endpoint, server, database, rest, graphql, service, authentication | Server-side development |
24
+ | **devops** | docker, kubernetes, ci/cd, deployment, infrastructure, container, pipeline | Infrastructure work |
25
+ | **testing** | test, qa, validation, coverage, integration, unit, e2e | Quality assurance |
26
+ | **security** | security, auth, encryption, vulnerability, audit, penetration | Security work |
27
+ | **data** | database, sql, migration, schema, data, model, entity | Data modeling |
28
+ | **performance** | performance, optimization, speed, cache, memory, cpu | Performance tuning |
29
+ | **general** | (default) | General development |
30
+
31
+ ## Output Format
32
+
33
+ Comma-separated list of classifications:
34
+
35
+ ```bash
36
+ $ classify-task.sh "Create a React dashboard with API integration"
37
+ frontend,backend,testing
38
+ ```
39
+
40
+ ## Integration with Agent Selector
41
+
42
+ This skill is typically used with `cfn-agent-selector` to determine which agents to spawn:
43
+
44
+ ```bash
45
+ CLASSIFICATION=$(classify-task.sh "$TASK_DESCRIPTION")
46
+ AGENTS=$(select-agents.sh --classification "$CLASSIFICATION" --mode standard)
47
+ ```
48
+
49
+ ## Examples
50
+
51
+ ```bash
52
+ # Frontend task
53
+ $ classify-task.sh "Build responsive navigation component"
54
+ frontend
55
+
56
+ # Full-stack task
57
+ $ classify-task.sh "Create REST API with React admin panel"
58
+ frontend,backend
59
+
60
+ # DevOps task
61
+ $ classify-task.sh "Setup CI/CD pipeline with Docker"
62
+ devops
63
+
64
+ # Security audit
65
+ $ classify-task.sh "Perform security audit and fix vulnerabilities"
66
+ security
67
+ ```
68
+
69
+ ## Implementation Details
70
+
71
+ - Uses `grep -E` for case-insensitive pattern matching
72
+ - Returns multiple classifications if multiple keywords match
73
+ - Falls back to "general" if no specific keywords detected
74
+ - Stateless execution (no persistent state)
75
+ - Exit code 0 on success, 1 on error
76
+
77
+ ## Used By
78
+
79
+ - `cfn-v3-coordinator` - For automatic agent selection
80
+ - `cfn-agent-selector` - As input for agent mapping
81
+ - CFN Loop orchestration - For task-specific agent spawning