mlx-bun 0.5.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 (640) hide show
  1. package/README.md +1449 -109
  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 +7 -5
  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 +10 -10
  78. package/src/{serve → server}/chat-stage.ts +14 -14
  79. package/src/{client.ts → server/client.ts} +28 -2
  80. package/src/{serve → server}/completion-executor.ts +33 -41
  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 +25 -82
  85. package/src/{serve → server}/http.ts +25 -13
  86. package/src/{serve → server}/inference-request.ts +5 -5
  87. package/src/server/job-routes.ts +20 -0
  88. package/src/server/media-prompt.ts +63 -0
  89. package/src/server/memory-completion-client.ts +46 -0
  90. package/src/server/model-routes.ts +192 -0
  91. package/src/{serve → server}/openai-wire.ts +3 -2
  92. package/src/{serve → server}/pipeline.ts +1 -1
  93. package/src/server/prompt-builder.ts +13 -0
  94. package/src/server/prompt-contracts.ts +17 -0
  95. package/src/server/proxy-routes.ts +187 -0
  96. package/src/server/publishing-routes.ts +41 -0
  97. package/src/{serve → server}/request-plan.ts +6 -8
  98. package/src/{serve → server}/request-prep.ts +47 -50
  99. package/src/{serve → server}/responses-client.ts +30 -13
  100. package/src/{responses.ts → server/responses.ts} +12 -93
  101. package/src/server/routes.ts +205 -0
  102. package/src/server/start.ts +72 -0
  103. package/src/server/status-routes.ts +108 -0
  104. package/src/{serve → server}/text-completion-stage.ts +25 -4
  105. package/src/server/text-prompt.ts +12 -0
  106. package/src/{serve → server}/token-streams.ts +36 -38
  107. package/src/server/worker-routes.ts +311 -0
  108. package/src/storage/paths.ts +61 -0
  109. package/src/web/assets.ts +37 -0
  110. package/src/web/{src → browser}/api.ts +5 -23
  111. package/src/web/browser/chat-host.ts +17 -0
  112. package/src/web/browser/installed-panels.ts +6 -0
  113. package/src/web/browser/main.ts +55 -0
  114. package/src/web/browser/markdown.ts +279 -0
  115. package/src/web/browser/memory-panel.ts +9 -0
  116. package/src/web/browser/palette.ts +64 -0
  117. package/src/web/browser/protocol.ts +13 -0
  118. package/src/web/browser/shell.ts +467 -0
  119. package/src/web/{src → browser}/status.ts +32 -36
  120. package/src/web/build.ts +51 -0
  121. package/src/web/public/app.html +1054 -0
  122. package/src/web/{sw.js → public/sw.js} +4 -3
  123. package/src/web/{vendor → public/vendor}/hljs-theme.css +2 -2
  124. package/src/web/{vendor → public/vendor}/hljs.js +2 -2
  125. package/THIRD_PARTY_LICENSES.md +0 -51
  126. package/docs/README.md +0 -107
  127. package/docs/archive/hlg-sampling.md +0 -350
  128. package/docs/archive/investigations/audio-input-plan.md +0 -356
  129. package/docs/archive/investigations/benchmark-ledger-through-v0.4.0.md +0 -3617
  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/release-notes-v0.4.0.md +0 -45
  174. package/docs/archive/planning/release-notes-v0.5.0.md +0 -37
  175. package/docs/archive/planning/web-ui-pass-plan.md +0 -213
  176. package/docs/archive/planning/website-readme-pass-plan.md +0 -224
  177. package/docs/design/batching.md +0 -2054
  178. package/docs/design/decode-speed-program.md +0 -2404
  179. package/docs/design/dreaming-nightly-pipeline.md +0 -684
  180. package/docs/design/generic-model-support.md +0 -821
  181. package/docs/design/kv-cache.md +0 -993
  182. package/docs/design/orpo-training.md +0 -680
  183. package/docs/design/speculative-decoding.md +0 -2129
  184. package/docs/design/turboquant.md +0 -2225
  185. package/docs/design/unified-engine-frontier-plan.md +0 -1987
  186. package/docs/design/web-chat-redesign.md +0 -695
  187. package/docs/planning/PRODUCT_ROADMAP.md +0 -593
  188. package/docs/planning/ResearchTopics.md +0 -119
  189. package/docs/planning/public-readiness-handoff.md +0 -244
  190. package/docs/planning/public-readiness.md +0 -149
  191. package/docs/planning/video-series.md +0 -421
  192. package/docs/reference/benchmarks.md +0 -3587
  193. package/docs/reference/cli.md +0 -646
  194. package/docs/reference/distribution.md +0 -380
  195. package/docs/reference/environment.md +0 -494
  196. package/docs/reference/glossary.md +0 -39
  197. package/docs/reference/library-api.md +0 -688
  198. package/docs/reference/memory.md +0 -260
  199. package/docs/reference/models.md +0 -346
  200. package/docs/reference/server-api.md +0 -1945
  201. package/docs/reference/server-config.md +0 -973
  202. package/docs/reference/training.md +0 -462
  203. package/docs/reference/troubleshooting.md +0 -158
  204. package/src/admission-plan.ts +0 -18
  205. package/src/audio/audiotoolbox.ts +0 -112
  206. package/src/audio/conformer.ts +0 -655
  207. package/src/audio/decode.ts +0 -133
  208. package/src/audio/features.ts +0 -202
  209. package/src/audio/mic-capture.ts +0 -98
  210. package/src/audio/silero-vad.ts +0 -379
  211. package/src/audio/transcode.ts +0 -67
  212. package/src/audio/whisper-decode.ts +0 -774
  213. package/src/audio/whisper-fast.ts +0 -732
  214. package/src/audio/whisper-format.ts +0 -73
  215. package/src/audio/whisper-mel.ts +0 -185
  216. package/src/audio/whisper-timing.ts +0 -274
  217. package/src/audio/whisper-tokenizer.ts +0 -239
  218. package/src/audio/whisper-transcribe.ts +0 -410
  219. package/src/backends/mlx/assistant-target.ts +0 -46
  220. package/src/backends/mlx/autoregressive-draft-rows.ts +0 -120
  221. package/src/backends/mlx/autoregressive.ts +0 -129
  222. package/src/backends/mlx/batch-group.ts +0 -1874
  223. package/src/backends/mlx/cache-attachment.ts +0 -67
  224. package/src/backends/mlx/cache-layout.ts +0 -31
  225. package/src/backends/mlx/checkpoint-state.ts +0 -53
  226. package/src/backends/mlx/continuation-persistence.ts +0 -107
  227. package/src/backends/mlx/continuation-request.ts +0 -43
  228. package/src/backends/mlx/continuation.ts +0 -77
  229. package/src/backends/mlx/diffusion.ts +0 -39
  230. package/src/backends/mlx/draft-target.ts +0 -32
  231. package/src/backends/mlx/encoder-cache.ts +0 -25
  232. package/src/backends/mlx/evaluation.ts +0 -105
  233. package/src/backends/mlx/fill-append.ts +0 -58
  234. package/src/backends/mlx/fill-group.ts +0 -497
  235. package/src/backends/mlx/full-kv-row-append.ts +0 -32
  236. package/src/backends/mlx/full-kv-row-donor.ts +0 -54
  237. package/src/backends/mlx/full-transitioning-kv-rows.ts +0 -65
  238. package/src/backends/mlx/gateway-binding.ts +0 -174
  239. package/src/backends/mlx/graph.ts +0 -38
  240. package/src/backends/mlx/kv-codec.ts +0 -9
  241. package/src/backends/mlx/kv-maintenance.ts +0 -161
  242. package/src/backends/mlx/kv-tensor-rows.ts +0 -212
  243. package/src/backends/mlx/memory-client.ts +0 -189
  244. package/src/backends/mlx/methods.ts +0 -90
  245. package/src/backends/mlx/mixed-iteration.ts +0 -62
  246. package/src/backends/mlx/model-prompt.ts +0 -178
  247. package/src/backends/mlx/model-serving.ts +0 -80
  248. package/src/backends/mlx/paged-cache-codec.ts +0 -27
  249. package/src/backends/mlx/prefill-cohort.ts +0 -100
  250. package/src/backends/mlx/prefill-policy.ts +0 -26
  251. package/src/backends/mlx/prefill-rows.ts +0 -244
  252. package/src/backends/mlx/prefill.ts +0 -33
  253. package/src/backends/mlx/projected-context-rows.ts +0 -72
  254. package/src/backends/mlx/prompt-input.ts +0 -29
  255. package/src/backends/mlx/qwen-prompt-input.ts +0 -40
  256. package/src/backends/mlx/request-policy.ts +0 -20
  257. package/src/backends/mlx/request-state-policy.ts +0 -54
  258. package/src/backends/mlx/rollback.ts +0 -92
  259. package/src/backends/mlx/row-sampling.ts +0 -49
  260. package/src/backends/mlx/serial-executor.ts +0 -251
  261. package/src/backends/mlx/speculative-group.ts +0 -438
  262. package/src/backends/mlx/speculative-round.ts +0 -161
  263. package/src/backends/mlx/speculative.ts +0 -131
  264. package/src/backends/mlx/state-rows.ts +0 -104
  265. package/src/backends/mlx/state-views.ts +0 -46
  266. package/src/backends/mlx/target-layout-capability.ts +0 -35
  267. package/src/backends/mlx/text-engine.ts +0 -73
  268. package/src/backends/mlx/transitioning-kv-rows.ts +0 -173
  269. package/src/chat-template.ts +0 -382
  270. package/src/cli.ts +0 -3490
  271. package/src/config.ts +0 -399
  272. package/src/contracts/completion.ts +0 -16
  273. package/src/contracts/execution.ts +0 -70
  274. package/src/contracts/generation.ts +0 -103
  275. package/src/contracts/host.ts +0 -7
  276. package/src/contracts/object-cache.ts +0 -8
  277. package/src/contracts/pi-provider.ts +0 -30
  278. package/src/contracts/pi.ts +0 -261
  279. package/src/contracts/prefix-cache.ts +0 -33
  280. package/src/contracts/resources.ts +0 -25
  281. package/src/contracts/sampling.ts +0 -23
  282. package/src/contracts/scheduling.ts +0 -54
  283. package/src/contracts/tsconfig.json +0 -14
  284. package/src/dataset/generators.ts +0 -1087
  285. package/src/dataset/index.ts +0 -12
  286. package/src/dataset/job.ts +0 -81
  287. package/src/dataset/llm.ts +0 -71
  288. package/src/dataset/registry.ts +0 -528
  289. package/src/diffusion/diffusion-generate.ts +0 -507
  290. package/src/download.ts +0 -505
  291. package/src/embed.ts +0 -77
  292. package/src/engine/admission.ts +0 -59
  293. package/src/engine/cancellation.ts +0 -38
  294. package/src/engine/engine.ts +0 -56
  295. package/src/engine/execution-coordinator.ts +0 -70
  296. package/src/engine/execution-plan.ts +0 -64
  297. package/src/engine/execution-tasks.ts +0 -44
  298. package/src/engine/namespaced-cache.ts +0 -13
  299. package/src/engine/resources.ts +0 -53
  300. package/src/engine/scheduler.ts +0 -92
  301. package/src/engine/session.ts +0 -247
  302. package/src/eval/README.md +0 -130
  303. package/src/eval/ifeval.ts +0 -81
  304. package/src/eval/kl-prompts.ts +0 -29
  305. package/src/eval/kl.ts +0 -590
  306. package/src/eval/perplexity.ts +0 -164
  307. package/src/eval/quality-db.ts +0 -92
  308. package/src/eval/reference-logits.ts +0 -207
  309. package/src/eval/runner.ts +0 -124
  310. package/src/eval/score.ts +0 -49
  311. package/src/eval/tasks/bfcl.ts +0 -535
  312. package/src/eval/tasks/gsm8k.ts +0 -98
  313. package/src/eval/tasks/hashhop.ts +0 -139
  314. package/src/eval/tasks/humaneval.ts +0 -275
  315. package/src/eval/tasks/ifeval.ts +0 -525
  316. package/src/eval/tasks/mmlu.ts +0 -157
  317. package/src/eval/ultrafeedback.ts +0 -60
  318. package/src/evaldb.ts +0 -199
  319. package/src/expert-io.ts +0 -393
  320. package/src/expert-offload-build.ts +0 -77
  321. package/src/expert-offload.ts +0 -76
  322. package/src/expert-residency.ts +0 -1134
  323. package/src/expert-usage.ts +0 -415
  324. package/src/fill/echo-index.ts +0 -188
  325. package/src/fill/fill-session.ts +0 -463
  326. package/src/fill/proposal.ts +0 -68
  327. package/src/fill/schema-rows.ts +0 -506
  328. package/src/fill/tool-boundary.ts +0 -103
  329. package/src/fit.ts +0 -249
  330. package/src/generate.ts +0 -1352
  331. package/src/grammar.ts +0 -604
  332. package/src/harness-pi.ts +0 -184
  333. package/src/hf-push.ts +0 -628
  334. package/src/hub-rest.ts +0 -242
  335. package/src/index.ts +0 -63
  336. package/src/inference/denoising.ts +0 -17
  337. package/src/inference/draft-acceptance.ts +0 -41
  338. package/src/inference/draft-output.ts +0 -49
  339. package/src/inference/graph.ts +0 -33
  340. package/src/inference/prefill.ts +0 -45
  341. package/src/inference/rollback.ts +0 -7
  342. package/src/jobs/index.ts +0 -31
  343. package/src/jobs/job-entry.ts +0 -107
  344. package/src/jobs/task-client.ts +0 -19
  345. package/src/jobs/types.ts +0 -2
  346. package/src/kv-scheme.ts +0 -279
  347. package/src/kv-store.ts +0 -1135
  348. package/src/lab/README.md +0 -22
  349. package/src/lab/curve/curve-designer.html +0 -303
  350. package/src/lab/curve/curve-sampler.ts +0 -122
  351. package/src/lab/expert-trace/expert-trace.ts +0 -69
  352. package/src/lab/paged-kv/paged-attention.ts +0 -117
  353. package/src/lab/paged-kv/paged-kv-rows.ts +0 -111
  354. package/src/lab/paged-kv/paged-kv.ts +0 -336
  355. package/src/library.ts +0 -40
  356. package/src/lora.ts +0 -408
  357. package/src/md-modules.d.ts +0 -54
  358. package/src/media-fetch.ts +0 -442
  359. package/src/memory/article.ts +0 -558
  360. package/src/memory/chunk-validation.ts +0 -150
  361. package/src/memory/chunk.ts +0 -318
  362. package/src/memory/cluster.ts +0 -351
  363. package/src/memory/coverage.ts +0 -134
  364. package/src/memory/crosslink.ts +0 -0
  365. package/src/memory/db.ts +0 -253
  366. package/src/memory/entity.ts +0 -203
  367. package/src/memory/gate.ts +0 -187
  368. package/src/memory/history.ts +0 -152
  369. package/src/memory/ingest.ts +0 -335
  370. package/src/memory/model.ts +0 -183
  371. package/src/memory/normalize.ts +0 -671
  372. package/src/memory/parse.ts +0 -22
  373. package/src/memory/pipeline.ts +0 -275
  374. package/src/memory/prompts.ts +0 -65
  375. package/src/memory/query.ts +0 -334
  376. package/src/memory/reconcile.ts +0 -734
  377. package/src/memory/redirect.ts +0 -108
  378. package/src/memory/reindex.ts +0 -325
  379. package/src/memory/resolve.ts +0 -307
  380. package/src/memory/rest.ts +0 -245
  381. package/src/memory/route.ts +0 -272
  382. package/src/memory/schedule.ts +0 -165
  383. package/src/memory/stages.ts +0 -777
  384. package/src/memory/synthesize.ts +0 -1638
  385. package/src/memory/tools.ts +0 -749
  386. package/src/memory/vault.ts +0 -1194
  387. package/src/memory/wikify.ts +0 -1064
  388. package/src/mlx/array.ts +0 -425
  389. package/src/mlx/autograd.ts +0 -304
  390. package/src/mlx/checkpoint.ts +0 -149
  391. package/src/mlx/compile.ts +0 -168
  392. package/src/mlx/custom-vjp.ts +0 -188
  393. package/src/mlx/ffi.ts +0 -531
  394. package/src/mlx/materialize.ts +0 -23
  395. package/src/mlx/metal-kernel.ts +0 -159
  396. package/src/mlx/normalized-argmax.ts +0 -116
  397. package/src/mlx/ops.ts +0 -1108
  398. package/src/mlx/quantized-rows.ts +0 -36
  399. package/src/mlx/token-bitmask.ts +0 -52
  400. package/src/mlx/turboquant-kv-decode.ts +0 -82
  401. package/src/mlx/turboquant-kv-inverse.ts +0 -122
  402. package/src/mlx/turboquant-ops.ts +0 -861
  403. package/src/mlx/turboquant-tables.ts +0 -237
  404. package/src/mmap.ts +0 -90
  405. package/src/model/artifact-identity.ts +0 -73
  406. package/src/model/batched-kv.ts +0 -235
  407. package/src/model/batched-mask.ts +0 -279
  408. package/src/model/batched-quant.ts +0 -212
  409. package/src/model/batched-quantized-kv.ts +0 -144
  410. package/src/model/batched-rotating-quant.ts +0 -353
  411. package/src/model/batched-rotating-state.ts +0 -149
  412. package/src/model/batched-rotating.ts +0 -338
  413. package/src/model/batched-row-storage.ts +0 -179
  414. package/src/model/batched-ssm.ts +0 -52
  415. package/src/model/batched-turboquant-kv.ts +0 -94
  416. package/src/model/compiled-decode.ts +0 -712
  417. package/src/model/decoded-kv-donor.ts +0 -12
  418. package/src/model/delayed-quantized-kv.ts +0 -72
  419. package/src/model/delayed-rotating-quantized-kv.ts +0 -93
  420. package/src/model/delayed-turboquant-kv.ts +0 -57
  421. package/src/model/diffusion-gemma.ts +0 -1026
  422. package/src/model/factory.ts +0 -215
  423. package/src/model/fingerprint.ts +0 -45
  424. package/src/model/flash-attention.ts +0 -694
  425. package/src/model/full-prefill-padding.ts +0 -56
  426. package/src/model/full-prefill-row.ts +0 -105
  427. package/src/model/gemma4-base.ts +0 -2370
  428. package/src/model/gemma4.ts +0 -1395
  429. package/src/model/generated/gemma4-12b.ts +0 -429
  430. package/src/model/generated/gemma4-26b.ts +0 -448
  431. package/src/model/generated/gemma4-e4b.ts +0 -717
  432. package/src/model/generated/index.ts +0 -18
  433. package/src/model/glm52-atlas.ts +0 -511
  434. package/src/model/glm52-cache.ts +0 -792
  435. package/src/model/glm52-config.ts +0 -262
  436. package/src/model/glm52-container.ts +0 -305
  437. package/src/model/glm52-coupling.ts +0 -388
  438. package/src/model/glm52-dsa.ts +0 -606
  439. package/src/model/glm52-expert-layout.ts +0 -253
  440. package/src/model/glm52-layout.ts +0 -152
  441. package/src/model/glm52-memory.ts +0 -500
  442. package/src/model/glm52-mla.ts +0 -792
  443. package/src/model/glm52-moe.ts +0 -223
  444. package/src/model/glm52-pilot.ts +0 -537
  445. package/src/model/glm52-reference.ts +0 -445
  446. package/src/model/glm52-residency.ts +0 -557
  447. package/src/model/glm52-resident-weights.ts +0 -135
  448. package/src/model/glm52-streamed-experts.ts +0 -453
  449. package/src/model/glm52-streamed-metal.ts +0 -610
  450. package/src/model/glm52-weights.ts +0 -503
  451. package/src/model/glm52.ts +0 -1132
  452. package/src/model/implementation.ts +0 -69
  453. package/src/model/kv-attention-view.ts +0 -70
  454. package/src/model/minicpm5.ts +0 -376
  455. package/src/model/profile.ts +0 -468
  456. package/src/model/quantized-append-attention.ts +0 -31
  457. package/src/model/qwen-append.ts +0 -12
  458. package/src/model/qwen-conv.ts +0 -52
  459. package/src/model/qwen3-delta-state.ts +0 -74
  460. package/src/model/qwen3-delta.ts +0 -451
  461. package/src/model/qwen3-moe.ts +0 -404
  462. package/src/model/qwen3-mrope.ts +0 -250
  463. package/src/model/qwen3.ts +0 -277
  464. package/src/model/qwen3_5-checkpoint.ts +0 -164
  465. package/src/model/qwen3_5.ts +0 -881
  466. package/src/model/rotating-kv-donor.ts +0 -35
  467. package/src/model/rotating-kv-layout.ts +0 -262
  468. package/src/model/rotating-row-transaction.ts +0 -35
  469. package/src/model/speculative-rotating-kv.ts +0 -101
  470. package/src/model/ssm-prefill-padding.ts +0 -39
  471. package/src/model/support.ts +0 -110
  472. package/src/model/token-groups.ts +0 -66
  473. package/src/model/trellis-balanced-scatter.ts +0 -51
  474. package/src/model/trellis-linear.ts +0 -672
  475. package/src/model/trellis-shared-m.ts +0 -151
  476. package/src/model/trellis-shared-scatter.ts +0 -144
  477. package/src/model/trellis-splitk-prefill.ts +0 -158
  478. package/src/model/trellis-tiled-prefill.ts +0 -136
  479. package/src/model/trellis-vector-expand.ts +0 -62
  480. package/src/model/trellis-wide-prefill.ts +0 -94
  481. package/src/model/turboquant-codec.ts +0 -89
  482. package/src/model/universal/archs.ts +0 -332
  483. package/src/model/universal/dense.ts +0 -612
  484. package/src/model/universal/modules.ts +0 -170
  485. package/src/model/universal/rope.ts +0 -381
  486. package/src/model/whisper.ts +0 -435
  487. package/src/native/expert_io.c +0 -523
  488. package/src/native/frame_extract.swift +0 -140
  489. package/src/native/mic_capture.swift +0 -92
  490. package/src/native-pack.ts +0 -163
  491. package/src/pi-provider.ts +0 -53
  492. package/src/pi-session.ts +0 -81
  493. package/src/pi-terminal.ts +0 -274
  494. package/src/pi-web.ts +0 -1940
  495. package/src/preflight.ts +0 -158
  496. package/src/prompt-cache.ts +0 -682
  497. package/src/quantize/allocator.ts +0 -627
  498. package/src/quantize/atomic-output.ts +0 -38
  499. package/src/quantize/calibration.ts +0 -181
  500. package/src/quantize/config-writer.ts +0 -145
  501. package/src/quantize/index.ts +0 -84
  502. package/src/quantize/job.ts +0 -162
  503. package/src/quantize/quantizer.ts +0 -666
  504. package/src/quantize/rotate.ts +0 -603
  505. package/src/quantize/safetensors-writer.ts +0 -249
  506. package/src/quantize/sensitivity.ts +0 -216
  507. package/src/quantize/trellis.ts +0 -586
  508. package/src/quantize/weight-transform.ts +0 -292
  509. package/src/registry.ts +0 -602
  510. package/src/runtime-config.ts +0 -77
  511. package/src/safetensors.ts +0 -165
  512. package/src/sampler.ts +0 -1012
  513. package/src/serve/admin-routes.ts +0 -184
  514. package/src/serve/assets/curve-terrain.html +0 -105
  515. package/src/serve/assets/training-inference-map.html +0 -575
  516. package/src/serve/audio-routes.ts +0 -323
  517. package/src/serve/aux-routes.ts +0 -132
  518. package/src/serve/batch-scheduler.ts +0 -8
  519. package/src/serve/checkpoint-identity.ts +0 -64
  520. package/src/serve/generation-gateway.ts +0 -537
  521. package/src/serve/isolate.ts +0 -609
  522. package/src/serve/kv-budget.ts +0 -14
  523. package/src/serve/lab-routes.ts +0 -341
  524. package/src/serve/lane-registry.ts +0 -45
  525. package/src/serve/model-admin-routes.ts +0 -155
  526. package/src/serve/model-binding.ts +0 -49
  527. package/src/serve/model-host.ts +0 -511
  528. package/src/serve/parent-application.ts +0 -56
  529. package/src/serve/prompt-response-trace.ts +0 -161
  530. package/src/serve/response-lease.ts +0 -24
  531. package/src/serve/session-search.ts +0 -326
  532. package/src/serve/static-routes.ts +0 -101
  533. package/src/serve/transcription-server.ts +0 -64
  534. package/src/serve/transcription-service.ts +0 -502
  535. package/src/server.ts +0 -1282
  536. package/src/spec/assistant-rows.ts +0 -93
  537. package/src/spec/assistant-source.ts +0 -126
  538. package/src/spec/cache-identity.ts +0 -22
  539. package/src/spec/deepspec-rows.ts +0 -29
  540. package/src/spec/deepspec-source.ts +0 -145
  541. package/src/spec/dflash-source.ts +0 -149
  542. package/src/spec/drafter.ts +0 -304
  543. package/src/spec/dspark/ab-stats.ts +0 -136
  544. package/src/spec/dspark/calibration.ts +0 -112
  545. package/src/spec/dspark/data-dflash.ts +0 -156
  546. package/src/spec/dspark/data.ts +0 -201
  547. package/src/spec/dspark/deepspec-module.ts +0 -776
  548. package/src/spec/dspark/generate-dflash.ts +0 -245
  549. package/src/spec/dspark/generate.ts +0 -290
  550. package/src/spec/dspark/loader.ts +0 -23
  551. package/src/spec/dspark/loss.ts +0 -213
  552. package/src/spec/dspark/module-dflash.ts +0 -560
  553. package/src/spec/dspark/module.ts +0 -540
  554. package/src/spec/dspark/quantize-drafter.ts +0 -91
  555. package/src/spec/dspark/sample.ts +0 -112
  556. package/src/spec/generate.ts +0 -276
  557. package/src/spec/glm52-mtp-graph.ts +0 -29
  558. package/src/spec/glm52-mtp-rows.ts +0 -132
  559. package/src/spec/glm52-mtp-source.ts +0 -318
  560. package/src/spec/glm52-mtp-state.ts +0 -33
  561. package/src/spec/ngram-source.ts +0 -226
  562. package/src/spec/projected-draft-rows.ts +0 -73
  563. package/src/spec/qwen-mtp-module.ts +0 -171
  564. package/src/spec/qwen-mtp-rows.ts +0 -230
  565. package/src/spec/qwen-mtp-source.ts +0 -386
  566. package/src/spec/qwen-mtp-state.ts +0 -30
  567. package/src/spec/serve-loop.ts +0 -587
  568. package/src/spec/source.ts +0 -228
  569. package/src/spec/two-model-rows.ts +0 -62
  570. package/src/spec/two-model.ts +0 -113
  571. package/src/ssd-cache.ts +0 -431
  572. package/src/ssd-durability.ts +0 -209
  573. package/src/storage/host-buffer.ts +0 -24
  574. package/src/storage/kv-writer.ts +0 -83
  575. package/src/storage/kv-writer.worker.js +0 -264
  576. package/src/storage/retention-policy.ts +0 -37
  577. package/src/tiered-prompt-cache.ts +0 -45
  578. package/src/tokenizer.ts +0 -335
  579. package/src/tool-approvals.ts +0 -131
  580. package/src/tool-call.ts +0 -695
  581. package/src/train/dataset.ts +0 -484
  582. package/src/train/diffusion-lora.ts +0 -216
  583. package/src/train/export.ts +0 -32
  584. package/src/train/flash-cce.ts +0 -1234
  585. package/src/train/forward.ts +0 -266
  586. package/src/train/fuse.ts +0 -243
  587. package/src/train/index.ts +0 -46
  588. package/src/train/job.ts +0 -205
  589. package/src/train/lora-params.ts +0 -254
  590. package/src/train/loss.ts +0 -1591
  591. package/src/train/merge.ts +0 -195
  592. package/src/train/optimizer.ts +0 -183
  593. package/src/train/prefix-shared.ts +0 -490
  594. package/src/train/rank.ts +0 -137
  595. package/src/train/segmented.ts +0 -1828
  596. package/src/train/steel-qmm-header.ts +0 -1461
  597. package/src/train/trainer.ts +0 -1221
  598. package/src/train/watch.ts +0 -542
  599. package/src/vision/diffusion-vision.ts +0 -620
  600. package/src/vision/embedder.ts +0 -176
  601. package/src/vision/preprocess.ts +0 -247
  602. package/src/vision/prompt.ts +0 -409
  603. package/src/vision/qwen3vl-preprocess.ts +0 -409
  604. package/src/vision/qwen3vl-prompt.ts +0 -233
  605. package/src/vision/qwen3vl-tower.ts +0 -566
  606. package/src/vision/siglip.ts +0 -607
  607. package/src/vision/video-frames.ts +0 -148
  608. package/src/web/app.html +0 -2155
  609. package/src/web/app.js +0 -5863
  610. package/src/web/skills/memory/SKILL.md +0 -120
  611. package/src/web/skills/web-research/SKILL.md +0 -46
  612. package/src/web/skills.ts +0 -97
  613. package/src/web/src/adapters-panel.ts +0 -288
  614. package/src/web/src/assistant.ts +0 -451
  615. package/src/web/src/chat.ts +0 -1060
  616. package/src/web/src/composer.ts +0 -962
  617. package/src/web/src/dataset.ts +0 -132
  618. package/src/web/src/finetune.ts +0 -267
  619. package/src/web/src/hub.ts +0 -428
  620. package/src/web/src/main.ts +0 -98
  621. package/src/web/src/markdown.ts +0 -0
  622. package/src/web/src/memory-panel.ts +0 -572
  623. package/src/web/src/model-picker.ts +0 -159
  624. package/src/web/src/palette.ts +0 -346
  625. package/src/web/src/protocol.ts +0 -26
  626. package/src/web/src/quantize.ts +0 -167
  627. package/src/web/src/rag.ts +0 -274
  628. package/src/web/src/sessions.ts +0 -469
  629. package/src/web/src/shell.ts +0 -804
  630. package/src/web/src/ui-catalog.ts +0 -78
  631. package/src/web/src/voice.ts +0 -141
  632. package/src/web/vendor/README.md +0 -61
  633. package/src/web-assets.ts +0 -47
  634. package/src/web-tools.ts +0 -478
  635. package/src/weights.ts +0 -255
  636. /package/src/{serve → server}/completion-sink.ts +0 -0
  637. /package/src/{serve → server}/generated-token-history.ts +0 -0
  638. /package/src/web/{icon.svg → public/icon.svg} +0 -0
  639. /package/src/web/{manifest.webmanifest → public/manifest.webmanifest} +0 -0
  640. /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
- }