@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,507 @@
1
+ import fsp from 'node:fs/promises';
2
+ import path from 'node:path';
3
+ import { replaceNestedStringArrayValue, replaceTopLevelString } from "../kb/frontmatter.js";
4
+ import { normalizeLinkTarget, parsePage, resolvePagePolicy } from "../kb/page.js";
5
+ import { isReserved } from "../reserved.js";
6
+ import { declaringRule, effectiveRule } from "../rules/compile.js";
7
+ import { sha256 } from "../store/ids.js";
8
+ import { configuredTransformPolicy } from "./profile.js";
9
+ /** Every path whose bytes or identity one sealed rule repair owns. */
10
+ export function ruleDriftPaths(draft) {
11
+ return draft.correction === 'type'
12
+ ? [draft.relPath]
13
+ : [
14
+ draft.destinationRelPath,
15
+ ...draft.documents.flatMap((document) => [document.relPath, document.destinationRelPath]),
16
+ ...draft.inbound.map((entry) => entry.relPath),
17
+ draft.relPath,
18
+ ];
19
+ }
20
+ /**
21
+ * Plan only drift with one exact correction. An explicit `type` has one exact scalar replacement.
22
+ * An over-deep page has one exact destination only when the same rule also declares `relocate_to`.
23
+ * Source pages are excluded: reference material is searchable evidence, not autonomous rewrite scope.
24
+ */
25
+ export async function planRuleDrifts(ctx, options) {
26
+ if (options.limit <= 0)
27
+ return [];
28
+ const pages = ctx.store.db
29
+ .prepare(`SELECT id, slug, rel_path, role, type FROM pages
30
+ WHERE role = 'knowledge'
31
+ ORDER BY slug`)
32
+ .all();
33
+ const drafts = [];
34
+ const terminal = ctx.store.db.prepare(`SELECT 1 FROM maintenance_items
35
+ WHERE kind = 'rule_drift' AND input_hash = ? AND subject = ?
36
+ AND status IN ('applied', 'rejected') LIMIT 1`);
37
+ for (const page of pages) {
38
+ if (drafts.length >= options.limit)
39
+ break;
40
+ const rule = effectiveRule(page.slug, ctx.config.rules);
41
+ const typeDeclaration = declaringRule(page.slug, ctx.config.rules, 'type');
42
+ if (rule.type && typeDeclaration?.type === rule.type && page.type && page.type !== rule.type) {
43
+ const prepared = await prepareRuleRepair(ctx, {
44
+ pageId: page.id,
45
+ slug: page.slug,
46
+ relPath: page.rel_path,
47
+ role: page.role,
48
+ field: 'type',
49
+ ruleGlob: typeDeclaration.glob,
50
+ expectedType: rule.type,
51
+ foundType: page.type,
52
+ });
53
+ if (prepared.draft && !terminal.get(prepared.draft.inputHash, page.slug)) {
54
+ drafts.push(prepared.draft);
55
+ continue;
56
+ }
57
+ }
58
+ const depthDeclaration = declaringRule(page.slug, ctx.config.rules, 'max_depth');
59
+ if (!depthDeclaration?.max_depth)
60
+ continue;
61
+ const ruleRoot = depthDeclaration.glob
62
+ .replace(/\/\*\*?$/, '')
63
+ .split('/')
64
+ .filter(Boolean);
65
+ const foundDepth = page.slug.split('/').length - ruleRoot.length;
66
+ if (foundDepth <= depthDeclaration.max_depth)
67
+ continue;
68
+ const prepared = await prepareRuleRepair(ctx, {
69
+ pageId: page.id,
70
+ slug: page.slug,
71
+ relPath: page.rel_path,
72
+ role: page.role,
73
+ field: 'max_depth',
74
+ ruleGlob: depthDeclaration.glob,
75
+ maxDepth: depthDeclaration.max_depth,
76
+ foundDepth,
77
+ });
78
+ if (!prepared.draft || terminal.get(prepared.draft.inputHash, page.slug))
79
+ continue;
80
+ drafts.push(prepared.draft);
81
+ }
82
+ return drafts;
83
+ }
84
+ /** Shared deterministic analysis used by both planning and housekeeping explanations. */
85
+ export async function prepareRuleRepair(ctx, candidate) {
86
+ if (configuredTransformPolicy(ctx.config, 'rule_drift') === 'off') {
87
+ return outcome('held', 'policy_off', 'the rule_drift maintenance policy is off');
88
+ }
89
+ if (ctx.config.maintenance.curate.maxRuleDrifts === 0) {
90
+ return outcome('held', 'planner_limit_zero', 'max_rule_drifts is zero');
91
+ }
92
+ if (candidate.field === 'slug_pattern') {
93
+ return outcome('report_only', 'slug_has_no_exact_repair', 'a slug pattern diagnoses the name but does not determine one exact replacement');
94
+ }
95
+ if (candidate.role !== 'knowledge') {
96
+ return outcome('held', 'role_not_knowledge', 'source/reference material is outside autonomous rule-repair authority');
97
+ }
98
+ if (isReserved(candidate.slug, ctx.config)) {
99
+ return outcome('held', 'reserved_source', 'the page belongs to a reserved Akno subsystem');
100
+ }
101
+ const before = await fsp
102
+ .readFile(path.join(ctx.config.aknoPath, candidate.relPath), 'utf8')
103
+ .catch(() => null);
104
+ if (before === null)
105
+ return outcome('held', 'source_unreadable', 'the indexed source bytes are unavailable');
106
+ if (candidate.field === 'type') {
107
+ const after = replaceTopLevelString(before, 'type', candidate.expectedType);
108
+ if (after === null || after === before) {
109
+ return outcome('held', 'type_not_scalar', 'the current type is not one replaceable top-level scalar');
110
+ }
111
+ return {
112
+ assessment: {
113
+ status: 'ready',
114
+ code: 'exact_type',
115
+ reason: 'one exact top-level type replacement is available',
116
+ },
117
+ draft: {
118
+ kind: 'rule_drift',
119
+ correction: 'type',
120
+ slug: candidate.slug,
121
+ relPath: candidate.relPath,
122
+ inputHash: sha256(before),
123
+ before,
124
+ after,
125
+ ruleGlob: candidate.ruleGlob,
126
+ expectedType: candidate.expectedType,
127
+ foundType: candidate.foundType,
128
+ ruleFingerprint: sha256(JSON.stringify({ glob: candidate.ruleGlob, type: candidate.expectedType })),
129
+ },
130
+ };
131
+ }
132
+ return prepareDepthRepair(ctx, candidate, before);
133
+ }
134
+ async function prepareDepthRepair(ctx, candidate, before) {
135
+ const declaration = declaringRule(candidate.slug, ctx.config.rules, 'max_depth');
136
+ if (!declaration?.max_depth ||
137
+ !declaration.relocate_to ||
138
+ declaringRule(candidate.slug, ctx.config.rules, 'relocate_to')?.glob !== declaration.glob) {
139
+ return outcome('report_only', 'relocation_not_declared', 'max_depth diagnoses placement but the same rule does not name relocate_to');
140
+ }
141
+ const relocateTo = normalizeFolder(declaration.relocate_to);
142
+ if (!relocateTo) {
143
+ return outcome('held', 'relocation_rule_invalid', 'relocate_to is not one safe folder path');
144
+ }
145
+ const basename = candidate.slug.slice(candidate.slug.lastIndexOf('/') + 1);
146
+ const destinationSlug = `${relocateTo}/${basename}`;
147
+ const destinationRelPath = `${destinationSlug}.md`;
148
+ if (destinationSlug === candidate.slug || isReserved(destinationSlug, ctx.config)) {
149
+ return outcome('held', 'destination_unsafe', 'the declared destination is not a safe distinct page path');
150
+ }
151
+ if (ctx.store.db.prepare('SELECT 1 FROM pages WHERE slug = ?').get(destinationSlug)) {
152
+ return outcome('held', 'destination_occupied', 'a page already occupies the exact destination');
153
+ }
154
+ const destinationPath = path.join(ctx.config.aknoPath, destinationRelPath);
155
+ if (await fsp
156
+ .stat(destinationPath)
157
+ .then(() => true)
158
+ .catch(() => false))
159
+ return outcome('held', 'destination_occupied', 'a file already occupies the exact destination');
160
+ const destinationPage = parsePage(destinationRelPath, before);
161
+ const destinationRule = effectiveRule(destinationSlug, ctx.config.rules);
162
+ const destinationPolicy = resolvePagePolicy(destinationPage, destinationRule, ctx.config.paths.observations);
163
+ if (destinationPolicy.role !== 'knowledge') {
164
+ return outcome('held', 'destination_not_knowledge', 'the exact destination is not live knowledge');
165
+ }
166
+ if (destinationRuleIssues(destinationSlug, ctx) > 0) {
167
+ return outcome('held', 'destination_rule_conflict', 'the exact destination violates its current folder rules');
168
+ }
169
+ const preparedDocuments = await prepareDocumentMoves(ctx, candidate.pageId, relocateTo, candidate.relPath, destinationRelPath);
170
+ if ('assessment' in preparedDocuments)
171
+ return preparedDocuments;
172
+ const sourceRewrite = rewriteRelocatedPageReferences(before, candidate.slug, destinationSlug, preparedDocuments.documents);
173
+ if ('issue' in sourceRewrite) {
174
+ return outcome('held', 'location_dependent_reference', sourceRewrite.issue);
175
+ }
176
+ const aboutRows = ctx.store.db
177
+ .prepare('SELECT id, slug, rel_path, role, about FROM pages WHERE id != ? ORDER BY slug')
178
+ .all(candidate.pageId);
179
+ const incomingAboutRows = aboutRows.filter((row) => jsonStrings(row.about).some((slug) => slug.toLowerCase() === candidate.slug.toLowerCase()));
180
+ if (incomingAboutRows.some((row) => row.role !== 'knowledge' || isReserved(row.slug, ctx.config))) {
181
+ return outcome('held', 'reference_about', 'an incoming about relationship belongs to protected or reference material');
182
+ }
183
+ if (incomingAboutRows.some((row) => jsonStrings(row.about).some((slug) => slug.toLowerCase() === destinationSlug.toLowerCase()))) {
184
+ return outcome('held', 'about_unrewritable', 'an incoming about page already names the destination and cannot be rewritten without duplication');
185
+ }
186
+ const inboundByPath = new Map();
187
+ for (const row of incomingAboutRows) {
188
+ const content = await fsp
189
+ .readFile(path.join(ctx.config.aknoPath, row.rel_path), 'utf8')
190
+ .catch(() => null);
191
+ if (content === null) {
192
+ return outcome('held', 'about_unreadable', 'an incoming-about knowledge page is unreadable');
193
+ }
194
+ const after = replaceNestedStringArrayValue(content, ['akno', 'about'], candidate.slug, destinationSlug);
195
+ if (after === null || after === content) {
196
+ return outcome('held', 'about_unrewritable', 'an indexed incoming about relationship is not one exact writable frontmatter sequence value');
197
+ }
198
+ inboundByPath.set(row.rel_path, {
199
+ slug: row.slug,
200
+ relPath: row.rel_path,
201
+ before: content,
202
+ after,
203
+ rewriteAbout: true,
204
+ rewriteLinks: false,
205
+ });
206
+ }
207
+ const inboundRows = ctx.store.db
208
+ .prepare(`SELECT DISTINCT p.id, p.slug, p.rel_path, p.role
209
+ FROM links l JOIN pages p ON p.id = l.from_page
210
+ WHERE lower(l.to_slug) = lower(?) AND l.from_page != ? AND l.kind != 'embed'
211
+ ORDER BY p.slug`)
212
+ .all(candidate.slug, candidate.pageId);
213
+ if (inboundRows.some((row) => row.role !== 'knowledge' || isReserved(row.slug, ctx.config))) {
214
+ return outcome('held', 'reference_backlink', 'an inbound link belongs to protected or reference material');
215
+ }
216
+ for (const row of inboundRows) {
217
+ const existing = inboundByPath.get(row.rel_path);
218
+ const content = existing?.before ??
219
+ (await fsp.readFile(path.join(ctx.config.aknoPath, row.rel_path), 'utf8').catch(() => null));
220
+ if (content === null) {
221
+ return outcome('held', 'backlink_unreadable', 'an indexed inbound-link page is unreadable');
222
+ }
223
+ const beforeRewrite = existing?.after ?? content;
224
+ const after = rewritePageLinks(beforeRewrite, row.slug, candidate.slug, destinationSlug);
225
+ if (after === beforeRewrite) {
226
+ return outcome('held', 'backlink_unrewritable', 'an indexed inbound link cannot be rewritten exactly');
227
+ }
228
+ inboundByPath.set(row.rel_path, {
229
+ slug: row.slug,
230
+ relPath: row.rel_path,
231
+ before: content,
232
+ after,
233
+ rewriteAbout: existing?.rewriteAbout ?? false,
234
+ rewriteLinks: true,
235
+ });
236
+ }
237
+ const inbound = [...inboundByPath.values()].sort((left, right) => left.slug.localeCompare(right.slug));
238
+ const inputHash = sha256(JSON.stringify([
239
+ [candidate.relPath, sha256(before)],
240
+ ...preparedDocuments.documents.map((document) => [document.relPath, document.hash]),
241
+ ...inbound.map((entry) => [entry.relPath, sha256(entry.before)]),
242
+ ]));
243
+ return {
244
+ assessment: {
245
+ status: 'ready',
246
+ code: 'exact_relocation',
247
+ reason: 'one exact identity-preserving relocation and complete reference update are available',
248
+ },
249
+ draft: {
250
+ kind: 'rule_drift',
251
+ correction: 'max_depth',
252
+ slug: candidate.slug,
253
+ relPath: candidate.relPath,
254
+ inputHash,
255
+ before,
256
+ sourceAfter: sourceRewrite.after,
257
+ pageId: candidate.pageId,
258
+ maxDepth: declaration.max_depth,
259
+ foundDepth: candidate.foundDepth,
260
+ relocateTo,
261
+ destinationSlug,
262
+ destinationRelPath,
263
+ documents: preparedDocuments.documents,
264
+ inbound,
265
+ ruleGlob: declaration.glob,
266
+ ruleFingerprint: sha256(JSON.stringify({
267
+ glob: declaration.glob,
268
+ max_depth: declaration.max_depth,
269
+ relocate_to: relocateTo,
270
+ })),
271
+ },
272
+ };
273
+ }
274
+ async function prepareDocumentMoves(ctx, pageId, relocateTo, sourcePageRelPath, destinationPageRelPath) {
275
+ const rows = ctx.store.db
276
+ .prepare(`SELECT id, rel_path, sha256, renders, group_key, availability
277
+ FROM documents WHERE page_id = ? ORDER BY rel_path`)
278
+ .all(pageId);
279
+ if (rows.length === 0)
280
+ return { documents: [] };
281
+ if (rows.some((row) => row.availability !== 'available')) {
282
+ return outcome('held', 'document_unavailable', 'an owned document is missing, so its complete attachment set cannot be relocated');
283
+ }
284
+ const destinations = new Map();
285
+ const occupied = new Set([sourcePageRelPath, destinationPageRelPath]);
286
+ for (const row of rows) {
287
+ const normalized = row.rel_path.replaceAll('\\', '/');
288
+ const destinationRelPath = `${relocateTo}/${path.posix.basename(normalized)}`;
289
+ if (!safeRelativePath(normalized) ||
290
+ !safeRelativePath(destinationRelPath) ||
291
+ normalized === destinationRelPath) {
292
+ return outcome('held', 'document_relationship_unsafe', 'an owned document does not have one safe distinct relocation path');
293
+ }
294
+ if (occupied.has(destinationRelPath)) {
295
+ return outcome('held', 'document_destination_conflict', 'two relocated files would occupy the same destination path');
296
+ }
297
+ occupied.add(destinationRelPath);
298
+ destinations.set(normalized, destinationRelPath);
299
+ }
300
+ const documents = [];
301
+ for (const row of rows) {
302
+ const relPath = row.rel_path.replaceAll('\\', '/');
303
+ const destinationRelPath = destinations.get(relPath);
304
+ const indexedDestination = ctx.store.db
305
+ .prepare('SELECT id FROM documents WHERE rel_path = ? AND id != ?')
306
+ .get(destinationRelPath, row.id);
307
+ if (indexedDestination) {
308
+ return outcome('held', 'document_destination_occupied', 'an indexed document already occupies an owned document destination');
309
+ }
310
+ const destinationExists = await fsp
311
+ .lstat(path.join(ctx.config.aknoPath, destinationRelPath))
312
+ .then(() => true)
313
+ .catch((err) => {
314
+ if (err.code === 'ENOENT')
315
+ return false;
316
+ return true;
317
+ });
318
+ if (destinationExists) {
319
+ return outcome('held', 'document_destination_occupied', 'an owned document destination is already occupied');
320
+ }
321
+ const bytes = await fsp.readFile(path.join(ctx.config.aknoPath, relPath)).catch(() => null);
322
+ if (bytes === null) {
323
+ return outcome('held', 'document_unreadable', 'an owned document cannot be read from disk');
324
+ }
325
+ if (sha256(bytes) !== row.sha256) {
326
+ return outcome('held', 'document_changed', 'an owned document no longer matches its indexed content hash');
327
+ }
328
+ const renders = row.renders?.replaceAll('\\', '/') ?? null;
329
+ const groupKey = row.group_key?.replaceAll('\\', '/') ?? null;
330
+ const destinationRenders = renders ? (destinations.get(renders) ?? null) : null;
331
+ const destinationGroupKey = groupKey ? (destinations.get(groupKey) ?? null) : null;
332
+ if ((renders && !destinationRenders) || (groupKey && !destinationGroupKey)) {
333
+ return outcome('held', 'document_relationship_unsafe', 'an owned rendition or multipart document points outside the sealed attachment set');
334
+ }
335
+ documents.push({
336
+ id: row.id,
337
+ relPath,
338
+ destinationRelPath,
339
+ hash: row.sha256,
340
+ renders,
341
+ destinationRenders,
342
+ groupKey,
343
+ destinationGroupKey,
344
+ });
345
+ }
346
+ return { documents };
347
+ }
348
+ function safeRelativePath(relPath) {
349
+ return (relPath.length > 0 &&
350
+ !path.posix.isAbsolute(relPath) &&
351
+ !relPath.split('/').some((part) => !part || part === '.' || part === '..'));
352
+ }
353
+ function outcome(status, code, reason) {
354
+ return { assessment: { status, code, reason }, draft: null };
355
+ }
356
+ function normalizeFolder(value) {
357
+ const normalized = value
358
+ .trim()
359
+ .replace(/\\/g, '/')
360
+ .replace(/^\/+|\/+$/g, '');
361
+ if (!normalized ||
362
+ normalized.endsWith('.md') ||
363
+ normalized.includes('*') ||
364
+ normalized.includes('?') ||
365
+ normalized.includes('#') ||
366
+ normalized.split('/').some((part) => part === '.' || part === '..' || part.length === 0)) {
367
+ return null;
368
+ }
369
+ return normalized;
370
+ }
371
+ function destinationRuleIssues(slug, ctx) {
372
+ const rule = effectiveRule(slug, ctx.config.rules);
373
+ const basename = slug.slice(slug.lastIndexOf('/') + 1);
374
+ if (rule.slug_pattern) {
375
+ try {
376
+ if (!new RegExp(rule.slug_pattern).test(basename))
377
+ return 1;
378
+ }
379
+ catch {
380
+ return 1;
381
+ }
382
+ }
383
+ const declaration = declaringRule(slug, ctx.config.rules, 'max_depth');
384
+ if (declaration?.max_depth !== undefined) {
385
+ const rootDepth = declaration.glob
386
+ .replace(/\/\*\*?$/, '')
387
+ .split('/')
388
+ .filter(Boolean).length;
389
+ if (slug.split('/').length - rootDepth > declaration.max_depth)
390
+ return 1;
391
+ }
392
+ return 0;
393
+ }
394
+ /** Preserve source-page link meaning while its folder changes, without interpreting prose. */
395
+ export function rewriteRelocatedPageReferences(content, fromSlug, toSlug, documents) {
396
+ const documentDestinations = new Map(documents.map((document) => [document.relPath.replaceAll('\\', '/'), document.destinationRelPath]));
397
+ const sourceDir = path.posix.dirname(`${fromSlug}.md`);
398
+ const destinationDir = path.posix.dirname(`${toSlug}.md`);
399
+ let issue = null;
400
+ // Canonical page self-links have one exact successor. This handles wikilinks and ordinary
401
+ // Markdown page links while retaining fragments, labels, aliases, and titles.
402
+ let after = rewritePageLinks(content, fromSlug, fromSlug, toSlug);
403
+ after = after.replace(/(!?\[[^\]]*\]\(\s*<?)([^\s)>]+)(>?)(\s+[^)]*)?\)/g, (whole, prefix, rawHref, closing, titlePart) => {
404
+ if (issue)
405
+ return whole;
406
+ const href = String(rawHref);
407
+ if (/^[a-z][a-z0-9+.-]*:/i.test(href) || href.startsWith('#') || href.startsWith('/')) {
408
+ return whole;
409
+ }
410
+ const hash = href.indexOf('#');
411
+ const target = (hash >= 0 ? href.slice(0, hash) : href).replaceAll('\\', '/');
412
+ const fragment = hash >= 0 ? href.slice(hash) : '';
413
+ if (!locationDependentTarget(target))
414
+ return whole;
415
+ if (target.includes('?')) {
416
+ issue = 'a relative Markdown reference contains a query and has no exact relocation rewrite';
417
+ return whole;
418
+ }
419
+ const sourcePath = resolveRelativePath(sourceDir, target);
420
+ if (!sourcePath) {
421
+ issue = 'a relative Markdown reference escapes the knowledge-base root';
422
+ return whole;
423
+ }
424
+ const extension = path.posix.extname(sourcePath).toLowerCase();
425
+ let rewrittenTarget;
426
+ if ((extension === '.md' || extension === '.markdown') && !String(prefix).startsWith('!')) {
427
+ const sourceTarget = sourcePath.slice(0, -extension.length);
428
+ rewrittenTarget = `${sourceTarget.toLowerCase() === fromSlug.toLowerCase() ? toSlug : sourceTarget}.md`;
429
+ }
430
+ else {
431
+ const destination = documentDestinations.get(sourcePath);
432
+ if (!destination) {
433
+ issue = 'a relative local-file reference is not one of the page’s sealed owned documents';
434
+ return whole;
435
+ }
436
+ rewrittenTarget = path.posix.relative(destinationDir, destination);
437
+ if (!rewrittenTarget || rewrittenTarget.startsWith('../')) {
438
+ issue = 'an owned document has no safe relative path from the relocation destination';
439
+ return whole;
440
+ }
441
+ }
442
+ return `${String(prefix)}${rewrittenTarget}${fragment}${String(closing ?? '')}${String(titlePart ?? '')})`;
443
+ });
444
+ if (issue)
445
+ return { issue };
446
+ after = after.replace(/\[\[([^\]|#]+)((?:#[^\]|]+)?(?:\|[^\]]+)?)\]\]/g, (whole, rawTarget, suffix) => {
447
+ if (issue)
448
+ return whole;
449
+ const target = String(rawTarget).trim().replaceAll('\\', '/');
450
+ if (!/\.[A-Za-z0-9]{1,8}$/.test(target) || !locationDependentTarget(target))
451
+ return whole;
452
+ const sourcePath = resolveRelativePath(sourceDir, target);
453
+ if (!sourcePath) {
454
+ issue = 'a relative embedded-file reference escapes the knowledge-base root';
455
+ return whole;
456
+ }
457
+ const destination = documentDestinations.get(sourcePath);
458
+ if (!destination) {
459
+ issue = 'a relative embedded-file reference is not one of the page’s sealed owned documents';
460
+ return whole;
461
+ }
462
+ const rewrittenTarget = path.posix.relative(destinationDir, destination);
463
+ if (!rewrittenTarget || rewrittenTarget.startsWith('../')) {
464
+ issue = 'an embedded owned document has no safe relative relocation path';
465
+ return whole;
466
+ }
467
+ return `[[${rewrittenTarget}${String(suffix)}]]`;
468
+ });
469
+ return issue ? { issue } : { after };
470
+ }
471
+ function locationDependentTarget(target) {
472
+ return target.startsWith('../') || target.startsWith('./') || !target.includes('/');
473
+ }
474
+ function resolveRelativePath(sourceDir, target) {
475
+ const resolved = path.posix.normalize(path.posix.join(sourceDir === '.' ? '' : sourceDir, target));
476
+ if (!resolved || resolved === '..' || resolved.startsWith('../') || path.posix.isAbsolute(resolved)) {
477
+ return null;
478
+ }
479
+ return resolved.replace(/^\.\//, '');
480
+ }
481
+ /** Losslessly retarget page links, retaining aliases, fragments, labels, and titles. */
482
+ export function rewritePageLinks(text, fromPage, oldSlug, newSlug) {
483
+ const wiki = text.replace(/\[\[([^\]|#]+)((?:#[^\]|]+)?(?:\|[^\]]+)?)\]\]/g, (whole, target, suffix) => {
484
+ return normalizeLinkTarget(String(target), fromPage).toLowerCase() === oldSlug.toLowerCase()
485
+ ? `[[${newSlug}${String(suffix)}]]`
486
+ : whole;
487
+ });
488
+ return wiki.replace(/(?<!!)\[([^\]]*)\]\(\s*<?([^\s)>]+)>?(\s+[^)]*)?\)/g, (whole, label, href, titlePart) => {
489
+ const value = String(href);
490
+ const hash = value.indexOf('#');
491
+ const target = hash >= 0 ? value.slice(0, hash) : value;
492
+ const fragment = hash >= 0 ? value.slice(hash) : '';
493
+ if (normalizeLinkTarget(target, fromPage).toLowerCase() !== oldSlug.toLowerCase())
494
+ return whole;
495
+ return `[${String(label)}](${newSlug}.md${fragment}${String(titlePart ?? '')})`;
496
+ });
497
+ }
498
+ function jsonStrings(value) {
499
+ try {
500
+ const parsed = JSON.parse(value);
501
+ return Array.isArray(parsed) ? parsed.filter((entry) => typeof entry === 'string') : [];
502
+ }
503
+ catch {
504
+ return [];
505
+ }
506
+ }
507
+ //# sourceMappingURL=rule-drift.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rule-drift.js","sourceRoot":"","sources":["../../src/maintenance/rule-drift.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ import type { AknoContext } from '../context.ts';
2
+ import type { DreamModelUsageReceipt } from './model-telemetry.ts';
3
+ import type { MaintenanceBudgetReceipt, MaintenanceBudgetTracker } from './budget.ts';
4
+ import { type MaintenanceItem } from './plans.ts';
5
+ import type { DreamRunFileManifest } from './runs.ts';
6
+ export type DreamRunVerificationStatus = 'passed' | 'failed';
7
+ export type DreamRunVerificationCheckStatus = DreamRunVerificationStatus | 'not_applicable' | 'not_recorded';
8
+ export type DreamRunVerificationIssueCode = 'plan_unavailable' | 'missing_change_id' | 'item_verification_incomplete' | 'item_verification_failed' | 'affected_path_mismatch' | 'snapshot_scan_failed' | 'unattributed_file_change' | 'budget_receipt_mismatch' | 'model_usage_mismatch';
9
+ export interface DreamRunVerificationIssue {
10
+ code: DreamRunVerificationIssueCode;
11
+ count: number;
12
+ }
13
+ /** Content-safe final proof for one invocation. Paths, item ids, and verifier details stay in plans. */
14
+ export interface DreamRunVerificationReceipt {
15
+ status: DreamRunVerificationStatus;
16
+ checkedAt: string;
17
+ plans: number;
18
+ appliedItems: number;
19
+ affectedFiles: number;
20
+ /** Null on historical receipts and when the final filesystem scan could not complete. */
21
+ unattributedFiles: number | null;
22
+ checks: {
23
+ appliedItems: DreamRunVerificationCheckStatus;
24
+ affectedPaths: DreamRunVerificationCheckStatus;
25
+ wholeSnapshot: DreamRunVerificationCheckStatus;
26
+ budget: DreamRunVerificationStatus;
27
+ modelUsage: DreamRunVerificationStatus;
28
+ };
29
+ issues: DreamRunVerificationIssue[];
30
+ }
31
+ /**
32
+ * Re-run every deterministic item postcondition after the complete apply wave, then prove that
33
+ * the content-safe accounting emitted by the run still matches its in-memory sources.
34
+ */
35
+ export declare function verifyDreamRun(ctx: AknoContext, planIds: readonly string[], budgetTracker: MaintenanceBudgetTracker, budget: MaintenanceBudgetReceipt, modelUsage: DreamModelUsageReceipt, baseline: DreamRunFileManifest): Promise<DreamRunVerificationReceipt>;
36
+ /**
37
+ * Compare the observed tree with the run baseline plus every sealed write that reached disk.
38
+ * Paths touched by a failed item remain that item's responsibility; they are not also blamed on
39
+ * an unrelated user or sync-client edit.
40
+ */
41
+ export declare function countUnattributedFileChanges(baseline: DreamRunFileManifest, observed: DreamRunFileManifest, items: readonly Pick<MaintenanceItem, 'status' | 'changeId' | 'operations'>[]): number;
42
+ export declare function budgetReceiptMatchesTracker(tracker: MaintenanceBudgetTracker, receipt: MaintenanceBudgetReceipt): boolean;
43
+ export declare function modelUsageIsConsistent(usage: DreamModelUsageReceipt): boolean;
44
+ //# sourceMappingURL=run-verification.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-verification.d.ts","sourceRoot":"","sources":["../../src/maintenance/run-verification.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAGjD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,KAAK,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AACtF,OAAO,EAGL,KAAK,eAAe,EAErB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAEtD,MAAM,MAAM,0BAA0B,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAC7D,MAAM,MAAM,+BAA+B,GAAG,0BAA0B,GAAG,gBAAgB,GAAG,cAAc,CAAC;AAC7G,MAAM,MAAM,6BAA6B,GACrC,kBAAkB,GAClB,mBAAmB,GACnB,8BAA8B,GAC9B,0BAA0B,GAC1B,wBAAwB,GACxB,sBAAsB,GACtB,0BAA0B,GAC1B,yBAAyB,GACzB,sBAAsB,CAAC;AAE3B,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,6BAA6B,CAAC;IACpC,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wGAAwG;AACxG,MAAM,WAAW,2BAA2B;IAC1C,MAAM,EAAE,0BAA0B,CAAC;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,yFAAyF;IACzF,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,MAAM,EAAE;QACN,YAAY,EAAE,+BAA+B,CAAC;QAC9C,aAAa,EAAE,+BAA+B,CAAC;QAC/C,aAAa,EAAE,+BAA+B,CAAC;QAC/C,MAAM,EAAE,0BAA0B,CAAC;QACnC,UAAU,EAAE,0BAA0B,CAAC;KACxC,CAAC;IACF,MAAM,EAAE,yBAAyB,EAAE,CAAC;CACrC;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAClC,GAAG,EAAE,WAAW,EAChB,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,aAAa,EAAE,wBAAwB,EACvC,MAAM,EAAE,wBAAwB,EAChC,UAAU,EAAE,sBAAsB,EAClC,QAAQ,EAAE,oBAAoB,GAC7B,OAAO,CAAC,2BAA2B,CAAC,CAmGtC;AAED;;;;GAIG;AACH,wBAAgB,4BAA4B,CAC1C,QAAQ,EAAE,oBAAoB,EAC9B,QAAQ,EAAE,oBAAoB,EAC9B,KAAK,EAAE,SAAS,IAAI,CAAC,eAAe,EAAE,QAAQ,GAAG,UAAU,GAAG,YAAY,CAAC,EAAE,GAC5E,MAAM,CAoBR;AAED,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,wBAAwB,EACjC,OAAO,EAAE,wBAAwB,GAChC,OAAO,CAYT;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,sBAAsB,GAAG,OAAO,CAyB7E"}