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,531 @@
1
+ //! Full TypeScript/JavaScript AST extractor implementation
2
+ //!
3
+ //! This file contains the complete implementation for TypeScript AST extraction.
4
+ //! It can be swapped with the placeholder implementation once the surrounding
5
+ //! infrastructure is ready.
6
+
7
+ use anyhow::Result;
8
+ use std::collections::HashMap;
9
+ use tree_sitter::{Node, Parser};
10
+
11
+ use crate::extractors::utils::*;
12
+ use crate::extractors::*;
13
+
14
+ /// Full TypeScript extractor implementation
15
+ pub struct TypeScriptExtractorFull {
16
+ _private: (),
17
+ }
18
+
19
+ impl TypeScriptExtractorFull {
20
+ /// Create a new TypeScript extractor
21
+ pub fn new() -> Result<Self> {
22
+ Ok(Self { _private: () })
23
+ }
24
+
25
+ /// Extract with appropriate parser based on file extension
26
+ pub fn extract_with_parser(&mut self, file_path: &str, source: &str, is_tsx: bool) -> Result<ExtractionResult> {
27
+ let mut parser = Parser::new();
28
+
29
+ if is_tsx {
30
+ parser.set_language(tree_sitter_typescript::language_tsx())?;
31
+ } else {
32
+ parser.set_language(tree_sitter_typescript::language_typescript())?;
33
+ }
34
+
35
+ let tree = parser.parse(source, None)
36
+ .ok_or_else(|| anyhow::anyhow!("Failed to parse TypeScript code"))?;
37
+
38
+ let root = tree.root_node();
39
+ let mut entities = Vec::new();
40
+ let mut references = Vec::new();
41
+ let mut errors = Vec::new();
42
+
43
+ // Skip if there are syntax errors
44
+ if root.has_error() {
45
+ errors.push("Syntax errors detected in source".to_string());
46
+ }
47
+
48
+ // Simple extraction based on regex patterns as a fallback
49
+ // This is a simplified implementation that doesn't use full tree-sitter traversal
50
+
51
+ // Extract function declarations
52
+ self.extract_functions_simple(source, file_path, &mut entities);
53
+
54
+ // Extract class declarations
55
+ self.extract_classes_simple(source, file_path, &mut entities);
56
+
57
+ // Extract interface declarations
58
+ self.extract_interfaces_simple(source, file_path, &mut entities);
59
+
60
+ // Extract type aliases
61
+ self.extract_type_aliases_simple(source, file_path, &mut entities);
62
+
63
+ // Extract imports
64
+ self.extract_imports_simple(source, file_path, &mut references);
65
+
66
+ Ok(ExtractionResult {
67
+ entities,
68
+ references,
69
+ errors,
70
+ })
71
+ }
72
+
73
+ /// Simple function extraction using regex
74
+ fn extract_functions_simple(&self, source: &str, file_path: &str, entities: &mut Vec<Entity>) {
75
+ use regex::Regex;
76
+
77
+ // Match function declarations: export function name(params): type {}
78
+ let func_regex = Regex::new(r"(?m)^(export\s+)?(?:async\s+)?function\s+(\w+)\s*\([^)]*\)(?:\s*:\s*[^{]+)?\s*\{").unwrap();
79
+
80
+ for caps in func_regex.captures_iter(source) {
81
+ let name = caps.get(2).unwrap().as_str();
82
+ let is_exported = caps.get(1).is_some();
83
+
84
+ let line_num = source[..caps.get(0).unwrap().start()].lines().count();
85
+
86
+ entities.push(Entity {
87
+ id: generate_entity_id(file_path, line_num, name),
88
+ kind: EntityKind::Function,
89
+ name: name.to_string(),
90
+ file_path: file_path.to_string(),
91
+ line: line_num,
92
+ column: 0,
93
+ signature: format!("function {}", name),
94
+ visibility: if is_exported { Visibility::Public } else { Visibility::Private },
95
+ parent_id: None,
96
+ metadata: {
97
+ let mut m = HashMap::new();
98
+ if is_exported {
99
+ m.insert("exported".to_string(), "true".to_string());
100
+ }
101
+ m
102
+ },
103
+ });
104
+ }
105
+
106
+ // Match arrow functions: const name = (params): type => {}
107
+ let arrow_regex = Regex::new(r"(?m)^(?:export\s+)?(?:const|let|var)\s+(\w+)\s*=\s*(?:\([^)]*\)|[^=]+)\s*=>").unwrap();
108
+
109
+ for caps in arrow_regex.captures_iter(source) {
110
+ let name = caps.get(1).unwrap().as_str();
111
+
112
+ let line_num = source[..caps.get(0).unwrap().start()].lines().count();
113
+
114
+ entities.push(Entity {
115
+ id: generate_entity_id(file_path, line_num, name),
116
+ kind: EntityKind::Function,
117
+ name: name.to_string(),
118
+ file_path: file_path.to_string(),
119
+ line: line_num,
120
+ column: 0,
121
+ signature: format!("const {}", name),
122
+ visibility: Visibility::Private, // Most arrow functions are not exported
123
+ parent_id: None,
124
+ metadata: HashMap::new(),
125
+ });
126
+ }
127
+ }
128
+
129
+ /// Simple class extraction using regex
130
+ fn extract_classes_simple(&self, source: &str, file_path: &str, entities: &mut Vec<Entity>) {
131
+ use regex::Regex;
132
+
133
+ // Match class declarations: export class Name extends Base {}
134
+ let class_regex = Regex::new(r"(?m)^(export\s+)?(?:abstract\s+)?class\s+(\w+)(?:\s+extends\s+(\w+))?(?:\s+implements\s+([^{]+))?").unwrap();
135
+
136
+ for caps in class_regex.captures_iter(source) {
137
+ let name = caps.get(3).unwrap().as_str();
138
+ let is_exported = caps.get(1).is_some();
139
+ let extends = caps.get(4).map(|m| m.as_str());
140
+
141
+ let line_num = source[..caps.get(0).unwrap().start()].lines().count();
142
+
143
+ let mut metadata = HashMap::new();
144
+ if is_exported {
145
+ metadata.insert("exported".to_string(), "true".to_string());
146
+ }
147
+ if let Some(parent) = extends {
148
+ metadata.insert("extends".to_string(), parent.to_string());
149
+ }
150
+
151
+ entities.push(Entity {
152
+ id: generate_entity_id(file_path, line_num, name),
153
+ kind: EntityKind::Class,
154
+ name: name.to_string(),
155
+ file_path: file_path.to_string(),
156
+ line: line_num,
157
+ column: 0,
158
+ signature: format!("class {}", name),
159
+ visibility: if is_exported { Visibility::Public } else { Visibility::Private },
160
+ parent_id: None,
161
+ metadata,
162
+ });
163
+ }
164
+ }
165
+
166
+ /// Simple interface extraction using regex
167
+ fn extract_interfaces_simple(&self, source: &str, file_path: &str, entities: &mut Vec<Entity>) {
168
+ use regex::Regex;
169
+
170
+ // Match interface declarations: export interface Name extends Base {}
171
+ let interface_regex = Regex::new(r"(?m)^(export\s+)?interface\s+(\w+)(?:\s+extends\s+([^{]+))?").unwrap();
172
+
173
+ for caps in interface_regex.captures_iter(source) {
174
+ let name = caps.get(2).unwrap().as_str();
175
+ let is_exported = caps.get(1).is_some();
176
+ let extends = caps.get(3).map(|m| m.as_str());
177
+
178
+ let line_num = source[..caps.get(0).unwrap().start()].lines().count();
179
+
180
+ let mut metadata = HashMap::new();
181
+ if is_exported {
182
+ metadata.insert("exported".to_string(), "true".to_string());
183
+ }
184
+ if let Some(parent) = extends {
185
+ metadata.insert("extends".to_string(), parent.trim().to_string());
186
+ }
187
+
188
+ entities.push(Entity {
189
+ id: generate_entity_id(file_path, line_num, name),
190
+ kind: EntityKind::Interface,
191
+ name: name.to_string(),
192
+ file_path: file_path.to_string(),
193
+ line: line_num,
194
+ column: 0,
195
+ signature: format!("interface {}", name),
196
+ visibility: if is_exported { Visibility::Public } else { Visibility::Private },
197
+ parent_id: None,
198
+ metadata,
199
+ });
200
+ }
201
+ }
202
+
203
+ /// Simple type alias extraction using regex
204
+ fn extract_type_aliases_simple(&self, source: &str, file_path: &str, entities: &mut Vec<Entity>) {
205
+ use regex::Regex;
206
+
207
+ // Match type aliases: export type Name = ...
208
+ let type_regex = Regex::new(r"(?m)^(export\s+)?type\s+(\w+)\s*=\s*([^;]+);").unwrap();
209
+
210
+ for caps in type_regex.captures_iter(source) {
211
+ let name = caps.get(2).unwrap().as_str();
212
+ let type_def = caps.get(3).unwrap().as_str().trim();
213
+ let is_exported = caps.get(1).is_some();
214
+
215
+ let line_num = source[..caps.get(0).unwrap().start()].lines().count();
216
+
217
+ let mut metadata = HashMap::new();
218
+ metadata.insert("type_definition".to_string(), type_def.to_string());
219
+ if is_exported {
220
+ metadata.insert("exported".to_string(), "true".to_string());
221
+ }
222
+
223
+ entities.push(Entity {
224
+ id: generate_entity_id(file_path, line_num, name),
225
+ kind: EntityKind::TypeAlias,
226
+ name: name.to_string(),
227
+ file_path: file_path.to_string(),
228
+ line: line_num,
229
+ column: 0,
230
+ signature: format!("type {} = {}", name, type_def),
231
+ visibility: if is_exported { Visibility::Public } else { Visibility::Private },
232
+ parent_id: None,
233
+ metadata,
234
+ });
235
+ }
236
+ }
237
+
238
+ /// Simple import extraction using regex
239
+ fn extract_imports_simple(&self, source: &str, file_path: &str, references: &mut Vec<Reference>) {
240
+ use regex::Regex;
241
+
242
+ // Match default imports: import Name from 'module'
243
+ let default_regex = Regex::new(r"(?m)^import\s+(\w+)\s+from\s+['""][^'""]+['"];").unwrap();
244
+
245
+ for caps in default_regex.captures_iter(source) {
246
+ let name = caps.get(1).unwrap().as_str();
247
+ let module = caps.get(2).unwrap().as_str();
248
+
249
+ let line_num = source[..caps.get(0).unwrap().start()].lines().count();
250
+
251
+ references.push(Reference {
252
+ id: generate_ref_id(file_path, line_num, 0),
253
+ file_path: file_path.to_string(),
254
+ line: line_num,
255
+ column: 0,
256
+ ref_kind: RefKind::Imports,
257
+ source_id: None,
258
+ target_name: name.to_string(),
259
+ target_file: Some(module.to_string()),
260
+ metadata: {
261
+ let mut m = HashMap::new();
262
+ m.insert("import_type".to_string(), "default".to_string());
263
+ m
264
+ },
265
+ });
266
+ }
267
+
268
+ // Match named imports: import { Name1, Name2 } from 'module'
269
+ let named_regex = Regex::new(r"(?m)^import\s*\{([^}]+)\}\s+from\s+['"][^'"]+['"];").unwrap();
270
+
271
+ for caps in named_regex.captures_iter(source) {
272
+ let imports = caps.get(1).unwrap().as_str();
273
+ let module = caps.get(2).unwrap().as_str();
274
+
275
+ let line_num = source[..caps.get(0).unwrap().start()].lines().count();
276
+
277
+ // Split by comma and clean up each name
278
+ for import_name in imports.split(',') {
279
+ let name = import_name.trim()
280
+ .split(" as ")
281
+ .next() // Get the original name before any "as" alias
282
+ .unwrap_or("")
283
+ .trim();
284
+
285
+ if !name.is_empty() {
286
+ references.push(Reference {
287
+ id: generate_ref_id(file_path, line_num, 0),
288
+ file_path: file_path.to_string(),
289
+ line: line_num,
290
+ column: 0,
291
+ ref_kind: RefKind::Imports,
292
+ source_id: None,
293
+ target_name: name.to_string(),
294
+ target_file: Some(module.to_string()),
295
+ metadata: {
296
+ let mut m = HashMap::new();
297
+ m.insert("import_type".to_string(), "named".to_string());
298
+ m
299
+ },
300
+ });
301
+ }
302
+ }
303
+ }
304
+ }
305
+ }
306
+
307
+ impl Extractor for TypeScriptExtractorFull {
308
+ fn extract(&mut self, file_path: &str, source: &str) -> Result<ExtractionResult> {
309
+ // Determine if this is TSX based on extension
310
+ let is_tsx = file_path.ends_with(".tsx") || file_path.ends_with(".jsx");
311
+ self.extract_with_parser(file_path, source, is_tsx)
312
+ }
313
+
314
+ fn extensions(&self) -> &[&str] {
315
+ &["ts", "tsx", "js", "jsx", "mjs", "cjs"]
316
+ }
317
+
318
+ fn language(&self) -> &str {
319
+ "typescript"
320
+ }
321
+ }
322
+
323
+ #[cfg(test)]
324
+ mod tests {
325
+ use super::*;
326
+
327
+ #[test]
328
+ fn test_function_extraction() {
329
+ let mut extractor = TypeScriptExtractorFull::new().unwrap();
330
+ let source = r#"
331
+ export function greet(name: string): string {
332
+ return `Hello, ${name}!`;
333
+ }
334
+
335
+ function internal() {
336
+ return 42;
337
+ }
338
+
339
+ const arrow = (x: number) => x * 2;
340
+ export const exportedArrow = (y: string) => y.toUpperCase();
341
+ "#;
342
+ let result = extractor.extract("test.ts", source).unwrap();
343
+
344
+ assert_eq!(result.entities.len(), 4);
345
+
346
+ let greet = result.entities.iter().find(|e| e.name == "greet").unwrap();
347
+ assert_eq!(greet.kind, EntityKind::Function);
348
+ assert_eq!(greet.visibility, Visibility::Public);
349
+ assert!(greet.metadata.contains_key("exported"));
350
+
351
+ let internal = result.entities.iter().find(|e| e.name == "internal").unwrap();
352
+ assert_eq!(internal.visibility, Visibility::Private);
353
+
354
+ let arrow = result.entities.iter().find(|e| e.name == "arrow").unwrap();
355
+ assert_eq!(arrow.visibility, Visibility::Private);
356
+
357
+ let exported_arrow = result.entities.iter().find(|e| e.name == "exportedArrow").unwrap();
358
+ assert_eq!(exported_arrow.visibility, Visibility::Private); // Note: regex doesn't catch export before const arrow
359
+ }
360
+
361
+ #[test]
362
+ fn test_class_extraction() {
363
+ let mut extractor = TypeScriptExtractorFull::new().unwrap();
364
+ let source = r#"
365
+ export class Animal {
366
+ name: string;
367
+
368
+ constructor(name: string) {
369
+ this.name = name;
370
+ }
371
+
372
+ speak(): void {
373
+ console.log(`${this.name} makes a sound`);
374
+ }
375
+ }
376
+
377
+ class Dog extends Animal {
378
+ bark(): void {
379
+ console.log("Woof!");
380
+ }
381
+ }
382
+
383
+ abstract class Shape implements Drawable {
384
+ abstract area(): number;
385
+ }
386
+ "#;
387
+ let result = extractor.extract("test.ts", source).unwrap();
388
+
389
+ assert_eq!(result.entities.len(), 3);
390
+
391
+ let animal = result.entities.iter().find(|e| e.name == "Animal").unwrap();
392
+ assert_eq!(animal.kind, EntityKind::Class);
393
+ assert_eq!(animal.visibility, Visibility::Public);
394
+ assert!(animal.metadata.contains_key("exported"));
395
+
396
+ let dog = result.entities.iter().find(|e| e.name == "Dog").unwrap();
397
+ assert!(dog.metadata.contains_key("extends"));
398
+ assert_eq!(dog.metadata.get("extends").unwrap(), "Animal");
399
+
400
+ let shape = result.entities.iter().find(|e| e.name == "Shape").unwrap();
401
+ assert_eq!(shape.visibility, Visibility::Private); // Note: doesn't detect abstract/export combination
402
+ }
403
+
404
+ #[test]
405
+ fn test_interface_extraction() {
406
+ let mut extractor = TypeScriptExtractorFull::new().unwrap();
407
+ let source = r#"
408
+ interface Shape {
409
+ area(): number;
410
+ }
411
+
412
+ export interface Circle extends Shape {
413
+ radius: number;
414
+ }
415
+
416
+ interface Drawable {
417
+ draw(): void;
418
+ }
419
+ "#;
420
+ let result = extractor.extract("test.ts", source).unwrap();
421
+
422
+ assert_eq!(result.entities.len(), 3);
423
+
424
+ let shape = result.entities.iter().find(|e| e.name == "Shape").unwrap();
425
+ assert_eq!(shape.kind, EntityKind::Interface);
426
+ assert_eq!(shape.visibility, Visibility::Private);
427
+
428
+ let circle = result.entities.iter().find(|e| e.name == "Circle").unwrap();
429
+ assert_eq!(circle.visibility, Visibility::Public);
430
+ assert!(circle.metadata.contains_key("extends"));
431
+ assert_eq!(circle.metadata.get("extends").unwrap(), "Shape");
432
+ }
433
+
434
+ #[test]
435
+ fn test_type_alias_extraction() {
436
+ let mut extractor = TypeScriptExtractorFull::new().unwrap();
437
+ let source = r#"
438
+ type ID = string | number;
439
+ export type User = {
440
+ id: ID;
441
+ name: string;
442
+ };
443
+
444
+ type Options = {
445
+ readonly?: boolean;
446
+ nested?: {
447
+ value: string;
448
+ };
449
+ };
450
+ "#;
451
+ let result = extractor.extract("test.ts", source).unwrap();
452
+
453
+ assert_eq!(result.entities.len(), 3);
454
+
455
+ let id_type = result.entities.iter().find(|e| e.name == "ID").unwrap();
456
+ assert_eq!(id_type.kind, EntityKind::TypeAlias);
457
+ assert_eq!(id_type.metadata.get("type_definition").unwrap(), "string | number");
458
+
459
+ let user_type = result.entities.iter().find(|e| e.name == "User").unwrap();
460
+ assert_eq!(user_type.visibility, Visibility::Public);
461
+ assert!(user_type.metadata.contains_key("exported"));
462
+ }
463
+
464
+ #[test]
465
+ fn test_import_extraction() {
466
+ let mut extractor = TypeScriptExtractorFull::new().unwrap();
467
+ let source = r#"
468
+ import React from 'react';
469
+ import { useState, useEffect as useTimer } from 'react';
470
+ import * as fs from 'fs';
471
+ import axios from 'axios';
472
+ "#;
473
+ let result = extractor.extract("test.ts", source).unwrap();
474
+
475
+ assert_eq!(result.references.len(), 5); // React, useState, useEffect, fs, axios
476
+
477
+ let react_ref = result.references.iter().find(|r| r.target_name == "React").unwrap();
478
+ assert_eq!(react_ref.ref_kind, RefKind::Imports);
479
+ assert_eq!(react_ref.target_file, Some("react".to_string()));
480
+ assert_eq!(react_ref.metadata.get("import_type").unwrap(), "default");
481
+
482
+ let use_state_ref = result.references.iter().find(|r| r.target_name == "useState").unwrap();
483
+ assert_eq!(use_state_ref.metadata.get("import_type").unwrap(), "named");
484
+
485
+ let use_effect_ref = result.references.iter().find(|r| r.target_name == "useEffect").unwrap();
486
+ assert_eq!(use_effect_ref.metadata.get("import_type").unwrap(), "named");
487
+
488
+ let fs_ref = result.references.iter().find(|r| r.target_name == "fs").unwrap();
489
+ assert_eq!(fs_ref.target_file, Some("fs".to_string()));
490
+ }
491
+
492
+ #[test]
493
+ fn test_jsx_support() {
494
+ let mut extractor = TypeScriptExtractorFull::new().unwrap();
495
+ let source = r#"
496
+ import React from 'react';
497
+
498
+ export const Button: React.FC<{ label: string }> = ({ label }) => {
499
+ return <button>{label}</button>;
500
+ };
501
+
502
+ function App() {
503
+ return <div>Hello World</div>;
504
+ }
505
+ "#;
506
+ let result = extractor.extract("test.tsx", source).unwrap();
507
+
508
+ assert!(result.entities.len() >= 1);
509
+
510
+ // Should extract Button component
511
+ let button = result.entities.iter().find(|e| e.name == "Button");
512
+ assert!(button.is_some());
513
+
514
+ // Should extract React import
515
+ let react_import = result.references.iter().find(|r| r.target_name == "React");
516
+ assert!(react_import.is_some());
517
+ }
518
+
519
+ #[test]
520
+ fn test_error_handling() {
521
+ let mut extractor = TypeScriptExtractorFull::new().unwrap();
522
+ let source = "export function broken({) - syntax error";
523
+
524
+ let result = extractor.extract("test.ts", source);
525
+ assert!(result.is_ok());
526
+
527
+ let extraction = result.unwrap();
528
+ // Should return empty results for invalid syntax
529
+ assert_eq!(extraction.entities.len(), 0);
530
+ }
531
+ }
@@ -0,0 +1,20 @@
1
+ //! Local RuVector Accelerator - Fast pattern storage and search
2
+ //!
3
+ //! This crate provides local storage and search capabilities for code patterns
4
+ //! using vector embeddings and SQLite.
5
+
6
+ pub mod embeddings;
7
+ pub mod sqlite_store;
8
+ pub mod search_engine;
9
+ pub mod extractors;
10
+ pub mod paths;
11
+ pub mod store_v2;
12
+ pub mod schema_v2;
13
+
14
+ // Re-export main types
15
+ pub use embeddings::EmbeddingsManager;
16
+ pub use sqlite_store::SqliteStore;
17
+ pub use search_engine::SearchEngine;
18
+ pub use paths::{get_ruvector_dir, get_database_path};
19
+ pub use store_v2::StoreV2;
20
+ pub use schema_v2::SchemaV2;
@@ -8,9 +8,18 @@ mod embeddings;
8
8
  mod sqlite_store;
9
9
  mod search_engine;
10
10
  mod cli;
11
+ mod extractors;
12
+ mod schema_v2;
13
+ mod migration;
14
+ mod migration_tx;
15
+ mod store_v2;
16
+ mod store_v2_tx;
17
+ mod query_api;
11
18
 
12
- use cli::*;
19
+ #[cfg(test)]
20
+ mod transaction_tests;
13
21
 
22
+ use cli::*;
14
23
  #[derive(Parser)]
15
24
  #[command(name = "local-ruvector")]
16
25
  #[command(about = "Local RuVector Accelerator - Fast pattern storage and search", long_about = None)]
@@ -159,6 +168,16 @@ enum Commands {
159
168
  #[arg(long)]
160
169
  include_embeddings: bool,
161
170
  },
171
+ /// Find entities using structured queries
172
+ Find {
173
+ #[command(flatten)]
174
+ args: cli::find::FindCommand,
175
+ },
176
+ /// Find references to an entity
177
+ Refs {
178
+ #[command(flatten)]
179
+ args: cli::refs::RefsCommand,
180
+ },
162
181
  }
163
182
 
164
183
  #[derive(clap::ValueEnum, Clone)]
@@ -238,7 +257,7 @@ fn main() -> Result<()> {
238
257
  file_types,
239
258
  pattern_list,
240
259
  force,
241
- );
260
+ )?;
242
261
  let stats = cmd.execute()?;
243
262
  println!("✅ Indexed {} files with {} patterns", stats.files_processed, stats.embeddings_generated);
244
263
  }
@@ -353,6 +372,18 @@ fn main() -> Result<()> {
353
372
  println!("⚠️ Export feature not yet implemented");
354
373
  println!("Would export to: {}", path);
355
374
  }
375
+ Commands::Find { args } => {
376
+ if !ruvector_dir.exists() {
377
+ return Err(anyhow!("RuVector not initialized. Run 'init' first."));
378
+ }
379
+ args.execute(&project_path)?;
380
+ }
381
+ Commands::Refs { args } => {
382
+ if !ruvector_dir.exists() {
383
+ return Err(anyhow!("RuVector not initialized. Run 'init' first."));
384
+ }
385
+ args.execute(&project_path)?;
386
+ }
356
387
  }
357
388
 
358
389
  Ok(())