wiki-graph-core 0.3.1

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 (576) hide show
  1. package/LICENSE +201 -0
  2. package/data/editor/clue_reviewer.jinja +410 -0
  3. package/data/editor/clue_reviewer_generator.jinja +428 -0
  4. package/data/editor/revision_feedback.jinja +5 -0
  5. package/data/editor/text_compressor.jinja +127 -0
  6. package/data/guaranteed/response_intent_classifier.jinja +8 -0
  7. package/data/help/commands/archive/next.jinja +29 -0
  8. package/data/help/commands/gc.jinja +38 -0
  9. package/data/help/commands/legacy/migrate.jinja +20 -0
  10. package/data/help/commands/legacy.jinja +19 -0
  11. package/data/help/commands/maintenance/chapter/add.jinja +41 -0
  12. package/data/help/commands/maintenance/chapter/list.jinja +33 -0
  13. package/data/help/commands/maintenance/chapter/move.jinja +36 -0
  14. package/data/help/commands/maintenance/chapter/remove.jinja +26 -0
  15. package/data/help/commands/maintenance/chapter/reset.jinja +29 -0
  16. package/data/help/commands/maintenance/chapter/set-source.jinja +34 -0
  17. package/data/help/commands/maintenance/chapter/set-summary.jinja +31 -0
  18. package/data/help/commands/maintenance/chapter/set-title.jinja +29 -0
  19. package/data/help/commands/maintenance/chapter/tree.jinja +58 -0
  20. package/data/help/commands/maintenance/chapter.jinja +59 -0
  21. package/data/help/commands/maintenance/cover.jinja +28 -0
  22. package/data/help/commands/maintenance/meta.jinja +55 -0
  23. package/data/help/commands/predicate.jinja +460 -0
  24. package/data/help/commands/root.jinja +83 -0
  25. package/data/help/commands/transform.jinja +34 -0
  26. package/data/help/commands/uri.jinja +274 -0
  27. package/data/help/topics/config.jinja +88 -0
  28. package/data/help/topics/format.jinja +72 -0
  29. package/data/help/topics/readiness.jinja +99 -0
  30. package/data/help/topics/recipe.jinja +151 -0
  31. package/data/help/topics/runtime.jinja +62 -0
  32. package/data/help/topics/uri.jinja +178 -0
  33. package/data/output/epub/cover.xhtml.jinja +13 -0
  34. package/data/output/epub/nav.xhtml.jinja +12 -0
  35. package/data/output/epub/package.opf.xml.jinja +39 -0
  36. package/data/output/epub/section.xhtml.jinja +12 -0
  37. package/data/topologization/book_coherence_extraction.jinja +223 -0
  38. package/data/topologization/chunk_extraction.jinja +233 -0
  39. package/data/topologization/evidence_choice.jinja +38 -0
  40. package/data/topologization/translate_chunks.jinja +138 -0
  41. package/data/topologization/user_focused_extraction.jinja +378 -0
  42. package/dist/archive/query/archive-view.d.ts +26 -0
  43. package/dist/archive/query/archive-view.js +4540 -0
  44. package/dist/archive/query/archive-view.js.map +1 -0
  45. package/dist/archive/query/continuation-cursor.d.ts +61 -0
  46. package/dist/archive/query/continuation-cursor.js +363 -0
  47. package/dist/archive/query/continuation-cursor.js.map +1 -0
  48. package/dist/archive/query/index.d.ts +29 -0
  49. package/dist/archive/query/index.js +63 -0
  50. package/dist/archive/query/index.js.map +1 -0
  51. package/dist/archive/query/lexical-search.d.ts +22 -0
  52. package/dist/archive/query/lexical-search.js +137 -0
  53. package/dist/archive/query/lexical-search.js.map +1 -0
  54. package/dist/archive/query/search-cache.d.ts +192 -0
  55. package/dist/archive/query/search-cache.js +1248 -0
  56. package/dist/archive/query/search-cache.js.map +1 -0
  57. package/dist/archive/search-index/index.d.ts +26 -0
  58. package/dist/archive/search-index/index.js +29 -0
  59. package/dist/archive/search-index/index.js.map +1 -0
  60. package/dist/archive/search-index/search-index.d.ts +26 -0
  61. package/dist/archive/search-index/search-index.js +555 -0
  62. package/dist/archive/search-index/search-index.js.map +1 -0
  63. package/dist/archive/search-index/search-tokenizer.d.ts +16 -0
  64. package/dist/archive/search-index/search-tokenizer.js +225 -0
  65. package/dist/archive/search-index/search-tokenizer.js.map +1 -0
  66. package/dist/common/cli-command.d.ts +4 -0
  67. package/dist/common/cli-command.js +7 -0
  68. package/dist/common/cli-command.js.map +1 -0
  69. package/dist/common/data-dir.d.ts +3 -0
  70. package/dist/common/data-dir.js +48 -0
  71. package/dist/common/data-dir.js.map +1 -0
  72. package/dist/common/language.d.ts +55 -0
  73. package/dist/common/language.js +208 -0
  74. package/dist/common/language.js.map +1 -0
  75. package/dist/common/llm-scope.d.ts +19 -0
  76. package/dist/common/llm-scope.js +31 -0
  77. package/dist/common/llm-scope.js.map +1 -0
  78. package/dist/common/logging.d.ts +22 -0
  79. package/dist/common/logging.js +141 -0
  80. package/dist/common/logging.js.map +1 -0
  81. package/dist/common/template.d.ts +8 -0
  82. package/dist/common/template.js +54 -0
  83. package/dist/common/template.js.map +1 -0
  84. package/dist/common/tinyld-language.d.ts +6 -0
  85. package/dist/common/tinyld-language.js +34 -0
  86. package/dist/common/tinyld-language.js.map +1 -0
  87. package/dist/common/wiki-graph-dir.d.ts +10 -0
  88. package/dist/common/wiki-graph-dir.js +41 -0
  89. package/dist/common/wiki-graph-dir.js.map +1 -0
  90. package/dist/common/wiki-graph-temp.d.ts +6 -0
  91. package/dist/common/wiki-graph-temp.js +21 -0
  92. package/dist/common/wiki-graph-temp.js.map +1 -0
  93. package/dist/common/wiki-graph-uri.d.ts +28 -0
  94. package/dist/common/wiki-graph-uri.js +171 -0
  95. package/dist/common/wiki-graph-uri.js.map +1 -0
  96. package/dist/context/index.d.ts +1 -0
  97. package/dist/context/index.js +13 -0
  98. package/dist/context/index.js.map +1 -0
  99. package/dist/context/task-context.d.ts +41 -0
  100. package/dist/context/task-context.js +111 -0
  101. package/dist/context/task-context.js.map +1 -0
  102. package/dist/document/database.d.ts +30 -0
  103. package/dist/document/database.js +273 -0
  104. package/dist/document/database.js.map +1 -0
  105. package/dist/document/document.d.ts +153 -0
  106. package/dist/document/document.js +615 -0
  107. package/dist/document/document.js.map +1 -0
  108. package/dist/document/fragments.d.ts +63 -0
  109. package/dist/document/fragments.js +371 -0
  110. package/dist/document/fragments.js.map +1 -0
  111. package/dist/document/index.d.ts +13 -0
  112. package/dist/document/index.js +62 -0
  113. package/dist/document/index.js.map +1 -0
  114. package/dist/document/schema.d.ts +8 -0
  115. package/dist/document/schema.js +472 -0
  116. package/dist/document/schema.js.map +1 -0
  117. package/dist/document/shared-state-database.d.ts +9 -0
  118. package/dist/document/shared-state-database.js +193 -0
  119. package/dist/document/shared-state-database.js.map +1 -0
  120. package/dist/document/stores.d.ts +203 -0
  121. package/dist/document/stores.js +1678 -0
  122. package/dist/document/stores.js.map +1 -0
  123. package/dist/document/text-streams.d.ts +86 -0
  124. package/dist/document/text-streams.js +515 -0
  125. package/dist/document/text-streams.js.map +1 -0
  126. package/dist/document/types.d.ts +148 -0
  127. package/dist/document/types.js +69 -0
  128. package/dist/document/types.js.map +1 -0
  129. package/dist/editor/clue.d.ts +27 -0
  130. package/dist/editor/clue.js +158 -0
  131. package/dist/editor/clue.js.map +1 -0
  132. package/dist/editor/compressor.d.ts +18 -0
  133. package/dist/editor/compressor.js +68 -0
  134. package/dist/editor/compressor.js.map +1 -0
  135. package/dist/editor/editor.d.ts +39 -0
  136. package/dist/editor/editor.js +253 -0
  137. package/dist/editor/editor.js.map +1 -0
  138. package/dist/editor/feedback.d.ts +16 -0
  139. package/dist/editor/feedback.js +104 -0
  140. package/dist/editor/feedback.js.map +1 -0
  141. package/dist/editor/index.d.ts +17 -0
  142. package/dist/editor/index.js +5 -0
  143. package/dist/editor/index.js.map +1 -0
  144. package/dist/editor/language-review.d.ts +14 -0
  145. package/dist/editor/language-review.js +35 -0
  146. package/dist/editor/language-review.js.map +1 -0
  147. package/dist/editor/log.d.ts +37 -0
  148. package/dist/editor/log.js +202 -0
  149. package/dist/editor/log.js.map +1 -0
  150. package/dist/editor/markup.d.ts +20 -0
  151. package/dist/editor/markup.js +294 -0
  152. package/dist/editor/markup.js.map +1 -0
  153. package/dist/editor/prompt-templates.d.ts +6 -0
  154. package/dist/editor/prompt-templates.js +11 -0
  155. package/dist/editor/prompt-templates.js.map +1 -0
  156. package/dist/editor/response.d.ts +5 -0
  157. package/dist/editor/response.js +31 -0
  158. package/dist/editor/response.js.map +1 -0
  159. package/dist/editor/review.d.ts +34 -0
  160. package/dist/editor/review.js +189 -0
  161. package/dist/editor/review.js.map +1 -0
  162. package/dist/editor/types.d.ts +31 -0
  163. package/dist/editor/types.js +21 -0
  164. package/dist/editor/types.js.map +1 -0
  165. package/dist/evidence-selection/anchor-resolver.d.ts +43 -0
  166. package/dist/evidence-selection/anchor-resolver.js +783 -0
  167. package/dist/evidence-selection/anchor-resolver.js.map +1 -0
  168. package/dist/evidence-selection/anchor-types.d.ts +27 -0
  169. package/dist/evidence-selection/anchor-types.js +1 -0
  170. package/dist/evidence-selection/anchor-types.js.map +1 -0
  171. package/dist/evidence-selection/index.d.ts +8 -0
  172. package/dist/evidence-selection/index.js +32 -0
  173. package/dist/evidence-selection/index.js.map +1 -0
  174. package/dist/evidence-selection/prompt.d.ts +18 -0
  175. package/dist/evidence-selection/prompt.js +54 -0
  176. package/dist/evidence-selection/prompt.js.map +1 -0
  177. package/dist/evidence-selection/quote-score.d.ts +29 -0
  178. package/dist/evidence-selection/quote-score.js +331 -0
  179. package/dist/evidence-selection/quote-score.js.map +1 -0
  180. package/dist/evidence-selection/selection-resolver.d.ts +19 -0
  181. package/dist/evidence-selection/selection-resolver.js +303 -0
  182. package/dist/evidence-selection/selection-resolver.js.map +1 -0
  183. package/dist/evidence-selection/text.d.ts +4 -0
  184. package/dist/evidence-selection/text.js +66 -0
  185. package/dist/evidence-selection/text.js.map +1 -0
  186. package/dist/evidence-selection/types.d.ts +36 -0
  187. package/dist/evidence-selection/types.js +1 -0
  188. package/dist/evidence-selection/types.js.map +1 -0
  189. package/dist/facade/app.d.ts +75 -0
  190. package/dist/facade/app.js +141 -0
  191. package/dist/facade/app.js.map +1 -0
  192. package/dist/facade/build-queue.d.ts +181 -0
  193. package/dist/facade/build-queue.js +1442 -0
  194. package/dist/facade/build-queue.js.map +1 -0
  195. package/dist/facade/chapter-build.d.ts +60 -0
  196. package/dist/facade/chapter-build.js +1020 -0
  197. package/dist/facade/chapter-build.js.map +1 -0
  198. package/dist/facade/chapter.d.ts +168 -0
  199. package/dist/facade/chapter.js +944 -0
  200. package/dist/facade/chapter.js.map +1 -0
  201. package/dist/facade/digest.d.ts +55 -0
  202. package/dist/facade/digest.js +168 -0
  203. package/dist/facade/digest.js.map +1 -0
  204. package/dist/facade/graph.d.ts +60 -0
  205. package/dist/facade/graph.js +203 -0
  206. package/dist/facade/graph.js.map +1 -0
  207. package/dist/facade/import.d.ts +49 -0
  208. package/dist/facade/import.js +262 -0
  209. package/dist/facade/import.js.map +1 -0
  210. package/dist/facade/index.d.ts +39 -0
  211. package/dist/facade/index.js +171 -0
  212. package/dist/facade/index.js.map +1 -0
  213. package/dist/facade/knowledge-graph-build.d.ts +75 -0
  214. package/dist/facade/knowledge-graph-build.js +897 -0
  215. package/dist/facade/knowledge-graph-build.js.map +1 -0
  216. package/dist/facade/llm-sampling.d.ts +11 -0
  217. package/dist/facade/llm-sampling.js +58 -0
  218. package/dist/facade/llm-sampling.js.map +1 -0
  219. package/dist/facade/types.d.ts +8 -0
  220. package/dist/facade/types.js +1 -0
  221. package/dist/facade/types.js.map +1 -0
  222. package/dist/facade/wiki-graph-archive.d.ts +41 -0
  223. package/dist/facade/wiki-graph-archive.js +130 -0
  224. package/dist/facade/wiki-graph-archive.js.map +1 -0
  225. package/dist/gc/files.d.ts +15 -0
  226. package/dist/gc/files.js +141 -0
  227. package/dist/gc/files.js.map +1 -0
  228. package/dist/gc/index.d.ts +2 -0
  229. package/dist/gc/index.js +5 -0
  230. package/dist/gc/index.js.map +1 -0
  231. package/dist/gc/lock.d.ts +3 -0
  232. package/dist/gc/lock.js +137 -0
  233. package/dist/gc/lock.js.map +1 -0
  234. package/dist/gc/runner.d.ts +9 -0
  235. package/dist/gc/runner.js +129 -0
  236. package/dist/gc/runner.js.map +1 -0
  237. package/dist/gc/tmp-gc.d.ts +5 -0
  238. package/dist/gc/tmp-gc.js +57 -0
  239. package/dist/gc/tmp-gc.js.map +1 -0
  240. package/dist/gc/types.d.ts +24 -0
  241. package/dist/gc/types.js +1 -0
  242. package/dist/gc/types.js.map +1 -0
  243. package/dist/gc.cjs +10041 -0
  244. package/dist/gc.cjs.map +1 -0
  245. package/dist/gc.d.cts +10 -0
  246. package/dist/gc.d.ts +2 -0
  247. package/dist/gc.js +5 -0
  248. package/dist/gc.js.map +1 -0
  249. package/dist/guaranteed/classifier.d.ts +10 -0
  250. package/dist/guaranteed/classifier.js +88 -0
  251. package/dist/guaranteed/classifier.js.map +1 -0
  252. package/dist/guaranteed/errors.d.ts +38 -0
  253. package/dist/guaranteed/errors.js +73 -0
  254. package/dist/guaranteed/errors.js.map +1 -0
  255. package/dist/guaranteed/index.d.ts +7 -0
  256. package/dist/guaranteed/index.js +21 -0
  257. package/dist/guaranteed/index.js.map +1 -0
  258. package/dist/guaranteed/request.d.ts +8 -0
  259. package/dist/guaranteed/request.js +206 -0
  260. package/dist/guaranteed/request.js.map +1 -0
  261. package/dist/guaranteed/response.d.ts +12 -0
  262. package/dist/guaranteed/response.js +98 -0
  263. package/dist/guaranteed/response.js.map +1 -0
  264. package/dist/guaranteed/types.d.ts +20 -0
  265. package/dist/guaranteed/types.js +1 -0
  266. package/dist/guaranteed/types.js.map +1 -0
  267. package/dist/index-B8NNnQ8P.d.ts +424 -0
  268. package/dist/index.cjs +34774 -0
  269. package/dist/index.cjs.map +1 -0
  270. package/dist/index.d.cts +2462 -0
  271. package/dist/index.d.ts +79 -0
  272. package/dist/index.js +168 -0
  273. package/dist/index.js.map +1 -0
  274. package/dist/legacy-sdpub/upgrade.d.ts +7 -0
  275. package/dist/legacy-sdpub/upgrade.js +795 -0
  276. package/dist/legacy-sdpub/upgrade.js.map +1 -0
  277. package/dist/llm/cache.d.ts +13 -0
  278. package/dist/llm/cache.js +35 -0
  279. package/dist/llm/cache.js.map +1 -0
  280. package/dist/llm/client.d.ts +26 -0
  281. package/dist/llm/client.js +572 -0
  282. package/dist/llm/client.js.map +1 -0
  283. package/dist/llm/context.d.ts +22 -0
  284. package/dist/llm/context.js +78 -0
  285. package/dist/llm/context.js.map +1 -0
  286. package/dist/llm/errors.d.ts +7 -0
  287. package/dist/llm/errors.js +12 -0
  288. package/dist/llm/errors.js.map +1 -0
  289. package/dist/llm/index.d.ts +7 -0
  290. package/dist/llm/index.js +17 -0
  291. package/dist/llm/index.js.map +1 -0
  292. package/dist/llm/request-log.d.ts +9 -0
  293. package/dist/llm/request-log.js +35 -0
  294. package/dist/llm/request-log.js.map +1 -0
  295. package/dist/llm/sampling.d.ts +11 -0
  296. package/dist/llm/sampling.js +67 -0
  297. package/dist/llm/sampling.js.map +1 -0
  298. package/dist/llm/types.d.ts +50 -0
  299. package/dist/llm/types.js +1 -0
  300. package/dist/llm/types.js.map +1 -0
  301. package/dist/output/epub/archive.d.ts +9 -0
  302. package/dist/output/epub/archive.js +81 -0
  303. package/dist/output/epub/archive.js.map +1 -0
  304. package/dist/output/epub/book.d.ts +15 -0
  305. package/dist/output/epub/book.js +76 -0
  306. package/dist/output/epub/book.js.map +1 -0
  307. package/dist/output/epub/content.d.ts +9 -0
  308. package/dist/output/epub/content.js +35 -0
  309. package/dist/output/epub/content.js.map +1 -0
  310. package/dist/output/epub/index.d.ts +20 -0
  311. package/dist/output/epub/index.js +14 -0
  312. package/dist/output/epub/index.js.map +1 -0
  313. package/dist/output/epub/model.d.ts +24 -0
  314. package/dist/output/epub/model.js +1 -0
  315. package/dist/output/epub/model.js.map +1 -0
  316. package/dist/output/epub/navigation.d.ts +10 -0
  317. package/dist/output/epub/navigation.js +39 -0
  318. package/dist/output/epub/navigation.js.map +1 -0
  319. package/dist/output/epub/package.d.ts +17 -0
  320. package/dist/output/epub/package.js +29 -0
  321. package/dist/output/epub/package.js.map +1 -0
  322. package/dist/output/epub/shared.d.ts +4 -0
  323. package/dist/output/epub/shared.js +12 -0
  324. package/dist/output/epub/shared.js.map +1 -0
  325. package/dist/output/epub/templates.d.ts +35 -0
  326. package/dist/output/epub/templates.js +26 -0
  327. package/dist/output/epub/templates.js.map +1 -0
  328. package/dist/output/index.d.ts +14 -0
  329. package/dist/output/index.js +11 -0
  330. package/dist/output/index.js.map +1 -0
  331. package/dist/output/plain-text.d.ts +18 -0
  332. package/dist/output/plain-text.js +56 -0
  333. package/dist/output/plain-text.js.map +1 -0
  334. package/dist/progress/index.d.ts +3 -0
  335. package/dist/progress/index.js +14 -0
  336. package/dist/progress/index.js.map +1 -0
  337. package/dist/progress/reporter.d.ts +10 -0
  338. package/dist/progress/reporter.js +79 -0
  339. package/dist/progress/reporter.js.map +1 -0
  340. package/dist/progress/tracker.d.ts +37 -0
  341. package/dist/progress/tracker.js +119 -0
  342. package/dist/progress/tracker.js.map +1 -0
  343. package/dist/progress/types.d.ts +28 -0
  344. package/dist/progress/types.js +1 -0
  345. package/dist/progress/types.js.map +1 -0
  346. package/dist/reader/attention/attention.d.ts +39 -0
  347. package/dist/reader/attention/attention.js +123 -0
  348. package/dist/reader/attention/attention.js.map +1 -0
  349. package/dist/reader/attention/index.d.ts +9 -0
  350. package/dist/reader/attention/index.js +5 -0
  351. package/dist/reader/attention/index.js.map +1 -0
  352. package/dist/reader/attention/wave-reflection.d.ts +21 -0
  353. package/dist/reader/attention/wave-reflection.js +153 -0
  354. package/dist/reader/attention/wave-reflection.js.map +1 -0
  355. package/dist/reader/attention/working-memory.d.ts +28 -0
  356. package/dist/reader/attention/working-memory.js +62 -0
  357. package/dist/reader/attention/working-memory.js.map +1 -0
  358. package/dist/reader/chunk-batch/extract.d.ts +13 -0
  359. package/dist/reader/chunk-batch/extract.js +14 -0
  360. package/dist/reader/chunk-batch/extract.js.map +1 -0
  361. package/dist/reader/chunk-batch/extractor.d.ts +17 -0
  362. package/dist/reader/chunk-batch/extractor.js +337 -0
  363. package/dist/reader/chunk-batch/extractor.js.map +1 -0
  364. package/dist/reader/chunk-batch/fragment-projection.d.ts +34 -0
  365. package/dist/reader/chunk-batch/fragment-projection.js +94 -0
  366. package/dist/reader/chunk-batch/fragment-projection.js.map +1 -0
  367. package/dist/reader/chunk-batch/index.d.ts +12 -0
  368. package/dist/reader/chunk-batch/index.js +13 -0
  369. package/dist/reader/chunk-batch/index.js.map +1 -0
  370. package/dist/reader/chunk-batch/language.d.ts +9 -0
  371. package/dist/reader/chunk-batch/language.js +23 -0
  372. package/dist/reader/chunk-batch/language.js.map +1 -0
  373. package/dist/reader/chunk-batch/parser.d.ts +94 -0
  374. package/dist/reader/chunk-batch/parser.js +640 -0
  375. package/dist/reader/chunk-batch/parser.js.map +1 -0
  376. package/dist/reader/chunk-batch/prompt-templates.d.ts +6 -0
  377. package/dist/reader/chunk-batch/prompt-templates.js +11 -0
  378. package/dist/reader/chunk-batch/prompt-templates.js.map +1 -0
  379. package/dist/reader/chunk-batch/types.d.ts +85 -0
  380. package/dist/reader/chunk-batch/types.js +1 -0
  381. package/dist/reader/chunk-batch/types.js.map +1 -0
  382. package/dist/reader/index.d.ts +13 -0
  383. package/dist/reader/index.js +7 -0
  384. package/dist/reader/index.js.map +1 -0
  385. package/dist/reader/reader.d.ts +37 -0
  386. package/dist/reader/reader.js +82 -0
  387. package/dist/reader/reader.js.map +1 -0
  388. package/dist/reader/segment/index.d.ts +2 -0
  389. package/dist/reader/segment/index.js +5 -0
  390. package/dist/reader/segment/index.js.map +1 -0
  391. package/dist/reader/segment/intl-segmenter.d.ts +5 -0
  392. package/dist/reader/segment/intl-segmenter.js +102 -0
  393. package/dist/reader/segment/intl-segmenter.js.map +1 -0
  394. package/dist/reader/segment/segment.d.ts +5 -0
  395. package/dist/reader/segment/segment.js +9 -0
  396. package/dist/reader/segment/segment.js.map +1 -0
  397. package/dist/reader/segment/types.d.ts +14 -0
  398. package/dist/reader/segment/types.js +1 -0
  399. package/dist/reader/segment/types.js.map +1 -0
  400. package/dist/reader/types.d.ts +29 -0
  401. package/dist/reader/types.js +1 -0
  402. package/dist/reader/types.js.map +1 -0
  403. package/dist/serial.d.ts +89 -0
  404. package/dist/serial.js +476 -0
  405. package/dist/serial.js.map +1 -0
  406. package/dist/source/adapter.d.ts +15 -0
  407. package/dist/source/adapter.js +1 -0
  408. package/dist/source/adapter.js.map +1 -0
  409. package/dist/source/epub/archive.d.ts +27 -0
  410. package/dist/source/epub/archive.js +189 -0
  411. package/dist/source/epub/archive.js.map +1 -0
  412. package/dist/source/epub/content.d.ts +22 -0
  413. package/dist/source/epub/content.js +183 -0
  414. package/dist/source/epub/content.js.map +1 -0
  415. package/dist/source/epub/document.d.ts +55 -0
  416. package/dist/source/epub/document.js +179 -0
  417. package/dist/source/epub/document.js.map +1 -0
  418. package/dist/source/epub/index.d.ts +10 -0
  419. package/dist/source/epub/index.js +6 -0
  420. package/dist/source/epub/index.js.map +1 -0
  421. package/dist/source/epub/navigation.d.ts +16 -0
  422. package/dist/source/epub/navigation.js +215 -0
  423. package/dist/source/epub/navigation.js.map +1 -0
  424. package/dist/source/epub/package.d.ts +33 -0
  425. package/dist/source/epub/package.js +237 -0
  426. package/dist/source/epub/package.js.map +1 -0
  427. package/dist/source/epub/xml.d.ts +16 -0
  428. package/dist/source/epub/xml.js +111 -0
  429. package/dist/source/epub/xml.js.map +1 -0
  430. package/dist/source/index.d.ts +12 -0
  431. package/dist/source/index.js +32 -0
  432. package/dist/source/index.js.map +1 -0
  433. package/dist/source/meta.d.ts +30 -0
  434. package/dist/source/meta.js +22 -0
  435. package/dist/source/meta.js.map +1 -0
  436. package/dist/source/plain-text.d.ts +16 -0
  437. package/dist/source/plain-text.js +86 -0
  438. package/dist/source/plain-text.js.map +1 -0
  439. package/dist/source/toc.d.ts +16 -0
  440. package/dist/source/toc.js +17 -0
  441. package/dist/source/toc.js.map +1 -0
  442. package/dist/source/types.d.ts +16 -0
  443. package/dist/source/types.js +1 -0
  444. package/dist/source/types.js.map +1 -0
  445. package/dist/topology/grouping.d.ts +15 -0
  446. package/dist/topology/grouping.js +18 -0
  447. package/dist/topology/grouping.js.map +1 -0
  448. package/dist/topology/index.d.ts +21 -0
  449. package/dist/topology/index.js +5 -0
  450. package/dist/topology/index.js.map +1 -0
  451. package/dist/topology/resource-segmentation.d.ts +13 -0
  452. package/dist/topology/resource-segmentation.js +111 -0
  453. package/dist/topology/resource-segmentation.js.map +1 -0
  454. package/dist/topology/segment-incision.d.ts +18 -0
  455. package/dist/topology/segment-incision.js +197 -0
  456. package/dist/topology/segment-incision.js.map +1 -0
  457. package/dist/topology/snake-detector.d.ts +13 -0
  458. package/dist/topology/snake-detector.js +520 -0
  459. package/dist/topology/snake-detector.js.map +1 -0
  460. package/dist/topology/snake-graph-builder.d.ts +14 -0
  461. package/dist/topology/snake-graph-builder.js +76 -0
  462. package/dist/topology/snake-graph-builder.js.map +1 -0
  463. package/dist/topology/topology.d.ts +29 -0
  464. package/dist/topology/topology.js +348 -0
  465. package/dist/topology/topology.js.map +1 -0
  466. package/dist/topology/weights.d.ts +10 -0
  467. package/dist/topology/weights.js +84 -0
  468. package/dist/topology/weights.js.map +1 -0
  469. package/dist/types-FVIqiLC9.d.cts +24 -0
  470. package/dist/utils/async-semaphore.d.ts +7 -0
  471. package/dist/utils/async-semaphore.js +40 -0
  472. package/dist/utils/async-semaphore.js.map +1 -0
  473. package/dist/utils/enum.d.ts +5 -0
  474. package/dist/utils/enum.js +18 -0
  475. package/dist/utils/enum.js.map +1 -0
  476. package/dist/utils/hash.d.ts +3 -0
  477. package/dist/utils/hash.js +132 -0
  478. package/dist/utils/hash.js.map +1 -0
  479. package/dist/utils/node-error.d.ts +4 -0
  480. package/dist/utils/node-error.js +59 -0
  481. package/dist/utils/node-error.js.map +1 -0
  482. package/dist/wikg/archive-uri.d.ts +1 -0
  483. package/dist/wikg/archive-uri.js +37 -0
  484. package/dist/wikg/archive-uri.js.map +1 -0
  485. package/dist/wikg/archive.d.ts +28 -0
  486. package/dist/wikg/archive.js +496 -0
  487. package/dist/wikg/archive.js.map +1 -0
  488. package/dist/wikg/index.d.ts +31 -0
  489. package/dist/wikg/index.js +60 -0
  490. package/dist/wikg/index.js.map +1 -0
  491. package/dist/wikg/wikg-coordinator.d.ts +45 -0
  492. package/dist/wikg/wikg-coordinator.js +1687 -0
  493. package/dist/wikg/wikg-coordinator.js.map +1 -0
  494. package/dist/wikg/wiki-graph-archive-file.d.ts +42 -0
  495. package/dist/wikg/wiki-graph-archive-file.js +78 -0
  496. package/dist/wikg/wiki-graph-archive-file.js.map +1 -0
  497. package/dist/wikilink/index.d.ts +10 -0
  498. package/dist/wikilink/index.js +7 -0
  499. package/dist/wikilink/index.js.map +1 -0
  500. package/dist/wikilink/relation-discovery.d.ts +31 -0
  501. package/dist/wikilink/relation-discovery.js +477 -0
  502. package/dist/wikilink/relation-discovery.js.map +1 -0
  503. package/dist/wikilink/types.d.ts +23 -0
  504. package/dist/wikilink/types.js +1 -0
  505. package/dist/wikilink/types.js.map +1 -0
  506. package/dist/wikilink/window.d.ts +7 -0
  507. package/dist/wikilink/window.js +53 -0
  508. package/dist/wikilink/window.js.map +1 -0
  509. package/dist/wikimatch/enrichment.d.ts +10 -0
  510. package/dist/wikimatch/enrichment.js +55 -0
  511. package/dist/wikimatch/enrichment.js.map +1 -0
  512. package/dist/wikimatch/index.d.ts +16 -0
  513. package/dist/wikimatch/index.js +66 -0
  514. package/dist/wikimatch/index.js.map +1 -0
  515. package/dist/wikimatch/option-narrowing.d.ts +17 -0
  516. package/dist/wikimatch/option-narrowing.js +208 -0
  517. package/dist/wikimatch/option-narrowing.js.map +1 -0
  518. package/dist/wikimatch/options.d.ts +14 -0
  519. package/dist/wikimatch/options.js +155 -0
  520. package/dist/wikimatch/options.js.map +1 -0
  521. package/dist/wikimatch/policy-judge.d.ts +17 -0
  522. package/dist/wikimatch/policy-judge.js +430 -0
  523. package/dist/wikimatch/policy-judge.js.map +1 -0
  524. package/dist/wikimatch/range-suppression.d.ts +9 -0
  525. package/dist/wikimatch/range-suppression.js +27 -0
  526. package/dist/wikimatch/range-suppression.js.map +1 -0
  527. package/dist/wikimatch/surface-screening.d.ts +16 -0
  528. package/dist/wikimatch/surface-screening.js +168 -0
  529. package/dist/wikimatch/surface-screening.js.map +1 -0
  530. package/dist/wikimatch/surface-window.d.ts +6 -0
  531. package/dist/wikimatch/surface-window.js +44 -0
  532. package/dist/wikimatch/surface-window.js.map +1 -0
  533. package/dist/wikimatch/types.d.ts +151 -0
  534. package/dist/wikimatch/types.js +1 -0
  535. package/dist/wikimatch/types.js.map +1 -0
  536. package/dist/wikimatch/wikispine.d.ts +43 -0
  537. package/dist/wikimatch/wikispine.js +399 -0
  538. package/dist/wikimatch/wikispine.js.map +1 -0
  539. package/dist/wikimatch/window.d.ts +6 -0
  540. package/dist/wikimatch/window.js +83 -0
  541. package/dist/wikimatch/window.js.map +1 -0
  542. package/dist/wikimatch/words.d.ts +16 -0
  543. package/dist/wikimatch/words.js +66 -0
  544. package/dist/wikimatch/words.js.map +1 -0
  545. package/dist/wikipage/cache.d.ts +18 -0
  546. package/dist/wikipage/cache.js +404 -0
  547. package/dist/wikipage/cache.js.map +1 -0
  548. package/dist/wikipage/fetch-log.d.ts +17 -0
  549. package/dist/wikipage/fetch-log.js +143 -0
  550. package/dist/wikipage/fetch-log.js.map +1 -0
  551. package/dist/wikipage/index.d.ts +14 -0
  552. package/dist/wikipage/index.js +17 -0
  553. package/dist/wikipage/index.js.map +1 -0
  554. package/dist/wikipage/normalizer.d.ts +14 -0
  555. package/dist/wikipage/normalizer.js +147 -0
  556. package/dist/wikipage/normalizer.js.map +1 -0
  557. package/dist/wikipage/rate-limiter.d.ts +13 -0
  558. package/dist/wikipage/rate-limiter.js +84 -0
  559. package/dist/wikipage/rate-limiter.js.map +1 -0
  560. package/dist/wikipage/resolver.d.ts +26 -0
  561. package/dist/wikipage/resolver.js +325 -0
  562. package/dist/wikipage/resolver.js.map +1 -0
  563. package/dist/wikipage/types.d.ts +96 -0
  564. package/dist/wikipage/types.js +1 -0
  565. package/dist/wikipage/types.js.map +1 -0
  566. package/dist/wikipage/wikimedia-client.d.ts +48 -0
  567. package/dist/wikipage/wikimedia-client.js +397 -0
  568. package/dist/wikipage/wikimedia-client.js.map +1 -0
  569. package/dist/worker-BgQ0Xl8T.d.cts +181 -0
  570. package/dist/worker.cjs +5259 -0
  571. package/dist/worker.cjs.map +1 -0
  572. package/dist/worker.d.cts +2 -0
  573. package/dist/worker.d.ts +2 -0
  574. package/dist/worker.js +5 -0
  575. package/dist/worker.js.map +1 -0
  576. package/package.json +78 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/reader/chunk-batch/parser.ts"],"sourcesContent":["import { z } from \"zod\";\n\nimport {\n GuaranteedParseValidationError,\n ParsedJsonError,\n requestGuaranteedJson,\n} from \"../../guaranteed/index.js\";\nimport type { LLMessage } from \"../../llm/index.js\";\nimport {\n ChunkImportance,\n ChunkRetention,\n expectChunkImportance,\n expectChunkRetention,\n type SentenceId,\n} from \"../../document/index.js\";\nimport {\n resolveEvidenceSelectionList,\n type EvidenceSelectionCandidate,\n type EvidenceSelectionList,\n EvidenceResolver,\n type EvidenceResolutionFailure,\n type RankedSentenceCandidate,\n} from \"../../evidence-selection/index.js\";\nimport type {\n ChunkBatch,\n ChunkExtractionSentence,\n ChunkImportanceAnnotation,\n ChunkLink,\n CognitiveChunk,\n SentenceTextSource,\n} from \"./types.js\";\nimport type { FragmentProjection, TextSpan } from \"./fragment-projection.js\";\n\nconst MAX_CHOICE_RETRIES = 3;\n\nconst chunkLinkSchema = z.object({\n from: z.union([z.number().int(), z.string()]),\n strength: z.string().optional(),\n to: z.union([z.number().int(), z.string()]),\n});\nconst evidenceSelectionItemSchema = z\n .object({\n quote: z.string().optional(),\n sentence_id: z.string().optional(),\n })\n .passthrough();\nconst chunkEvidenceSchema = z.union([\n z.record(z.string(), z.unknown()),\n z.array(evidenceSelectionItemSchema),\n]);\n\nconst userFocusedChunkSchema = z\n .object({\n content: z.string(),\n evidence: chunkEvidenceSchema.nullish(),\n label: z.string(),\n retention: z.enum([\n ChunkRetention.Verbatim,\n ChunkRetention.Detailed,\n ChunkRetention.Focused,\n ChunkRetention.Relevant,\n ]),\n temp_id: z.string(),\n })\n .passthrough();\n\nexport const userFocusedResponseSchema = z.object({\n chunks: z.array(userFocusedChunkSchema),\n fragment_summary: z.string(),\n links: z.array(chunkLinkSchema),\n});\n\nconst bookCoherenceChunkSchema = z\n .object({\n content: z.string(),\n evidence: chunkEvidenceSchema.nullish(),\n importance: z.enum([\n ChunkImportance.Critical,\n ChunkImportance.Important,\n ChunkImportance.Helpful,\n ]),\n label: z.string(),\n temp_id: z.string(),\n })\n .passthrough();\n\nconst importanceAnnotationSchema = z.object({\n chunk_id: z.number().int(),\n importance: z.enum([\n ChunkImportance.Critical,\n ChunkImportance.Important,\n ChunkImportance.Helpful,\n ]),\n});\n\nexport const bookCoherenceResponseSchema = z.object({\n chunks: z.array(bookCoherenceChunkSchema),\n importance_annotations: z.array(importanceAnnotationSchema),\n links: z.array(chunkLinkSchema),\n});\n\nconst choiceResponseSchema = z.object({\n choice: z.string(),\n});\n\ntype UserFocusedChunkData = z.infer<typeof userFocusedChunkSchema>;\ntype BookCoherenceChunkData = z.infer<typeof bookCoherenceChunkSchema>;\nexport type UserFocusedResponseData = z.infer<typeof userFocusedResponseSchema>;\nexport type BookCoherenceResponseData = z.infer<\n typeof bookCoherenceResponseSchema\n>;\ntype ExtractedChunkData = UserFocusedChunkData | BookCoherenceChunkData;\ntype RawChunkLink = z.infer<typeof chunkLinkSchema>;\ntype RawChunkEvidence = z.infer<typeof chunkEvidenceSchema>;\ntype ChoiceFieldName = \"evidence\" | \"start_anchor\" | \"end_anchor\";\n\nexport enum ChunkMetadataField {\n Retention = \"retention\",\n Importance = \"importance\",\n}\n\nexport interface ExtractChunksResult {\n readonly chunkBatch: ChunkBatch;\n readonly fragmentSummary?: string;\n}\n\ninterface ResolveChunkEvidenceInput {\n readonly data: ExtractedChunkData;\n readonly chunkIndex: number;\n readonly chunkLabel: string;\n readonly isLastGenerationAttempt: boolean;\n}\n\ninterface SelectAmbiguousCandidateInput {\n readonly candidates: readonly RankedSentenceCandidate[];\n readonly chunkData: ExtractedChunkData;\n readonly chunkIndex: number;\n readonly chunkLabel: string;\n readonly fieldName: ChoiceFieldName;\n}\n\ntype GuaranteedChoiceRequest = (\n messages: readonly LLMessage[],\n index: number,\n maxRetries: number,\n) => Promise<string>;\n\nexport class ChunkBatchParser<\n TData extends UserFocusedResponseData | BookCoherenceResponseData,\n> {\n readonly #choiceSystemPrompt: string;\n readonly #evidenceResolver = new EvidenceResolver();\n readonly #metadataField: ChunkMetadataField;\n readonly #projection: FragmentProjection;\n readonly #responseIntentClassifierPrompt: string;\n readonly #requestChoice: GuaranteedChoiceRequest;\n readonly #sentenceTextByKey: Readonly<Record<string, string>>;\n readonly #sentenceTextSource: SentenceTextSource;\n readonly #wordsCountByKey: Readonly<Record<string, number>>;\n readonly #validImportanceChunkIds: Readonly<Record<string, true>> | undefined;\n readonly #visibleChunkIds: readonly number[];\n\n public constructor(input: {\n choiceSystemPrompt: string;\n metadataField: ChunkMetadataField;\n projection: FragmentProjection;\n responseIntentClassifierPrompt: string;\n requestChoice: GuaranteedChoiceRequest;\n sentenceTextSource: SentenceTextSource;\n sentences: readonly ChunkExtractionSentence[];\n validImportanceChunkIds?: readonly number[];\n visibleChunkIds: readonly number[];\n }) {\n this.#choiceSystemPrompt = input.choiceSystemPrompt;\n this.#metadataField = input.metadataField;\n this.#projection = input.projection;\n this.#responseIntentClassifierPrompt = input.responseIntentClassifierPrompt;\n this.#requestChoice = input.requestChoice;\n this.#sentenceTextSource = input.sentenceTextSource;\n this.#visibleChunkIds = input.visibleChunkIds;\n\n this.#wordsCountByKey = createWordsCountRecord(\n input.projection.sentences.map((sentence) => ({\n sentenceId: sentence.sentenceId,\n wordsCount: sentence.wordsCount,\n })),\n );\n this.#sentenceTextByKey = createSentenceTextRecord(input.projection);\n this.#validImportanceChunkIds =\n input.validImportanceChunkIds === undefined\n ? undefined\n : createMembershipRecord(input.validImportanceChunkIds);\n }\n\n public async parse(\n parsedData: TData,\n input: {\n isLastGenerationAttempt: boolean;\n },\n ): Promise<ExtractChunksResult> {\n const issues: string[] = [];\n const chunks: ChunkBatch[\"chunks\"] = [];\n const tempIds: string[] = [];\n const importanceAnnotations =\n \"importance_annotations\" in parsedData\n ? this.#validateImportanceAnnotations(\n parsedData.importance_annotations,\n issues,\n )\n : undefined;\n const fragmentSummary =\n \"fragment_summary\" in parsedData\n ? parsedData.fragment_summary\n : undefined;\n const links = normalizeChunkLinks(parsedData.links);\n\n for (const [index, data] of parsedData.chunks.entries()) {\n const chunkIndex = index + 1;\n const chunkIssues: string[] = [];\n const label = data.label.trim();\n const content = data.content.trim();\n\n if (label === \"\") {\n chunkIssues.push(\n `Chunk #${chunkIndex}: Missing or empty \"label\" field`,\n );\n }\n\n if (content === \"\") {\n chunkIssues.push(\n `Chunk #${chunkIndex}: Missing or empty \"content\" field`,\n );\n }\n\n const [matchedSentenceIds, evidenceFailure] =\n await this.#resolveChunkEvidence({\n chunkIndex,\n chunkLabel: label,\n data,\n isLastGenerationAttempt: input.isLastGenerationAttempt,\n });\n\n if (matchedSentenceIds.length === 0) {\n if (evidenceFailure !== undefined) {\n chunkIssues.push(\n `Chunk #${chunkIndex} (\"${label}\"): ${evidenceFailure.message}`,\n );\n } else {\n chunkIssues.push(\n `Chunk #${chunkIndex} (\"${label}\"): Missing evidence`,\n );\n }\n }\n\n if (chunkIssues.length > 0) {\n issues.push(...chunkIssues);\n continue;\n }\n\n const primarySentenceId = matchedSentenceIds[0];\n\n if (primarySentenceId === undefined) {\n issues.push(\n `Chunk #${chunkIndex} (\"${label}\"): Unable to resolve any sentence IDs`,\n );\n continue;\n }\n\n const totalWordsCount = matchedSentenceIds.reduce((sum, sentenceId) => {\n return (\n sum + (this.#wordsCountByKey[createSentenceKey(sentenceId)] ?? 0)\n );\n }, 0);\n\n if (this.#metadataField === ChunkMetadataField.Retention) {\n const chunkData = data as UserFocusedChunkData;\n\n chunks.push({\n content,\n generation: 0,\n id: 0,\n label,\n links: [],\n retention: expectChunkRetention(chunkData.retention),\n sentenceId: primarySentenceId,\n sentenceIds: [...matchedSentenceIds],\n wordsCount: totalWordsCount,\n });\n } else {\n const chunkData = data as BookCoherenceChunkData;\n\n chunks.push({\n content,\n generation: 0,\n id: 0,\n importance: expectChunkImportance(chunkData.importance),\n label,\n links: [],\n sentenceId: primarySentenceId,\n sentenceIds: [...matchedSentenceIds],\n wordsCount: totalWordsCount,\n });\n }\n\n tempIds.push(data.temp_id);\n }\n\n const validLinks = this.#filterAndValidateLinks({\n issues,\n links,\n tempIds,\n visibleChunkIds: this.#visibleChunkIds,\n });\n\n if (issues.length > 0) {\n throw new ParsedJsonError(issues);\n }\n\n return {\n chunkBatch: {\n chunks,\n links: validLinks,\n orderCorrect: true,\n tempIds,\n ...(importanceAnnotations === undefined\n ? {}\n : { importanceAnnotations }),\n },\n ...(fragmentSummary === undefined ? {} : { fragmentSummary }),\n };\n }\n\n public async getChunkSourceSentences(\n chunk: CognitiveChunk,\n ): Promise<string[]> {\n const sourceSentences: string[] = [];\n\n for (const sentenceId of chunk.sentenceIds) {\n const sentenceKey = createSentenceKey(sentenceId);\n const sentenceText = this.#sentenceTextByKey[sentenceKey];\n\n if (sentenceText !== undefined) {\n sourceSentences.push(sentenceText);\n continue;\n }\n\n sourceSentences.push(\n await this.#sentenceTextSource.getSentence(sentenceId),\n );\n }\n\n return sourceSentences;\n }\n\n async #resolveChunkEvidence(\n input: ResolveChunkEvidenceInput,\n ): Promise<\n readonly [\n sentenceIds: readonly SentenceId[],\n failure: EvidenceResolutionFailure | undefined,\n ]\n > {\n const evidence = input.data.evidence;\n\n if (evidence === undefined || evidence === null) {\n return [[], undefined];\n }\n\n if (!isRecord(evidence) && !Array.isArray(evidence)) {\n return [\n [],\n {\n candidates: [],\n code: \"invalid_evidence\",\n fieldName: \"evidence\",\n message: `Chunk #${input.chunkIndex} (\"${input.chunkLabel}\"): evidence must be an object or array`,\n },\n ];\n }\n\n const projectedSentences = this.#projection.sentences;\n const candidateSentenceIds = projectedSentences.map(\n (sentence) => sentence.sentenceId,\n );\n const selectionSentences = projectedSentences.map((sentence, index) => ({\n id: `S${index + 1}`,\n sentenceId: sentence.sentenceId,\n text: sentence.projectedText,\n }));\n const selectionEvidence = createEvidenceSelectionList(evidence);\n const [selectionResolution, selectionFailure] =\n selectionEvidence === undefined\n ? [undefined, undefined]\n : resolveEvidenceSelectionList({\n evidence: selectionEvidence,\n sentences: selectionSentences,\n });\n\n if (selectionResolution !== undefined) {\n return [selectionResolution.sentenceIds, undefined];\n }\n\n const exactMatchSentenceIds = Array.isArray(evidence)\n ? []\n : this.#resolveExactProjectionEvidence(evidence);\n\n if (exactMatchSentenceIds.length > 0) {\n return [exactMatchSentenceIds, undefined];\n }\n\n const candidateTexts = projectedSentences.map(\n (sentence) => sentence.projectedText,\n );\n const [resolution, failure] = Array.isArray(evidence)\n ? [undefined, undefined]\n : this.#evidenceResolver.resolve(\n evidence,\n candidateSentenceIds,\n candidateTexts,\n );\n\n if (resolution !== undefined) {\n return [resolution.sentenceIds, undefined];\n }\n\n const fallbackFailure =\n selectionFailure === undefined\n ? failure\n : toEvidenceResolutionFailure(selectionFailure, \"evidence\");\n\n if (fallbackFailure === undefined) {\n return [[], undefined];\n }\n\n const shouldUseChoice =\n fallbackFailure.code.startsWith(\"ambiguous\") ||\n (fallbackFailure.code === \"low_confidence\" &&\n input.isLastGenerationAttempt &&\n fallbackFailure.candidates.length > 0);\n\n if (!shouldUseChoice) {\n return [[], fallbackFailure];\n }\n\n const choiceFieldName = toChoiceFieldName(fallbackFailure.fieldName);\n\n if (choiceFieldName === undefined) {\n return [[], fallbackFailure];\n }\n\n const [choiceCandidate, choiceFailure] =\n await this.#chooseAmbiguousCandidate({\n candidates: fallbackFailure.candidates,\n chunkData: input.data,\n chunkIndex: input.chunkIndex,\n chunkLabel: input.chunkLabel,\n fieldName: choiceFieldName,\n });\n\n if (choiceFailure !== undefined) {\n if (choiceFailure.code === \"choice_parse_failed_full_fragment\") {\n return [candidateSentenceIds, undefined];\n }\n\n return [[], choiceFailure];\n }\n\n if (choiceCandidate === undefined) {\n return [\n [],\n {\n candidates: fallbackFailure.candidates,\n code: \"choice_failed\",\n fieldName: fallbackFailure.fieldName,\n message: `Second-stage choice failed for ${fallbackFailure.fieldName}: no candidate returned.`,\n },\n ];\n }\n\n if (choiceFieldName === \"evidence\") {\n return [[choiceCandidate.sentenceId], undefined];\n }\n\n if (Array.isArray(evidence)) {\n return [[], fallbackFailure];\n }\n\n if (input.isLastGenerationAttempt) {\n const [resolved, resolveFailure] =\n this.#evidenceResolver.resolveWithOverrides({\n candidateSentenceIds,\n candidateTexts,\n evidence,\n overrides: {\n [choiceFieldName]: choiceCandidate,\n },\n });\n\n if (resolved !== undefined) {\n return [resolved.sentenceIds, undefined];\n }\n\n return [[], resolveFailure];\n }\n\n const repairedEvidence: Record<string, unknown> = {\n ...evidence,\n [choiceFieldName]: {\n mode: \"full\",\n text: choiceCandidate.text,\n },\n };\n const [resolved, resolveFailure] = this.#evidenceResolver.resolve(\n repairedEvidence,\n candidateSentenceIds,\n candidateTexts,\n );\n\n if (resolved !== undefined) {\n return [resolved.sentenceIds, undefined];\n }\n\n return [[], resolveFailure];\n }\n\n #resolveExactProjectionEvidence(\n evidence: Record<string, unknown>,\n ): SentenceId[] {\n const startValue = evidence.start_anchor ?? evidence.start;\n const [startAnchor, startFailure] = this.#evidenceResolver.parseAnchor(\n startValue,\n \"start_anchor\",\n );\n\n if (startFailure !== undefined || startAnchor?.text === undefined) {\n return [];\n }\n\n const startMatch = expectSingleSpan(\n this.#projection.findExactMatches(startAnchor.text),\n );\n\n if (startMatch === undefined) {\n return [];\n }\n\n const endValue = evidence.end_anchor ?? evidence.end;\n\n if (endValue === undefined) {\n return this.#projection.resolveSentenceIds(startMatch);\n }\n\n const [endAnchor, endFailure] = this.#evidenceResolver.parseAnchor(\n endValue,\n \"end_anchor\",\n );\n\n if (endFailure !== undefined || endAnchor?.text === undefined) {\n return [];\n }\n\n const endMatch = expectSingleSpan(\n this.#projection.findExactMatches(endAnchor.text),\n );\n\n if (endMatch === undefined || endMatch.offset < startMatch.offset) {\n return [];\n }\n\n return this.#projection.resolveSentenceIds({\n length: endMatch.offset + endMatch.length - startMatch.offset,\n offset: startMatch.offset,\n });\n }\n\n async #chooseAmbiguousCandidate(\n input: SelectAmbiguousCandidateInput,\n ): Promise<\n readonly [\n candidate: RankedSentenceCandidate | undefined,\n failure: EvidenceResolutionFailure | undefined,\n ]\n > {\n const messages = this.#buildChoiceMessages(input);\n const candidateIds = input.candidates.map(\n (candidate) => candidate.occurrenceId,\n );\n\n try {\n const choice = await requestGuaranteedJson({\n maxRetries: MAX_CHOICE_RETRIES,\n messages,\n parse: (data) => {\n const candidate = input.candidates.find(\n (item) => item.occurrenceId === data.choice,\n );\n\n if (candidate === undefined) {\n throw new ParsedJsonError([\n `Invalid choice \"${data.choice}\". Expected one of: ${candidateIds.join(\", \")}`,\n ]);\n }\n\n return candidate;\n },\n responseIntentClassifierPrompt: this.#responseIntentClassifierPrompt,\n request: this.#requestChoice,\n schema: choiceResponseSchema,\n });\n\n return [choice, undefined];\n } catch (error) {\n if (isParsedJsonValidationFailure(error)) {\n return [\n undefined,\n {\n candidates: input.candidates,\n code: \"choice_parse_failed_full_fragment\",\n fieldName: input.fieldName,\n message:\n `Second-stage choice parse validation failed for ${input.fieldName}; ` +\n \"falling back to the full fragment span.\",\n },\n ];\n }\n\n return [\n undefined,\n {\n candidates: input.candidates,\n code: \"choice_failed\",\n fieldName: input.fieldName,\n message: `Second-stage choice failed for ${input.fieldName}: ${formatError(error)}`,\n },\n ];\n }\n }\n\n #buildChoiceMessages(input: SelectAmbiguousCandidateInput): LLMessage[] {\n return [\n {\n content: this.#choiceSystemPrompt,\n role: \"system\",\n },\n {\n content:\n `Previously generated chunk (do NOT rewrite it):\\n` +\n `\\`\\`\\`json\\n${JSON.stringify(input.chunkData, null, 2)}\\n\\`\\`\\`\\n\\n` +\n `Resolve only this field: \"${input.fieldName}\" for chunk #${input.chunkIndex} [${input.chunkLabel}].\\n` +\n \"Choose exactly one candidate occurrence ID from the list below.\\n\\n\" +\n input.candidates.map(formatChoiceCandidate).join(\"\\n\"),\n role: \"user\",\n },\n ];\n }\n\n #validateImportanceAnnotations(\n annotations: readonly {\n readonly chunk_id: number;\n readonly importance: ChunkImportance;\n }[],\n issues: string[],\n ): ChunkImportanceAnnotation[] | undefined {\n if (annotations.length === 0) {\n return [];\n }\n\n if (this.#validImportanceChunkIds === undefined) {\n return annotations.map((annotation) => ({\n chunkId: annotation.chunk_id,\n importance: expectChunkImportance(annotation.importance),\n }));\n }\n\n const result: ChunkImportanceAnnotation[] = [];\n\n for (const annotation of annotations) {\n if (!hasMembership(this.#validImportanceChunkIds, annotation.chunk_id)) {\n issues.push(\n `importance_annotations references unknown chunk_id ${annotation.chunk_id}`,\n );\n continue;\n }\n\n result.push({\n chunkId: annotation.chunk_id,\n importance: expectChunkImportance(annotation.importance),\n });\n }\n\n return result;\n }\n\n #filterAndValidateLinks(input: {\n issues: string[];\n links: readonly ChunkLink[];\n tempIds: readonly string[];\n visibleChunkIds: readonly number[];\n }): ChunkLink[] {\n const validTempIds = createMembershipRecord(input.tempIds);\n const validChunkIds = createMembershipRecord(input.visibleChunkIds);\n const retainedLinks: ChunkLink[] = [];\n\n for (const [index, link] of input.links.entries()) {\n const fromValid = this.#validateLinkReference({\n fieldName: \"from\",\n index: index + 1,\n issues: input.issues,\n reference: link.from,\n validChunkIds,\n validTempIds,\n });\n const toValid = this.#validateLinkReference({\n fieldName: \"to\",\n index: index + 1,\n issues: input.issues,\n reference: link.to,\n validChunkIds,\n validTempIds,\n });\n\n if (fromValid && toValid) {\n retainedLinks.push(link);\n }\n }\n\n return retainedLinks;\n }\n\n #validateLinkReference(input: {\n fieldName: \"from\" | \"to\";\n index: number;\n issues: string[];\n reference: number | string;\n validChunkIds: Readonly<Record<string, true>>;\n validTempIds: Readonly<Record<string, true>>;\n }): boolean {\n if (typeof input.reference === \"string\") {\n return hasMembership(input.validTempIds, input.reference);\n }\n\n if (!hasMembership(input.validChunkIds, input.reference)) {\n input.issues.push(\n `Link #${input.index}: \"${input.fieldName}\" chunk_id ${input.reference} does not exist in visible chunks`,\n );\n\n return false;\n }\n\n return true;\n }\n}\n\nfunction createWordsCountRecord(\n sentences: readonly Pick<\n ChunkExtractionSentence,\n \"sentenceId\" | \"wordsCount\"\n >[],\n): Readonly<Record<string, number>> {\n const wordsCountByKey = createEmptyRecord<number>();\n\n for (const sentence of sentences) {\n const sentenceKey = createSentenceKey(sentence.sentenceId);\n wordsCountByKey[sentenceKey] = sentence.wordsCount;\n }\n\n return wordsCountByKey;\n}\n\nfunction createSentenceTextRecord(\n projection: FragmentProjection,\n): Readonly<Record<string, string>> {\n const record = createEmptyRecord<string>();\n\n for (const sentence of projection.sentences) {\n record[createSentenceKey(sentence.sentenceId)] = sentence.rawText;\n }\n\n return record;\n}\n\nfunction normalizeChunkLinks(links: readonly RawChunkLink[]): ChunkLink[] {\n return links.map((link) => {\n if (link.strength === undefined) {\n return {\n from: link.from,\n to: link.to,\n };\n }\n\n return {\n from: link.from,\n strength: link.strength,\n to: link.to,\n };\n });\n}\n\nfunction formatChoiceCandidate(candidate: RankedSentenceCandidate): string {\n return [\n candidate.occurrenceId,\n `prev: ${formatChoiceText(candidate.prevText)}`,\n `text: ${formatChoiceText(candidate.text)}`,\n `next: ${formatChoiceText(candidate.nextText)}`,\n ].join(\"\\n\");\n}\n\nfunction formatChoiceText(text: string): string {\n const collapsed = text.replace(/\\s+/gu, \" \").trim();\n\n return collapsed === \"\" ? \"(none)\" : collapsed;\n}\n\nfunction toChoiceFieldName(value: string): ChoiceFieldName | undefined {\n return value === \"evidence\" ||\n value === \"start_anchor\" ||\n value === \"end_anchor\"\n ? value\n : undefined;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction formatError(error: unknown): string {\n if (error instanceof Error) {\n return error.message;\n }\n\n return String(error);\n}\n\nfunction isParsedJsonValidationFailure(error: unknown): boolean {\n return (\n error instanceof GuaranteedParseValidationError &&\n error.cause instanceof ParsedJsonError\n );\n}\n\nfunction createSentenceKey(sentenceId: SentenceId): string {\n return sentenceId.join(\":\");\n}\n\nfunction createMembershipRecord(\n values: readonly (number | string)[],\n): Readonly<Record<string, true>> {\n const record = createEmptyRecord<true>();\n\n for (const value of values) {\n record[String(value)] = true;\n }\n\n return record;\n}\n\nfunction hasMembership(\n record: Readonly<Record<string, true>>,\n value: number | string,\n): boolean {\n return hasIndexedValue(record, String(value));\n}\n\nfunction hasIndexedValue<TValue>(\n record: Readonly<Record<string, TValue>>,\n key: string,\n): boolean {\n return Object.hasOwn(record, key);\n}\n\nfunction createEmptyRecord<TValue>(): Record<string, TValue> {\n return Object.create(null) as Record<string, TValue>;\n}\n\nfunction expectSingleSpan(spans: readonly TextSpan[]): TextSpan | undefined {\n return spans.length === 1 ? spans[0] : undefined;\n}\n\nfunction createEvidenceSelectionList(\n evidence: RawChunkEvidence,\n): EvidenceSelectionList | undefined {\n if (Array.isArray(evidence)) {\n return evidence.map(createEvidenceSelection);\n }\n\n const hasSelectionEvidence =\n typeof evidence.quote === \"string\" ||\n typeof evidence.sentence_id === \"string\";\n\n return hasSelectionEvidence ? createEvidenceSelection(evidence) : undefined;\n}\n\nfunction createEvidenceSelection(evidence: {\n readonly quote?: unknown;\n readonly sentence_id?: unknown;\n}): {\n readonly quote?: string;\n readonly sentence_id?: string;\n} {\n return {\n ...(typeof evidence.quote === \"string\" ? { quote: evidence.quote } : {}),\n ...(typeof evidence.sentence_id === \"string\"\n ? { sentence_id: evidence.sentence_id }\n : {}),\n };\n}\n\nfunction toEvidenceResolutionFailure(\n failure: {\n readonly candidates: readonly EvidenceSelectionCandidate[];\n readonly code: string;\n readonly message: string;\n },\n fieldName: string,\n): EvidenceResolutionFailure {\n return {\n candidates: failure.candidates.map(toRankedSentenceCandidate),\n code: failure.code,\n fieldName,\n message: failure.message,\n };\n}\n\nfunction toRankedSentenceCandidate(\n candidate: EvidenceSelectionCandidate,\n): RankedSentenceCandidate {\n return {\n exactNormalized: candidate.exactNormalized,\n exactRaw: candidate.exactRaw,\n exactSubstring: candidate.exactSubstring,\n index: candidate.index,\n nextText: candidate.nextText,\n occurrenceId: candidate.occurrenceId,\n prevText: candidate.prevText,\n score: candidate.score,\n sentenceId: candidate.sentence.sentenceId,\n text: candidate.sentence.text,\n };\n}\n"],"mappings":"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","names":["ChunkMetadataField","resolved","resolveFailure"]}
@@ -0,0 +1,6 @@
1
+ declare const USER_FOCUSED_PROMPT_TEMPLATE = "topologization/user_focused_extraction";
2
+ declare const BOOK_COHERENCE_PROMPT_TEMPLATE = "topologization/book_coherence_extraction";
3
+ declare const EVIDENCE_CHOICE_PROMPT_TEMPLATE = "topologization/evidence_choice";
4
+ declare const TRANSLATE_CHUNKS_PROMPT_TEMPLATE = "topologization/translate_chunks";
5
+
6
+ export { BOOK_COHERENCE_PROMPT_TEMPLATE, EVIDENCE_CHOICE_PROMPT_TEMPLATE, TRANSLATE_CHUNKS_PROMPT_TEMPLATE, USER_FOCUSED_PROMPT_TEMPLATE };
@@ -0,0 +1,11 @@
1
+ const USER_FOCUSED_PROMPT_TEMPLATE = "topologization/user_focused_extraction";
2
+ const BOOK_COHERENCE_PROMPT_TEMPLATE = "topologization/book_coherence_extraction";
3
+ const EVIDENCE_CHOICE_PROMPT_TEMPLATE = "topologization/evidence_choice";
4
+ const TRANSLATE_CHUNKS_PROMPT_TEMPLATE = "topologization/translate_chunks";
5
+ export {
6
+ BOOK_COHERENCE_PROMPT_TEMPLATE,
7
+ EVIDENCE_CHOICE_PROMPT_TEMPLATE,
8
+ TRANSLATE_CHUNKS_PROMPT_TEMPLATE,
9
+ USER_FOCUSED_PROMPT_TEMPLATE
10
+ };
11
+ //# sourceMappingURL=prompt-templates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/reader/chunk-batch/prompt-templates.ts"],"sourcesContent":["export const USER_FOCUSED_PROMPT_TEMPLATE =\n \"topologization/user_focused_extraction\";\nexport const BOOK_COHERENCE_PROMPT_TEMPLATE =\n \"topologization/book_coherence_extraction\";\nexport const EVIDENCE_CHOICE_PROMPT_TEMPLATE = \"topologization/evidence_choice\";\nexport const TRANSLATE_CHUNKS_PROMPT_TEMPLATE =\n \"topologization/translate_chunks\";\n"],"mappings":"AAAO,MAAM,+BACX;AACK,MAAM,iCACX;AACK,MAAM,kCAAkC;AACxC,MAAM,mCACX;","names":[]}
@@ -0,0 +1,85 @@
1
+ import { Language } from '../../common/language.js';
2
+ import { LLM } from '../../llm/client.js';
3
+ import { SentenceId, ChunkRetention, ChunkImportance } from '../../document/types.js';
4
+ import '../../llm/context.js';
5
+ import '../../llm/cache.js';
6
+ import '../../llm/types.js';
7
+ import 'ai';
8
+
9
+ interface ChunkLink {
10
+ readonly from: number | string;
11
+ readonly strength?: string;
12
+ readonly to: number | string;
13
+ }
14
+ interface ChunkImportanceAnnotation {
15
+ readonly chunkId: number;
16
+ readonly importance: ChunkImportance;
17
+ }
18
+ interface CognitiveChunk {
19
+ id: number;
20
+ generation: number;
21
+ sentenceId: SentenceId;
22
+ label: string;
23
+ content: string;
24
+ sentenceIds: SentenceId[];
25
+ links: number[];
26
+ retention?: ChunkRetention;
27
+ importance?: ChunkImportance;
28
+ wordsCount: number;
29
+ }
30
+ interface ChunkBatch {
31
+ readonly chunks: CognitiveChunk[];
32
+ readonly tempIds: string[];
33
+ readonly links: readonly ChunkLink[];
34
+ readonly orderCorrect: boolean;
35
+ readonly importanceAnnotations?: readonly ChunkImportanceAnnotation[];
36
+ }
37
+ interface ChunkExtractionScopes<S extends string> {
38
+ readonly choice: S;
39
+ readonly extraction: S;
40
+ }
41
+ interface SentenceTextSource {
42
+ getSentence(sentenceId: SentenceId): Promise<string>;
43
+ }
44
+ interface ChunkTranslationInput {
45
+ readonly content: string;
46
+ readonly id: number;
47
+ readonly label: string;
48
+ readonly sourceSentences: readonly string[];
49
+ }
50
+ interface ChunkTranslationOutput {
51
+ readonly content: string;
52
+ readonly id: number;
53
+ readonly label: string;
54
+ }
55
+ interface ChunkBatchOptions<S extends string> {
56
+ readonly extractionGuidance: string;
57
+ readonly llm: LLM<S>;
58
+ readonly scopes: ChunkExtractionScopes<S>;
59
+ readonly sentenceTextSource: SentenceTextSource;
60
+ readonly userLanguage?: Language;
61
+ }
62
+ interface ChunkExtractionSentence {
63
+ readonly sentenceId: SentenceId;
64
+ readonly text: string;
65
+ readonly wordsCount: number;
66
+ }
67
+ interface ExtractUserFocusedInput {
68
+ readonly text: string;
69
+ readonly workingMemoryPrompt: string;
70
+ readonly visibleChunkIds: readonly number[];
71
+ readonly sentences: readonly ChunkExtractionSentence[];
72
+ }
73
+ interface ExtractUserFocusedResult {
74
+ readonly chunkBatch: ChunkBatch;
75
+ readonly fragmentSummary: string;
76
+ }
77
+ interface ExtractBookCoherenceInput {
78
+ readonly text: string;
79
+ readonly workingMemoryPrompt: string;
80
+ readonly visibleChunkIds: readonly number[];
81
+ readonly sentences: readonly ChunkExtractionSentence[];
82
+ readonly userFocusedChunks: readonly CognitiveChunk[];
83
+ }
84
+
85
+ export type { ChunkBatch, ChunkBatchOptions, ChunkExtractionScopes, ChunkExtractionSentence, ChunkImportanceAnnotation, ChunkLink, ChunkTranslationInput, ChunkTranslationOutput, CognitiveChunk, ExtractBookCoherenceInput, ExtractUserFocusedInput, ExtractUserFocusedResult, SentenceTextSource };
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,13 @@
1
+ export { Reader } from './reader.js';
2
+ export { segmentTextStream } from './segment/segment.js';
3
+ export { ReaderChunk, ReaderGraphDelta, ReaderGraphEdge, ReaderImportanceAnnotation, ReaderOptions, ReaderSegment, ReaderSegmenter, ReaderSentence, ReaderTextStream } from './types.js';
4
+ import './segment/types.js';
5
+ import './attention/attention.js';
6
+ import './chunk-batch/types.js';
7
+ import '../common/language.js';
8
+ import '../llm/client.js';
9
+ import '../llm/context.js';
10
+ import '../llm/cache.js';
11
+ import '../llm/types.js';
12
+ import 'ai';
13
+ import '../document/types.js';
@@ -0,0 +1,7 @@
1
+ import { Reader } from "./reader.js";
2
+ import { segmentTextStream } from "./segment/segment.js";
3
+ export {
4
+ Reader,
5
+ segmentTextStream
6
+ };
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/reader/index.ts"],"sourcesContent":["export { Reader } from \"./reader.js\";\nexport { segmentTextStream } from \"./segment/segment.js\";\nexport type {\n ReaderChunk,\n ReaderGraphDelta,\n ReaderGraphEdge,\n ReaderImportanceAnnotation,\n ReaderOptions,\n ReaderSegment,\n ReaderSegmenter,\n ReaderSentence,\n ReaderTextStream,\n} from \"./types.js\";\n"],"mappings":"AAAA,SAAS,cAAc;AACvB,SAAS,yBAAyB;","names":[]}
@@ -0,0 +1,37 @@
1
+ import { ReaderOptions, ReaderTextStream, ReaderSegment, ReaderSentence, ReaderGraphDelta, ReaderChunk } from './types.js';
2
+ import './attention/attention.js';
3
+ import './chunk-batch/types.js';
4
+ import '../common/language.js';
5
+ import '../llm/client.js';
6
+ import '../llm/context.js';
7
+ import '../llm/cache.js';
8
+ import '../llm/types.js';
9
+ import 'ai';
10
+ import '../document/types.js';
11
+ import './segment/types.js';
12
+
13
+ declare class Reader<S extends string> {
14
+ #private;
15
+ constructor(options: ReaderOptions<S>);
16
+ get capacity(): number;
17
+ segment(stream: ReaderTextStream): AsyncIterable<ReaderSegment>;
18
+ extractUserFocused(input: {
19
+ readonly sentences: readonly ReaderSentence[];
20
+ readonly text: string;
21
+ }): Promise<{
22
+ readonly delta: ReaderGraphDelta;
23
+ readonly fragmentSummary: string;
24
+ }>;
25
+ extractBookCoherence(input: {
26
+ readonly sentences: readonly ReaderSentence[];
27
+ readonly text: string;
28
+ readonly userFocusedChunks: readonly ReaderChunk[];
29
+ }): Promise<ReaderGraphDelta>;
30
+ completeFragment(input: {
31
+ readonly allChunks: readonly ReaderChunk[];
32
+ readonly getSuccessorChunkIds: (chunkId: number) => readonly number[];
33
+ }): void;
34
+ clear(): void;
35
+ }
36
+
37
+ export { Reader };
@@ -0,0 +1,82 @@
1
+ import { Attention } from "./attention/attention.js";
2
+ import {
3
+ extractBookCoherenceChunkBatch,
4
+ extractUserFocusedChunkBatch
5
+ } from "./chunk-batch/extract.js";
6
+ import { segmentTextStream } from "./segment/segment.js";
7
+ class Reader {
8
+ #attention;
9
+ #chunkBatchOptions;
10
+ #segmenter;
11
+ constructor(options) {
12
+ this.#attention = new Attention(
13
+ options.attention.capacity,
14
+ options.attention.generationDecayFactor,
15
+ options.attention.idGenerator
16
+ );
17
+ this.#chunkBatchOptions = {
18
+ extractionGuidance: options.extractionGuidance,
19
+ llm: options.llm,
20
+ scopes: options.scopes,
21
+ sentenceTextSource: options.sentenceTextSource,
22
+ ...options.userLanguage === void 0 ? {} : {
23
+ userLanguage: options.userLanguage
24
+ }
25
+ };
26
+ this.#segmenter = options.segmenter;
27
+ }
28
+ get capacity() {
29
+ return this.#attention.capacity;
30
+ }
31
+ segment(stream) {
32
+ if (this.#segmenter === void 0) {
33
+ return segmentTextStream(stream);
34
+ }
35
+ return segmentTextStream(stream, {
36
+ adapter: this.#segmenter
37
+ });
38
+ }
39
+ async extractUserFocused(input) {
40
+ const context = this.#attention.createChunkBatchContext();
41
+ const result = await extractUserFocusedChunkBatch(this.#chunkBatchOptions, {
42
+ sentences: input.sentences,
43
+ text: input.text,
44
+ visibleChunkIds: context.visibleChunkIds,
45
+ workingMemoryPrompt: context.workingMemoryPrompt
46
+ });
47
+ return {
48
+ delta: await this.#attention.acceptChunkBatch(result.chunkBatch),
49
+ fragmentSummary: result.fragmentSummary
50
+ };
51
+ }
52
+ async extractBookCoherence(input) {
53
+ const context = this.#attention.createChunkBatchContext({
54
+ includeCurrentFragment: false
55
+ });
56
+ const linkableChunkIds = [
57
+ ...context.visibleChunkIds,
58
+ ...input.userFocusedChunks.map((chunk) => chunk.id)
59
+ ];
60
+ const chunkBatch = await extractBookCoherenceChunkBatch(
61
+ this.#chunkBatchOptions,
62
+ {
63
+ sentences: input.sentences,
64
+ text: input.text,
65
+ userFocusedChunks: input.userFocusedChunks,
66
+ visibleChunkIds: linkableChunkIds,
67
+ workingMemoryPrompt: context.workingMemoryPrompt
68
+ }
69
+ );
70
+ return await this.#attention.acceptChunkBatch(chunkBatch);
71
+ }
72
+ completeFragment(input) {
73
+ this.#attention.completeFragment(input);
74
+ }
75
+ clear() {
76
+ this.#attention.clear();
77
+ }
78
+ }
79
+ export {
80
+ Reader
81
+ };
82
+ //# sourceMappingURL=reader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/reader/reader.ts"],"sourcesContent":["import { Attention } from \"./attention/attention.js\";\nimport {\n extractBookCoherenceChunkBatch,\n extractUserFocusedChunkBatch,\n} from \"./chunk-batch/extract.js\";\nimport { segmentTextStream } from \"./segment/segment.js\";\nimport type { ChunkBatchOptions } from \"./chunk-batch/types.js\";\nimport type {\n ReaderChunk,\n ReaderGraphDelta,\n ReaderOptions,\n ReaderSegment,\n ReaderSentence,\n ReaderTextStream,\n} from \"./types.js\";\n\nexport class Reader<S extends string> {\n readonly #attention: Attention;\n readonly #chunkBatchOptions: ChunkBatchOptions<S>;\n readonly #segmenter: ReaderOptions<S>[\"segmenter\"];\n\n public constructor(options: ReaderOptions<S>) {\n this.#attention = new Attention(\n options.attention.capacity,\n options.attention.generationDecayFactor,\n options.attention.idGenerator,\n );\n this.#chunkBatchOptions = {\n extractionGuidance: options.extractionGuidance,\n llm: options.llm,\n scopes: options.scopes,\n sentenceTextSource: options.sentenceTextSource,\n ...(options.userLanguage === undefined\n ? {}\n : {\n userLanguage: options.userLanguage,\n }),\n };\n this.#segmenter = options.segmenter;\n }\n\n public get capacity(): number {\n return this.#attention.capacity;\n }\n\n public segment(stream: ReaderTextStream): AsyncIterable<ReaderSegment> {\n if (this.#segmenter === undefined) {\n return segmentTextStream(stream);\n }\n\n return segmentTextStream(stream, {\n adapter: this.#segmenter,\n });\n }\n\n public async extractUserFocused(input: {\n readonly sentences: readonly ReaderSentence[];\n readonly text: string;\n }): Promise<{\n readonly delta: ReaderGraphDelta;\n readonly fragmentSummary: string;\n }> {\n const context = this.#attention.createChunkBatchContext();\n const result = await extractUserFocusedChunkBatch(this.#chunkBatchOptions, {\n sentences: input.sentences,\n text: input.text,\n visibleChunkIds: context.visibleChunkIds,\n workingMemoryPrompt: context.workingMemoryPrompt,\n });\n\n return {\n delta: await this.#attention.acceptChunkBatch(result.chunkBatch),\n fragmentSummary: result.fragmentSummary,\n };\n }\n\n public async extractBookCoherence(input: {\n readonly sentences: readonly ReaderSentence[];\n readonly text: string;\n readonly userFocusedChunks: readonly ReaderChunk[];\n }): Promise<ReaderGraphDelta> {\n const context = this.#attention.createChunkBatchContext({\n includeCurrentFragment: false,\n });\n const linkableChunkIds = [\n ...context.visibleChunkIds,\n ...input.userFocusedChunks.map((chunk) => chunk.id),\n ];\n const chunkBatch = await extractBookCoherenceChunkBatch(\n this.#chunkBatchOptions,\n {\n sentences: input.sentences,\n text: input.text,\n userFocusedChunks: input.userFocusedChunks,\n visibleChunkIds: linkableChunkIds,\n workingMemoryPrompt: context.workingMemoryPrompt,\n },\n );\n\n return await this.#attention.acceptChunkBatch(chunkBatch);\n }\n\n public completeFragment(input: {\n readonly allChunks: readonly ReaderChunk[];\n readonly getSuccessorChunkIds: (chunkId: number) => readonly number[];\n }): void {\n this.#attention.completeFragment(input);\n }\n\n public clear(): void {\n this.#attention.clear();\n }\n}\n"],"mappings":"AAAA,SAAS,iBAAiB;AAC1B;AAAA,EACE;AAAA,EACA;AAAA,OACK;AACP,SAAS,yBAAyB;AAW3B,MAAM,OAAyB;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AAAA,EAEF,YAAY,SAA2B;AAC5C,SAAK,aAAa,IAAI;AAAA,MACpB,QAAQ,UAAU;AAAA,MAClB,QAAQ,UAAU;AAAA,MAClB,QAAQ,UAAU;AAAA,IACpB;AACA,SAAK,qBAAqB;AAAA,MACxB,oBAAoB,QAAQ;AAAA,MAC5B,KAAK,QAAQ;AAAA,MACb,QAAQ,QAAQ;AAAA,MAChB,oBAAoB,QAAQ;AAAA,MAC5B,GAAI,QAAQ,iBAAiB,SACzB,CAAC,IACD;AAAA,QACE,cAAc,QAAQ;AAAA,MACxB;AAAA,IACN;AACA,SAAK,aAAa,QAAQ;AAAA,EAC5B;AAAA,EAEA,IAAW,WAAmB;AAC5B,WAAO,KAAK,WAAW;AAAA,EACzB;AAAA,EAEO,QAAQ,QAAwD;AACrE,QAAI,KAAK,eAAe,QAAW;AACjC,aAAO,kBAAkB,MAAM;AAAA,IACjC;AAEA,WAAO,kBAAkB,QAAQ;AAAA,MAC/B,SAAS,KAAK;AAAA,IAChB,CAAC;AAAA,EACH;AAAA,EAEA,MAAa,mBAAmB,OAM7B;AACD,UAAM,UAAU,KAAK,WAAW,wBAAwB;AACxD,UAAM,SAAS,MAAM,6BAA6B,KAAK,oBAAoB;AAAA,MACzE,WAAW,MAAM;AAAA,MACjB,MAAM,MAAM;AAAA,MACZ,iBAAiB,QAAQ;AAAA,MACzB,qBAAqB,QAAQ;AAAA,IAC/B,CAAC;AAED,WAAO;AAAA,MACL,OAAO,MAAM,KAAK,WAAW,iBAAiB,OAAO,UAAU;AAAA,MAC/D,iBAAiB,OAAO;AAAA,IAC1B;AAAA,EACF;AAAA,EAEA,MAAa,qBAAqB,OAIJ;AAC5B,UAAM,UAAU,KAAK,WAAW,wBAAwB;AAAA,MACtD,wBAAwB;AAAA,IAC1B,CAAC;AACD,UAAM,mBAAmB;AAAA,MACvB,GAAG,QAAQ;AAAA,MACX,GAAG,MAAM,kBAAkB,IAAI,CAAC,UAAU,MAAM,EAAE;AAAA,IACpD;AACA,UAAM,aAAa,MAAM;AAAA,MACvB,KAAK;AAAA,MACL;AAAA,QACE,WAAW,MAAM;AAAA,QACjB,MAAM,MAAM;AAAA,QACZ,mBAAmB,MAAM;AAAA,QACzB,iBAAiB;AAAA,QACjB,qBAAqB,QAAQ;AAAA,MAC/B;AAAA,IACF;AAEA,WAAO,MAAM,KAAK,WAAW,iBAAiB,UAAU;AAAA,EAC1D;AAAA,EAEO,iBAAiB,OAGf;AACP,SAAK,WAAW,iBAAiB,KAAK;AAAA,EACxC;AAAA,EAEO,QAAc;AACnB,SAAK,WAAW,MAAM;AAAA,EACxB;AACF;","names":[]}
@@ -0,0 +1,2 @@
1
+ export { segmentTextStream } from './segment.js';
2
+ export { SegmentTextStreamOptions, SentenceStreamAdapter, SentenceStreamItem, TextStream } from './types.js';
@@ -0,0 +1,5 @@
1
+ import { segmentTextStream } from "./segment.js";
2
+ export {
3
+ segmentTextStream
4
+ };
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/reader/segment/index.ts"],"sourcesContent":["export { segmentTextStream } from \"./segment.js\";\nexport type {\n SegmentTextStreamOptions,\n SentenceStreamAdapter,\n SentenceStreamItem,\n TextStream,\n} from \"./types.js\";\n"],"mappings":"AAAA,SAAS,yBAAyB;","names":[]}
@@ -0,0 +1,5 @@
1
+ import { SentenceStreamAdapter } from './types.js';
2
+
3
+ declare function createDefaultSentenceStreamAdapter(): SentenceStreamAdapter;
4
+
5
+ export { createDefaultSentenceStreamAdapter };
@@ -0,0 +1,102 @@
1
+ const SENTENCE_BOUNDARY_PATTERN = /(?:[.!?。!?…]+|(?:\r?\n)\s*(?:\r?\n)?|[.!?。!?…]+["'”’」』】)》〉〕〗]*)$/u;
2
+ class IntlSegmenterSentenceStreamAdapter {
3
+ #graphemeSegmenter = new Intl.Segmenter(void 0, {
4
+ granularity: "grapheme"
5
+ });
6
+ #sentenceSegmenter = new Intl.Segmenter(void 0, {
7
+ granularity: "sentence"
8
+ });
9
+ #wordSegmenter = new Intl.Segmenter(void 0, {
10
+ granularity: "word"
11
+ });
12
+ async *pipe(stream) {
13
+ let buffer = "";
14
+ let offset = 0;
15
+ for await (const chunk of stream) {
16
+ if (chunk === "") {
17
+ continue;
18
+ }
19
+ buffer += chunk;
20
+ const { remainder, sentences: sentences2 } = this.#drainSentences(buffer, false);
21
+ buffer = remainder;
22
+ for (const sentenceText of sentences2) {
23
+ yield {
24
+ offset,
25
+ text: sentenceText,
26
+ wordsCount: this.#countWords(sentenceText)
27
+ };
28
+ offset += sentenceText.length;
29
+ }
30
+ }
31
+ const { sentences } = this.#drainSentences(buffer, true);
32
+ for (const sentenceText of sentences) {
33
+ yield {
34
+ offset,
35
+ text: sentenceText,
36
+ wordsCount: this.#countWords(sentenceText)
37
+ };
38
+ offset += sentenceText.length;
39
+ }
40
+ }
41
+ #drainSentences(buffer, flushAll) {
42
+ if (buffer.trim() === "") {
43
+ return {
44
+ remainder: "",
45
+ sentences: []
46
+ };
47
+ }
48
+ const segments = Array.from(this.#sentenceSegmenter.segment(buffer));
49
+ if (segments.length === 0) {
50
+ return {
51
+ remainder: buffer,
52
+ sentences: []
53
+ };
54
+ }
55
+ if (flushAll || this.#endsWithSentenceBoundary(buffer)) {
56
+ return {
57
+ remainder: "",
58
+ sentences: segments.map((segment) => segment.segment.trim()).filter((segment) => segment !== "")
59
+ };
60
+ }
61
+ const lastSegment = segments[segments.length - 1];
62
+ if (lastSegment === void 0) {
63
+ return {
64
+ remainder: buffer,
65
+ sentences: []
66
+ };
67
+ }
68
+ return {
69
+ remainder: buffer.slice(lastSegment.index),
70
+ sentences: segments.slice(0, -1).map((segment) => segment.segment.trim()).filter((segment) => segment !== "")
71
+ };
72
+ }
73
+ #countWords(text) {
74
+ let wordsCount = 0;
75
+ for (const segment of this.#wordSegmenter.segment(text)) {
76
+ if ("isWordLike" in segment && segment.isWordLike) {
77
+ wordsCount += 1;
78
+ }
79
+ }
80
+ if (wordsCount > 0) {
81
+ return wordsCount;
82
+ }
83
+ return this.#countGraphemes(text);
84
+ }
85
+ #countGraphemes(text) {
86
+ let unitCount = 0;
87
+ for (const _segment of this.#graphemeSegmenter.segment(text)) {
88
+ unitCount += 1;
89
+ }
90
+ return unitCount;
91
+ }
92
+ #endsWithSentenceBoundary(buffer) {
93
+ return SENTENCE_BOUNDARY_PATTERN.test(buffer.trimEnd());
94
+ }
95
+ }
96
+ function createDefaultSentenceStreamAdapter() {
97
+ return new IntlSegmenterSentenceStreamAdapter();
98
+ }
99
+ export {
100
+ createDefaultSentenceStreamAdapter
101
+ };
102
+ //# sourceMappingURL=intl-segmenter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/reader/segment/intl-segmenter.ts"],"sourcesContent":["import type {\n SentenceStreamAdapter,\n SentenceStreamItem,\n TextStream,\n} from \"./types.js\";\n\nconst SENTENCE_BOUNDARY_PATTERN =\n /(?:[.!?。!?…]+|(?:\\r?\\n)\\s*(?:\\r?\\n)?|[.!?。!?…]+[\"'”’」』】)》〉〕〗]*)$/u;\n\nclass IntlSegmenterSentenceStreamAdapter implements SentenceStreamAdapter {\n readonly #graphemeSegmenter = new Intl.Segmenter(undefined, {\n granularity: \"grapheme\",\n });\n readonly #sentenceSegmenter = new Intl.Segmenter(undefined, {\n granularity: \"sentence\",\n });\n readonly #wordSegmenter = new Intl.Segmenter(undefined, {\n granularity: \"word\",\n });\n\n public async *pipe(stream: TextStream): AsyncIterable<SentenceStreamItem> {\n let buffer = \"\";\n let offset = 0;\n\n for await (const chunk of stream) {\n if (chunk === \"\") {\n continue;\n }\n\n buffer += chunk;\n\n const { remainder, sentences } = this.#drainSentences(buffer, false);\n buffer = remainder;\n\n for (const sentenceText of sentences) {\n yield {\n offset,\n text: sentenceText,\n wordsCount: this.#countWords(sentenceText),\n };\n offset += sentenceText.length;\n }\n }\n\n const { sentences } = this.#drainSentences(buffer, true);\n\n for (const sentenceText of sentences) {\n yield {\n offset,\n text: sentenceText,\n wordsCount: this.#countWords(sentenceText),\n };\n offset += sentenceText.length;\n }\n }\n\n #drainSentences(\n buffer: string,\n flushAll: boolean,\n ): {\n readonly remainder: string;\n readonly sentences: readonly string[];\n } {\n if (buffer.trim() === \"\") {\n return {\n remainder: \"\",\n sentences: [],\n };\n }\n\n const segments = Array.from(this.#sentenceSegmenter.segment(buffer));\n\n if (segments.length === 0) {\n return {\n remainder: buffer,\n sentences: [],\n };\n }\n\n if (flushAll || this.#endsWithSentenceBoundary(buffer)) {\n return {\n remainder: \"\",\n sentences: segments\n .map((segment) => segment.segment.trim())\n .filter((segment) => segment !== \"\"),\n };\n }\n\n const lastSegment = segments[segments.length - 1];\n\n if (lastSegment === undefined) {\n return {\n remainder: buffer,\n sentences: [],\n };\n }\n\n return {\n remainder: buffer.slice(lastSegment.index),\n sentences: segments\n .slice(0, -1)\n .map((segment) => segment.segment.trim())\n .filter((segment) => segment !== \"\"),\n };\n }\n\n #countWords(text: string): number {\n let wordsCount = 0;\n\n for (const segment of this.#wordSegmenter.segment(text)) {\n if (\"isWordLike\" in segment && segment.isWordLike) {\n wordsCount += 1;\n }\n }\n\n if (wordsCount > 0) {\n return wordsCount;\n }\n\n return this.#countGraphemes(text);\n }\n\n #countGraphemes(text: string): number {\n let unitCount = 0;\n\n for (const _segment of this.#graphemeSegmenter.segment(text)) {\n unitCount += 1;\n }\n\n return unitCount;\n }\n\n #endsWithSentenceBoundary(buffer: string): boolean {\n return SENTENCE_BOUNDARY_PATTERN.test(buffer.trimEnd());\n }\n}\n\nexport function createDefaultSentenceStreamAdapter(): SentenceStreamAdapter {\n return new IntlSegmenterSentenceStreamAdapter();\n}\n"],"mappings":"AAMA,MAAM,4BACJ;AAEF,MAAM,mCAAoE;AAAA,EAC/D,qBAAqB,IAAI,KAAK,UAAU,QAAW;AAAA,IAC1D,aAAa;AAAA,EACf,CAAC;AAAA,EACQ,qBAAqB,IAAI,KAAK,UAAU,QAAW;AAAA,IAC1D,aAAa;AAAA,EACf,CAAC;AAAA,EACQ,iBAAiB,IAAI,KAAK,UAAU,QAAW;AAAA,IACtD,aAAa;AAAA,EACf,CAAC;AAAA,EAED,OAAc,KAAK,QAAuD;AACxE,QAAI,SAAS;AACb,QAAI,SAAS;AAEb,qBAAiB,SAAS,QAAQ;AAChC,UAAI,UAAU,IAAI;AAChB;AAAA,MACF;AAEA,gBAAU;AAEV,YAAM,EAAE,WAAW,WAAAA,WAAU,IAAI,KAAK,gBAAgB,QAAQ,KAAK;AACnE,eAAS;AAET,iBAAW,gBAAgBA,YAAW;AACpC,cAAM;AAAA,UACJ;AAAA,UACA,MAAM;AAAA,UACN,YAAY,KAAK,YAAY,YAAY;AAAA,QAC3C;AACA,kBAAU,aAAa;AAAA,MACzB;AAAA,IACF;AAEA,UAAM,EAAE,UAAU,IAAI,KAAK,gBAAgB,QAAQ,IAAI;AAEvD,eAAW,gBAAgB,WAAW;AACpC,YAAM;AAAA,QACJ;AAAA,QACA,MAAM;AAAA,QACN,YAAY,KAAK,YAAY,YAAY;AAAA,MAC3C;AACA,gBAAU,aAAa;AAAA,IACzB;AAAA,EACF;AAAA,EAEA,gBACE,QACA,UAIA;AACA,QAAI,OAAO,KAAK,MAAM,IAAI;AACxB,aAAO;AAAA,QACL,WAAW;AAAA,QACX,WAAW,CAAC;AAAA,MACd;AAAA,IACF;AAEA,UAAM,WAAW,MAAM,KAAK,KAAK,mBAAmB,QAAQ,MAAM,CAAC;AAEnE,QAAI,SAAS,WAAW,GAAG;AACzB,aAAO;AAAA,QACL,WAAW;AAAA,QACX,WAAW,CAAC;AAAA,MACd;AAAA,IACF;AAEA,QAAI,YAAY,KAAK,0BAA0B,MAAM,GAAG;AACtD,aAAO;AAAA,QACL,WAAW;AAAA,QACX,WAAW,SACR,IAAI,CAAC,YAAY,QAAQ,QAAQ,KAAK,CAAC,EACvC,OAAO,CAAC,YAAY,YAAY,EAAE;AAAA,MACvC;AAAA,IACF;AAEA,UAAM,cAAc,SAAS,SAAS,SAAS,CAAC;AAEhD,QAAI,gBAAgB,QAAW;AAC7B,aAAO;AAAA,QACL,WAAW;AAAA,QACX,WAAW,CAAC;AAAA,MACd;AAAA,IACF;AAEA,WAAO;AAAA,MACL,WAAW,OAAO,MAAM,YAAY,KAAK;AAAA,MACzC,WAAW,SACR,MAAM,GAAG,EAAE,EACX,IAAI,CAAC,YAAY,QAAQ,QAAQ,KAAK,CAAC,EACvC,OAAO,CAAC,YAAY,YAAY,EAAE;AAAA,IACvC;AAAA,EACF;AAAA,EAEA,YAAY,MAAsB;AAChC,QAAI,aAAa;AAEjB,eAAW,WAAW,KAAK,eAAe,QAAQ,IAAI,GAAG;AACvD,UAAI,gBAAgB,WAAW,QAAQ,YAAY;AACjD,sBAAc;AAAA,MAChB;AAAA,IACF;AAEA,QAAI,aAAa,GAAG;AAClB,aAAO;AAAA,IACT;AAEA,WAAO,KAAK,gBAAgB,IAAI;AAAA,EAClC;AAAA,EAEA,gBAAgB,MAAsB;AACpC,QAAI,YAAY;AAEhB,eAAW,YAAY,KAAK,mBAAmB,QAAQ,IAAI,GAAG;AAC5D,mBAAa;AAAA,IACf;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,0BAA0B,QAAyB;AACjD,WAAO,0BAA0B,KAAK,OAAO,QAAQ,CAAC;AAAA,EACxD;AACF;AAEO,SAAS,qCAA4D;AAC1E,SAAO,IAAI,mCAAmC;AAChD;","names":["sentences"]}
@@ -0,0 +1,5 @@
1
+ import { TextStream, SegmentTextStreamOptions, SentenceStreamItem } from './types.js';
2
+
3
+ declare function segmentTextStream(stream: TextStream, options?: SegmentTextStreamOptions): AsyncIterable<SentenceStreamItem>;
4
+
5
+ export { segmentTextStream };
@@ -0,0 +1,9 @@
1
+ import { createDefaultSentenceStreamAdapter } from "./intl-segmenter.js";
2
+ function segmentTextStream(stream, options) {
3
+ const adapter = options?.adapter ?? createDefaultSentenceStreamAdapter();
4
+ return adapter.pipe(stream);
5
+ }
6
+ export {
7
+ segmentTextStream
8
+ };
9
+ //# sourceMappingURL=segment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/reader/segment/segment.ts"],"sourcesContent":["import { createDefaultSentenceStreamAdapter } from \"./intl-segmenter.js\";\nimport type {\n SegmentTextStreamOptions,\n SentenceStreamItem,\n TextStream,\n} from \"./types.js\";\n\nexport function segmentTextStream(\n stream: TextStream,\n options?: SegmentTextStreamOptions,\n): AsyncIterable<SentenceStreamItem> {\n const adapter = options?.adapter ?? createDefaultSentenceStreamAdapter();\n\n return adapter.pipe(stream);\n}\n"],"mappings":"AAAA,SAAS,0CAA0C;AAO5C,SAAS,kBACd,QACA,SACmC;AACnC,QAAM,UAAU,SAAS,WAAW,mCAAmC;AAEvE,SAAO,QAAQ,KAAK,MAAM;AAC5B;","names":[]}
@@ -0,0 +1,14 @@
1
+ type TextStream = AsyncIterable<string> | Iterable<string>;
2
+ interface SentenceStreamItem {
3
+ readonly offset: number;
4
+ readonly text: string;
5
+ readonly wordsCount: number;
6
+ }
7
+ interface SentenceStreamAdapter {
8
+ pipe(stream: TextStream): AsyncIterable<SentenceStreamItem>;
9
+ }
10
+ interface SegmentTextStreamOptions {
11
+ readonly adapter?: SentenceStreamAdapter;
12
+ }
13
+
14
+ export type { SegmentTextStreamOptions, SentenceStreamAdapter, SentenceStreamItem, TextStream };
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,29 @@
1
+ import { ChunkGraphDelta, ChunkGraphEdge } from './attention/attention.js';
2
+ import { ChunkBatchOptions, ChunkExtractionSentence, CognitiveChunk, ChunkImportanceAnnotation } from './chunk-batch/types.js';
3
+ import { TextStream, SentenceStreamAdapter, SentenceStreamItem } from './segment/types.js';
4
+ import '../common/language.js';
5
+ import '../llm/client.js';
6
+ import '../llm/context.js';
7
+ import '../llm/cache.js';
8
+ import '../llm/types.js';
9
+ import 'ai';
10
+ import '../document/types.js';
11
+
12
+ type ReaderTextStream = TextStream;
13
+ type ReaderSegment = SentenceStreamItem;
14
+ type ReaderSegmenter = SentenceStreamAdapter;
15
+ type ReaderSentence = ChunkExtractionSentence;
16
+ type ReaderChunk = CognitiveChunk;
17
+ type ReaderGraphEdge = ChunkGraphEdge;
18
+ type ReaderImportanceAnnotation = ChunkImportanceAnnotation;
19
+ type ReaderGraphDelta = ChunkGraphDelta;
20
+ interface ReaderOptions<S extends string> extends ChunkBatchOptions<S> {
21
+ readonly attention: {
22
+ readonly capacity: number;
23
+ readonly generationDecayFactor: number;
24
+ readonly idGenerator: () => Promise<number>;
25
+ };
26
+ readonly segmenter?: ReaderSegmenter;
27
+ }
28
+
29
+ export type { ReaderChunk, ReaderGraphDelta, ReaderGraphEdge, ReaderImportanceAnnotation, ReaderOptions, ReaderSegment, ReaderSegmenter, ReaderSentence, ReaderTextStream };
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}