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,1020 @@
1
+ import { mkdir, readFile, rm, writeFile } from "fs/promises";
2
+ import { join } from "path";
3
+ import { z } from "zod";
4
+ import { DirectoryDocument, Fragments } from "../document/index.js";
5
+ import { WIKI_GRAPH_EDITOR_SCOPES } from "../common/llm-scope.js";
6
+ import { normalizeLanguageCode } from "../common/language.js";
7
+ import { compressText } from "../editor/index.js";
8
+ import { segmentTextStream } from "../reader/index.js";
9
+ import {
10
+ SerialGeneration
11
+ } from "../serial.js";
12
+ import { ChunkImportance, ChunkRetention } from "../document/types.js";
13
+ import {
14
+ getChapterDetails
15
+ } from "./chapter.js";
16
+ const sentenceIdSchema = z.tuple([
17
+ z.number(),
18
+ z.number()
19
+ ]);
20
+ const GRAPH_ARTIFACT_FRAGMENT_WORDS_COUNT = 320;
21
+ const sentenceRecordSchema = z.object({
22
+ text: z.string(),
23
+ wordsCount: z.number()
24
+ });
25
+ const fragmentRecordSchema = z.object({
26
+ serialId: z.number(),
27
+ fragmentId: z.number(),
28
+ summary: z.string(),
29
+ sentences: z.array(sentenceRecordSchema)
30
+ });
31
+ const serialRecordSchema = z.object({
32
+ documentOrder: z.number().optional(),
33
+ id: z.number(),
34
+ knowledgeGraphReady: z.boolean(),
35
+ knowledgeGraphParameterHash: z.string().optional(),
36
+ revision: z.number().optional(),
37
+ topologyParameterHash: z.string().optional(),
38
+ topologyReady: z.boolean()
39
+ }).transform((record) => ({
40
+ documentOrder: record.documentOrder ?? record.id,
41
+ id: record.id,
42
+ knowledgeGraphReady: record.knowledgeGraphReady,
43
+ ...record.knowledgeGraphParameterHash === void 0 ? {} : { knowledgeGraphParameterHash: record.knowledgeGraphParameterHash },
44
+ revision: record.revision ?? 0,
45
+ topologyReady: record.topologyReady,
46
+ ...record.topologyParameterHash === void 0 ? {} : { topologyParameterHash: record.topologyParameterHash }
47
+ }));
48
+ const chunkRecordSchema = z.object({
49
+ id: z.number(),
50
+ generation: z.number(),
51
+ sentenceId: sentenceIdSchema,
52
+ label: z.string(),
53
+ content: z.string(),
54
+ sentenceIds: z.array(sentenceIdSchema),
55
+ retention: z.enum(ChunkRetention).optional(),
56
+ importance: z.enum(ChunkImportance).optional(),
57
+ wordsCount: z.number(),
58
+ weight: z.number()
59
+ });
60
+ const knowledgeEdgeRecordSchema = z.object({
61
+ fromId: z.number(),
62
+ toId: z.number(),
63
+ strength: z.string().optional(),
64
+ weight: z.number()
65
+ });
66
+ const snakeRecordSchema = z.object({
67
+ id: z.number(),
68
+ serialId: z.number(),
69
+ groupId: z.number(),
70
+ localSnakeId: z.number(),
71
+ size: z.number(),
72
+ firstLabel: z.string(),
73
+ lastLabel: z.string(),
74
+ wordsCount: z.number(),
75
+ weight: z.number()
76
+ });
77
+ const snakeChunkRecordSchema = z.object({
78
+ snakeId: z.number(),
79
+ chunkId: z.number(),
80
+ position: z.number()
81
+ });
82
+ const snakeEdgeRecordSchema = z.object({
83
+ fromSnakeId: z.number(),
84
+ toSnakeId: z.number(),
85
+ weight: z.number()
86
+ });
87
+ const fragmentGroupRecordSchema = z.object({
88
+ serialId: z.number(),
89
+ groupId: z.number(),
90
+ startSentenceIndex: z.number(),
91
+ endSentenceIndex: z.number()
92
+ });
93
+ const summaryInputSnapshotSchema = z.object({
94
+ chunks: z.array(chunkRecordSchema),
95
+ fragmentGroups: z.array(fragmentGroupRecordSchema),
96
+ fragments: z.array(fragmentRecordSchema),
97
+ readingEdges: z.array(knowledgeEdgeRecordSchema),
98
+ serial: serialRecordSchema,
99
+ snakeChunks: z.array(snakeChunkRecordSchema),
100
+ snakeEdges: z.array(snakeEdgeRecordSchema),
101
+ snakes: z.array(snakeRecordSchema)
102
+ });
103
+ async function readChapterBuildInput(document, chapterId) {
104
+ const details = await getChapterDetails(document, chapterId);
105
+ return {
106
+ details,
107
+ revision: await document.serials.getRevision(chapterId),
108
+ sourceText: await collectReaderText(readChapterSource(document, chapterId))
109
+ };
110
+ }
111
+ async function buildChapterGraphArtifact(chapterId, options) {
112
+ const documentPath = join(options.workspacePath, "graph-document");
113
+ await rm(documentPath, { force: true, recursive: true });
114
+ await mkdir(options.workspacePath, { recursive: true });
115
+ const document = await DirectoryDocument.open(documentPath);
116
+ try {
117
+ await document.openSession(async (openedDocument) => {
118
+ await openedDocument.serials.createWithId(chapterId);
119
+ await writeGraphArtifactSourceFragments(
120
+ documentPath,
121
+ chapterId,
122
+ options.sourceText
123
+ );
124
+ const artifactDocument = createFragmentBackedDocument(
125
+ openedDocument,
126
+ documentPath
127
+ );
128
+ await new SerialGeneration({
129
+ document: artifactDocument,
130
+ llm: options.llm,
131
+ ...options.logDirPath === void 0 ? {} : { logDirPath: options.logDirPath }
132
+ }).buildTopologyInto(
133
+ chapterId,
134
+ createTopologyOptions(options),
135
+ options.progressTracker
136
+ );
137
+ });
138
+ } finally {
139
+ await document.release();
140
+ }
141
+ return {
142
+ chapterId,
143
+ documentPath,
144
+ parameter: createGraphBuildParameterInput(options)
145
+ };
146
+ }
147
+ async function commitChapterGraphArtifact(document, artifact) {
148
+ const sourceDocument = await DirectoryDocument.open(artifact.documentPath);
149
+ try {
150
+ await document.openSession(async (openedDocument) => {
151
+ await requireStage(openedDocument, artifact.chapterId, "sourced");
152
+ await openedDocument.clearSerialGraph(artifact.chapterId);
153
+ await openedDocument.serials.ensure(artifact.chapterId);
154
+ const chunkIdMap = await copyChunks(
155
+ sourceDocument,
156
+ openedDocument,
157
+ artifact.chapterId
158
+ );
159
+ for (const edge of await sourceDocument.readingEdges.listBySerial(
160
+ artifact.chapterId
161
+ )) {
162
+ const fromId = chunkIdMap.get(edge.fromId);
163
+ const toId = chunkIdMap.get(edge.toId);
164
+ if (fromId === void 0 || toId === void 0) {
165
+ continue;
166
+ }
167
+ await openedDocument.readingEdges.save({
168
+ ...edge,
169
+ fromId,
170
+ toId
171
+ });
172
+ }
173
+ await openedDocument.fragmentGroups.saveMany(
174
+ await sourceDocument.fragmentGroups.listBySerial(artifact.chapterId)
175
+ );
176
+ await copySnakes(
177
+ sourceDocument,
178
+ openedDocument,
179
+ artifact.chapterId,
180
+ chunkIdMap
181
+ );
182
+ const parameter = await openedDocument.graphBuildParameters.save(
183
+ artifact.parameter
184
+ );
185
+ await openedDocument.serials.setTopologyReady(
186
+ artifact.chapterId,
187
+ true,
188
+ parameter.hash
189
+ );
190
+ });
191
+ return await getChapterDetails(document, artifact.chapterId);
192
+ } finally {
193
+ await sourceDocument.release();
194
+ }
195
+ }
196
+ async function buildChapterSummaryArtifact(document, chapterId, options) {
197
+ const snapshotPath = options.snapshotPath;
198
+ if (snapshotPath !== void 0) {
199
+ return await buildChapterSummaryArtifactFromSnapshot(chapterId, {
200
+ ...options,
201
+ snapshotPath
202
+ });
203
+ }
204
+ const sourceDocumentPath = options.sourceDocumentPath;
205
+ if (sourceDocumentPath !== void 0) {
206
+ return await buildChapterSummaryArtifactFromDocumentSnapshot(chapterId, {
207
+ ...options,
208
+ sourceDocumentPath
209
+ });
210
+ }
211
+ return await buildChapterSummaryArtifactFromDocument(
212
+ document,
213
+ chapterId,
214
+ options
215
+ );
216
+ }
217
+ async function buildChapterSummaryArtifactFromSnapshot(chapterId, options) {
218
+ const snapshot = await readSummaryInputSnapshot(options.snapshotPath);
219
+ return await buildSummaryFromSnapshot(snapshot, chapterId, options);
220
+ }
221
+ async function buildChapterSummaryArtifactFromDocumentSnapshot(chapterId, options) {
222
+ const document = await DirectoryDocument.open(options.sourceDocumentPath);
223
+ try {
224
+ return await buildChapterSummaryArtifactFromDocument(
225
+ createFragmentBackedDocument(document, options.sourceDocumentPath),
226
+ chapterId,
227
+ options
228
+ );
229
+ } finally {
230
+ await document.release();
231
+ }
232
+ }
233
+ async function buildChapterSummaryArtifactFromDocument(document, chapterId, options) {
234
+ const details = await getChapterDetails(document, chapterId);
235
+ if (details.stage !== "graphed") {
236
+ throw new Error(
237
+ `Chapter ${chapterId} is ${details.stage}. Generate a summary only for graphed chapters.`
238
+ );
239
+ }
240
+ const summary = await document.readSummary(chapterId);
241
+ if (summary !== void 0) {
242
+ return summary;
243
+ }
244
+ return await buildSummaryFromDocument(document, chapterId, options);
245
+ }
246
+ async function commitChapterSummaryArtifact(document, chapterId, summary) {
247
+ await document.openSession(async (openedDocument) => {
248
+ await requireStage(openedDocument, chapterId, "graphed");
249
+ await openedDocument.writeSummary(chapterId, summary);
250
+ });
251
+ return await getChapterDetails(document, chapterId);
252
+ }
253
+ async function snapshotChapterSummaryInput(document, chapterId, workspacePath) {
254
+ const filePath = join(workspacePath, "summary-input.json");
255
+ await mkdir(workspacePath, { recursive: true });
256
+ await requireStage(document, chapterId, "graphed");
257
+ const fragments = await readSerialFragments(document, chapterId);
258
+ const snakes = await document.snakes.listBySerial(chapterId);
259
+ const snakeChunks = (await Promise.all(
260
+ snakes.map(
261
+ async (snake) => await document.snakeChunks.listBySnake(snake.id)
262
+ )
263
+ )).flat();
264
+ await writeSummaryInputSnapshot(filePath, {
265
+ chunks: await document.chunks.listBySerial(chapterId),
266
+ fragmentGroups: await document.fragmentGroups.listBySerial(chapterId),
267
+ fragments,
268
+ readingEdges: await document.readingEdges.listBySerial(chapterId),
269
+ serial: {
270
+ documentOrder: chapterId,
271
+ id: chapterId,
272
+ knowledgeGraphReady: false,
273
+ revision: 0,
274
+ topologyReady: true
275
+ },
276
+ snakeChunks,
277
+ snakeEdges: await document.snakeEdges.listBySerial(chapterId),
278
+ snakes
279
+ });
280
+ return { filePath };
281
+ }
282
+ async function buildSummaryFromSnapshot(snapshot, chapterId, options) {
283
+ if (snapshot.serial.id !== chapterId) {
284
+ throw new Error(
285
+ `Summary snapshot belongs to chapter ${snapshot.serial.id}, not chapter ${chapterId}.`
286
+ );
287
+ }
288
+ if (!snapshot.serial.topologyReady) {
289
+ throw new Error(`Chapter ${chapterId} is not ready for summary.`);
290
+ }
291
+ const document = new SummaryInputSnapshotDocument(snapshot);
292
+ const fragments = document.getSerialFragments(chapterId);
293
+ const sentenceStartIndexes = await fragments.listFragmentIds();
294
+ if (sentenceStartIndexes.length <= 1) {
295
+ return await readPassthroughSummary(fragments, sentenceStartIndexes);
296
+ }
297
+ const summaryParts = [];
298
+ for (const groupId of await document.fragmentGroups.listGroupIdsForSerial(
299
+ chapterId
300
+ )) {
301
+ const groupSummary = await compressText({
302
+ compressionRatio: 0.2,
303
+ document,
304
+ groupId,
305
+ llm: options.llm,
306
+ maxClues: 10,
307
+ maxIterations: 5,
308
+ scopes: WIKI_GRAPH_EDITOR_SCOPES,
309
+ serialId: chapterId,
310
+ ...options.logDirPath === void 0 ? {} : { logDirPath: options.logDirPath },
311
+ ...options.userLanguage === void 0 ? {} : { userLanguage: options.userLanguage }
312
+ });
313
+ if (groupSummary.trim() === "") {
314
+ continue;
315
+ }
316
+ summaryParts.push(groupSummary);
317
+ }
318
+ return summaryParts.join("\n\n");
319
+ }
320
+ async function buildSummaryFromDocument(document, chapterId, options) {
321
+ const serial = await document.serials.getById(chapterId);
322
+ if (serial === void 0) {
323
+ throw new Error(
324
+ `Chapter ${chapterId} does not exist. Use \`wg <archive-uri>/chapter list\` to discover chapter ids.`
325
+ );
326
+ }
327
+ if (!serial.topologyReady) {
328
+ throw new Error(`Chapter ${chapterId} is not ready for summary.`);
329
+ }
330
+ const fragments = document.getSerialFragments(chapterId);
331
+ const sentenceStartIndexes = await fragments.listFragmentIds();
332
+ if (sentenceStartIndexes.length <= 1) {
333
+ return await readPassthroughSummary(fragments, sentenceStartIndexes);
334
+ }
335
+ const summaryParts = [];
336
+ for (const groupId of await document.fragmentGroups.listGroupIdsForSerial(
337
+ chapterId
338
+ )) {
339
+ const groupSummary = await compressText({
340
+ compressionRatio: 0.2,
341
+ document,
342
+ groupId,
343
+ llm: options.llm,
344
+ maxClues: 10,
345
+ maxIterations: 5,
346
+ scopes: WIKI_GRAPH_EDITOR_SCOPES,
347
+ serialId: chapterId,
348
+ ...options.logDirPath === void 0 ? {} : { logDirPath: options.logDirPath },
349
+ ...options.userLanguage === void 0 ? {} : { userLanguage: options.userLanguage }
350
+ });
351
+ if (groupSummary.trim() === "") {
352
+ continue;
353
+ }
354
+ summaryParts.push(groupSummary);
355
+ }
356
+ return summaryParts.join("\n\n");
357
+ }
358
+ async function readPassthroughSummary(fragments, sentenceStartIndexes) {
359
+ if (sentenceStartIndexes.length === 0) {
360
+ return "";
361
+ }
362
+ const records = await Promise.all(
363
+ sentenceStartIndexes.map(
364
+ async (startSentenceIndex) => await fragments.getFragment(startSentenceIndex)
365
+ )
366
+ );
367
+ return records.flatMap((fragment) => fragment.sentences.map((sentence) => sentence.text)).join(" ").trim();
368
+ }
369
+ async function writeGraphArtifactSourceFragments(documentPath, chapterId, sourceText) {
370
+ const fragments = new Fragments(documentPath);
371
+ const serial = fragments.getSerial(chapterId);
372
+ let draft = await serial.createDraft();
373
+ let draftWordsCount = 0;
374
+ let hasSentences = false;
375
+ await fragments.ensureCreated();
376
+ for await (const sentence of segmentTextStream(sourceText)) {
377
+ const text = sentence.text.trim();
378
+ if (text === "") {
379
+ continue;
380
+ }
381
+ if (draftWordsCount > 0 && draftWordsCount + sentence.wordsCount > GRAPH_ARTIFACT_FRAGMENT_WORDS_COUNT) {
382
+ await draft.commit();
383
+ draft = await serial.createDraft();
384
+ draftWordsCount = 0;
385
+ }
386
+ draft.addSentence(text, sentence.wordsCount);
387
+ draftWordsCount += sentence.wordsCount;
388
+ hasSentences = true;
389
+ }
390
+ if (hasSentences) {
391
+ await draft.commit();
392
+ } else {
393
+ draft.discard();
394
+ }
395
+ }
396
+ function createFragmentBackedDocument(document, documentPath) {
397
+ const fragments = new Fragments(documentPath);
398
+ return new Proxy(document, {
399
+ get(target, property, receiver) {
400
+ if (property === "getSerialFragments") {
401
+ return (serialId) => fragments.getSerial(serialId);
402
+ }
403
+ if (property === "getSummaryFragments") {
404
+ return (serialId) => fragments.getSummarySerial(serialId);
405
+ }
406
+ if (property === "getSentence") {
407
+ return async (sentenceId) => await fragments.getSentence(sentenceId);
408
+ }
409
+ const value = Reflect.get(target, property, receiver);
410
+ if (typeof value !== "function") {
411
+ return value;
412
+ }
413
+ return value.bind(target);
414
+ }
415
+ });
416
+ }
417
+ async function readSerialFragments(document, serialId) {
418
+ const fragments = document.getSerialFragments(serialId);
419
+ return await Promise.all(
420
+ (await fragments.listFragmentIds()).map(
421
+ async (fragmentId) => await fragments.getFragment(fragmentId)
422
+ )
423
+ );
424
+ }
425
+ async function readSummaryInputSnapshot(filePath) {
426
+ const snapshot = summaryInputSnapshotSchema.parse(
427
+ JSON.parse(await readFile(filePath, "utf8"))
428
+ );
429
+ return {
430
+ ...snapshot,
431
+ chunks: snapshot.chunks.map(toChunkRecord),
432
+ readingEdges: snapshot.readingEdges.map(toReadingEdgeRecord)
433
+ };
434
+ }
435
+ function toChunkRecord(record) {
436
+ return {
437
+ id: record.id,
438
+ generation: record.generation,
439
+ sentenceId: record.sentenceId,
440
+ label: record.label,
441
+ content: record.content,
442
+ sentenceIds: record.sentenceIds,
443
+ ...record.retention === void 0 ? {} : { retention: record.retention },
444
+ ...record.importance === void 0 ? {} : { importance: record.importance },
445
+ wordsCount: record.wordsCount,
446
+ weight: record.weight
447
+ };
448
+ }
449
+ function toReadingEdgeRecord(record) {
450
+ return {
451
+ fromId: record.fromId,
452
+ toId: record.toId,
453
+ ...record.strength === void 0 ? {} : { strength: record.strength },
454
+ weight: record.weight
455
+ };
456
+ }
457
+ async function writeSummaryInputSnapshot(filePath, snapshot) {
458
+ await writeFile(filePath, `${JSON.stringify(snapshot)}
459
+ `, "utf8");
460
+ }
461
+ class SummaryInputSnapshotDocument {
462
+ chunks;
463
+ fragmentGroups;
464
+ graphBuildParameters;
465
+ readingEdges;
466
+ mentionLinks;
467
+ mentions;
468
+ metadata;
469
+ serials;
470
+ snakeChunks;
471
+ snakeEdges;
472
+ snakes;
473
+ #fragments;
474
+ constructor(snapshot) {
475
+ const serialId = snapshot.serial.id;
476
+ this.chunks = new SnapshotChunkStore(snapshot.chunks, snapshot.fragments);
477
+ this.fragmentGroups = new SnapshotFragmentGroupStore(
478
+ snapshot.fragmentGroups
479
+ );
480
+ this.graphBuildParameters = new EmptySnapshotGraphBuildParameterStore();
481
+ this.readingEdges = new SnapshotReadingEdgeStore(
482
+ snapshot.readingEdges,
483
+ snapshot.chunks
484
+ );
485
+ this.mentionLinks = new EmptySnapshotMentionLinkStore();
486
+ this.mentions = new EmptySnapshotMentionStore();
487
+ this.metadata = new EmptySnapshotObjectMetadataStore();
488
+ this.serials = new SnapshotSerialStore(snapshot.serial);
489
+ this.snakeChunks = new SnapshotSnakeChunkStore(snapshot.snakeChunks);
490
+ this.snakeEdges = new SnapshotSnakeEdgeStore(
491
+ snapshot.snakeEdges,
492
+ snapshot.snakes
493
+ );
494
+ this.snakes = new SnapshotSnakeStore(snapshot.snakes);
495
+ this.#fragments = new SnapshotSerialFragments(serialId, snapshot.fragments);
496
+ }
497
+ async getSentence(sentenceId) {
498
+ const [serialId, sentenceIndex] = sentenceId;
499
+ const sentence = (await this.getSerialFragments(serialId).listSentences())[sentenceIndex];
500
+ if (sentence === void 0) {
501
+ throw new RangeError(`Sentence ${sentenceIndex} does not exist`);
502
+ }
503
+ return sentence.text;
504
+ }
505
+ getSerialFragments(serialId) {
506
+ if (serialId !== this.#fragments.serialId) {
507
+ return new SnapshotSerialFragments(serialId, []);
508
+ }
509
+ return this.#fragments;
510
+ }
511
+ getSummaryFragments(serialId) {
512
+ return new SnapshotSerialFragments(serialId, []);
513
+ }
514
+ async openSession(operation) {
515
+ return await operation(this);
516
+ }
517
+ readDatabase() {
518
+ return Promise.reject(
519
+ new Error("Summary input snapshots do not expose a SQLite database.")
520
+ );
521
+ }
522
+ readSearchIndexDatabase() {
523
+ return Promise.reject(
524
+ new Error(
525
+ "Summary input snapshots do not expose a search index database."
526
+ )
527
+ );
528
+ }
529
+ readBookMeta() {
530
+ return Promise.resolve(void 0);
531
+ }
532
+ readCover() {
533
+ return Promise.resolve(void 0);
534
+ }
535
+ readSummary(_serialId) {
536
+ return Promise.resolve(void 0);
537
+ }
538
+ readToc() {
539
+ return Promise.resolve(void 0);
540
+ }
541
+ release() {
542
+ return Promise.resolve();
543
+ }
544
+ }
545
+ class EmptySnapshotMentionStore {
546
+ getById(_mentionId) {
547
+ return Promise.resolve(void 0);
548
+ }
549
+ listAll() {
550
+ return Promise.resolve([]);
551
+ }
552
+ listByQid(_qid) {
553
+ return Promise.resolve([]);
554
+ }
555
+ listBySurfaceTerms(_terms) {
556
+ return Promise.resolve([]);
557
+ }
558
+ listBySurfaces(_surfaces) {
559
+ return Promise.resolve([]);
560
+ }
561
+ listByChapter(_chapterId) {
562
+ return Promise.resolve([]);
563
+ }
564
+ }
565
+ class EmptySnapshotMentionLinkStore {
566
+ getById(_linkId) {
567
+ return Promise.resolve(void 0);
568
+ }
569
+ listByTriple(_input) {
570
+ return Promise.resolve([]);
571
+ }
572
+ listByChapter(_chapterId) {
573
+ return Promise.resolve([]);
574
+ }
575
+ }
576
+ class EmptySnapshotObjectMetadataStore {
577
+ getMap(_objectPath) {
578
+ return Promise.resolve({});
579
+ }
580
+ }
581
+ class EmptySnapshotGraphBuildParameterStore {
582
+ getByHash(_hash) {
583
+ return Promise.resolve(void 0);
584
+ }
585
+ }
586
+ class SnapshotSerialStore {
587
+ #serial;
588
+ constructor(serial) {
589
+ this.#serial = serial;
590
+ }
591
+ getById(serialId) {
592
+ return Promise.resolve(
593
+ serialId === this.#serial.id ? this.#serial : void 0
594
+ );
595
+ }
596
+ getRevision(serialId) {
597
+ return Promise.resolve(
598
+ serialId === this.#serial.id ? this.#serial.revision : 0
599
+ );
600
+ }
601
+ getRevisions(serialIds) {
602
+ return Promise.resolve(
603
+ new Map(
604
+ serialIds.filter((serialId) => serialId === this.#serial.id).map((serialId) => [serialId, this.#serial.revision])
605
+ )
606
+ );
607
+ }
608
+ getChaptersRevision() {
609
+ return Promise.resolve(this.#serial.revision);
610
+ }
611
+ getMaxId() {
612
+ return Promise.resolve(this.#serial.id);
613
+ }
614
+ listIds() {
615
+ return Promise.resolve([this.#serial.id]);
616
+ }
617
+ listDocumentOrders() {
618
+ return Promise.resolve(
619
+ /* @__PURE__ */ new Map([[this.#serial.id, this.#serial.documentOrder]])
620
+ );
621
+ }
622
+ }
623
+ class SnapshotSerialFragments {
624
+ path = "";
625
+ serialId;
626
+ #fragmentsById;
627
+ constructor(serialId, fragments) {
628
+ this.serialId = serialId;
629
+ this.#fragmentsById = new Map(
630
+ fragments.filter((fragment) => fragment.serialId === serialId).map((fragment) => [fragment.fragmentId, fragment])
631
+ );
632
+ }
633
+ getFragment(fragmentId) {
634
+ const fragment = this.#fragmentsById.get(fragmentId);
635
+ if (fragment === void 0) {
636
+ throw new Error(`Fragment ${fragmentId} does not exist`);
637
+ }
638
+ return Promise.resolve(fragment);
639
+ }
640
+ listFragmentIds() {
641
+ return Promise.resolve([...this.#fragmentsById.keys()].sort(compareNumber));
642
+ }
643
+ async getSentence(sentenceIndex) {
644
+ const sentence = (await this.listSentences())[sentenceIndex];
645
+ if (sentence === void 0) {
646
+ throw new RangeError(`Sentence ${sentenceIndex} does not exist`);
647
+ }
648
+ return sentence;
649
+ }
650
+ async listSentencesInRange(startSentenceIndex, endSentenceIndex) {
651
+ return (await this.listSentences()).slice(
652
+ startSentenceIndex,
653
+ endSentenceIndex + 1
654
+ );
655
+ }
656
+ async listSentences() {
657
+ const fragments = await Promise.all(
658
+ (await this.listFragmentIds()).map(
659
+ async (fragmentId) => await this.getFragment(fragmentId)
660
+ )
661
+ );
662
+ return fragments.flatMap((fragment) => fragment.sentences);
663
+ }
664
+ async readText() {
665
+ const sentences = await this.listSentences();
666
+ if (sentences.length === 0) {
667
+ return void 0;
668
+ }
669
+ return sentences.map((sentence) => sentence.text).join("");
670
+ }
671
+ }
672
+ class SnapshotChunkStore {
673
+ #chunks;
674
+ #chunksById;
675
+ #fragmentStartIndexesBySerialId;
676
+ constructor(chunks, fragments) {
677
+ this.#chunks = [...chunks].sort(compareChunkById);
678
+ this.#chunksById = new Map(chunks.map((chunk) => [chunk.id, chunk]));
679
+ this.#fragmentStartIndexesBySerialId = createFragmentStartIndexesBySerialId(fragments);
680
+ }
681
+ getById(chunkId) {
682
+ return Promise.resolve(this.#chunksById.get(chunkId));
683
+ }
684
+ countAll() {
685
+ return Promise.resolve(this.#chunks.length);
686
+ }
687
+ listAll() {
688
+ return Promise.resolve([...this.#chunks]);
689
+ }
690
+ listBySentenceStartIndexes(serialId, sentenceStartIndexes) {
691
+ const segmentRanges = createSegmentRanges(
692
+ this.#fragmentStartIndexesBySerialId.get(serialId) ?? [],
693
+ sentenceStartIndexes
694
+ );
695
+ return Promise.resolve(
696
+ this.#chunks.filter(
697
+ (chunk) => chunk.sentenceId[0] === serialId && segmentRanges.some(
698
+ (range) => chunk.sentenceId[1] >= range.startSentenceIndex && chunk.sentenceId[1] <= range.endSentenceIndex
699
+ )
700
+ )
701
+ );
702
+ }
703
+ listBySentenceRange(serialId, startSentenceIndex, endSentenceIndex) {
704
+ return Promise.resolve(
705
+ this.#chunks.filter(
706
+ (chunk) => chunk.sentenceId[0] === serialId && chunk.sentenceId[1] >= startSentenceIndex && chunk.sentenceId[1] <= endSentenceIndex
707
+ )
708
+ );
709
+ }
710
+ listBySerial(serialId) {
711
+ return Promise.resolve(
712
+ this.#chunks.filter((chunk) => chunk.sentenceId[0] === serialId)
713
+ );
714
+ }
715
+ getMaxId() {
716
+ return Promise.resolve(
717
+ this.#chunks.reduce((maxId, chunk) => Math.max(maxId, chunk.id), 0)
718
+ );
719
+ }
720
+ listFragmentPairs() {
721
+ const pairs = /* @__PURE__ */ new Set();
722
+ for (const chunk of this.#chunks) {
723
+ pairs.add(`${chunk.sentenceId[0]}:${chunk.sentenceId[1]}`);
724
+ }
725
+ return Promise.resolve(
726
+ [...pairs].map((pair) => pair.split(":").map(Number)).sort(comparePair).map(([serialId, fragmentId]) => [serialId, fragmentId])
727
+ );
728
+ }
729
+ }
730
+ class SnapshotReadingEdgeStore {
731
+ #edges;
732
+ #serialIdByChunkId;
733
+ constructor(edges, chunks) {
734
+ this.#edges = [...edges].sort(compareReadingEdge);
735
+ this.#serialIdByChunkId = new Map(
736
+ chunks.map((chunk) => [chunk.id, chunk.sentenceId[0]])
737
+ );
738
+ }
739
+ listAll() {
740
+ return Promise.resolve([...this.#edges]);
741
+ }
742
+ countAll() {
743
+ return Promise.resolve(this.#edges.length);
744
+ }
745
+ listBySerial(serialId) {
746
+ return Promise.resolve(
747
+ this.#edges.filter(
748
+ (edge) => this.#serialIdByChunkId.get(edge.fromId) === serialId && this.#serialIdByChunkId.get(edge.toId) === serialId
749
+ )
750
+ );
751
+ }
752
+ listIncoming(chunkId) {
753
+ return Promise.resolve(this.#edges.filter((edge) => edge.toId === chunkId));
754
+ }
755
+ listOutgoing(chunkId) {
756
+ return Promise.resolve(
757
+ this.#edges.filter((edge) => edge.fromId === chunkId)
758
+ );
759
+ }
760
+ }
761
+ class SnapshotSnakeStore {
762
+ #snakes;
763
+ #snakesById;
764
+ constructor(snakes) {
765
+ this.#snakes = [...snakes].sort(compareSnake);
766
+ this.#snakesById = new Map(snakes.map((snake) => [snake.id, snake]));
767
+ }
768
+ getById(snakeId) {
769
+ return Promise.resolve(this.#snakesById.get(snakeId));
770
+ }
771
+ listIdsByGroup(serialId, groupId) {
772
+ return Promise.resolve(
773
+ this.#snakes.filter(
774
+ (snake) => snake.serialId === serialId && snake.groupId === groupId
775
+ ).map((snake) => snake.id).sort(compareNumber)
776
+ );
777
+ }
778
+ listBySerial(serialId) {
779
+ return Promise.resolve(
780
+ this.#snakes.filter((snake) => snake.serialId === serialId)
781
+ );
782
+ }
783
+ }
784
+ class SnapshotSnakeChunkStore {
785
+ #snakeChunks;
786
+ constructor(snakeChunks) {
787
+ this.#snakeChunks = [...snakeChunks].sort(compareSnakeChunk);
788
+ }
789
+ listChunkIds(snakeId) {
790
+ return Promise.resolve(
791
+ this.#snakeChunks.filter((snakeChunk) => snakeChunk.snakeId === snakeId).map((snakeChunk) => snakeChunk.chunkId)
792
+ );
793
+ }
794
+ listBySnake(snakeId) {
795
+ return Promise.resolve(
796
+ this.#snakeChunks.filter((snakeChunk) => snakeChunk.snakeId === snakeId)
797
+ );
798
+ }
799
+ }
800
+ class SnapshotSnakeEdgeStore {
801
+ #edges;
802
+ #serialIdBySnakeId;
803
+ constructor(edges, snakes) {
804
+ this.#edges = [...edges].sort(compareSnakeEdge);
805
+ this.#serialIdBySnakeId = new Map(
806
+ snakes.map((snake) => [snake.id, snake.serialId])
807
+ );
808
+ }
809
+ listIncoming(snakeId) {
810
+ return Promise.resolve(
811
+ this.#edges.filter((edge) => edge.toSnakeId === snakeId)
812
+ );
813
+ }
814
+ listOutgoing(snakeId) {
815
+ return Promise.resolve(
816
+ this.#edges.filter((edge) => edge.fromSnakeId === snakeId)
817
+ );
818
+ }
819
+ listWithin(snakeIds) {
820
+ const snakeIdSet = new Set(snakeIds);
821
+ return Promise.resolve(
822
+ this.#edges.filter(
823
+ (edge) => snakeIdSet.has(edge.fromSnakeId) && snakeIdSet.has(edge.toSnakeId)
824
+ )
825
+ );
826
+ }
827
+ listBySerial(serialId) {
828
+ return Promise.resolve(
829
+ this.#edges.filter(
830
+ (edge) => this.#serialIdBySnakeId.get(edge.fromSnakeId) === serialId && this.#serialIdBySnakeId.get(edge.toSnakeId) === serialId
831
+ )
832
+ );
833
+ }
834
+ }
835
+ class SnapshotFragmentGroupStore {
836
+ #groups;
837
+ constructor(groups) {
838
+ this.#groups = [...groups].sort(compareFragmentGroup);
839
+ }
840
+ listBySerial(serialId) {
841
+ return Promise.resolve(
842
+ this.#groups.filter((group) => group.serialId === serialId)
843
+ );
844
+ }
845
+ listSerialIds() {
846
+ return Promise.resolve(
847
+ [...new Set(this.#groups.map((group) => group.serialId))].sort(
848
+ compareNumber
849
+ )
850
+ );
851
+ }
852
+ listGroupIdsForSerial(serialId) {
853
+ return Promise.resolve(
854
+ [
855
+ ...new Set(
856
+ this.#groups.filter((group) => group.serialId === serialId).map((group) => group.groupId)
857
+ )
858
+ ].sort(compareNumber)
859
+ );
860
+ }
861
+ }
862
+ async function copySnakes(sourceDocument, targetDocument, serialId, chunkIdMap) {
863
+ const sourceSnakes = await sourceDocument.snakes.listBySerial(serialId);
864
+ const snakeIdMap = /* @__PURE__ */ new Map();
865
+ for (const sourceSnake of sourceSnakes) {
866
+ const targetSnakeId = await targetDocument.snakes.create({
867
+ firstLabel: sourceSnake.firstLabel,
868
+ groupId: sourceSnake.groupId,
869
+ lastLabel: sourceSnake.lastLabel,
870
+ localSnakeId: sourceSnake.localSnakeId,
871
+ serialId,
872
+ size: sourceSnake.size,
873
+ weight: sourceSnake.weight,
874
+ wordsCount: sourceSnake.wordsCount
875
+ });
876
+ snakeIdMap.set(sourceSnake.id, targetSnakeId);
877
+ for (const snakeChunk of await sourceDocument.snakeChunks.listBySnake(
878
+ sourceSnake.id
879
+ )) {
880
+ const chunkId = chunkIdMap.get(snakeChunk.chunkId);
881
+ if (chunkId === void 0) {
882
+ continue;
883
+ }
884
+ await targetDocument.snakeChunks.save({
885
+ chunkId,
886
+ position: snakeChunk.position,
887
+ snakeId: targetSnakeId
888
+ });
889
+ }
890
+ }
891
+ for (const edge of await sourceDocument.snakeEdges.listBySerial(serialId)) {
892
+ const fromSnakeId = snakeIdMap.get(edge.fromSnakeId);
893
+ const toSnakeId = snakeIdMap.get(edge.toSnakeId);
894
+ if (fromSnakeId === void 0 || toSnakeId === void 0) {
895
+ continue;
896
+ }
897
+ await targetDocument.snakeEdges.save({
898
+ fromSnakeId,
899
+ toSnakeId,
900
+ weight: edge.weight
901
+ });
902
+ }
903
+ }
904
+ async function copyChunks(sourceDocument, targetDocument, serialId) {
905
+ const chunkIdMap = /* @__PURE__ */ new Map();
906
+ for (const chunk of await sourceDocument.chunks.listBySerial(serialId)) {
907
+ const createdChunk = await targetDocument.chunks.create({
908
+ content: chunk.content,
909
+ generation: chunk.generation,
910
+ label: chunk.label,
911
+ sentenceId: chunk.sentenceId,
912
+ sentenceIds: chunk.sentenceIds,
913
+ weight: chunk.weight,
914
+ wordsCount: chunk.wordsCount,
915
+ ...chunk.importance === void 0 ? {} : { importance: chunk.importance },
916
+ ...chunk.retention === void 0 ? {} : { retention: chunk.retention }
917
+ });
918
+ chunkIdMap.set(chunk.id, createdChunk.id);
919
+ }
920
+ return chunkIdMap;
921
+ }
922
+ async function requireStage(document, chapterId, stage) {
923
+ const details = await getChapterDetails(document, chapterId);
924
+ if (details.stage !== stage) {
925
+ throw new Error(
926
+ `Chapter ${chapterId} is ${details.stage}. Expected ${stage} before committing build output.`
927
+ );
928
+ }
929
+ }
930
+ function createTopologyOptions(options) {
931
+ return {
932
+ extractionPrompt: options.extractionPrompt,
933
+ ...options.userLanguage === void 0 ? {} : { userLanguage: options.userLanguage }
934
+ };
935
+ }
936
+ function createGraphBuildParameterInput(options) {
937
+ const language = normalizeLanguageCode(options.userLanguage);
938
+ return {
939
+ ...language === void 0 ? {} : { language },
940
+ prompt: options.extractionPrompt
941
+ };
942
+ }
943
+ async function* readChapterSource(document, chapterId) {
944
+ const fragments = document.getSerialFragments(chapterId);
945
+ for (const fragmentId of await fragments.listFragmentIds()) {
946
+ const fragment = await fragments.getFragment(fragmentId);
947
+ for (const sentence of fragment.sentences) {
948
+ yield sentence.text;
949
+ }
950
+ }
951
+ }
952
+ async function collectReaderText(stream) {
953
+ const text = [];
954
+ for await (const chunk of stream) {
955
+ text.push(chunk);
956
+ }
957
+ return text;
958
+ }
959
+ function compareNumber(left, right) {
960
+ return left - right;
961
+ }
962
+ function createFragmentStartIndexesBySerialId(fragments) {
963
+ const indexesBySerialId = /* @__PURE__ */ new Map();
964
+ for (const fragment of fragments) {
965
+ const indexes = indexesBySerialId.get(fragment.serialId) ?? [];
966
+ indexes.push(fragment.fragmentId);
967
+ indexesBySerialId.set(fragment.serialId, indexes);
968
+ }
969
+ return new Map(
970
+ [...indexesBySerialId.entries()].map(
971
+ ([serialId, indexes]) => [serialId, indexes.sort(compareNumber)]
972
+ )
973
+ );
974
+ }
975
+ function createSegmentRanges(allStartIndexes, selectedStartIndexes) {
976
+ const selected = new Set(selectedStartIndexes);
977
+ return allStartIndexes.flatMap((startSentenceIndex, index) => {
978
+ if (!selected.has(startSentenceIndex)) {
979
+ return [];
980
+ }
981
+ const nextStartSentenceIndex = allStartIndexes[index + 1];
982
+ return [
983
+ {
984
+ endSentenceIndex: nextStartSentenceIndex === void 0 ? Infinity : nextStartSentenceIndex - 1,
985
+ startSentenceIndex
986
+ }
987
+ ];
988
+ });
989
+ }
990
+ function compareChunkById(left, right) {
991
+ return left.id - right.id;
992
+ }
993
+ function compareFragmentGroup(left, right) {
994
+ return left.serialId - right.serialId || left.groupId - right.groupId || left.startSentenceIndex - right.startSentenceIndex || left.endSentenceIndex - right.endSentenceIndex;
995
+ }
996
+ function compareReadingEdge(left, right) {
997
+ return left.fromId - right.fromId || left.toId - right.toId;
998
+ }
999
+ function comparePair(left, right) {
1000
+ return left[0] - right[0] || left[1] - right[1];
1001
+ }
1002
+ function compareSnake(left, right) {
1003
+ return left.groupId - right.groupId || left.id - right.id;
1004
+ }
1005
+ function compareSnakeChunk(left, right) {
1006
+ return left.snakeId - right.snakeId || left.position - right.position;
1007
+ }
1008
+ function compareSnakeEdge(left, right) {
1009
+ return left.fromSnakeId - right.fromSnakeId || left.toSnakeId - right.toSnakeId;
1010
+ }
1011
+ export {
1012
+ buildChapterGraphArtifact,
1013
+ buildChapterSummaryArtifact,
1014
+ buildChapterSummaryArtifactFromSnapshot,
1015
+ commitChapterGraphArtifact,
1016
+ commitChapterSummaryArtifact,
1017
+ readChapterBuildInput,
1018
+ snapshotChapterSummaryInput
1019
+ };
1020
+ //# sourceMappingURL=chapter-build.js.map