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
@@ -7,14 +7,24 @@ use regex::Regex;
7
7
  use std::sync::Arc;
8
8
  use std::sync::RwLock;
9
9
  use sha2::{Sha256, Digest};
10
+ use rusqlite::params;
10
11
 
11
12
  use crate::embeddings::EmbeddingsManager;
12
13
  use crate::search_engine::{SearchEngine, IndexMetadata};
13
14
  use crate::sqlite_store::SqliteStore;
15
+ use crate::extractors::{Extractor, ExtractionResult, Entity, Reference};
16
+ use crate::extractors::rust::RustExtractor;
17
+ use crate::extractors::typescript::TypeScriptExtractor;
18
+ use crate::extractors::text_fallback::TextFallbackExtractor;
19
+ use crate::store_v2::{StoreV2, Entity as StoreEntity, Reference as StoreReference, TypeUsage};
20
+ use crate::schema_v2::{EntityKind, RefKind, Visibility};
21
+ use local_ruvector::paths::{get_ruvector_dir, get_database_path, get_v1_index_dir};
14
22
 
15
23
  #[derive(Debug)]
16
24
  pub struct IndexStats {
17
25
  pub files_processed: usize,
26
+ pub entities_extracted: usize,
27
+ pub references_extracted: usize,
18
28
  pub embeddings_generated: usize,
19
29
  pub errors: Vec<String>,
20
30
  }
@@ -23,6 +33,8 @@ impl Default for IndexStats {
23
33
  fn default() -> Self {
24
34
  Self {
25
35
  files_processed: 0,
36
+ entities_extracted: 0,
37
+ references_extracted: 0,
26
38
  embeddings_generated: 0,
27
39
  errors: Vec::new(),
28
40
  }
@@ -31,7 +43,7 @@ impl Default for IndexStats {
31
43
 
32
44
  pub struct IndexCommand {
33
45
  project_dir: PathBuf,
34
- source_path: PathBuf, // Path to walk for files (can differ from project_dir)
46
+ source_path: PathBuf,
35
47
  index_path: PathBuf,
36
48
  file_types: Vec<String>,
37
49
  patterns: Option<Vec<String>>,
@@ -39,6 +51,10 @@ pub struct IndexCommand {
39
51
  embeddings_manager: EmbeddingsManager,
40
52
  search_engine: SearchEngine,
41
53
  store: SqliteStore,
54
+ store_v2: StoreV2,
55
+ rust_extractor: RustExtractor,
56
+ typescript_extractor: TypeScriptExtractor,
57
+ text_fallback_extractor: TextFallbackExtractor,
42
58
  }
43
59
 
44
60
  impl IndexCommand {
@@ -48,20 +64,20 @@ impl IndexCommand {
48
64
  file_types: Vec<String>,
49
65
  patterns: Option<Vec<String>>,
50
66
  force: bool,
51
- ) -> Self {
52
- let index_path = project_dir.join(".ruvector");
53
- let embeddings_manager = EmbeddingsManager::new(&index_path).unwrap();
54
- let search_engine = SearchEngine::new(project_dir).unwrap();
55
- let store = SqliteStore::new(&index_path.join("index.db")).unwrap();
67
+ ) -> Result<Self> {
68
+ let index_path = get_ruvector_dir()?;
69
+ let embeddings_manager = EmbeddingsManager::new(&index_path)?;
70
+ let search_engine = SearchEngine::new(&index_path)?;
71
+ let store = SqliteStore::new(&index_path.join("index.db"))?;
72
+ let store_v2 = StoreV2::new(&get_database_path()?)?;
56
73
 
57
- // Use path argument for file collection, defaulting to project_dir if path is empty
58
74
  let source_path = if path.as_os_str().is_empty() || path == Path::new(".") {
59
75
  project_dir.to_path_buf()
60
76
  } else {
61
77
  path.to_path_buf()
62
78
  };
63
79
 
64
- Self {
80
+ Ok(Self {
65
81
  project_dir: project_dir.to_path_buf(),
66
82
  source_path,
67
83
  index_path,
@@ -71,7 +87,11 @@ impl IndexCommand {
71
87
  embeddings_manager,
72
88
  search_engine,
73
89
  store,
74
- }
90
+ store_v2,
91
+ rust_extractor: RustExtractor::new()?,
92
+ typescript_extractor: TypeScriptExtractor::new()?,
93
+ text_fallback_extractor: TextFallbackExtractor::new()?,
94
+ })
75
95
  }
76
96
 
77
97
  pub fn execute(&self) -> Result<IndexStats> {
@@ -81,17 +101,15 @@ impl IndexCommand {
81
101
  info!("Patterns: {:?}", patterns);
82
102
  }
83
103
 
84
- // Initialize components
85
104
  self.initialize()?;
86
105
 
87
- // Walk directory and collect files
88
106
  let files = self.collect_files()?;
89
107
 
90
- // Process files
91
108
  let stats = self.process_files(files)?;
92
109
 
93
- info!("Index complete: {} files, {} embeddings",
94
- stats.files_processed, stats.embeddings_generated);
110
+ info!("Index complete: {} files, {} entities, {} references, {} embeddings",
111
+ stats.files_processed, stats.entities_extracted,
112
+ stats.references_extracted, stats.embeddings_generated);
95
113
 
96
114
  Ok(stats)
97
115
  }
@@ -99,17 +117,26 @@ impl IndexCommand {
99
117
  fn initialize(&self) -> Result<()> {
100
118
  info!("Initializing index components");
101
119
 
102
- // Create index directory
103
120
  fs::create_dir_all(&self.index_path)
104
121
  .context("Failed to create index directory")?;
105
122
 
106
- // Initialize search engine
107
123
  let mut search_engine = self.search_engine.duplicate()?;
108
124
  search_engine.load_or_create()?;
109
125
 
110
- // Initialize database
111
126
  self.store.initialize()?;
112
127
 
128
+ // Initialize Schema V2 tables (entities, refs, etc.)
129
+ crate::schema_v2::SchemaV2::initialize(&self.store_v2.conn)?;
130
+
131
+ self.store_v2.conn.execute(
132
+ "CREATE TABLE IF NOT EXISTS file_hashes (
133
+ file_path TEXT PRIMARY KEY,
134
+ file_hash TEXT NOT NULL,
135
+ indexed_at INTEGER NOT NULL
136
+ )",
137
+ []
138
+ )?;
139
+
113
140
  info!("Components initialized");
114
141
  Ok(())
115
142
  }
@@ -121,34 +148,30 @@ impl IndexCommand {
121
148
 
122
149
  let walker = WalkDir::new(&self.source_path)
123
150
  .into_iter()
124
- .filter_entry(|e| !Self::is_hidden(e))
151
+ .filter_entry(|e| {
152
+ let path = e.path();
153
+ let name = e.file_name().to_string_lossy();
154
+
155
+ // Exclude build artifacts, dependencies, and temporary files
156
+ // Allow .claude and other important hidden folders
157
+ match name.as_ref() {
158
+ "node_modules" | "target" | "dist" | "build" | ".git" | ".artifacts" => false,
159
+ _ => true
160
+ }
161
+ })
125
162
  .filter_map(|e| e.ok())
126
163
  .filter(|e| {
127
- // Skip directories
128
164
  if e.file_type().is_dir() {
129
165
  return false;
130
166
  }
131
167
 
132
- // Skip .ruvector directory
133
168
  if e.path().starts_with(&self.index_path) {
134
169
  return false;
135
170
  }
136
171
 
137
- // Skip node_modules, target, dist, build directories
138
- let path_str = e.path().to_string_lossy();
139
- if path_str.contains("/node_modules/") ||
140
- path_str.contains("/target/") ||
141
- path_str.contains("/dist/") ||
142
- path_str.contains("/build/") {
143
- return false;
144
- }
145
-
146
- // Check file extension
147
- if let Some(ext) = e.path().extension() {
148
- self.file_types.contains(&ext.to_string_lossy().to_string())
149
- } else {
150
- false
151
- }
172
+ // Index ALL files regardless of extension
173
+ // File type metadata is captured during processing
174
+ true
152
175
  });
153
176
 
154
177
  for entry in walker {
@@ -163,11 +186,9 @@ impl IndexCommand {
163
186
  entry.file_name()
164
187
  .to_str()
165
188
  .map(|s| {
166
- // Allow .claude directory (contains agents, skills, commands, hooks)
167
189
  if s == ".claude" {
168
190
  return false;
169
191
  }
170
- // Skip other hidden directories (like .git, .ruvector, etc.)
171
192
  s.starts_with('.')
172
193
  })
173
194
  .unwrap_or(false)
@@ -177,8 +198,9 @@ impl IndexCommand {
177
198
  let stats = Arc::new(RwLock::new(IndexStats::default()));
178
199
  let errors = Arc::new(RwLock::new(Vec::new()));
179
200
 
180
- info!("Processing {} files", files.len());
201
+ info!("Processing {} files (parallel extraction, sequential DB writes)", files.len());
181
202
 
203
+ // Process in chunks for parallel extraction with sequential DB writes
182
204
  for file_path in files {
183
205
  debug!("Processing: {}", file_path.display());
184
206
 
@@ -189,11 +211,13 @@ impl IndexCommand {
189
211
  }
190
212
  }
191
213
 
192
- let stats_guard = stats.write().unwrap();
214
+ let stats_guard = stats.read().unwrap();
193
215
  let errors_guard = errors.read().unwrap();
194
216
 
195
217
  let final_stats = IndexStats {
196
218
  files_processed: stats_guard.files_processed,
219
+ entities_extracted: stats_guard.entities_extracted,
220
+ references_extracted: stats_guard.references_extracted,
197
221
  embeddings_generated: stats_guard.embeddings_generated,
198
222
  errors: errors_guard.clone(),
199
223
  };
@@ -207,102 +231,234 @@ impl IndexCommand {
207
231
  stats: &Arc<RwLock<IndexStats>>,
208
232
  errors: &Arc<RwLock<Vec<String>>>,
209
233
  ) -> Result<()> {
210
- // Read file content
234
+ let file_hash = self.calculate_file_hash(file_path)?;
235
+
236
+ if !self.force && self.is_file_indexed(file_path, &file_hash)? {
237
+ debug!("Skipping already indexed file: {}", file_path.display());
238
+ return Ok(());
239
+ }
240
+
211
241
  let content = fs::read_to_string(file_path)
212
242
  .with_context(|| format!("Failed to read file: {}", file_path.display()))?;
213
243
 
214
- // Extract patterns
215
- let patterns = self.extract_patterns(&content, file_path)?;
244
+ let extraction_result = self.process_ast_extraction(file_path, &content)?;
216
245
 
217
- if patterns.is_empty() {
218
- debug!("No patterns found in {}", file_path.display());
246
+ if extraction_result.entities.is_empty() {
247
+ debug!("No entities found in {}", file_path.display());
219
248
  return Ok(());
220
249
  }
221
250
 
222
- // Generate embeddings for patterns
223
- let embeddings = self.embeddings_manager.generate_embeddings(&patterns)?;
251
+ let entity_ids = self.store_entities(file_path, &extraction_result.entities)?;
252
+ self.store_references(file_path, &extraction_result.references, &entity_ids)?;
253
+ self.store_type_usage(file_path, &extraction_result.entities, &entity_ids)?;
254
+
255
+ let embeddings = self.generate_entity_embeddings(&extraction_result.entities)?;
256
+
257
+ // Store embeddings in entity_embeddings table
258
+ for (entity_id, embedding) in entity_ids.iter().zip(embeddings.iter()) {
259
+ self.store_v2.store_embedding(*entity_id, embedding, "text-embedding-3-small")?;
260
+ }
224
261
 
225
- // Update stats
226
262
  {
227
263
  let mut s = stats.write().unwrap();
228
264
  s.files_processed += 1;
265
+ s.entities_extracted += extraction_result.entities.len();
266
+ s.references_extracted += extraction_result.references.len();
229
267
  s.embeddings_generated += embeddings.len();
230
268
  }
231
269
 
232
- // Store in search engine
233
- self.store_patterns(file_path, patterns, embeddings)?;
270
+ self.mark_file_indexed(file_path, &file_hash)?;
234
271
 
235
272
  Ok(())
236
273
  }
237
274
 
238
- fn extract_patterns(&self, content: &str, file_path: &Path) -> Result<Vec<String>> {
239
- let mut patterns = Vec::new();
275
+ fn process_ast_extraction(&self, file_path: &Path, content: &str) -> Result<ExtractionResult> {
276
+ let language = self.detect_language(file_path)?;
277
+
278
+ let result = match language.as_str() {
279
+ "rust" => {
280
+ let mut extractor = self.rust_extractor.clone();
281
+ extractor.extract(&file_path.to_string_lossy(), content)?
282
+ },
283
+ "typescript" | "javascript" => {
284
+ let mut extractor = self.typescript_extractor.clone();
285
+ extractor.extract(&file_path.to_string_lossy(), content)?
286
+ },
287
+ "text" => {
288
+ // Use text fallback extractor for non-code files
289
+ let mut extractor = self.text_fallback_extractor.clone();
290
+ extractor.extract(&file_path.to_string_lossy(), content)?
291
+ },
292
+ _ => {
293
+ // Try text fallback for unknown types
294
+ let mut extractor = self.text_fallback_extractor.clone();
295
+ extractor.extract(&file_path.to_string_lossy(), content)?
296
+ }
297
+ };
240
298
 
241
- // Extract lines as patterns
242
- for (line_num, line) in content.lines().enumerate() {
243
- let trimmed = line.trim();
244
-
245
- // Skip empty lines and comments
246
- if trimmed.is_empty() || trimmed.starts_with("//") || trimmed.starts_with('#') {
247
- continue;
299
+ Ok(result)
300
+ }
301
+
302
+ fn detect_language(&self, file_path: &Path) -> Result<String> {
303
+ if let Some(ext) = file_path.extension() {
304
+ match ext.to_string_lossy().as_ref() {
305
+ "rs" => Ok("rust".to_string()),
306
+ "ts" => Ok("typescript".to_string()),
307
+ "js" => Ok("javascript".to_string()),
308
+ "tsx" => Ok("typescript".to_string()),
309
+ "jsx" => Ok("javascript".to_string()),
310
+ // Text-based file types
311
+ "json" | "yaml" | "yml" | "md" | "markdown" | "sh" | "bash" | "txt" | "config" | "conf" | "env" => {
312
+ Ok("text".to_string())
313
+ },
314
+ _ => Ok("text".to_string()), // Default to text fallback for unknown types
248
315
  }
316
+ } else {
317
+ Ok("text".to_string())
318
+ }
319
+ }
249
320
 
250
- // Create pattern with context
251
- let pattern = format!("{}:{}:{}",
252
- file_path.file_name().unwrap().to_string_lossy(),
253
- line_num + 1,
254
- trimmed);
321
+ fn store_entities(&self, file_path: &Path, entities: &[Entity]) -> Result<Vec<i64>> {
322
+ let mut entity_ids = Vec::new();
323
+
324
+ for entity in entities {
325
+ let store_entity = StoreEntity {
326
+ id: 0,
327
+ kind: self.convert_entity_kind(&entity.kind),
328
+ name: entity.name.clone(),
329
+ signature: Some(entity.signature.clone()),
330
+ visibility: self.convert_visibility(&entity.visibility),
331
+ parent_id: None,
332
+ file_path: file_path.to_string_lossy().to_string(),
333
+ line_number: entity.line as i64,
334
+ column_number: Some(entity.column as i64),
335
+ doc_comment: None,
336
+ attributes: None,
337
+ metadata: Some(serde_json::to_string(&entity.metadata)?),
338
+ created_at: chrono::Utc::now(),
339
+ updated_at: chrono::Utc::now(),
340
+ };
255
341
 
256
- patterns.push(pattern);
342
+ let id = self.store_v2.insert_entity(&store_entity)?;
343
+ entity_ids.push(id);
257
344
  }
345
+
346
+ Ok(entity_ids)
347
+ }
348
+
349
+ fn store_references(&self, file_path: &Path, references: &[Reference], entity_ids: &[i64]) -> Result<()> {
350
+ for (reference, &entity_id) in references.iter().zip(entity_ids.iter()) {
351
+ let store_reference = StoreReference {
352
+ id: 0,
353
+ source_entity_id: entity_id,
354
+ target_entity_id: 0,
355
+ ref_kind: self.convert_ref_kind(&reference.ref_kind),
356
+ file_path: file_path.to_string_lossy().to_string(),
357
+ line_number: reference.line as i64,
358
+ column_number: Some(reference.column as i64),
359
+ context: Some(serde_json::to_string(&reference.metadata)?),
360
+ created_at: chrono::Utc::now(),
361
+ };
362
+
363
+ self.store_v2.insert_reference(&store_reference)?;
364
+ }
365
+
366
+ Ok(())
367
+ }
258
368
 
259
- // If specific patterns are requested, filter
260
- if let Some(ref target_patterns) = self.patterns {
261
- let regexes: Vec<Regex> = target_patterns
262
- .iter()
263
- .filter_map(|p| Regex::new(p).ok())
264
- .collect();
265
-
266
- if !regexes.is_empty() {
267
- patterns = patterns.into_iter()
268
- .filter(|p| regexes.iter().any(|r| r.is_match(p)))
269
- .collect();
369
+ fn store_type_usage(&self, file_path: &Path, entities: &[Entity], entity_ids: &[i64]) -> Result<()> {
370
+ for (entity, &entity_id) in entities.iter().zip(entity_ids.iter()) {
371
+ if let Some(type_info) = entity.metadata.get("type") {
372
+ let type_usage = TypeUsage {
373
+ id: 0,
374
+ entity_id,
375
+ type_name: type_info.clone(),
376
+ usage_kind: "annotation".to_string(),
377
+ file_path: file_path.to_string_lossy().to_string(),
378
+ line_number: entity.line as i64,
379
+ created_at: chrono::Utc::now(),
380
+ };
381
+
382
+ self.store_v2.insert_type_usage(&type_usage)?;
270
383
  }
271
384
  }
385
+
386
+ Ok(())
387
+ }
272
388
 
273
- Ok(patterns)
389
+ fn generate_entity_embeddings(&self, entities: &[Entity]) -> Result<Vec<Vec<f32>>> {
390
+ let texts: Vec<String> = entities.iter()
391
+ .map(|e| format!("{}:{}:{}", e.kind.as_str(), e.name, e.signature))
392
+ .collect();
393
+
394
+ self.embeddings_manager.generate_embeddings(&texts)
274
395
  }
275
396
 
276
- fn store_patterns(
277
- &self,
278
- file_path: &Path,
279
- patterns: Vec<String>,
280
- embeddings: Vec<Vec<f32>>,
281
- ) -> Result<()> {
282
- let file_hash = self.calculate_file_hash(file_path)?;
397
+ fn convert_entity_kind(&self, kind: &crate::extractors::EntityKind) -> EntityKind {
398
+ match kind {
399
+ crate::extractors::EntityKind::Function => EntityKind::Function,
400
+ crate::extractors::EntityKind::Method => EntityKind::Method,
401
+ crate::extractors::EntityKind::Constructor => EntityKind::Constructor,
402
+ crate::extractors::EntityKind::Getter => EntityKind::Getter,
403
+ crate::extractors::EntityKind::Setter => EntityKind::Setter,
404
+ crate::extractors::EntityKind::Class => EntityKind::Class,
405
+ crate::extractors::EntityKind::Interface => EntityKind::Interface,
406
+ crate::extractors::EntityKind::Struct => EntityKind::Struct,
407
+ crate::extractors::EntityKind::Enum => EntityKind::Enum,
408
+ crate::extractors::EntityKind::Trait => EntityKind::Trait,
409
+ crate::extractors::EntityKind::TypeAlias => EntityKind::TypeAlias,
410
+ crate::extractors::EntityKind::Module => EntityKind::Module,
411
+ crate::extractors::EntityKind::Namespace => EntityKind::Namespace,
412
+ crate::extractors::EntityKind::Variable => EntityKind::Variable,
413
+ crate::extractors::EntityKind::Constant => EntityKind::Constant,
414
+ crate::extractors::EntityKind::Parameter => EntityKind::Parameter,
415
+ crate::extractors::EntityKind::Import => EntityKind::Import,
416
+ }
417
+ }
283
418
 
284
- for (i, pattern) in patterns.into_iter().enumerate() {
285
- let embedding = embeddings.get(i).ok_or_else(|| anyhow!("Missing embedding for pattern"))?;
286
-
287
- let metadata = IndexMetadata {
288
- path: file_path.to_string_lossy().to_string(),
289
- pattern: pattern.clone(),
290
- line_number: None, // We'll extract this from the pattern
291
- context: None,
292
- snippet: None,
293
- file_hash: file_hash.clone(),
294
- indexed_at: std::time::SystemTime::now()
295
- .duration_since(std::time::UNIX_EPOCH)
296
- .unwrap()
297
- .as_secs(),
298
- };
419
+ fn convert_visibility(&self, visibility: &crate::extractors::Visibility) -> Visibility {
420
+ match visibility {
421
+ crate::extractors::Visibility::Public => Visibility::Public,
422
+ crate::extractors::Visibility::Private => Visibility::Private,
423
+ crate::extractors::Visibility::Protected => Visibility::Protected,
424
+ crate::extractors::Visibility::Internal => Visibility::Internal,
425
+ crate::extractors::Visibility::FilePrivate => Visibility::FilePrivate,
426
+ }
427
+ }
299
428
 
300
- // Store in search engine
301
- // Note: We'll need to modify SearchEngine to handle this
302
- // For now, just store in database
303
- self.store.store_embedding(&pattern, embedding, &metadata)?;
429
+ fn convert_ref_kind(&self, ref_kind: &crate::extractors::RefKind) -> RefKind {
430
+ match ref_kind {
431
+ crate::extractors::RefKind::Calls => RefKind::Calls,
432
+ crate::extractors::RefKind::Extends => RefKind::Extends,
433
+ crate::extractors::RefKind::Implements => RefKind::Implements,
434
+ crate::extractors::RefKind::Imports => RefKind::Imports,
435
+ crate::extractors::RefKind::Uses => RefKind::Uses,
436
+ crate::extractors::RefKind::Instantiates => RefKind::Instantiates,
437
+ crate::extractors::RefKind::Overrides => RefKind::Overrides,
438
+ crate::extractors::RefKind::Reads => RefKind::Reads,
439
+ crate::extractors::RefKind::Writes => RefKind::Writes,
304
440
  }
441
+ }
305
442
 
443
+ fn is_file_indexed(&self, file_path: &Path, file_hash: &str) -> Result<bool> {
444
+ let query = "SELECT COUNT(*) FROM file_hashes WHERE file_path = ? AND file_hash = ?";
445
+ let mut stmt = self.store_v2.conn.prepare(query)?;
446
+ let count: i64 = stmt.query_row(
447
+ params![file_path.to_string_lossy(), file_hash],
448
+ |row| row.get(0)
449
+ )?;
450
+ Ok(count > 0)
451
+ }
452
+
453
+ fn mark_file_indexed(&self, file_path: &Path, file_hash: &str) -> Result<()> {
454
+ self.store_v2.conn.execute(
455
+ "INSERT OR REPLACE INTO file_hashes (file_path, file_hash, indexed_at) VALUES (?1, ?2, ?3)",
456
+ params![
457
+ file_path.to_string_lossy(),
458
+ file_hash,
459
+ chrono::Utc::now().timestamp()
460
+ ]
461
+ )?;
306
462
  Ok(())
307
463
  }
308
464
 
@@ -323,4 +479,4 @@ impl IndexCommand {
323
479
 
324
480
  Ok(format!("{:x}", hasher.finalize()))
325
481
  }
326
- }
482
+ }