@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,281 @@
1
+ import { configuredTransformPolicy } from "./profile.js";
2
+ import { declaringRule, effectiveRule, matchesGlob } from "../rules/compile.js";
3
+ import { discoverGraphMaintenanceCandidates } from "./graph-candidates.js";
4
+ import { getMaintenancePlan } from "./plans.js";
5
+ import { prepareRuleRepair } from "./rule-drift.js";
6
+ const LIST_CAP = 20;
7
+ const PLAN_BACKED_ITEM_STATUSES = new Set([
8
+ 'proposed',
9
+ 'approved',
10
+ 'applying',
11
+ 'verification_pending',
12
+ ]);
13
+ export async function housekeeping(ctx) {
14
+ const coverage = pendingPlanCoverage(ctx);
15
+ const brokenRows = ctx.store.db
16
+ .prepare(`SELECT p.slug AS from_slug, l.to_slug, l.line FROM links l
17
+ JOIN pages p ON p.id = l.from_page
18
+ WHERE l.broken = 1 AND l.kind != 'embed'
19
+ ORDER BY p.slug, l.line
20
+ LIMIT ?`)
21
+ .all(LIST_CAP);
22
+ const brokenTotal = count(ctx, "SELECT count(*) AS c FROM links WHERE broken = 1 AND kind != 'embed'");
23
+ // An orphan is searchable, but still lacks page policy, links, and a place for authored context.
24
+ // Housekeeping reports the organizational opportunity without calling it data loss.
25
+ const orphanRows = ctx.store.db
26
+ .prepare(`SELECT rel_path, text IS NOT NULL AS extracted, availability FROM documents
27
+ WHERE page_id IS NULL ORDER BY rel_path LIMIT ?`)
28
+ .all(LIST_CAP);
29
+ const orphanTotal = count(ctx, 'SELECT count(*) AS c FROM documents WHERE page_id IS NULL');
30
+ const drift = [];
31
+ // Deliberately sequential: a malformed rule set can produce many findings, and housekeeping
32
+ // should not turn that into an unbounded burst of file opens against the owner's notes.
33
+ for (const { candidate, ...entry } of findDrift(ctx)) {
34
+ const plan = coverage.drift.get(ruleDriftKey(entry.slug, entry.expected, entry.found)) ?? null;
35
+ drift.push({
36
+ ...entry,
37
+ plan,
38
+ repair: plan
39
+ ? {
40
+ status: 'plan_backed',
41
+ code: 'sealed_plan',
42
+ reason: 'an exact nonterminal maintenance item already owns this finding',
43
+ }
44
+ : (await prepareRuleRepair(ctx, candidate)).assessment,
45
+ });
46
+ }
47
+ const graphCandidates = discoverGraphMaintenanceCandidates(ctx.store);
48
+ const adoptEnabled = configuredTransformPolicy(ctx.config, 'adopt') !== 'off';
49
+ return {
50
+ brokenLinks: brokenRows.map((row) => ({
51
+ from: row.from_slug,
52
+ to: row.to_slug,
53
+ line: row.line,
54
+ plan: coverage.brokenLinks.get(brokenLinkKey(row.from_slug, row.to_slug)) ?? null,
55
+ })),
56
+ orphanedDocuments: orphanRows.map((row) => ({
57
+ relPath: row.rel_path,
58
+ plan: coverage.orphanedDocuments.get(row.rel_path) ?? null,
59
+ reason: row.availability === 'missing'
60
+ ? row.extracted
61
+ ? 'original missing; retained indexed text remains searchable, but adoption is paused'
62
+ : 'original missing and no readable indexed copy or rendition remains'
63
+ : row.extracted
64
+ ? adoptEnabled
65
+ ? 'unfiled but searchable — the adopt phase will write a page beside it'
66
+ : 'unfiled but searchable as a document — embed it from a page with `![[filename]]`, or enable maintenance.adopt'
67
+ : 'unfiled and visible by filename, but nothing could be read from it',
68
+ })),
69
+ drift: drift.slice(0, LIST_CAP),
70
+ graphCandidates: graphCandidates.slice(0, LIST_CAP),
71
+ counts: {
72
+ brokenLinks: brokenTotal,
73
+ orphanedDocuments: orphanTotal,
74
+ drift: drift.length,
75
+ graphCandidates: graphCandidates.length,
76
+ },
77
+ planBacked: {
78
+ brokenLinks: countPlanBackedBrokenLinks(ctx, coverage.brokenLinks),
79
+ orphanedDocuments: countPlanBackedOrphans(ctx, coverage.orphanedDocuments),
80
+ drift: drift.filter((entry) => entry.plan !== null).length,
81
+ },
82
+ ruleRepairs: {
83
+ planBacked: drift.filter((entry) => entry.repair.status === 'plan_backed').length,
84
+ ready: drift.filter((entry) => entry.repair.status === 'ready').length,
85
+ held: drift.filter((entry) => entry.repair.status === 'held').length,
86
+ reportOnly: drift.filter((entry) => entry.repair.status === 'report_only').length,
87
+ },
88
+ };
89
+ }
90
+ /**
91
+ * The exact plan is the authority here, not resemblance between a diagnostic and an operation.
92
+ * Link evidence seals both endpoints; adoption evidence seals the document path and bytes; rule
93
+ * evidence seals the exact type or depth-relocation declaration. Newest plans win when an older audit plan and a later
94
+ * review plan describe the same still-current work.
95
+ */
96
+ function pendingPlanCoverage(ctx) {
97
+ const brokenLinks = new Map();
98
+ const orphanedDocuments = new Map();
99
+ const drift = new Map();
100
+ const plans = ctx.store.db
101
+ .prepare(`SELECT id FROM maintenance_plans
102
+ WHERE status NOT IN ('completed', 'failed', 'superseded')
103
+ ORDER BY rowid DESC`)
104
+ .all();
105
+ for (const summary of plans) {
106
+ const plan = getMaintenancePlan(ctx, summary.id);
107
+ for (const item of plan.items) {
108
+ if (item.kind !== 'broken_link' && item.kind !== 'rule_drift' && item.kind !== 'adopt')
109
+ continue;
110
+ if (!PLAN_BACKED_ITEM_STATUSES.has(item.status))
111
+ continue;
112
+ const ref = {
113
+ planId: plan.id,
114
+ itemId: item.id,
115
+ kind: item.kind,
116
+ policy: item.policy,
117
+ status: item.status,
118
+ statusCode: item.statusCode,
119
+ };
120
+ if (item.kind === 'broken_link') {
121
+ for (const evidence of item.evidence) {
122
+ if (evidence.type !== 'link' || !evidence.brokenTarget)
123
+ continue;
124
+ const key = brokenLinkKey(evidence.source, evidence.brokenTarget);
125
+ if (!brokenLinks.has(key))
126
+ brokenLinks.set(key, ref);
127
+ }
128
+ }
129
+ else if (item.kind === 'adopt') {
130
+ for (const evidence of item.evidence) {
131
+ if (evidence.type !== 'document' || !evidence.documentRelPath)
132
+ continue;
133
+ if (!orphanedDocuments.has(evidence.documentRelPath)) {
134
+ orphanedDocuments.set(evidence.documentRelPath, ref);
135
+ }
136
+ }
137
+ }
138
+ else {
139
+ for (const evidence of item.evidence) {
140
+ if (evidence.type !== 'rule')
141
+ continue;
142
+ const key = evidence.ruleField === 'max_depth' && evidence.maxDepth && evidence.foundDepth
143
+ ? ruleDriftKey(item.subject, `at most ${evidence.maxDepth} level(s) deep`, `${evidence.foundDepth} levels deep`)
144
+ : evidence.expectedType && evidence.foundType
145
+ ? ruleDriftKey(item.subject, `type: ${evidence.expectedType}`, `type: ${evidence.foundType}`)
146
+ : null;
147
+ if (!key)
148
+ continue;
149
+ if (!drift.has(key))
150
+ drift.set(key, ref);
151
+ }
152
+ }
153
+ }
154
+ }
155
+ return { brokenLinks, orphanedDocuments, drift };
156
+ }
157
+ function countPlanBackedBrokenLinks(ctx, coverage) {
158
+ let total = 0;
159
+ const countRows = ctx.store.db.prepare(`SELECT count(*) AS c FROM links l JOIN pages p ON p.id = l.from_page
160
+ WHERE l.broken = 1 AND l.kind != 'embed' AND p.slug = ? AND l.to_slug = ?`);
161
+ for (const key of coverage.keys()) {
162
+ const [from, to] = key.split('\0');
163
+ if (from === undefined || to === undefined)
164
+ continue;
165
+ total += countRows.get(from, to).c;
166
+ }
167
+ return total;
168
+ }
169
+ function countPlanBackedOrphans(ctx, coverage) {
170
+ let total = 0;
171
+ const exists = ctx.store.db.prepare('SELECT 1 FROM documents WHERE page_id IS NULL AND rel_path = ? LIMIT 1');
172
+ for (const relPath of coverage.keys()) {
173
+ if (exists.get(relPath))
174
+ total++;
175
+ }
176
+ return total;
177
+ }
178
+ function brokenLinkKey(from, to) {
179
+ return `${from}\0${to}`;
180
+ }
181
+ function ruleDriftKey(slug, expected, found) {
182
+ return `${slug}\0${expected}\0${found}`;
183
+ }
184
+ function findDrift(ctx) {
185
+ const pages = ctx.store.db
186
+ .prepare("SELECT id, slug, rel_path, role, type FROM pages WHERE role != 'ignored' ORDER BY slug")
187
+ .all();
188
+ const out = [];
189
+ for (const page of pages) {
190
+ // `effectiveRule` merges values across matching rules. Each diagnostic points to the most
191
+ // specific matching rule that declared that particular field, not merely the first match.
192
+ const rule = effectiveRule(page.slug, ctx.config.rules);
193
+ const typeRule = declaringRule(page.slug, ctx.config.rules, 'type');
194
+ if (rule.type && typeRule && page.type && page.type !== rule.type) {
195
+ out.push({
196
+ slug: page.slug,
197
+ field: 'type',
198
+ rule: typeRule.glob,
199
+ expected: `type: ${rule.type}`,
200
+ found: `type: ${page.type}`,
201
+ candidate: {
202
+ pageId: page.id,
203
+ slug: page.slug,
204
+ relPath: page.rel_path,
205
+ role: page.role,
206
+ field: 'type',
207
+ ruleGlob: typeRule.glob,
208
+ expectedType: rule.type,
209
+ foundType: page.type,
210
+ },
211
+ });
212
+ }
213
+ const slugRule = declaringRule(page.slug, ctx.config.rules, 'slug_pattern');
214
+ if (rule.slug_pattern && slugRule) {
215
+ const basename = page.slug.slice(page.slug.lastIndexOf('/') + 1);
216
+ if (!safeMatch(rule.slug_pattern, basename)) {
217
+ out.push({
218
+ slug: page.slug,
219
+ field: 'slug_pattern',
220
+ rule: slugRule.glob,
221
+ expected: `slug matching ${rule.slug_pattern}`,
222
+ found: basename,
223
+ candidate: {
224
+ pageId: page.id,
225
+ slug: page.slug,
226
+ relPath: page.rel_path,
227
+ role: page.role,
228
+ field: 'slug_pattern',
229
+ ruleGlob: slugRule.glob,
230
+ },
231
+ });
232
+ }
233
+ }
234
+ const depthRule = declaringRule(page.slug, ctx.config.rules, 'max_depth');
235
+ if (rule.max_depth !== undefined && depthRule) {
236
+ // Depth below the folder the rule names, not from the root: `documents/**` with
237
+ // `max_depth: 2` is a statement about how deep `documents/` may nest.
238
+ const ruleDepth = depthRule.glob
239
+ .replace(/\/\*\*?$/, '')
240
+ .split('/')
241
+ .filter(Boolean).length;
242
+ const depth = page.slug.split('/').length - ruleDepth;
243
+ if (depth > rule.max_depth) {
244
+ out.push({
245
+ slug: page.slug,
246
+ field: 'max_depth',
247
+ rule: depthRule.glob,
248
+ expected: `at most ${rule.max_depth} level(s) deep`,
249
+ found: `${depth} levels deep`,
250
+ candidate: {
251
+ pageId: page.id,
252
+ slug: page.slug,
253
+ relPath: page.rel_path,
254
+ role: page.role,
255
+ field: 'max_depth',
256
+ ruleGlob: depthRule.glob,
257
+ maxDepth: rule.max_depth,
258
+ foundDepth: depth,
259
+ },
260
+ });
261
+ }
262
+ }
263
+ }
264
+ return out;
265
+ }
266
+ /**
267
+ * A `slug_pattern` comes from a config file, so a bad one must not take the pass down with
268
+ * it. An unusable pattern reports nothing rather than everything.
269
+ */
270
+ function safeMatch(pattern, value) {
271
+ try {
272
+ return new RegExp(pattern).test(value);
273
+ }
274
+ catch {
275
+ return matchesGlob(value, pattern);
276
+ }
277
+ }
278
+ function count(ctx, sql) {
279
+ return ctx.store.db.prepare(sql).get().c;
280
+ }
281
+ //# sourceMappingURL=housekeeping.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"housekeeping.js","sourceRoot":"","sources":["../../src/maintenance/housekeeping.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ import type { AknoContext } from '../context.ts';
2
+ export type LinkIdentitySignal = 'canonical' | 'alias' | 'move_history';
3
+ export interface LinkRepair {
4
+ from: string;
5
+ brokenTarget: string;
6
+ newTarget: string;
7
+ signal: LinkIdentitySignal;
8
+ action: 'planned' | 'applied' | 'rejected';
9
+ }
10
+ export interface RepairResult {
11
+ links: LinkRepair[];
12
+ /** Retained for report compatibility; plan-backed contradiction items own claim rewrites. */
13
+ claims: {
14
+ slug: string;
15
+ line: number;
16
+ before: string;
17
+ after: string;
18
+ supersededBy: string;
19
+ }[];
20
+ /** What was found but deliberately not planned, and why. Reported, never silent. */
21
+ declined: {
22
+ what: string;
23
+ reason: string;
24
+ candidates?: string[];
25
+ }[];
26
+ }
27
+ interface LinkOperationDraft {
28
+ slug: string;
29
+ relPath: string;
30
+ before: string;
31
+ after: string;
32
+ }
33
+ interface LinkTargetSeal {
34
+ slug: string;
35
+ relPath: string;
36
+ contentHash: string;
37
+ }
38
+ export interface BrokenLinkDraft {
39
+ kind: 'broken_link';
40
+ slug: string;
41
+ inputHash: string;
42
+ operations: LinkOperationDraft[];
43
+ targets: LinkTargetSeal[];
44
+ repairs: LinkRepair[];
45
+ }
46
+ export interface BrokenLinkPlanResult {
47
+ drafts: BrokenLinkDraft[];
48
+ report: RepairResult;
49
+ }
50
+ /**
51
+ * Build exact link-only plan items. A similarity match may explain a finding, but only an exact
52
+ * canonical identity, alias, or recorded move can authorize a proposed rewrite.
53
+ */
54
+ export declare function planBrokenLinks(ctx: AknoContext, maxChanges: number): Promise<BrokenLinkPlanResult>;
55
+ /** Reconstruct the exact allowed output during plan preflight. */
56
+ export declare function replaceLinkTarget(text: string, from: string, brokenTarget: string, newTarget: string): string;
57
+ export {};
58
+ //# sourceMappingURL=link-repairs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"link-repairs.d.ts","sourceRoot":"","sources":["../../src/maintenance/link-repairs.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAMjD,MAAM,MAAM,kBAAkB,GAAG,WAAW,GAAG,OAAO,GAAG,cAAc,CAAC;AAExE,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,kBAAkB,CAAC;IAC3B,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,UAAU,CAAC;CAC5C;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,6FAA6F;IAC7F,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC9F,oFAAoF;IACpF,QAAQ,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,EAAE,CAAC;CACrE;AAED,UAAU,kBAAkB;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED,UAAU,cAAc;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,aAAa,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,kBAAkB,EAAE,CAAC;IACjC,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,OAAO,EAAE,UAAU,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,MAAM,EAAE,YAAY,CAAC;CACtB;AAcD;;;GAGG;AACH,wBAAsB,eAAe,CAAC,GAAG,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAuJzG;AAED,kEAAkE;AAClE,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,GAChB,MAAM,CAcR"}
@@ -0,0 +1,281 @@
1
+ import fsp from 'node:fs/promises';
2
+ import path from 'node:path';
3
+ import { normalizeLinkTarget } from "../kb/page.js";
4
+ import { sha256 } from "../store/ids.js";
5
+ import { candidatesFor } from "./repair.js";
6
+ import { pageAllowsMaintenanceTransform } from "./path-policy.js";
7
+ /**
8
+ * Build exact link-only plan items. A similarity match may explain a finding, but only an exact
9
+ * canonical identity, alias, or recorded move can authorize a proposed rewrite.
10
+ */
11
+ export async function planBrokenLinks(ctx, maxChanges) {
12
+ const report = { links: [], claims: [], declined: [] };
13
+ const drafts = [];
14
+ const identities = pageIdentities(ctx);
15
+ const moves = moveHistory(ctx);
16
+ const allSlugs = identities.map((page) => page.slug);
17
+ const rows = ctx.store.db
18
+ .prepare(`SELECT DISTINCT p.slug AS from_slug, p.rel_path, p.role, p.dream_management, l.to_slug
19
+ FROM links l JOIN pages p ON p.id = l.from_page
20
+ WHERE l.broken = 1 AND l.kind != 'embed'
21
+ ORDER BY p.slug, l.to_slug`)
22
+ .all();
23
+ const grouped = new Map();
24
+ for (const row of rows) {
25
+ const held = grouped.get(row.from_slug);
26
+ if (held)
27
+ held.push(row);
28
+ else
29
+ grouped.set(row.from_slug, [row]);
30
+ }
31
+ let planned = 0;
32
+ for (const [slug, links] of grouped) {
33
+ if (planned >= maxChanges)
34
+ break;
35
+ const first = links[0];
36
+ if (!pageAllowsMaintenanceTransform(ctx.config, { slug, role: first.role, dreamManagement: first.dream_management }, 'broken_link')) {
37
+ for (const link of links) {
38
+ report.declined.push({
39
+ what: `[[${link.to_slug}]]`,
40
+ reason: `${slug} is not opted into dream: hygiene or dream: synthesize`,
41
+ });
42
+ }
43
+ continue;
44
+ }
45
+ const before = await readPage(ctx, first.rel_path);
46
+ if (before === null) {
47
+ for (const link of links) {
48
+ report.declined.push({
49
+ what: `[[${link.to_slug}]]`,
50
+ reason: `${slug} could not be read while sealing the proposal`,
51
+ });
52
+ }
53
+ continue;
54
+ }
55
+ let after = before;
56
+ const repairs = [];
57
+ const sealedTargets = new Map();
58
+ for (const link of links) {
59
+ if (planned >= maxChanges)
60
+ break;
61
+ const resolved = resolveTarget(link.to_slug, identities, moves);
62
+ if (!resolved) {
63
+ const similar = candidatesFor(link.to_slug, allSlugs);
64
+ report.declined.push({
65
+ what: `[[${link.to_slug}]]`,
66
+ reason: similar.length > 0
67
+ ? `${similar.length} similarity-only candidate${similar.length === 1 ? '' : 's'}; no exact identity signal`
68
+ : 'no page with an exact canonical identity, alias, or move history',
69
+ ...(similar.length > 0 ? { candidates: similar } : {}),
70
+ });
71
+ continue;
72
+ }
73
+ if (resolved.length !== 1) {
74
+ report.declined.push({
75
+ what: `[[${link.to_slug}]]`,
76
+ reason: `${resolved.length} pages share the strongest exact identity signal`,
77
+ candidates: resolved.map((entry) => entry.page.slug),
78
+ });
79
+ continue;
80
+ }
81
+ const target = resolved[0];
82
+ const next = replaceLinkTarget(after, slug, link.to_slug, target.page.slug);
83
+ if (next === after) {
84
+ report.declined.push({
85
+ what: `[[${link.to_slug}]]`,
86
+ reason: 'the indexed broken target is no longer present in the source bytes',
87
+ });
88
+ continue;
89
+ }
90
+ if (!sealedTargets.has(target.page.slug)) {
91
+ const targetBefore = target.page.slug === slug ? before : await readPage(ctx, target.page.relPath);
92
+ if (targetBefore === null) {
93
+ report.declined.push({
94
+ what: `[[${link.to_slug}]]`,
95
+ reason: 'the exact target could not be sealed against concurrent edits',
96
+ });
97
+ continue;
98
+ }
99
+ sealedTargets.set(target.page.slug, {
100
+ slug: target.page.slug,
101
+ relPath: target.page.relPath,
102
+ contentHash: sha256(targetBefore),
103
+ });
104
+ }
105
+ after = next;
106
+ const repair = {
107
+ from: slug,
108
+ brokenTarget: link.to_slug,
109
+ newTarget: target.page.slug,
110
+ signal: target.signal,
111
+ action: 'planned',
112
+ };
113
+ repairs.push(repair);
114
+ report.links.push(repair);
115
+ planned += 1;
116
+ }
117
+ if (repairs.length === 0 || after === before)
118
+ continue;
119
+ const operations = [{ slug, relPath: first.rel_path, before, after }];
120
+ const targets = [...sealedTargets.values()];
121
+ const inputHash = sha256(JSON.stringify({
122
+ source: sha256(before),
123
+ repairs: repairs.map(({ brokenTarget, newTarget, signal }) => ({
124
+ brokenTarget,
125
+ newTarget,
126
+ signal,
127
+ })),
128
+ targets,
129
+ }));
130
+ const handled = handledStatus(ctx, inputHash);
131
+ if (handled) {
132
+ report.links = report.links.filter((entry) => !repairs.includes(entry));
133
+ if (handled === 'rejected') {
134
+ report.declined.push({
135
+ what: slug,
136
+ reason: 'this exact broken-link proposal was previously rejected',
137
+ });
138
+ }
139
+ continue;
140
+ }
141
+ drafts.push({ kind: 'broken_link', slug, inputHash, operations, targets, repairs });
142
+ }
143
+ return { drafts, report };
144
+ }
145
+ /** Reconstruct the exact allowed output during plan preflight. */
146
+ export function replaceLinkTarget(text, from, brokenTarget, newTarget) {
147
+ const key = (value) => identityKey(value);
148
+ const wanted = key(brokenTarget);
149
+ const wikilinks = text.replace(/\[\[([^\]|]+)(\|[^\]]*)?\]\]/g, (whole, target, alias) => key(normalizeLinkTarget(target, from)) === wanted ? `[[${newTarget}${alias ?? ''}]]` : whole);
150
+ const folder = from.includes('/') ? from.slice(0, from.lastIndexOf('/')) : '';
151
+ return wikilinks.replace(/\]\(([^)\s]+)\)/g, (whole, target) => {
152
+ if (/^[a-z]+:/i.test(target) || target.startsWith('#'))
153
+ return whole;
154
+ if (key(normalizeLinkTarget(target, from)) !== wanted)
155
+ return whole;
156
+ const wasFolderRelative = target.startsWith('../') || target.startsWith('./') || !target.includes('/');
157
+ return `](${wasFolderRelative ? relativeTo(folder, newTarget) : newTarget}.md)`;
158
+ });
159
+ }
160
+ function resolveTarget(brokenTarget, pages, moves) {
161
+ const moved = currentMoveTargets(identityKey(brokenTarget), moves, pages);
162
+ if (moved.length > 0) {
163
+ return moved.map((page) => ({ page, signal: 'move_history' }));
164
+ }
165
+ const wanted = identityKey(brokenTarget);
166
+ const aliases = pages.filter((page) => page.aliases.some((alias) => identityKey(alias) === wanted));
167
+ if (aliases.length > 0)
168
+ return aliases.map((page) => ({ page, signal: 'alias' }));
169
+ const basename = brokenTarget.split('/').at(-1) ?? brokenTarget;
170
+ const canonical = pages.filter((page) => {
171
+ const pageBase = page.slug.split('/').at(-1) ?? page.slug;
172
+ return (identityKey(page.slug) === wanted ||
173
+ identityKey(pageBase) === identityKey(basename) ||
174
+ identityKey(page.title) === identityKey(basename));
175
+ });
176
+ return canonical.length > 0 ? canonical.map((page) => ({ page, signal: 'canonical' })) : null;
177
+ }
178
+ function uniqueResolved(values) {
179
+ const unique = new Map(values.map((value) => [value.page.slug, value]));
180
+ return [...unique.values()];
181
+ }
182
+ function currentMoveTargets(start, moves, pages) {
183
+ const queue = [...(moves.get(start) ?? [])];
184
+ const visited = new Set([start]);
185
+ const live = [];
186
+ while (queue.length > 0) {
187
+ const slug = queue.shift();
188
+ const key = identityKey(slug);
189
+ if (visited.has(key))
190
+ continue;
191
+ visited.add(key);
192
+ const page = pages.find((candidate) => identityKey(candidate.slug) === key);
193
+ if (page) {
194
+ live.push({ page, signal: 'move_history' });
195
+ continue;
196
+ }
197
+ queue.push(...(moves.get(key) ?? []));
198
+ }
199
+ return uniqueResolved(live).map((entry) => entry.page);
200
+ }
201
+ function pageIdentities(ctx) {
202
+ const rows = ctx.store.db
203
+ .prepare("SELECT slug, rel_path, title, aliases FROM pages WHERE role = 'knowledge' ORDER BY slug")
204
+ .all();
205
+ return rows.map((row) => ({
206
+ slug: row.slug,
207
+ relPath: row.rel_path,
208
+ title: row.title,
209
+ aliases: parseAliases(row.aliases),
210
+ }));
211
+ }
212
+ function moveHistory(ctx) {
213
+ const rows = ctx.store.db
214
+ .prepare(`SELECT old.rel_path AS old_path, fresh.rel_path AS new_path
215
+ FROM changes c
216
+ JOIN change_files old ON old.change_id = c.id AND old.action = 'moved'
217
+ JOIN change_files fresh ON fresh.change_id = c.id AND fresh.action = 'created'
218
+ WHERE c.op = 'move'
219
+ AND c.status = 'applied'
220
+ AND old.before IS NOT NULL AND fresh.after IS NOT NULL
221
+ AND (old.rel_path GLOB '*.md' OR old.rel_path GLOB '*.markdown')
222
+ AND (fresh.rel_path GLOB '*.md' OR fresh.rel_path GLOB '*.markdown')`)
223
+ .all();
224
+ const out = new Map();
225
+ for (const row of rows) {
226
+ const oldSlug = row.old_path.replace(/\.(md|markdown)$/i, '');
227
+ const newSlug = row.new_path.replace(/\.(md|markdown)$/i, '');
228
+ const key = identityKey(oldSlug);
229
+ const held = out.get(key);
230
+ if (held)
231
+ held.push(newSlug);
232
+ else
233
+ out.set(key, [newSlug]);
234
+ }
235
+ return out;
236
+ }
237
+ function handledStatus(ctx, inputHash) {
238
+ const row = ctx.store.db
239
+ .prepare(`SELECT status FROM maintenance_items
240
+ WHERE kind = 'broken_link' AND input_hash = ? AND status IN ('applied', 'rejected')
241
+ ORDER BY rowid DESC LIMIT 1`)
242
+ .get(inputHash);
243
+ return row?.status ?? null;
244
+ }
245
+ function parseAliases(value) {
246
+ try {
247
+ const parsed = JSON.parse(value);
248
+ return Array.isArray(parsed) ? parsed.filter((entry) => typeof entry === 'string') : [];
249
+ }
250
+ catch {
251
+ return [];
252
+ }
253
+ }
254
+ function identityKey(value) {
255
+ return value
256
+ .normalize('NFKC')
257
+ .toLowerCase()
258
+ .replace(/\.(md|markdown)$/i, '')
259
+ .replace(/\\/g, '/')
260
+ .split('/')
261
+ .map((segment) => segment.replace(/[^\p{L}\p{N}]+/gu, ''))
262
+ .filter(Boolean)
263
+ .join('/');
264
+ }
265
+ function relativeTo(folder, target) {
266
+ const from = folder ? folder.split('/') : [];
267
+ const to = target.split('/');
268
+ let shared = 0;
269
+ while (shared < from.length && shared < to.length && from[shared] === to[shared])
270
+ shared += 1;
271
+ const up = Array.from({ length: from.length - shared }, () => '..');
272
+ const relative = [...up, ...to.slice(shared)].join('/');
273
+ // Akno accepts root-relative Markdown paths for convenience, so a nested path without
274
+ // an explicit dot is parsed from the knowledge-base root. Mark generated nested relatives
275
+ // explicitly or the next index/dream pass sees Akno's own repair as broken and rewrites it.
276
+ return relative.includes('/') && !relative.startsWith('../') ? `./${relative}` : relative;
277
+ }
278
+ async function readPage(ctx, relPath) {
279
+ return fsp.readFile(path.join(ctx.config.aknoPath, relPath), 'utf8').catch(() => null);
280
+ }
281
+ //# sourceMappingURL=link-repairs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"link-repairs.js","sourceRoot":"","sources":["../../src/maintenance/link-repairs.ts"],"names":[],"mappings":"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"}