@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,451 @@
1
+ /**
2
+ * MCP tools for version migration "primers".
3
+ *
4
+ * Primers document how to migrate mods/projects from one Minecraft version to another
5
+ * (e.g. NeoForge breaking changes, Forge migration guides).
6
+ *
7
+ * Stored in the `primers` Postgres table.
8
+ * fromDataVersion / toDataVersion are the integer data_version values from mcmeta,
9
+ * enabling numeric range queries without fragile string comparisons.
10
+ */
11
+ import { readFile, writeFile } from "fs/promises";
12
+ import { join } from "path";
13
+ import { getDb } from "../db.js";
14
+ import { CACHE_ROOT, exists, ensureDir } from "../cache.js";
15
+ import { embed, isOllamaAvailable, chunkText } from "../embeddings.js";
16
+ import { upsertPrimerEmbedding, searchPrimersByVector, countUnembedded } from "../repositories/embeddings.js";
17
+ // ── Primer URL security ───────────────────────────────────────────────────────
18
+ const DEFAULT_PRIMER_HOSTS = [
19
+ "github.com", "raw.githubusercontent.com",
20
+ "neoforged.net", "docs.neoforged.net",
21
+ "fabricmc.net", "wiki.fabricmc.net",
22
+ "modrinth.com",
23
+ "curseforge.com",
24
+ "minecraft.wiki",
25
+ "docs.minecraftforge.net", "minecraftforge.net",
26
+ "quiltmc.org", "wiki.quiltmc.org",
27
+ "linuxcafe.net",
28
+ "gist.github.com",
29
+ "gitlab.com",
30
+ "codeberg.org",
31
+ ];
32
+ function getPrimerAllowedHosts() {
33
+ const extra = process.env.MODLENS_PRIMER_ALLOWED_HOSTS;
34
+ const hosts = [...DEFAULT_PRIMER_HOSTS];
35
+ if (extra)
36
+ hosts.push(...extra.split(",").map(h => h.trim()).filter(Boolean));
37
+ return new Set(hosts);
38
+ }
39
+ function validatePrimerUrl(url) {
40
+ // Bypass mode: allow any HTTPS URL
41
+ if (process.env.MODLENS_PRIMER_ALLOW_ANY_HTTPS === "1") {
42
+ let parsed;
43
+ try {
44
+ parsed = new URL(url);
45
+ }
46
+ catch {
47
+ throw new Error(`Invalid primer URL: ${url}`);
48
+ }
49
+ if (parsed.protocol !== "https:")
50
+ throw new Error(`Primer URL must use HTTPS: ${url}`);
51
+ return;
52
+ }
53
+ let parsed;
54
+ try {
55
+ parsed = new URL(url);
56
+ }
57
+ catch {
58
+ throw new Error(`Invalid primer URL: ${url}`);
59
+ }
60
+ if (parsed.protocol !== "https:")
61
+ throw new Error(`Primer URL must use HTTPS: ${url}`);
62
+ const allowed = getPrimerAllowedHosts();
63
+ if (!allowed.has(parsed.hostname) && ![...allowed].some(h => parsed.hostname.endsWith(`.${h}`))) {
64
+ throw new Error(`Primer URL hostname "${parsed.hostname}" not in allowed list. ` +
65
+ `Add it via MODLENS_PRIMER_ALLOWED_HOSTS env var, or set MODLENS_PRIMER_ALLOW_ANY_HTTPS=1 to allow any HTTPS URL.`);
66
+ }
67
+ }
68
+ /** Exported for use in setup wizard. */
69
+ export { DEFAULT_PRIMER_HOSTS };
70
+ // ── Version resolution ────────────────────────────────────────────────────────
71
+ const VERSIONS_CACHE = join(CACHE_ROOT, "mcmeta", "_latest", "summary", "versions", "data.json");
72
+ const VERSIONS_URL = "https://raw.githubusercontent.com/misode/mcmeta/summary/versions/data.json";
73
+ let _versionsCache = null;
74
+ async function getVersions() {
75
+ if (_versionsCache)
76
+ return _versionsCache;
77
+ try {
78
+ if (await exists(VERSIONS_CACHE)) {
79
+ const text = (await readFile(VERSIONS_CACHE)).toString("utf8");
80
+ _versionsCache = JSON.parse(text);
81
+ return _versionsCache;
82
+ }
83
+ }
84
+ catch { /* fall through to fetch */ }
85
+ const res = await fetch(VERSIONS_URL);
86
+ if (!res.ok)
87
+ throw new Error(`Failed to fetch versions: ${res.status}`);
88
+ const data = await res.json();
89
+ await ensureDir(VERSIONS_CACHE);
90
+ await writeFile(VERSIONS_CACHE, JSON.stringify(data));
91
+ _versionsCache = data;
92
+ return data;
93
+ }
94
+ /** Resolve a version string to its integer data_version (null if unknown). */
95
+ async function resolveDataVersion(versionId) {
96
+ try {
97
+ const versions = await getVersions();
98
+ const v = versions.find(v => v.id === versionId);
99
+ return v?.data_version ?? null;
100
+ }
101
+ catch {
102
+ return null;
103
+ }
104
+ }
105
+ // ── Tools ─────────────────────────────────────────────────────────────────────
106
+ /** Ingest one or more primers into the database. */
107
+ export async function ingestPrimer(entries) {
108
+ const results = [];
109
+ for (const e of entries) {
110
+ // Optionally fetch content from URL
111
+ // Validate URL for both storage and fetch
112
+ validatePrimerUrl(e.url);
113
+ let content = e.content;
114
+ if (e.fetchContent && !content) {
115
+ try {
116
+ const res = await fetch(e.url);
117
+ if (res.ok) {
118
+ const text = await res.text();
119
+ // Strip HTML tags for readability (basic)
120
+ content = text.replace(/<[^>]+>/g, " ").replace(/\s+/g, " ").trim().slice(0, 50_000);
121
+ }
122
+ }
123
+ catch { /* ignore fetch errors */ }
124
+ }
125
+ // Resolve numeric data versions
126
+ const [fromDV, toDV] = await Promise.all([
127
+ resolveDataVersion(e.fromVersion),
128
+ resolveDataVersion(e.toVersion),
129
+ ]);
130
+ // Upsert by url
131
+ const db = await getDb();
132
+ const primer = await db.primer.upsert({
133
+ where: { url: e.url },
134
+ create: {
135
+ fromVersion: e.fromVersion,
136
+ toVersion: e.toVersion,
137
+ fromDataVersion: fromDV,
138
+ toDataVersion: toDV,
139
+ modloader: e.modloader ?? "neoforge",
140
+ title: e.title,
141
+ summary: e.summary,
142
+ url: e.url,
143
+ content,
144
+ tags: e.tags ?? [],
145
+ source: e.source ?? "manual",
146
+ },
147
+ update: {
148
+ fromVersion: e.fromVersion,
149
+ toVersion: e.toVersion,
150
+ fromDataVersion: fromDV,
151
+ toDataVersion: toDV,
152
+ modloader: e.modloader ?? "neoforge",
153
+ title: e.title,
154
+ summary: e.summary,
155
+ url: e.url,
156
+ content: content ?? undefined,
157
+ tags: e.tags ?? [],
158
+ },
159
+ });
160
+ results.push({ id: primer.id, title: primer.title, fromVersion: primer.fromVersion, toVersion: primer.toVersion });
161
+ await tryEmbedPrimer(primer.id, primer.title, primer.summary, content);
162
+ }
163
+ return { ingested: results.length, primers: results };
164
+ }
165
+ /** Get a single primer by ID. */
166
+ export async function getPrimer(id) {
167
+ const db = await getDb();
168
+ const primer = await db.primer.findUnique({ where: { id } });
169
+ if (!primer)
170
+ return { found: false, id };
171
+ return primer;
172
+ }
173
+ /**
174
+ * Get primers for a version range.
175
+ * Returns all primers where the primer's version range overlaps with [fromVersion, toVersion].
176
+ * If both data versions are resolvable, uses numeric comparison.
177
+ * Otherwise falls back to exact string match on fromVersion/toVersion.
178
+ */
179
+ export async function getPrimersByVersionRange(fromVersion, toVersion, modloader) {
180
+ const [fromDV, toDV] = await Promise.all([
181
+ resolveDataVersion(fromVersion),
182
+ resolveDataVersion(toVersion),
183
+ ]);
184
+ let where;
185
+ if (fromDV !== null && toDV !== null) {
186
+ // Overlap condition: primer.fromDV <= toDV AND primer.toDV >= fromDV
187
+ where = {
188
+ AND: [
189
+ { fromDataVersion: { lte: toDV } },
190
+ { toDataVersion: { gte: fromDV } },
191
+ ...(modloader ? [{ modloader }] : []),
192
+ ],
193
+ };
194
+ }
195
+ else {
196
+ // Fallback: primers where either bound matches exactly
197
+ where = {
198
+ OR: [
199
+ { fromVersion },
200
+ { toVersion },
201
+ { fromVersion: toVersion },
202
+ { toVersion: fromVersion },
203
+ ],
204
+ ...(modloader ? { modloader } : {}),
205
+ };
206
+ }
207
+ const db = await getDb();
208
+ const primers = await db.primer.findMany({
209
+ where,
210
+ orderBy: [{ fromDataVersion: "asc" }, { fromVersion: "asc" }],
211
+ select: {
212
+ id: true,
213
+ fromVersion: true,
214
+ toVersion: true,
215
+ fromDataVersion: true,
216
+ toDataVersion: true,
217
+ modloader: true,
218
+ title: true,
219
+ summary: true,
220
+ url: true,
221
+ tags: true,
222
+ },
223
+ });
224
+ return {
225
+ queryRange: { fromVersion, toVersion, fromDataVersion: fromDV, toDataVersion: toDV },
226
+ count: primers.length,
227
+ primers,
228
+ };
229
+ }
230
+ /** Search primers using full-text search on title, summary, and content. */
231
+ export async function searchPrimers(query, modloader, fromVersion, toVersion, limit = 20) {
232
+ // Resolve version bounds if provided
233
+ const [fromDV, toDV] = await Promise.all([
234
+ fromVersion ? resolveDataVersion(fromVersion) : Promise.resolve(null),
235
+ toVersion ? resolveDataVersion(toVersion) : Promise.resolve(null),
236
+ ]);
237
+ const versionFilter = [];
238
+ if (fromDV !== null && toDV !== null) {
239
+ versionFilter.push({ fromDataVersion: { lte: toDV } });
240
+ versionFilter.push({ toDataVersion: { gte: fromDV } });
241
+ }
242
+ else if (fromVersion) {
243
+ versionFilter.push({ fromVersion });
244
+ }
245
+ const primers = await (await getDb()).primer.findMany({
246
+ where: {
247
+ AND: [
248
+ {
249
+ OR: [
250
+ { title: { contains: query, mode: "insensitive" } },
251
+ { summary: { contains: query, mode: "insensitive" } },
252
+ { content: { contains: query, mode: "insensitive" } },
253
+ { tags: { has: query } },
254
+ ],
255
+ },
256
+ ...(modloader ? [{ modloader }] : []),
257
+ ...versionFilter,
258
+ ],
259
+ },
260
+ orderBy: [{ fromDataVersion: "asc" }, { fromVersion: "asc" }],
261
+ take: limit,
262
+ select: {
263
+ id: true,
264
+ fromVersion: true,
265
+ toVersion: true,
266
+ modloader: true,
267
+ title: true,
268
+ summary: true,
269
+ url: true,
270
+ tags: true,
271
+ },
272
+ });
273
+ return { query, count: primers.length, primers };
274
+ }
275
+ /** List all primers with optional filters. */
276
+ export async function listPrimers(modloader, limit = 50) {
277
+ const primers = await (await getDb()).primer.findMany({
278
+ where: modloader ? { modloader } : {},
279
+ orderBy: [{ fromDataVersion: "asc" }, { fromVersion: "asc" }],
280
+ take: limit,
281
+ select: {
282
+ id: true,
283
+ fromVersion: true,
284
+ toVersion: true,
285
+ modloader: true,
286
+ title: true,
287
+ summary: true,
288
+ url: true,
289
+ tags: true,
290
+ },
291
+ });
292
+ return { count: primers.length, primers };
293
+ }
294
+ /** Delete a primer by ID. */
295
+ export async function deletePrimer(id) {
296
+ const deleted = await (await getDb()).primer.delete({ where: { id } }).catch(() => null);
297
+ return { deleted: !!deleted, id };
298
+ }
299
+ // ── Default seed data ─────────────────────────────────────────────────────────
300
+ const SEED_PRIMERS = [
301
+ // ── NeoForge migration guides ─────────────────────────────────────────
302
+ {
303
+ fromVersion: "1.20.4",
304
+ toVersion: "1.21.1",
305
+ modloader: "neoforge",
306
+ title: "NeoForge Migration Guide — 1.20.4 to 1.21.x",
307
+ summary: "Official NeoForge migration documentation covering breaking API changes, event system overhauls, registry changes, and data component migration from 1.20.4 through 1.21.1.",
308
+ url: "https://docs.neoforged.net/docs/1.21.x/migrationguide/",
309
+ tags: ["neoforge", "migration", "1.20.4", "1.21.1", "events", "registries"],
310
+ source: "seed",
311
+ },
312
+ {
313
+ fromVersion: "1.20.1",
314
+ toVersion: "1.20.4",
315
+ modloader: "neoforge",
316
+ title: "NeoForge Migration Guide — 1.20.1 to 1.20.4",
317
+ summary: "NeoForge was forked from MinecraftForge during 1.20.1. This guide covers the initial NeoForge migration from Forge including package renames, event system changes, and new capability system.",
318
+ url: "https://docs.neoforged.net/docs/1.20.4/migrationguide/",
319
+ tags: ["neoforge", "migration", "1.20.1", "1.20.4", "forge-fork", "capabilities"],
320
+ source: "seed",
321
+ },
322
+ {
323
+ fromVersion: "1.21.1",
324
+ toVersion: "1.21.5",
325
+ modloader: "neoforge",
326
+ title: "NeoForge Migration Guide — 1.21.1 to 1.21.5",
327
+ summary: "Migration guide covering NeoForge API changes between 1.21.1 and 1.21.5, including inventory, recipe, and rendering API updates.",
328
+ url: "https://docs.neoforged.net/docs/1.21.5/migrationguide/",
329
+ tags: ["neoforge", "migration", "1.21.1", "1.21.5"],
330
+ source: "seed",
331
+ },
332
+ {
333
+ fromVersion: "1.21.5",
334
+ toVersion: "26.1.2",
335
+ modloader: "neoforge",
336
+ title: "NeoForge Migration Guide — 1.21.5 to 26.1.2",
337
+ summary: "Migration guide for the Minecraft version numbering change (1.21.x → 26.x) and corresponding NeoForge API updates.",
338
+ url: "https://docs.neoforged.net/docs/current/migrationguide/",
339
+ tags: ["neoforge", "migration", "1.21.5", "26.1.2", "versioning"],
340
+ source: "seed",
341
+ },
342
+ // ── NeoForge breaking changes page ────────────────────────────────────
343
+ {
344
+ fromVersion: "1.20.1",
345
+ toVersion: "26.1.2",
346
+ modloader: "neoforge",
347
+ title: "NeoForge Documentation — Getting Started",
348
+ summary: "Main NeoForge documentation landing page covering setup, versioning, and links to all migration guides.",
349
+ url: "https://docs.neoforged.net/docs/gettingstarted/",
350
+ tags: ["neoforge", "setup", "docs"],
351
+ source: "seed",
352
+ },
353
+ // ── MinecraftForge primers (pre-NeoForge split) ──────────────────────
354
+ {
355
+ fromVersion: "1.19.4",
356
+ toVersion: "1.20.1",
357
+ modloader: "forge",
358
+ title: "MinecraftForge Migration — 1.19.4 to 1.20.1",
359
+ summary: "MinecraftForge breaking changes from 1.19.4 to 1.20.1 including registry changes, chat changes, and creative tab API overhaul.",
360
+ url: "https://github.com/MinecraftForge/MinecraftForge/blob/1.20.1/Changelog.md",
361
+ tags: ["forge", "migration", "1.19.4", "1.20.1"],
362
+ source: "seed",
363
+ },
364
+ {
365
+ fromVersion: "1.18.2",
366
+ toVersion: "1.19.4",
367
+ modloader: "forge",
368
+ title: "MinecraftForge Migration — 1.18.2 to 1.19.x",
369
+ summary: "MinecraftForge breaking changes for 1.19.x series including the component damage system, fluid API, and rendering changes.",
370
+ url: "https://github.com/MinecraftForge/MinecraftForge/blob/1.19.4/Changelog.md",
371
+ tags: ["forge", "migration", "1.18.2", "1.19.4"],
372
+ source: "seed",
373
+ },
374
+ // ── Fabric migration notes ────────────────────────────────────────────
375
+ {
376
+ fromVersion: "1.20.4",
377
+ toVersion: "1.21.1",
378
+ modloader: "fabric",
379
+ title: "Fabric — Migration Primer 1.20.4 to 1.21.1",
380
+ summary: "Fabric API breaking changes guide for 1.20.4 → 1.21.x covering rendering API updates, item stack changes, and the new item components system.",
381
+ url: "https://fabricmc.net/wiki/tutorial:migration",
382
+ tags: ["fabric", "migration", "1.20.4", "1.21.1"],
383
+ source: "seed",
384
+ },
385
+ // ── NeoForge CHANGELOG ────────────────────────────────────────────────
386
+ {
387
+ fromVersion: "1.20.1",
388
+ toVersion: "26.1.2",
389
+ modloader: "neoforge",
390
+ title: "NeoForge GitHub CHANGELOG",
391
+ summary: "Full NeoForge changelog on GitHub tracking all API additions, removals, and fixes across all supported MC versions.",
392
+ url: "https://github.com/neoforged/NeoForge/blob/main/CHANGELOG.md",
393
+ tags: ["neoforge", "changelog", "all-versions"],
394
+ source: "seed",
395
+ },
396
+ ];
397
+ /** Populate the primers table with known NeoForge/Forge/Fabric migration guides. */
398
+ export async function seedDefaultPrimers() {
399
+ return ingestPrimer(SEED_PRIMERS);
400
+ }
401
+ // ── embedding helpers ─────────────────────────────────────────────────────────
402
+ async function tryEmbedPrimer(id, title, summary, content) {
403
+ if (!await isOllamaAvailable())
404
+ return;
405
+ try {
406
+ // Embed title + summary + first chunk of content
407
+ const parts = [title, summary, content ? chunkText(content, 1500)[0] : undefined].filter(Boolean);
408
+ const vec = await embed(parts.join("\n\n"));
409
+ await upsertPrimerEmbedding(id, vec);
410
+ }
411
+ catch { /* non-fatal */ }
412
+ }
413
+ // ── semantic_search ───────────────────────────────────────────────────────────
414
+ export async function semanticSearchPrimers(query, limit = 10) {
415
+ const vec = await embed(query);
416
+ const rows = await searchPrimersByVector(vec, limit);
417
+ if (!rows.length)
418
+ return { query, semantic: true, count: 0, results: [] };
419
+ const ids = rows.map(r => r.id);
420
+ const primers = await (await getDb()).primer.findMany({
421
+ where: { id: { in: ids } },
422
+ select: { id: true, fromVersion: true, toVersion: true, modloader: true, title: true, summary: true, url: true, tags: true },
423
+ });
424
+ const byId = Object.fromEntries(primers.map(p => [p.id, p]));
425
+ const results = rows.map(r => ({ similarity: Math.round(r.similarity * 1000) / 1000, ...byId[r.id] }));
426
+ return { query, semantic: true, count: results.length, results };
427
+ }
428
+ // ── backfill_embeddings ───────────────────────────────────────────────────────
429
+ export async function backfillPrimerEmbeddings() {
430
+ if (!await isOllamaAvailable()) {
431
+ return { error: "Ollama is not available. Set OLLAMA_URL and ensure Ollama is running." };
432
+ }
433
+ const db = await getDb();
434
+ const rows = await db.primer.findMany({ select: { id: true, title: true, summary: true, content: true } });
435
+ const unembedded = await countUnembedded("primers");
436
+ let done = 0;
437
+ let failed = 0;
438
+ for (const row of rows) {
439
+ try {
440
+ const parts = [row.title, row.summary, row.content ? chunkText(row.content, 1500)[0] : undefined].filter(Boolean);
441
+ const vec = await embed(parts.join("\n\n"));
442
+ await upsertPrimerEmbedding(row.id, vec);
443
+ done++;
444
+ }
445
+ catch {
446
+ failed++;
447
+ }
448
+ }
449
+ return { total: rows.length, wasUnembedded: unembedded, embedded: done, failed };
450
+ }
451
+ //# sourceMappingURL=primers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"primers.js","sourceRoot":"","sources":["../../src/tools/primers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ export type ReportType = "mixin_conflicts" | "tag_conflicts" | "version_conflicts" | "mod_overview" | "gradle_deps" | "pack_compat" | "dep_graph" | "sidedness" | "mod_complexity" | "pack_changelog";
2
+ export declare function generateReport(opts: {
3
+ report: ReportType;
4
+ savePath?: string;
5
+ modId?: string | number;
6
+ loader?: string;
7
+ mcVersion?: string;
8
+ registry?: string;
9
+ minConflicts?: number;
10
+ groupFilter?: string;
11
+ modIdFilter?: string;
12
+ dbIds?: number[];
13
+ oldIds?: number[];
14
+ newIds?: number[];
15
+ }): Promise<{
16
+ markdown: string;
17
+ savedTo?: string;
18
+ }>;
19
+ //# sourceMappingURL=reports.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reports.d.ts","sourceRoot":"","sources":["../../src/tools/reports.ts"],"names":[],"mappings":"AAmTA,MAAM,MAAM,UAAU,GAChB,iBAAiB,GACjB,eAAe,GACf,mBAAmB,GACnB,cAAc,GACd,aAAa,GACb,aAAa,GACb,WAAW,GACX,WAAW,GACX,gBAAgB,GAChB,gBAAgB,CAAC;AA4TvB,wBAAsB,cAAc,CAAC,IAAI,EAAE;IACvC,MAAM,EAAE,UAAU,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAG,MAAM,CAAC;IACtB,WAAW,CAAC,EAAG,MAAM,CAAC;IACtB,KAAK,CAAC,EAAS,MAAM,EAAE,CAAC;IACxB,MAAM,CAAC,EAAQ,MAAM,EAAE,CAAC;IACxB,MAAM,CAAC,EAAQ,MAAM,EAAE,CAAC;CAC3B,GAAG,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAgDlD"}