@creeperhost/modlens-mcp 1.6.0

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 (382) hide show
  1. package/README.md +938 -0
  2. package/dist/access-flags.d.ts +58 -0
  3. package/dist/access-flags.d.ts.map +1 -0
  4. package/dist/access-flags.js +79 -0
  5. package/dist/access-flags.js.map +1 -0
  6. package/dist/access-flags.test.d.ts +2 -0
  7. package/dist/access-flags.test.d.ts.map +1 -0
  8. package/dist/access-flags.test.js +189 -0
  9. package/dist/access-flags.test.js.map +1 -0
  10. package/dist/batch-ingest.d.ts +2 -0
  11. package/dist/batch-ingest.d.ts.map +1 -0
  12. package/dist/batch-ingest.js +54 -0
  13. package/dist/batch-ingest.js.map +1 -0
  14. package/dist/batch-resolve-mixins.d.ts +2 -0
  15. package/dist/batch-resolve-mixins.d.ts.map +1 -0
  16. package/dist/batch-resolve-mixins.js +36 -0
  17. package/dist/batch-resolve-mixins.js.map +1 -0
  18. package/dist/cache.d.ts +16 -0
  19. package/dist/cache.d.ts.map +1 -0
  20. package/dist/cache.js +36 -0
  21. package/dist/cache.js.map +1 -0
  22. package/dist/cli.d.ts +2 -0
  23. package/dist/cli.d.ts.map +1 -0
  24. package/dist/cli.js +1318 -0
  25. package/dist/cli.js.map +1 -0
  26. package/dist/curseforge.d.ts +53 -0
  27. package/dist/curseforge.d.ts.map +1 -0
  28. package/dist/curseforge.js +104 -0
  29. package/dist/curseforge.js.map +1 -0
  30. package/dist/db-backend.d.ts +17 -0
  31. package/dist/db-backend.d.ts.map +1 -0
  32. package/dist/db-backend.js +40 -0
  33. package/dist/db-backend.js.map +1 -0
  34. package/dist/db.d.ts +11 -0
  35. package/dist/db.d.ts.map +1 -0
  36. package/dist/db.js +55 -0
  37. package/dist/db.js.map +1 -0
  38. package/dist/embed-queue.d.ts +12 -0
  39. package/dist/embed-queue.d.ts.map +1 -0
  40. package/dist/embed-queue.js +103 -0
  41. package/dist/embed-queue.js.map +1 -0
  42. package/dist/embeddings.d.ts +21 -0
  43. package/dist/embeddings.d.ts.map +1 -0
  44. package/dist/embeddings.js +55 -0
  45. package/dist/embeddings.js.map +1 -0
  46. package/dist/env-path.d.ts +19 -0
  47. package/dist/env-path.d.ts.map +1 -0
  48. package/dist/env-path.js +40 -0
  49. package/dist/env-path.js.map +1 -0
  50. package/dist/fetch-utils.d.ts +24 -0
  51. package/dist/fetch-utils.d.ts.map +1 -0
  52. package/dist/fetch-utils.js +73 -0
  53. package/dist/fetch-utils.js.map +1 -0
  54. package/dist/fetch-utils.test.d.ts +2 -0
  55. package/dist/fetch-utils.test.d.ts.map +1 -0
  56. package/dist/fetch-utils.test.js +133 -0
  57. package/dist/fetch-utils.test.js.map +1 -0
  58. package/dist/generated/sqlite/browser.d.ts +55 -0
  59. package/dist/generated/sqlite/browser.d.ts.map +1 -0
  60. package/dist/generated/sqlite/browser.js +18 -0
  61. package/dist/generated/sqlite/browser.js.map +1 -0
  62. package/dist/generated/sqlite/client.d.ts +72 -0
  63. package/dist/generated/sqlite/client.d.ts.map +1 -0
  64. package/dist/generated/sqlite/client.js +33 -0
  65. package/dist/generated/sqlite/client.js.map +1 -0
  66. package/dist/generated/sqlite/commonInputTypes.d.ts +387 -0
  67. package/dist/generated/sqlite/commonInputTypes.d.ts.map +1 -0
  68. package/dist/generated/sqlite/commonInputTypes.js +11 -0
  69. package/dist/generated/sqlite/commonInputTypes.js.map +1 -0
  70. package/dist/generated/sqlite/enums.d.ts +2 -0
  71. package/dist/generated/sqlite/enums.d.ts.map +1 -0
  72. package/dist/generated/sqlite/enums.js +11 -0
  73. package/dist/generated/sqlite/enums.js.map +1 -0
  74. package/dist/generated/sqlite/internal/class.d.ts +226 -0
  75. package/dist/generated/sqlite/internal/class.d.ts.map +1 -0
  76. package/dist/generated/sqlite/internal/class.js +84 -0
  77. package/dist/generated/sqlite/internal/class.js.map +1 -0
  78. package/dist/generated/sqlite/internal/prismaNamespace.d.ts +1344 -0
  79. package/dist/generated/sqlite/internal/prismaNamespace.d.ts.map +1 -0
  80. package/dist/generated/sqlite/internal/prismaNamespace.js +220 -0
  81. package/dist/generated/sqlite/internal/prismaNamespace.js.map +1 -0
  82. package/dist/generated/sqlite/internal/prismaNamespaceBrowser.d.ts +204 -0
  83. package/dist/generated/sqlite/internal/prismaNamespaceBrowser.d.ts.map +1 -0
  84. package/dist/generated/sqlite/internal/prismaNamespaceBrowser.js +191 -0
  85. package/dist/generated/sqlite/internal/prismaNamespaceBrowser.js.map +1 -0
  86. package/dist/generated/sqlite/models/DocEntry.d.ts +1223 -0
  87. package/dist/generated/sqlite/models/DocEntry.d.ts.map +1 -0
  88. package/dist/generated/sqlite/models/DocEntry.js +2 -0
  89. package/dist/generated/sqlite/models/DocEntry.js.map +1 -0
  90. package/dist/generated/sqlite/models/McSourceFile.d.ts +1289 -0
  91. package/dist/generated/sqlite/models/McSourceFile.d.ts.map +1 -0
  92. package/dist/generated/sqlite/models/McSourceFile.js +2 -0
  93. package/dist/generated/sqlite/models/McSourceFile.js.map +1 -0
  94. package/dist/generated/sqlite/models/McVersion.d.ts +1315 -0
  95. package/dist/generated/sqlite/models/McVersion.d.ts.map +1 -0
  96. package/dist/generated/sqlite/models/McVersion.js +2 -0
  97. package/dist/generated/sqlite/models/McVersion.js.map +1 -0
  98. package/dist/generated/sqlite/models/McVersionDiff.d.ts +1061 -0
  99. package/dist/generated/sqlite/models/McVersionDiff.d.ts.map +1 -0
  100. package/dist/generated/sqlite/models/McVersionDiff.js +2 -0
  101. package/dist/generated/sqlite/models/McVersionDiff.js.map +1 -0
  102. package/dist/generated/sqlite/models/Mod.d.ts +2396 -0
  103. package/dist/generated/sqlite/models/Mod.d.ts.map +1 -0
  104. package/dist/generated/sqlite/models/Mod.js +2 -0
  105. package/dist/generated/sqlite/models/Mod.js.map +1 -0
  106. package/dist/generated/sqlite/models/ModClass.d.ts +1254 -0
  107. package/dist/generated/sqlite/models/ModClass.d.ts.map +1 -0
  108. package/dist/generated/sqlite/models/ModClass.js +2 -0
  109. package/dist/generated/sqlite/models/ModClass.js.map +1 -0
  110. package/dist/generated/sqlite/models/ModSourceFile.d.ts +1283 -0
  111. package/dist/generated/sqlite/models/ModSourceFile.d.ts.map +1 -0
  112. package/dist/generated/sqlite/models/ModSourceFile.js +2 -0
  113. package/dist/generated/sqlite/models/ModSourceFile.js.map +1 -0
  114. package/dist/generated/sqlite/models/ModTag.d.ts +1278 -0
  115. package/dist/generated/sqlite/models/ModTag.d.ts.map +1 -0
  116. package/dist/generated/sqlite/models/ModTag.js +2 -0
  117. package/dist/generated/sqlite/models/ModTag.js.map +1 -0
  118. package/dist/generated/sqlite/models/ModVersionDiff.d.ts +1073 -0
  119. package/dist/generated/sqlite/models/ModVersionDiff.d.ts.map +1 -0
  120. package/dist/generated/sqlite/models/ModVersionDiff.js +2 -0
  121. package/dist/generated/sqlite/models/ModVersionDiff.js.map +1 -0
  122. package/dist/generated/sqlite/models/Primer.d.ts +1319 -0
  123. package/dist/generated/sqlite/models/Primer.d.ts.map +1 -0
  124. package/dist/generated/sqlite/models/Primer.js +2 -0
  125. package/dist/generated/sqlite/models/Primer.js.map +1 -0
  126. package/dist/generated/sqlite/models.d.ts +12 -0
  127. package/dist/generated/sqlite/models.d.ts.map +1 -0
  128. package/dist/generated/sqlite/models.js +2 -0
  129. package/dist/generated/sqlite/models.js.map +1 -0
  130. package/dist/jar.d.ts +7 -0
  131. package/dist/jar.d.ts.map +1 -0
  132. package/dist/jar.js +52 -0
  133. package/dist/jar.js.map +1 -0
  134. package/dist/java-tools.d.ts +46 -0
  135. package/dist/java-tools.d.ts.map +1 -0
  136. package/dist/java-tools.js +263 -0
  137. package/dist/java-tools.js.map +1 -0
  138. package/dist/launcher.d.ts +3 -0
  139. package/dist/launcher.d.ts.map +1 -0
  140. package/dist/launcher.js +105 -0
  141. package/dist/launcher.js.map +1 -0
  142. package/dist/mappings.d.ts +95 -0
  143. package/dist/mappings.d.ts.map +1 -0
  144. package/dist/mappings.js +1094 -0
  145. package/dist/mappings.js.map +1 -0
  146. package/dist/mappings.test.d.ts +2 -0
  147. package/dist/mappings.test.d.ts.map +1 -0
  148. package/dist/mappings.test.js +161 -0
  149. package/dist/mappings.test.js.map +1 -0
  150. package/dist/minecraft.d.ts +21 -0
  151. package/dist/minecraft.d.ts.map +1 -0
  152. package/dist/minecraft.js +70 -0
  153. package/dist/minecraft.js.map +1 -0
  154. package/dist/modpacks-ch.d.ts +224 -0
  155. package/dist/modpacks-ch.d.ts.map +1 -0
  156. package/dist/modpacks-ch.js +146 -0
  157. package/dist/modpacks-ch.js.map +1 -0
  158. package/dist/modrinth.d.ts +67 -0
  159. package/dist/modrinth.d.ts.map +1 -0
  160. package/dist/modrinth.js +88 -0
  161. package/dist/modrinth.js.map +1 -0
  162. package/dist/platform-adapter.d.ts +23 -0
  163. package/dist/platform-adapter.d.ts.map +1 -0
  164. package/dist/platform-adapter.js +2 -0
  165. package/dist/platform-adapter.js.map +1 -0
  166. package/dist/platform.d.ts +47 -0
  167. package/dist/platform.d.ts.map +1 -0
  168. package/dist/platform.js +175 -0
  169. package/dist/platform.js.map +1 -0
  170. package/dist/processor.d.ts +51 -0
  171. package/dist/processor.d.ts.map +1 -0
  172. package/dist/processor.js +655 -0
  173. package/dist/processor.js.map +1 -0
  174. package/dist/processor.test.d.ts +2 -0
  175. package/dist/processor.test.d.ts.map +1 -0
  176. package/dist/processor.test.js +629 -0
  177. package/dist/processor.test.js.map +1 -0
  178. package/dist/repositories/embeddings-sqlite.d.ts +38 -0
  179. package/dist/repositories/embeddings-sqlite.d.ts.map +1 -0
  180. package/dist/repositories/embeddings-sqlite.js +208 -0
  181. package/dist/repositories/embeddings-sqlite.js.map +1 -0
  182. package/dist/repositories/embeddings.d.ts +40 -0
  183. package/dist/repositories/embeddings.d.ts.map +1 -0
  184. package/dist/repositories/embeddings.js +136 -0
  185. package/dist/repositories/embeddings.js.map +1 -0
  186. package/dist/repositories/index.d.ts +2 -0
  187. package/dist/repositories/index.d.ts.map +1 -0
  188. package/dist/repositories/index.js +15 -0
  189. package/dist/repositories/index.js.map +1 -0
  190. package/dist/repositories/mcVersion.d.ts +16 -0
  191. package/dist/repositories/mcVersion.d.ts.map +1 -0
  192. package/dist/repositories/mcVersion.js +52 -0
  193. package/dist/repositories/mcVersion.js.map +1 -0
  194. package/dist/repositories/mod.d.ts +241 -0
  195. package/dist/repositories/mod.d.ts.map +1 -0
  196. package/dist/repositories/mod.js +342 -0
  197. package/dist/repositories/mod.js.map +1 -0
  198. package/dist/repositories/packs.d.ts +44 -0
  199. package/dist/repositories/packs.d.ts.map +1 -0
  200. package/dist/repositories/packs.js +138 -0
  201. package/dist/repositories/packs.js.map +1 -0
  202. package/dist/search-adapter.d.ts +34 -0
  203. package/dist/search-adapter.d.ts.map +1 -0
  204. package/dist/search-adapter.js +195 -0
  205. package/dist/search-adapter.js.map +1 -0
  206. package/dist/search.d.ts +6 -0
  207. package/dist/search.d.ts.map +1 -0
  208. package/dist/search.js +54 -0
  209. package/dist/search.js.map +1 -0
  210. package/dist/search.test.d.ts +2 -0
  211. package/dist/search.test.d.ts.map +1 -0
  212. package/dist/search.test.js +71 -0
  213. package/dist/search.test.js.map +1 -0
  214. package/dist/security.d.ts +98 -0
  215. package/dist/security.d.ts.map +1 -0
  216. package/dist/security.js +446 -0
  217. package/dist/security.js.map +1 -0
  218. package/dist/security.test.d.ts +2 -0
  219. package/dist/security.test.d.ts.map +1 -0
  220. package/dist/security.test.js +687 -0
  221. package/dist/security.test.js.map +1 -0
  222. package/dist/server.d.ts +2 -0
  223. package/dist/server.d.ts.map +1 -0
  224. package/dist/server.js +1465 -0
  225. package/dist/server.js.map +1 -0
  226. package/dist/setup.d.ts +2 -0
  227. package/dist/setup.d.ts.map +1 -0
  228. package/dist/setup.js +1113 -0
  229. package/dist/setup.js.map +1 -0
  230. package/dist/tools/bytecode.d.ts +129 -0
  231. package/dist/tools/bytecode.d.ts.map +1 -0
  232. package/dist/tools/bytecode.js +679 -0
  233. package/dist/tools/bytecode.js.map +1 -0
  234. package/dist/tools/catalog.d.ts +54 -0
  235. package/dist/tools/catalog.d.ts.map +1 -0
  236. package/dist/tools/catalog.js +249 -0
  237. package/dist/tools/catalog.js.map +1 -0
  238. package/dist/tools/compat-check.d.ts +23 -0
  239. package/dist/tools/compat-check.d.ts.map +1 -0
  240. package/dist/tools/compat-check.js +250 -0
  241. package/dist/tools/compat-check.js.map +1 -0
  242. package/dist/tools/compat-check.test.d.ts +2 -0
  243. package/dist/tools/compat-check.test.d.ts.map +1 -0
  244. package/dist/tools/compat-check.test.js +179 -0
  245. package/dist/tools/compat-check.test.js.map +1 -0
  246. package/dist/tools/diagnostics.d.ts +10 -0
  247. package/dist/tools/diagnostics.d.ts.map +1 -0
  248. package/dist/tools/diagnostics.js +133 -0
  249. package/dist/tools/diagnostics.js.map +1 -0
  250. package/dist/tools/diagnostics.test.d.ts +2 -0
  251. package/dist/tools/diagnostics.test.d.ts.map +1 -0
  252. package/dist/tools/diagnostics.test.js +168 -0
  253. package/dist/tools/diagnostics.test.js.map +1 -0
  254. package/dist/tools/docs.d.ts +19 -0
  255. package/dist/tools/docs.d.ts.map +1 -0
  256. package/dist/tools/docs.js +230 -0
  257. package/dist/tools/docs.js.map +1 -0
  258. package/dist/tools/embed-registry.d.ts +125 -0
  259. package/dist/tools/embed-registry.d.ts.map +1 -0
  260. package/dist/tools/embed-registry.js +560 -0
  261. package/dist/tools/embed-registry.js.map +1 -0
  262. package/dist/tools/gradle.d.ts +16 -0
  263. package/dist/tools/gradle.d.ts.map +1 -0
  264. package/dist/tools/gradle.js +182 -0
  265. package/dist/tools/gradle.js.map +1 -0
  266. package/dist/tools/graphify.d.ts +144 -0
  267. package/dist/tools/graphify.d.ts.map +1 -0
  268. package/dist/tools/graphify.js +798 -0
  269. package/dist/tools/graphify.js.map +1 -0
  270. package/dist/tools/graphify.test.d.ts +2 -0
  271. package/dist/tools/graphify.test.d.ts.map +1 -0
  272. package/dist/tools/graphify.test.js +39 -0
  273. package/dist/tools/graphify.test.js.map +1 -0
  274. package/dist/tools/ingest.d.ts +85 -0
  275. package/dist/tools/ingest.d.ts.map +1 -0
  276. package/dist/tools/ingest.js +477 -0
  277. package/dist/tools/ingest.js.map +1 -0
  278. package/dist/tools/ingest.test.d.ts +2 -0
  279. package/dist/tools/ingest.test.d.ts.map +1 -0
  280. package/dist/tools/ingest.test.js +340 -0
  281. package/dist/tools/ingest.test.js.map +1 -0
  282. package/dist/tools/kubejs.d.ts +37 -0
  283. package/dist/tools/kubejs.d.ts.map +1 -0
  284. package/dist/tools/kubejs.js +245 -0
  285. package/dist/tools/kubejs.js.map +1 -0
  286. package/dist/tools/mappings.d.ts +17 -0
  287. package/dist/tools/mappings.d.ts.map +1 -0
  288. package/dist/tools/mappings.js +85 -0
  289. package/dist/tools/mappings.js.map +1 -0
  290. package/dist/tools/mc-fts.d.ts +101 -0
  291. package/dist/tools/mc-fts.d.ts.map +1 -0
  292. package/dist/tools/mc-fts.js +279 -0
  293. package/dist/tools/mc-fts.js.map +1 -0
  294. package/dist/tools/mcmeta.d.ts +41 -0
  295. package/dist/tools/mcmeta.d.ts.map +1 -0
  296. package/dist/tools/mcmeta.js +365 -0
  297. package/dist/tools/mcmeta.js.map +1 -0
  298. package/dist/tools/mixin-scan.d.ts +113 -0
  299. package/dist/tools/mixin-scan.d.ts.map +1 -0
  300. package/dist/tools/mixin-scan.js +433 -0
  301. package/dist/tools/mixin-scan.js.map +1 -0
  302. package/dist/tools/mod-data.d.ts +83 -0
  303. package/dist/tools/mod-data.d.ts.map +1 -0
  304. package/dist/tools/mod-data.js +630 -0
  305. package/dist/tools/mod-data.js.map +1 -0
  306. package/dist/tools/mod-tags.d.ts +59 -0
  307. package/dist/tools/mod-tags.d.ts.map +1 -0
  308. package/dist/tools/mod-tags.js +279 -0
  309. package/dist/tools/mod-tags.js.map +1 -0
  310. package/dist/tools/mod-tags.test.d.ts +2 -0
  311. package/dist/tools/mod-tags.test.d.ts.map +1 -0
  312. package/dist/tools/mod-tags.test.js +75 -0
  313. package/dist/tools/mod-tags.test.js.map +1 -0
  314. package/dist/tools/modpacks-ch.d.ts +257 -0
  315. package/dist/tools/modpacks-ch.d.ts.map +1 -0
  316. package/dist/tools/modpacks-ch.js +516 -0
  317. package/dist/tools/modpacks-ch.js.map +1 -0
  318. package/dist/tools/packtools.d.ts +113 -0
  319. package/dist/tools/packtools.d.ts.map +1 -0
  320. package/dist/tools/packtools.js +809 -0
  321. package/dist/tools/packtools.js.map +1 -0
  322. package/dist/tools/packtools.test.d.ts +2 -0
  323. package/dist/tools/packtools.test.d.ts.map +1 -0
  324. package/dist/tools/packtools.test.js +99 -0
  325. package/dist/tools/packtools.test.js.map +1 -0
  326. package/dist/tools/platform.d.ts +68 -0
  327. package/dist/tools/platform.d.ts.map +1 -0
  328. package/dist/tools/platform.js +452 -0
  329. package/dist/tools/platform.js.map +1 -0
  330. package/dist/tools/primers.d.ts +36 -0
  331. package/dist/tools/primers.d.ts.map +1 -0
  332. package/dist/tools/primers.js +451 -0
  333. package/dist/tools/primers.js.map +1 -0
  334. package/dist/tools/reports.d.ts +19 -0
  335. package/dist/tools/reports.d.ts.map +1 -0
  336. package/dist/tools/reports.js +573 -0
  337. package/dist/tools/reports.js.map +1 -0
  338. package/dist/tools/source.d.ts +10 -0
  339. package/dist/tools/source.d.ts.map +1 -0
  340. package/dist/tools/source.js +101 -0
  341. package/dist/tools/source.js.map +1 -0
  342. package/dist/tools/vanilla-data.d.ts +127 -0
  343. package/dist/tools/vanilla-data.d.ts.map +1 -0
  344. package/dist/tools/vanilla-data.js +824 -0
  345. package/dist/tools/vanilla-data.js.map +1 -0
  346. package/dist/tools/vanilla.d.ts +171 -0
  347. package/dist/tools/vanilla.d.ts.map +1 -0
  348. package/dist/tools/vanilla.js +612 -0
  349. package/dist/tools/vanilla.js.map +1 -0
  350. package/dist/tools/version-diff.d.ts +113 -0
  351. package/dist/tools/version-diff.d.ts.map +1 -0
  352. package/dist/tools/version-diff.js +519 -0
  353. package/dist/tools/version-diff.js.map +1 -0
  354. package/dist/tools/version-diff.test.d.ts +2 -0
  355. package/dist/tools/version-diff.test.d.ts.map +1 -0
  356. package/dist/tools/version-diff.test.js +102 -0
  357. package/dist/tools/version-diff.test.js.map +1 -0
  358. package/dist/validate.d.ts +19 -0
  359. package/dist/validate.d.ts.map +1 -0
  360. package/dist/validate.js +54 -0
  361. package/dist/validate.js.map +1 -0
  362. package/dist/validate.test.d.ts +2 -0
  363. package/dist/validate.test.d.ts.map +1 -0
  364. package/dist/validate.test.js +73 -0
  365. package/dist/validate.test.js.map +1 -0
  366. package/package.json +62 -0
  367. package/prisma/backends/schema.sqlite.prisma +215 -0
  368. package/prisma/backends/template.db +0 -0
  369. package/prisma/schema.prisma +303 -0
  370. package/scripts/backup.mjs +151 -0
  371. package/scripts/build-template-db.mjs +38 -0
  372. package/scripts/check-atm10.mjs +27 -0
  373. package/scripts/check-sync.mjs +13 -0
  374. package/scripts/create-fts-index.mjs +50 -0
  375. package/scripts/enable-pgvector.mjs +90 -0
  376. package/scripts/enable-sqlite-vec.mjs +158 -0
  377. package/scripts/migrate-backend.mjs +188 -0
  378. package/scripts/migrate-embed-provenance.mjs +80 -0
  379. package/scripts/migrate-metadata-source.mjs +62 -0
  380. package/scripts/migrate-mod-source-files.mjs +67 -0
  381. package/scripts/post-update.mjs +77 -0
  382. package/scripts/verify-atm10.mjs +63 -0
@@ -0,0 +1,477 @@
1
+ import { parseJar, computeHashes, METADATA_QUALITY } from "../processor.js";
2
+ import { modrinthPlatformAdapter } from "../modrinth.js";
3
+ import { curseforgePlatformAdapter } from "../curseforge.js";
4
+ import { decompileJarJiJ, isDecompileDone } from "../java-tools.js";
5
+ import { indexJar } from "../java-tools.js";
6
+ import { paths } from "../cache.js";
7
+ import { join } from "path";
8
+ import { rm } from "fs/promises";
9
+ import { normalizeJarPath, assertJarPath } from "../security.js";
10
+ import { isOllamaAvailable } from "../embeddings.js";
11
+ import { enqueueModEmbed } from "../embed-queue.js";
12
+ import { buildModGraph, ensureGraphify } from "./graphify.js";
13
+ import { findModByJarPath, findModByDupKey, findModBySha512, createMod, updateMod, findModById, listAllMods, countModClasses, createModClasses, findModByModId, deleteModById, listModsSlim, } from "../repositories/mod.js";
14
+ import { getDb } from "../db.js";
15
+ import { validateDbId } from "../validate.js";
16
+ // ── Platform adapter registry ─────────────────────────────────────────────────
17
+ const PLATFORM_ADAPTERS = [
18
+ modrinthPlatformAdapter,
19
+ curseforgePlatformAdapter,
20
+ ];
21
+ async function lookupPlatforms(sha512, murmur2) {
22
+ const hashes = { sha512, murmur2 };
23
+ const results = await Promise.allSettled(PLATFORM_ADAPTERS.map(a => a.lookup(hashes)));
24
+ return results
25
+ .filter((r) => r.status === "fulfilled")
26
+ .map((r) => r.value)
27
+ .filter((v) => v !== null);
28
+ }
29
+ // ── Main ingest ───────────────────────────────────────────────────────────────
30
+ export async function ingestMod(jarPath, skipSource = false, replace = false) {
31
+ jarPath = normalizeJarPath(jarPath);
32
+ const existing = await findModByJarPath(jarPath);
33
+ if (existing) {
34
+ // Re-parse to check if the JAR now has higher-quality metadata
35
+ const oldSource = (existing.metadataSource ?? "filename");
36
+ const oldQuality = METADATA_QUALITY[oldSource] ?? 0;
37
+ if (oldQuality < 3) { // already at max quality? skip re-parse
38
+ try {
39
+ const manifest = await parseJar(jarPath);
40
+ const newQuality = METADATA_QUALITY[manifest.metadataSource] ?? 0;
41
+ if (newQuality > oldQuality) {
42
+ const updated = await updateMod(existing.id, {
43
+ modId: manifest.modId,
44
+ displayName: manifest.displayName,
45
+ version: manifest.version,
46
+ mcVersion: manifest.mcVersion,
47
+ loader: manifest.loader,
48
+ hasMixins: manifest.hasMixins,
49
+ hasAt: manifest.hasAt,
50
+ hasAw: manifest.hasAw,
51
+ mixinConfigs: manifest.mixinConfigs,
52
+ mixinTargets: manifest.mixinTargets,
53
+ atEntries: manifest.atEntries,
54
+ awEntries: manifest.awEntries,
55
+ dependencies: manifest.dependencies,
56
+ metadata: { description: manifest.description, sourceUrl: manifest.sourceUrl },
57
+ metadataSource: manifest.metadataSource,
58
+ });
59
+ return { status: "metadata_refreshed", mod: updated, previousSource: oldSource };
60
+ }
61
+ }
62
+ catch { /* re-parse failed, keep existing */ }
63
+ }
64
+ return { status: "already_ingested", mod: existing };
65
+ }
66
+ const manifest = await parseJar(jarPath);
67
+ const hashes = await computeHashes(jarPath);
68
+ // Guard: same modId+version+mcVersion+loader already ingested from a different path
69
+ const duplicate = await findModByDupKey(manifest.modId, manifest.version, manifest.mcVersion, manifest.loader);
70
+ if (duplicate) {
71
+ if (!replace) {
72
+ return {
73
+ status: "duplicate_version",
74
+ message: `${manifest.modId} ${manifest.version} (${manifest.loader} / ${manifest.mcVersion}) is already ingested from a different path.`,
75
+ existingJarPath: duplicate.jarPath,
76
+ existingDbId: duplicate.id,
77
+ };
78
+ }
79
+ await deleteModById(duplicate.id);
80
+ }
81
+ // In replace mode: delete any older version of this modId before inserting
82
+ if (replace) {
83
+ const older = await findModByModId(manifest.modId);
84
+ if (older)
85
+ await deleteModById(older.id);
86
+ }
87
+ // Guard: same file content (sha512) already ingested regardless of path
88
+ if (hashes.sha512) {
89
+ const bySha = await findModBySha512(hashes.sha512);
90
+ if (bySha) {
91
+ return {
92
+ status: "duplicate_hash",
93
+ message: `This JAR has the same SHA-512 as already-ingested mod '${bySha.modId}' (db id ${bySha.id}). Files are identical.`,
94
+ existingJarPath: bySha.jarPath,
95
+ existingDbId: bySha.id,
96
+ };
97
+ }
98
+ }
99
+ const mod = await createMod({
100
+ modId: manifest.modId,
101
+ displayName: manifest.displayName,
102
+ version: manifest.version,
103
+ mcVersion: manifest.mcVersion,
104
+ loader: manifest.loader,
105
+ jarPath,
106
+ sha256: hashes.sha256,
107
+ sha512: hashes.sha512,
108
+ murmur2: hashes.murmur2,
109
+ hasMixins: manifest.hasMixins,
110
+ hasAt: manifest.hasAt,
111
+ hasAw: manifest.hasAw,
112
+ mixinConfigs: manifest.mixinConfigs,
113
+ mixinTargets: manifest.mixinTargets,
114
+ atEntries: manifest.atEntries,
115
+ awEntries: manifest.awEntries,
116
+ dependencies: manifest.dependencies,
117
+ metadata: { description: manifest.description, sourceUrl: manifest.sourceUrl },
118
+ metadataSource: manifest.metadataSource,
119
+ });
120
+ if (!skipSource) {
121
+ const hits = await lookupPlatforms(hashes.sha512, hashes.murmur2);
122
+ let merged = { ...mod.metadata };
123
+ for (const hit of hits) {
124
+ if (hit.platform === "modrinth") {
125
+ merged = {
126
+ ...merged,
127
+ modrinthSlug: hit.slug,
128
+ sourceUrl: merged.sourceUrl ?? hit.sourceUrl,
129
+ };
130
+ await updateMod(mod.id, {
131
+ modrinthId: hit.projectId,
132
+ metadata: merged,
133
+ });
134
+ }
135
+ else {
136
+ merged = {
137
+ ...merged,
138
+ cfSlug: hit.slug,
139
+ sourceUrl: merged.sourceUrl ?? hit.sourceUrl,
140
+ };
141
+ await updateMod(mod.id, {
142
+ curseforgeId: hit.projectId,
143
+ metadata: merged,
144
+ });
145
+ }
146
+ }
147
+ }
148
+ // Index classes in background (non-blocking)
149
+ indexJar(jarPath)
150
+ .then(async (index) => {
151
+ const classes = Object.values(index.classes);
152
+ if (!classes.length)
153
+ return;
154
+ await createModClasses(classes.map((c) => ({
155
+ modId: mod.id,
156
+ className: c.name,
157
+ superClass: c.superName || null,
158
+ interfaces: c.interfaces,
159
+ accessFlags: c.accessFlags,
160
+ })));
161
+ })
162
+ .catch(() => { });
163
+ return { status: "ingested", mod: await findModById(mod.id) };
164
+ }
165
+ /**
166
+ * Ingest all JAR files in a directory. Skips already-ingested files.
167
+ * Returns a per-file summary plus totals.
168
+ */
169
+ export async function batchIngest(directory, skipSource = true, indexClasses = false, replace = false) {
170
+ const { readdir } = await import("fs/promises");
171
+ const { join, resolve } = await import("path");
172
+ const absDir = resolve(normalizeJarPath(directory));
173
+ let entries;
174
+ try {
175
+ entries = await readdir(absDir);
176
+ }
177
+ catch (e) {
178
+ throw new Error(`Cannot read directory: ${absDir} — ${e instanceof Error ? e.message : e}`);
179
+ }
180
+ const jars = entries.filter((f) => f.endsWith(".jar")).sort();
181
+ if (jars.length === 0)
182
+ return { directory: absDir, total: 0, ingested: 0, skipped: 0, failed: 0, results: [] };
183
+ let ingested = 0, skipped = 0, failed = 0;
184
+ const results = [];
185
+ for (const jar of jars) {
186
+ const jarPath = join(absDir, jar);
187
+ try {
188
+ const result = await ingestMod(jarPath, skipSource, replace);
189
+ if (result.status === "already_ingested" || result.status === "duplicate_version" || result.status === "duplicate_hash") {
190
+ skipped++;
191
+ results.push({ file: jar, status: result.status });
192
+ }
193
+ else {
194
+ ingested++;
195
+ const mod = result.mod;
196
+ results.push({ file: jar, status: "ingested", modId: mod?.modId, version: mod?.version, loader: mod?.loader });
197
+ if (indexClasses && mod?.id) {
198
+ await reindexClasses(mod.id).catch(() => { });
199
+ }
200
+ }
201
+ }
202
+ catch (e) {
203
+ failed++;
204
+ results.push({ file: jar, status: `error: ${(e instanceof Error ? e.message : String(e)).slice(0, 120)}` });
205
+ }
206
+ }
207
+ return { directory: absDir, total: jars.length, ingested, skipped, failed, results };
208
+ }
209
+ // ── Batch refresh degraded metadata ───────────────────────────────────────────
210
+ export async function refreshDegradedMetadata(opts) {
211
+ const db = await getDb();
212
+ const where = {
213
+ metadataSource: { in: ["filename", "@Mod annotation"] },
214
+ };
215
+ if (opts?.loader)
216
+ where.loader = opts.loader;
217
+ if (opts?.mcVersion)
218
+ where.mcVersion = { contains: opts.mcVersion };
219
+ const mods = await db.mod.findMany({ where, orderBy: { modId: "asc" } });
220
+ let refreshed = 0, unchanged = 0, failed = 0;
221
+ const results = [];
222
+ for (const mod of mods) {
223
+ try {
224
+ assertJarPath(mod.jarPath);
225
+ const oldSource = (mod.metadataSource ?? "filename");
226
+ const oldQuality = METADATA_QUALITY[oldSource] ?? 0;
227
+ const manifest = await parseJar(mod.jarPath);
228
+ const newQuality = METADATA_QUALITY[manifest.metadataSource] ?? 0;
229
+ if (newQuality > oldQuality) {
230
+ await updateMod(mod.id, {
231
+ modId: manifest.modId,
232
+ displayName: manifest.displayName,
233
+ version: manifest.version,
234
+ mcVersion: manifest.mcVersion,
235
+ loader: manifest.loader,
236
+ hasMixins: manifest.hasMixins,
237
+ hasAt: manifest.hasAt,
238
+ hasAw: manifest.hasAw,
239
+ mixinConfigs: manifest.mixinConfigs,
240
+ mixinTargets: manifest.mixinTargets,
241
+ atEntries: manifest.atEntries,
242
+ awEntries: manifest.awEntries,
243
+ dependencies: manifest.dependencies,
244
+ metadata: { description: manifest.description, sourceUrl: manifest.sourceUrl },
245
+ metadataSource: manifest.metadataSource,
246
+ });
247
+ refreshed++;
248
+ results.push({ modId: mod.modId, dbId: mod.id, status: "refreshed", previousSource: oldSource, newSource: manifest.metadataSource });
249
+ }
250
+ else {
251
+ unchanged++;
252
+ results.push({ modId: mod.modId, dbId: mod.id, status: "unchanged" });
253
+ }
254
+ }
255
+ catch (e) {
256
+ failed++;
257
+ results.push({ modId: mod.modId, dbId: mod.id, status: `error: ${(e instanceof Error ? e.message : String(e)).slice(0, 120)}` });
258
+ }
259
+ }
260
+ return { total: mods.length, refreshed, unchanged, failed, results };
261
+ }
262
+ export async function reindexClasses(dbId) {
263
+ if (dbId !== undefined)
264
+ validateDbId(dbId);
265
+ const mods = dbId !== undefined
266
+ ? await findModById(dbId).then((m) => (m ? [m] : []))
267
+ : await listAllMods();
268
+ let indexed = 0, failed = 0, skipped = 0;
269
+ for (const mod of mods) {
270
+ const existing = await countModClasses(mod.id);
271
+ if (existing > 0) {
272
+ skipped++;
273
+ continue;
274
+ }
275
+ try {
276
+ assertJarPath(mod.jarPath);
277
+ const index = await indexJar(mod.jarPath);
278
+ const classes = Object.values(index.classes);
279
+ if (!classes.length) {
280
+ skipped++;
281
+ continue;
282
+ }
283
+ await createModClasses(classes.map((c) => ({
284
+ modId: mod.id,
285
+ className: c.name,
286
+ superClass: c.superName || null,
287
+ interfaces: c.interfaces,
288
+ accessFlags: c.accessFlags,
289
+ })));
290
+ indexed++;
291
+ }
292
+ catch {
293
+ failed++;
294
+ }
295
+ }
296
+ return { indexed, failed, skipped };
297
+ }
298
+ export async function decompileMod(dbId) {
299
+ const mod = await findModById(dbId);
300
+ if (!mod)
301
+ throw new Error(`Mod #${dbId} not found`);
302
+ assertJarPath(mod.jarPath);
303
+ const outDir = join(paths.decompiled(mod.modId, mod.version));
304
+ // Check if already done
305
+ const state = await isDecompileDone(outDir);
306
+ if (state === "done") {
307
+ await updateMod(dbId, { decompiled: true, decompPath: outDir });
308
+ return { status: "done", outDir, message: "Already decompiled. Use get_mod_source to browse." };
309
+ }
310
+ if (state === "running") {
311
+ return { status: "running", outDir, message: "Decompile already in progress. Poll decompile_mod_status to check." };
312
+ }
313
+ // Kick off background decompile — returns in ~300ms
314
+ // decompileJarJiJ handles Jar-in-Jar bundles automatically (Fabric META-INF/jars/ + NeoForge META-INF/jarjar/)
315
+ await decompileJarJiJ(mod.jarPath, outDir);
316
+ return {
317
+ status: "started",
318
+ outDir,
319
+ message: "Vineflower launched in background. Call decompile_mod_status with the same dbId to check progress. This avoids MCP timeout.",
320
+ };
321
+ }
322
+ /** Resolve an auto-behavior flag: explicit param > env var > default (true). */
323
+ export function resolveAuto(explicit, envKey) {
324
+ if (explicit !== undefined)
325
+ return explicit;
326
+ const envVal = process.env[envKey];
327
+ if (envVal === "0" || envVal === "false")
328
+ return false;
329
+ return true; // on by default
330
+ }
331
+ export async function decompileModStatus(dbId, opts) {
332
+ const mod = await findModById(dbId);
333
+ if (!mod)
334
+ throw new Error(`Mod #${dbId} not found`);
335
+ const outDir = join(paths.decompiled(mod.modId, mod.version));
336
+ const state = await isDecompileDone(outDir);
337
+ if (state === "done") {
338
+ // Mark DB as done if not already, then auto-queue semantic embedding
339
+ if (!mod.decompiled) {
340
+ await updateMod(dbId, { decompiled: true, decompPath: outDir });
341
+ // Fire-and-forget: enqueue for background semantic indexing if Ollama is available
342
+ if (resolveAuto(opts?.autoEmbed, "MODLENS_AUTO_EMBED")) {
343
+ isOllamaAvailable().then(available => {
344
+ if (available)
345
+ enqueueModEmbed(dbId);
346
+ }).catch(() => { });
347
+ }
348
+ // Fire-and-forget: auto-build knowledge graph if graphify is available
349
+ if (resolveAuto(opts?.autoGraph, "MODLENS_AUTO_GRAPH")) {
350
+ ensureGraphify().then(() => {
351
+ buildModGraph(dbId).catch(() => { });
352
+ }).catch(() => { });
353
+ }
354
+ }
355
+ return { status: "done", outDir, message: "Decompile complete. Use get_mod_source to browse." };
356
+ }
357
+ if (state === "error") {
358
+ return { status: "error", outDir, message: "Vineflower exited with an error. Check the .decompile.error sentinel for exit code." };
359
+ }
360
+ if (state === "running") {
361
+ return { status: "running", outDir, message: "Still decompiling..." };
362
+ }
363
+ return { status: "not_started", outDir, message: "No decompile job found. Call decompile_mod first." };
364
+ }
365
+ // ── Delete mod ────────────────────────────────────────────────────────────────
366
+ export async function deleteModFull(dbId) {
367
+ const mod = await findModById(dbId);
368
+ if (!mod)
369
+ throw new Error(`Mod #${dbId} not found`);
370
+ const cleaned = [];
371
+ // Remove decompiled source directory
372
+ if (mod.decompPath) {
373
+ try {
374
+ await rm(mod.decompPath, { recursive: true, force: true });
375
+ cleaned.push(`decompiled: ${mod.decompPath}`);
376
+ }
377
+ catch { /* already gone */ }
378
+ }
379
+ // Remove graph directory
380
+ if (mod.graphPath) {
381
+ try {
382
+ // graphPath points to graphify-out/, remove the parent (graphs/{modId}/{version}/)
383
+ const graphParent = join(mod.graphPath, "..");
384
+ await rm(graphParent, { recursive: true, force: true });
385
+ cleaned.push(`graph: ${mod.graphPath}`);
386
+ }
387
+ catch { /* already gone */ }
388
+ }
389
+ // Remove cached version-diff rows referencing this mod
390
+ const db = await (await import("../db.js")).getDb();
391
+ const diffCount = await db.modVersionDiff.deleteMany({
392
+ where: { OR: [{ modDbIdA: dbId }, { modDbIdB: dbId }] },
393
+ });
394
+ if (diffCount.count > 0)
395
+ cleaned.push(`version_diffs: ${diffCount.count}`);
396
+ // Remove source files (FTS/semantic index)
397
+ const srcCount = await db.modSourceFile.deleteMany({ where: { modId: dbId } });
398
+ if (srcCount.count > 0)
399
+ cleaned.push(`source_files: ${srcCount.count}`);
400
+ // deleteModById handles ModTag, ModClass, and Mod rows
401
+ await deleteModById(dbId);
402
+ cleaned.push("db_rows: mod, classes, tags");
403
+ return { deleted: true, modId: mod.modId, cleaned };
404
+ }
405
+ // ── Batch decompile ───────────────────────────────────────────────────────────
406
+ export async function batchDecompileMods(opts) {
407
+ const concurrency = opts?.concurrency ?? 4;
408
+ const mods = await listModsSlim({ decompiled: false });
409
+ let started = 0, alreadyDone = 0, errors = 0;
410
+ // Batch auto-behaviors default OFF (unlike single-mod which defaults ON).
411
+ // Uses MODLENS_BATCH_AUTO_EMBED / MODLENS_BATCH_AUTO_GRAPH with explicit param override.
412
+ const doAutoEmbed = opts?.autoEmbed ?? (process.env.MODLENS_BATCH_AUTO_EMBED === "1" || process.env.MODLENS_BATCH_AUTO_EMBED === "true");
413
+ const doAutoGraph = opts?.autoGraph ?? (process.env.MODLENS_BATCH_AUTO_GRAPH === "1" || process.env.MODLENS_BATCH_AUTO_GRAPH === "true");
414
+ function triggerPostDecompile(dbId) {
415
+ if (doAutoEmbed) {
416
+ isOllamaAvailable().then(ok => { if (ok)
417
+ enqueueModEmbed(dbId); }).catch(() => { });
418
+ }
419
+ if (doAutoGraph) {
420
+ ensureGraphify().then(() => { buildModGraph(dbId).catch(() => { }); }).catch(() => { });
421
+ }
422
+ }
423
+ async function processOne(mod) {
424
+ if (!mod.jarPath) {
425
+ errors++;
426
+ return;
427
+ }
428
+ try {
429
+ assertJarPath(mod.jarPath);
430
+ }
431
+ catch {
432
+ errors++;
433
+ return;
434
+ }
435
+ const outDir = paths.decompiled(mod.modId, mod.version);
436
+ const state = await isDecompileDone(outDir);
437
+ if (state === "done") {
438
+ await updateMod(mod.id, { decompiled: true, decompPath: outDir });
439
+ triggerPostDecompile(mod.id);
440
+ alreadyDone++;
441
+ return;
442
+ }
443
+ if (state === "running") {
444
+ alreadyDone++;
445
+ return;
446
+ }
447
+ try {
448
+ await decompileJarJiJ(mod.jarPath, outDir);
449
+ // Wait for Vineflower to finish (up to 15 minutes per mod)
450
+ for (let i = 0; i < 450; i++) {
451
+ await new Promise(r => setTimeout(r, 2000));
452
+ const s = await isDecompileDone(outDir);
453
+ if (s === "done") {
454
+ await updateMod(mod.id, { decompiled: true, decompPath: outDir });
455
+ triggerPostDecompile(mod.id);
456
+ started++;
457
+ return;
458
+ }
459
+ if (s === "error") {
460
+ errors++;
461
+ return;
462
+ }
463
+ }
464
+ errors++; // timeout
465
+ }
466
+ catch {
467
+ errors++;
468
+ }
469
+ }
470
+ // Run with concurrency — process in batches of N
471
+ for (let i = 0; i < mods.length; i += concurrency) {
472
+ const batch = mods.slice(i, i + concurrency);
473
+ await Promise.all(batch.map(m => processOne(m)));
474
+ }
475
+ return { started, alreadyDone, errors, total: mods.length };
476
+ }
477
+ //# sourceMappingURL=ingest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ingest.js","sourceRoot":"","sources":["../../src/tools/ingest.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ingest.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ingest.test.d.ts","sourceRoot":"","sources":["../../src/tools/ingest.test.ts"],"names":[],"mappings":""}