@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,63 @@
1
+ import fs from 'node:fs';
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 function ledgerSlug(config) {
20
+ return stripExtension(config.paths.timeline);
21
+ }
22
+ /**
23
+ * **Every slug prefix a caller must not aim a page write at.**
24
+ *
25
+ * These are Akno's own structures, not the user's notes: the ledger is maintained by
26
+ * `insertEvent` and nothing else, the inbox is a queue that empties itself, observations are
27
+ * written by the cycle with their own evidence, and the journal is a record of what happened.
28
+ * A claim landing on any of them is a claim in a file whose shape means something specific —
29
+ * and on the ledger, where prose is invisible to the event parser, it is a claim in a file
30
+ * that will never be read back.
31
+ */
32
+ export function reservedSlugs(config) {
33
+ return [
34
+ ledgerSlug(config),
35
+ stripExtension(config.paths.inbox),
36
+ stripExtension(config.paths.observations),
37
+ stripExtension(config.paths.journal),
38
+ ].filter((slug) => slug.length > 0);
39
+ }
40
+ /** True when `slug` is a reserved path or lives underneath one. */
41
+ export function isReserved(slug, config) {
42
+ return reservedSlugs(config).some((reserved) => slug === reserved || slug.startsWith(`${reserved}/`));
43
+ }
44
+ function stripExtension(relPath) {
45
+ return relPath.replace(/\.(md|markdown)$/i, '').replace(/\/+$/, '');
46
+ }
47
+ /**
48
+ * An event ledger has event lines in it. A project plan someone happens to have
49
+ * called `timeline.md` does not, and appending `- **2026-08-06** | …` into the
50
+ * middle of their document is not a recoverable mistake.
51
+ */
52
+ export function looksLikeLedger(absPath) {
53
+ try {
54
+ const head = fs.readFileSync(absPath, 'utf8').slice(0, 8000);
55
+ return /^\s*[-*]\s+\*\*\d{4}-\d{2}-\d{2}\*\*\s*\|/m.test(head) || /^#\s*Timeline/im.test(head);
56
+ }
57
+ catch {
58
+ // Unreadable is not the same as "wrong shape". The indexer reports read
59
+ // failures; refusing to start over one would be the wrong call.
60
+ return true;
61
+ }
62
+ }
63
+ //# sourceMappingURL=reserved.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reserved.js","sourceRoot":"","sources":["../src/reserved.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AAGzB;;;;;;;;;GASG;AAEH;;;;;;GAMG;AACH,MAAM,UAAU,UAAU,CAAC,MAAkB;IAC3C,OAAO,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AAC/C,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,aAAa,CAAC,MAAkB;IAC9C,OAAO;QACL,UAAU,CAAC,MAAM,CAAC;QAClB,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC;QAClC,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC;QACzC,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC;KACrC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACtC,CAAC;AAED,mEAAmE;AACnE,MAAM,UAAU,UAAU,CAAC,IAAY,EAAE,MAAkB;IACzD,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,QAAQ,GAAG,CAAC,CAAC,CAAC;AACxG,CAAC;AAED,SAAS,cAAc,CAAC,OAAe;IACrC,OAAO,OAAO,CAAC,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AACtE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,OAAe;IAC7C,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QAC7D,OAAO,4CAA4C,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjG,CAAC;IAAC,MAAM,CAAC;QACP,wEAAwE;QACxE,gEAAgE;QAChE,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
@@ -0,0 +1,27 @@
1
+ import { FolderRuleDoc, type FolderRule } from '../config/schema.ts';
2
+ /**
3
+ * Rules are glob-scoped and **most-specific-wins**. Specificity is derived
4
+ * from the shape of the glob, not from declaration order — so reordering the
5
+ * config file can never change which rule applies, and two files' rules can be
6
+ * merged without one accidentally shadowing the other by position.
7
+ */
8
+ export declare function compileRules(layers: {
9
+ folders: Record<string, unknown>;
10
+ source: string;
11
+ }[]): FolderRule[];
12
+ export declare function matchesGlob(slug: string, glob: string): boolean;
13
+ export interface RuleMatch {
14
+ rule: FolderRule | null;
15
+ /** Every rule that matched, most specific first. `akno rules <path>` prints these. */
16
+ candidates: FolderRule[];
17
+ }
18
+ export declare function matchRules(slug: string, rules: FolderRule[]): RuleMatch;
19
+ /**
20
+ * The effective rule for a slug: fields are taken from the most specific rule
21
+ * that declares them, so `documents/**: {role}` and `**: {rank}` compose
22
+ * instead of one erasing the other.
23
+ */
24
+ export declare function effectiveRule(slug: string, rules: FolderRule[]): Partial<FolderRule>;
25
+ /** Most-specific matching rule that actually declares one field of the effective policy. */
26
+ export declare function declaringRule(slug: string, rules: FolderRule[], field: keyof FolderRuleDoc): FolderRule | null;
27
+ //# sourceMappingURL=compile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compile.d.ts","sourceRoot":"","sources":["../../src/rules/compile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,KAAK,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAErE;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EAAE,GAAG,UAAU,EAAE,CAqBzG;AAgDD,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAE/D;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,UAAU,GAAG,IAAI,CAAC;IACxB,sFAAsF;IACtF,UAAU,EAAE,UAAU,EAAE,CAAC;CAC1B;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,SAAS,CAGvE;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,UAAU,CAAC,CAWpF;AAED,4FAA4F;AAC5F,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,UAAU,EAAE,EACnB,KAAK,EAAE,MAAM,aAAa,GACzB,UAAU,GAAG,IAAI,CAEnB"}
@@ -0,0 +1,105 @@
1
+ import { FolderRuleDoc } from "../config/schema.js";
2
+ /**
3
+ * Rules are glob-scoped and **most-specific-wins**. Specificity is derived
4
+ * from the shape of the glob, not from declaration order — so reordering the
5
+ * config file can never change which rule applies, and two files' rules can be
6
+ * merged without one accidentally shadowing the other by position.
7
+ */
8
+ export function compileRules(layers) {
9
+ const byGlob = new Map();
10
+ for (const layer of layers) {
11
+ for (const [glob, raw] of Object.entries(layer.folders)) {
12
+ const parsed = FolderRuleDoc.safeParse(raw);
13
+ if (!parsed.success)
14
+ continue;
15
+ // A later layer replaces an earlier one for the same glob rather than
16
+ // merging into it: a rule is a statement about a folder, and half of one
17
+ // inherited from a file you have not read is worse than none.
18
+ byGlob.set(glob, {
19
+ ...parsed.data,
20
+ glob,
21
+ source: layer.source,
22
+ specificity: specificityOf(glob),
23
+ });
24
+ }
25
+ }
26
+ // Sorted most-specific-first so the first match wins and lookup can stop.
27
+ return [...byGlob.values()].sort((a, b) => b.specificity - a.specificity || b.glob.length - a.glob.length);
28
+ }
29
+ /**
30
+ * A literal path segment is worth more than a `*`, which is worth more than a
31
+ * `**`. `documents/tax/**` beats `documents/**` beats `**`.
32
+ */
33
+ function specificityOf(glob) {
34
+ let score = 0;
35
+ for (const segment of glob.split('/')) {
36
+ if (segment === '**')
37
+ score += 1;
38
+ else if (segment.includes('*'))
39
+ score += 4;
40
+ else
41
+ score += 10;
42
+ }
43
+ return score;
44
+ }
45
+ /** Cached because `matches` is called once per page per index pass. */
46
+ const regexCache = new Map();
47
+ function globToRegExp(glob) {
48
+ const cached = regexCache.get(glob);
49
+ if (cached)
50
+ return cached;
51
+ let out = '^';
52
+ const segments = glob.split('/');
53
+ for (let i = 0; i < segments.length; i++) {
54
+ const segment = segments[i];
55
+ const isLast = i === segments.length - 1;
56
+ if (segment === '**') {
57
+ // `a/**` matches `a/b` and `a/b/c`, and also `a` itself — a rule on a
58
+ // folder's contents should cover the folder's own index page.
59
+ out += isLast ? '(?:/.*)?' : '(?:/[^/]*)*';
60
+ continue;
61
+ }
62
+ if (i > 0)
63
+ out += '/';
64
+ out += segment
65
+ .replace(/[.+^${}()|[\]\\]/g, '\\$&')
66
+ .replace(/\*/g, '[^/]*')
67
+ .replace(/\?/g, '[^/]');
68
+ }
69
+ out += '$';
70
+ // A leading `**/` produced a stray slash requirement; normalize it away.
71
+ const regex = new RegExp(out.replace('^(?:/', '^(?:'), 'i');
72
+ regexCache.set(glob, regex);
73
+ return regex;
74
+ }
75
+ export function matchesGlob(slug, glob) {
76
+ return globToRegExp(glob).test(slug);
77
+ }
78
+ export function matchRules(slug, rules) {
79
+ const candidates = rules.filter((rule) => matchesGlob(slug, rule.glob));
80
+ return { rule: candidates[0] ?? null, candidates };
81
+ }
82
+ /**
83
+ * The effective rule for a slug: fields are taken from the most specific rule
84
+ * that declares them, so `documents/**: {role}` and `**: {rank}` compose
85
+ * instead of one erasing the other.
86
+ */
87
+ export function effectiveRule(slug, rules) {
88
+ const { candidates } = matchRules(slug, rules);
89
+ const out = {};
90
+ // Least specific first, so more specific values overwrite.
91
+ for (const rule of [...candidates].reverse()) {
92
+ for (const [key, value] of Object.entries(rule)) {
93
+ if (key === 'glob' || key === 'source' || key === 'specificity')
94
+ continue;
95
+ if (value !== undefined)
96
+ out[key] = value;
97
+ }
98
+ }
99
+ return out;
100
+ }
101
+ /** Most-specific matching rule that actually declares one field of the effective policy. */
102
+ export function declaringRule(slug, rules, field) {
103
+ return rules.find((rule) => matchesGlob(slug, rule.glob) && rule[field] !== undefined) ?? null;
104
+ }
105
+ //# sourceMappingURL=compile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compile.js","sourceRoot":"","sources":["../../src/rules/compile.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { ConfigDoc } from '../config/schema.ts';
2
+ import type { SetupMaintenanceMode } from './openai.ts';
3
+ export declare const MODEL_FREE_PRESET = "no-model";
4
+ export declare const MODEL_FREE_PRESET_STATUS = "supported";
5
+ export interface ModelFreePresetOptions {
6
+ aknoPath: string;
7
+ maintenance: SetupMaintenanceMode;
8
+ }
9
+ /**
10
+ * Disable every model consumer explicitly. Provider definitions are deliberately absent from
11
+ * this overlay: an existing endpoint can remain available for a later upgrade without any Akno
12
+ * role being allowed to call it.
13
+ */
14
+ export declare function modelFreePreset(options: ModelFreePresetOptions): ConfigDoc;
15
+ //# sourceMappingURL=model-free.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-free.d.ts","sourceRoot":"","sources":["../../src/setup/model-free.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAExD,eAAO,MAAM,iBAAiB,aAAa,CAAC;AAC5C,eAAO,MAAM,wBAAwB,cAAc,CAAC;AAEpD,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,oBAAoB,CAAC;CACnC;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG,SAAS,CAiB1E"}
@@ -0,0 +1,26 @@
1
+ export const MODEL_FREE_PRESET = 'no-model';
2
+ export const MODEL_FREE_PRESET_STATUS = 'supported';
3
+ /**
4
+ * Disable every model consumer explicitly. Provider definitions are deliberately absent from
5
+ * this overlay: an existing endpoint can remain available for a later upgrade without any Akno
6
+ * role being allowed to call it.
7
+ */
8
+ export function modelFreePreset(options) {
9
+ const disabled = { id: null, enabled: false };
10
+ return {
11
+ akno_path: options.aknoPath,
12
+ models: {
13
+ embedding: { ...disabled },
14
+ reranker: { ...disabled },
15
+ expansion: { ...disabled },
16
+ derive: { ...disabled },
17
+ answer: { ...disabled },
18
+ vision: { ...disabled },
19
+ },
20
+ maintenance: {
21
+ profile: options.maintenance,
22
+ model: null,
23
+ },
24
+ };
25
+ }
26
+ //# sourceMappingURL=model-free.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-free.js","sourceRoot":"","sources":["../../src/setup/model-free.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,iBAAiB,GAAG,UAAU,CAAC;AAC5C,MAAM,CAAC,MAAM,wBAAwB,GAAG,WAAW,CAAC;AAOpD;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,OAA+B;IAC7D,MAAM,QAAQ,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAW,CAAC;IACvD,OAAO;QACL,SAAS,EAAE,OAAO,CAAC,QAAQ;QAC3B,MAAM,EAAE;YACN,SAAS,EAAE,EAAE,GAAG,QAAQ,EAAE;YAC1B,QAAQ,EAAE,EAAE,GAAG,QAAQ,EAAE;YACzB,SAAS,EAAE,EAAE,GAAG,QAAQ,EAAE;YAC1B,MAAM,EAAE,EAAE,GAAG,QAAQ,EAAE;YACvB,MAAM,EAAE,EAAE,GAAG,QAAQ,EAAE;YACvB,MAAM,EAAE,EAAE,GAAG,QAAQ,EAAE;SACxB;QACD,WAAW,EAAE;YACX,OAAO,EAAE,OAAO,CAAC,WAAW;YAC5B,KAAK,EAAE,IAAI;SACZ;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,46 @@
1
+ import type { ConfigDoc, AknoConfig } from '../config/schema.ts';
2
+ export declare const OPENAI_LUNA_PRESET = "openai-luna";
3
+ export declare const OPENAI_LUNA_PRESET_STATUS = "recommended";
4
+ export declare const OPENAI_LUNA_EMBEDDING_MODEL = "text-embedding-3-small";
5
+ export declare const OPENAI_LUNA_GENERATIVE_MODEL = "gpt-5.6-luna";
6
+ export declare const OPENAI_LUNA_EMBEDDING_DIMENSIONS = 1536;
7
+ export type SetupMaintenanceMode = 'audit' | 'review' | 'autonomous';
8
+ export interface OpenAiLunaPresetOptions {
9
+ aknoPath: string;
10
+ maintenance: SetupMaintenanceMode;
11
+ }
12
+ export interface SetupRolePreflight {
13
+ status: 'ok' | 'unavailable' | 'failed';
14
+ provider: string;
15
+ model: string;
16
+ error: string | null;
17
+ }
18
+ export interface OpenAiLunaPreflightReport {
19
+ kind: 'openai_luna_preflight';
20
+ preset: typeof OPENAI_LUNA_PRESET;
21
+ presetStatus: typeof OPENAI_LUNA_PRESET_STATUS;
22
+ passed: boolean;
23
+ credentialPresent: boolean;
24
+ embedding: SetupRolePreflight & {
25
+ dimensions: number | null;
26
+ };
27
+ generative: SetupRolePreflight & {
28
+ promptVersion: string | null;
29
+ schemaVersion: string | null;
30
+ latencyMs: number;
31
+ };
32
+ }
33
+ /**
34
+ * The minimum is one endpoint and credential, not one model. The exact ranking window is the
35
+ * release-qualified v9 selection; changing it requires new benchmark evidence.
36
+ */
37
+ export declare function openAiLunaPreset(options: OpenAiLunaPresetOptions): ConfigDoc;
38
+ /**
39
+ * Sends only invented fixtures. A failed embedding check does not suppress the generative check:
40
+ * setup needs to distinguish a credential outage from a project that permits Luna but denies every
41
+ * embedding model, which otherwise looks like one vague provider failure.
42
+ */
43
+ export declare function preflightOpenAiLuna(config: AknoConfig): Promise<OpenAiLunaPreflightReport>;
44
+ /** A setup receipt needs the actionable provider fact, not a pasted response body. */
45
+ export declare function setupPreflightError(value: string): string;
46
+ //# sourceMappingURL=openai.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../src/setup/openai.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAIjE,eAAO,MAAM,kBAAkB,gBAAgB,CAAC;AAChD,eAAO,MAAM,yBAAyB,gBAAgB,CAAC;AACvD,eAAO,MAAM,2BAA2B,2BAA2B,CAAC;AACpE,eAAO,MAAM,4BAA4B,iBAAiB,CAAC;AAC3D,eAAO,MAAM,gCAAgC,OAAO,CAAC;AAErD,MAAM,MAAM,oBAAoB,GAAG,OAAO,GAAG,QAAQ,GAAG,YAAY,CAAC;AAErE,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,oBAAoB,CAAC;CACnC;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,IAAI,GAAG,aAAa,GAAG,QAAQ,CAAC;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,uBAAuB,CAAC;IAC9B,MAAM,EAAE,OAAO,kBAAkB,CAAC;IAClC,YAAY,EAAE,OAAO,yBAAyB,CAAC;IAC/C,MAAM,EAAE,OAAO,CAAC;IAChB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,SAAS,EAAE,kBAAkB,GAAG;QAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;IAC9D,UAAU,EAAE,kBAAkB,GAAG;QAC/B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;QAC7B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;QAC7B,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,uBAAuB,GAAG,SAAS,CA2D5E;AAED;;;;GAIG;AACH,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,yBAAyB,CAAC,CA0DhG;AA0BD,sFAAsF;AACtF,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CASzD"}
@@ -0,0 +1,165 @@
1
+ import { ModelClient } from "../models/client.js";
2
+ import { runLlmRankingProbe } from "../bench/llm-ranking-probe.js";
3
+ export const OPENAI_LUNA_PRESET = 'openai-luna';
4
+ export const OPENAI_LUNA_PRESET_STATUS = 'recommended';
5
+ export const OPENAI_LUNA_EMBEDDING_MODEL = 'text-embedding-3-small';
6
+ export const OPENAI_LUNA_GENERATIVE_MODEL = 'gpt-5.6-luna';
7
+ export const OPENAI_LUNA_EMBEDDING_DIMENSIONS = 1536;
8
+ /**
9
+ * The minimum is one endpoint and credential, not one model. The exact ranking window is the
10
+ * release-qualified v9 selection; changing it requires new benchmark evidence.
11
+ */
12
+ export function openAiLunaPreset(options) {
13
+ return {
14
+ akno_path: options.aknoPath,
15
+ providers: {
16
+ openai: {
17
+ base_url: 'https://api.openai.com/v1',
18
+ api_key: { env: 'AKNO_OPENAI_API_KEY' },
19
+ api: 'responses',
20
+ },
21
+ },
22
+ models: {
23
+ embedding: {
24
+ provider: 'openai',
25
+ id: OPENAI_LUNA_EMBEDDING_MODEL,
26
+ dimensions: OPENAI_LUNA_EMBEDDING_DIMENSIONS,
27
+ },
28
+ reranker: {
29
+ provider: 'openai',
30
+ id: OPENAI_LUNA_GENERATIVE_MODEL,
31
+ enabled: true,
32
+ mode: 'llm',
33
+ exclude_irrelevant: true,
34
+ top_k: 10,
35
+ max_chars: 800,
36
+ max_output_tokens: 256,
37
+ reasoning_effort: 'none',
38
+ },
39
+ expansion: {
40
+ provider: 'openai',
41
+ id: OPENAI_LUNA_GENERATIVE_MODEL,
42
+ reasoning_effort: 'none',
43
+ },
44
+ derive: {
45
+ provider: 'openai',
46
+ id: OPENAI_LUNA_GENERATIVE_MODEL,
47
+ reasoning_effort: 'low',
48
+ },
49
+ answer: {
50
+ provider: 'openai',
51
+ id: OPENAI_LUNA_GENERATIVE_MODEL,
52
+ max_output_tokens: 1024,
53
+ reasoning_effort: 'low',
54
+ },
55
+ vision: {
56
+ provider: 'openai',
57
+ id: OPENAI_LUNA_GENERATIVE_MODEL,
58
+ enabled: true,
59
+ reasoning_effort: 'low',
60
+ },
61
+ },
62
+ maintenance: {
63
+ profile: options.maintenance,
64
+ model: {
65
+ provider: 'openai',
66
+ id: OPENAI_LUNA_GENERATIVE_MODEL,
67
+ reasoning_effort: 'medium',
68
+ },
69
+ },
70
+ };
71
+ }
72
+ /**
73
+ * Sends only invented fixtures. A failed embedding check does not suppress the generative check:
74
+ * setup needs to distinguish a credential outage from a project that permits Luna but denies every
75
+ * embedding model, which otherwise looks like one vague provider failure.
76
+ */
77
+ export async function preflightOpenAiLuna(config) {
78
+ const provider = config.providers.openai ?? null;
79
+ const credentialPresent = provider?.apiKey !== null && provider?.apiKey !== undefined;
80
+ if (!provider || !credentialPresent) {
81
+ const error = provider
82
+ ? 'AKNO_OPENAI_API_KEY is not set'
83
+ : 'the openai provider has no resolved endpoint';
84
+ return {
85
+ kind: 'openai_luna_preflight',
86
+ preset: OPENAI_LUNA_PRESET,
87
+ presetStatus: OPENAI_LUNA_PRESET_STATUS,
88
+ passed: false,
89
+ credentialPresent: false,
90
+ embedding: {
91
+ status: 'unavailable',
92
+ provider: 'openai',
93
+ model: OPENAI_LUNA_EMBEDDING_MODEL,
94
+ dimensions: null,
95
+ error,
96
+ },
97
+ generative: unavailableGenerative(error),
98
+ };
99
+ }
100
+ const [embeddingResult, ranking] = await Promise.all([
101
+ new ModelClient(config.models.embedding).embed(['The current Zephyr QX-100 warranty lasts five years.']),
102
+ runLlmRankingProbe(config, {
103
+ provider: 'openai',
104
+ model: OPENAI_LUNA_GENERATIVE_MODEL,
105
+ reasoningEffort: 'none',
106
+ }),
107
+ ]);
108
+ const dimensions = embeddingResult.value?.[0]?.length ?? null;
109
+ const embeddingPassed = embeddingResult.ok && dimensions === OPENAI_LUNA_EMBEDDING_DIMENSIONS;
110
+ const embeddingError = embeddingPassed
111
+ ? null
112
+ : embeddingResult.error
113
+ ? setupPreflightError(embeddingResult.error)
114
+ : dimensions === null
115
+ ? 'embedding response contained no vector'
116
+ : `embedding response had ${dimensions} dimensions; expected ${OPENAI_LUNA_EMBEDDING_DIMENSIONS}`;
117
+ const generative = generativePreflight(ranking);
118
+ return {
119
+ kind: 'openai_luna_preflight',
120
+ preset: OPENAI_LUNA_PRESET,
121
+ presetStatus: OPENAI_LUNA_PRESET_STATUS,
122
+ passed: embeddingPassed && ranking.passed,
123
+ credentialPresent: true,
124
+ embedding: {
125
+ status: embeddingPassed ? 'ok' : 'failed',
126
+ provider: 'openai',
127
+ model: OPENAI_LUNA_EMBEDDING_MODEL,
128
+ dimensions,
129
+ error: embeddingError,
130
+ },
131
+ generative,
132
+ };
133
+ }
134
+ function unavailableGenerative(error) {
135
+ return {
136
+ status: 'unavailable',
137
+ provider: 'openai',
138
+ model: OPENAI_LUNA_GENERATIVE_MODEL,
139
+ promptVersion: null,
140
+ schemaVersion: null,
141
+ latencyMs: 0,
142
+ error,
143
+ };
144
+ }
145
+ function generativePreflight(ranking) {
146
+ return {
147
+ status: ranking.passed ? 'ok' : 'failed',
148
+ provider: ranking.provider,
149
+ model: ranking.model,
150
+ promptVersion: ranking.promptVersion,
151
+ schemaVersion: ranking.schemaVersion,
152
+ latencyMs: ranking.latencyMs,
153
+ error: ranking.error ? setupPreflightError(ranking.error) : null,
154
+ };
155
+ }
156
+ /** A setup receipt needs the actionable provider fact, not a pasted response body. */
157
+ export function setupPreflightError(value) {
158
+ const denied = value.match(/(\w+) endpoint returned (\d+)[\s\S]*does not have access to model [`"']?([^`"'\s\\]+)/i);
159
+ if (denied) {
160
+ return `${denied[1]} endpoint returned ${denied[2]}: configured project does not have access to model ${denied[3]}`;
161
+ }
162
+ const compact = value.replace(/\s+/g, ' ').trim();
163
+ return compact.length <= 300 ? compact : `${compact.slice(0, 299)}…`;
164
+ }
165
+ //# sourceMappingURL=openai.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/setup/openai.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ import Database from 'better-sqlite3';
2
+ import { type VectorIndex } from './vectors.ts';
3
+ export interface StoreOptions {
4
+ dbPath: string;
5
+ embeddingDimensions: number;
6
+ /** Open without taking the write lock. A second process gets this. */
7
+ readOnly?: boolean;
8
+ }
9
+ export interface Store {
10
+ readonly db: Database.Database;
11
+ readonly vectors: VectorIndex;
12
+ readonly vecLoaded: boolean;
13
+ readonly readOnly: boolean;
14
+ /** True when a model change invalidated every vector and a re-embed is owed. */
15
+ readonly needsReembed: boolean;
16
+ transaction<T>(fn: () => T): T;
17
+ meta(key: string): string | null;
18
+ setMeta(key: string, value: string): void;
19
+ close(): void;
20
+ }
21
+ /**
22
+ * There is no engine cold start — opening a SQLite file is half a
23
+ * millisecond regardless of size, because there is no VM to boot and no server
24
+ * to connect to. What *is* expensive is spawning a process per operation (33ms
25
+ * vs 0.04ms for a long-lived handle), which is why `akno serve` exists and why
26
+ * this function is called once per process rather than once per call.
27
+ */
28
+ export declare function openStore(options: StoreOptions): Store;
29
+ /**
30
+ * Exactly one process may hold the write handle. A second process that
31
+ * finds a live lock opens read-only and *says so*, rather than racing. This is
32
+ * not paranoia: the library being importable makes it genuinely easy to end up
33
+ * with a daemon and a script both reconciling the same directory, and WAL
34
+ * protects the file's integrity, not the correctness of two watchers.
35
+ */
36
+ export interface WriteLock {
37
+ readonly acquired: boolean;
38
+ readonly heldByPid: number | null;
39
+ /**
40
+ * Why it was not taken, when it wasn't. "A live process holds it" and "the lock file
41
+ * could not be written" call for different actions, and reporting the second as the
42
+ * first sends the user looking for a process that does not exist.
43
+ */
44
+ readonly failure?: 'held' | 'unwritable';
45
+ release(): void;
46
+ }
47
+ /**
48
+ * Take the write handle, waiting briefly for a handover.
49
+ *
50
+ * `waitMs` exists because of how a restart actually goes: the supervisor starts the new process
51
+ * while the old one is still closing its database and unlinking its lock. Checking once, at that
52
+ * instant, is how a service comes up read-only — and it then stays that way for its whole life,
53
+ * failing every write with the pid of a process that has since exited. Observed on a real install:
54
+ * hours of `remember` calls refused by a daemon deferring to a ghost.
55
+ *
56
+ * A few seconds covers the handover and costs nothing when the lock is free, which is the normal
57
+ * case. It does not paper over a genuine second Akno — that one is still running when the wait
58
+ * runs out, and is still refused.
59
+ */
60
+ export declare function acquireWriteLock(lockPath: string, waitMs?: number): WriteLock;
61
+ //# sourceMappingURL=db.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../src/store/db.ts"],"names":[],"mappings":"AAEA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAgCtC,OAAO,EAAwC,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AAEtF,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,mBAAmB,EAAE,MAAM,CAAC;IAC5B,sEAAsE;IACtE,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,KAAK;IACpB,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,CAAC;IAC/B,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;IAC9B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,gFAAgF;IAChF,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;IAC/B,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IACjC,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1C,KAAK,IAAI,IAAI,CAAC;CACf;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,YAAY,GAAG,KAAK,CAoFtD;AA6GD;;;;;;GAMG;AACH,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC;;;;OAIG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,YAAY,CAAC;IACzC,OAAO,IAAI,IAAI,CAAC;CACjB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,SAAI,GAAG,SAAS,CAiCxE"}