@tenphi/akno-core 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (485) hide show
  1. package/LICENSE +83 -0
  2. package/README.md +26 -0
  3. package/config/default.jsonc +548 -0
  4. package/dist/bench/answer-corpus.d.ts +48 -0
  5. package/dist/bench/answer-corpus.d.ts.map +1 -0
  6. package/dist/bench/answer-corpus.js +491 -0
  7. package/dist/bench/answer-corpus.js.map +1 -0
  8. package/dist/bench/answer.d.ts +156 -0
  9. package/dist/bench/answer.d.ts.map +1 -0
  10. package/dist/bench/answer.js +608 -0
  11. package/dist/bench/answer.js.map +1 -0
  12. package/dist/bench/auto-recall-answer-corpus.d.ts +21 -0
  13. package/dist/bench/auto-recall-answer-corpus.d.ts.map +1 -0
  14. package/dist/bench/auto-recall-answer-corpus.js +245 -0
  15. package/dist/bench/auto-recall-answer-corpus.js.map +1 -0
  16. package/dist/bench/auto-recall-answer.d.ts +198 -0
  17. package/dist/bench/auto-recall-answer.d.ts.map +1 -0
  18. package/dist/bench/auto-recall-answer.js +720 -0
  19. package/dist/bench/auto-recall-answer.js.map +1 -0
  20. package/dist/bench/auto-recall-corpus.d.ts +45 -0
  21. package/dist/bench/auto-recall-corpus.d.ts.map +1 -0
  22. package/dist/bench/auto-recall-corpus.js +221 -0
  23. package/dist/bench/auto-recall-corpus.js.map +1 -0
  24. package/dist/bench/auto-recall.d.ts +171 -0
  25. package/dist/bench/auto-recall.d.ts.map +1 -0
  26. package/dist/bench/auto-recall.js +651 -0
  27. package/dist/bench/auto-recall.js.map +1 -0
  28. package/dist/bench/entity-resolution.d.ts +37 -0
  29. package/dist/bench/entity-resolution.d.ts.map +1 -0
  30. package/dist/bench/entity-resolution.js +121 -0
  31. package/dist/bench/entity-resolution.js.map +1 -0
  32. package/dist/bench/graph.d.ts +57 -0
  33. package/dist/bench/graph.d.ts.map +1 -0
  34. package/dist/bench/graph.js +573 -0
  35. package/dist/bench/graph.js.map +1 -0
  36. package/dist/bench/llm-ranking-probe.d.ts +27 -0
  37. package/dist/bench/llm-ranking-probe.d.ts.map +1 -0
  38. package/dist/bench/llm-ranking-probe.js +105 -0
  39. package/dist/bench/llm-ranking-probe.js.map +1 -0
  40. package/dist/bench/merge-discovery-corpus.d.ts +26 -0
  41. package/dist/bench/merge-discovery-corpus.d.ts.map +1 -0
  42. package/dist/bench/merge-discovery-corpus.js +114 -0
  43. package/dist/bench/merge-discovery-corpus.js.map +1 -0
  44. package/dist/bench/merge-discovery-review.d.ts +81 -0
  45. package/dist/bench/merge-discovery-review.d.ts.map +1 -0
  46. package/dist/bench/merge-discovery-review.js +149 -0
  47. package/dist/bench/merge-discovery-review.js.map +1 -0
  48. package/dist/bench/merge-discovery.d.ts +122 -0
  49. package/dist/bench/merge-discovery.d.ts.map +1 -0
  50. package/dist/bench/merge-discovery.js +390 -0
  51. package/dist/bench/merge-discovery.js.map +1 -0
  52. package/dist/bench/mixed-retrieval.d.ts +35 -0
  53. package/dist/bench/mixed-retrieval.d.ts.map +1 -0
  54. package/dist/bench/mixed-retrieval.js +355 -0
  55. package/dist/bench/mixed-retrieval.js.map +1 -0
  56. package/dist/bench/ranking-corpus.d.ts +29 -0
  57. package/dist/bench/ranking-corpus.d.ts.map +1 -0
  58. package/dist/bench/ranking-corpus.js +514 -0
  59. package/dist/bench/ranking-corpus.js.map +1 -0
  60. package/dist/bench/ranking-end-to-end.d.ts +112 -0
  61. package/dist/bench/ranking-end-to-end.d.ts.map +1 -0
  62. package/dist/bench/ranking-end-to-end.js +479 -0
  63. package/dist/bench/ranking-end-to-end.js.map +1 -0
  64. package/dist/bench/ranking-latency.d.ts +71 -0
  65. package/dist/bench/ranking-latency.d.ts.map +1 -0
  66. package/dist/bench/ranking-latency.js +130 -0
  67. package/dist/bench/ranking-latency.js.map +1 -0
  68. package/dist/bench/ranking-matrix.d.ts +141 -0
  69. package/dist/bench/ranking-matrix.d.ts.map +1 -0
  70. package/dist/bench/ranking-matrix.js +526 -0
  71. package/dist/bench/ranking-matrix.js.map +1 -0
  72. package/dist/bench/ranking-review.d.ts +93 -0
  73. package/dist/bench/ranking-review.d.ts.map +1 -0
  74. package/dist/bench/ranking-review.js +249 -0
  75. package/dist/bench/ranking-review.js.map +1 -0
  76. package/dist/bench/ranking.d.ts +122 -0
  77. package/dist/bench/ranking.d.ts.map +1 -0
  78. package/dist/bench/ranking.js +547 -0
  79. package/dist/bench/ranking.js.map +1 -0
  80. package/dist/bench.d.ts +60 -0
  81. package/dist/bench.d.ts.map +1 -0
  82. package/dist/bench.js +167 -0
  83. package/dist/bench.js.map +1 -0
  84. package/dist/config/jsonc.d.ts +8 -0
  85. package/dist/config/jsonc.d.ts.map +1 -0
  86. package/dist/config/jsonc.js +85 -0
  87. package/dist/config/jsonc.js.map +1 -0
  88. package/dist/config/load.d.ts +43 -0
  89. package/dist/config/load.d.ts.map +1 -0
  90. package/dist/config/load.js +608 -0
  91. package/dist/config/load.js.map +1 -0
  92. package/dist/config/paths.d.ts +10 -0
  93. package/dist/config/paths.d.ts.map +1 -0
  94. package/dist/config/paths.js +38 -0
  95. package/dist/config/paths.js.map +1 -0
  96. package/dist/config/schema.d.ts +698 -0
  97. package/dist/config/schema.d.ts.map +1 -0
  98. package/dist/config/schema.js +394 -0
  99. package/dist/config/schema.js.map +1 -0
  100. package/dist/config/write-rules.d.ts +41 -0
  101. package/dist/config/write-rules.d.ts.map +1 -0
  102. package/dist/config/write-rules.js +225 -0
  103. package/dist/config/write-rules.js.map +1 -0
  104. package/dist/config/write-setup.d.ts +42 -0
  105. package/dist/config/write-setup.d.ts.map +1 -0
  106. package/dist/config/write-setup.js +358 -0
  107. package/dist/config/write-setup.js.map +1 -0
  108. package/dist/context.d.ts +64 -0
  109. package/dist/context.d.ts.map +1 -0
  110. package/dist/context.js +14 -0
  111. package/dist/context.js.map +1 -0
  112. package/dist/doctor.d.ts +115 -0
  113. package/dist/doctor.d.ts.map +1 -0
  114. package/dist/doctor.js +388 -0
  115. package/dist/doctor.js.map +1 -0
  116. package/dist/index/chunk.d.ts +62 -0
  117. package/dist/index/chunk.d.ts.map +1 -0
  118. package/dist/index/chunk.js +307 -0
  119. package/dist/index/chunk.js.map +1 -0
  120. package/dist/index/defer.d.ts +32 -0
  121. package/dist/index/defer.d.ts.map +1 -0
  122. package/dist/index/defer.js +66 -0
  123. package/dist/index/defer.js.map +1 -0
  124. package/dist/index/derive.d.ts +99 -0
  125. package/dist/index/derive.d.ts.map +1 -0
  126. package/dist/index/derive.js +378 -0
  127. package/dist/index/derive.js.map +1 -0
  128. package/dist/index/entity-resolution.d.ts +68 -0
  129. package/dist/index/entity-resolution.d.ts.map +1 -0
  130. package/dist/index/entity-resolution.js +305 -0
  131. package/dist/index/entity-resolution.js.map +1 -0
  132. package/dist/index/graph.d.ts +46 -0
  133. package/dist/index/graph.d.ts.map +1 -0
  134. package/dist/index/graph.js +618 -0
  135. package/dist/index/graph.js.map +1 -0
  136. package/dist/index/indexer.d.ts +301 -0
  137. package/dist/index/indexer.d.ts.map +1 -0
  138. package/dist/index/indexer.js +1398 -0
  139. package/dist/index/indexer.js.map +1 -0
  140. package/dist/index/revision-barrier.d.ts +30 -0
  141. package/dist/index/revision-barrier.d.ts.map +1 -0
  142. package/dist/index/revision-barrier.js +140 -0
  143. package/dist/index/revision-barrier.js.map +1 -0
  144. package/dist/index.d.ts +55 -0
  145. package/dist/index.d.ts.map +1 -0
  146. package/dist/index.js +37 -0
  147. package/dist/index.js.map +1 -0
  148. package/dist/ingest/adoption-eligibility.d.ts +4 -0
  149. package/dist/ingest/adoption-eligibility.d.ts.map +1 -0
  150. package/dist/ingest/adoption-eligibility.js +18 -0
  151. package/dist/ingest/adoption-eligibility.js.map +1 -0
  152. package/dist/ingest/availability.d.ts +15 -0
  153. package/dist/ingest/availability.d.ts.map +1 -0
  154. package/dist/ingest/availability.js +37 -0
  155. package/dist/ingest/availability.js.map +1 -0
  156. package/dist/ingest/extract.d.ts +58 -0
  157. package/dist/ingest/extract.d.ts.map +1 -0
  158. package/dist/ingest/extract.js +255 -0
  159. package/dist/ingest/extract.js.map +1 -0
  160. package/dist/ingest/fetch.d.ts +35 -0
  161. package/dist/ingest/fetch.d.ts.map +1 -0
  162. package/dist/ingest/fetch.js +142 -0
  163. package/dist/ingest/fetch.js.map +1 -0
  164. package/dist/ingest/inbox.d.ts +53 -0
  165. package/dist/ingest/inbox.d.ts.map +1 -0
  166. package/dist/ingest/inbox.js +110 -0
  167. package/dist/ingest/inbox.js.map +1 -0
  168. package/dist/ingest/name.d.ts +72 -0
  169. package/dist/ingest/name.d.ts.map +1 -0
  170. package/dist/ingest/name.js +208 -0
  171. package/dist/ingest/name.js.map +1 -0
  172. package/dist/ingest/parts.d.ts +78 -0
  173. package/dist/ingest/parts.d.ts.map +1 -0
  174. package/dist/ingest/parts.js +52 -0
  175. package/dist/ingest/parts.js.map +1 -0
  176. package/dist/ingest/rendition.d.ts +75 -0
  177. package/dist/ingest/rendition.d.ts.map +1 -0
  178. package/dist/ingest/rendition.js +92 -0
  179. package/dist/ingest/rendition.js.map +1 -0
  180. package/dist/ingest/store.d.ts +66 -0
  181. package/dist/ingest/store.d.ts.map +1 -0
  182. package/dist/ingest/store.js +92 -0
  183. package/dist/ingest/store.js.map +1 -0
  184. package/dist/kb/folders.d.ts +37 -0
  185. package/dist/kb/folders.d.ts.map +1 -0
  186. package/dist/kb/folders.js +133 -0
  187. package/dist/kb/folders.js.map +1 -0
  188. package/dist/kb/frontmatter.d.ts +91 -0
  189. package/dist/kb/frontmatter.d.ts.map +1 -0
  190. package/dist/kb/frontmatter.js +274 -0
  191. package/dist/kb/frontmatter.js.map +1 -0
  192. package/dist/kb/line-facts.d.ts +29 -0
  193. package/dist/kb/line-facts.d.ts.map +1 -0
  194. package/dist/kb/line-facts.js +23 -0
  195. package/dist/kb/line-facts.js.map +1 -0
  196. package/dist/kb/page.d.ts +92 -0
  197. package/dist/kb/page.d.ts.map +1 -0
  198. package/dist/kb/page.js +243 -0
  199. package/dist/kb/page.js.map +1 -0
  200. package/dist/kb/scan.d.ts +38 -0
  201. package/dist/kb/scan.d.ts.map +1 -0
  202. package/dist/kb/scan.js +109 -0
  203. package/dist/kb/scan.js.map +1 -0
  204. package/dist/kb/words.d.ts +30 -0
  205. package/dist/kb/words.d.ts.map +1 -0
  206. package/dist/kb/words.js +107 -0
  207. package/dist/kb/words.js.map +1 -0
  208. package/dist/maintenance/adopt.d.ts +65 -0
  209. package/dist/maintenance/adopt.d.ts.map +1 -0
  210. package/dist/maintenance/adopt.js +238 -0
  211. package/dist/maintenance/adopt.js.map +1 -0
  212. package/dist/maintenance/budget.d.ts +55 -0
  213. package/dist/maintenance/budget.d.ts.map +1 -0
  214. package/dist/maintenance/budget.js +61 -0
  215. package/dist/maintenance/budget.js.map +1 -0
  216. package/dist/maintenance/conflicts.d.ts +105 -0
  217. package/dist/maintenance/conflicts.d.ts.map +1 -0
  218. package/dist/maintenance/conflicts.js +368 -0
  219. package/dist/maintenance/conflicts.js.map +1 -0
  220. package/dist/maintenance/contradictions.d.ts +34 -0
  221. package/dist/maintenance/contradictions.d.ts.map +1 -0
  222. package/dist/maintenance/contradictions.js +199 -0
  223. package/dist/maintenance/contradictions.js.map +1 -0
  224. package/dist/maintenance/curate.d.ts +156 -0
  225. package/dist/maintenance/curate.d.ts.map +1 -0
  226. package/dist/maintenance/curate.js +2070 -0
  227. package/dist/maintenance/curate.js.map +1 -0
  228. package/dist/maintenance/dream.d.ts +139 -0
  229. package/dist/maintenance/dream.d.ts.map +1 -0
  230. package/dist/maintenance/dream.js +1632 -0
  231. package/dist/maintenance/dream.js.map +1 -0
  232. package/dist/maintenance/graph-candidates.d.ts +19 -0
  233. package/dist/maintenance/graph-candidates.d.ts.map +1 -0
  234. package/dist/maintenance/graph-candidates.js +120 -0
  235. package/dist/maintenance/graph-candidates.js.map +1 -0
  236. package/dist/maintenance/housekeeping.d.ts +81 -0
  237. package/dist/maintenance/housekeeping.d.ts.map +1 -0
  238. package/dist/maintenance/housekeeping.js +281 -0
  239. package/dist/maintenance/housekeeping.js.map +1 -0
  240. package/dist/maintenance/link-repairs.d.ts +58 -0
  241. package/dist/maintenance/link-repairs.d.ts.map +1 -0
  242. package/dist/maintenance/link-repairs.js +281 -0
  243. package/dist/maintenance/link-repairs.js.map +1 -0
  244. package/dist/maintenance/log.d.ts +41 -0
  245. package/dist/maintenance/log.d.ts.map +1 -0
  246. package/dist/maintenance/log.js +72 -0
  247. package/dist/maintenance/log.js.map +1 -0
  248. package/dist/maintenance/managed-item-routing.d.ts +48 -0
  249. package/dist/maintenance/managed-item-routing.d.ts.map +1 -0
  250. package/dist/maintenance/managed-item-routing.js +281 -0
  251. package/dist/maintenance/managed-item-routing.js.map +1 -0
  252. package/dist/maintenance/managed-item-sources.d.ts +38 -0
  253. package/dist/maintenance/managed-item-sources.d.ts.map +1 -0
  254. package/dist/maintenance/managed-item-sources.js +324 -0
  255. package/dist/maintenance/managed-item-sources.js.map +1 -0
  256. package/dist/maintenance/managed-items.d.ts +162 -0
  257. package/dist/maintenance/managed-items.d.ts.map +1 -0
  258. package/dist/maintenance/managed-items.js +1329 -0
  259. package/dist/maintenance/managed-items.js.map +1 -0
  260. package/dist/maintenance/merge-classifier.d.ts +19 -0
  261. package/dist/maintenance/merge-classifier.d.ts.map +1 -0
  262. package/dist/maintenance/merge-classifier.js +49 -0
  263. package/dist/maintenance/merge-classifier.js.map +1 -0
  264. package/dist/maintenance/model-telemetry.d.ts +45 -0
  265. package/dist/maintenance/model-telemetry.d.ts.map +1 -0
  266. package/dist/maintenance/model-telemetry.js +107 -0
  267. package/dist/maintenance/model-telemetry.js.map +1 -0
  268. package/dist/maintenance/observe.d.ts +72 -0
  269. package/dist/maintenance/observe.d.ts.map +1 -0
  270. package/dist/maintenance/observe.js +265 -0
  271. package/dist/maintenance/observe.js.map +1 -0
  272. package/dist/maintenance/path-policy.d.ts +83 -0
  273. package/dist/maintenance/path-policy.d.ts.map +1 -0
  274. package/dist/maintenance/path-policy.js +360 -0
  275. package/dist/maintenance/path-policy.js.map +1 -0
  276. package/dist/maintenance/plans.d.ts +366 -0
  277. package/dist/maintenance/plans.d.ts.map +1 -0
  278. package/dist/maintenance/plans.js +4060 -0
  279. package/dist/maintenance/plans.js.map +1 -0
  280. package/dist/maintenance/profile.d.ts +33 -0
  281. package/dist/maintenance/profile.d.ts.map +1 -0
  282. package/dist/maintenance/profile.js +99 -0
  283. package/dist/maintenance/profile.js.map +1 -0
  284. package/dist/maintenance/recovery.d.ts +38 -0
  285. package/dist/maintenance/recovery.d.ts.map +1 -0
  286. package/dist/maintenance/recovery.js +217 -0
  287. package/dist/maintenance/recovery.js.map +1 -0
  288. package/dist/maintenance/repair.d.ts +37 -0
  289. package/dist/maintenance/repair.d.ts.map +1 -0
  290. package/dist/maintenance/repair.js +183 -0
  291. package/dist/maintenance/repair.js.map +1 -0
  292. package/dist/maintenance/rule-drift.d.ts +104 -0
  293. package/dist/maintenance/rule-drift.d.ts.map +1 -0
  294. package/dist/maintenance/rule-drift.js +507 -0
  295. package/dist/maintenance/rule-drift.js.map +1 -0
  296. package/dist/maintenance/run-verification.d.ts +44 -0
  297. package/dist/maintenance/run-verification.d.ts.map +1 -0
  298. package/dist/maintenance/run-verification.js +253 -0
  299. package/dist/maintenance/run-verification.js.map +1 -0
  300. package/dist/maintenance/runs.d.ts +142 -0
  301. package/dist/maintenance/runs.d.ts.map +1 -0
  302. package/dist/maintenance/runs.js +439 -0
  303. package/dist/maintenance/runs.js.map +1 -0
  304. package/dist/maintenance/semantic-merge-discovery.d.ts +54 -0
  305. package/dist/maintenance/semantic-merge-discovery.d.ts.map +1 -0
  306. package/dist/maintenance/semantic-merge-discovery.js +308 -0
  307. package/dist/maintenance/semantic-merge-discovery.js.map +1 -0
  308. package/dist/maintenance/temporal.d.ts +44 -0
  309. package/dist/maintenance/temporal.d.ts.map +1 -0
  310. package/dist/maintenance/temporal.js +295 -0
  311. package/dist/maintenance/temporal.js.map +1 -0
  312. package/dist/models/client.d.ts +214 -0
  313. package/dist/models/client.d.ts.map +1 -0
  314. package/dist/models/client.js +904 -0
  315. package/dist/models/client.js.map +1 -0
  316. package/dist/models/provider-api.d.ts +28 -0
  317. package/dist/models/provider-api.d.ts.map +1 -0
  318. package/dist/models/provider-api.js +320 -0
  319. package/dist/models/provider-api.js.map +1 -0
  320. package/dist/open.d.ts +163 -0
  321. package/dist/open.d.ts.map +1 -0
  322. package/dist/open.js +382 -0
  323. package/dist/open.js.map +1 -0
  324. package/dist/ops/adopt.d.ts +12 -0
  325. package/dist/ops/adopt.d.ts.map +1 -0
  326. package/dist/ops/adopt.js +138 -0
  327. package/dist/ops/adopt.js.map +1 -0
  328. package/dist/ops/answer.d.ts +29 -0
  329. package/dist/ops/answer.d.ts.map +1 -0
  330. package/dist/ops/answer.js +557 -0
  331. package/dist/ops/answer.js.map +1 -0
  332. package/dist/ops/context.d.ts +18 -0
  333. package/dist/ops/context.d.ts.map +1 -0
  334. package/dist/ops/context.js +713 -0
  335. package/dist/ops/context.js.map +1 -0
  336. package/dist/ops/folder.d.ts +23 -0
  337. package/dist/ops/folder.d.ts.map +1 -0
  338. package/dist/ops/folder.js +130 -0
  339. package/dist/ops/folder.js.map +1 -0
  340. package/dist/ops/forget.d.ts +14 -0
  341. package/dist/ops/forget.d.ts.map +1 -0
  342. package/dist/ops/forget.js +212 -0
  343. package/dist/ops/forget.js.map +1 -0
  344. package/dist/ops/graph.d.ts +10 -0
  345. package/dist/ops/graph.d.ts.map +1 -0
  346. package/dist/ops/graph.js +480 -0
  347. package/dist/ops/graph.js.map +1 -0
  348. package/dist/ops/ingest.d.ts +40 -0
  349. package/dist/ops/ingest.d.ts.map +1 -0
  350. package/dist/ops/ingest.js +434 -0
  351. package/dist/ops/ingest.js.map +1 -0
  352. package/dist/ops/list.d.ts +9 -0
  353. package/dist/ops/list.d.ts.map +1 -0
  354. package/dist/ops/list.js +217 -0
  355. package/dist/ops/list.js.map +1 -0
  356. package/dist/ops/move.d.ts +20 -0
  357. package/dist/ops/move.d.ts.map +1 -0
  358. package/dist/ops/move.js +173 -0
  359. package/dist/ops/move.js.map +1 -0
  360. package/dist/ops/read.d.ts +9 -0
  361. package/dist/ops/read.d.ts.map +1 -0
  362. package/dist/ops/read.js +271 -0
  363. package/dist/ops/read.js.map +1 -0
  364. package/dist/ops/recall.d.ts +13 -0
  365. package/dist/ops/recall.d.ts.map +1 -0
  366. package/dist/ops/recall.js +297 -0
  367. package/dist/ops/recall.js.map +1 -0
  368. package/dist/ops/remember.d.ts +34 -0
  369. package/dist/ops/remember.d.ts.map +1 -0
  370. package/dist/ops/remember.js +660 -0
  371. package/dist/ops/remember.js.map +1 -0
  372. package/dist/ops/timeline.d.ts +11 -0
  373. package/dist/ops/timeline.d.ts.map +1 -0
  374. package/dist/ops/timeline.js +111 -0
  375. package/dist/ops/timeline.js.map +1 -0
  376. package/dist/ops/undo.d.ts +9 -0
  377. package/dist/ops/undo.d.ts.map +1 -0
  378. package/dist/ops/undo.js +38 -0
  379. package/dist/ops/undo.js.map +1 -0
  380. package/dist/ops/write.d.ts +55 -0
  381. package/dist/ops/write.d.ts.map +1 -0
  382. package/dist/ops/write.js +463 -0
  383. package/dist/ops/write.js.map +1 -0
  384. package/dist/recall/assemble.d.ts +81 -0
  385. package/dist/recall/assemble.d.ts.map +1 -0
  386. package/dist/recall/assemble.js +603 -0
  387. package/dist/recall/assemble.js.map +1 -0
  388. package/dist/recall/expand.d.ts +55 -0
  389. package/dist/recall/expand.d.ts.map +1 -0
  390. package/dist/recall/expand.js +282 -0
  391. package/dist/recall/expand.js.map +1 -0
  392. package/dist/recall/graph-arm.d.ts +17 -0
  393. package/dist/recall/graph-arm.d.ts.map +1 -0
  394. package/dist/recall/graph-arm.js +227 -0
  395. package/dist/recall/graph-arm.js.map +1 -0
  396. package/dist/recall/llm-rerank.d.ts +55 -0
  397. package/dist/recall/llm-rerank.d.ts.map +1 -0
  398. package/dist/recall/llm-rerank.js +213 -0
  399. package/dist/recall/llm-rerank.js.map +1 -0
  400. package/dist/recall/reranker-calibration.d.ts +23 -0
  401. package/dist/recall/reranker-calibration.d.ts.map +1 -0
  402. package/dist/recall/reranker-calibration.js +161 -0
  403. package/dist/recall/reranker-calibration.js.map +1 -0
  404. package/dist/recall/search.d.ts +107 -0
  405. package/dist/recall/search.d.ts.map +1 -0
  406. package/dist/recall/search.js +530 -0
  407. package/dist/recall/search.js.map +1 -0
  408. package/dist/reserved.d.ts +39 -0
  409. package/dist/reserved.d.ts.map +1 -0
  410. package/dist/reserved.js +63 -0
  411. package/dist/reserved.js.map +1 -0
  412. package/dist/rules/compile.d.ts +27 -0
  413. package/dist/rules/compile.d.ts.map +1 -0
  414. package/dist/rules/compile.js +105 -0
  415. package/dist/rules/compile.js.map +1 -0
  416. package/dist/setup/model-free.d.ts +15 -0
  417. package/dist/setup/model-free.d.ts.map +1 -0
  418. package/dist/setup/model-free.js +26 -0
  419. package/dist/setup/model-free.js.map +1 -0
  420. package/dist/setup/openai.d.ts +46 -0
  421. package/dist/setup/openai.d.ts.map +1 -0
  422. package/dist/setup/openai.js +165 -0
  423. package/dist/setup/openai.js.map +1 -0
  424. package/dist/store/db.d.ts +61 -0
  425. package/dist/store/db.d.ts.map +1 -0
  426. package/dist/store/db.js +265 -0
  427. package/dist/store/db.js.map +1 -0
  428. package/dist/store/ids.d.ts +29 -0
  429. package/dist/store/ids.d.ts.map +1 -0
  430. package/dist/store/ids.js +0 -0
  431. package/dist/store/ids.js.map +1 -0
  432. package/dist/store/migrations.d.ts +54 -0
  433. package/dist/store/migrations.d.ts.map +1 -0
  434. package/dist/store/migrations.js +923 -0
  435. package/dist/store/migrations.js.map +1 -0
  436. package/dist/store/vectors.d.ts +34 -0
  437. package/dist/store/vectors.d.ts.map +1 -0
  438. package/dist/store/vectors.js +158 -0
  439. package/dist/store/vectors.js.map +1 -0
  440. package/dist/timeline/documents.d.ts +23 -0
  441. package/dist/timeline/documents.d.ts.map +1 -0
  442. package/dist/timeline/documents.js +262 -0
  443. package/dist/timeline/documents.js.map +1 -0
  444. package/dist/watch/watcher.d.ts +43 -0
  445. package/dist/watch/watcher.d.ts.map +1 -0
  446. package/dist/watch/watcher.js +143 -0
  447. package/dist/watch/watcher.js.map +1 -0
  448. package/dist/write/atomic.d.ts +34 -0
  449. package/dist/write/atomic.d.ts.map +1 -0
  450. package/dist/write/atomic.js +58 -0
  451. package/dist/write/atomic.js.map +1 -0
  452. package/dist/write/conflict.d.ts +43 -0
  453. package/dist/write/conflict.d.ts.map +1 -0
  454. package/dist/write/conflict.js +149 -0
  455. package/dist/write/conflict.js.map +1 -0
  456. package/dist/write/edit.d.ts +59 -0
  457. package/dist/write/edit.d.ts.map +1 -0
  458. package/dist/write/edit.js +231 -0
  459. package/dist/write/edit.js.map +1 -0
  460. package/dist/write/gate.d.ts +59 -0
  461. package/dist/write/gate.d.ts.map +1 -0
  462. package/dist/write/gate.js +99 -0
  463. package/dist/write/gate.js.map +1 -0
  464. package/dist/write/journal.d.ts +90 -0
  465. package/dist/write/journal.d.ts.map +1 -0
  466. package/dist/write/journal.js +187 -0
  467. package/dist/write/journal.js.map +1 -0
  468. package/dist/write/ledger.d.ts +28 -0
  469. package/dist/write/ledger.d.ts.map +1 -0
  470. package/dist/write/ledger.js +141 -0
  471. package/dist/write/ledger.js.map +1 -0
  472. package/dist/write/placement.d.ts +29 -0
  473. package/dist/write/placement.d.ts.map +1 -0
  474. package/dist/write/placement.js +140 -0
  475. package/dist/write/placement.js.map +1 -0
  476. package/dist/write/remember-fallback.d.ts +18 -0
  477. package/dist/write/remember-fallback.d.ts.map +1 -0
  478. package/dist/write/remember-fallback.js +48 -0
  479. package/dist/write/remember-fallback.js.map +1 -0
  480. package/dist/write/retain.d.ts +61 -0
  481. package/dist/write/retain.d.ts.map +1 -0
  482. package/dist/write/retain.js +272 -0
  483. package/dist/write/retain.js.map +1 -0
  484. package/package.json +50 -0
  485. package/swift/extract.swift +232 -0
@@ -0,0 +1,217 @@
1
+ import { ListInput } from '@tenphi/akno-protocol';
2
+ import { physicalFolders } from "../kb/folders.js";
3
+ import { effectiveRule, matchRules } from "../rules/compile.js";
4
+ /**
5
+ * Browse structure rather than search it. The point of this op is that an agent
6
+ * that knows what folders exist stops guessing slugs: choosing one and avoiding a duplicate
7
+ * page is much easier when the structure is legible.
8
+ */
9
+ export async function list(ctx, rawInput) {
10
+ const input = ListInput.parse(rawInput);
11
+ const kind = input.kind ?? (input.folder || input.type || input.tag || input.role ? 'pages' : 'folders');
12
+ if (kind === 'tree')
13
+ return listTree(ctx, input);
14
+ if (kind === 'folders')
15
+ return listFolders(ctx, input);
16
+ return listPages(ctx, input);
17
+ }
18
+ function listPages(ctx, input) {
19
+ const clauses = ["role != 'ignored'"];
20
+ const params = [];
21
+ if (input.folder) {
22
+ clauses.push('(slug = ? OR slug LIKE ?)');
23
+ params.push(input.folder, `${input.folder}/%`);
24
+ }
25
+ if (input.type) {
26
+ clauses.push('type = ?');
27
+ params.push(input.type);
28
+ }
29
+ if (input.role) {
30
+ clauses.push('role = ?');
31
+ params.push(input.role);
32
+ }
33
+ const order = input.order === 'slug' ? 'slug ASC' : input.order === 'size' ? 'bytes DESC' : 'updated_at DESC';
34
+ const limit = input.limit ?? 100;
35
+ const rows = ctx.store.db
36
+ .prepare(`SELECT slug, title, type, role, tags, summary, updated_at, bytes
37
+ FROM pages WHERE ${clauses.join(' AND ')} ORDER BY ${order}`)
38
+ .all(...params);
39
+ // Tag filtering happens here rather than in SQL: tags are a JSON array, and a
40
+ // LIKE on serialized JSON matches `finance` inside `finance-review`.
41
+ const wanted = input.tag?.toLowerCase();
42
+ const filtered = wanted
43
+ ? rows.filter((row) => JSON.parse(row.tags).some((tag) => tag.toLowerCase() === wanted))
44
+ : rows;
45
+ return {
46
+ status: filtered.length === 0 ? 'empty' : 'ok',
47
+ pages: filtered.slice(0, limit).map((row) => ({
48
+ slug: row.slug,
49
+ title: row.title,
50
+ type: row.type,
51
+ role: row.role,
52
+ tags: JSON.parse(row.tags),
53
+ summary: row.summary,
54
+ ...(row.updated_at ? { updated: row.updated_at.slice(0, 10) } : {}),
55
+ bytes: row.bytes,
56
+ })),
57
+ total: filtered.length,
58
+ };
59
+ }
60
+ function listFolders(ctx, input) {
61
+ const prefix = input.folder ? `${input.folder}/` : '';
62
+ const rows = ctx.store.db.prepare("SELECT slug FROM pages WHERE role != 'ignored' ORDER BY slug").all();
63
+ const direct = new Map();
64
+ const deep = new Map();
65
+ const subfolders = new Map();
66
+ for (const { slug } of rows) {
67
+ if (prefix && !slug.startsWith(prefix))
68
+ continue;
69
+ const remainder = slug.slice(prefix.length);
70
+ const segments = remainder.split('/');
71
+ if (segments.length === 1) {
72
+ // A page sitting directly in this folder, not a child folder.
73
+ continue;
74
+ }
75
+ const child = segments[0];
76
+ const childPath = `${prefix}${child}`;
77
+ deep.set(childPath, (deep.get(childPath) ?? 0) + 1);
78
+ if (segments.length === 2)
79
+ direct.set(childPath, (direct.get(childPath) ?? 0) + 1);
80
+ else {
81
+ if (!subfolders.has(childPath))
82
+ subfolders.set(childPath, new Set());
83
+ subfolders.get(childPath).add(segments[1]);
84
+ }
85
+ }
86
+ // A folder that has been declared but holds no page yet is still somewhere to file
87
+ // something — it is, in fact, the folder most likely to be the right answer, because
88
+ // somebody has just said what it is for. Deriving structure from pages alone made a freshly
89
+ // declared folder invisible to the very caller that had declared it.
90
+ const declared = new Set();
91
+ for (const folderPath of declaredFolders(ctx, prefix)) {
92
+ if (folderPath.includes('/') && !prefix)
93
+ continue;
94
+ if (!deep.has(folderPath))
95
+ declared.add(folderPath);
96
+ }
97
+ // Directories are structure even before the first page exists. The index has no row capable of
98
+ // representing an empty folder, so include the user's on-disk taxonomy explicitly.
99
+ const physical = new Set(physicalFolders(ctx.config, { under: input.folder, depth: 1 }));
100
+ const folders = [...new Set([...deep.keys(), ...declared, ...physical])]
101
+ .sort()
102
+ .slice(0, input.limit ?? 200)
103
+ .map((folderPath) => {
104
+ // Reporting which rule governs a folder is what makes "default to visible" true for
105
+ // structure: a rule that quietly excludes half a knowledge base is worse than no rule.
106
+ // The fields come from `effectiveRule` and the attribution from the most specific match,
107
+ // so a `description` on `research/**` and a `rank` on `**` both show rather than one
108
+ // erasing the other.
109
+ const match = matchRules(`${folderPath}/x`, ctx.config.rules);
110
+ const effective = effectiveRule(`${folderPath}/x`, ctx.config.rules);
111
+ return {
112
+ path: folderPath,
113
+ pages: direct.get(folderPath) ?? 0,
114
+ pages_deep: deep.get(folderPath) ?? 0,
115
+ folders: subfolders.get(folderPath)?.size ?? 0,
116
+ ...(declared.has(folderPath) ? { declared: true } : {}),
117
+ ...(match.rule
118
+ ? {
119
+ rule: {
120
+ ...(effective.role ? { role: effective.role } : {}),
121
+ ...(effective.remember ? { remember: effective.remember } : {}),
122
+ ...(effective.description ? { description: effective.description } : {}),
123
+ source: `${match.rule.glob} (${match.rule.source})`,
124
+ },
125
+ }
126
+ : {}),
127
+ };
128
+ });
129
+ return { status: folders.length === 0 ? 'empty' : 'ok', folders, total: folders.length };
130
+ }
131
+ /**
132
+ * An indented outline, for the structure section of a `context` bundle. Cheap to
133
+ * produce and worth a lot: it is the difference between an agent that knows
134
+ * `documents/` exists and one that invents `docs/`.
135
+ */
136
+ function listTree(ctx, input) {
137
+ const maxDepth = input.depth ?? 2;
138
+ const prefix = input.folder ? `${input.folder}/` : '';
139
+ const rows = ctx.store.db.prepare("SELECT slug FROM pages WHERE role != 'ignored' ORDER BY slug").all();
140
+ const counts = new Map();
141
+ for (const { slug } of rows) {
142
+ if (prefix && !slug.startsWith(prefix))
143
+ continue;
144
+ const segments = slug.slice(prefix.length).split('/');
145
+ for (let depth = 1; depth <= Math.min(maxDepth, segments.length - 1); depth++) {
146
+ const key = segments.slice(0, depth).join('/');
147
+ counts.set(key, (counts.get(key) ?? 0) + 1);
148
+ }
149
+ }
150
+ // Declared folders with nothing in them yet belong in the outline too — an agent choosing a
151
+ // destination should see the folder somebody just created for this, not conclude it has to
152
+ // invent one.
153
+ for (const folderPath of declaredFolders(ctx, prefix)) {
154
+ const key = folderPath.slice(prefix.length);
155
+ if (key.length === 0 || key.split('/').length > maxDepth)
156
+ continue;
157
+ if (!counts.has(key))
158
+ counts.set(key, 0);
159
+ }
160
+ for (const folderPath of physicalFolders(ctx.config, { under: input.folder, depth: maxDepth })) {
161
+ const key = prefix ? folderPath.slice(prefix.length) : folderPath;
162
+ if (key.length === 0 || key.split('/').length > maxDepth)
163
+ continue;
164
+ if (!counts.has(key))
165
+ counts.set(key, 0);
166
+ }
167
+ const lines = [...counts.keys()].sort().map((key) => {
168
+ const depth = key.split('/').length - 1;
169
+ const label = key.split('/').at(-1);
170
+ // The description, only at the top level and only in a clause. This outline is the whole
171
+ // of what a turn is told about structure, and `research/ (12)` does not say that research
172
+ // holds findings about the world while `household/` holds claims about this household —
173
+ // which is the distinction a caller gets wrong when nothing tells it.
174
+ const described = depth === 0 ? effectiveRule(`${prefix}${key}/x`, ctx.config.rules).description : undefined;
175
+ const note = described ? ` — ${truncate(described, 90)}` : '';
176
+ return `${' '.repeat(depth)}${label}/ (${counts.get(key)})${note}`;
177
+ });
178
+ const rootPages = rows.filter((row) => !row.slug.slice(prefix.length).includes('/')).length;
179
+ if (rootPages > 0)
180
+ lines.unshift(`${input.folder ?? '.'}: ${rootPages} pages`);
181
+ return { status: 'ok', tree: lines.join('\n'), total: counts.size };
182
+ }
183
+ /**
184
+ * Folders named by a rule, under `prefix`, that a caller is allowed to see.
185
+ *
186
+ * A folder with a rule but no pages is still somewhere to file something — it is, in fact,
187
+ * the folder most likely to be right, because somebody has just said what it is for. Deriving
188
+ * structure from pages alone made a freshly declared folder invisible to the very caller that
189
+ * declared it.
190
+ *
191
+ * `ignored` is the exception, and not a small one: ignoring a folder is a statement that it
192
+ * should not be in the index at all, and listing it because it happens to have a rule would
193
+ * make the one role that means "do not look here" the one role that always appears.
194
+ */
195
+ function declaredFolders(ctx, prefix) {
196
+ const out = [];
197
+ for (const rule of ctx.config.rules) {
198
+ const folderPath = rule.glob.replace(/\/\*+$/, '');
199
+ if (folderPath.length === 0 || folderPath.includes('*'))
200
+ continue;
201
+ if (!folderPath.startsWith(prefix))
202
+ continue;
203
+ if (effectiveRule(`${folderPath}/x`, ctx.config.rules).role === 'ignored')
204
+ continue;
205
+ out.push(folderPath);
206
+ }
207
+ return out;
208
+ }
209
+ /** Cut at a word boundary — half a word reads as a typo rather than as an elision. */
210
+ function truncate(text, max) {
211
+ if (text.length <= max)
212
+ return text;
213
+ const cut = text.slice(0, max);
214
+ const space = cut.lastIndexOf(' ');
215
+ return `${(space > max * 0.6 ? cut.slice(0, space) : cut).replace(/[.,;:]$/, '')}…`;
216
+ }
217
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/ops/list.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { type MoveOutput } from '@tenphi/akno-protocol';
2
+ import type { AknoContext } from '../context.ts';
3
+ /**
4
+ * Relocate a page with its documents, rewriting embeds and **reporting**
5
+ * inbound links.
6
+ *
7
+ * The asymmetry between rewriting and reporting is deliberate:
8
+ *
9
+ * - The moved page's own links to its attachments are rewritten, because the move
10
+ * renamed those files and leaving them would break the page Akno just moved.
11
+ * - Links *into* the page from elsewhere are reported, never rewritten. Editing
12
+ * half a dozen other people's pages as a side effect of moving one is a much
13
+ * bigger action than the caller asked for, and inbound links are already treated
14
+ * that now point nowhere as something to report.
15
+ *
16
+ * Identity survives regardless: the page keeps its `id`, so facts, events and
17
+ * journal history stay attached.
18
+ */
19
+ export declare function move(ctx: AknoContext, rawInput: unknown): Promise<MoveOutput>;
20
+ //# sourceMappingURL=move.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"move.d.ts","sourceRoot":"","sources":["../../src/ops/move.ts"],"names":[],"mappings":"AAEA,OAAO,EAAwB,KAAK,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAC9E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAMjD;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,IAAI,CAAC,GAAG,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,CAuInF"}
@@ -0,0 +1,173 @@
1
+ import fsp from 'node:fs/promises';
2
+ import path from 'node:path';
3
+ import { AknoError, MoveInput } from '@tenphi/akno-protocol';
4
+ import { ATTACHMENT_NAME } from "../kb/page.js";
5
+ import { recordOwnWrite, writeFileAtomic } from "../write/atomic.js";
6
+ import { normalizeSlug } from "./write.js";
7
+ /**
8
+ * Relocate a page with its documents, rewriting embeds and **reporting**
9
+ * inbound links.
10
+ *
11
+ * The asymmetry between rewriting and reporting is deliberate:
12
+ *
13
+ * - The moved page's own links to its attachments are rewritten, because the move
14
+ * renamed those files and leaving them would break the page Akno just moved.
15
+ * - Links *into* the page from elsewhere are reported, never rewritten. Editing
16
+ * half a dozen other people's pages as a side effect of moving one is a much
17
+ * bigger action than the caller asked for, and inbound links are already treated
18
+ * that now point nowhere as something to report.
19
+ *
20
+ * Identity survives regardless: the page keeps its `id`, so facts, events and
21
+ * journal history stay attached.
22
+ */
23
+ export async function move(ctx, rawInput) {
24
+ const input = MoveInput.parse(rawInput);
25
+ const from = normalizeSlug(input.from);
26
+ const to = normalizeSlug(input.to);
27
+ if (from === to)
28
+ return { status: 'ok', outcome: 'ok', note: 'source and destination are the same' };
29
+ const page = ctx.store.db.prepare('SELECT id, rel_path FROM pages WHERE slug = ?').get(from);
30
+ if (!page)
31
+ throw new AknoError('not_found', `no page at ${from}`);
32
+ if (ctx.store.db.prepare('SELECT 1 FROM pages WHERE slug = ?').get(to)) {
33
+ throw new AknoError('invalid', `${to} already exists — move it or pick another slug`);
34
+ }
35
+ // The destination folder is checked exactly as a new page's would be: moving a
36
+ // page into `medical/` creates `medical/` just as surely as writing one there.
37
+ const decision = ctx.gate.check(to, ctx.actor);
38
+ if (!decision.allowed) {
39
+ return {
40
+ status: 'ok',
41
+ outcome: 'requires_folder',
42
+ requires_folder: decision.requiresFolder,
43
+ note: `'${decision.requiresFolder.folder}' has not been declared. Call \`folder\` with a ` +
44
+ 'description of what belongs there, then repeat the move.',
45
+ };
46
+ }
47
+ const files = [];
48
+ const moved = [];
49
+ const toRelPath = `${to}.md`;
50
+ // ── Attachments first ───────────────────────────────────────────────────
51
+ // Content-addressed names are derived from the page basename, so a move
52
+ // renames them too. Doing these before the page means a crash leaves the page
53
+ // still pointing at files that exist.
54
+ const documents = ctx.store.db
55
+ .prepare('SELECT id, rel_path, renders FROM documents WHERE page_id = ?')
56
+ .all(page.id);
57
+ const destinations = new Map();
58
+ for (const document of documents)
59
+ destinations.set(document.rel_path, movedAttachmentPath(document.rel_path, from, to));
60
+ // A rendition is named after the file it renders, so it goes wherever that file goes.
61
+ // Deriving it from the page name instead would mean teaching the content-addressing rule
62
+ // about double extensions and then keeping two derivations agreeing with each other.
63
+ for (const document of documents) {
64
+ if (!document.renders)
65
+ continue;
66
+ destinations.set(document.rel_path, movedRenditionPath(document.rel_path, document.renders, destinations));
67
+ }
68
+ const rewrites = [];
69
+ for (const document of documents) {
70
+ const next = destinations.get(document.rel_path);
71
+ if (next === document.rel_path)
72
+ continue;
73
+ await fsp.mkdir(path.dirname(path.join(ctx.config.aknoPath, next)), { recursive: true });
74
+ await fsp.rename(path.join(ctx.config.aknoPath, document.rel_path), path.join(ctx.config.aknoPath, next));
75
+ // One entry naming the destination, not a `moved`/`created` pair. Reversing that pair
76
+ // deleted the new file and then tried to restore a path holding nothing — an attachment
77
+ // has no text in `before` to put back — so undoing a move used to eat the binary.
78
+ files.push({ relPath: document.rel_path, action: 'moved', before: null, after: null, movedTo: next });
79
+ moved.push(next);
80
+ rewrites.push([path.basename(document.rel_path), path.basename(next)]);
81
+ }
82
+ // ── The page ────────────────────────────────────────────────────────────
83
+ const original = await fsp.readFile(path.join(ctx.config.aknoPath, page.rel_path), 'utf8');
84
+ let content = original;
85
+ for (const [oldName, newName] of rewrites) {
86
+ content = content.split(oldName).join(newName);
87
+ }
88
+ await fsp.mkdir(path.dirname(path.join(ctx.config.aknoPath, toRelPath)), { recursive: true });
89
+ const written = await writeFileAtomic(ctx.config.aknoPath, toRelPath, content);
90
+ await fsp.rm(path.join(ctx.config.aknoPath, page.rel_path), { force: true });
91
+ files.push({ relPath: page.rel_path, action: 'moved', before: original, after: null });
92
+ files.push({ relPath: toRelPath, action: 'created', before: null, after: written.after });
93
+ moved.push(toRelPath);
94
+ // ── Inbound links ───────────────────────────────────────────────────────
95
+ const inbound = ctx.store.db
96
+ .prepare(`SELECT DISTINCT p.slug FROM links l JOIN pages p ON p.id = l.from_page
97
+ WHERE l.to_slug = ? AND p.id != ?`)
98
+ .all(from, page.id);
99
+ const changeId = ctx.journal.record({
100
+ actor: ctx.actor,
101
+ op: 'move',
102
+ summary: `${from} -> ${to}${documents.length > 0 ? ` with ${documents.length} attachment(s)` : ''}`,
103
+ files,
104
+ });
105
+ ctx.store.transaction(() => {
106
+ // Follow the id rather than retiring it — the same rule the watcher uses for a
107
+ // hand rename.
108
+ ctx.store.db.prepare('UPDATE pages SET slug = ?, rel_path = ? WHERE id = ?').run(to, toRelPath, page.id);
109
+ ctx.store.db.prepare('DELETE FROM files WHERE rel_path = ?').run(page.rel_path);
110
+ for (const document of documents) {
111
+ const next = destinations.get(document.rel_path);
112
+ // `renders` is a path, so it follows the file it points at — a rendition still naming
113
+ // the old folder is a rendition of nothing.
114
+ const renders = document.renders ? (destinations.get(document.renders) ?? null) : null;
115
+ ctx.store.db
116
+ .prepare('UPDATE documents SET rel_path = ?, renders = ? WHERE id = ?')
117
+ .run(next, renders, document.id);
118
+ ctx.store.db.prepare('DELETE FROM files WHERE rel_path = ?').run(document.rel_path);
119
+ }
120
+ recordOwnWrite(ctx.store, ctx.config.aknoPath, toRelPath, content, page.id);
121
+ });
122
+ // The page kept its id and its body, so nothing needs re-deriving — only the
123
+ // structural walk to notice the paths moved.
124
+ await ctx.indexer.runForeground({ modelPaths: [] });
125
+ return {
126
+ status: 'ok',
127
+ outcome: 'ok',
128
+ change_id: changeId,
129
+ moved,
130
+ ...(inbound.length > 0
131
+ ? {
132
+ broken_inbound: inbound.map((row) => row.slug),
133
+ note: `${inbound.length} page(s) still link to '${from}'. They are reported rather than rewritten — ` +
134
+ 'editing them is a bigger change than the one you asked for.',
135
+ }
136
+ : {}),
137
+ };
138
+ }
139
+ /**
140
+ * `documents/passport-ada-3f8c1a2b.jpg` moving with `documents/passport-ada`
141
+ * becomes `archive/id/passport-ada-3f8c1a2b.jpg` — the hash is content-addressing
142
+ * and must not change, since the bytes did not.
143
+ */
144
+ function movedAttachmentPath(relPath, from, to) {
145
+ const base = path.posix.basename(relPath.replace(/\\/g, '/'));
146
+ const fromBase = from.split('/').pop();
147
+ const toBase = to.split('/').pop();
148
+ const toDir = to.includes('/') ? to.slice(0, to.lastIndexOf('/')) : '';
149
+ const addressed = ATTACHMENT_NAME.exec(base);
150
+ const nextBase = addressed && addressed[1] === fromBase
151
+ ? `${toBase}-${addressed[2]}.${addressed[3]}`
152
+ : base.startsWith(`${fromBase}.`)
153
+ ? `${toBase}${base.slice(fromBase.length)}`
154
+ : base;
155
+ return toDir ? `${toDir}/${nextBase}` : nextBase;
156
+ }
157
+ /**
158
+ * Where the text beside a document goes when that document moves.
159
+ *
160
+ * Both spellings follow the same principle — the rendition is named after what it renders,
161
+ * not after the page — so both are answered from the source's destination rather than from
162
+ * a second reading of the page name.
163
+ */
164
+ function movedRenditionPath(relPath, renders, destinations) {
165
+ const source = destinations.get(renders);
166
+ if (!source)
167
+ return relPath;
168
+ // `contract.pdf.txt` keeps its suffix; `contract.txt` swaps the source's extension for it.
169
+ if (relPath === `${renders}.txt`)
170
+ return `${source}.txt`;
171
+ return `${source.slice(0, -path.posix.extname(source).length)}.txt`;
172
+ }
173
+ //# sourceMappingURL=move.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"move.js","sourceRoot":"","sources":["../../src/ops/move.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { type ReadOutput } from '@tenphi/akno-protocol';
2
+ import type { AknoContext } from '../context.ts';
3
+ /**
4
+ * `read({slug})` returns the full body of a `source` page every time.
5
+ * The role governs only what recall pulls in unprompted — **this is a relevance
6
+ * policy, not access control.**
7
+ */
8
+ export declare function read(ctx: AknoContext, rawInput: unknown): Promise<ReadOutput>;
9
+ //# sourceMappingURL=read.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read.d.ts","sourceRoot":"","sources":["../../src/ops/read.ts"],"names":[],"mappings":"AAGA,OAAO,EAAuC,KAAK,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAC7F,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAGjD;;;;GAIG;AACH,wBAAsB,IAAI,CAAC,GAAG,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,CAInF"}