@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,217 @@
1
+ import { AknoError } from '@tenphi/akno-protocol';
2
+ import { MAINTENANCE_TRANSFORMS } from "../config/schema.js";
3
+ export const MAINTENANCE_ROLLBACK_PAUSE_THRESHOLD = 3;
4
+ export function maintenanceRecoveryStatus(ctx) {
5
+ if (!recoveryTableAvailable(ctx))
6
+ return emptyMaintenanceRecoveryStatus();
7
+ const rows = ctx.store.db
8
+ .prepare('SELECT * FROM maintenance_recovery_state ORDER BY scope, transform')
9
+ .all();
10
+ const entries = rows.flatMap((row) => {
11
+ const entry = recoveryEntry(row);
12
+ return entry ? [entry] : [];
13
+ });
14
+ const profile = entries.find((entry) => entry.scope === 'profile') ?? null;
15
+ const transforms = entries.filter((entry) => entry.scope === 'transform');
16
+ return {
17
+ automaticApply: profile
18
+ ? 'paused'
19
+ : transforms.some((entry) => entry.pausedAt !== null)
20
+ ? 'partially_paused'
21
+ : 'available',
22
+ profile,
23
+ transforms,
24
+ };
25
+ }
26
+ export function resumeMaintenanceRecovery(ctx, scope) {
27
+ if (!ctx.writable)
28
+ throw new AknoError('read_only', 'resuming automatic maintenance needs the write handle');
29
+ if (!recoveryTableAvailable(ctx))
30
+ return emptyMaintenanceRecoveryStatus();
31
+ const key = 'profile' in scope ? 'profile' : `transform:${scope.transform}`;
32
+ const removed = ctx.store.db.prepare('DELETE FROM maintenance_recovery_state WHERE scope_key = ?').run(key);
33
+ if (removed.changes === 0) {
34
+ throw new AknoError('not_found', `${recoveryScopeLabel(scope)} is not paused and has no failure streak`);
35
+ }
36
+ return maintenanceRecoveryStatus(ctx);
37
+ }
38
+ /** Lower only automatic authority. Audit/review runs remain available while recovery is pending. */
39
+ export function configWithMaintenanceRecovery(config, status, mode) {
40
+ if (mode !== 'auto')
41
+ return config;
42
+ const paused = status.transforms
43
+ .filter((entry) => entry.pausedAt !== null && entry.transform !== null)
44
+ .map((entry) => entry.transform);
45
+ if (paused.length === 0)
46
+ return config;
47
+ const policies = { ...config.maintenance.policies };
48
+ for (const transform of paused)
49
+ policies[transform] = 'off';
50
+ return { ...config, maintenance: { ...config.maintenance, policies } };
51
+ }
52
+ export function assertProfileAutomaticApplyAvailable(status, mode) {
53
+ if (mode !== 'auto' || !status.profile)
54
+ return;
55
+ throw new AknoError('conflict', 'automatic maintenance is paused because Akno could not prove a safe apply state; inspect status and recovery plans, then run `akno dream resume --profile`', { maintenance_pause: 'profile', reason: status.profile.reason });
56
+ }
57
+ export function recordMaintenanceRecovery(ctx, input) {
58
+ if (!ctx.writable || !recoveryTableAvailable(ctx))
59
+ return maintenanceRecoveryStatus(ctx);
60
+ const now = new Date().toISOString();
61
+ const rollbacks = new Map();
62
+ const successes = new Set();
63
+ let profileReason = verificationPauseReason(input.verification);
64
+ ctx.store.transaction(() => {
65
+ for (const planId of new Set(input.planIds)) {
66
+ const plan = ctx.store.db
67
+ .prepare('SELECT 1 AS present FROM maintenance_plans WHERE id = ?')
68
+ .get(planId);
69
+ if (!plan) {
70
+ profileReason ??= 'plan_store_unavailable';
71
+ continue;
72
+ }
73
+ const items = ctx.store.db
74
+ .prepare(`SELECT id, kind, status, verification FROM maintenance_items
75
+ WHERE plan_id = ? AND recovery_recorded_at IS NULL
76
+ AND status IN ('applied', 'verification_failed')
77
+ ORDER BY ord, rowid`)
78
+ .all(planId);
79
+ for (const item of items) {
80
+ const transform = maintenanceTransform(item.kind);
81
+ const verificationStatus = storedVerificationStatus(item.verification);
82
+ if (item.status === 'verification_failed') {
83
+ if (verificationStatus === 'rolled_back' && transform && input.mode === 'auto') {
84
+ rollbacks.set(transform, (rollbacks.get(transform) ?? 0) + 1);
85
+ }
86
+ else if (verificationStatus === 'failed') {
87
+ profileReason ??= 'live_bytes_uncertain';
88
+ }
89
+ }
90
+ else if (transform && verificationStatus === 'passed' && input.mode === 'auto') {
91
+ successes.add(transform);
92
+ }
93
+ ctx.store.db
94
+ .prepare('UPDATE maintenance_items SET recovery_recorded_at = ? WHERE id = ?')
95
+ .run(now, item.id);
96
+ }
97
+ }
98
+ for (const transform of MAINTENANCE_TRANSFORMS) {
99
+ const failures = rollbacks.get(transform) ?? 0;
100
+ if (failures > 0) {
101
+ recordRollbackFailures(ctx, transform, failures, input.runId, now);
102
+ }
103
+ else if (successes.has(transform)) {
104
+ clearUnpausedTransformStreak(ctx, transform);
105
+ }
106
+ }
107
+ if (profileReason)
108
+ pauseProfile(ctx, profileReason, input.runId, now);
109
+ });
110
+ return maintenanceRecoveryStatus(ctx);
111
+ }
112
+ function recordRollbackFailures(ctx, transform, failures, runId, now) {
113
+ const key = `transform:${transform}`;
114
+ const existing = ctx.store.db
115
+ .prepare('SELECT consecutive_failures, paused_at FROM maintenance_recovery_state WHERE scope_key = ?')
116
+ .get(key);
117
+ const consecutive = (existing?.consecutive_failures ?? 0) + failures;
118
+ const pausedAt = existing?.paused_at ?? (consecutive >= MAINTENANCE_ROLLBACK_PAUSE_THRESHOLD ? now : null);
119
+ ctx.store.db
120
+ .prepare(`INSERT INTO maintenance_recovery_state
121
+ (scope_key, scope, transform, reason_code, consecutive_failures, paused_at,
122
+ last_failure_at, last_run_id, updated_at)
123
+ VALUES (?, 'transform', ?, 'rollback_threshold', ?, ?, ?, ?, ?)
124
+ ON CONFLICT(scope_key) DO UPDATE SET
125
+ reason_code = excluded.reason_code,
126
+ consecutive_failures = excluded.consecutive_failures,
127
+ paused_at = excluded.paused_at,
128
+ last_failure_at = excluded.last_failure_at,
129
+ last_run_id = excluded.last_run_id,
130
+ updated_at = excluded.updated_at`)
131
+ .run(key, transform, consecutive, pausedAt, now, runId, now);
132
+ }
133
+ function clearUnpausedTransformStreak(ctx, transform) {
134
+ ctx.store.db
135
+ .prepare(`DELETE FROM maintenance_recovery_state
136
+ WHERE scope_key = ? AND scope = 'transform' AND paused_at IS NULL`)
137
+ .run(`transform:${transform}`);
138
+ }
139
+ function pauseProfile(ctx, reason, runId, now) {
140
+ ctx.store.db
141
+ .prepare(`INSERT INTO maintenance_recovery_state
142
+ (scope_key, scope, transform, reason_code, consecutive_failures, paused_at,
143
+ last_failure_at, last_run_id, updated_at)
144
+ VALUES ('profile', 'profile', NULL, ?, 1, ?, ?, ?, ?)
145
+ ON CONFLICT(scope_key) DO UPDATE SET
146
+ reason_code = excluded.reason_code,
147
+ consecutive_failures = CASE
148
+ WHEN maintenance_recovery_state.last_run_id = excluded.last_run_id
149
+ THEN maintenance_recovery_state.consecutive_failures
150
+ ELSE maintenance_recovery_state.consecutive_failures + 1
151
+ END,
152
+ paused_at = coalesce(maintenance_recovery_state.paused_at, excluded.paused_at),
153
+ last_failure_at = excluded.last_failure_at,
154
+ last_run_id = excluded.last_run_id,
155
+ updated_at = excluded.updated_at`)
156
+ .run(reason, now, now, runId, now);
157
+ }
158
+ function verificationPauseReason(verification) {
159
+ if (!verification)
160
+ return null;
161
+ const codes = new Set(verification.issues.map((issue) => issue.code));
162
+ if (codes.has('plan_unavailable'))
163
+ return 'plan_store_unavailable';
164
+ if (codes.has('missing_change_id'))
165
+ return 'journal_receipt_missing';
166
+ if (codes.has('affected_path_mismatch') || codes.has('snapshot_scan_failed')) {
167
+ return 'verification_unproven';
168
+ }
169
+ return null;
170
+ }
171
+ function recoveryEntry(row) {
172
+ const transform = row.transform ? maintenanceTransform(row.transform) : null;
173
+ if (row.scope === 'transform' && !transform)
174
+ return null;
175
+ return {
176
+ scope: row.scope,
177
+ transform,
178
+ reason: row.reason_code,
179
+ consecutiveFailures: row.consecutive_failures,
180
+ pausedAt: row.paused_at,
181
+ lastFailureAt: row.last_failure_at,
182
+ lastRunId: row.last_run_id,
183
+ recoveryCommand: row.paused_at === null
184
+ ? null
185
+ : row.scope === 'profile'
186
+ ? 'akno dream resume --profile'
187
+ : `akno dream resume --transform ${transform}`,
188
+ };
189
+ }
190
+ function storedVerificationStatus(value) {
191
+ if (!value)
192
+ return null;
193
+ try {
194
+ const parsed = JSON.parse(value);
195
+ return typeof parsed.status === 'string' ? parsed.status : null;
196
+ }
197
+ catch {
198
+ return null;
199
+ }
200
+ }
201
+ function maintenanceTransform(value) {
202
+ return MAINTENANCE_TRANSFORMS.includes(value)
203
+ ? value
204
+ : null;
205
+ }
206
+ function recoveryScopeLabel(scope) {
207
+ return 'profile' in scope ? 'the maintenance profile' : `${scope.transform} maintenance`;
208
+ }
209
+ function recoveryTableAvailable(ctx) {
210
+ return Boolean(ctx.store.db
211
+ .prepare("SELECT 1 AS present FROM sqlite_master WHERE type = 'table' AND name = ?")
212
+ .get('maintenance_recovery_state'));
213
+ }
214
+ function emptyMaintenanceRecoveryStatus() {
215
+ return { automaticApply: 'available', profile: null, transforms: [] };
216
+ }
217
+ //# sourceMappingURL=recovery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recovery.js","sourceRoot":"","sources":["../../src/maintenance/recovery.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ import { z } from 'zod';
2
+ import type { AknoContext } from '../context.ts';
3
+ import type { CrossPageConflict } from './conflicts.ts';
4
+ /**
5
+ * Similarity-only candidates for explaining why a broken link was declined.
6
+ *
7
+ * These candidates never authorize a write. Plan-backed link repair requires an exact alias,
8
+ * canonical identity, or recorded move; resemblance is useful diagnostic context, not identity.
9
+ */
10
+ export declare function candidatesFor(target: string, slugs: string[]): string[];
11
+ export declare const REWRITE_SCHEMA: z.ZodObject<{
12
+ line: z.ZodNullable<z.ZodString>;
13
+ }, z.core.$strip>;
14
+ /**
15
+ * Turn a superseded claim into a past-tense one.
16
+ *
17
+ * The sentence is what makes a fact: the deriver reads the file, so a fact marked stale only in the
18
+ * database is live again the next time its page is indexed. Rewriting the line is therefore the only
19
+ * durable way to say "this was true once" — and it is also the least destructive, because the claim
20
+ * and its value are still on the page for anyone reading it.
21
+ */
22
+ declare function rewriteAsHistory(ctx: AknoContext, stale: string, current: string, boundary?: string): Promise<string | null>;
23
+ /**
24
+ * Whether a rewrite kept the numbers it was told to keep.
25
+ *
26
+ * The guard that matters. Changing the tense of a claim is a tidy-up; changing its value is the
27
+ * model quietly deciding what is true about somebody's rent, and no verdict is worth that. Every
28
+ * number in the original must survive into the rewrite.
29
+ */
30
+ export declare function preservesValues(before: string, after: string): boolean;
31
+ export declare function preservesAuthoredTokens(before: string, after: string): boolean;
32
+ /** The exact tokens behind `preservesValues`, for guardrail diagnostics and audit logs. */
33
+ export declare function missingNumericValues(before: string, after: string): string[];
34
+ /** Conflicts worth acting on: judged real, with a claim the model named as current. */
35
+ export declare function actionable(conflicts: CrossPageConflict[]): CrossPageConflict[];
36
+ export { rewriteAsHistory as rewriteAsHistoryForTesting };
37
+ //# sourceMappingURL=repair.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repair.d.ts","sourceRoot":"","sources":["../../src/maintenance/repair.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAExD;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAiBvE;AAsCD,eAAO,MAAM,cAAc;;iBAA4C,CAAC;AAExE;;;;;;;GAOG;AACH,iBAAe,gBAAgB,CAC7B,GAAG,EAAE,WAAW,EAChB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAwBxB;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAEtE;AAoCD,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAE9E;AAED,2FAA2F;AAC3F,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAI5E;AA6CD,uFAAuF;AACvF,wBAAgB,UAAU,CAAC,SAAS,EAAE,iBAAiB,EAAE,GAAG,iBAAiB,EAAE,CAI9E;AAED,OAAO,EAAE,gBAAgB,IAAI,0BAA0B,EAAE,CAAC"}
@@ -0,0 +1,183 @@
1
+ import { z } from 'zod';
2
+ import { parseJsonLoose } from "../models/client.js";
3
+ /**
4
+ * Similarity-only candidates for explaining why a broken link was declined.
5
+ *
6
+ * These candidates never authorize a write. Plan-backed link repair requires an exact alias,
7
+ * canonical identity, or recorded move; resemblance is useful diagnostic context, not identity.
8
+ */
9
+ export function candidatesFor(target, slugs) {
10
+ const wanted = tokens(target);
11
+ if (wanted.length === 0)
12
+ return [];
13
+ // A one-word link — `[[Boiler]]` — is matched only against a page whose own last segment is that
14
+ // word. Coverage would let it match anything containing it, and one word is not an
15
+ // identification: `[[passport]]` on its own could be anybody's.
16
+ if (wanted.length === 1) {
17
+ const only = wanted[0];
18
+ return slugs.filter((slug) => tokens(slug.split('/').pop() ?? slug).join('') === only);
19
+ }
20
+ return slugs.filter((slug) => {
21
+ const has = new Set(tokens(slug));
22
+ const covered = wanted.filter((token) => has.has(token)).length;
23
+ return covered / wanted.length >= 0.75;
24
+ });
25
+ }
26
+ /**
27
+ * The words of a slug, path included.
28
+ *
29
+ * The path matters, which is the whole trick. `personal/residence-permit-ada-marlow` and
30
+ * `ada-marlow/residence-permit` are one page reorganised: every word survives the move, only its
31
+ * position changed. Compare last segments alone and the two look unrelated; compare whole slugs and
32
+ * they are four words out of five.
33
+ *
34
+ * It is also what keeps the dangerous case out. `bo-winters/spare-travel-passport`
35
+ * against a page called `ada-marlow/passport` shares one word in five — a different person's
36
+ * document, which an earlier version repointed with full confidence because `passport` was a
37
+ * substring. Found on a dry run, before it touched anything.
38
+ */
39
+ function tokens(slug) {
40
+ return slug
41
+ .toLowerCase()
42
+ .split(/[^a-z0-9]+/)
43
+ .filter((token) => token.length > 1);
44
+ }
45
+ const REWRITE_STALE = `A personal knowledge base holds two claims about the same thing, and one of them is no longer
46
+ current. You are given the sentence that is out of date, the claim that replaced it, and the exact effective
47
+ date established by that current claim.
48
+
49
+ Rewrite the out-of-date sentence so it reads as history rather than as a current fact. Reply with JSON only:
50
+
51
+ {"line": "the rewritten sentence"}
52
+
53
+ Rules:
54
+ - Keep every number, name and date exactly as it appears. You are changing the tense, not the value.
55
+ - State explicitly that the old claim applied before the supplied effective date. Copy that date exactly.
56
+ - Do not add any other number or date.
57
+ - Keep the sentence's own formatting: if it starts with "- " or "**Rent:**", keep that.
58
+ - One line. Never add a second sentence, and never add anything that was not already known.
59
+ - If the sentence cannot be rewritten without changing what it says, reply {"line": null}.`;
60
+ export const REWRITE_SCHEMA = z.object({ line: z.string().nullable() });
61
+ /**
62
+ * Turn a superseded claim into a past-tense one.
63
+ *
64
+ * The sentence is what makes a fact: the deriver reads the file, so a fact marked stale only in the
65
+ * database is live again the next time its page is indexed. Rewriting the line is therefore the only
66
+ * durable way to say "this was true once" — and it is also the least destructive, because the claim
67
+ * and its value are still on the page for anyone reading it.
68
+ */
69
+ async function rewriteAsHistory(ctx, stale, current, boundary) {
70
+ if (!ctx.models.derive.available)
71
+ return null;
72
+ const result = await ctx.models.derive.chat([
73
+ { role: 'system', content: REWRITE_STALE },
74
+ {
75
+ role: 'user',
76
+ content: `Out of date:\n${stale}\n\nReplaced by:\n${current}` +
77
+ (boundary ? `\n\nEffective date:\n${boundary}` : ''),
78
+ },
79
+ ], { schema: REWRITE_SCHEMA, maxTokens: 300 });
80
+ if (!result.ok || !result.value)
81
+ return null;
82
+ const parsed = parseJsonLoose(result.value);
83
+ if (!parsed || (typeof parsed.line !== 'string' && parsed.line !== null)) {
84
+ ctx.models.derive.reportInvalidResponse();
85
+ return null;
86
+ }
87
+ const line = typeof parsed?.line === 'string' ? parsed.line.trim() : '';
88
+ if (!line || line.includes('\n'))
89
+ return null;
90
+ return line;
91
+ }
92
+ /**
93
+ * Whether a rewrite kept the numbers it was told to keep.
94
+ *
95
+ * The guard that matters. Changing the tense of a claim is a tidy-up; changing its value is the
96
+ * model quietly deciding what is true about somebody's rent, and no verdict is worth that. Every
97
+ * number in the original must survive into the rewrite.
98
+ */
99
+ export function preservesValues(before, after) {
100
+ return missingNumericValues(before, after).length === 0;
101
+ }
102
+ /**
103
+ * A history rewrite may change grammar, but it may not silently rename a subject, place, product,
104
+ * or other authored content. Common glue words are excluded so adding "Previously" and changing
105
+ * "is" to "was" remains possible; every meaningful alphanumeric token must survive.
106
+ */
107
+ function missingAuthoredTokens(before, after) {
108
+ const ignored = new Set([
109
+ 'and',
110
+ 'are',
111
+ 'been',
112
+ 'for',
113
+ 'from',
114
+ 'has',
115
+ 'have',
116
+ 'into',
117
+ 'is',
118
+ 'its',
119
+ 'of',
120
+ 'on',
121
+ 'the',
122
+ 'to',
123
+ 'was',
124
+ 'were',
125
+ 'with',
126
+ ]);
127
+ const authoredTokens = (value) => value
128
+ .toLowerCase()
129
+ .match(/[\p{L}\p{N}]+/gu)
130
+ ?.filter((token) => token.length >= 3 && !ignored.has(token)) ?? [];
131
+ const present = new Set(authoredTokens(after));
132
+ return [...new Set(authoredTokens(before).filter((token) => !present.has(token)))];
133
+ }
134
+ export function preservesAuthoredTokens(before, after) {
135
+ return missingAuthoredTokens(before, after).length === 0;
136
+ }
137
+ /** The exact tokens behind `preservesValues`, for guardrail diagnostics and audit logs. */
138
+ export function missingNumericValues(before, after) {
139
+ const afterValues = new Set(numericValues(after).map((value) => value.canonical));
140
+ const missing = numericValues(before).filter((value) => !afterValues.has(value.canonical));
141
+ return [...new Set(missing.map((value) => value.raw))];
142
+ }
143
+ /**
144
+ * Values, not punctuation that happens to follow them.
145
+ *
146
+ * The old digit-and-punctuation regex included the comma in `1902,` and the full stop in `25.`. A model
147
+ * moving that value to the middle of a sentence was therefore treated like one deleting it.
148
+ * Composite dates, times and ranges are captured first so harmless separator and leading-zero
149
+ * changes compare semantically rather than as typography.
150
+ */
151
+ function numericValues(text) {
152
+ const pattern = /\d{4}[-/]\d{1,2}[-/]\d{1,2}|\d{1,2}:\d{2}|\d+(?:[.,]\d+)*(?:\s*[\u2013\u2014-]\s*\d+(?:[.,]\d+)*)?/g;
153
+ return [...text.matchAll(pattern)].map((match) => ({
154
+ raw: match[0],
155
+ canonical: canonicalNumericValue(match[0]),
156
+ }));
157
+ }
158
+ function canonicalNumericValue(raw) {
159
+ const compact = raw.replace(/\s+/g, '').replace(/[\u2013\u2014]/g, '-');
160
+ if (/^\d{4}[-/]\d{1,2}[-/]\d{1,2}$/.test(compact)) {
161
+ const [year, month, day] = compact.split(/[-/]/);
162
+ return `${year}-${Number(month)}-${Number(day)}`;
163
+ }
164
+ if (/^\d{1,2}:\d{2}$/.test(compact)) {
165
+ const [hour, minute] = compact.split(':');
166
+ return `${Number(hour)}:${minute}`;
167
+ }
168
+ const range = /^(.*?)-(.*)$/.exec(compact);
169
+ if (range)
170
+ return `${canonicalNumber(range[1])}-${canonicalNumber(range[2])}`;
171
+ return canonicalNumber(compact);
172
+ }
173
+ function canonicalNumber(value) {
174
+ // A comma followed by groups of exactly three digits is a thousands separator. A decimal
175
+ // comma remains significant, as does a decimal point.
176
+ return /^\d{1,3}(?:,\d{3})+$/.test(value) ? value.replaceAll(',', '') : value;
177
+ }
178
+ /** Conflicts worth acting on: judged real, with a claim the model named as current. */
179
+ export function actionable(conflicts) {
180
+ return conflicts.filter((conflict) => conflict.verdict === 'superseded' && conflict.likelyCurrent && conflict.claims.length >= 2);
181
+ }
182
+ export { rewriteAsHistory as rewriteAsHistoryForTesting };
183
+ //# sourceMappingURL=repair.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repair.js","sourceRoot":"","sources":["../../src/maintenance/repair.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,104 @@
1
+ import type { AknoContext } from '../context.ts';
2
+ interface RuleDriftBase {
3
+ kind: 'rule_drift';
4
+ slug: string;
5
+ relPath: string;
6
+ inputHash: string;
7
+ ruleGlob: string;
8
+ ruleFingerprint: string;
9
+ }
10
+ interface TypeRuleDriftDraft extends RuleDriftBase {
11
+ correction: 'type';
12
+ before: string;
13
+ after: string;
14
+ expectedType: string;
15
+ foundType: string;
16
+ }
17
+ interface DepthRuleDriftDraft extends RuleDriftBase {
18
+ correction: 'max_depth';
19
+ before: string;
20
+ sourceAfter: string;
21
+ pageId: string;
22
+ maxDepth: number;
23
+ foundDepth: number;
24
+ relocateTo: string;
25
+ destinationSlug: string;
26
+ destinationRelPath: string;
27
+ documents: RuleDriftDocumentMove[];
28
+ inbound: {
29
+ slug: string;
30
+ relPath: string;
31
+ before: string;
32
+ after: string;
33
+ rewriteAbout: boolean;
34
+ rewriteLinks: boolean;
35
+ }[];
36
+ }
37
+ export interface RuleDriftDocumentMove {
38
+ id: string;
39
+ relPath: string;
40
+ destinationRelPath: string;
41
+ hash: string;
42
+ renders: string | null;
43
+ destinationRenders: string | null;
44
+ groupKey: string | null;
45
+ destinationGroupKey: string | null;
46
+ }
47
+ export type RuleDriftDraft = TypeRuleDriftDraft | DepthRuleDriftDraft;
48
+ interface RuleDriftCandidateBase {
49
+ pageId: string;
50
+ slug: string;
51
+ relPath: string;
52
+ role: string;
53
+ ruleGlob: string;
54
+ }
55
+ export type RuleDriftCandidate = RuleDriftCandidateBase & ({
56
+ field: 'type';
57
+ expectedType: string;
58
+ foundType: string;
59
+ } | {
60
+ field: 'slug_pattern';
61
+ } | {
62
+ field: 'max_depth';
63
+ maxDepth: number;
64
+ foundDepth: number;
65
+ });
66
+ export type RuleRepairAssessment = {
67
+ status: 'ready';
68
+ code: 'exact_type' | 'exact_relocation';
69
+ reason: string;
70
+ } | {
71
+ status: 'report_only';
72
+ code: 'slug_has_no_exact_repair' | 'relocation_not_declared';
73
+ reason: string;
74
+ } | {
75
+ status: 'held';
76
+ code: 'role_not_knowledge' | 'policy_off' | 'planner_limit_zero' | 'reserved_source' | 'source_unreadable' | 'type_not_scalar' | 'relocation_rule_invalid' | 'destination_unsafe' | 'destination_occupied' | 'destination_not_knowledge' | 'destination_rule_conflict' | 'location_dependent_reference' | 'document_unavailable' | 'document_unreadable' | 'document_changed' | 'document_destination_occupied' | 'document_destination_conflict' | 'document_relationship_unsafe' | 'reference_about' | 'about_unreadable' | 'about_unrewritable' | 'reference_backlink' | 'backlink_unreadable' | 'backlink_unrewritable';
77
+ reason: string;
78
+ };
79
+ export interface RuleRepairPreparation {
80
+ assessment: RuleRepairAssessment;
81
+ draft: RuleDriftDraft | null;
82
+ }
83
+ /** Every path whose bytes or identity one sealed rule repair owns. */
84
+ export declare function ruleDriftPaths(draft: RuleDriftDraft): string[];
85
+ /**
86
+ * Plan only drift with one exact correction. An explicit `type` has one exact scalar replacement.
87
+ * An over-deep page has one exact destination only when the same rule also declares `relocate_to`.
88
+ * Source pages are excluded: reference material is searchable evidence, not autonomous rewrite scope.
89
+ */
90
+ export declare function planRuleDrifts(ctx: AknoContext, options: {
91
+ limit: number;
92
+ }): Promise<RuleDriftDraft[]>;
93
+ /** Shared deterministic analysis used by both planning and housekeeping explanations. */
94
+ export declare function prepareRuleRepair(ctx: AknoContext, candidate: RuleDriftCandidate): Promise<RuleRepairPreparation>;
95
+ /** Preserve source-page link meaning while its folder changes, without interpreting prose. */
96
+ export declare function rewriteRelocatedPageReferences(content: string, fromSlug: string, toSlug: string, documents: Pick<RuleDriftDocumentMove, 'relPath' | 'destinationRelPath'>[]): {
97
+ after: string;
98
+ } | {
99
+ issue: string;
100
+ };
101
+ /** Losslessly retarget page links, retaining aliases, fragments, labels, and titles. */
102
+ export declare function rewritePageLinks(text: string, fromPage: string, oldSlug: string, newSlug: string): string;
103
+ export {};
104
+ //# sourceMappingURL=rule-drift.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rule-drift.d.ts","sourceRoot":"","sources":["../../src/maintenance/rule-drift.ts"],"names":[],"mappings":"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"}