mlx-bun 0.4.0 → 1.0.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 (601) hide show
  1. package/README.md +1453 -88
  2. package/THIRD_PARTY_NOTICES.md +882 -0
  3. package/bin/mlx-bun.convert.mjs +4 -0
  4. package/bin/mlx-bun.fuse.mjs +4 -0
  5. package/bin/mlx-bun.generate.mjs +4 -0
  6. package/bin/mlx-bun.lora.mjs +4 -0
  7. package/bin/mlx-bun.mjs +13 -21
  8. package/bin/mlx-bun.server.mjs +4 -0
  9. package/bin/mlx-bun.upload.mjs +4 -0
  10. package/dist/web/app.js +9584 -0
  11. package/package.json +50 -53
  12. package/src/cli/ane-install.ts +76 -0
  13. package/src/cli/args.ts +179 -0
  14. package/src/cli/engine-entry.ts +68 -0
  15. package/src/cli/inference.ts +214 -0
  16. package/src/cli/job-entry.ts +97 -0
  17. package/src/cli/library-host.ts +117 -0
  18. package/src/cli/main.ts +57 -0
  19. package/src/cli/memory-engine.ts +163 -0
  20. package/src/cli/memory.ts +36 -0
  21. package/src/cli/mlx-lm-aliases.ts +309 -0
  22. package/src/cli/model-choice.ts +33 -0
  23. package/src/cli/model-selection.ts +84 -0
  24. package/src/cli/module-host.ts +11 -0
  25. package/src/cli/module-verbs.ts +50 -0
  26. package/src/cli/numerical-policy.ts +12 -0
  27. package/src/cli/perplexity.ts +89 -0
  28. package/src/cli/serve-host.ts +423 -0
  29. package/src/cli/serve-isolated.ts +217 -0
  30. package/src/cli/serve-options.ts +106 -0
  31. package/src/cli/serve-state.ts +205 -0
  32. package/src/cli/serve.ts +500 -0
  33. package/src/cli/served-model-host.ts +102 -0
  34. package/src/cli/server-entry.ts +148 -0
  35. package/src/cli/serving-unit.ts +177 -0
  36. package/src/{tui.ts → cli/terminal.ts} +13 -8
  37. package/src/cli/worker-adapters.ts +34 -0
  38. package/src/cli/worker-entry.ts +272 -0
  39. package/src/cli/worker-unit.ts +179 -0
  40. package/src/engine/adapter-operation.ts +26 -0
  41. package/src/engine/cache-services.ts +114 -0
  42. package/src/engine/completion.ts +39 -0
  43. package/src/engine/generation-gateway.ts +358 -0
  44. package/src/engine/index.ts +59 -0
  45. package/src/engine/kv-budget.ts +120 -0
  46. package/src/engine/media-preparation.ts +232 -0
  47. package/src/engine/model-binding.ts +24 -0
  48. package/src/engine/model-host.ts +513 -0
  49. package/src/engine/model-serving.ts +89 -0
  50. package/src/{serve → engine}/preparation.ts +10 -8
  51. package/src/{serve → engine}/session-completion-engine.ts +6 -6
  52. package/src/engine/telemetry.ts +109 -0
  53. package/src/hub/downloads.ts +116 -0
  54. package/src/jobs/db.ts +16 -7
  55. package/src/jobs/events.ts +29 -0
  56. package/src/jobs/executable.ts +5 -0
  57. package/src/jobs/host.ts +51 -0
  58. package/src/jobs/in-process.ts +55 -0
  59. package/src/{contracts/jobs.ts → jobs/protocol.ts} +7 -9
  60. package/src/jobs/runner.ts +150 -231
  61. package/src/jobs/service.ts +75 -0
  62. package/src/jobs/sse.ts +59 -23
  63. package/src/jobs/worker-memory.ts +46 -0
  64. package/src/jobs/worker-process.ts +163 -0
  65. package/src/jobs/worker-supervisor.ts +258 -0
  66. package/src/modules.ts +58 -0
  67. package/src/publishing/catalog-hub.ts +18 -0
  68. package/src/publishing/credentials.ts +31 -0
  69. package/src/publishing/upload.ts +37 -0
  70. package/src/residency/leased-adapters.ts +21 -0
  71. package/src/residency/local-records.ts +16 -0
  72. package/src/residency/model-residency.ts +405 -0
  73. package/src/residency/record-index.ts +28 -0
  74. package/src/residency/resident-estimate.ts +50 -0
  75. package/src/{anthropic.ts → server/anthropic.ts} +3 -81
  76. package/src/server/cache-routes.ts +36 -0
  77. package/src/{serve → server}/chat-request.ts +12 -10
  78. package/src/{serve → server}/chat-stage.ts +27 -22
  79. package/src/{client.ts → server/client.ts} +28 -2
  80. package/src/{serve → server}/completion-executor.ts +42 -42
  81. package/src/server/decision-body.ts +55 -0
  82. package/src/server/decision-routes.ts +134 -0
  83. package/src/server/decision-wire.ts +228 -0
  84. package/src/{serve → server}/discovery-routes.ts +42 -83
  85. package/src/server/generated-token-history.ts +57 -0
  86. package/src/{serve → server}/http.ts +25 -13
  87. package/src/{serve → server}/inference-request.ts +5 -5
  88. package/src/server/job-routes.ts +20 -0
  89. package/src/server/media-prompt.ts +63 -0
  90. package/src/server/memory-completion-client.ts +46 -0
  91. package/src/server/model-routes.ts +192 -0
  92. package/src/{serve → server}/openai-wire.ts +3 -2
  93. package/src/{serve → server}/pipeline.ts +1 -1
  94. package/src/server/prompt-builder.ts +13 -0
  95. package/src/server/prompt-contracts.ts +17 -0
  96. package/src/server/proxy-routes.ts +187 -0
  97. package/src/server/publishing-routes.ts +41 -0
  98. package/src/{serve → server}/request-plan.ts +8 -8
  99. package/src/{serve → server}/request-prep.ts +82 -68
  100. package/src/{serve → server}/responses-client.ts +30 -13
  101. package/src/{responses.ts → server/responses.ts} +12 -93
  102. package/src/server/routes.ts +205 -0
  103. package/src/server/start.ts +72 -0
  104. package/src/server/status-routes.ts +108 -0
  105. package/src/{serve → server}/text-completion-stage.ts +25 -4
  106. package/src/server/text-prompt.ts +12 -0
  107. package/src/{serve → server}/token-streams.ts +36 -38
  108. package/src/server/worker-routes.ts +311 -0
  109. package/src/storage/paths.ts +61 -0
  110. package/src/web/assets.ts +37 -0
  111. package/src/web/{src → browser}/api.ts +5 -23
  112. package/src/web/browser/chat-host.ts +17 -0
  113. package/src/web/browser/installed-panels.ts +6 -0
  114. package/src/web/browser/main.ts +55 -0
  115. package/src/web/browser/markdown.ts +279 -0
  116. package/src/web/browser/memory-panel.ts +9 -0
  117. package/src/web/browser/palette.ts +64 -0
  118. package/src/web/browser/protocol.ts +13 -0
  119. package/src/web/browser/shell.ts +467 -0
  120. package/src/web/{src → browser}/status.ts +32 -36
  121. package/src/web/build.ts +51 -0
  122. package/src/web/public/app.html +1054 -0
  123. package/src/web/{sw.js → public/sw.js} +4 -3
  124. package/src/web/{vendor → public/vendor}/hljs-theme.css +2 -2
  125. package/src/web/{vendor → public/vendor}/hljs.js +2 -2
  126. package/THIRD_PARTY_LICENSES.md +0 -51
  127. package/docs/README.md +0 -94
  128. package/docs/archive/hlg-sampling.md +0 -350
  129. package/docs/archive/investigations/audio-input-plan.md +0 -356
  130. package/docs/archive/investigations/chunk-finetune-experiment.md +0 -84
  131. package/docs/archive/investigations/colibri-glm52-port.md +0 -1486
  132. package/docs/archive/investigations/colibri-oracle-pin.md +0 -1284
  133. package/docs/archive/investigations/curve-bisector-routing.md +0 -123
  134. package/docs/archive/investigations/decode-roofline-lookagain.md +0 -348
  135. package/docs/archive/investigations/diffusion-gemma-port.md +0 -602
  136. package/docs/archive/investigations/dspark-handoff.md +0 -224
  137. package/docs/archive/investigations/expert-offload-single-user-moe.md +0 -292
  138. package/docs/archive/investigations/faithful-l1-consolidation.md +0 -310
  139. package/docs/archive/investigations/hlg-sampling-investigation.md +0 -970
  140. package/docs/archive/investigations/indexshare-performance-spike.md +0 -357
  141. package/docs/archive/investigations/kernel-perf-review-2026-07.md +0 -171
  142. package/docs/archive/investigations/lab-build-journal.md +0 -157
  143. package/docs/archive/investigations/minicpm5-decode-megakernel.md +0 -489
  144. package/docs/archive/investigations/openjarvis-fit.md +0 -198
  145. package/docs/archive/investigations/openwiki-evaluation.md +0 -249
  146. package/docs/archive/investigations/optimization_plan.md +0 -346
  147. package/docs/archive/investigations/orpo-base-uf-experiment-and-directions.md +0 -120
  148. package/docs/archive/investigations/orpo-flash-cce-pin-leak.md +0 -167
  149. package/docs/archive/investigations/orpo-uf-testing-handoff.md +0 -126
  150. package/docs/archive/investigations/pareto-specialized-runtime-findings.md +0 -92
  151. package/docs/archive/investigations/pi-builtin-investigation.md +0 -308
  152. package/docs/archive/investigations/pre-colibri-stabilization.md +0 -329
  153. package/docs/archive/investigations/qwen38-27b-campaign-log.md +0 -1092
  154. package/docs/archive/investigations/segmented-backward-handoff.md +0 -148
  155. package/docs/archive/investigations/starter-model-port-handoff.md +0 -342
  156. package/docs/archive/investigations/steel-flash-cce-handoff.md +0 -489
  157. package/docs/archive/investigations/the-dreaming-handoff.md +0 -141
  158. package/docs/archive/investigations/trainer-validation-experiment.md +0 -173
  159. package/docs/archive/planning/chat-ui-vision-memory-first.md +0 -199
  160. package/docs/archive/planning/chat-ui-vision.md +0 -50
  161. package/docs/archive/planning/chunk-task-roadmap.md +0 -77
  162. package/docs/archive/planning/curve-sampler-research-plan.md +0 -331
  163. package/docs/archive/planning/journal.md +0 -316
  164. package/docs/archive/planning/memory-docs-and-dag-plan.md +0 -194
  165. package/docs/archive/planning/pi-integration-review.md +0 -178
  166. package/docs/archive/planning/release-notes-v0.0.10.md +0 -57
  167. package/docs/archive/planning/release-notes-v0.0.11.md +0 -239
  168. package/docs/archive/planning/release-notes-v0.0.12.md +0 -80
  169. package/docs/archive/planning/release-notes-v0.0.13.md +0 -77
  170. package/docs/archive/planning/release-notes-v0.0.9.md +0 -122
  171. package/docs/archive/planning/release-notes-v0.2.0.md +0 -49
  172. package/docs/archive/planning/release-notes-v0.3.0.md +0 -35
  173. package/docs/archive/planning/web-ui-pass-plan.md +0 -213
  174. package/docs/archive/planning/website-readme-pass-plan.md +0 -224
  175. package/docs/design/batching.md +0 -1841
  176. package/docs/design/decode-speed-program.md +0 -2349
  177. package/docs/design/dreaming-nightly-pipeline.md +0 -684
  178. package/docs/design/generic-model-support.md +0 -705
  179. package/docs/design/kv-cache.md +0 -824
  180. package/docs/design/orpo-training.md +0 -680
  181. package/docs/design/speculative-decoding.md +0 -1990
  182. package/docs/design/turboquant.md +0 -2212
  183. package/docs/design/unified-engine-frontier-plan.md +0 -1880
  184. package/docs/design/web-chat-redesign.md +0 -695
  185. package/docs/planning/PRODUCT_ROADMAP.md +0 -594
  186. package/docs/planning/ResearchTopics.md +0 -119
  187. package/docs/planning/release-notes-v0.4.0.md +0 -45
  188. package/docs/planning/video-series.md +0 -421
  189. package/docs/reference/benchmarks.md +0 -3613
  190. package/docs/reference/cli.md +0 -585
  191. package/docs/reference/distribution.md +0 -355
  192. package/docs/reference/environment.md +0 -398
  193. package/docs/reference/glossary.md +0 -39
  194. package/docs/reference/library-api.md +0 -674
  195. package/docs/reference/memory.md +0 -260
  196. package/docs/reference/models.md +0 -334
  197. package/docs/reference/server-api.md +0 -1775
  198. package/docs/reference/server-config.md +0 -846
  199. package/docs/reference/training.md +0 -462
  200. package/docs/reference/troubleshooting.md +0 -158
  201. package/src/admission-plan.ts +0 -18
  202. package/src/audio/conformer.ts +0 -647
  203. package/src/audio/decode.ts +0 -133
  204. package/src/audio/features.ts +0 -202
  205. package/src/audio/transcode.ts +0 -67
  206. package/src/backends/mlx/assistant-target.ts +0 -46
  207. package/src/backends/mlx/autoregressive-draft-rows.ts +0 -120
  208. package/src/backends/mlx/autoregressive.ts +0 -108
  209. package/src/backends/mlx/batch-group.ts +0 -1790
  210. package/src/backends/mlx/cache-attachment.ts +0 -67
  211. package/src/backends/mlx/cache-layout.ts +0 -31
  212. package/src/backends/mlx/checkpoint-state.ts +0 -53
  213. package/src/backends/mlx/continuation-persistence.ts +0 -106
  214. package/src/backends/mlx/continuation-request.ts +0 -43
  215. package/src/backends/mlx/continuation.ts +0 -77
  216. package/src/backends/mlx/diffusion.ts +0 -39
  217. package/src/backends/mlx/draft-target.ts +0 -32
  218. package/src/backends/mlx/evaluation.ts +0 -105
  219. package/src/backends/mlx/fill-append.ts +0 -45
  220. package/src/backends/mlx/full-kv-row-append.ts +0 -32
  221. package/src/backends/mlx/full-kv-row-donor.ts +0 -54
  222. package/src/backends/mlx/full-transitioning-kv-rows.ts +0 -65
  223. package/src/backends/mlx/gateway-binding.ts +0 -130
  224. package/src/backends/mlx/graph.ts +0 -38
  225. package/src/backends/mlx/kv-codec.ts +0 -9
  226. package/src/backends/mlx/kv-maintenance.ts +0 -133
  227. package/src/backends/mlx/kv-tensor-rows.ts +0 -212
  228. package/src/backends/mlx/memory-client.ts +0 -189
  229. package/src/backends/mlx/methods.ts +0 -90
  230. package/src/backends/mlx/model-prompt.ts +0 -164
  231. package/src/backends/mlx/model-serving.ts +0 -79
  232. package/src/backends/mlx/prefill-cohort.ts +0 -89
  233. package/src/backends/mlx/prefill-rows.ts +0 -200
  234. package/src/backends/mlx/prefill.ts +0 -33
  235. package/src/backends/mlx/projected-context-rows.ts +0 -72
  236. package/src/backends/mlx/request-policy.ts +0 -20
  237. package/src/backends/mlx/request-state-policy.ts +0 -41
  238. package/src/backends/mlx/rollback.ts +0 -89
  239. package/src/backends/mlx/row-sampling.ts +0 -49
  240. package/src/backends/mlx/serial-executor.ts +0 -242
  241. package/src/backends/mlx/speculative-group.ts +0 -359
  242. package/src/backends/mlx/speculative-round.ts +0 -161
  243. package/src/backends/mlx/speculative.ts +0 -114
  244. package/src/backends/mlx/state-rows.ts +0 -104
  245. package/src/backends/mlx/state-views.ts +0 -46
  246. package/src/backends/mlx/target-layout-capability.ts +0 -35
  247. package/src/backends/mlx/text-engine.ts +0 -73
  248. package/src/backends/mlx/transitioning-kv-rows.ts +0 -165
  249. package/src/chat-template.ts +0 -382
  250. package/src/cli.ts +0 -3168
  251. package/src/config.ts +0 -399
  252. package/src/contracts/completion.ts +0 -16
  253. package/src/contracts/execution.ts +0 -60
  254. package/src/contracts/generation.ts +0 -103
  255. package/src/contracts/host.ts +0 -7
  256. package/src/contracts/pi-provider.ts +0 -30
  257. package/src/contracts/pi.ts +0 -259
  258. package/src/contracts/prefix-cache.ts +0 -23
  259. package/src/contracts/resources.ts +0 -25
  260. package/src/contracts/sampling.ts +0 -23
  261. package/src/contracts/scheduling.ts +0 -45
  262. package/src/contracts/tsconfig.json +0 -14
  263. package/src/dataset/generators.ts +0 -1087
  264. package/src/dataset/index.ts +0 -12
  265. package/src/dataset/job.ts +0 -81
  266. package/src/dataset/llm.ts +0 -71
  267. package/src/dataset/registry.ts +0 -528
  268. package/src/diffusion/diffusion-generate.ts +0 -507
  269. package/src/download.ts +0 -505
  270. package/src/embed.ts +0 -77
  271. package/src/engine/admission.ts +0 -59
  272. package/src/engine/cancellation.ts +0 -38
  273. package/src/engine/engine.ts +0 -56
  274. package/src/engine/execution-coordinator.ts +0 -70
  275. package/src/engine/execution-plan.ts +0 -53
  276. package/src/engine/resources.ts +0 -53
  277. package/src/engine/scheduler.ts +0 -72
  278. package/src/engine/session.ts +0 -247
  279. package/src/eval/README.md +0 -130
  280. package/src/eval/ifeval.ts +0 -81
  281. package/src/eval/kl-prompts.ts +0 -29
  282. package/src/eval/kl.ts +0 -590
  283. package/src/eval/perplexity.ts +0 -164
  284. package/src/eval/quality-db.ts +0 -92
  285. package/src/eval/reference-logits.ts +0 -207
  286. package/src/eval/runner.ts +0 -124
  287. package/src/eval/score.ts +0 -49
  288. package/src/eval/tasks/bfcl.ts +0 -535
  289. package/src/eval/tasks/gsm8k.ts +0 -98
  290. package/src/eval/tasks/hashhop.ts +0 -139
  291. package/src/eval/tasks/humaneval.ts +0 -275
  292. package/src/eval/tasks/ifeval.ts +0 -525
  293. package/src/eval/tasks/mmlu.ts +0 -157
  294. package/src/eval/ultrafeedback.ts +0 -60
  295. package/src/evaldb.ts +0 -199
  296. package/src/expert-io.ts +0 -393
  297. package/src/expert-offload-build.ts +0 -77
  298. package/src/expert-offload.ts +0 -76
  299. package/src/expert-residency.ts +0 -1134
  300. package/src/expert-usage.ts +0 -415
  301. package/src/fill/echo-index.ts +0 -188
  302. package/src/fill/fill-session.ts +0 -452
  303. package/src/fill/proposal.ts +0 -68
  304. package/src/fill/schema-rows.ts +0 -506
  305. package/src/fill/tool-boundary.ts +0 -103
  306. package/src/fit.ts +0 -249
  307. package/src/generate.ts +0 -1346
  308. package/src/grammar.ts +0 -591
  309. package/src/harness-pi.ts +0 -184
  310. package/src/hf-push.ts +0 -628
  311. package/src/hub-rest.ts +0 -242
  312. package/src/index.ts +0 -63
  313. package/src/inference/denoising.ts +0 -17
  314. package/src/inference/draft-acceptance.ts +0 -41
  315. package/src/inference/draft-output.ts +0 -49
  316. package/src/inference/graph.ts +0 -33
  317. package/src/inference/prefill.ts +0 -39
  318. package/src/inference/rollback.ts +0 -7
  319. package/src/jobs/index.ts +0 -31
  320. package/src/jobs/job-entry.ts +0 -107
  321. package/src/jobs/task-client.ts +0 -19
  322. package/src/jobs/types.ts +0 -2
  323. package/src/kv-scheme.ts +0 -257
  324. package/src/kv-store.ts +0 -1099
  325. package/src/lab/README.md +0 -18
  326. package/src/lab/curve/curve-designer.html +0 -303
  327. package/src/lab/curve/curve-sampler.ts +0 -122
  328. package/src/lab/expert-trace/expert-trace.ts +0 -69
  329. package/src/lab/paged-kv/paged-kv-rows.ts +0 -83
  330. package/src/lab/paged-kv/paged-kv.ts +0 -270
  331. package/src/library.ts +0 -40
  332. package/src/lora.ts +0 -408
  333. package/src/md-modules.d.ts +0 -49
  334. package/src/media-fetch.ts +0 -442
  335. package/src/memory/article.ts +0 -558
  336. package/src/memory/chunk-validation.ts +0 -150
  337. package/src/memory/chunk.ts +0 -318
  338. package/src/memory/cluster.ts +0 -351
  339. package/src/memory/coverage.ts +0 -134
  340. package/src/memory/crosslink.ts +0 -0
  341. package/src/memory/db.ts +0 -253
  342. package/src/memory/entity.ts +0 -203
  343. package/src/memory/gate.ts +0 -187
  344. package/src/memory/history.ts +0 -152
  345. package/src/memory/ingest.ts +0 -335
  346. package/src/memory/model.ts +0 -183
  347. package/src/memory/normalize.ts +0 -671
  348. package/src/memory/parse.ts +0 -22
  349. package/src/memory/pipeline.ts +0 -275
  350. package/src/memory/prompts.ts +0 -65
  351. package/src/memory/query.ts +0 -334
  352. package/src/memory/reconcile.ts +0 -734
  353. package/src/memory/redirect.ts +0 -108
  354. package/src/memory/reindex.ts +0 -325
  355. package/src/memory/resolve.ts +0 -307
  356. package/src/memory/rest.ts +0 -245
  357. package/src/memory/route.ts +0 -272
  358. package/src/memory/schedule.ts +0 -165
  359. package/src/memory/stages.ts +0 -777
  360. package/src/memory/synthesize.ts +0 -1638
  361. package/src/memory/tools.ts +0 -749
  362. package/src/memory/vault.ts +0 -1194
  363. package/src/memory/wikify.ts +0 -1064
  364. package/src/mlx/array.ts +0 -388
  365. package/src/mlx/autograd.ts +0 -304
  366. package/src/mlx/checkpoint.ts +0 -149
  367. package/src/mlx/compile.ts +0 -168
  368. package/src/mlx/custom-vjp.ts +0 -188
  369. package/src/mlx/ffi.ts +0 -512
  370. package/src/mlx/materialize.ts +0 -23
  371. package/src/mlx/metal-kernel.ts +0 -159
  372. package/src/mlx/ops.ts +0 -1021
  373. package/src/mlx/quantized-rows.ts +0 -36
  374. package/src/mlx/token-bitmask.ts +0 -52
  375. package/src/mlx/turboquant-kv-decode.ts +0 -82
  376. package/src/mlx/turboquant-kv-inverse.ts +0 -122
  377. package/src/mlx/turboquant-ops.ts +0 -861
  378. package/src/mlx/turboquant-tables.ts +0 -237
  379. package/src/mmap.ts +0 -90
  380. package/src/model/artifact-identity.ts +0 -73
  381. package/src/model/batched-kv.ts +0 -235
  382. package/src/model/batched-mask.ts +0 -279
  383. package/src/model/batched-quant.ts +0 -212
  384. package/src/model/batched-quantized-kv.ts +0 -144
  385. package/src/model/batched-rotating-quant.ts +0 -353
  386. package/src/model/batched-rotating-state.ts +0 -149
  387. package/src/model/batched-rotating.ts +0 -338
  388. package/src/model/batched-row-storage.ts +0 -179
  389. package/src/model/batched-ssm.ts +0 -52
  390. package/src/model/batched-turboquant-kv.ts +0 -93
  391. package/src/model/compiled-decode.ts +0 -712
  392. package/src/model/decoded-kv-donor.ts +0 -12
  393. package/src/model/delayed-quantized-kv.ts +0 -72
  394. package/src/model/delayed-rotating-quantized-kv.ts +0 -93
  395. package/src/model/delayed-turboquant-kv.ts +0 -55
  396. package/src/model/diffusion-gemma.ts +0 -1026
  397. package/src/model/factory.ts +0 -189
  398. package/src/model/fingerprint.ts +0 -33
  399. package/src/model/flash-attention.ts +0 -694
  400. package/src/model/full-prefill-padding.ts +0 -56
  401. package/src/model/full-prefill-row.ts +0 -105
  402. package/src/model/gemma4-base.ts +0 -2351
  403. package/src/model/gemma4.ts +0 -1315
  404. package/src/model/generated/gemma4-12b.ts +0 -429
  405. package/src/model/generated/gemma4-26b.ts +0 -448
  406. package/src/model/generated/gemma4-e4b.ts +0 -717
  407. package/src/model/generated/index.ts +0 -18
  408. package/src/model/glm52-atlas.ts +0 -511
  409. package/src/model/glm52-cache.ts +0 -792
  410. package/src/model/glm52-config.ts +0 -262
  411. package/src/model/glm52-container.ts +0 -305
  412. package/src/model/glm52-coupling.ts +0 -388
  413. package/src/model/glm52-dsa.ts +0 -606
  414. package/src/model/glm52-expert-layout.ts +0 -253
  415. package/src/model/glm52-layout.ts +0 -152
  416. package/src/model/glm52-memory.ts +0 -500
  417. package/src/model/glm52-mla.ts +0 -792
  418. package/src/model/glm52-moe.ts +0 -223
  419. package/src/model/glm52-pilot.ts +0 -537
  420. package/src/model/glm52-reference.ts +0 -445
  421. package/src/model/glm52-residency.ts +0 -557
  422. package/src/model/glm52-resident-weights.ts +0 -135
  423. package/src/model/glm52-streamed-experts.ts +0 -453
  424. package/src/model/glm52-streamed-metal.ts +0 -610
  425. package/src/model/glm52-weights.ts +0 -503
  426. package/src/model/glm52.ts +0 -1132
  427. package/src/model/implementation.ts +0 -69
  428. package/src/model/kv-attention-view.ts +0 -67
  429. package/src/model/minicpm5.ts +0 -376
  430. package/src/model/profile.ts +0 -443
  431. package/src/model/qwen-append.ts +0 -12
  432. package/src/model/qwen-conv.ts +0 -52
  433. package/src/model/qwen3-delta-state.ts +0 -74
  434. package/src/model/qwen3-delta.ts +0 -451
  435. package/src/model/qwen3-moe.ts +0 -404
  436. package/src/model/qwen3-mrope.ts +0 -252
  437. package/src/model/qwen3.ts +0 -277
  438. package/src/model/qwen3_5-checkpoint.ts +0 -164
  439. package/src/model/qwen3_5.ts +0 -819
  440. package/src/model/rotating-kv-donor.ts +0 -35
  441. package/src/model/rotating-kv-layout.ts +0 -262
  442. package/src/model/rotating-row-transaction.ts +0 -35
  443. package/src/model/speculative-rotating-kv.ts +0 -101
  444. package/src/model/ssm-prefill-padding.ts +0 -39
  445. package/src/model/support.ts +0 -102
  446. package/src/model/trellis-balanced-scatter.ts +0 -51
  447. package/src/model/trellis-linear.ts +0 -672
  448. package/src/model/trellis-shared-m.ts +0 -151
  449. package/src/model/trellis-shared-scatter.ts +0 -144
  450. package/src/model/trellis-splitk-prefill.ts +0 -158
  451. package/src/model/trellis-tiled-prefill.ts +0 -136
  452. package/src/model/trellis-vector-expand.ts +0 -62
  453. package/src/model/trellis-wide-prefill.ts +0 -94
  454. package/src/model/turboquant-codec.ts +0 -83
  455. package/src/model/universal/archs.ts +0 -332
  456. package/src/model/universal/dense.ts +0 -612
  457. package/src/model/universal/modules.ts +0 -170
  458. package/src/model/universal/rope.ts +0 -381
  459. package/src/native/expert_io.c +0 -523
  460. package/src/native/frame_extract.swift +0 -140
  461. package/src/native-pack.ts +0 -162
  462. package/src/pi-provider.ts +0 -53
  463. package/src/pi-session.ts +0 -81
  464. package/src/pi-terminal.ts +0 -274
  465. package/src/pi-web.ts +0 -1932
  466. package/src/preflight.ts +0 -158
  467. package/src/prompt-cache.ts +0 -460
  468. package/src/quantize/allocator.ts +0 -627
  469. package/src/quantize/atomic-output.ts +0 -38
  470. package/src/quantize/calibration.ts +0 -181
  471. package/src/quantize/config-writer.ts +0 -145
  472. package/src/quantize/index.ts +0 -84
  473. package/src/quantize/job.ts +0 -162
  474. package/src/quantize/quantizer.ts +0 -666
  475. package/src/quantize/rotate.ts +0 -603
  476. package/src/quantize/safetensors-writer.ts +0 -249
  477. package/src/quantize/sensitivity.ts +0 -216
  478. package/src/quantize/trellis.ts +0 -586
  479. package/src/quantize/weight-transform.ts +0 -292
  480. package/src/registry.ts +0 -602
  481. package/src/runtime-config.ts +0 -81
  482. package/src/safetensors.ts +0 -158
  483. package/src/sampler.ts +0 -1011
  484. package/src/serve/admin-routes.ts +0 -184
  485. package/src/serve/assets/curve-terrain.html +0 -105
  486. package/src/serve/assets/training-inference-map.html +0 -575
  487. package/src/serve/aux-routes.ts +0 -132
  488. package/src/serve/batch-scheduler.ts +0 -8
  489. package/src/serve/checkpoint-identity.ts +0 -64
  490. package/src/serve/generation-gateway.ts +0 -496
  491. package/src/serve/isolate.ts +0 -609
  492. package/src/serve/kv-budget.ts +0 -14
  493. package/src/serve/lab-routes.ts +0 -341
  494. package/src/serve/lane-registry.ts +0 -45
  495. package/src/serve/model-admin-routes.ts +0 -155
  496. package/src/serve/model-binding.ts +0 -43
  497. package/src/serve/model-host.ts +0 -511
  498. package/src/serve/parent-application.ts +0 -56
  499. package/src/serve/prompt-response-trace.ts +0 -147
  500. package/src/serve/response-lease.ts +0 -24
  501. package/src/serve/session-search.ts +0 -326
  502. package/src/serve/static-routes.ts +0 -101
  503. package/src/server.ts +0 -1314
  504. package/src/spec/assistant-rows.ts +0 -92
  505. package/src/spec/assistant-source.ts +0 -126
  506. package/src/spec/cache-identity.ts +0 -22
  507. package/src/spec/deepspec-rows.ts +0 -29
  508. package/src/spec/deepspec-source.ts +0 -145
  509. package/src/spec/dflash-source.ts +0 -149
  510. package/src/spec/drafter.ts +0 -304
  511. package/src/spec/dspark/ab-stats.ts +0 -136
  512. package/src/spec/dspark/calibration.ts +0 -112
  513. package/src/spec/dspark/data-dflash.ts +0 -156
  514. package/src/spec/dspark/data.ts +0 -201
  515. package/src/spec/dspark/deepspec-module.ts +0 -776
  516. package/src/spec/dspark/generate-dflash.ts +0 -245
  517. package/src/spec/dspark/generate.ts +0 -290
  518. package/src/spec/dspark/loader.ts +0 -23
  519. package/src/spec/dspark/loss.ts +0 -213
  520. package/src/spec/dspark/module-dflash.ts +0 -560
  521. package/src/spec/dspark/module.ts +0 -540
  522. package/src/spec/dspark/quantize-drafter.ts +0 -91
  523. package/src/spec/dspark/sample.ts +0 -112
  524. package/src/spec/generate.ts +0 -276
  525. package/src/spec/glm52-mtp-graph.ts +0 -29
  526. package/src/spec/glm52-mtp-rows.ts +0 -132
  527. package/src/spec/glm52-mtp-source.ts +0 -317
  528. package/src/spec/glm52-mtp-state.ts +0 -33
  529. package/src/spec/ngram-source.ts +0 -204
  530. package/src/spec/projected-draft-rows.ts +0 -73
  531. package/src/spec/qwen-mtp-module.ts +0 -171
  532. package/src/spec/qwen-mtp-rows.ts +0 -219
  533. package/src/spec/qwen-mtp-source.ts +0 -383
  534. package/src/spec/qwen-mtp-state.ts +0 -30
  535. package/src/spec/serve-loop.ts +0 -585
  536. package/src/spec/source.ts +0 -215
  537. package/src/spec/two-model-rows.ts +0 -61
  538. package/src/spec/two-model.ts +0 -113
  539. package/src/ssd-cache.ts +0 -372
  540. package/src/ssd-durability.ts +0 -211
  541. package/src/tokenizer.ts +0 -335
  542. package/src/tool-approvals.ts +0 -131
  543. package/src/tool-call.ts +0 -695
  544. package/src/train/dataset.ts +0 -484
  545. package/src/train/diffusion-lora.ts +0 -216
  546. package/src/train/export.ts +0 -32
  547. package/src/train/flash-cce.ts +0 -1234
  548. package/src/train/forward.ts +0 -266
  549. package/src/train/fuse.ts +0 -243
  550. package/src/train/index.ts +0 -46
  551. package/src/train/job.ts +0 -205
  552. package/src/train/lora-params.ts +0 -254
  553. package/src/train/loss.ts +0 -1591
  554. package/src/train/merge.ts +0 -195
  555. package/src/train/optimizer.ts +0 -183
  556. package/src/train/prefix-shared.ts +0 -490
  557. package/src/train/rank.ts +0 -137
  558. package/src/train/segmented.ts +0 -1828
  559. package/src/train/steel-qmm-header.ts +0 -1461
  560. package/src/train/trainer.ts +0 -1221
  561. package/src/train/watch.ts +0 -542
  562. package/src/vision/diffusion-vision.ts +0 -620
  563. package/src/vision/embedder.ts +0 -168
  564. package/src/vision/preprocess.ts +0 -247
  565. package/src/vision/prompt.ts +0 -373
  566. package/src/vision/qwen3vl-preprocess.ts +0 -409
  567. package/src/vision/qwen3vl-prompt.ts +0 -196
  568. package/src/vision/qwen3vl-tower.ts +0 -555
  569. package/src/vision/siglip.ts +0 -599
  570. package/src/vision/video-frames.ts +0 -148
  571. package/src/web/app.html +0 -2143
  572. package/src/web/app.js +0 -5703
  573. package/src/web/skills/memory/SKILL.md +0 -120
  574. package/src/web/skills/web-research/SKILL.md +0 -46
  575. package/src/web/skills.ts +0 -97
  576. package/src/web/src/adapters-panel.ts +0 -288
  577. package/src/web/src/assistant.ts +0 -451
  578. package/src/web/src/chat.ts +0 -1057
  579. package/src/web/src/composer.ts +0 -959
  580. package/src/web/src/dataset.ts +0 -132
  581. package/src/web/src/finetune.ts +0 -267
  582. package/src/web/src/hub.ts +0 -428
  583. package/src/web/src/main.ts +0 -98
  584. package/src/web/src/markdown.ts +0 -0
  585. package/src/web/src/memory-panel.ts +0 -572
  586. package/src/web/src/model-picker.ts +0 -159
  587. package/src/web/src/palette.ts +0 -346
  588. package/src/web/src/protocol.ts +0 -26
  589. package/src/web/src/quantize.ts +0 -167
  590. package/src/web/src/rag.ts +0 -274
  591. package/src/web/src/sessions.ts +0 -469
  592. package/src/web/src/shell.ts +0 -804
  593. package/src/web/src/ui-catalog.ts +0 -78
  594. package/src/web/vendor/README.md +0 -61
  595. package/src/web-assets.ts +0 -47
  596. package/src/web-tools.ts +0 -478
  597. package/src/weights.ts +0 -255
  598. /package/src/{serve → server}/completion-sink.ts +0 -0
  599. /package/src/web/{icon.svg → public/icon.svg} +0 -0
  600. /package/src/web/{manifest.webmanifest → public/manifest.webmanifest} +0 -0
  601. /package/src/web/{vendor → public/vendor}/hljs-LICENSE +0 -0
@@ -1,108 +0,0 @@
1
- // mlx-bun memory — SUB-CONCEPT REDIRECTS ("you already know what I'm talking about").
2
- //
3
- // A subject the user discussed should always RESOLVE, even when it never earned
4
- // its own article: it FOLDED into a broader article (routed/disambiguated to an
5
- // existing home) or it was CAPTURED (kept in its chunk, not yet articled). Either
6
- // way we record a redirect edge — a `(surface → home article stem)` row in the
7
- // `subject_redirects` ledger — so the surface resolves to its home instead of a
8
- // bare NOT FOUND.
9
- //
10
- // `subject_redirects` is LEDGER state (like buckets / chunk_entities): it is NOT
11
- // reconstructable from the vault, so reindex never deletes it. Instead reindex
12
- // PROJECTS each edge whose target article still exists into the derived
13
- // `entity_aliases` table, so `resolveName` finds the surface → its home article
14
- // with no extra lookup path. Registration is idempotent (INSERT OR IGNORE on the
15
- // (surface, target_stem) PK); a fold and a later capture of the same surface both
16
- // just point at the same home.
17
-
18
- import type { MemoryStore } from "./db";
19
-
20
- /** How a sub-concept reached its home article: it FOLDED into a broader existing
21
- * article, or it was CAPTURED (no own article yet) and points at its most-related
22
- * article. Informational only — both resolve identically. */
23
- export type RedirectKind = "fold" | "capture";
24
-
25
- export interface RedirectRow {
26
- surface: string;
27
- target_stem: string;
28
- kind: RedirectKind;
29
- }
30
-
31
- /**
32
- * Register a `surface → target_stem` redirect (idempotent). Returns true when a
33
- * new edge was written. A blank surface, a self-pointing redirect (surface ==
34
- * stem title), or a blank target is ignored.
35
- */
36
- export function registerRedirect(
37
- store: MemoryStore,
38
- surface: string,
39
- targetStem: string,
40
- kind: RedirectKind,
41
- ): boolean {
42
- const s = surface.trim();
43
- const t = targetStem.trim();
44
- if (!s || !t) return false;
45
- if (s === t || s === t.replace(/_/g, " ")) return false; // surface IS the title
46
- const r = store.db
47
- .query("INSERT OR IGNORE INTO subject_redirects (surface, target_stem, kind) VALUES (?, ?, ?)")
48
- .run(s, t, kind);
49
- return r.changes > 0;
50
- }
51
-
52
- /** Every redirect edge (sorted) — the reindex projection input. */
53
- export function listRedirects(store: MemoryStore): RedirectRow[] {
54
- return store.db
55
- .query("SELECT surface, target_stem, kind FROM subject_redirects ORDER BY surface, target_stem")
56
- .all() as RedirectRow[];
57
- }
58
-
59
- /**
60
- * The article a CAPTURED subject most relates to: the article-homed entity that
61
- * co-occurs with it in the most chunks (deterministic — ties break by name). This
62
- * is the "surface it via its neighbourhood" signal a captured subject points at,
63
- * so it resolves to the article it was discussed alongside rather than NOT FOUND.
64
- * Returns the related entity's `article_stem`, or null when it co-occurs with no
65
- * homed article (the read path then falls back to memory_search over its chunk).
66
- * `chunkSet`, when given, restricts co-occurrence to a run's chunks.
67
- */
68
- export function relatedArticleStem(
69
- store: MemoryStore,
70
- entity: string,
71
- chunkSet?: Set<string>,
72
- ): string | null {
73
- const rows = store.db
74
- .query(
75
- "SELECT e.article_stem AS stem, COUNT(*) AS c FROM chunk_entities ce1 " +
76
- "JOIN chunk_entities ce2 ON ce2.chunk_id = ce1.chunk_id " +
77
- "JOIN entities e ON e.name = ce2.entity_name " +
78
- "WHERE ce1.entity_name = ? AND ce2.entity_name <> ? " +
79
- "AND e.article_stem IS NOT NULL AND e.notable = 1 " +
80
- "GROUP BY ce2.entity_name ORDER BY c DESC, ce2.entity_name ASC",
81
- )
82
- .all(entity, entity) as { stem: string; c: number }[];
83
- if (!chunkSet) return rows[0]?.stem ?? null;
84
- // Re-score within the run's chunk set when one is given.
85
- const scored = new Map<string, number>();
86
- const co = store.db
87
- .query(
88
- "SELECT ce1.chunk_id AS chunk_id, e.article_stem AS stem FROM chunk_entities ce1 " +
89
- "JOIN chunk_entities ce2 ON ce2.chunk_id = ce1.chunk_id " +
90
- "JOIN entities e ON e.name = ce2.entity_name " +
91
- "WHERE ce1.entity_name = ? AND ce2.entity_name <> ? " +
92
- "AND e.article_stem IS NOT NULL AND e.notable = 1",
93
- )
94
- .all(entity, entity) as { chunk_id: string; stem: string }[];
95
- for (const r of co) {
96
- if (!chunkSet.has(r.chunk_id)) continue;
97
- scored.set(r.stem, (scored.get(r.stem) ?? 0) + 1);
98
- }
99
- let best: string | null = null;
100
- let bestC = 0;
101
- for (const [stem, c] of [...scored].sort((a, b) => b[1] - a[1] || a[0].localeCompare(b[0]))) {
102
- if (c > bestC) {
103
- best = stem;
104
- bestC = c;
105
- }
106
- }
107
- return best;
108
- }
@@ -1,325 +0,0 @@
1
- // mlx-bun memory — reindex the derived cache from the markdown vault.
2
- //
3
- // The vault is truth; the DB's derived tables are a cache. `reindex` rebuilds
4
- // them to MATCH the markdown — never the reverse. It drops and rebuilds exactly
5
- // six tables purely from the article files via the P0-T2 parser:
6
- //
7
- // entities · entity_aliases · categories · article_categories ·
8
- // infobox_facts · links
9
- //
10
- // Pipeline-state tables (messages, chunks, chunk_*, synthesized_*, watermarks,
11
- // buckets) are the synthesis ledger and are left UNTOUCHED. Foreign keys are
12
- // disabled across the rebuild so deleting+recreating `entities` does not cascade
13
- // into the pipeline's `chunk_entities` rows (which reference entities ON DELETE
14
- // CASCADE) — those are ledger state, not derivable from the vault.
15
- //
16
- // Determinism is a contract: reindexing the same vault into a fresh DB twice
17
- // yields byte-identical derived tables (articles are visited in sorted-stem
18
- // order; rows are inserted deterministically). See P2-T2.
19
-
20
- import { readFileSync, readdirSync } from "node:fs";
21
- import { join } from "node:path";
22
-
23
- import {
24
- deriveCategories,
25
- infoboxFieldValues,
26
- parseInfobox,
27
- parseSeriesBanner,
28
- type InfoboxField,
29
- } from "./article";
30
- import type { MemoryStore } from "./db";
31
- import { listRedirects } from "./redirect";
32
- import { EntityResolver, nearNameMatch } from "./resolve";
33
- import { articlesDir, resolveWikilinkToStem, vaultRoot } from "./vault";
34
-
35
- // ---- normalization helpers -------------------------------------------
36
-
37
- /** Casefold + collapse whitespace/underscores so title, stem, and alias forms
38
- * of the same surface text key the entity index identically. */
39
- function normalizeAlias(s: string): string {
40
- return s.trim().toLowerCase().replace(/_/g, " ").replace(/\s+/g, " ").trim();
41
- }
42
-
43
- const WIKILINK_RE = /\[\[([^\]]+)\]\]/;
44
- const DATE_RE = /^\d{4}-\d{2}(-\d{2})?$/;
45
- const MAIN_BANNER_RES = [
46
- /\{\{\s*Main\s*\|\s*([^}]+)\}\}/i, // {{Main|Target}}
47
- /^\*?\s*Main article:\s*\[\[([^\]]+)\]\]\s*\.?\*?$/i, // *Main article: [[Target]]*
48
- ];
49
-
50
- /** The inner target of a `[[wikilink]]` value, before any `|alias`/`#anchor`. */
51
- function wikilinkInner(value: string): string {
52
- const m = WIKILINK_RE.exec(value);
53
- if (!m) return "";
54
- return m[1]!.split("|")[0]!.split("#")[0]!.trim();
55
- }
56
-
57
- /** Resolve a wikilink target to an existing article stem, else its underscored
58
- * form (a not-yet-written "red link" still carries a stable graph key). */
59
- function linkStem(target: string, stems: Set<string>): string {
60
- const base = target.split("|")[0]!.split("#")[0]!.trim();
61
- return resolveWikilinkToStem(base, stems) ?? base.replace(/\s+/g, "_");
62
- }
63
-
64
- function elementKind(value: string): string {
65
- if (WIKILINK_RE.test(value)) return "entity-link";
66
- if (DATE_RE.test(value.trim())) return "date";
67
- return "scalar";
68
- }
69
-
70
- // ---- result ----------------------------------------------------------
71
-
72
- export interface ReindexResult {
73
- articles: number;
74
- entities: number;
75
- aliases: number;
76
- categories: number;
77
- articleCategories: number;
78
- facts: number;
79
- links: number;
80
- }
81
-
82
- // ---- the rebuild ------------------------------------------------------
83
-
84
- /** Sorted article stems under `<root>/articles/` (`*.md`, no hidden files). */
85
- function listArticleStems(root: string): string[] {
86
- let names: string[];
87
- try {
88
- names = readdirSync(articlesDir(root));
89
- } catch {
90
- return [];
91
- }
92
- return names
93
- .filter((n) => n.endsWith(".md") && !n.startsWith("."))
94
- .map((n) => n.slice(0, -3))
95
- .sort((a, b) => a.localeCompare(b));
96
- }
97
-
98
- /**
99
- * Rebuild the derived cache from the markdown vault. Idempotent and
100
- * deterministic: same vault → byte-identical derived tables.
101
- */
102
- export function reindex(store: MemoryStore, root: string = vaultRoot()): ReindexResult {
103
- const db = store.db;
104
- const stems = listArticleStems(root);
105
- const stemSet = new Set(stems);
106
-
107
- const result: ReindexResult = {
108
- articles: stems.length,
109
- entities: 0,
110
- aliases: 0,
111
- categories: 0,
112
- articleCategories: 0,
113
- facts: 0,
114
- links: 0,
115
- };
116
-
117
- // FK off so dropping `entities` does not cascade into the pipeline ledger
118
- // (`chunk_entities`). PRAGMA cannot change inside a transaction, so set it
119
- // around the transactional rebuild.
120
- // Sub-concept redirect edges (fold/capture) projected into entity_aliases below,
121
- // so a discussed subject resolves to its home article. Read before the rebuild
122
- // transaction; an older DB without the table yields none.
123
- let redirects: { surface: string; target_stem: string }[] = [];
124
- try {
125
- redirects = listRedirects(store);
126
- } catch {
127
- redirects = [];
128
- }
129
-
130
- db.exec("PRAGMA foreign_keys = OFF");
131
- try {
132
- db.transaction(() => {
133
- // Drop the six derived tables (children first for clarity).
134
- db.exec("DELETE FROM links");
135
- db.exec("DELETE FROM infobox_facts");
136
- db.exec("DELETE FROM article_categories");
137
- db.exec("DELETE FROM categories");
138
- db.exec("DELETE FROM entity_aliases");
139
- db.exec("DELETE FROM entities");
140
-
141
- const insEntity = db.query(
142
- "INSERT OR IGNORE INTO entities (name, article_stem, kind, notable) VALUES (?, ?, ?, 0)",
143
- );
144
- const insAlias = db.query("INSERT OR IGNORE INTO entity_aliases (alias, entity_name) VALUES (?, ?)");
145
- const insCategory = db.query("INSERT OR IGNORE INTO categories (name) VALUES (?)");
146
- const insArtCat = db.query(
147
- "INSERT OR IGNORE INTO article_categories (article_stem, category, source) VALUES (?, ?, ?)",
148
- );
149
- const insFact = db.query(
150
- "INSERT OR IGNORE INTO infobox_facts (article_stem, key, value, kind, entity_link) VALUES (?, ?, ?, ?, ?)",
151
- );
152
- const insLink = db.query("INSERT OR IGNORE INTO links (src_stem, dst_stem, via) VALUES (?, ?, ?)");
153
-
154
- const addLink = (dst: string, via: string, src: string): void => {
155
- if (!dst || dst === src) return;
156
- const r = insLink.run(src, dst, via);
157
- if (r.changes) result.links++;
158
- };
159
- const addAlias = (raw: string, entity: string): void => {
160
- const a = normalizeAlias(raw);
161
- if (!a) return;
162
- const r = insAlias.run(a, entity);
163
- if (r.changes) result.aliases++;
164
- };
165
-
166
- for (const stem of stems) {
167
- let content: string;
168
- try {
169
- content = readFileSync(join(articlesDir(root), `${stem}.md`), "utf8");
170
- } catch {
171
- continue;
172
- }
173
- const box = parseInfobox(content);
174
-
175
- // entities: one row per article; kind from the explicit infobox kind:.
176
- const kind = box ? box.entityKind : "thing";
177
- if (insEntity.run(stem, stem, kind).changes) result.entities++;
178
-
179
- // entity_aliases: title (stem→spaces) + the stem itself + infobox aliases.
180
- addAlias(stem, stem);
181
- addAlias(stem.replace(/_/g, " "), stem);
182
- if (box) {
183
- const aliasField = box.fields.find((f) => f.key === "aliases");
184
- if (aliasField) for (const a of infoboxFieldValues(aliasField)) addAlias(a, stem);
185
- }
186
-
187
- // categories + article_categories: from explicit [[Category:…]] declarations.
188
- const derived = deriveCategories(content, stem);
189
- for (const cat of derived.categories) {
190
- if (insCategory.run(cat).changes) result.categories++;
191
- }
192
- for (const row of derived.categoryRows) {
193
- if (insArtCat.run(row.article_stem, row.category, row.source).changes) result.articleCategories++;
194
- }
195
-
196
- // infobox_facts: one row per (split) field value, with element kind +
197
- // resolved entity_link; infobox entity-values also feed the link graph.
198
- if (box) {
199
- for (const field of box.fields) emitFieldFacts(field, stem, stemSet, insFact, addLink, result);
200
- }
201
-
202
- // links: prose [[links]] (See-also tagged distinctly), series + main banners.
203
- emitProseLinks(content, stem, stemSet, addLink);
204
- const series = parseSeriesBanner(content);
205
- if (series) addLink(linkStem(series, stemSet), "series", stem);
206
- }
207
-
208
- // Project the sub-concept redirect ledger into entity_aliases: a fold/capture
209
- // surface becomes an alias of its home article (only when that article still
210
- // exists), so resolveName reaches it. Articles are truth — a redirect never
211
- // overrides a real alias (INSERT OR IGNORE keeps the first writer).
212
- for (const r of redirects) {
213
- if (stemSet.has(r.target_stem)) addAlias(r.surface, r.target_stem);
214
- }
215
- })();
216
- } finally {
217
- db.exec("PRAGMA foreign_keys = ON");
218
- }
219
-
220
- return result;
221
- }
222
-
223
- function emitFieldFacts(
224
- field: InfoboxField,
225
- stem: string,
226
- stems: Set<string>,
227
- insFact: ReturnType<MemoryStore["db"]["query"]>,
228
- addLink: (dst: string, via: string, src: string) => void,
229
- result: ReindexResult,
230
- ): void {
231
- for (const value of infoboxFieldValues(field)) {
232
- const isLink = WIKILINK_RE.test(value);
233
- const entityLink = isLink ? linkStem(wikilinkInner(value), stems) : null;
234
- const r = insFact.run(stem, field.key, value, elementKind(value), entityLink);
235
- if (r.changes) result.facts++;
236
- if (isLink && entityLink) addLink(entityLink, "infobox", stem);
237
- }
238
- }
239
-
240
- function emitProseLinks(
241
- content: string,
242
- stem: string,
243
- stems: Set<string>,
244
- addLink: (dst: string, via: string, src: string) => void,
245
- ): void {
246
- const lines = content.split(/\r?\n/);
247
- const inner = /\[\[([^\]]+)\]\]/g;
248
- let inFence = false;
249
- let section: string | null = null;
250
- for (const rawLine of lines) {
251
- const line = rawLine;
252
- if (/^```/.test(line)) {
253
- inFence = !inFence;
254
- continue;
255
- }
256
- if (inFence) continue;
257
- const t = line.trim();
258
-
259
- const hm = /^(#{1,6})\s+(.+)$/.exec(line);
260
- if (hm) {
261
- section = hm[1]!.length >= 2 ? hm[2]!.trim().toLowerCase() : section;
262
- continue;
263
- }
264
- if (/^\*Part of a series on \[\[/.test(t)) continue; // series banner: tagged elsewhere
265
- if (/^categories:/i.test(t)) continue; // category declaration: not a graph edge
266
-
267
- // {{Main}} / *Main article: [[X]]* — a parent→child split edge.
268
- let mainHit = false;
269
- for (const re of MAIN_BANNER_RES) {
270
- const m = re.exec(t);
271
- if (m) {
272
- addLink(linkStem(m[1]!.trim(), stems), "main", stem);
273
- mainHit = true;
274
- break;
275
- }
276
- }
277
- if (mainHit) continue;
278
-
279
- const via = section === "see also" ? "seealso" : "prose";
280
- inner.lastIndex = 0;
281
- let m: RegExpExecArray | null;
282
- while ((m = inner.exec(line)) !== null) {
283
- const base = m[1]!.split("|")[0]!.split("#")[0]!.trim();
284
- if (!base || /^conv:/i.test(base) || /^Category:/i.test(base)) continue;
285
- addLink(linkStem(base, stems), via, stem);
286
- }
287
- }
288
- }
289
-
290
- // ---- name resolution -------------------------------------------------
291
-
292
- const LEADING_ARTICLE_RE = /^(?:the|a|an)\s+/;
293
-
294
- /**
295
- * Resolve an entity name or alias to its article stem via `entity_aliases`.
296
- * Normalizes the query the same way aliases are stored (casefold, ws-collapse)
297
- * and also tries with a leading article word ("the"/"a"/"an") stripped, so
298
- * a "<the brand model>" surface and a "<model>" short form both reach the same stem.
299
- */
300
- export function resolveName(store: MemoryStore, nameOrAlias: string): string | null {
301
- const q = normalizeAlias(nameOrAlias);
302
- const candidates = [q, q.replace(LEADING_ARTICLE_RE, "")];
303
- const stmt = store.db.query("SELECT entity_name FROM entity_aliases WHERE alias = ? LIMIT 1");
304
- for (const c of candidates) {
305
- if (!c) continue;
306
- const row = stmt.get(c) as { entity_name: string } | null;
307
- if (row) return row.entity_name;
308
- }
309
- // NEAR-NAME fallback: a discussed sub-concept that is plainly the same subject
310
- // as an existing entity — the title minus a generic suffix ("<subject>" for a
311
- // "<subject> Theory") — resolves via the conservative token-subset fuzzy. A
312
- // distinct subject or a purely-generic query does not. No model, no embedding.
313
- return nearNameMatch(EntityResolver.fromStore(store), q);
314
- }
315
-
316
- // ---- category lookup -------------------------------------------------
317
-
318
- /** Article stems that DECLARED `[[Category:<category>]]` — the only "about X"
319
- * mechanism (zero substring false positives). */
320
- export function articlesInCategory(store: MemoryStore, category: string): string[] {
321
- const rows = store.db
322
- .query("SELECT article_stem FROM article_categories WHERE category = ? ORDER BY article_stem")
323
- .all(category) as { article_stem: string }[];
324
- return rows.map((r) => r.article_stem);
325
- }