@tenphi/akno-core 0.1.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 (485) hide show
  1. package/LICENSE +83 -0
  2. package/README.md +26 -0
  3. package/config/default.jsonc +548 -0
  4. package/dist/bench/answer-corpus.d.ts +48 -0
  5. package/dist/bench/answer-corpus.d.ts.map +1 -0
  6. package/dist/bench/answer-corpus.js +491 -0
  7. package/dist/bench/answer-corpus.js.map +1 -0
  8. package/dist/bench/answer.d.ts +156 -0
  9. package/dist/bench/answer.d.ts.map +1 -0
  10. package/dist/bench/answer.js +608 -0
  11. package/dist/bench/answer.js.map +1 -0
  12. package/dist/bench/auto-recall-answer-corpus.d.ts +21 -0
  13. package/dist/bench/auto-recall-answer-corpus.d.ts.map +1 -0
  14. package/dist/bench/auto-recall-answer-corpus.js +245 -0
  15. package/dist/bench/auto-recall-answer-corpus.js.map +1 -0
  16. package/dist/bench/auto-recall-answer.d.ts +198 -0
  17. package/dist/bench/auto-recall-answer.d.ts.map +1 -0
  18. package/dist/bench/auto-recall-answer.js +720 -0
  19. package/dist/bench/auto-recall-answer.js.map +1 -0
  20. package/dist/bench/auto-recall-corpus.d.ts +45 -0
  21. package/dist/bench/auto-recall-corpus.d.ts.map +1 -0
  22. package/dist/bench/auto-recall-corpus.js +221 -0
  23. package/dist/bench/auto-recall-corpus.js.map +1 -0
  24. package/dist/bench/auto-recall.d.ts +171 -0
  25. package/dist/bench/auto-recall.d.ts.map +1 -0
  26. package/dist/bench/auto-recall.js +651 -0
  27. package/dist/bench/auto-recall.js.map +1 -0
  28. package/dist/bench/entity-resolution.d.ts +37 -0
  29. package/dist/bench/entity-resolution.d.ts.map +1 -0
  30. package/dist/bench/entity-resolution.js +121 -0
  31. package/dist/bench/entity-resolution.js.map +1 -0
  32. package/dist/bench/graph.d.ts +57 -0
  33. package/dist/bench/graph.d.ts.map +1 -0
  34. package/dist/bench/graph.js +573 -0
  35. package/dist/bench/graph.js.map +1 -0
  36. package/dist/bench/llm-ranking-probe.d.ts +27 -0
  37. package/dist/bench/llm-ranking-probe.d.ts.map +1 -0
  38. package/dist/bench/llm-ranking-probe.js +105 -0
  39. package/dist/bench/llm-ranking-probe.js.map +1 -0
  40. package/dist/bench/merge-discovery-corpus.d.ts +26 -0
  41. package/dist/bench/merge-discovery-corpus.d.ts.map +1 -0
  42. package/dist/bench/merge-discovery-corpus.js +114 -0
  43. package/dist/bench/merge-discovery-corpus.js.map +1 -0
  44. package/dist/bench/merge-discovery-review.d.ts +81 -0
  45. package/dist/bench/merge-discovery-review.d.ts.map +1 -0
  46. package/dist/bench/merge-discovery-review.js +149 -0
  47. package/dist/bench/merge-discovery-review.js.map +1 -0
  48. package/dist/bench/merge-discovery.d.ts +122 -0
  49. package/dist/bench/merge-discovery.d.ts.map +1 -0
  50. package/dist/bench/merge-discovery.js +390 -0
  51. package/dist/bench/merge-discovery.js.map +1 -0
  52. package/dist/bench/mixed-retrieval.d.ts +35 -0
  53. package/dist/bench/mixed-retrieval.d.ts.map +1 -0
  54. package/dist/bench/mixed-retrieval.js +355 -0
  55. package/dist/bench/mixed-retrieval.js.map +1 -0
  56. package/dist/bench/ranking-corpus.d.ts +29 -0
  57. package/dist/bench/ranking-corpus.d.ts.map +1 -0
  58. package/dist/bench/ranking-corpus.js +514 -0
  59. package/dist/bench/ranking-corpus.js.map +1 -0
  60. package/dist/bench/ranking-end-to-end.d.ts +112 -0
  61. package/dist/bench/ranking-end-to-end.d.ts.map +1 -0
  62. package/dist/bench/ranking-end-to-end.js +479 -0
  63. package/dist/bench/ranking-end-to-end.js.map +1 -0
  64. package/dist/bench/ranking-latency.d.ts +71 -0
  65. package/dist/bench/ranking-latency.d.ts.map +1 -0
  66. package/dist/bench/ranking-latency.js +130 -0
  67. package/dist/bench/ranking-latency.js.map +1 -0
  68. package/dist/bench/ranking-matrix.d.ts +141 -0
  69. package/dist/bench/ranking-matrix.d.ts.map +1 -0
  70. package/dist/bench/ranking-matrix.js +526 -0
  71. package/dist/bench/ranking-matrix.js.map +1 -0
  72. package/dist/bench/ranking-review.d.ts +93 -0
  73. package/dist/bench/ranking-review.d.ts.map +1 -0
  74. package/dist/bench/ranking-review.js +249 -0
  75. package/dist/bench/ranking-review.js.map +1 -0
  76. package/dist/bench/ranking.d.ts +122 -0
  77. package/dist/bench/ranking.d.ts.map +1 -0
  78. package/dist/bench/ranking.js +547 -0
  79. package/dist/bench/ranking.js.map +1 -0
  80. package/dist/bench.d.ts +60 -0
  81. package/dist/bench.d.ts.map +1 -0
  82. package/dist/bench.js +167 -0
  83. package/dist/bench.js.map +1 -0
  84. package/dist/config/jsonc.d.ts +8 -0
  85. package/dist/config/jsonc.d.ts.map +1 -0
  86. package/dist/config/jsonc.js +85 -0
  87. package/dist/config/jsonc.js.map +1 -0
  88. package/dist/config/load.d.ts +43 -0
  89. package/dist/config/load.d.ts.map +1 -0
  90. package/dist/config/load.js +608 -0
  91. package/dist/config/load.js.map +1 -0
  92. package/dist/config/paths.d.ts +10 -0
  93. package/dist/config/paths.d.ts.map +1 -0
  94. package/dist/config/paths.js +38 -0
  95. package/dist/config/paths.js.map +1 -0
  96. package/dist/config/schema.d.ts +698 -0
  97. package/dist/config/schema.d.ts.map +1 -0
  98. package/dist/config/schema.js +394 -0
  99. package/dist/config/schema.js.map +1 -0
  100. package/dist/config/write-rules.d.ts +41 -0
  101. package/dist/config/write-rules.d.ts.map +1 -0
  102. package/dist/config/write-rules.js +225 -0
  103. package/dist/config/write-rules.js.map +1 -0
  104. package/dist/config/write-setup.d.ts +42 -0
  105. package/dist/config/write-setup.d.ts.map +1 -0
  106. package/dist/config/write-setup.js +358 -0
  107. package/dist/config/write-setup.js.map +1 -0
  108. package/dist/context.d.ts +64 -0
  109. package/dist/context.d.ts.map +1 -0
  110. package/dist/context.js +14 -0
  111. package/dist/context.js.map +1 -0
  112. package/dist/doctor.d.ts +115 -0
  113. package/dist/doctor.d.ts.map +1 -0
  114. package/dist/doctor.js +388 -0
  115. package/dist/doctor.js.map +1 -0
  116. package/dist/index/chunk.d.ts +62 -0
  117. package/dist/index/chunk.d.ts.map +1 -0
  118. package/dist/index/chunk.js +307 -0
  119. package/dist/index/chunk.js.map +1 -0
  120. package/dist/index/defer.d.ts +32 -0
  121. package/dist/index/defer.d.ts.map +1 -0
  122. package/dist/index/defer.js +66 -0
  123. package/dist/index/defer.js.map +1 -0
  124. package/dist/index/derive.d.ts +99 -0
  125. package/dist/index/derive.d.ts.map +1 -0
  126. package/dist/index/derive.js +378 -0
  127. package/dist/index/derive.js.map +1 -0
  128. package/dist/index/entity-resolution.d.ts +68 -0
  129. package/dist/index/entity-resolution.d.ts.map +1 -0
  130. package/dist/index/entity-resolution.js +305 -0
  131. package/dist/index/entity-resolution.js.map +1 -0
  132. package/dist/index/graph.d.ts +46 -0
  133. package/dist/index/graph.d.ts.map +1 -0
  134. package/dist/index/graph.js +618 -0
  135. package/dist/index/graph.js.map +1 -0
  136. package/dist/index/indexer.d.ts +301 -0
  137. package/dist/index/indexer.d.ts.map +1 -0
  138. package/dist/index/indexer.js +1398 -0
  139. package/dist/index/indexer.js.map +1 -0
  140. package/dist/index/revision-barrier.d.ts +30 -0
  141. package/dist/index/revision-barrier.d.ts.map +1 -0
  142. package/dist/index/revision-barrier.js +140 -0
  143. package/dist/index/revision-barrier.js.map +1 -0
  144. package/dist/index.d.ts +55 -0
  145. package/dist/index.d.ts.map +1 -0
  146. package/dist/index.js +37 -0
  147. package/dist/index.js.map +1 -0
  148. package/dist/ingest/adoption-eligibility.d.ts +4 -0
  149. package/dist/ingest/adoption-eligibility.d.ts.map +1 -0
  150. package/dist/ingest/adoption-eligibility.js +18 -0
  151. package/dist/ingest/adoption-eligibility.js.map +1 -0
  152. package/dist/ingest/availability.d.ts +15 -0
  153. package/dist/ingest/availability.d.ts.map +1 -0
  154. package/dist/ingest/availability.js +37 -0
  155. package/dist/ingest/availability.js.map +1 -0
  156. package/dist/ingest/extract.d.ts +58 -0
  157. package/dist/ingest/extract.d.ts.map +1 -0
  158. package/dist/ingest/extract.js +255 -0
  159. package/dist/ingest/extract.js.map +1 -0
  160. package/dist/ingest/fetch.d.ts +35 -0
  161. package/dist/ingest/fetch.d.ts.map +1 -0
  162. package/dist/ingest/fetch.js +142 -0
  163. package/dist/ingest/fetch.js.map +1 -0
  164. package/dist/ingest/inbox.d.ts +53 -0
  165. package/dist/ingest/inbox.d.ts.map +1 -0
  166. package/dist/ingest/inbox.js +110 -0
  167. package/dist/ingest/inbox.js.map +1 -0
  168. package/dist/ingest/name.d.ts +72 -0
  169. package/dist/ingest/name.d.ts.map +1 -0
  170. package/dist/ingest/name.js +208 -0
  171. package/dist/ingest/name.js.map +1 -0
  172. package/dist/ingest/parts.d.ts +78 -0
  173. package/dist/ingest/parts.d.ts.map +1 -0
  174. package/dist/ingest/parts.js +52 -0
  175. package/dist/ingest/parts.js.map +1 -0
  176. package/dist/ingest/rendition.d.ts +75 -0
  177. package/dist/ingest/rendition.d.ts.map +1 -0
  178. package/dist/ingest/rendition.js +92 -0
  179. package/dist/ingest/rendition.js.map +1 -0
  180. package/dist/ingest/store.d.ts +66 -0
  181. package/dist/ingest/store.d.ts.map +1 -0
  182. package/dist/ingest/store.js +92 -0
  183. package/dist/ingest/store.js.map +1 -0
  184. package/dist/kb/folders.d.ts +37 -0
  185. package/dist/kb/folders.d.ts.map +1 -0
  186. package/dist/kb/folders.js +133 -0
  187. package/dist/kb/folders.js.map +1 -0
  188. package/dist/kb/frontmatter.d.ts +91 -0
  189. package/dist/kb/frontmatter.d.ts.map +1 -0
  190. package/dist/kb/frontmatter.js +274 -0
  191. package/dist/kb/frontmatter.js.map +1 -0
  192. package/dist/kb/line-facts.d.ts +29 -0
  193. package/dist/kb/line-facts.d.ts.map +1 -0
  194. package/dist/kb/line-facts.js +23 -0
  195. package/dist/kb/line-facts.js.map +1 -0
  196. package/dist/kb/page.d.ts +92 -0
  197. package/dist/kb/page.d.ts.map +1 -0
  198. package/dist/kb/page.js +243 -0
  199. package/dist/kb/page.js.map +1 -0
  200. package/dist/kb/scan.d.ts +38 -0
  201. package/dist/kb/scan.d.ts.map +1 -0
  202. package/dist/kb/scan.js +109 -0
  203. package/dist/kb/scan.js.map +1 -0
  204. package/dist/kb/words.d.ts +30 -0
  205. package/dist/kb/words.d.ts.map +1 -0
  206. package/dist/kb/words.js +107 -0
  207. package/dist/kb/words.js.map +1 -0
  208. package/dist/maintenance/adopt.d.ts +65 -0
  209. package/dist/maintenance/adopt.d.ts.map +1 -0
  210. package/dist/maintenance/adopt.js +238 -0
  211. package/dist/maintenance/adopt.js.map +1 -0
  212. package/dist/maintenance/budget.d.ts +55 -0
  213. package/dist/maintenance/budget.d.ts.map +1 -0
  214. package/dist/maintenance/budget.js +61 -0
  215. package/dist/maintenance/budget.js.map +1 -0
  216. package/dist/maintenance/conflicts.d.ts +105 -0
  217. package/dist/maintenance/conflicts.d.ts.map +1 -0
  218. package/dist/maintenance/conflicts.js +368 -0
  219. package/dist/maintenance/conflicts.js.map +1 -0
  220. package/dist/maintenance/contradictions.d.ts +34 -0
  221. package/dist/maintenance/contradictions.d.ts.map +1 -0
  222. package/dist/maintenance/contradictions.js +199 -0
  223. package/dist/maintenance/contradictions.js.map +1 -0
  224. package/dist/maintenance/curate.d.ts +156 -0
  225. package/dist/maintenance/curate.d.ts.map +1 -0
  226. package/dist/maintenance/curate.js +2070 -0
  227. package/dist/maintenance/curate.js.map +1 -0
  228. package/dist/maintenance/dream.d.ts +139 -0
  229. package/dist/maintenance/dream.d.ts.map +1 -0
  230. package/dist/maintenance/dream.js +1632 -0
  231. package/dist/maintenance/dream.js.map +1 -0
  232. package/dist/maintenance/graph-candidates.d.ts +19 -0
  233. package/dist/maintenance/graph-candidates.d.ts.map +1 -0
  234. package/dist/maintenance/graph-candidates.js +120 -0
  235. package/dist/maintenance/graph-candidates.js.map +1 -0
  236. package/dist/maintenance/housekeeping.d.ts +81 -0
  237. package/dist/maintenance/housekeeping.d.ts.map +1 -0
  238. package/dist/maintenance/housekeeping.js +281 -0
  239. package/dist/maintenance/housekeeping.js.map +1 -0
  240. package/dist/maintenance/link-repairs.d.ts +58 -0
  241. package/dist/maintenance/link-repairs.d.ts.map +1 -0
  242. package/dist/maintenance/link-repairs.js +281 -0
  243. package/dist/maintenance/link-repairs.js.map +1 -0
  244. package/dist/maintenance/log.d.ts +41 -0
  245. package/dist/maintenance/log.d.ts.map +1 -0
  246. package/dist/maintenance/log.js +72 -0
  247. package/dist/maintenance/log.js.map +1 -0
  248. package/dist/maintenance/managed-item-routing.d.ts +48 -0
  249. package/dist/maintenance/managed-item-routing.d.ts.map +1 -0
  250. package/dist/maintenance/managed-item-routing.js +281 -0
  251. package/dist/maintenance/managed-item-routing.js.map +1 -0
  252. package/dist/maintenance/managed-item-sources.d.ts +38 -0
  253. package/dist/maintenance/managed-item-sources.d.ts.map +1 -0
  254. package/dist/maintenance/managed-item-sources.js +324 -0
  255. package/dist/maintenance/managed-item-sources.js.map +1 -0
  256. package/dist/maintenance/managed-items.d.ts +162 -0
  257. package/dist/maintenance/managed-items.d.ts.map +1 -0
  258. package/dist/maintenance/managed-items.js +1329 -0
  259. package/dist/maintenance/managed-items.js.map +1 -0
  260. package/dist/maintenance/merge-classifier.d.ts +19 -0
  261. package/dist/maintenance/merge-classifier.d.ts.map +1 -0
  262. package/dist/maintenance/merge-classifier.js +49 -0
  263. package/dist/maintenance/merge-classifier.js.map +1 -0
  264. package/dist/maintenance/model-telemetry.d.ts +45 -0
  265. package/dist/maintenance/model-telemetry.d.ts.map +1 -0
  266. package/dist/maintenance/model-telemetry.js +107 -0
  267. package/dist/maintenance/model-telemetry.js.map +1 -0
  268. package/dist/maintenance/observe.d.ts +72 -0
  269. package/dist/maintenance/observe.d.ts.map +1 -0
  270. package/dist/maintenance/observe.js +265 -0
  271. package/dist/maintenance/observe.js.map +1 -0
  272. package/dist/maintenance/path-policy.d.ts +83 -0
  273. package/dist/maintenance/path-policy.d.ts.map +1 -0
  274. package/dist/maintenance/path-policy.js +360 -0
  275. package/dist/maintenance/path-policy.js.map +1 -0
  276. package/dist/maintenance/plans.d.ts +366 -0
  277. package/dist/maintenance/plans.d.ts.map +1 -0
  278. package/dist/maintenance/plans.js +4060 -0
  279. package/dist/maintenance/plans.js.map +1 -0
  280. package/dist/maintenance/profile.d.ts +33 -0
  281. package/dist/maintenance/profile.d.ts.map +1 -0
  282. package/dist/maintenance/profile.js +99 -0
  283. package/dist/maintenance/profile.js.map +1 -0
  284. package/dist/maintenance/recovery.d.ts +38 -0
  285. package/dist/maintenance/recovery.d.ts.map +1 -0
  286. package/dist/maintenance/recovery.js +217 -0
  287. package/dist/maintenance/recovery.js.map +1 -0
  288. package/dist/maintenance/repair.d.ts +37 -0
  289. package/dist/maintenance/repair.d.ts.map +1 -0
  290. package/dist/maintenance/repair.js +183 -0
  291. package/dist/maintenance/repair.js.map +1 -0
  292. package/dist/maintenance/rule-drift.d.ts +104 -0
  293. package/dist/maintenance/rule-drift.d.ts.map +1 -0
  294. package/dist/maintenance/rule-drift.js +507 -0
  295. package/dist/maintenance/rule-drift.js.map +1 -0
  296. package/dist/maintenance/run-verification.d.ts +44 -0
  297. package/dist/maintenance/run-verification.d.ts.map +1 -0
  298. package/dist/maintenance/run-verification.js +253 -0
  299. package/dist/maintenance/run-verification.js.map +1 -0
  300. package/dist/maintenance/runs.d.ts +142 -0
  301. package/dist/maintenance/runs.d.ts.map +1 -0
  302. package/dist/maintenance/runs.js +439 -0
  303. package/dist/maintenance/runs.js.map +1 -0
  304. package/dist/maintenance/semantic-merge-discovery.d.ts +54 -0
  305. package/dist/maintenance/semantic-merge-discovery.d.ts.map +1 -0
  306. package/dist/maintenance/semantic-merge-discovery.js +308 -0
  307. package/dist/maintenance/semantic-merge-discovery.js.map +1 -0
  308. package/dist/maintenance/temporal.d.ts +44 -0
  309. package/dist/maintenance/temporal.d.ts.map +1 -0
  310. package/dist/maintenance/temporal.js +295 -0
  311. package/dist/maintenance/temporal.js.map +1 -0
  312. package/dist/models/client.d.ts +214 -0
  313. package/dist/models/client.d.ts.map +1 -0
  314. package/dist/models/client.js +904 -0
  315. package/dist/models/client.js.map +1 -0
  316. package/dist/models/provider-api.d.ts +28 -0
  317. package/dist/models/provider-api.d.ts.map +1 -0
  318. package/dist/models/provider-api.js +320 -0
  319. package/dist/models/provider-api.js.map +1 -0
  320. package/dist/open.d.ts +163 -0
  321. package/dist/open.d.ts.map +1 -0
  322. package/dist/open.js +382 -0
  323. package/dist/open.js.map +1 -0
  324. package/dist/ops/adopt.d.ts +12 -0
  325. package/dist/ops/adopt.d.ts.map +1 -0
  326. package/dist/ops/adopt.js +138 -0
  327. package/dist/ops/adopt.js.map +1 -0
  328. package/dist/ops/answer.d.ts +29 -0
  329. package/dist/ops/answer.d.ts.map +1 -0
  330. package/dist/ops/answer.js +557 -0
  331. package/dist/ops/answer.js.map +1 -0
  332. package/dist/ops/context.d.ts +18 -0
  333. package/dist/ops/context.d.ts.map +1 -0
  334. package/dist/ops/context.js +713 -0
  335. package/dist/ops/context.js.map +1 -0
  336. package/dist/ops/folder.d.ts +23 -0
  337. package/dist/ops/folder.d.ts.map +1 -0
  338. package/dist/ops/folder.js +130 -0
  339. package/dist/ops/folder.js.map +1 -0
  340. package/dist/ops/forget.d.ts +14 -0
  341. package/dist/ops/forget.d.ts.map +1 -0
  342. package/dist/ops/forget.js +212 -0
  343. package/dist/ops/forget.js.map +1 -0
  344. package/dist/ops/graph.d.ts +10 -0
  345. package/dist/ops/graph.d.ts.map +1 -0
  346. package/dist/ops/graph.js +480 -0
  347. package/dist/ops/graph.js.map +1 -0
  348. package/dist/ops/ingest.d.ts +40 -0
  349. package/dist/ops/ingest.d.ts.map +1 -0
  350. package/dist/ops/ingest.js +434 -0
  351. package/dist/ops/ingest.js.map +1 -0
  352. package/dist/ops/list.d.ts +9 -0
  353. package/dist/ops/list.d.ts.map +1 -0
  354. package/dist/ops/list.js +217 -0
  355. package/dist/ops/list.js.map +1 -0
  356. package/dist/ops/move.d.ts +20 -0
  357. package/dist/ops/move.d.ts.map +1 -0
  358. package/dist/ops/move.js +173 -0
  359. package/dist/ops/move.js.map +1 -0
  360. package/dist/ops/read.d.ts +9 -0
  361. package/dist/ops/read.d.ts.map +1 -0
  362. package/dist/ops/read.js +271 -0
  363. package/dist/ops/read.js.map +1 -0
  364. package/dist/ops/recall.d.ts +13 -0
  365. package/dist/ops/recall.d.ts.map +1 -0
  366. package/dist/ops/recall.js +297 -0
  367. package/dist/ops/recall.js.map +1 -0
  368. package/dist/ops/remember.d.ts +34 -0
  369. package/dist/ops/remember.d.ts.map +1 -0
  370. package/dist/ops/remember.js +660 -0
  371. package/dist/ops/remember.js.map +1 -0
  372. package/dist/ops/timeline.d.ts +11 -0
  373. package/dist/ops/timeline.d.ts.map +1 -0
  374. package/dist/ops/timeline.js +111 -0
  375. package/dist/ops/timeline.js.map +1 -0
  376. package/dist/ops/undo.d.ts +9 -0
  377. package/dist/ops/undo.d.ts.map +1 -0
  378. package/dist/ops/undo.js +38 -0
  379. package/dist/ops/undo.js.map +1 -0
  380. package/dist/ops/write.d.ts +55 -0
  381. package/dist/ops/write.d.ts.map +1 -0
  382. package/dist/ops/write.js +463 -0
  383. package/dist/ops/write.js.map +1 -0
  384. package/dist/recall/assemble.d.ts +81 -0
  385. package/dist/recall/assemble.d.ts.map +1 -0
  386. package/dist/recall/assemble.js +603 -0
  387. package/dist/recall/assemble.js.map +1 -0
  388. package/dist/recall/expand.d.ts +55 -0
  389. package/dist/recall/expand.d.ts.map +1 -0
  390. package/dist/recall/expand.js +282 -0
  391. package/dist/recall/expand.js.map +1 -0
  392. package/dist/recall/graph-arm.d.ts +17 -0
  393. package/dist/recall/graph-arm.d.ts.map +1 -0
  394. package/dist/recall/graph-arm.js +227 -0
  395. package/dist/recall/graph-arm.js.map +1 -0
  396. package/dist/recall/llm-rerank.d.ts +55 -0
  397. package/dist/recall/llm-rerank.d.ts.map +1 -0
  398. package/dist/recall/llm-rerank.js +213 -0
  399. package/dist/recall/llm-rerank.js.map +1 -0
  400. package/dist/recall/reranker-calibration.d.ts +23 -0
  401. package/dist/recall/reranker-calibration.d.ts.map +1 -0
  402. package/dist/recall/reranker-calibration.js +161 -0
  403. package/dist/recall/reranker-calibration.js.map +1 -0
  404. package/dist/recall/search.d.ts +107 -0
  405. package/dist/recall/search.d.ts.map +1 -0
  406. package/dist/recall/search.js +530 -0
  407. package/dist/recall/search.js.map +1 -0
  408. package/dist/reserved.d.ts +39 -0
  409. package/dist/reserved.d.ts.map +1 -0
  410. package/dist/reserved.js +63 -0
  411. package/dist/reserved.js.map +1 -0
  412. package/dist/rules/compile.d.ts +27 -0
  413. package/dist/rules/compile.d.ts.map +1 -0
  414. package/dist/rules/compile.js +105 -0
  415. package/dist/rules/compile.js.map +1 -0
  416. package/dist/setup/model-free.d.ts +15 -0
  417. package/dist/setup/model-free.d.ts.map +1 -0
  418. package/dist/setup/model-free.js +26 -0
  419. package/dist/setup/model-free.js.map +1 -0
  420. package/dist/setup/openai.d.ts +46 -0
  421. package/dist/setup/openai.d.ts.map +1 -0
  422. package/dist/setup/openai.js +165 -0
  423. package/dist/setup/openai.js.map +1 -0
  424. package/dist/store/db.d.ts +61 -0
  425. package/dist/store/db.d.ts.map +1 -0
  426. package/dist/store/db.js +265 -0
  427. package/dist/store/db.js.map +1 -0
  428. package/dist/store/ids.d.ts +29 -0
  429. package/dist/store/ids.d.ts.map +1 -0
  430. package/dist/store/ids.js +0 -0
  431. package/dist/store/ids.js.map +1 -0
  432. package/dist/store/migrations.d.ts +54 -0
  433. package/dist/store/migrations.d.ts.map +1 -0
  434. package/dist/store/migrations.js +923 -0
  435. package/dist/store/migrations.js.map +1 -0
  436. package/dist/store/vectors.d.ts +34 -0
  437. package/dist/store/vectors.d.ts.map +1 -0
  438. package/dist/store/vectors.js +158 -0
  439. package/dist/store/vectors.js.map +1 -0
  440. package/dist/timeline/documents.d.ts +23 -0
  441. package/dist/timeline/documents.d.ts.map +1 -0
  442. package/dist/timeline/documents.js +262 -0
  443. package/dist/timeline/documents.js.map +1 -0
  444. package/dist/watch/watcher.d.ts +43 -0
  445. package/dist/watch/watcher.d.ts.map +1 -0
  446. package/dist/watch/watcher.js +143 -0
  447. package/dist/watch/watcher.js.map +1 -0
  448. package/dist/write/atomic.d.ts +34 -0
  449. package/dist/write/atomic.d.ts.map +1 -0
  450. package/dist/write/atomic.js +58 -0
  451. package/dist/write/atomic.js.map +1 -0
  452. package/dist/write/conflict.d.ts +43 -0
  453. package/dist/write/conflict.d.ts.map +1 -0
  454. package/dist/write/conflict.js +149 -0
  455. package/dist/write/conflict.js.map +1 -0
  456. package/dist/write/edit.d.ts +59 -0
  457. package/dist/write/edit.d.ts.map +1 -0
  458. package/dist/write/edit.js +231 -0
  459. package/dist/write/edit.js.map +1 -0
  460. package/dist/write/gate.d.ts +59 -0
  461. package/dist/write/gate.d.ts.map +1 -0
  462. package/dist/write/gate.js +99 -0
  463. package/dist/write/gate.js.map +1 -0
  464. package/dist/write/journal.d.ts +90 -0
  465. package/dist/write/journal.d.ts.map +1 -0
  466. package/dist/write/journal.js +187 -0
  467. package/dist/write/journal.js.map +1 -0
  468. package/dist/write/ledger.d.ts +28 -0
  469. package/dist/write/ledger.d.ts.map +1 -0
  470. package/dist/write/ledger.js +141 -0
  471. package/dist/write/ledger.js.map +1 -0
  472. package/dist/write/placement.d.ts +29 -0
  473. package/dist/write/placement.d.ts.map +1 -0
  474. package/dist/write/placement.js +140 -0
  475. package/dist/write/placement.js.map +1 -0
  476. package/dist/write/remember-fallback.d.ts +18 -0
  477. package/dist/write/remember-fallback.d.ts.map +1 -0
  478. package/dist/write/remember-fallback.js +48 -0
  479. package/dist/write/remember-fallback.js.map +1 -0
  480. package/dist/write/retain.d.ts +61 -0
  481. package/dist/write/retain.d.ts.map +1 -0
  482. package/dist/write/retain.js +272 -0
  483. package/dist/write/retain.js.map +1 -0
  484. package/package.json +50 -0
  485. package/swift/extract.swift +232 -0
@@ -0,0 +1,530 @@
1
+ import { allocateLlmRerankIds, rerankWithLlm } from "./llm-rerank.js";
2
+ import { nativeRerankerCalibration } from "./reranker-calibration.js";
3
+ /**
4
+ * Pipeline: query expansion → vector + FTS5 hybrid → rerank → group hits by
5
+ * page → build cards → fill budget. This module is the middle: two arms, fused.
6
+ *
7
+ * FTS5 does not care about size — it is sub-millisecond at 2,000 chunks and at
8
+ * 100,000. The vector arm is brute force by decision, which is exact and
9
+ * fast enough an order of magnitude past the knowledge base this is built for.
10
+ */
11
+ export async function hybridSearch(store, embedding, options) {
12
+ const degraded = [];
13
+ const notes = [];
14
+ const lexical = lexicalSearch(store, options.queries, options.candidatesPerArm, options.chunkIds);
15
+ let vector = [];
16
+ if (embedding.available) {
17
+ const embedded = await embedding.embed(options.vectorTexts);
18
+ if (embedded.ok && embedded.value) {
19
+ // Candidate pre-filtering. Scoring only the lexical candidate
20
+ // set instead of every vector raises the ceiling several-fold for free —
21
+ // but it cannot help a purely semantic query with no lexical overlap, so it
22
+ // is a fallback for a knowledge base past the brute-force threshold, not
23
+ // the default. Below the threshold, an exact scan of everything is both
24
+ // faster than it needs to be and strictly more accurate.
25
+ const lexicalPrefilter = options.prefilterAbove !== undefined && store.vectors.count() > options.prefilterAbove
26
+ ? new Set(lexical.map((hit) => hit.chunkId))
27
+ : undefined;
28
+ const prefilter = intersect(options.chunkIds, lexicalPrefilter);
29
+ if (lexicalPrefilter)
30
+ notes.push(`vector scan pre-filtered to ${prefilter?.size ?? 0} lexical candidates`);
31
+ vector = vectorSearch(store, embedded.value, options.candidatesPerArm, prefilter);
32
+ }
33
+ else {
34
+ degraded.push(embedding.degradedReason(embedded));
35
+ if (embedded.error)
36
+ notes.push(embedded.error);
37
+ }
38
+ }
39
+ else {
40
+ degraded.push(embedding.degradedReason({}));
41
+ if (embedding.unavailableReason)
42
+ notes.push(embedding.unavailableReason);
43
+ }
44
+ const arms = [lexical, vector];
45
+ return { hits: fuseHits(arms), arms, degraded, notes };
46
+ }
47
+ /**
48
+ * FTS5 with bm25 ranking. Every query in the expansion runs separately and the
49
+ * results fuse, rather than being OR-ed into one giant MATCH — a single query
50
+ * with eight alternatives ranks a chunk matching one weak term above a chunk
51
+ * matching the original phrase.
52
+ */
53
+ function lexicalSearch(store, queries, limit, chunkIds) {
54
+ const perQuery = [];
55
+ for (const query of queries) {
56
+ const match = toMatchExpression(query);
57
+ if (!match)
58
+ continue;
59
+ try {
60
+ const rows = store.db
61
+ .prepare(`SELECT c.id AS chunk_id, c.page_id, c.document_id,
62
+ bm25(chunks_fts, 1.0, 2.0) AS rank
63
+ FROM chunks_fts
64
+ JOIN chunks c ON c.id = chunks_fts.rowid
65
+ WHERE chunks_fts MATCH ?
66
+ ${chunkIds ? 'AND c.id IN (SELECT value FROM json_each(?))' : ''}
67
+ ORDER BY rank
68
+ LIMIT ?`)
69
+ .all(match, ...(chunkIds ? [JSON.stringify([...chunkIds])] : []), limit);
70
+ perQuery.push(rows
71
+ // bm25 returns negative numbers, more negative being better.
72
+ .map((row) => ({
73
+ chunkId: row.chunk_id,
74
+ pageId: row.page_id,
75
+ documentId: row.document_id,
76
+ score: -row.rank,
77
+ from: ['lexical'],
78
+ })));
79
+ }
80
+ catch {
81
+ // A MATCH expression FTS5 rejects is a bad query, not a broken index.
82
+ continue;
83
+ }
84
+ }
85
+ return fuseHits(perQuery);
86
+ }
87
+ function vectorSearch(store, vectors, limit, prefilter) {
88
+ const perVector = [];
89
+ const identityOf = store.db.prepare('SELECT page_id, document_id FROM chunks WHERE id = ?');
90
+ for (const vector of vectors) {
91
+ if (vector.length !== store.vectors.dimensions)
92
+ continue;
93
+ const hits = store.vectors.search(vector, limit, prefilter);
94
+ const mapped = [];
95
+ for (const hit of hits) {
96
+ const row = identityOf.get(hit.chunkId);
97
+ if (!row)
98
+ continue;
99
+ mapped.push({
100
+ chunkId: hit.chunkId,
101
+ pageId: row.page_id,
102
+ documentId: row.document_id,
103
+ score: hit.score,
104
+ from: ['vector'],
105
+ // Cosine is already an absolute similarity, so it survives fusion as the
106
+ // answer to "is this actually a good match?" — which the fused rank is not.
107
+ relevance: Math.max(0, Math.min(1, hit.score)),
108
+ });
109
+ }
110
+ perVector.push(mapped);
111
+ }
112
+ return fuseHits(perVector);
113
+ }
114
+ /** Undefined means unrestricted; when both restrictions exist, both must hold. */
115
+ function intersect(left, right) {
116
+ if (!left)
117
+ return right;
118
+ if (!right)
119
+ return left;
120
+ const out = new Set();
121
+ for (const value of left)
122
+ if (right.has(value))
123
+ out.add(value);
124
+ return out;
125
+ }
126
+ /**
127
+ * Reciprocal rank fusion. Chosen over score normalization because bm25 and
128
+ * cosine are not on comparable scales and never will be — RRF only needs the
129
+ * ordering within each arm, which is the one thing both arms are reliable about.
130
+ */
131
+ const RRF_K = 60;
132
+ /**
133
+ * The LLM still judges exactly `topK` candidates. One boundary slot is selected by vector rank from a
134
+ * bounded 2× fusion pool, which lets a strong paraphrase just outside the fused window compete without
135
+ * increasing model tokens or comparing cosine with reciprocal-rank scores.
136
+ */
137
+ export const RERANK_CANDIDATE_SELECTION_VERSION = 'fusion-semantic-tail-v1';
138
+ export const RERANK_CANDIDATE_POOL_MULTIPLIER = 2;
139
+ export function selectRerankCandidates(hits, topK) {
140
+ if (topK <= 0 || hits.length === 0)
141
+ return [];
142
+ if (hits.length <= topK || topK < 2)
143
+ return hits.slice(0, topK);
144
+ const fixed = hits.slice(0, topK - 1);
145
+ const boundary = hits.slice(topK - 1, topK * RERANK_CANDIDATE_POOL_MULTIPLIER);
146
+ let selected = boundary[0];
147
+ for (const candidate of boundary.slice(1)) {
148
+ if (candidate.relevance !== undefined && candidate.relevance > (selected.relevance ?? -Infinity)) {
149
+ selected = candidate;
150
+ }
151
+ }
152
+ return [...fixed, selected];
153
+ }
154
+ export function fuseHits(lists) {
155
+ const populated = lists.filter((list) => list.length > 0);
156
+ // One list needs no fusion, and passing it through keeps its own scores rather
157
+ // than flattening them all onto the reciprocal-rank scale.
158
+ if (populated.length <= 1)
159
+ return populated[0] ?? [];
160
+ const merged = new Map();
161
+ for (const list of populated) {
162
+ const sorted = [...list].sort((a, b) => b.score - a.score);
163
+ for (let rank = 0; rank < sorted.length; rank++) {
164
+ const hit = sorted[rank];
165
+ const contribution = 1 / (RRF_K + rank + 1);
166
+ const existing = merged.get(hit.chunkId);
167
+ if (existing) {
168
+ existing.score += contribution;
169
+ for (const arm of hit.from)
170
+ if (!existing.from.includes(arm))
171
+ existing.from.push(arm);
172
+ existing.graphPaths = mergeGraphPaths(existing.graphPaths, hit.graphPaths);
173
+ if (hit.relevance !== undefined) {
174
+ existing.relevance = Math.max(existing.relevance ?? 0, hit.relevance);
175
+ }
176
+ }
177
+ else {
178
+ merged.set(hit.chunkId, { ...hit, score: contribution, from: [...hit.from] });
179
+ }
180
+ }
181
+ }
182
+ return [...merged.values()].sort((a, b) => b.score - a.score);
183
+ }
184
+ function mergeGraphPaths(left, right) {
185
+ if (!left?.length)
186
+ return right?.length ? [...right] : undefined;
187
+ if (!right?.length)
188
+ return left;
189
+ const merged = new Map(left.map((path) => [graphPathKey(path), path]));
190
+ for (const path of right)
191
+ merged.set(graphPathKey(path), path);
192
+ return [...merged.values()].slice(0, 3);
193
+ }
194
+ function graphPathKey(path) {
195
+ return `${path.nodes.map((node) => node.id).join('\0')}\0${path.relations.join('\0')}\0${path.evidence
196
+ .map((locator) => [
197
+ locator.kind,
198
+ locator.slug,
199
+ locator.document,
200
+ locator.event,
201
+ locator.fact,
202
+ locator.line_start,
203
+ locator.line_end,
204
+ locator.field,
205
+ ].join('\0'))
206
+ .join('\0')}`;
207
+ }
208
+ /**
209
+ * FTS5's MATCH syntax will happily reject a natural-language query — a bare `?`,
210
+ * an unbalanced quote, a stray `NEAR`. Quoting every token and OR-ing them makes
211
+ * any user input a legal expression, which matters because a thrown syntax error
212
+ * here would read to the caller as "nothing matched".
213
+ */
214
+ export function toMatchExpression(query) {
215
+ const tokens = query
216
+ .toLowerCase()
217
+ .replace(/[^\p{L}\p{N}\s'-]/gu, ' ')
218
+ .split(/\s+/)
219
+ .map((token) => token.replace(/^[-']+|[-']+$/g, ''))
220
+ .filter((token) => token.length > 1);
221
+ if (tokens.length === 0)
222
+ return null;
223
+ // A quoted phrase for the whole query, plus each token, so an exact phrase
224
+ // outranks a bag of words without excluding partial matches.
225
+ const quoted = tokens.map((token) => `"${token.replace(/"/g, '')}"`);
226
+ const phrase = tokens.length > 1 ? `"${tokens.join(' ')}" OR ` : '';
227
+ return `${phrase}${quoted.join(' OR ')}`;
228
+ }
229
+ /**
230
+ * Without a reranker, hybrid score ordering stands. With one, the top
231
+ * candidates are re-scored against the original query. A native cross-encoder
232
+ * sees each query/passage pair; LLM mode applies one guarded listwise prompt.
233
+ *
234
+ * Two measured facts about cost, since they are counter-intuitive: the reranker is
235
+ * by far the most expensive stage in the pipeline (≈1s against ≈33ms for embedding
236
+ * and ≈4ms for the lexical arm on a local bge-reranker-v2-m3), and its cost is per
237
+ * *candidate*, not per character. So `topK` is the only real latency dial, and
238
+ * turning it down trades away which pages come back — see `config/default.jsonc`.
239
+ *
240
+ * The output is on **one scale with the un-reranked tail**, which is not a detail.
241
+ * A cross-encoder emits logits (bge-reranker spans roughly -12 to +8) while fusion
242
+ * emits reciprocal ranks around 0.01-0.2. Returning both in one array means any
243
+ * later `Math.max` over a page's chunks prefers a mediocre fused hit to a
244
+ * confidently-judged one, and the reranker silently stops mattering.
245
+ */
246
+ export async function rerankHits(store, reranker, query, hits, topK, maxChars = 800,
247
+ /**
248
+ * Where this model puts the relevant/irrelevant boundary on its own logit scale. Subtracted
249
+ * before the sigmoid so that boundary lands on 0.5, which is what every threshold downstream
250
+ * already assumes. 0 leaves a model already centred there untouched.
251
+ */
252
+ scoreOffset = 0, excludeIrrelevant = false) {
253
+ if (!reranker.available || hits.length === 0) {
254
+ return reranker.available
255
+ ? { hits, degraded: null, note: null, qualification: null }
256
+ : {
257
+ hits,
258
+ degraded: reranker.degradedReason({}),
259
+ note: reranker.unavailableReason,
260
+ qualification: null,
261
+ };
262
+ }
263
+ const candidates = reranker.rerankerMode === 'llm' ? selectRerankCandidates(hits, topK) : hits.slice(0, topK);
264
+ // One prepared statement for the whole batch rather than one per candidate.
265
+ const select = store.db.prepare('SELECT heading_path, text FROM chunks WHERE id = ?');
266
+ const graphEvidence = graphEvidenceReader(store);
267
+ const texts = candidates.map((hit) => {
268
+ const row = select.get(hit.chunkId);
269
+ if (!row)
270
+ return '';
271
+ const full = row.heading_path ? `${row.heading_path}\n${row.text}` : row.text;
272
+ const graphContext = renderGraphRerankContext(hit.graphPaths, graphEvidence);
273
+ const graphBudget = graphContext ? Math.floor(maxChars / 2) : 0;
274
+ const boundedGraph = graphContext.slice(0, graphBudget);
275
+ const boundedContent = full.slice(0, maxChars - boundedGraph.length);
276
+ const candidateText = boundedGraph
277
+ ? `[Graph path and its cited evidence]\n${boundedGraph}\n[Candidate]\n${boundedContent}`
278
+ : boundedContent;
279
+ // Bounds the request payload. Measured as *free* rather than fast: truncating
280
+ // from the 4,000-char chunk cap to 800 changed neither latency (1036 → 1028 ms)
281
+ // nor a single result across 8 queries, because this reranker's cost is per
282
+ // candidate, not per character. `topK` is the latency dial, and lowering that
283
+ // does change which pages come back. Kept anyway — a cross-encoder's relevance
284
+ // signal is front-loaded, and an unbounded payload is worth not having.
285
+ return candidateText.slice(0, maxChars);
286
+ });
287
+ if (reranker.rerankerMode === 'llm') {
288
+ const ids = allocateLlmRerankIds(query, candidates.map((hit) => `${hit.pageId ?? 'document'}:${hit.chunkId}`));
289
+ const llmCandidates = candidates.map((hit, index) => {
290
+ return {
291
+ id: ids[index],
292
+ text: texts[index] ?? '',
293
+ sourceKind: hit.pageId ? 'page' : 'document',
294
+ matchedBy: hit.from,
295
+ };
296
+ });
297
+ const result = await rerankWithLlm(reranker, query, llmCandidates);
298
+ if (!result.ok || !result.value) {
299
+ return {
300
+ hits,
301
+ degraded: reranker.degradedReason(result),
302
+ note: result.error ?? null,
303
+ qualification: null,
304
+ };
305
+ }
306
+ // The listwise model supplies the order. Scores encode only that order; the separately
307
+ // returned relevance label is the absolute signal consumers may threshold.
308
+ const rejected = result.value.filter((entry) => excludeIrrelevant && entry.relevance === 0).length;
309
+ const reordered = result.value
310
+ .map((entry, rank) => ({ entry, rank }))
311
+ .filter(({ entry }) => !excludeIrrelevant || entry.relevance > 0)
312
+ .map(({ entry, rank }) => {
313
+ const hit = candidates[entry.index];
314
+ return {
315
+ ...hit,
316
+ score: (candidates.length - rank) / candidates.length,
317
+ relevance: entry.relevance / 3,
318
+ };
319
+ });
320
+ return finishRerank(hits, candidates, reordered, {
321
+ model: 'llm',
322
+ model_id: reranker.modelId ?? undefined,
323
+ latency_ms: result.latencyMs,
324
+ input_tokens: result.usage?.inputTokens ?? null,
325
+ output_tokens: result.usage?.outputTokens ?? null,
326
+ total_tokens: result.usage?.totalTokens ?? null,
327
+ applied: excludeIrrelevant,
328
+ judged: candidates.length,
329
+ rejected,
330
+ unjudged: hits.length - candidates.length,
331
+ basis: excludeIrrelevant ? 'llm_grade' : 'disabled',
332
+ threshold: null,
333
+ });
334
+ }
335
+ const result = await reranker.rerank(query, texts, candidates.length);
336
+ if (!result.ok || !result.value) {
337
+ return {
338
+ hits,
339
+ degraded: reranker.degradedReason(result),
340
+ note: result.error ?? null,
341
+ qualification: null,
342
+ };
343
+ }
344
+ const entries = completeNativeRerank(result.value, candidates.length);
345
+ if (!entries) {
346
+ return {
347
+ hits,
348
+ degraded: 'rerank_failed',
349
+ note: 'rerank returned an incomplete or invalid candidate permutation',
350
+ qualification: null,
351
+ };
352
+ }
353
+ let resolvedOffset;
354
+ let calibration;
355
+ if (scoreOffset === 'auto') {
356
+ const outcome = await nativeRerankerCalibration(store, reranker);
357
+ if (!outcome.ok || !outcome.value) {
358
+ // Ordering remains useful, but without a trustworthy boundary these are relative ranks and
359
+ // qualification must stay off. Guessing here is how an unfamiliar model erases good recall.
360
+ const reordered = entries
361
+ .sort((a, b) => b.score - a.score)
362
+ .map((entry, rank) => ({
363
+ ...candidates[entry.index],
364
+ score: (candidates.length - rank) / candidates.length,
365
+ }));
366
+ return finishRerank(hits, candidates, reordered, {
367
+ model: 'native',
368
+ model_id: reranker.modelId ?? undefined,
369
+ latency_ms: result.latencyMs,
370
+ applied: false,
371
+ judged: candidates.length,
372
+ rejected: 0,
373
+ unjudged: hits.length - candidates.length,
374
+ basis: 'calibration_failed',
375
+ threshold: null,
376
+ }, outcome.error ?? 'native reranker auto-calibration failed; qualification was not applied');
377
+ }
378
+ resolvedOffset = outcome.value.scoreOffset;
379
+ calibration = 'native_auto';
380
+ }
381
+ else {
382
+ resolvedOffset = scoreOffset;
383
+ calibration = 'native_manual';
384
+ }
385
+ const judged = [];
386
+ for (const entry of entries) {
387
+ const hit = candidates[entry.index];
388
+ // A logit through a sigmoid is a relevance in (0, 1) — comparable across
389
+ // queries, and readable as a score rather than as a model internal.
390
+ // The cross-encoder saw the query and the passage together, so its judgement
391
+ // replaces cosine as the absolute signal rather than merging with it.
392
+ //
393
+ // `scoreOffset` is what makes "comparable" true across *models* as well as queries. Two
394
+ // cross-encoders that rank a set identically can sit on entirely different scales: measured
395
+ // here, an irrelevant pair scores ~−11 on bge-reranker-v2-m3 and ~−0.3 on
396
+ // gte-reranker-modernbert-base, so the same 0.5 cutoff admits 0.8% of irrelevant pairs on
397
+ // one and 42.5% on the other. Recentring here keeps every threshold downstream honest.
398
+ const relevance = sigmoid(entry.score - resolvedOffset);
399
+ if (hit)
400
+ judged.push({ ...hit, score: relevance, relevance });
401
+ }
402
+ judged.sort((a, b) => b.score - a.score);
403
+ const reordered = excludeIrrelevant ? judged.filter((hit) => (hit.relevance ?? 0) >= 0.5) : judged;
404
+ return finishRerank(hits, candidates, reordered, {
405
+ model: 'native',
406
+ model_id: reranker.modelId ?? undefined,
407
+ latency_ms: result.latencyMs,
408
+ applied: excludeIrrelevant,
409
+ judged: candidates.length,
410
+ rejected: excludeIrrelevant ? judged.length - reordered.length : 0,
411
+ unjudged: hits.length - candidates.length,
412
+ basis: excludeIrrelevant ? calibration : 'disabled',
413
+ threshold: resolvedOffset,
414
+ });
415
+ }
416
+ function graphEvidenceReader(store) {
417
+ let page;
418
+ let document;
419
+ try {
420
+ page = store.db.prepare(`SELECT c.text
421
+ FROM chunks c
422
+ JOIN pages p ON p.id = c.page_id
423
+ WHERE p.slug = ? AND c.document_id IS NULL
424
+ ORDER BY CASE WHEN ? BETWEEN c.line_start AND c.line_end THEN 0 ELSE 1 END, c.ord
425
+ LIMIT 1`);
426
+ document = store.db.prepare(`SELECT text
427
+ FROM chunks
428
+ WHERE document_id = ?
429
+ ORDER BY ord
430
+ LIMIT 1`);
431
+ }
432
+ catch {
433
+ // Small embedders may supply only the chunk table. Path identities still help their reranker even when
434
+ // this optional supporting excerpt cannot be loaded from the handle.
435
+ return () => '';
436
+ }
437
+ const cache = new Map();
438
+ return (locator) => {
439
+ const key = `${locator.kind}\0${locator.slug ?? ''}\0${locator.document ?? ''}\0${locator.line_start ?? ''}`;
440
+ const cached = cache.get(key);
441
+ if (cached !== undefined)
442
+ return cached;
443
+ const row = locator.slug
444
+ ? page.get(locator.slug, locator.line_start ?? -1)
445
+ : locator.document
446
+ ? document.get(locator.document)
447
+ : undefined;
448
+ const text = row?.text.replace(/\s+/g, ' ').trim().slice(0, 180) ?? '';
449
+ cache.set(key, text);
450
+ return text;
451
+ };
452
+ }
453
+ function renderGraphRerankContext(paths, evidenceText) {
454
+ if (!paths?.length)
455
+ return '';
456
+ return paths
457
+ .slice(0, 2)
458
+ .map((path) => {
459
+ const route = [];
460
+ for (let index = 0; index < path.nodes.length; index++) {
461
+ const node = path.nodes[index];
462
+ route.push(node.slug ?? node.document ?? node.label ?? node.id);
463
+ const relation = path.relations[index];
464
+ if (relation)
465
+ route.push(`-${relation}->`);
466
+ }
467
+ const evidence = path.evidence
468
+ .map(evidenceText)
469
+ .filter(Boolean)
470
+ .map((text) => `Evidence: ${text}`);
471
+ return [`Path: ${route.join(' ')}`, ...evidence].join('\n');
472
+ })
473
+ .join('\n');
474
+ }
475
+ function finishRerank(hits, judged, reordered, qualification, note = null) {
476
+ // Qualification is a claim about what may be shown. Candidates outside the bounded window
477
+ // were not judged, so filling empty slots from that tail would silently undo the filter.
478
+ if (qualification.applied)
479
+ return { hits: reordered, degraded: null, note, qualification };
480
+ const seen = new Set(reordered.map((hit) => hit.chunkId));
481
+ const judgedIds = new Set(judged.map((hit) => hit.chunkId));
482
+ const tail = hits.filter((hit) => !seen.has(hit.chunkId) && !judgedIds.has(hit.chunkId));
483
+ // The reranker judged the bounded selection; the tail was never looked at, so it cannot
484
+ // outrank a judged hit. Compress it into the band below the weakest judged one,
485
+ // preserving its fused order.
486
+ const floor = reordered.at(-1)?.score ?? 0;
487
+ const rescaledTail = tail.map((hit, index) => ({
488
+ ...hit,
489
+ score: (floor * (tail.length - index)) / (tail.length + 1),
490
+ }));
491
+ return { hits: [...reordered, ...rescaledTail], degraded: null, note, qualification };
492
+ }
493
+ function completeNativeRerank(entries, count) {
494
+ if (entries.length !== count)
495
+ return null;
496
+ const seen = new Set();
497
+ for (const entry of entries) {
498
+ if (!Number.isInteger(entry.index) ||
499
+ entry.index < 0 ||
500
+ entry.index >= count ||
501
+ !Number.isFinite(entry.score) ||
502
+ seen.has(entry.index)) {
503
+ return null;
504
+ }
505
+ seen.add(entry.index);
506
+ }
507
+ return entries;
508
+ }
509
+ function sigmoid(logit) {
510
+ return 1 / (1 + Math.exp(-logit));
511
+ }
512
+ /**
513
+ * Puts fused scores on a readable 0..1 scale when no reranker ran. Reciprocal
514
+ * rank fusion produces values around 0.016 whose absolute magnitude means
515
+ * nothing, and a card reporting `score: 0.016` reads as "barely a match" when it
516
+ * is in fact the best hit in the knowledge base.
517
+ *
518
+ * The result is **relative within one result set** — it says how this hit compares
519
+ * to the best hit here, not how relevant it is in the abstract. That is the only
520
+ * honest reading of a fused rank, and it is what the field is documented as.
521
+ */
522
+ export function normalizeScores(hits) {
523
+ if (hits.length === 0)
524
+ return hits;
525
+ const best = Math.max(...hits.map((hit) => hit.score));
526
+ if (!Number.isFinite(best) || best <= 0)
527
+ return hits;
528
+ return hits.map((hit) => ({ ...hit, score: hit.score / best }));
529
+ }
530
+ //# sourceMappingURL=search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/recall/search.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ import type { AknoConfig } from './config/schema.ts';
2
+ /**
3
+ * Reserved paths. Almost everything in a knowledge base is the user's; this
4
+ * is the whole list of what is not, and the rule that governs all of it is the
5
+ * same: **if a reserved path already exists and isn't what Akno expects, leave
6
+ * it completely alone.**
7
+ *
8
+ * Both `open()` (which refuses to start rather than adopt one) and `doctor`
9
+ * (which reports it) need the same predicate, and two copies that could disagree
10
+ * about whether a file is a ledger is exactly the bug worth not having.
11
+ */
12
+ /**
13
+ * The ledger's slug — `timeline.md` becomes `timeline`.
14
+ *
15
+ * One derivation, three callers. It used to be written out separately in the write path and
16
+ * in the indexer, which is two chances to disagree about which page is the ledger, and
17
+ * whichever one was wrong would be wrong silently.
18
+ */
19
+ export declare function ledgerSlug(config: AknoConfig): string;
20
+ /**
21
+ * **Every slug prefix a caller must not aim a page write at.**
22
+ *
23
+ * These are Akno's own structures, not the user's notes: the ledger is maintained by
24
+ * `insertEvent` and nothing else, the inbox is a queue that empties itself, observations are
25
+ * written by the cycle with their own evidence, and the journal is a record of what happened.
26
+ * A claim landing on any of them is a claim in a file whose shape means something specific —
27
+ * and on the ledger, where prose is invisible to the event parser, it is a claim in a file
28
+ * that will never be read back.
29
+ */
30
+ export declare function reservedSlugs(config: AknoConfig): string[];
31
+ /** True when `slug` is a reserved path or lives underneath one. */
32
+ export declare function isReserved(slug: string, config: AknoConfig): boolean;
33
+ /**
34
+ * An event ledger has event lines in it. A project plan someone happens to have
35
+ * called `timeline.md` does not, and appending `- **2026-08-06** | …` into the
36
+ * middle of their document is not a recoverable mistake.
37
+ */
38
+ export declare function looksLikeLedger(absPath: string): boolean;
39
+ //# sourceMappingURL=reserved.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reserved.d.ts","sourceRoot":"","sources":["../src/reserved.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAErD;;;;;;;;;GASG;AAEH;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAErD;AAED;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,EAAE,CAO1D;AAED,mEAAmE;AACnE,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,OAAO,CAEpE;AAMD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CASxD"}