claude-flow-novice 2.18.13 → 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 (300) 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/hooks/README.md +148 -0
  134. package/.claude/hooks/SessionStart:cfn-load-openai-key.sh +35 -0
  135. package/.claude/hooks/cfn-invoke-pre-edit.sh +1 -1
  136. package/.claude/hooks/cfn-load-cerebras-env.sh +65 -0
  137. package/.claude/hooks/cfn-precompact-enhanced.sh +283 -0
  138. package/.claude/hooks/deprecated/README.md +27 -0
  139. package/.claude/settings.json +71 -6
  140. package/.claude/skills/cfn-cerebras-coordinator/QUICKSTART.md +348 -0
  141. package/.claude/skills/cfn-cerebras-coordinator/README.md +525 -0
  142. package/.claude/skills/cfn-cerebras-coordinator/TDD_COORDINATOR_OVERVIEW.md +284 -0
  143. package/.claude/skills/cfn-cerebras-coordinator/conversations/2025-12-10-py-v2-test-1733854200.json +36 -0
  144. package/.claude/skills/cfn-cerebras-coordinator/conversations/2025-12-10-py-v3-test-1765383241.json +36 -0
  145. package/.claude/skills/cfn-cerebras-coordinator/conversations/2025-12-10-rust-v2-test-1765381361.json +36 -0
  146. package/.claude/skills/cfn-cerebras-coordinator/conversations/2025-12-10-rust-v3-test-1765383242.json +46 -0
  147. package/.claude/skills/cfn-cerebras-coordinator/conversations/2025-12-10-ts-v2-test-1733864400.json +66 -0
  148. package/.claude/skills/cfn-cerebras-coordinator/conversations/2025-12-10-ts-v3-test-1765383238.json +66 -0
  149. package/.claude/skills/cfn-cerebras-coordinator/conversations/2025-12-10-ts-v4-test-1765386506.json +66 -0
  150. package/.claude/skills/cfn-cerebras-coordinator/conversations/2025-12-10-ts-v5-test-1765393100.json +66 -0
  151. package/.claude/skills/cfn-cerebras-coordinator/example-usage.sh +206 -0
  152. package/.claude/skills/cfn-cerebras-coordinator/lib/tdd-conversation-coordinator.ts +569 -0
  153. package/.claude/skills/cfn-cerebras-coordinator/test-tdd-coordinator.sh +250 -0
  154. package/.claude/skills/cfn-epic-creator/SKILL.md +392 -0
  155. package/.claude/skills/cfn-epic-creator/estimate-costs.sh +524 -0
  156. package/.claude/skills/cfn-epic-creator/invoke.sh +445 -0
  157. package/.claude/skills/cfn-epic-creator/parse-personas.sh +533 -0
  158. package/.claude/skills/cfn-epic-creator/security-utils.sh +268 -0
  159. package/.claude/skills/cfn-epic-creator/security-verification-demo.sh +127 -0
  160. package/.claude/skills/cfn-epic-creator/test-invoke.sh +620 -0
  161. package/.claude/skills/cfn-epic-creator/test-security-fixes.sh +195 -0
  162. package/.claude/skills/cfn-epic-creator/test-security-simple.sh +165 -0
  163. package/.claude/skills/cfn-epic-creator/validate-epic.sh +474 -0
  164. package/.claude/skills/cfn-local-ruvector-accelerator/.backups/unknown/1765358428_2cf0ad7377232c919ff0a65630cb307d/metadata.json +8 -0
  165. package/.claude/skills/cfn-local-ruvector-accelerator/.backups/unknown/1765358428_2cf0ad7377232c919ff0a65630cb307d/original +209 -0
  166. package/.claude/skills/cfn-local-ruvector-accelerator/.backups/unknown/1765358428_2cf0ad7377232c919ff0a65630cb307d/revert.sh +7 -0
  167. package/.claude/skills/cfn-local-ruvector-accelerator/AGENT_INTEGRATION_PATTERNS.md +255 -0
  168. package/.claude/skills/cfn-local-ruvector-accelerator/Cargo.toml +8 -1
  169. package/.claude/skills/cfn-local-ruvector-accelerator/Cargo.toml.backup +47 -0
  170. package/.claude/skills/cfn-local-ruvector-accelerator/EXTRACTION_EXAMPLES.md +287 -0
  171. package/.claude/skills/cfn-local-ruvector-accelerator/README.md +2 -563
  172. package/.claude/skills/cfn-local-ruvector-accelerator/SCHEMA_V2_IMPLEMENTATION.md +151 -0
  173. package/.claude/skills/cfn-local-ruvector-accelerator/SECURITY_IMPLEMENTATION.md +185 -0
  174. package/.claude/skills/cfn-local-ruvector-accelerator/SKILL.md +8 -351
  175. package/.claude/skills/cfn-local-ruvector-accelerator/docs/EXECUTIVE_SUMMARY.txt +90 -0
  176. package/.claude/skills/cfn-local-ruvector-accelerator/docs/PHASE_4_QUERY_API.md +210 -0
  177. package/.claude/skills/cfn-local-ruvector-accelerator/docs/RUST_AST_EXTRACTOR_IMPLEMENTATION.md +222 -0
  178. package/.claude/skills/cfn-local-ruvector-accelerator/docs/TRANSACTION_MANAGEMENT.md +241 -0
  179. package/.claude/skills/cfn-local-ruvector-accelerator/docs/VALIDATION_FINDINGS.txt +250 -0
  180. package/.claude/skills/cfn-local-ruvector-accelerator/epic-ast-indexer.json +335 -0
  181. package/.claude/skills/cfn-local-ruvector-accelerator/index-code.sh +292 -96
  182. package/.claude/skills/cfn-local-ruvector-accelerator/index-code.sh.backup +249 -0
  183. package/.claude/skills/cfn-local-ruvector-accelerator/index_all.sh +65 -0
  184. package/.claude/skills/cfn-local-ruvector-accelerator/src/cli/find.rs +214 -0
  185. package/.claude/skills/cfn-local-ruvector-accelerator/src/cli/index.rs +259 -103
  186. package/.claude/skills/cfn-local-ruvector-accelerator/src/cli/index_ast.rs +767 -0
  187. package/.claude/skills/cfn-local-ruvector-accelerator/src/cli/index_modified.rs +37 -0
  188. package/.claude/skills/cfn-local-ruvector-accelerator/src/cli/init.rs +17 -12
  189. package/.claude/skills/cfn-local-ruvector-accelerator/src/cli/migration.rs +34 -1
  190. package/.claude/skills/cfn-local-ruvector-accelerator/src/cli/mod.rs +6 -0
  191. package/.claude/skills/cfn-local-ruvector-accelerator/src/cli/refs.rs +209 -0
  192. package/.claude/skills/cfn-local-ruvector-accelerator/src/embeddings.rs +82 -33
  193. package/.claude/skills/cfn-local-ruvector-accelerator/src/extractors/mod.rs +251 -0
  194. package/.claude/skills/cfn-local-ruvector-accelerator/src/extractors/rust.rs +425 -0
  195. package/.claude/skills/cfn-local-ruvector-accelerator/src/extractors/rust_placeholder.rs +420 -0
  196. package/.claude/skills/cfn-local-ruvector-accelerator/src/extractors/text_fallback.rs +490 -0
  197. package/.claude/skills/cfn-local-ruvector-accelerator/src/extractors/typescript.rs +520 -0
  198. package/.claude/skills/cfn-local-ruvector-accelerator/src/extractors/typescript_full.rs +531 -0
  199. package/.claude/skills/cfn-local-ruvector-accelerator/src/lib.rs +20 -0
  200. package/.claude/skills/cfn-local-ruvector-accelerator/src/main.rs +33 -2
  201. package/.claude/skills/cfn-local-ruvector-accelerator/src/main.rs.backup +360 -0
  202. package/.claude/skills/cfn-local-ruvector-accelerator/src/migration.rs +325 -318
  203. package/.claude/skills/cfn-local-ruvector-accelerator/src/migration_backup.rs +325 -0
  204. package/.claude/skills/cfn-local-ruvector-accelerator/src/migration_tx.rs +513 -0
  205. package/.claude/skills/cfn-local-ruvector-accelerator/src/paths.rs +29 -0
  206. package/.claude/skills/cfn-local-ruvector-accelerator/src/query_api.rs +609 -0
  207. package/.claude/skills/cfn-local-ruvector-accelerator/src/schema_v2.rs +603 -0
  208. package/.claude/skills/cfn-local-ruvector-accelerator/src/security_tests.rs +154 -0
  209. package/.claude/skills/cfn-local-ruvector-accelerator/src/store_v2.rs +583 -0
  210. package/.claude/skills/cfn-local-ruvector-accelerator/src/store_v2_backup.rs +560 -0
  211. package/.claude/skills/cfn-local-ruvector-accelerator/src/store_v2_fixed.rs +0 -0
  212. package/.claude/skills/cfn-local-ruvector-accelerator/src/store_v2_tx.rs +397 -0
  213. package/.claude/skills/cfn-local-ruvector-accelerator/src/test_schema.rs +228 -0
  214. package/.claude/skills/cfn-local-ruvector-accelerator/src/transaction_tests.rs +410 -0
  215. package/.claude/skills/cfn-local-ruvector-accelerator/test_ast_indexing.rs +59 -0
  216. package/.claude/skills/cfn-local-ruvector-accelerator/test_query_api.sh +103 -0
  217. package/.claude/skills/cfn-local-ruvector-accelerator/test_schema.sql +158 -0
  218. package/.claude/skills/cfn-local-ruvector-accelerator/test_schema_v2.sql +147 -0
  219. package/.claude/skills/cfn-mdap-context-injection/SKILL.md +31 -10
  220. package/.claude/skills/cfn-mdap-error-fixer/skill.md +15 -205
  221. package/.claude/skills/cfn-session-handoff/SKILL.md +1 -53
  222. package/.claude/skills/cfn-task-decomposition/SKILL.md +1 -0
  223. package/.claude/skills/cfn-task-intelligence/SKILL.md +39 -18
  224. package/.claude/skills/cfn-task-planning/SKILL.md +37 -12
  225. package/.claude/skills/cfn-validation-framework/SKILL.md +3 -60
  226. package/.claude/skills/cfn-vision-analysis/SKILL.md +3 -20
  227. package/.claude-flow/metrics/performance.json +3 -3
  228. package/.claude-flow/metrics/task-metrics.json +3 -3
  229. package/.ruvector/index_v2.db-shm +0 -0
  230. package/.ruvector/index_v2.db-wal +0 -0
  231. package/CLAUDE.md +9 -1
  232. package/README.md +56 -0
  233. package/docs/AGENT_PRODUCTION_FEEDBACK_PATTERNS.md +389 -0
  234. package/docs/CEREBRAS_TDD_COORDINATOR_TEST_RESULTS.md +213 -0
  235. package/docs/CEREBRAS_TDD_ROUND1_VS_ROUND2_COMPARISON.md +225 -0
  236. package/docs/CEREBRAS_TDD_ROUND3_FINAL_RESULTS.md +264 -0
  237. package/docs/EPIC_CREATOR_V2_ARCHITECTURE.md +629 -0
  238. package/docs/HOOKS_IMPLEMENTATION_PRIORITY.md +585 -0
  239. package/docs/SKILLS_HOOKS_INTEGRATION.md +1074 -0
  240. package/epic-with-personas-2025-12-09-17-15-13.json +253 -0
  241. package/package.json +2 -1
  242. package/test-epic-creator-security.sh +203 -0
  243. package/.claude/skills/cfn-local-ruvector-accelerator/__pycache__/search_engine_v2.cpython-312.pyc +0 -0
  244. package/.claude/skills/cfn-local-ruvector-accelerator/search_engine.py +0 -200
  245. package/jest.config.ts.cjs +0 -17
  246. /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-cerebras-code-generator/SKILL.md +0 -0
  247. /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-cerebras-code-generator/context-analyzer.sh +0 -0
  248. /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-cerebras-code-generator/generate-code.sh +0 -0
  249. /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/SKILL.md +0 -0
  250. /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/execute.sh +0 -0
  251. /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/logging/INTEGRATION.md +0 -0
  252. /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/logging/SAMPLE_OUTPUTS.md +0 -0
  253. /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/logging/SKILL.md +0 -0
  254. /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/logging/capture-container-logs.sh +0 -0
  255. /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/logging/enable-logging.sh +0 -0
  256. /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/logging/init-hybrid-logging.sh +0 -0
  257. /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/logging/queries/analytics-summary.sh +0 -0
  258. /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/logging/queries/query-agent-timeline.sh +0 -0
  259. /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/logging/queries/query-consensus-history.sh +0 -0
  260. /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/logging/queries/query-coordination-timeline.sh +0 -0
  261. /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/logging/queries/query-failed-containers.sh +0 -0
  262. /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/logging/queries/query-gate-checks.sh +0 -0
  263. /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/logging/schema.sql +0 -0
  264. /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/logging/sqlite-helpers.sh +0 -0
  265. /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/logging/test-hybrid-logging.sh +0 -0
  266. /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/mcp/SKILL.md +0 -0
  267. /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/mcp/skill-mcp-selector.js +0 -0
  268. /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/orchestration/SKILL.md +0 -0
  269. /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/orchestration/orchestrate.sh +0 -0
  270. /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/spawning/SKILL.md +0 -0
  271. /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/spawning/spawn-agent.sh +0 -0
  272. /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/waves/SKILL.md +0 -0
  273. /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/waves/cleanup-wave.sh +0 -0
  274. /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/waves/lib/docker-helpers.sh +0 -0
  275. /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/waves/monitor-wave.sh +0 -0
  276. /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/waves/spawn-wave.sh +0 -0
  277. /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-node-heap-sizer/SKILL.md +0 -0
  278. /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-node-heap-sizer/task-mode-heap-limiter.sh +0 -0
  279. /package/.claude/{skills → cfn-extras/skills/deprecated}/deprecated/analyze-patterns.sh +0 -0
  280. /package/.claude/{skills → cfn-extras/skills/deprecated}/equation-solver/README.md +0 -0
  281. /package/.claude/{skills → cfn-extras/skills/deprecated}/equation-solver/SECURITY.md +0 -0
  282. /package/.claude/{skills → cfn-extras/skills/deprecated}/equation-solver/SKILL.md +0 -0
  283. /package/.claude/{skills → cfn-extras/skills/deprecated}/equation-solver/package.json +0 -0
  284. /package/.claude/{skills → cfn-extras/skills/deprecated}/equation-solver/solve.sh +0 -0
  285. /package/.claude/{skills → cfn-extras/skills/deprecated}/equation-solver/test-equation-solver-minimal.sh +0 -0
  286. /package/.claude/{skills → cfn-extras/skills/deprecated}/equation-solver/test-equation-solver.sh +0 -0
  287. /package/.claude/{skills → cfn-extras/skills/deprecated}/equation-solver/test.cjs +0 -0
  288. /package/.claude/hooks/{cfn-credential-scanner.sh → deprecated/cfn-credential-scanner.sh} +0 -0
  289. /package/.claude/hooks/{cfn-detect-hardcoded-credentials.sh → deprecated/cfn-detect-hardcoded-credentials.sh} +0 -0
  290. /package/.claude/hooks/{cfn-invoke-post-edit-ts.sh → deprecated/cfn-invoke-post-edit-ts.sh} +0 -0
  291. /package/.claude/hooks/{cfn-invoke-pre-edit-ts.sh → deprecated/cfn-invoke-pre-edit-ts.sh} +0 -0
  292. /package/.claude/hooks/{cfn-invoke-security-validation.sh → deprecated/cfn-invoke-security-validation.sh} +0 -0
  293. /package/.claude/hooks/{cfn-lint-sql-injection.sh → deprecated/cfn-lint-sql-injection.sh} +0 -0
  294. /package/.claude/hooks/{cfn-post-edit.sh → deprecated/cfn-post-edit.sh} +0 -0
  295. /package/.claude/hooks/{cfn-pre-edit-backup.sh → deprecated/cfn-pre-edit-backup.sh} +0 -0
  296. /package/.claude/skills/cfn-local-ruvector-accelerator/{embeddings_manager.py → embeddings_manager.py.backup} +0 -0
  297. /package/{.ruvector → .claude/skills/cfn-local-ruvector-accelerator/index}/index.bin +0 -0
  298. /package/{.ruvector → .claude/skills/cfn-local-ruvector-accelerator/index}/metadata.json +0 -0
  299. /package/.claude/skills/cfn-local-ruvector-accelerator/{search_engine_v2.py → search_engine_v2.py.backup} +0 -0
  300. /package/.claude/skills/cfn-local-ruvector-accelerator/{sqlite_store.py → sqlite_store.py.backup} +0 -0
@@ -0,0 +1,474 @@
1
+ #!/bin/bash
2
+ set -euo pipefail
3
+
4
+ # CFN Epic Creator - Validate Epic JSON
5
+ # Validates generated epic JSON structure and content
6
+
7
+ # Colors for output
8
+ RED='\033[0;31m'
9
+ GREEN='\033[0;32m'
10
+ YELLOW='\033[1;33m'
11
+ BLUE='\033[0;34m'
12
+ NC='\033[0m' # No Color
13
+
14
+ # Logging functions
15
+ log_info() {
16
+ echo -e "${BLUE}[INFO]${NC} $*"
17
+ }
18
+
19
+ log_success() {
20
+ echo -e "${GREEN}[SUCCESS]${NC} $*"
21
+ }
22
+
23
+ log_warning() {
24
+ echo -e "${YELLOW}[WARNING]${NC} $*"
25
+ }
26
+
27
+ log_error() {
28
+ echo -e "${RED}[ERROR]${NC} $*" >&2
29
+ }
30
+
31
+ # Show help message
32
+ show_help() {
33
+ cat << 'HELP_EOF'
34
+ CFN Epic Creator - Validate Epic JSON
35
+
36
+ USAGE:
37
+ ./validate-epic.sh <json-file> [OPTIONS]
38
+
39
+ REQUIRED ARGUMENTS:
40
+ <json-file> Path to the epic JSON file to validate
41
+
42
+ OPTIONS:
43
+ -v, --verbose Show detailed validation output
44
+ -s, --strict Enable strict validation (fails on warnings)
45
+ -h, --help Show this help message
46
+
47
+ EXIT CODES:
48
+ 0 Validation passed
49
+ 1 Validation failed
50
+ 2 File not found or invalid JSON
51
+ 3 Missing required arguments
52
+
53
+ HELP_EOF
54
+ }
55
+
56
+ # Validate JSON structure
57
+ validate_json_structure() {
58
+ local json_file="$1"
59
+ local strict="${2:-false}"
60
+ local verbose="${3:-false}"
61
+
62
+ local validation_errors=0
63
+ local validation_warnings=0
64
+
65
+ if [[ "$verbose" == true ]]; then
66
+ log_info "Validating JSON structure in: $json_file"
67
+ fi
68
+
69
+ # Check if file exists and is readable
70
+ if [[ ! -f "$json_file" ]]; then
71
+ log_error "File not found: $json_file"
72
+ return 2
73
+ fi
74
+
75
+ if [[ ! -r "$json_file" ]]; then
76
+ log_error "File not readable: $json_file"
77
+ return 2
78
+ fi
79
+
80
+ # Check if valid JSON
81
+ if ! jq empty "$json_file" 2>/dev/null; then
82
+ log_error "Invalid JSON format in: $json_file"
83
+ return 2
84
+ fi
85
+
86
+ # Check top-level structure
87
+ if [[ "$verbose" == true ]]; then
88
+ log_info "Checking top-level structure..."
89
+ fi
90
+
91
+ if ! jq -e '.epic' "$json_file" >/dev/null; then
92
+ log_error "Missing required 'epic' object at top level"
93
+ validation_errors=$((validation_errors + 1))
94
+ fi
95
+
96
+ # Validate epic metadata
97
+ if [[ "$verbose" == true ]]; then
98
+ log_info "Validating epic metadata..."
99
+ fi
100
+
101
+ local required_fields=("id" "title" "description" "status" "personas")
102
+ local optional_fields=("priority" "estimatedDuration" "budget" "owner" "metadata" "implementationRoadmap" "totalCostBreakdown" "riskAssessment")
103
+
104
+ for field in "${required_fields[@]}"; do
105
+ if ! jq -e ".epic.${field}" "$json_file" >/dev/null; then
106
+ log_error "Missing required epic field: ${field}"
107
+ validation_errors=$((validation_errors + 1))
108
+ elif [[ "$verbose" == true ]]; then
109
+ log_success "Found required field: ${field}"
110
+ fi
111
+ done
112
+
113
+ # Check optional fields
114
+ for field in "${optional_fields[@]}"; do
115
+ if jq -e ".epic.${field}" "$json_file" >/dev/null; then
116
+ if [[ "$verbose" == true ]]; then
117
+ log_info "Found optional field: ${field}"
118
+ fi
119
+ fi
120
+ done
121
+
122
+ # Validate epic ID format
123
+ local epic_id
124
+ epic_id=$(jq -r '.epic.id // empty' "$json_file")
125
+ if [[ -n "$epic_id" ]]; then
126
+ if [[ ! "$epic_id" =~ ^EPIC-[0-9]{6}$ ]]; then
127
+ log_warning "Epic ID format should be 'EPIC-XXXXXX' (6 digits): $epic_id"
128
+ validation_warnings=$((validation_warnings + 1))
129
+ elif [[ "$verbose" == true ]]; then
130
+ log_success "Epic ID has correct format: $epic_id"
131
+ fi
132
+ fi
133
+
134
+ # Validate status
135
+ local epic_status
136
+ epic_status=$(jq -r '.epic.status // empty' "$json_file")
137
+ if [[ -n "$epic_status" ]]; then
138
+ case "$epic_status" in
139
+ "not_started"|"in-progress"|"completed"|"blocked"|"in-review"|"cancelled")
140
+ if [[ "$verbose" == true ]]; then
141
+ log_success "Epic status is valid: $epic_status"
142
+ fi
143
+ ;;
144
+ *)
145
+ log_warning "Unusual epic status: $epic_status"
146
+ validation_warnings=$((validation_warnings + 1))
147
+ ;;
148
+ esac
149
+ fi
150
+
151
+ # Validate personas array
152
+ if [[ "$verbose" == true ]]; then
153
+ log_info "Validating personas array..."
154
+ fi
155
+
156
+ if ! jq -e '.epic.personas | type == "array"' "$json_file" >/dev/null; then
157
+ log_error "epic.personas must be an array"
158
+ validation_errors=$((validation_errors + 1))
159
+ else
160
+ local persona_count
161
+ persona_count=$(jq -r '.epic.personas | length' "$json_file")
162
+ if [[ "$persona_count" -ne 6 ]]; then
163
+ log_error "Expected exactly 6 personas, found: $persona_count"
164
+ validation_errors=$((validation_errors + 1))
165
+ elif [[ "$verbose" == true ]]; then
166
+ log_success "Found correct number of personas: $persona_count"
167
+ fi
168
+
169
+ # Validate each persona
170
+ local required_persona_names=("product-owner" "architect" "security-specialist" "performance-specialist" "accessibility-advocate" "devops-engineer")
171
+ local found_personas
172
+ found_personas=$(jq -r '.epic.personas[].name' "$json_file")
173
+
174
+ for persona_name in "${required_persona_names[@]}"; do
175
+ if echo "$found_personas" | grep -q "^${persona_name}$"; then
176
+ if [[ "$verbose" == true ]]; then
177
+ log_success "Found required persona: $persona_name"
178
+ fi
179
+
180
+ # Validate persona structure
181
+ validate_persona_structure "$json_file" "$persona_name" "$verbose" || validation_errors=$((validation_errors + 1))
182
+ else
183
+ log_error "Missing required persona: $persona_name"
184
+ validation_errors=$((validation_errors + 1))
185
+ fi
186
+ done
187
+
188
+ # Check for unexpected personas
189
+ while IFS= read -r found_persona; do
190
+ if [[ ! " ${required_persona_names[*]} " =~ " ${found_persona} " ]]; then
191
+ log_warning "Unexpected persona found: $found_persona"
192
+ validation_warnings=$((validation_warnings + 1))
193
+ fi
194
+ done <<< "$found_personas"
195
+ fi
196
+
197
+ # Validate recommendations structure
198
+ if [[ "$verbose" == true ]]; then
199
+ log_info "Validating recommendations structure..."
200
+ fi
201
+
202
+ if ! jq -e '.epic.personas[].recommendations | type == "array"' "$json_file" >/dev/null; then
203
+ log_error "Persona recommendations must be arrays"
204
+ validation_errors=$((validation_errors + 1))
205
+ else
206
+ validate_recommendations "$json_file" "$verbose" || validation_errors=$((validation_errors + 1))
207
+ fi
208
+
209
+ # Validate metadata if present
210
+ if jq -e '.epic.metadata' "$json_file" >/dev/null; then
211
+ if [[ "$verbose" == true ]]; then
212
+ log_info "Validating epic metadata..."
213
+ fi
214
+
215
+ validate_metadata "$json_file" "$verbose" || validation_errors=$((validation_errors + 1))
216
+ fi
217
+
218
+ # Report results
219
+ echo ""
220
+ log_info "=== Validation Results ==="
221
+
222
+ if [[ $validation_errors -eq 0 ]]; then
223
+ log_success "✅ All required validations passed"
224
+ else
225
+ log_error "❌ Found $validation_errors validation errors"
226
+ fi
227
+
228
+ if [[ $validation_warnings -gt 0 ]]; then
229
+ log_warning "⚠️ Found $validation_warnings warnings"
230
+
231
+ if [[ "$strict" == true ]]; then
232
+ log_error "Strict mode enabled: treating warnings as errors"
233
+ validation_errors=$((validation_errors + validation_warnings))
234
+ fi
235
+ fi
236
+
237
+ echo ""
238
+ log_info "Summary:"
239
+ log_info " Errors: $validation_errors"
240
+ log_info " Warnings: $validation_warnings"
241
+
242
+ if [[ $validation_errors -eq 0 ]]; then
243
+ echo ""
244
+ log_success "JSON validation PASSED"
245
+ return 0
246
+ else
247
+ echo ""
248
+ log_error "JSON validation FAILED"
249
+ return 1
250
+ fi
251
+ }
252
+
253
+ # Validate individual persona structure
254
+ validate_persona_structure() {
255
+ local json_file="$1"
256
+ local persona_name="$2"
257
+ local verbose="${3:-false}"
258
+
259
+ local persona_query=".epic.personas[] | select(.name == \"${persona_name}\")"
260
+
261
+ # Check required fields
262
+ local required_persona_fields=("name" "reviewOrder" "status" "insights" "recommendations" "costAnalysis")
263
+
264
+ for field in "${required_persona_fields[@]}"; do
265
+ if ! jq -e "${persona_query} | .${field}" "$json_file" >/dev/null; then
266
+ log_error "Missing required field in ${persona_name}: ${field}"
267
+ return 1
268
+ elif [[ "$verbose" == true ]]; then
269
+ log_success " ${persona_name}: Found required field: ${field}"
270
+ fi
271
+ done
272
+
273
+ # Check reviewOrder
274
+ local review_order
275
+ review_order=$(jq -r "${persona_query} | .reviewOrder" "$json_file")
276
+ if [[ ! "$review_order" =~ ^[1-6]$ ]]; then
277
+ log_error "Invalid reviewOrder for ${persona_name}: $review_order (must be 1-6)"
278
+ return 1
279
+ fi
280
+
281
+ # Check status
282
+ local persona_status
283
+ persona_status=$(jq -r "${persona_query} | .status" "$json_file")
284
+ case "$persona_status" in
285
+ "completed"|"failed"|"in-progress"|"pending")
286
+ if [[ "$verbose" == true ]]; then
287
+ log_success " ${persona_name}: Status is valid: $persona_status"
288
+ fi
289
+ ;;
290
+ *)
291
+ log_warning "Unusual persona status for ${persona_name}: $persona_status"
292
+ ;;
293
+ esac
294
+
295
+ # Check insights and recommendations are arrays
296
+ if ! jq -e "${persona_query} | .insights | type == \"array\"" "$json_file" >/dev/null; then
297
+ log_error "${persona_name}.insights must be an array"
298
+ return 1
299
+ fi
300
+
301
+ if ! jq -e "${persona_query} | .recommendations | type == \"array\"" "$json_file" >/dev/null; then
302
+ log_error "${persona_name}.recommendations must be an array"
303
+ return 1
304
+ fi
305
+
306
+ return 0
307
+ }
308
+
309
+ # Validate recommendations structure
310
+ validate_recommendations() {
311
+ local json_file="$1"
312
+ local verbose="${2:-false}"
313
+
314
+ local recommendation_count
315
+ recommendation_count=$(jq '[.epic.personas[].recommendations[]] | length' "$json_file")
316
+
317
+ if [[ "$verbose" == true ]]; then
318
+ log_info " Total recommendations found: $recommendation_count"
319
+ fi
320
+
321
+ # Check each recommendation has required fields
322
+ local invalid_recs
323
+ invalid_recs=$(jq -r '
324
+ .epic.personas[] as $persona |
325
+ $persona.recommendations[] |
326
+ select(has("id") == false or has("title") == false or has("type") == false or has("priority") == false) |
327
+ "\($persona.name): Missing required fields"
328
+ ' "$json_file")
329
+
330
+ if [[ -n "$invalid_recs" ]]; then
331
+ log_error "Invalid recommendations found:"
332
+ echo "$invalid_recs" | sed 's/^/ /'
333
+ return 1
334
+ fi
335
+
336
+ # Check recommendation types
337
+ local invalid_types
338
+ invalid_types=$(jq -r '
339
+ .epic.personas[] as $persona |
340
+ $persona.recommendations[] |
341
+ select(.type != "blocking" and .type != "suggested") |
342
+ "\($persona.name): Invalid type \(.type)"
343
+ ' "$json_file")
344
+
345
+ if [[ -n "$invalid_types" ]]; then
346
+ log_error "Invalid recommendation types found:"
347
+ echo "$invalid_types" | sed 's/^/ /'
348
+ return 1
349
+ fi
350
+
351
+ # Check recommendation priorities
352
+ local invalid_priorities
353
+ invalid_priorities=$(jq -r '
354
+ .epic.personas[] as $persona |
355
+ $persona.recommendations[] |
356
+ select(.priority != "critical" and .priority != "high" and .priority != "medium" and .priority != "low") |
357
+ "\($persona.name): Invalid priority \(.priority)"
358
+ ' "$json_file")
359
+
360
+ if [[ -n "$invalid_priorities" ]]; then
361
+ log_warning "Invalid recommendation priorities found:"
362
+ echo "$invalid_priorities" | sed 's/^/ /'
363
+ fi
364
+
365
+ return 0
366
+ }
367
+
368
+ # Validate metadata structure
369
+ validate_metadata() {
370
+ local json_file="$1"
371
+ local verbose="${2:-false}"
372
+
373
+ # Check for expected metadata fields
374
+ local expected_metadata_fields=("createdAt" "reviewMode" "devopsEnforced")
375
+
376
+ for field in "${expected_metadata_fields[@]}"; do
377
+ if jq -e ".epic.metadata.${field}" "$json_file" >/dev/null; then
378
+ if [[ "$verbose" == true ]]; then
379
+ log_success " Found metadata field: $field"
380
+ fi
381
+ fi
382
+ done
383
+
384
+ # Validate reviewMode
385
+ local review_mode
386
+ review_mode=$(jq -r '.epic.metadata.reviewMode // empty' "$json_file")
387
+ if [[ -n "$review_mode" ]]; then
388
+ case "$review_mode" in
389
+ "mvp"|"standard"|"enterprise")
390
+ if [[ "$verbose" == true ]]; then
391
+ log_success " Review mode is valid: $review_mode"
392
+ fi
393
+ ;;
394
+ *)
395
+ log_warning "Invalid reviewMode in metadata: $review_mode"
396
+ ;;
397
+ esac
398
+ fi
399
+
400
+ # Check createdAt format (ISO 8601)
401
+ local created_at
402
+ created_at=$(jq -r '.epic.metadata.createdAt // empty' "$json_file")
403
+ if [[ -n "$created_at" ]]; then
404
+ if [[ "$created_at" =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}\.[0-9]{3}Z$ ]]; then
405
+ if [[ "$verbose" == true ]]; then
406
+ log_success " createdAt has valid ISO 8601 format"
407
+ fi
408
+ else
409
+ log_warning "createdAt does not match ISO 8601 format: $created_at"
410
+ fi
411
+ fi
412
+
413
+ return 0
414
+ }
415
+
416
+ # Main execution
417
+ main() {
418
+ # Parse command line arguments
419
+ local json_file=""
420
+ local verbose=false
421
+ local strict=false
422
+ local show_help=false
423
+
424
+ while [[ $# -gt 0 ]]; do
425
+ case $1 in
426
+ -h|--help)
427
+ show_help=true
428
+ shift
429
+ ;;
430
+ -v|--verbose)
431
+ verbose=true
432
+ shift
433
+ ;;
434
+ -s|--strict)
435
+ strict=true
436
+ shift
437
+ ;;
438
+ -*)
439
+ log_error "Unknown option: $1"
440
+ log_error "Use -h or --help for usage information"
441
+ exit 3
442
+ ;;
443
+ *)
444
+ if [[ -z "$json_file" ]]; then
445
+ json_file="$1"
446
+ else
447
+ log_error "Too many arguments"
448
+ log_error "Use -h or --help for usage information"
449
+ exit 3
450
+ fi
451
+ shift
452
+ ;;
453
+ esac
454
+ done
455
+
456
+ # Show help if requested
457
+ if [[ "$show_help" == true ]]; then
458
+ show_help
459
+ exit 0
460
+ fi
461
+
462
+ # Validate required arguments
463
+ if [[ -z "$json_file" ]]; then
464
+ log_error "Missing required JSON file path"
465
+ log_error "Use -h or --help for usage information"
466
+ exit 3
467
+ fi
468
+
469
+ # Run validation
470
+ validate_json_structure "$json_file" "$strict" "$verbose"
471
+ }
472
+
473
+ # Execute main function
474
+ main "$@"
@@ -0,0 +1,8 @@
1
+ {
2
+ "timestamp": "1765358428",
3
+ "agent_id": "unknown",
4
+ "original_file": "/mnt/c/Users/masha/Documents/claude-flow-novice/.claude/skills/cfn-local-ruvector-accelerator/src/cli/refs.rs",
5
+ "file_hash": "2cf0ad7377232c919ff0a65630cb307d",
6
+ "backup_path": "/mnt/c/Users/masha/Documents/claude-flow-novice/.claude/skills/cfn-local-ruvector-accelerator/.backups/unknown/1765358428_2cf0ad7377232c919ff0a65630cb307d",
7
+ "created_at": "2025-12-10T09:20:29Z"
8
+ }
@@ -0,0 +1,209 @@
1
+ use anyhow::{Result, Context};
2
+ use clap::Args;
3
+ use serde_json::{json};
4
+ use std::path::{Path, PathBuf};
5
+ use tracing::{info, debug, warn};
6
+
7
+ use crate::query_api::{QueryApi, QueryResultFormatter};
8
+ use crate::store_v2::{StoreV2};
9
+
10
+ #[derive(Debug, Args)]
11
+ pub struct RefsCommand {
12
+ /// Find all references to an entity by name
13
+ #[arg()]
14
+ pub entity_name: String,
15
+
16
+ /// Entity kind to search for (function, struct, enum, etc.)
17
+ #[arg(long)]
18
+ pub kind: Option<String>,
19
+
20
+ /// Reference kind filter (call, import, implement, etc.)
21
+ #[arg(long)]
22
+ pub ref_kind: Option<String>,
23
+
24
+ /// Limit search to specific file
25
+ #[arg(long)]
26
+ pub file: Option<String>,
27
+
28
+ /// Maximum number of results to return
29
+ #[arg(short, long, default_value = "50")]
30
+ pub limit: usize,
31
+
32
+ /// Output format
33
+ #[arg(long, value_enum, default_value = "simple")]
34
+ pub format: RefsOutputFormat,
35
+
36
+ /// Show detailed context
37
+ #[arg(long)]
38
+ pub detailed: bool,
39
+
40
+ /// Output file (optional)
41
+ #[arg(long)]
42
+ pub output: Option<PathBuf>,
43
+
44
+ /// Group results by file
45
+ #[arg(long)]
46
+ pub group_by_file: bool,
47
+
48
+ /// Include only inbound references (references to this entity)
49
+ #[arg(long)]
50
+ pub inbound: bool,
51
+
52
+ /// Include only outbound references (references from this entity)
53
+ #[arg(long)]
54
+ pub outbound: bool,
55
+ }
56
+
57
+ #[derive(Debug, Clone, clap::ValueEnum)]
58
+ pub enum RefsOutputFormat {
59
+ Simple,
60
+ Json,
61
+ Detailed,
62
+ Tree,
63
+ }
64
+
65
+ impl RefsCommand {
66
+ pub fn execute(&self, project_dir: &Path) -> Result<()> {
67
+ // Initialize store and query API
68
+ let db_path = project_dir.join(".ruvector").join("index.db");
69
+ let store = StoreV2::new(&db_path)
70
+ .context("Failed to open database")?;
71
+ let query_api = QueryApi::new(store);
72
+
73
+ // Build a path-like search term
74
+ let search_term = if let Some(kind) = &self.kind {
75
+ format!("{}::{}", kind, self.entity_name)
76
+ } else {
77
+ self.entity_name.clone()
78
+ };
79
+
80
+ // Find references using the query API
81
+ let mut result = query_api.find_references_to_path(&search_term)?;
82
+
83
+ // Filter results based on command options
84
+ let filtered_results: Vec<_> = result.results.into_iter()
85
+ .filter(|item| {
86
+ // Filter by file if specified
87
+ if let Some(file) = &self.file {
88
+ if !item.entity.file_path.contains(file) {
89
+ return false;
90
+ }
91
+ }
92
+
93
+ // Additional filtering could be added here for ref_kind
94
+ true
95
+ })
96
+ .collect();
97
+
98
+ // Update the result with filtered items
99
+ result.results = filtered_results;
100
+ result.total_count = result.results.len();
101
+
102
+ // Apply limit
103
+ let limited_result = crate::query_api::QueryResult {
104
+ query_type: result.query_type,
105
+ results: result.results.into_iter().take(self.limit).collect(),
106
+ total_count: result.total_count,
107
+ };
108
+
109
+ // Format and output results
110
+ let output = match self.format {
111
+ RefsOutputFormat::Simple => self.format_simple(&limited_result),
112
+ RefsOutputFormat::Json => limited_result.format_json()?,
113
+ RefsOutputFormat::Detailed => limited_result.format_detailed(),
114
+ RefsOutputFormat::Tree => self.format_tree(&limited_result)?,
115
+ };
116
+
117
+ // Write output
118
+ if let Some(output_path) = &self.output {
119
+ std::fs::write(output_path, output)
120
+ .context("Failed to write output file")?;
121
+ info!("Results written to: {}", output_path.display());
122
+ } else {
123
+ println!("{}", output);
124
+ }
125
+
126
+ // Show summary if we truncated results
127
+ if limited_result.total_count > self.limit {
128
+ eprintln!("\n⚠️ Showing {} of {} total results", self.limit, limited_result.total_count);
129
+ }
130
+
131
+ info!("Refs command completed: {} references found", limited_result.total_count);
132
+ Ok(())
133
+ }
134
+
135
+ fn format_simple(&self, result: &crate::query_api::QueryResult) -> String {
136
+ if self.group_by_file {
137
+ let mut groups = std::collections::HashMap::new();
138
+ for item in &result.results {
139
+ groups.entry(&item.entity.file_path)
140
+ .or_insert_with(Vec::new)
141
+ .push(item);
142
+ }
143
+
144
+ let mut output = String::new();
145
+ for (file_path, items) in groups {
146
+ output.push_str(&format!("\n📁 {}\n", file_path));
147
+ for item in items {
148
+ output.push_str(&format!(" {}:{} - {}\n",
149
+ item.entity.line_number,
150
+ item.entity.name,
151
+ item.entity.kind.as_str()
152
+ ));
153
+ }
154
+ }
155
+ output.trim_start().to_string()
156
+ } else {
157
+ result.results.iter()
158
+ .map(|item| format!("{}:{} - {} ({})",
159
+ item.entity.file_path,
160
+ item.entity.line_number,
161
+ item.entity.name,
162
+ item.entity.kind.as_str()))
163
+ .collect::<Vec<_>>()
164
+ .join("\n")
165
+ }
166
+ }
167
+
168
+ fn format_tree(&self, result: &crate::query_api::QueryResult) -> String {
169
+ let mut tree = String::new();
170
+
171
+ // Group by file for tree view
172
+ let mut groups = std::collections::HashMap::new();
173
+ for item in &result.results {
174
+ groups.entry(&item.entity.file_path)
175
+ .or_insert_with(Vec::new)
176
+ .push(item);
177
+ }
178
+
179
+ for (file_path, items) in groups {
180
+ tree.push_str(&format!("📁 {}\n", file_path));
181
+
182
+ // Group by line number to show multiple refs on same line
183
+ let mut line_groups = std::collections::HashMap::new();
184
+ for item in items {
185
+ line_groups.entry(item.entity.line_number)
186
+ .or_insert_with(Vec::new)
187
+ .push(item);
188
+ }
189
+
190
+ for (line, items_at_line) in line_groups {
191
+ tree.push_str(&format!(" 📍 Line {}:\n", line));
192
+ for item in items_at_line {
193
+ tree.push_str(&format!(" ├── {} ({})\n",
194
+ item.entity.name,
195
+ item.entity.kind.as_str()
196
+ ));
197
+ if let Some(context) = &item.context {
198
+ let first_line = context.lines().next().unwrap_or("").trim();
199
+ if !first_line.is_empty() {
200
+ tree.push_str(&format!(" │ └─ {}\n", first_line));
201
+ }
202
+ }
203
+ }
204
+ }
205
+ }
206
+
207
+ tree
208
+ }
209
+ }
@@ -0,0 +1,7 @@
1
+ #!/bin/bash
2
+ # Revert script for /mnt/c/Users/masha/Documents/claude-flow-novice/.claude/skills/cfn-local-ruvector-accelerator/src/cli/refs.rs
3
+ set -euo pipefail
4
+
5
+ echo "Reverting file: /mnt/c/Users/masha/Documents/claude-flow-novice/.claude/skills/cfn-local-ruvector-accelerator/src/cli/refs.rs"
6
+ cp "/mnt/c/Users/masha/Documents/claude-flow-novice/.claude/skills/cfn-local-ruvector-accelerator/.backups/unknown/1765358428_2cf0ad7377232c919ff0a65630cb307d/original" "/mnt/c/Users/masha/Documents/claude-flow-novice/.claude/skills/cfn-local-ruvector-accelerator/src/cli/refs.rs"
7
+ echo "✅ File reverted successfully"