claude-flow-novice 2.18.12 → 2.18.14

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 (332) hide show
  1. package/.backups/unknown/1765417503_2999b9ec66f591dd76075617ec31fcea/metadata.json +8 -0
  2. package/.backups/unknown/1765417503_2999b9ec66f591dd76075617ec31fcea/original +3 -0
  3. package/.backups/unknown/1765417503_2999b9ec66f591dd76075617ec31fcea/revert.sh +7 -0
  4. package/.backups/unknown/1765417531_2999b9ec66f591dd76075617ec31fcea/metadata.json +8 -0
  5. package/.backups/unknown/1765417531_2999b9ec66f591dd76075617ec31fcea/original +3 -0
  6. package/.backups/unknown/1765417531_2999b9ec66f591dd76075617ec31fcea/revert.sh +7 -0
  7. package/.backups/unknown/1765417552_2999b9ec66f591dd76075617ec31fcea/metadata.json +8 -0
  8. package/.backups/unknown/1765417552_2999b9ec66f591dd76075617ec31fcea/original +3 -0
  9. package/.backups/unknown/1765417552_2999b9ec66f591dd76075617ec31fcea/revert.sh +7 -0
  10. package/.backups/unknown/1765417613_1f34dbf0fe1ec3b6cb74ba7c4e12a2a4/metadata.json +8 -0
  11. package/.backups/unknown/1765417613_1f34dbf0fe1ec3b6cb74ba7c4e12a2a4/original +1212 -0
  12. package/.backups/unknown/1765417613_1f34dbf0fe1ec3b6cb74ba7c4e12a2a4/revert.sh +7 -0
  13. package/.backups/unknown/1765417613_332e9bb223a26270398922640c1c1653/metadata.json +8 -0
  14. package/.backups/unknown/1765417613_332e9bb223a26270398922640c1c1653/original +1212 -0
  15. package/.backups/unknown/1765417613_332e9bb223a26270398922640c1c1653/revert.sh +7 -0
  16. package/.backups/unknown/1765417613_45880a7afef063347b701e7e88e2df9c/metadata.json +8 -0
  17. package/.backups/unknown/1765417613_45880a7afef063347b701e7e88e2df9c/original +1212 -0
  18. package/.backups/unknown/1765417613_45880a7afef063347b701e7e88e2df9c/revert.sh +7 -0
  19. package/.backups/unknown/1765417614_1b6c3b658c2891dbe245aea4bad41661/metadata.json +8 -0
  20. package/.backups/unknown/1765417614_1b6c3b658c2891dbe245aea4bad41661/original +1228 -0
  21. package/.backups/unknown/1765417614_1b6c3b658c2891dbe245aea4bad41661/revert.sh +7 -0
  22. package/.backups/unknown/1765417614_1ed5bd129f0b5d1b297a04ec5267ef62/metadata.json +8 -0
  23. package/.backups/unknown/1765417614_1ed5bd129f0b5d1b297a04ec5267ef62/original +1237 -0
  24. package/.backups/unknown/1765417614_1ed5bd129f0b5d1b297a04ec5267ef62/revert.sh +7 -0
  25. package/.backups/unknown/1765417614_28e032bd1b62dbfcecbd56327a0b0e23/metadata.json +8 -0
  26. package/.backups/unknown/1765417614_28e032bd1b62dbfcecbd56327a0b0e23/original +1240 -0
  27. package/.backups/unknown/1765417614_28e032bd1b62dbfcecbd56327a0b0e23/revert.sh +7 -0
  28. package/.backups/unknown/1765417614_40a1ce1b0efa2e1ba1958c27b2cbc557/metadata.json +8 -0
  29. package/.backups/unknown/1765417614_40a1ce1b0efa2e1ba1958c27b2cbc557/original +1216 -0
  30. package/.backups/unknown/1765417614_40a1ce1b0efa2e1ba1958c27b2cbc557/revert.sh +7 -0
  31. package/.backups/unknown/1765417614_f65dbf58cff7a9aa1c5c3d0d1618074a/metadata.json +8 -0
  32. package/.backups/unknown/1765417614_f65dbf58cff7a9aa1c5c3d0d1618074a/original +1238 -0
  33. package/.backups/unknown/1765417614_f65dbf58cff7a9aa1c5c3d0d1618074a/revert.sh +7 -0
  34. package/.backups/unknown/1765417615_0f45c28b9b8d5204974421c06075ff74/metadata.json +8 -0
  35. package/.backups/unknown/1765417615_0f45c28b9b8d5204974421c06075ff74/original +1167 -0
  36. package/.backups/unknown/1765417615_0f45c28b9b8d5204974421c06075ff74/revert.sh +7 -0
  37. package/.backups/unknown/1765417615_41d36156891ddb6f63d1b4da59d1db4c/metadata.json +8 -0
  38. package/.backups/unknown/1765417615_41d36156891ddb6f63d1b4da59d1db4c/original +1242 -0
  39. package/.backups/unknown/1765417615_41d36156891ddb6f63d1b4da59d1db4c/revert.sh +7 -0
  40. package/.backups/unknown/1765417709_77dda8631459cfc2ab94b8928f7d90b4/metadata.json +8 -0
  41. package/.backups/unknown/1765417709_77dda8631459cfc2ab94b8928f7d90b4/original +2 -0
  42. package/.backups/unknown/1765417709_77dda8631459cfc2ab94b8928f7d90b4/revert.sh +7 -0
  43. package/.backups/unknown/1765417775_1405837bacf112ba832a139840fe94e7/metadata.json +8 -0
  44. package/.backups/unknown/1765417775_1405837bacf112ba832a139840fe94e7/original +1169 -0
  45. package/.backups/unknown/1765417775_1405837bacf112ba832a139840fe94e7/revert.sh +7 -0
  46. package/.backups/unknown/1765417775_8044b4a5cfdcb5cd71317831ad53f5a2/metadata.json +8 -0
  47. package/.backups/unknown/1765417775_8044b4a5cfdcb5cd71317831ad53f5a2/original +1171 -0
  48. package/.backups/unknown/1765417775_8044b4a5cfdcb5cd71317831ad53f5a2/revert.sh +7 -0
  49. package/.backups/unknown/1765417775_8eb94d60151e1db262377fbf8a187212/metadata.json +8 -0
  50. package/.backups/unknown/1765417775_8eb94d60151e1db262377fbf8a187212/original +1170 -0
  51. package/.backups/unknown/1765417775_8eb94d60151e1db262377fbf8a187212/revert.sh +7 -0
  52. package/.backups/unknown/1765417776_a0d4b709e15e0bfa002c4b128f5e4603/metadata.json +8 -0
  53. package/.backups/unknown/1765417776_a0d4b709e15e0bfa002c4b128f5e4603/original +1173 -0
  54. package/.backups/unknown/1765417776_a0d4b709e15e0bfa002c4b128f5e4603/revert.sh +7 -0
  55. package/.backups/unknown/1765417776_cb1bc24d98b63564eb73ef782b8c68b3/metadata.json +8 -0
  56. package/.backups/unknown/1765417776_cb1bc24d98b63564eb73ef782b8c68b3/original +1170 -0
  57. package/.backups/unknown/1765417776_cb1bc24d98b63564eb73ef782b8c68b3/revert.sh +7 -0
  58. package/.backups/unknown/1765417777_1c4cc8c33f476f0c87c8efd4e34efc22/metadata.json +8 -0
  59. package/.backups/unknown/1765417777_1c4cc8c33f476f0c87c8efd4e34efc22/original +1172 -0
  60. package/.backups/unknown/1765417777_1c4cc8c33f476f0c87c8efd4e34efc22/revert.sh +7 -0
  61. package/.backups/unknown/1765417777_325de83ffd34544909b8b9aa6e18dd05/metadata.json +8 -0
  62. package/.backups/unknown/1765417777_325de83ffd34544909b8b9aa6e18dd05/original +1175 -0
  63. package/.backups/unknown/1765417777_325de83ffd34544909b8b9aa6e18dd05/revert.sh +7 -0
  64. package/.backups/unknown/1765417950_402e7c1a8956b56ac7b88e89f024acb4/metadata.json +8 -0
  65. package/.backups/unknown/1765417950_402e7c1a8956b56ac7b88e89f024acb4/original +1178 -0
  66. package/.backups/unknown/1765417950_402e7c1a8956b56ac7b88e89f024acb4/revert.sh +7 -0
  67. package/.backups/unknown/1765417950_647e27e4da18ae42c339e04b4d334feb/metadata.json +8 -0
  68. package/.backups/unknown/1765417950_647e27e4da18ae42c339e04b4d334feb/original +1174 -0
  69. package/.backups/unknown/1765417950_647e27e4da18ae42c339e04b4d334feb/revert.sh +7 -0
  70. package/.backups/unknown/1765417951_1424d2dd67b8c8a4e7cf649b379d21f2/metadata.json +8 -0
  71. package/.backups/unknown/1765417951_1424d2dd67b8c8a4e7cf649b379d21f2/original +1194 -0
  72. package/.backups/unknown/1765417951_1424d2dd67b8c8a4e7cf649b379d21f2/revert.sh +7 -0
  73. package/.backups/unknown/1765417951_6df070ca287ea94a7f08efc69ec9ea51/metadata.json +8 -0
  74. package/.backups/unknown/1765417951_6df070ca287ea94a7f08efc69ec9ea51/original +1186 -0
  75. package/.backups/unknown/1765417951_6df070ca287ea94a7f08efc69ec9ea51/revert.sh +7 -0
  76. package/.backups/unknown/1765417951_848919a1365f6536e5ef8d85d0c80fa7/metadata.json +8 -0
  77. package/.backups/unknown/1765417951_848919a1365f6536e5ef8d85d0c80fa7/original +1180 -0
  78. package/.backups/unknown/1765417951_848919a1365f6536e5ef8d85d0c80fa7/revert.sh +7 -0
  79. package/.backups/unknown/1765417951_b0d1d4ecf85ad10cda0f3900d414b608/metadata.json +8 -0
  80. package/.backups/unknown/1765417951_b0d1d4ecf85ad10cda0f3900d414b608/original +1198 -0
  81. package/.backups/unknown/1765417951_b0d1d4ecf85ad10cda0f3900d414b608/revert.sh +7 -0
  82. package/.backups/unknown/1765417952_2b720e213b5197cbaad53f9f0857f23f/metadata.json +8 -0
  83. package/.backups/unknown/1765417952_2b720e213b5197cbaad53f9f0857f23f/original +1202 -0
  84. package/.backups/unknown/1765417952_2b720e213b5197cbaad53f9f0857f23f/revert.sh +7 -0
  85. package/.backups/unknown/1765417952_ef1d15e8b83a802a0c0f0fc03e56a89c/metadata.json +8 -0
  86. package/.backups/unknown/1765417952_ef1d15e8b83a802a0c0f0fc03e56a89c/original +1202 -0
  87. package/.backups/unknown/1765417952_ef1d15e8b83a802a0c0f0fc03e56a89c/revert.sh +7 -0
  88. package/.backups/unknown/1765418048_ac94238a69a6f86a6ba9d31f623c18a7/metadata.json +8 -0
  89. package/.backups/unknown/1765418048_ac94238a69a6f86a6ba9d31f623c18a7/original +1209 -0
  90. package/.backups/unknown/1765418048_ac94238a69a6f86a6ba9d31f623c18a7/revert.sh +7 -0
  91. package/.backups/unknown/1765418048_f3afed98da63fef9ff57fb5646976f63/metadata.json +8 -0
  92. package/.backups/unknown/1765418048_f3afed98da63fef9ff57fb5646976f63/original +1207 -0
  93. package/.backups/unknown/1765418048_f3afed98da63fef9ff57fb5646976f63/revert.sh +7 -0
  94. package/.backups/unknown/1765418049_9c392702a4e1cace37d17f6f2dfaf54e/metadata.json +8 -0
  95. package/.backups/unknown/1765418049_9c392702a4e1cace37d17f6f2dfaf54e/original +1207 -0
  96. package/.backups/unknown/1765418049_9c392702a4e1cace37d17f6f2dfaf54e/revert.sh +7 -0
  97. package/.backups/unknown/1765418049_9e0777555b51dea4d24d0503b584cfc5/metadata.json +8 -0
  98. package/.backups/unknown/1765418049_9e0777555b51dea4d24d0503b584cfc5/original +1193 -0
  99. package/.backups/unknown/1765418049_9e0777555b51dea4d24d0503b584cfc5/revert.sh +7 -0
  100. package/.backups/unknown/1765418050_22d534bed68f9f5d883bee54e7cbc4d3/metadata.json +8 -0
  101. package/.backups/unknown/1765418050_22d534bed68f9f5d883bee54e7cbc4d3/original +1194 -0
  102. package/.backups/unknown/1765418050_22d534bed68f9f5d883bee54e7cbc4d3/revert.sh +7 -0
  103. package/.backups/unknown/1765418051_d9243722dc90dabc851c5767a62ac7f2/metadata.json +8 -0
  104. package/.backups/unknown/1765418051_d9243722dc90dabc851c5767a62ac7f2/original +1193 -0
  105. package/.backups/unknown/1765418051_d9243722dc90dabc851c5767a62ac7f2/revert.sh +7 -0
  106. package/.backups/unknown/1765418177_21a2fa816d25d419b54ef2d429aab474/metadata.json +8 -0
  107. package/.backups/unknown/1765418177_21a2fa816d25d419b54ef2d429aab474/original +1191 -0
  108. package/.backups/unknown/1765418177_21a2fa816d25d419b54ef2d429aab474/revert.sh +7 -0
  109. package/.backups/unknown/1765418177_33b673dce1eb59d7eb4f752aec882794/metadata.json +8 -0
  110. package/.backups/unknown/1765418177_33b673dce1eb59d7eb4f752aec882794/original +1190 -0
  111. package/.backups/unknown/1765418177_33b673dce1eb59d7eb4f752aec882794/revert.sh +7 -0
  112. package/.backups/unknown/1765418177_72568812ea5a73cf6861a6b14da065fa/metadata.json +8 -0
  113. package/.backups/unknown/1765418177_72568812ea5a73cf6861a6b14da065fa/original +1191 -0
  114. package/.backups/unknown/1765418177_72568812ea5a73cf6861a6b14da065fa/revert.sh +7 -0
  115. package/.backups/unknown/1765418178_20c28b95f12194fe4b81cfb35f4f3757/metadata.json +8 -0
  116. package/.backups/unknown/1765418178_20c28b95f12194fe4b81cfb35f4f3757/original +1189 -0
  117. package/.backups/unknown/1765418178_20c28b95f12194fe4b81cfb35f4f3757/revert.sh +7 -0
  118. package/.backups/unknown/1765418178_cdf68719cc09173769027743e2718ad4/metadata.json +8 -0
  119. package/.backups/unknown/1765418178_cdf68719cc09173769027743e2718ad4/original +1197 -0
  120. package/.backups/unknown/1765418178_cdf68719cc09173769027743e2718ad4/revert.sh +7 -0
  121. package/.backups/unknown/1765418178_eb19e0f8542405480e51af09fad84b71/metadata.json +8 -0
  122. package/.backups/unknown/1765418178_eb19e0f8542405480e51af09fad84b71/original +1190 -0
  123. package/.backups/unknown/1765418178_eb19e0f8542405480e51af09fad84b71/revert.sh +7 -0
  124. package/.backups/unknown/1765418236_c016507725847318a3c369b047cbb802/metadata.json +8 -0
  125. package/.backups/unknown/1765418236_c016507725847318a3c369b047cbb802/original +1197 -0
  126. package/.backups/unknown/1765418236_c016507725847318a3c369b047cbb802/revert.sh +7 -0
  127. package/.backups/unknown/1765418237_932c3cc3a5c537b7933c2370b65f4b39/metadata.json +8 -0
  128. package/.backups/unknown/1765418237_932c3cc3a5c537b7933c2370b65f4b39/original +1197 -0
  129. package/.backups/unknown/1765418237_932c3cc3a5c537b7933c2370b65f4b39/revert.sh +7 -0
  130. package/.claude/agents/cfn-dev-team/utility/epic-creator-v2.md +194 -2
  131. package/.claude/agents/cfn-dev-team/utility/epic-creator-v2.sh +264 -0
  132. package/.claude/agents/cfn-dev-team/utility/epic-creator-v2.sh.backup +698 -0
  133. package/.claude/agents/custom/claude-code-expert.md +56 -0
  134. package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/SKILL.md +1 -1
  135. package/.claude/hooks/README.md +148 -0
  136. package/.claude/hooks/SessionStart:cfn-load-openai-key.sh +35 -0
  137. package/.claude/hooks/cfn-invoke-pre-edit.sh +1 -1
  138. package/.claude/hooks/cfn-load-cerebras-env.sh +65 -0
  139. package/.claude/hooks/cfn-precompact-enhanced.sh +283 -0
  140. package/.claude/hooks/deprecated/README.md +27 -0
  141. package/.claude/settings.json +71 -6
  142. package/.claude/skills/cfn-agent-lifecycle/SKILL.md +1 -1
  143. package/.claude/skills/cfn-agent-tooling/SKILL.md +1 -1
  144. package/.claude/skills/cfn-cerebras-coordinator/QUICKSTART.md +348 -0
  145. package/.claude/skills/cfn-cerebras-coordinator/README.md +525 -0
  146. package/.claude/skills/cfn-cerebras-coordinator/TDD_COORDINATOR_OVERVIEW.md +284 -0
  147. package/.claude/skills/cfn-cerebras-coordinator/conversations/2025-12-10-py-v2-test-1733854200.json +36 -0
  148. package/.claude/skills/cfn-cerebras-coordinator/conversations/2025-12-10-py-v3-test-1765383241.json +36 -0
  149. package/.claude/skills/cfn-cerebras-coordinator/conversations/2025-12-10-rust-v2-test-1765381361.json +36 -0
  150. package/.claude/skills/cfn-cerebras-coordinator/conversations/2025-12-10-rust-v3-test-1765383242.json +46 -0
  151. package/.claude/skills/cfn-cerebras-coordinator/conversations/2025-12-10-ts-v2-test-1733864400.json +66 -0
  152. package/.claude/skills/cfn-cerebras-coordinator/conversations/2025-12-10-ts-v3-test-1765383238.json +66 -0
  153. package/.claude/skills/cfn-cerebras-coordinator/conversations/2025-12-10-ts-v4-test-1765386506.json +66 -0
  154. package/.claude/skills/cfn-cerebras-coordinator/conversations/2025-12-10-ts-v5-test-1765393100.json +66 -0
  155. package/.claude/skills/cfn-cerebras-coordinator/example-usage.sh +206 -0
  156. package/.claude/skills/cfn-cerebras-coordinator/lib/tdd-conversation-coordinator.ts +569 -0
  157. package/.claude/skills/cfn-cerebras-coordinator/test-tdd-coordinator.sh +250 -0
  158. package/.claude/skills/cfn-compilation-error-fixer/SKILL.md +1 -1
  159. package/.claude/skills/cfn-compilation-error-fixer/lib/fixer/cerebras-gated-fixer-v2.ts +1 -1
  160. package/.claude/skills/cfn-config/SKILL.md +1 -1
  161. package/.claude/skills/cfn-dependency-management/SKILL.md +1 -1
  162. package/.claude/skills/cfn-deployment-lifecycle/SKILL.md +1 -1
  163. package/.claude/skills/cfn-edit-safety/SKILL.md +1 -1
  164. package/.claude/skills/cfn-epic-creator/SKILL.md +392 -0
  165. package/.claude/skills/cfn-epic-creator/estimate-costs.sh +524 -0
  166. package/.claude/skills/cfn-epic-creator/invoke.sh +445 -0
  167. package/.claude/skills/cfn-epic-creator/parse-personas.sh +533 -0
  168. package/.claude/skills/cfn-epic-creator/security-utils.sh +268 -0
  169. package/.claude/skills/cfn-epic-creator/security-verification-demo.sh +127 -0
  170. package/.claude/skills/cfn-epic-creator/test-invoke.sh +620 -0
  171. package/.claude/skills/cfn-epic-creator/test-security-fixes.sh +195 -0
  172. package/.claude/skills/cfn-epic-creator/test-security-simple.sh +165 -0
  173. package/.claude/skills/cfn-epic-creator/validate-epic.sh +474 -0
  174. package/.claude/skills/cfn-epic-parser/SKILL.md +8 -0
  175. package/.claude/skills/cfn-error-management/SKILL.md +1 -1
  176. package/.claude/skills/cfn-intervention-system/SKILL.md +1 -1
  177. package/.claude/skills/cfn-knowledge-base/SKILL.md +1 -1
  178. package/.claude/skills/cfn-local-ruvector-accelerator/.backups/unknown/1765358428_2cf0ad7377232c919ff0a65630cb307d/metadata.json +8 -0
  179. package/.claude/skills/cfn-local-ruvector-accelerator/.backups/unknown/1765358428_2cf0ad7377232c919ff0a65630cb307d/original +209 -0
  180. package/.claude/skills/cfn-local-ruvector-accelerator/.backups/unknown/1765358428_2cf0ad7377232c919ff0a65630cb307d/revert.sh +7 -0
  181. package/.claude/skills/cfn-local-ruvector-accelerator/AGENT_INTEGRATION_PATTERNS.md +255 -0
  182. package/.claude/skills/cfn-local-ruvector-accelerator/Cargo.toml +8 -1
  183. package/.claude/skills/cfn-local-ruvector-accelerator/Cargo.toml.backup +47 -0
  184. package/.claude/skills/cfn-local-ruvector-accelerator/EXTRACTION_EXAMPLES.md +287 -0
  185. package/.claude/skills/cfn-local-ruvector-accelerator/README.md +2 -563
  186. package/.claude/skills/cfn-local-ruvector-accelerator/SCHEMA_V2_IMPLEMENTATION.md +151 -0
  187. package/.claude/skills/cfn-local-ruvector-accelerator/SECURITY_IMPLEMENTATION.md +185 -0
  188. package/.claude/skills/cfn-local-ruvector-accelerator/SKILL.md +8 -343
  189. package/.claude/skills/cfn-local-ruvector-accelerator/docs/EXECUTIVE_SUMMARY.txt +90 -0
  190. package/.claude/skills/cfn-local-ruvector-accelerator/docs/PHASE_4_QUERY_API.md +210 -0
  191. package/.claude/skills/cfn-local-ruvector-accelerator/docs/RUST_AST_EXTRACTOR_IMPLEMENTATION.md +222 -0
  192. package/.claude/skills/cfn-local-ruvector-accelerator/docs/TRANSACTION_MANAGEMENT.md +241 -0
  193. package/.claude/skills/cfn-local-ruvector-accelerator/docs/VALIDATION_FINDINGS.txt +250 -0
  194. package/.claude/skills/cfn-local-ruvector-accelerator/epic-ast-indexer.json +335 -0
  195. package/.claude/skills/cfn-local-ruvector-accelerator/index-code.sh +292 -96
  196. package/.claude/skills/cfn-local-ruvector-accelerator/index-code.sh.backup +249 -0
  197. package/.claude/skills/cfn-local-ruvector-accelerator/index_all.sh +65 -0
  198. package/.claude/skills/cfn-local-ruvector-accelerator/src/cli/find.rs +214 -0
  199. package/.claude/skills/cfn-local-ruvector-accelerator/src/cli/index.rs +275 -94
  200. package/.claude/skills/cfn-local-ruvector-accelerator/src/cli/index_ast.rs +767 -0
  201. package/.claude/skills/cfn-local-ruvector-accelerator/src/cli/index_modified.rs +37 -0
  202. package/.claude/skills/cfn-local-ruvector-accelerator/src/cli/init.rs +17 -12
  203. package/.claude/skills/cfn-local-ruvector-accelerator/src/cli/migration.rs +34 -1
  204. package/.claude/skills/cfn-local-ruvector-accelerator/src/cli/mod.rs +6 -0
  205. package/.claude/skills/cfn-local-ruvector-accelerator/src/cli/query.rs +2 -2
  206. package/.claude/skills/cfn-local-ruvector-accelerator/src/cli/refs.rs +209 -0
  207. package/.claude/skills/cfn-local-ruvector-accelerator/src/embeddings.rs +82 -33
  208. package/.claude/skills/cfn-local-ruvector-accelerator/src/extractors/mod.rs +251 -0
  209. package/.claude/skills/cfn-local-ruvector-accelerator/src/extractors/rust.rs +425 -0
  210. package/.claude/skills/cfn-local-ruvector-accelerator/src/extractors/rust_placeholder.rs +420 -0
  211. package/.claude/skills/cfn-local-ruvector-accelerator/src/extractors/text_fallback.rs +490 -0
  212. package/.claude/skills/cfn-local-ruvector-accelerator/src/extractors/typescript.rs +520 -0
  213. package/.claude/skills/cfn-local-ruvector-accelerator/src/extractors/typescript_full.rs +531 -0
  214. package/.claude/skills/cfn-local-ruvector-accelerator/src/lib.rs +20 -0
  215. package/.claude/skills/cfn-local-ruvector-accelerator/src/main.rs +33 -2
  216. package/.claude/skills/cfn-local-ruvector-accelerator/src/main.rs.backup +360 -0
  217. package/.claude/skills/cfn-local-ruvector-accelerator/src/migration.rs +325 -318
  218. package/.claude/skills/cfn-local-ruvector-accelerator/src/migration_backup.rs +325 -0
  219. package/.claude/skills/cfn-local-ruvector-accelerator/src/migration_tx.rs +513 -0
  220. package/.claude/skills/cfn-local-ruvector-accelerator/src/paths.rs +29 -0
  221. package/.claude/skills/cfn-local-ruvector-accelerator/src/query_api.rs +609 -0
  222. package/.claude/skills/cfn-local-ruvector-accelerator/src/schema_v2.rs +603 -0
  223. package/.claude/skills/cfn-local-ruvector-accelerator/src/search_engine.rs +150 -29
  224. package/.claude/skills/cfn-local-ruvector-accelerator/src/security_tests.rs +154 -0
  225. package/.claude/skills/cfn-local-ruvector-accelerator/src/sqlite_store.rs +1 -1
  226. package/.claude/skills/cfn-local-ruvector-accelerator/src/store_v2.rs +583 -0
  227. package/.claude/skills/cfn-local-ruvector-accelerator/src/store_v2_backup.rs +560 -0
  228. package/.claude/skills/cfn-local-ruvector-accelerator/src/store_v2_fixed.rs +0 -0
  229. package/.claude/skills/cfn-local-ruvector-accelerator/src/store_v2_tx.rs +397 -0
  230. package/.claude/skills/cfn-local-ruvector-accelerator/src/test_schema.rs +228 -0
  231. package/.claude/skills/cfn-local-ruvector-accelerator/src/transaction_tests.rs +410 -0
  232. package/.claude/skills/cfn-local-ruvector-accelerator/test_ast_indexing.rs +59 -0
  233. package/.claude/skills/cfn-local-ruvector-accelerator/test_query_api.sh +103 -0
  234. package/.claude/skills/cfn-local-ruvector-accelerator/test_schema.sql +158 -0
  235. package/.claude/skills/cfn-local-ruvector-accelerator/test_schema_v2.sql +147 -0
  236. package/.claude/skills/cfn-loop-orchestration-v2/SKILL.md +1 -1
  237. package/.claude/skills/cfn-loop-orchestration-v2/lib/decision/SKILL.md +8 -0
  238. package/.claude/skills/cfn-loop-orchestration-v2/lib/orchestrator/SKILL.md +1 -1
  239. package/.claude/skills/cfn-loop-orchestration-v2/lib/output/SKILL.md +8 -0
  240. package/.claude/skills/cfn-loop-orchestration-v2/lib/validation/SKILL.md +11 -2
  241. package/.claude/skills/cfn-mdap-context-injection/SKILL.md +31 -10
  242. package/.claude/skills/cfn-mdap-error-fixer/skill.md +15 -205
  243. package/.claude/skills/cfn-memory-persistence/lib/auto/SKILL.md +7 -0
  244. package/.claude/skills/cfn-memory-persistence/lib/management/SKILL.md +7 -0
  245. package/.claude/skills/cfn-parameterized-queries/SKILL.md +8 -0
  246. package/.claude/skills/cfn-planning/SKILL.md +1 -1
  247. package/.claude/skills/cfn-session-handoff/SKILL.md +1 -53
  248. package/.claude/skills/cfn-skill-management/SKILL.md +1 -1
  249. package/.claude/skills/cfn-task-decomposition/SKILL.md +1 -0
  250. package/.claude/skills/cfn-task-intelligence/SKILL.md +39 -18
  251. package/.claude/skills/cfn-task-planning/SKILL.md +37 -12
  252. package/.claude/skills/cfn-transparency-middleware/SKILL.md +1 -1
  253. package/.claude/skills/cfn-utilities/SKILL.md +1 -1
  254. package/.claude/skills/cfn-validation-framework/SKILL.md +3 -60
  255. package/.claude/skills/cfn-vision-analysis/SKILL.md +3 -20
  256. package/.claude-flow/metrics/performance.json +3 -3
  257. package/.claude-flow/metrics/task-metrics.json +3 -3
  258. package/.ruvector/index_v2.db-shm +0 -0
  259. package/.ruvector/index_v2.db-wal +0 -0
  260. package/CLAUDE.md +9 -1
  261. package/README.md +56 -0
  262. package/docs/AGENT_PRODUCTION_FEEDBACK_PATTERNS.md +389 -0
  263. package/docs/CEREBRAS_TDD_COORDINATOR_TEST_RESULTS.md +213 -0
  264. package/docs/CEREBRAS_TDD_ROUND1_VS_ROUND2_COMPARISON.md +225 -0
  265. package/docs/CEREBRAS_TDD_ROUND3_FINAL_RESULTS.md +264 -0
  266. package/docs/EPIC_CREATOR_V2_ARCHITECTURE.md +629 -0
  267. package/docs/HOOKS_IMPLEMENTATION_PRIORITY.md +585 -0
  268. package/docs/SKILLS_HOOKS_INTEGRATION.md +1074 -0
  269. package/epic-with-personas-2025-12-09-17-15-13.json +253 -0
  270. package/index/index.bin +0 -0
  271. package/index/metadata.json +1 -0
  272. package/package.json +2 -1
  273. package/test-epic-creator-security.sh +203 -0
  274. package/.claude/skills/cfn-compilation-error-fixer/HANDOFF.md +0 -29
  275. package/.claude/skills/cfn-local-ruvector-accelerator/__pycache__/search_engine_v2.cpython-312.pyc +0 -0
  276. package/.claude/skills/cfn-local-ruvector-accelerator/search_engine.py +0 -200
  277. package/.ruvector/index.db-journal +0 -0
  278. package/jest.config.ts.cjs +0 -17
  279. /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-cerebras-code-generator/SKILL.md +0 -0
  280. /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-cerebras-code-generator/context-analyzer.sh +0 -0
  281. /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-cerebras-code-generator/generate-code.sh +0 -0
  282. /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/execute.sh +0 -0
  283. /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/logging/INTEGRATION.md +0 -0
  284. /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/logging/SAMPLE_OUTPUTS.md +0 -0
  285. /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/logging/SKILL.md +0 -0
  286. /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/logging/capture-container-logs.sh +0 -0
  287. /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/logging/enable-logging.sh +0 -0
  288. /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/logging/init-hybrid-logging.sh +0 -0
  289. /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/logging/queries/analytics-summary.sh +0 -0
  290. /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/logging/queries/query-agent-timeline.sh +0 -0
  291. /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/logging/queries/query-consensus-history.sh +0 -0
  292. /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/logging/queries/query-coordination-timeline.sh +0 -0
  293. /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/logging/queries/query-failed-containers.sh +0 -0
  294. /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/logging/queries/query-gate-checks.sh +0 -0
  295. /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/logging/schema.sql +0 -0
  296. /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/logging/sqlite-helpers.sh +0 -0
  297. /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/logging/test-hybrid-logging.sh +0 -0
  298. /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/mcp/SKILL.md +0 -0
  299. /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/mcp/skill-mcp-selector.js +0 -0
  300. /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/orchestration/SKILL.md +0 -0
  301. /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/orchestration/orchestrate.sh +0 -0
  302. /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/spawning/SKILL.md +0 -0
  303. /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/spawning/spawn-agent.sh +0 -0
  304. /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/waves/SKILL.md +0 -0
  305. /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/waves/cleanup-wave.sh +0 -0
  306. /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/waves/lib/docker-helpers.sh +0 -0
  307. /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/waves/monitor-wave.sh +0 -0
  308. /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/waves/spawn-wave.sh +0 -0
  309. /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-node-heap-sizer/SKILL.md +0 -0
  310. /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-node-heap-sizer/task-mode-heap-limiter.sh +0 -0
  311. /package/.claude/{skills → cfn-extras/skills/deprecated}/deprecated/analyze-patterns.sh +0 -0
  312. /package/.claude/{skills → cfn-extras/skills/deprecated}/equation-solver/README.md +0 -0
  313. /package/.claude/{skills → cfn-extras/skills/deprecated}/equation-solver/SECURITY.md +0 -0
  314. /package/.claude/{skills → cfn-extras/skills/deprecated}/equation-solver/SKILL.md +0 -0
  315. /package/.claude/{skills → cfn-extras/skills/deprecated}/equation-solver/package.json +0 -0
  316. /package/.claude/{skills → cfn-extras/skills/deprecated}/equation-solver/solve.sh +0 -0
  317. /package/.claude/{skills → cfn-extras/skills/deprecated}/equation-solver/test-equation-solver-minimal.sh +0 -0
  318. /package/.claude/{skills → cfn-extras/skills/deprecated}/equation-solver/test-equation-solver.sh +0 -0
  319. /package/.claude/{skills → cfn-extras/skills/deprecated}/equation-solver/test.cjs +0 -0
  320. /package/.claude/hooks/{cfn-credential-scanner.sh → deprecated/cfn-credential-scanner.sh} +0 -0
  321. /package/.claude/hooks/{cfn-detect-hardcoded-credentials.sh → deprecated/cfn-detect-hardcoded-credentials.sh} +0 -0
  322. /package/.claude/hooks/{cfn-invoke-post-edit-ts.sh → deprecated/cfn-invoke-post-edit-ts.sh} +0 -0
  323. /package/.claude/hooks/{cfn-invoke-pre-edit-ts.sh → deprecated/cfn-invoke-pre-edit-ts.sh} +0 -0
  324. /package/.claude/hooks/{cfn-invoke-security-validation.sh → deprecated/cfn-invoke-security-validation.sh} +0 -0
  325. /package/.claude/hooks/{cfn-lint-sql-injection.sh → deprecated/cfn-lint-sql-injection.sh} +0 -0
  326. /package/.claude/hooks/{cfn-post-edit.sh → deprecated/cfn-post-edit.sh} +0 -0
  327. /package/.claude/hooks/{cfn-pre-edit-backup.sh → deprecated/cfn-pre-edit-backup.sh} +0 -0
  328. /package/.claude/skills/cfn-local-ruvector-accelerator/{embeddings_manager.py → embeddings_manager.py.backup} +0 -0
  329. /package/{.ruvector → .claude/skills/cfn-local-ruvector-accelerator/index}/index.bin +0 -0
  330. /package/{.ruvector → .claude/skills/cfn-local-ruvector-accelerator/index}/metadata.json +0 -0
  331. /package/.claude/skills/cfn-local-ruvector-accelerator/{search_engine_v2.py → search_engine_v2.py.backup} +0 -0
  332. /package/.claude/skills/cfn-local-ruvector-accelerator/{sqlite_store.py → sqlite_store.py.backup} +0 -0
@@ -0,0 +1,620 @@
1
+ #!/bin/bash
2
+ set -euo pipefail
3
+
4
+ # CFN Epic Creator - Test Invoke Script
5
+ # Comprehensive test suite for epic-creator skill
6
+
7
+ # Configuration
8
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
9
+ INVOKE_SCRIPT="${SCRIPT_DIR}/invoke.sh"
10
+ VALIDATE_SCRIPT="${SCRIPT_DIR}/validate-epic.sh"
11
+ PARSE_SCRIPT="${SCRIPT_DIR}/parse-personas.sh"
12
+ ESTIMATE_SCRIPT="${SCRIPT_DIR}/estimate-costs.sh"
13
+
14
+ # Test data
15
+ TEST_EPIC_DESCRIPTION="Build a real-time analytics dashboard with user authentication, data visualization, and automated reporting capabilities"
16
+ TEST_OUTPUT_DIR="/tmp/epic-creator-tests"
17
+ TEST_EPIC_FILE="${TEST_OUTPUT_DIR}/test-epic.json"
18
+
19
+ # Colors for output
20
+ RED='\033[0;31m'
21
+ GREEN='\033[0;32m'
22
+ YELLOW='\033[1;33m'
23
+ BLUE='\033[0;34m'
24
+ CYAN='\033[0;36m'
25
+ NC='\033[0m' # No Color
26
+
27
+ # Test counters
28
+ TESTS_TOTAL=0
29
+ TESTS_PASSED=0
30
+ TESTS_FAILED=0
31
+
32
+ # Logging functions
33
+ log_info() {
34
+ echo -e "${BLUE}[INFO]${NC} $*"
35
+ }
36
+
37
+ log_success() {
38
+ echo -e "${GREEN}[PASS]${NC} $*"
39
+ }
40
+
41
+ log_warning() {
42
+ echo -e "${YELLOW}[WARN]${NC} $*"
43
+ }
44
+
45
+ log_error() {
46
+ echo -e "${RED}[FAIL]${NC} $*" >&2
47
+ }
48
+
49
+ log_test() {
50
+ echo -e "${CYAN}[TEST]${NC} $*"
51
+ }
52
+
53
+ # Test utilities
54
+ test_start() {
55
+ local test_name="$1"
56
+ TESTS_TOTAL=$((TESTS_TOTAL + 1))
57
+ echo ""
58
+ log_test "Running: $test_name"
59
+ }
60
+
61
+ test_pass() {
62
+ local message="$1"
63
+ TESTS_PASSED=$((TESTS_PASSED + 1))
64
+ log_success "$message"
65
+ }
66
+
67
+ test_fail() {
68
+ local message="$1"
69
+ TESTS_FAILED=$((TESTS_FAILED + 1))
70
+ log_error "$message"
71
+ }
72
+
73
+ # Cleanup function
74
+ cleanup() {
75
+ if [[ -d "$TEST_OUTPUT_DIR" ]]; then
76
+ rm -rf "$TEST_OUTPUT_DIR"
77
+ fi
78
+ }
79
+
80
+ # Setup test environment
81
+ setup() {
82
+ log_info "Setting up test environment..."
83
+ cleanup
84
+ mkdir -p "$TEST_OUTPUT_DIR"
85
+
86
+ # Check if jq is available
87
+ if ! command -v jq >/dev/null 2>&1; then
88
+ log_error "Required command 'jq' not found. Please install jq to run tests."
89
+ exit 1
90
+ fi
91
+
92
+ # Check if scripts are executable
93
+ for script in "$INVOKE_SCRIPT" "$VALIDATE_SCRIPT" "$PARSE_SCRIPT" "$ESTIMATE_SCRIPT"; do
94
+ if [[ -f "$script" ]]; then
95
+ chmod +x "$script"
96
+ else
97
+ log_error "Script not found: $script"
98
+ exit 1
99
+ fi
100
+ done
101
+
102
+ log_success "Test environment ready"
103
+ }
104
+
105
+ # Test help functionality
106
+ test_help() {
107
+ test_start "Help functionality"
108
+
109
+ # Test invoke.sh help
110
+ if "$INVOKE_SCRIPT" --help | grep -q "CFN Epic Creator"; then
111
+ test_pass "invoke.sh help displayed correctly"
112
+ else
113
+ test_fail "invoke.sh help not displayed"
114
+ fi
115
+
116
+ # Test validate-epic.sh help
117
+ if "$VALIDATE_SCRIPT" --help | grep -q "Validate Epic JSON"; then
118
+ test_pass "validate-epic.sh help displayed correctly"
119
+ else
120
+ test_fail "validate-epic.sh help not displayed"
121
+ fi
122
+
123
+ # Test parse-personas.sh help
124
+ if "$PARSE_SCRIPT" --help | grep -q "Parse Personas"; then
125
+ test_pass "parse-personas.sh help displayed correctly"
126
+ else
127
+ test_fail "parse-personas.sh help not displayed"
128
+ fi
129
+
130
+ # Test estimate-costs.sh help
131
+ if "$ESTIMATE_SCRIPT" --help | grep -q "Estimate Costs"; then
132
+ test_pass "estimate-costs.sh help displayed correctly"
133
+ else
134
+ test_fail "estimate-costs.sh help not displayed"
135
+ fi
136
+ }
137
+
138
+ # Test argument validation
139
+ test_argument_validation() {
140
+ test_start "Argument validation"
141
+
142
+ # Test missing epic description
143
+ if "$INVOKE_SCRIPT" 2>&1 | grep -q "Missing required epic description"; then
144
+ test_pass "Missing epic description error displayed"
145
+ else
146
+ test_fail "Missing epic description not detected"
147
+ fi
148
+
149
+ # Test invalid mode
150
+ if "$INVOKE_SCRIPT" "test" --mode=invalid 2>&1 | grep -q "Invalid mode"; then
151
+ test_pass "Invalid mode error displayed"
152
+ else
153
+ test_fail "Invalid mode not detected"
154
+ fi
155
+
156
+ # Test unknown option
157
+ if "$INVOKE_SCRIPT" "test" --unknown-option 2>&1 | grep -q "Unknown option"; then
158
+ test_pass "Unknown option error displayed"
159
+ else
160
+ test_fail "Unknown option not detected"
161
+ fi
162
+ }
163
+
164
+ # Test epic generation
165
+ test_epic_generation() {
166
+ test_start "Epic generation"
167
+
168
+ # Generate epic with all modes
169
+ local modes=("mvp" "standard" "enterprise")
170
+
171
+ for mode in "${modes[@]}"; do
172
+ local output_file="${TEST_OUTPUT_DIR}/epic-${mode}.json"
173
+
174
+ if "$INVOKE_SCRIPT" "$TEST_EPIC_DESCRIPTION" \
175
+ --mode="$mode" \
176
+ --output="$output_file" \
177
+ --verbose > "${TEST_OUTPUT_DIR}/invoke-${mode}.log" 2>&1; then
178
+
179
+ if [[ -f "$output_file" ]]; then
180
+ test_pass "Epic generated successfully in $mode mode"
181
+
182
+ # Validate generated JSON
183
+ if "$VALIDATE_SCRIPT" "$output_file" >/dev/null 2>&1; then
184
+ test_pass "Generated epic JSON is valid for $mode mode"
185
+ else
186
+ test_fail "Generated epic JSON is invalid for $mode mode"
187
+ fi
188
+ else
189
+ test_fail "Epic file not created for $mode mode"
190
+ fi
191
+ else
192
+ test_fail "Epic generation failed for $mode mode"
193
+ fi
194
+ done
195
+ }
196
+
197
+ # Test validate functionality
198
+ test_validation() {
199
+ test_start "Validation functionality"
200
+
201
+ # Generate a test epic first
202
+ if ! "$INVOKE_SCRIPT" "$TEST_EPIC_DESCRIPTION" \
203
+ --output="$TEST_EPIC_FILE" >/dev/null 2>&1; then
204
+ test_fail "Failed to generate test epic for validation"
205
+ return
206
+ fi
207
+
208
+ # Test normal validation
209
+ if "$VALIDATE_SCRIPT" "$TEST_EPIC_FILE" >/dev/null 2>&1; then
210
+ test_pass "Normal validation passed"
211
+ else
212
+ test_fail "Normal validation failed"
213
+ fi
214
+
215
+ # Test verbose validation
216
+ if "$VALIDATE_SCRIPT" "$TEST_EPIC_FILE" --verbose > "${TEST_OUTPUT_DIR}/validation.log" 2>&1; then
217
+ test_pass "Verbose validation passed"
218
+ else
219
+ test_fail "Verbose validation failed"
220
+ fi
221
+
222
+ # Test strict validation (should pass if generated correctly)
223
+ if "$VALIDATE_SCRIPT" "$TEST_EPIC_FILE" --strict >/dev/null 2>&1; then
224
+ test_pass "Strict validation passed"
225
+ else
226
+ test_warning "Strict validation failed (may have warnings)"
227
+ fi
228
+
229
+ # Test invalid file
230
+ echo '{"invalid": "json"}' > "${TEST_OUTPUT_DIR}/invalid.json"
231
+ if ! "$VALIDATE_SCRIPT" "${TEST_OUTPUT_DIR}/invalid.json" >/dev/null 2>&1; then
232
+ test_pass "Invalid JSON rejected"
233
+ else
234
+ test_fail "Invalid JSON accepted"
235
+ fi
236
+
237
+ # Test missing file
238
+ if ! "$VALIDATE_SCRIPT" "${TEST_OUTPUT_DIR}/nonexistent.json" >/dev/null 2>&1; then
239
+ test_pass "Missing file rejected"
240
+ else
241
+ test_fail "Missing file accepted"
242
+ fi
243
+ }
244
+
245
+ # Test persona parsing
246
+ test_persona_parsing() {
247
+ test_start "Persona parsing functionality"
248
+
249
+ # Generate a test epic first
250
+ if ! "$INVOKE_SCRIPT" "$TEST_EPIC_DESCRIPTION" \
251
+ --output="$TEST_EPIC_FILE" >/dev/null 2>&1; then
252
+ test_fail "Failed to generate test epic for persona parsing"
253
+ return
254
+ fi
255
+
256
+ # Test parsing all personas
257
+ if "$PARSE_SCRIPT" "$TEST_EPIC_FILE" > "${TEST_OUTPUT_DIR}/parse-all.log" 2>&1; then
258
+ test_pass "Parsed all personas successfully"
259
+ else
260
+ test_fail "Failed to parse all personas"
261
+ fi
262
+
263
+ # Test parsing specific persona
264
+ if "$PARSE_SCRIPT" "$TEST_EPIC_FILE" --persona=architect > "${TEST_OUTPUT_DIR}/parse-architect.log" 2>&1; then
265
+ test_pass "Parsed architect persona successfully"
266
+ else
267
+ test_fail "Failed to parse architect persona"
268
+ fi
269
+
270
+ # Test filtering by type
271
+ if "$PARSE_SCRIPT" "$TEST_EPIC_FILE" --type=blocking > "${TEST_OUTPUT_DIR}/parse-blocking.log" 2>&1; then
272
+ test_pass "Filtered by blocking type successfully"
273
+ else
274
+ test_fail "Failed to filter by blocking type"
275
+ fi
276
+
277
+ # Test filtering by priority
278
+ if "$PARSE_SCRIPT" "$TEST_EPIC_FILE" --priority=critical > "${TEST_OUTPUT_DIR}/parse-critical.log" 2>&1; then
279
+ test_pass "Filtered by critical priority successfully"
280
+ else
281
+ test_fail "Failed to filter by critical priority"
282
+ fi
283
+
284
+ # Test JSON format
285
+ if "$PARSE_SCRIPT" "$TEST_EPIC_FILE" --format=json | jq . >/dev/null 2>&1; then
286
+ test_pass "JSON format output is valid"
287
+ else
288
+ test_fail "JSON format output is invalid"
289
+ fi
290
+
291
+ # Test markdown format
292
+ if "$PARSE_SCRIPT" "$TEST_EPIC_FILE" --format=markdown > "${TEST_OUTPUT_DIR}/parse-markdown.md" 2>&1; then
293
+ test_pass "Markdown format generated successfully"
294
+ else
295
+ test_fail "Failed to generate markdown format"
296
+ fi
297
+
298
+ # Test count only
299
+ if "$PARSE_SCRIPT" "$TEST_EPIC_FILE" --count > "${TEST_OUTPUT_DIR}/parse-count.log" 2>&1; then
300
+ test_pass "Count only mode works"
301
+ else
302
+ test_fail "Count only mode failed"
303
+ fi
304
+
305
+ # Test invalid persona
306
+ if ! "$PARSE_SCRIPT" "$TEST_EPIC_FILE" --persona=invalid >/dev/null 2>&1; then
307
+ test_pass "Invalid persona rejected"
308
+ else
309
+ test_fail "Invalid persona accepted"
310
+ fi
311
+ }
312
+
313
+ # Test cost estimation
314
+ test_cost_estimation() {
315
+ test_start "Cost estimation functionality"
316
+
317
+ # Generate a test epic first
318
+ if ! "$INVOKE_SCRIPT" "$TEST_EPIC_DESCRIPTION" \
319
+ --output="$TEST_EPIC_FILE" >/dev/null 2>&1; then
320
+ test_fail "Failed to generate test epic for cost estimation"
321
+ return
322
+ fi
323
+
324
+ # Test summary format
325
+ if "$ESTIMATE_SCRIPT" "$TEST_EPIC_FILE" > "${TEST_OUTPUT_DIR}/cost-summary.log" 2>&1; then
326
+ test_pass "Cost summary generated successfully"
327
+ else
328
+ test_fail "Failed to generate cost summary"
329
+ fi
330
+
331
+ # Test detailed format
332
+ if "$ESTIMATE_SCRIPT" "$TEST_EPIC_FILE" --format=detailed > "${TEST_OUTPUT_DIR}/cost-detailed.log" 2>&1; then
333
+ test_pass "Cost details generated successfully"
334
+ else
335
+ test_fail "Failed to generate cost details"
336
+ fi
337
+
338
+ # Test CSV format
339
+ if "$ESTIMATE_SCRIPT" "$TEST_EPIC_FILE" --format=csv > "${TEST_OUTPUT_DIR}/costs.csv" 2>&1; then
340
+ test_pass "Cost CSV generated successfully"
341
+ else
342
+ test_fail "Failed to generate cost CSV"
343
+ fi
344
+
345
+ # Test JSON format
346
+ if "$ESTIMATE_SCRIPT" "$TEST_EPIC_FILE" --format=json | jq . >/dev/null 2>&1; then
347
+ test_pass "Cost JSON format is valid"
348
+ else
349
+ test_fail "Cost JSON format is invalid"
350
+ fi
351
+
352
+ # Test filtering by type
353
+ if "$ESTIMATE_SCRIPT" "$TEST_EPIC_FILE" --type=blocking > "${TEST_OUTPUT_DIR}/cost-blocking.log" 2>&1; then
354
+ test_pass "Cost filtering by blocking type works"
355
+ else
356
+ test_fail "Failed to filter costs by blocking type"
357
+ fi
358
+
359
+ # Test filtering by persona
360
+ if "$ESTIMATE_SCRIPT" "$TEST_EPIC_FILE" --persona=security-specialist > "${TEST_OUTPUT_DIR}/cost-security.log" 2>&1; then
361
+ test_pass "Cost filtering by persona works"
362
+ else
363
+ test_fail "Failed to filter costs by persona"
364
+ fi
365
+
366
+ # Test sorting
367
+ if "$ESTIMATE_SCRIPT" "$TEST_EPIC_FILE" --sort-by=total > "${TEST_OUTPUT_DIR}/cost-sorted.log" 2>&1; then
368
+ test_pass "Cost sorting works"
369
+ else
370
+ test_fail "Failed to sort costs"
371
+ fi
372
+
373
+ # Test custom currency
374
+ if "$ESTIMATE_SCRIPT" "$TEST_EPIC_FILE" --currency=£ > "${TEST_OUTPUT_DIR}/cost-currency.log" 2>&1; then
375
+ test_pass "Custom currency works"
376
+ else
377
+ test_fail "Failed to use custom currency"
378
+ fi
379
+ }
380
+
381
+ # Test error handling
382
+ test_error_handling() {
383
+ test_start "Error handling"
384
+
385
+ # Test invalid JSON file
386
+ echo "invalid json" > "${TEST_OUTPUT_DIR}/bad.json"
387
+ if ! "$VALIDATE_SCRIPT" "${TEST_OUTPUT_DIR}/bad.json" >/dev/null 2>&1; then
388
+ test_pass "Invalid JSON handled correctly by validation"
389
+ else
390
+ test_fail "Invalid JSON not detected by validation"
391
+ fi
392
+
393
+ if ! "$PARSE_SCRIPT" "${TEST_OUTPUT_DIR}/bad.json" >/dev/null 2>&1; then
394
+ test_pass "Invalid JSON handled correctly by parser"
395
+ else
396
+ test_fail "Invalid JSON not detected by parser"
397
+ fi
398
+
399
+ if ! "$ESTIMATE_SCRIPT" "${TEST_OUTPUT_DIR}/bad.json" >/dev/null 2>&1; then
400
+ test_pass "Invalid JSON handled correctly by estimator"
401
+ else
402
+ test_fail "Invalid JSON not detected by estimator"
403
+ fi
404
+
405
+ # Test missing file
406
+ if ! "$VALIDATE_SCRIPT" "${TEST_OUTPUT_DIR}/missing.json" >/dev/null 2>&1; then
407
+ test_pass "Missing file handled correctly by validation"
408
+ else
409
+ test_fail "Missing file not detected by validation"
410
+ fi
411
+
412
+ # Test invalid parameters
413
+ if ! "$PARSE_SCRIPT" "$TEST_EPIC_FILE" --persona=invalid >/dev/null 2>&1; then
414
+ test_pass "Invalid persona parameter handled correctly"
415
+ else
416
+ test_fail "Invalid persona parameter not detected"
417
+ fi
418
+
419
+ if ! "$ESTIMATE_SCRIPT" "$TEST_EPIC_FILE" --format=invalid >/dev/null 2>&1; then
420
+ test_pass "Invalid format parameter handled correctly"
421
+ else
422
+ test_fail "Invalid format parameter not detected"
423
+ fi
424
+ }
425
+
426
+ # Test integration scenarios
427
+ test_integration() {
428
+ test_start "Integration scenarios"
429
+
430
+ # Test complete workflow
431
+ local workflow_file="${TEST_OUTPUT_DIR}/workflow-epic.json"
432
+
433
+ # 1. Generate epic
434
+ if "$INVOKE_SCRIPT" "$TEST_EPIC_DESCRIPTION" \
435
+ --mode=standard \
436
+ --output="$workflow_file" >/dev/null 2>&1; then
437
+
438
+ # 2. Validate epic
439
+ if "$VALIDATE_SCRIPT" "$workflow_file" >/dev/null 2>&1; then
440
+
441
+ # 3. Parse personas
442
+ if "$PARSE_SCRIPT" "$workflow_file" --count >/dev/null 2>&1; then
443
+
444
+ # 4. Estimate costs
445
+ if "$ESTIMATE_SCRIPT" "$workflow_file" --format=json >/dev/null 2>&1; then
446
+ test_pass "Complete workflow integration successful"
447
+ else
448
+ test_fail "Cost estimation failed in workflow"
449
+ fi
450
+ else
451
+ test_fail "Persona parsing failed in workflow"
452
+ fi
453
+ else
454
+ test_fail "Validation failed in workflow"
455
+ fi
456
+ else
457
+ test_fail "Epic generation failed in workflow"
458
+ fi
459
+
460
+ # Test validate-only mode
461
+ if "$INVOKE_SCRIPT" "$TEST_EPIC_DESCRIPTION" \
462
+ --validate-only >/dev/null 2>&1; then
463
+ test_pass "Validate-only mode works"
464
+ else
465
+ test_fail "Validate-only mode failed"
466
+ fi
467
+
468
+ # Test with DevOps enforcement
469
+ local devops_file="${TEST_OUTPUT_DIR}/devops-epic.json"
470
+ if "$INVOKE_SCRIPT" "$TEST_EPIC_DESCRIPTION" \
471
+ --enforce-devops \
472
+ --output="$devops_file" >/dev/null 2>&1; then
473
+
474
+ # Check if DevOps recommendations are blocking
475
+ local devops_blocking
476
+ devops_blocking=$(jq -r '
477
+ .epic.personas[] |
478
+ select(.name == "devops-engineer") |
479
+ .recommendations[] |
480
+ select(.type == "blocking") |
481
+ length
482
+ ' "$devops_file")
483
+
484
+ if [[ "$devops_blocking" -gt 0 ]]; then
485
+ test_pass "DevOps enforcement creates blocking recommendations"
486
+ else
487
+ test_warning "DevOps enforcement did not create blocking recommendations"
488
+ fi
489
+ else
490
+ test_fail "DevOps enforcement mode failed"
491
+ fi
492
+ }
493
+
494
+ # Show test summary
495
+ show_summary() {
496
+ echo ""
497
+ echo "========================================"
498
+ log_info "Test Summary"
499
+ echo "========================================"
500
+ echo -e "Total Tests: ${CYAN}${TESTS_TOTAL}${NC}"
501
+ echo -e "Passed: ${GREEN}${TESTS_PASSED}${NC}"
502
+ echo -e "Failed: ${RED}${TESTS_FAILED}${NC}"
503
+
504
+ local success_rate=0
505
+ if [[ $TESTS_TOTAL -gt 0 ]]; then
506
+ success_rate=$(( (TESTS_PASSED * 100) / TESTS_TOTAL ))
507
+ fi
508
+
509
+ echo -e "Success Rate: ${YELLOW}${success_rate}%${NC}"
510
+
511
+ if [[ $TESTS_FAILED -eq 0 ]]; then
512
+ echo ""
513
+ log_success "All tests passed! ✓"
514
+ return 0
515
+ else
516
+ echo ""
517
+ log_error "Some tests failed. Check the logs in $TEST_OUTPUT_DIR"
518
+ return 1
519
+ fi
520
+ }
521
+
522
+ # Main execution
523
+ main() {
524
+ local run_all=true
525
+ local test_filter=""
526
+
527
+ # Parse arguments
528
+ while [[ $# -gt 0 ]]; do
529
+ case $1 in
530
+ --test)
531
+ test_filter="$2"
532
+ run_all=false
533
+ shift 2
534
+ ;;
535
+ --keep-logs)
536
+ # Don't cleanup on exit
537
+ trap - EXIT
538
+ shift
539
+ ;;
540
+ -h|--help)
541
+ cat << 'HELP_EOF'
542
+ CFN Epic Creator - Test Suite
543
+
544
+ USAGE:
545
+ ./test-invoke.sh [OPTIONS]
546
+
547
+ OPTIONS:
548
+ --test <name> Run specific test only
549
+ --keep-logs Keep test logs and temporary files
550
+ -h, --help Show this help message
551
+
552
+ AVAILABLE TESTS:
553
+ help Test help functionality
554
+ validation Test argument validation
555
+ generation Test epic generation
556
+ validate Test validation functionality
557
+ parse Test persona parsing
558
+ cost Test cost estimation
559
+ error Test error handling
560
+ integration Test integration scenarios
561
+
562
+ EXAMPLES:
563
+ # Run all tests
564
+ ./test-invoke.sh
565
+
566
+ # Run specific test
567
+ ./test-invoke.sh --test generation
568
+
569
+ # Keep logs for debugging
570
+ ./test-invoke.sh --keep-logs
571
+
572
+ HELP_EOF
573
+ exit 0
574
+ ;;
575
+ *)
576
+ log_error "Unknown option: $1"
577
+ exit 1
578
+ ;;
579
+ esac
580
+ done
581
+
582
+ # Set cleanup trap
583
+ trap cleanup EXIT
584
+
585
+ # Setup test environment
586
+ setup
587
+
588
+ # Run tests
589
+ if [[ "$run_all" == true ]]; then
590
+ test_help
591
+ test_argument_validation
592
+ test_epic_generation
593
+ test_validation
594
+ test_persona_parsing
595
+ test_cost_estimation
596
+ test_error_handling
597
+ test_integration
598
+ else
599
+ case "$test_filter" in
600
+ "help") test_help ;;
601
+ "validation") test_argument_validation ;;
602
+ "generation") test_epic_generation ;;
603
+ "validate") test_validation ;;
604
+ "parse") test_persona_parsing ;;
605
+ "cost") test_cost_estimation ;;
606
+ "error") test_error_handling ;;
607
+ "integration") test_integration ;;
608
+ *)
609
+ log_error "Unknown test: $test_filter"
610
+ exit 1
611
+ ;;
612
+ esac
613
+ fi
614
+
615
+ # Show summary
616
+ show_summary
617
+ }
618
+
619
+ # Execute main function
620
+ main "$@"