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,148 @@
1
+ declare enum ChunkRetention {
2
+ Verbatim = "verbatim",
3
+ Detailed = "detailed",
4
+ Focused = "focused",
5
+ Relevant = "relevant"
6
+ }
7
+ declare const isChunkRetention: (value: string) => value is ChunkRetention;
8
+ declare const expectChunkRetention: (value: string) => ChunkRetention;
9
+ declare enum ChunkImportance {
10
+ Critical = "critical",
11
+ Important = "important",
12
+ Helpful = "helpful"
13
+ }
14
+ declare const isChunkImportance: (value: string) => value is ChunkImportance;
15
+ declare const expectChunkImportance: (value: string) => ChunkImportance;
16
+ type SentenceId = readonly [chapterId: number, sentenceIndex: number];
17
+ interface SentenceRecord {
18
+ readonly text: string;
19
+ readonly wordsCount: number;
20
+ }
21
+ declare class Sentence implements SentenceRecord {
22
+ #private;
23
+ readonly rawText: string;
24
+ readonly wordsCount: number;
25
+ constructor(rawText: string, wordsCount: number);
26
+ get text(): string;
27
+ toJSON(): SentenceRecord;
28
+ }
29
+ interface FragmentRecord {
30
+ readonly serialId: number;
31
+ readonly fragmentId: number;
32
+ readonly summary: string;
33
+ readonly sentences: readonly SentenceRecord[];
34
+ }
35
+ interface SerialRecord {
36
+ readonly documentOrder: number;
37
+ readonly knowledgeGraphReady: boolean;
38
+ readonly knowledgeGraphParameterHash?: string;
39
+ readonly id: number;
40
+ readonly revision: number;
41
+ readonly topologyParameterHash?: string;
42
+ readonly topologyReady: boolean;
43
+ }
44
+ interface GraphBuildParameterRecord {
45
+ readonly createdAt: string;
46
+ readonly hash: string;
47
+ readonly language?: string;
48
+ readonly prompt: string;
49
+ }
50
+ interface ChunkRecord {
51
+ readonly id: number;
52
+ readonly generation: number;
53
+ readonly sentenceId: SentenceId;
54
+ readonly label: string;
55
+ readonly content: string;
56
+ readonly sentenceIds: readonly SentenceId[];
57
+ readonly retention?: ChunkRetention;
58
+ readonly importance?: ChunkImportance;
59
+ readonly wordsCount: number;
60
+ readonly weight: number;
61
+ }
62
+ type CreateChunkRecord = Omit<ChunkRecord, "id">;
63
+ interface ReadingEdgeRecord {
64
+ readonly fromId: number;
65
+ readonly toId: number;
66
+ readonly strength?: string;
67
+ readonly weight: number;
68
+ }
69
+ interface MentionRecord {
70
+ readonly id: string;
71
+ readonly chapterId: number;
72
+ readonly fragmentId?: number;
73
+ readonly sentenceIndex?: number;
74
+ readonly rangeStart: number;
75
+ readonly rangeEnd: number;
76
+ readonly surface: string;
77
+ readonly qid: string;
78
+ readonly confidence?: number;
79
+ readonly note?: string;
80
+ }
81
+ interface MentionLinkRecord {
82
+ readonly id: string;
83
+ readonly sourceMentionId: string;
84
+ readonly targetMentionId: string;
85
+ readonly predicate: string;
86
+ readonly evidenceSentenceIds: readonly SentenceId[];
87
+ readonly confidence?: number;
88
+ readonly note?: string;
89
+ }
90
+ interface SnakeRecord {
91
+ readonly id: number;
92
+ readonly serialId: number;
93
+ readonly groupId: number;
94
+ readonly localSnakeId: number;
95
+ readonly size: number;
96
+ readonly firstLabel: string;
97
+ readonly lastLabel: string;
98
+ readonly wordsCount: number;
99
+ readonly weight: number;
100
+ }
101
+ interface CreateSnakeRecord {
102
+ readonly serialId: number;
103
+ readonly groupId: number;
104
+ readonly localSnakeId: number;
105
+ readonly size: number;
106
+ readonly firstLabel: string;
107
+ readonly lastLabel: string;
108
+ readonly wordsCount?: number;
109
+ readonly weight?: number;
110
+ }
111
+ interface SnakeChunkRecord {
112
+ readonly snakeId: number;
113
+ readonly chunkId: number;
114
+ readonly position: number;
115
+ }
116
+ interface SnakeEdgeRecord {
117
+ readonly fromSnakeId: number;
118
+ readonly toSnakeId: number;
119
+ readonly weight: number;
120
+ }
121
+ interface SentenceGroupRecord {
122
+ readonly serialId: number;
123
+ readonly groupId: number;
124
+ readonly startSentenceIndex: number;
125
+ readonly endSentenceIndex: number;
126
+ readonly fragmentId?: number;
127
+ }
128
+ type FragmentGroupRecord = SentenceGroupRecord;
129
+ declare const enum ObjectMetadataKind {
130
+ Archive = 1,
131
+ Chapter = 2,
132
+ Chunk = 3,
133
+ Entity = 4,
134
+ Triple = 5,
135
+ Object = 6
136
+ }
137
+ interface ObjectMetadataTarget {
138
+ readonly kind: ObjectMetadataKind;
139
+ readonly objectPath: string;
140
+ readonly chapterId?: number;
141
+ readonly chunkId?: number;
142
+ readonly entityQid?: string;
143
+ readonly tripleSubjectQid?: string;
144
+ readonly triplePredicate?: string;
145
+ readonly tripleObjectQid?: string;
146
+ }
147
+
148
+ export { ChunkImportance, type ChunkRecord, ChunkRetention, type CreateChunkRecord, type CreateSnakeRecord, type FragmentGroupRecord, type FragmentRecord, type GraphBuildParameterRecord, type MentionLinkRecord, type MentionRecord, ObjectMetadataKind, type ObjectMetadataTarget, type ReadingEdgeRecord, Sentence, type SentenceGroupRecord, type SentenceId, type SentenceRecord, type SerialRecord, type SnakeChunkRecord, type SnakeEdgeRecord, type SnakeRecord, expectChunkImportance, expectChunkRetention, isChunkImportance, isChunkRetention };
@@ -0,0 +1,69 @@
1
+ import {
2
+ createEnumValueAsserter,
3
+ createEnumValueGuard
4
+ } from "../utils/enum.js";
5
+ var ChunkRetention = /* @__PURE__ */ ((ChunkRetention2) => {
6
+ ChunkRetention2["Verbatim"] = "verbatim";
7
+ ChunkRetention2["Detailed"] = "detailed";
8
+ ChunkRetention2["Focused"] = "focused";
9
+ ChunkRetention2["Relevant"] = "relevant";
10
+ return ChunkRetention2;
11
+ })(ChunkRetention || {});
12
+ const isChunkRetention = createEnumValueGuard(ChunkRetention);
13
+ const expectChunkRetention = createEnumValueAsserter(
14
+ ChunkRetention,
15
+ "chunk retention"
16
+ );
17
+ var ChunkImportance = /* @__PURE__ */ ((ChunkImportance2) => {
18
+ ChunkImportance2["Critical"] = "critical";
19
+ ChunkImportance2["Important"] = "important";
20
+ ChunkImportance2["Helpful"] = "helpful";
21
+ return ChunkImportance2;
22
+ })(ChunkImportance || {});
23
+ const isChunkImportance = createEnumValueGuard(ChunkImportance);
24
+ const expectChunkImportance = createEnumValueAsserter(
25
+ ChunkImportance,
26
+ "chunk importance"
27
+ );
28
+ class Sentence {
29
+ #text;
30
+ rawText;
31
+ wordsCount;
32
+ constructor(rawText, wordsCount) {
33
+ this.rawText = rawText;
34
+ this.wordsCount = wordsCount;
35
+ }
36
+ get text() {
37
+ this.#text ??= normalizeSentenceText(this.rawText);
38
+ return this.#text;
39
+ }
40
+ toJSON() {
41
+ return {
42
+ text: this.text,
43
+ wordsCount: this.wordsCount
44
+ };
45
+ }
46
+ }
47
+ function normalizeSentenceText(text) {
48
+ return text.replace(/\s+/gu, " ").trim();
49
+ }
50
+ var ObjectMetadataKind = /* @__PURE__ */ ((ObjectMetadataKind2) => {
51
+ ObjectMetadataKind2[ObjectMetadataKind2["Archive"] = 1] = "Archive";
52
+ ObjectMetadataKind2[ObjectMetadataKind2["Chapter"] = 2] = "Chapter";
53
+ ObjectMetadataKind2[ObjectMetadataKind2["Chunk"] = 3] = "Chunk";
54
+ ObjectMetadataKind2[ObjectMetadataKind2["Entity"] = 4] = "Entity";
55
+ ObjectMetadataKind2[ObjectMetadataKind2["Triple"] = 5] = "Triple";
56
+ ObjectMetadataKind2[ObjectMetadataKind2["Object"] = 6] = "Object";
57
+ return ObjectMetadataKind2;
58
+ })(ObjectMetadataKind || {});
59
+ export {
60
+ ChunkImportance,
61
+ ChunkRetention,
62
+ ObjectMetadataKind,
63
+ Sentence,
64
+ expectChunkImportance,
65
+ expectChunkRetention,
66
+ isChunkImportance,
67
+ isChunkRetention
68
+ };
69
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/document/types.ts"],"sourcesContent":["import {\n createEnumValueAsserter,\n createEnumValueGuard,\n} from \"../utils/enum.js\";\n\nexport enum ChunkRetention {\n Verbatim = \"verbatim\",\n Detailed = \"detailed\",\n Focused = \"focused\",\n Relevant = \"relevant\",\n}\n\nexport const isChunkRetention = createEnumValueGuard(ChunkRetention);\nexport const expectChunkRetention = createEnumValueAsserter(\n ChunkRetention,\n \"chunk retention\",\n);\n\nexport enum ChunkImportance {\n Critical = \"critical\",\n Important = \"important\",\n Helpful = \"helpful\",\n}\n\nexport const isChunkImportance = createEnumValueGuard(ChunkImportance);\nexport const expectChunkImportance = createEnumValueAsserter(\n ChunkImportance,\n \"chunk importance\",\n);\n\nexport type SentenceId = readonly [chapterId: number, sentenceIndex: number];\n\nexport interface SentenceRecord {\n readonly text: string;\n readonly wordsCount: number;\n}\n\nexport class Sentence implements SentenceRecord {\n #text: string | undefined;\n public readonly rawText: string;\n public readonly wordsCount: number;\n\n public constructor(rawText: string, wordsCount: number) {\n this.rawText = rawText;\n this.wordsCount = wordsCount;\n }\n\n public get text(): string {\n this.#text ??= normalizeSentenceText(this.rawText);\n\n return this.#text;\n }\n\n public toJSON(): SentenceRecord {\n return {\n text: this.text,\n wordsCount: this.wordsCount,\n };\n }\n}\n\nexport interface FragmentRecord {\n readonly serialId: number;\n readonly fragmentId: number;\n readonly summary: string;\n readonly sentences: readonly SentenceRecord[];\n}\n\nexport interface SerialRecord {\n readonly documentOrder: number;\n readonly knowledgeGraphReady: boolean;\n readonly knowledgeGraphParameterHash?: string;\n readonly id: number;\n readonly revision: number;\n readonly topologyParameterHash?: string;\n readonly topologyReady: boolean;\n}\n\nexport interface GraphBuildParameterRecord {\n readonly createdAt: string;\n readonly hash: string;\n readonly language?: string;\n readonly prompt: string;\n}\n\nexport interface ChunkRecord {\n readonly id: number;\n readonly generation: number;\n readonly sentenceId: SentenceId;\n readonly label: string;\n readonly content: string;\n readonly sentenceIds: readonly SentenceId[];\n readonly retention?: ChunkRetention;\n readonly importance?: ChunkImportance;\n readonly wordsCount: number;\n readonly weight: number;\n}\n\nexport type CreateChunkRecord = Omit<ChunkRecord, \"id\">;\n\nexport interface ReadingEdgeRecord {\n readonly fromId: number;\n readonly toId: number;\n readonly strength?: string;\n readonly weight: number;\n}\n\nexport interface MentionRecord {\n readonly id: string;\n readonly chapterId: number;\n readonly fragmentId?: number;\n readonly sentenceIndex?: number;\n readonly rangeStart: number;\n readonly rangeEnd: number;\n readonly surface: string;\n readonly qid: string;\n readonly confidence?: number;\n readonly note?: string;\n}\n\nexport interface MentionLinkRecord {\n readonly id: string;\n readonly sourceMentionId: string;\n readonly targetMentionId: string;\n readonly predicate: string;\n readonly evidenceSentenceIds: readonly SentenceId[];\n readonly confidence?: number;\n readonly note?: string;\n}\n\nexport interface SnakeRecord {\n readonly id: number;\n readonly serialId: number;\n readonly groupId: number;\n readonly localSnakeId: number;\n readonly size: number;\n readonly firstLabel: string;\n readonly lastLabel: string;\n readonly wordsCount: number;\n readonly weight: number;\n}\n\nexport interface CreateSnakeRecord {\n readonly serialId: number;\n readonly groupId: number;\n readonly localSnakeId: number;\n readonly size: number;\n readonly firstLabel: string;\n readonly lastLabel: string;\n readonly wordsCount?: number;\n readonly weight?: number;\n}\n\nexport interface SnakeChunkRecord {\n readonly snakeId: number;\n readonly chunkId: number;\n readonly position: number;\n}\n\nexport interface SnakeEdgeRecord {\n readonly fromSnakeId: number;\n readonly toSnakeId: number;\n readonly weight: number;\n}\n\nfunction normalizeSentenceText(text: string): string {\n return text.replace(/\\s+/gu, \" \").trim();\n}\n\nexport interface SentenceGroupRecord {\n readonly serialId: number;\n readonly groupId: number;\n readonly startSentenceIndex: number;\n readonly endSentenceIndex: number;\n readonly fragmentId?: number;\n}\n\nexport type FragmentGroupRecord = SentenceGroupRecord;\n\nexport const enum ObjectMetadataKind {\n Archive = 1,\n Chapter = 2,\n Chunk = 3,\n Entity = 4,\n Triple = 5,\n Object = 6,\n}\n\nexport interface ObjectMetadataTarget {\n readonly kind: ObjectMetadataKind;\n readonly objectPath: string;\n readonly chapterId?: number;\n readonly chunkId?: number;\n readonly entityQid?: string;\n readonly tripleSubjectQid?: string;\n readonly triplePredicate?: string;\n readonly tripleObjectQid?: string;\n}\n"],"mappings":"AAAA;AAAA,EACE;AAAA,EACA;AAAA,OACK;AAEA,IAAK,iBAAL,kBAAKA,oBAAL;AACL,EAAAA,gBAAA,cAAW;AACX,EAAAA,gBAAA,cAAW;AACX,EAAAA,gBAAA,aAAU;AACV,EAAAA,gBAAA,cAAW;AAJD,SAAAA;AAAA,GAAA;AAOL,MAAM,mBAAmB,qBAAqB,cAAc;AAC5D,MAAM,uBAAuB;AAAA,EAClC;AAAA,EACA;AACF;AAEO,IAAK,kBAAL,kBAAKC,qBAAL;AACL,EAAAA,iBAAA,cAAW;AACX,EAAAA,iBAAA,eAAY;AACZ,EAAAA,iBAAA,aAAU;AAHA,SAAAA;AAAA,GAAA;AAML,MAAM,oBAAoB,qBAAqB,eAAe;AAC9D,MAAM,wBAAwB;AAAA,EACnC;AAAA,EACA;AACF;AASO,MAAM,SAAmC;AAAA,EAC9C;AAAA,EACgB;AAAA,EACA;AAAA,EAET,YAAY,SAAiB,YAAoB;AACtD,SAAK,UAAU;AACf,SAAK,aAAa;AAAA,EACpB;AAAA,EAEA,IAAW,OAAe;AACxB,SAAK,UAAU,sBAAsB,KAAK,OAAO;AAEjD,WAAO,KAAK;AAAA,EACd;AAAA,EAEO,SAAyB;AAC9B,WAAO;AAAA,MACL,MAAM,KAAK;AAAA,MACX,YAAY,KAAK;AAAA,IACnB;AAAA,EACF;AACF;AA0GA,SAAS,sBAAsB,MAAsB;AACnD,SAAO,KAAK,QAAQ,SAAS,GAAG,EAAE,KAAK;AACzC;AAYO,IAAW,qBAAX,kBAAWC,wBAAX;AACL,EAAAA,wCAAA,aAAU,KAAV;AACA,EAAAA,wCAAA,aAAU,KAAV;AACA,EAAAA,wCAAA,WAAQ,KAAR;AACA,EAAAA,wCAAA,YAAS,KAAT;AACA,EAAAA,wCAAA,YAAS,KAAT;AACA,EAAAA,wCAAA,YAAS,KAAT;AANgB,SAAAA;AAAA,GAAA;","names":["ChunkRetention","ChunkImportance","ObjectMetadataKind"]}
@@ -0,0 +1,27 @@
1
+ import { ChunkRecord } from '../document/types.js';
2
+ import { ReadonlyDocument } from '../document/document.js';
3
+ import '../source/meta.js';
4
+ import 'zod';
5
+ import '../source/toc.js';
6
+ import '../source/types.js';
7
+ import '../document/database.js';
8
+ import 'sqlite3';
9
+ import '../document/text-streams.js';
10
+ import '../document/stores.js';
11
+
12
+ interface Clue {
13
+ readonly clueId: number;
14
+ readonly chunks: readonly ChunkRecord[];
15
+ readonly isMerged: boolean;
16
+ readonly label: string;
17
+ readonly sourceSnakeIds: readonly number[];
18
+ readonly weight: number;
19
+ }
20
+ declare function extractCluesFromDocument(input: {
21
+ groupId: number;
22
+ maxClues: number;
23
+ serialId: number;
24
+ document: ReadonlyDocument;
25
+ }): Promise<readonly Clue[]>;
26
+
27
+ export { type Clue, extractCluesFromDocument };
@@ -0,0 +1,158 @@
1
+ async function extractCluesFromDocument(input) {
2
+ const snakeIds = await input.document.snakes.listIdsByGroup(
3
+ input.serialId,
4
+ input.groupId
5
+ );
6
+ const snakes = await Promise.all(
7
+ snakeIds.map(
8
+ async (snakeId) => await input.document.snakes.getById(snakeId)
9
+ )
10
+ );
11
+ const clues = await Promise.all(
12
+ snakes.filter((snake) => snake !== void 0).map(async (snake) => await convertSnakeToClue(snake, input.document))
13
+ );
14
+ if (clues.length <= input.maxClues) {
15
+ return normalizeClueWeights(clues);
16
+ }
17
+ let currentClues = [...clues];
18
+ let mergedClueId = -1;
19
+ while (currentClues.length > input.maxClues) {
20
+ currentClues.sort(compareClueByWeightDescending);
21
+ const cutoffRank = Math.floor(input.maxClues * 0.75);
22
+ const candidates = currentClues.slice(cutoffRank);
23
+ if (candidates.length < 2) {
24
+ break;
25
+ }
26
+ const pair = findBestMergePair(candidates);
27
+ const [leftClue, rightClue] = pair ?? [...currentClues].sort(compareClueByWeightAscending).slice(0, 2);
28
+ if (leftClue === void 0 || rightClue === void 0) {
29
+ break;
30
+ }
31
+ currentClues = currentClues.filter(
32
+ (clue) => clue !== leftClue && clue !== rightClue
33
+ );
34
+ currentClues.push(mergeClues(leftClue, rightClue, mergedClueId));
35
+ mergedClueId -= 1;
36
+ }
37
+ return normalizeClueWeights(currentClues);
38
+ }
39
+ function calculateSentenceReduction(leftClue, rightClue) {
40
+ const leftSentenceIndexes = collectSentenceIndexes(leftClue.chunks);
41
+ const rightSentenceIndexes = collectSentenceIndexes(rightClue.chunks);
42
+ const mergedSentenceIndexes = /* @__PURE__ */ Object.create(null);
43
+ let mergedCount = 0;
44
+ for (const sentenceIndex of leftSentenceIndexes) {
45
+ mergedSentenceIndexes[String(sentenceIndex)] = true;
46
+ mergedCount += 1;
47
+ }
48
+ for (const sentenceIndex of rightSentenceIndexes) {
49
+ const sentenceKey = String(sentenceIndex);
50
+ if (mergedSentenceIndexes[sentenceKey] === true) {
51
+ continue;
52
+ }
53
+ mergedSentenceIndexes[sentenceKey] = true;
54
+ mergedCount += 1;
55
+ }
56
+ return leftSentenceIndexes.length + rightSentenceIndexes.length - mergedCount;
57
+ }
58
+ function collectSentenceIndexes(chunks) {
59
+ const sentenceIndexRecord = /* @__PURE__ */ Object.create(null);
60
+ const sentenceIndexes = [];
61
+ for (const chunk of chunks) {
62
+ for (const sentenceId of chunk.sentenceIds) {
63
+ const sentenceIndex = sentenceId[1];
64
+ const sentenceKey = String(sentenceIndex);
65
+ if (sentenceIndexRecord[sentenceKey] === true) {
66
+ continue;
67
+ }
68
+ sentenceIndexRecord[sentenceKey] = true;
69
+ sentenceIndexes.push(sentenceIndex);
70
+ }
71
+ }
72
+ sentenceIndexes.sort(compareNumber);
73
+ return sentenceIndexes;
74
+ }
75
+ function compareClueByWeightAscending(left, right) {
76
+ return left.weight - right.weight;
77
+ }
78
+ function compareClueByWeightDescending(left, right) {
79
+ return right.weight - left.weight;
80
+ }
81
+ function compareChunkBySentenceId(left, right) {
82
+ const [leftSerialId, leftSentenceIndex] = left.sentenceId;
83
+ const [rightSerialId, rightSentenceIndex] = right.sentenceId;
84
+ if (leftSerialId !== rightSerialId) {
85
+ return leftSerialId - rightSerialId;
86
+ }
87
+ return leftSentenceIndex - rightSentenceIndex;
88
+ }
89
+ function compareNumber(left, right) {
90
+ return left - right;
91
+ }
92
+ async function convertSnakeToClue(snake, document) {
93
+ const chunkIds = await document.snakeChunks.listChunkIds(snake.id);
94
+ const chunks = (await Promise.all(
95
+ chunkIds.map(async (chunkId) => await document.chunks.getById(chunkId))
96
+ )).filter((chunk) => chunk !== void 0);
97
+ return {
98
+ clueId: snake.id,
99
+ chunks,
100
+ isMerged: false,
101
+ label: `${snake.firstLabel} -> ${snake.lastLabel}`,
102
+ sourceSnakeIds: [snake.id],
103
+ weight: snake.weight
104
+ };
105
+ }
106
+ function findBestMergePair(clues) {
107
+ let bestPair;
108
+ let bestReduction = -1;
109
+ for (let leftIndex = 0; leftIndex < clues.length; leftIndex += 1) {
110
+ const leftClue = clues[leftIndex];
111
+ if (leftClue === void 0) {
112
+ continue;
113
+ }
114
+ for (let rightIndex = leftIndex + 1; rightIndex < clues.length; rightIndex += 1) {
115
+ const rightClue = clues[rightIndex];
116
+ if (rightClue === void 0) {
117
+ continue;
118
+ }
119
+ const reduction = calculateSentenceReduction(leftClue, rightClue);
120
+ if (reduction <= bestReduction) {
121
+ continue;
122
+ }
123
+ bestReduction = reduction;
124
+ bestPair = [leftClue, rightClue];
125
+ }
126
+ }
127
+ return bestPair;
128
+ }
129
+ function mergeClues(leftClue, rightClue, clueId) {
130
+ const sourceSnakeIds = [
131
+ ...leftClue.sourceSnakeIds,
132
+ ...rightClue.sourceSnakeIds
133
+ ].sort(compareNumber);
134
+ const chunks = [...leftClue.chunks, ...rightClue.chunks].sort(
135
+ compareChunkBySentenceId
136
+ );
137
+ return {
138
+ clueId,
139
+ chunks,
140
+ isMerged: true,
141
+ label: `Merged minor clues (${sourceSnakeIds.length})`,
142
+ sourceSnakeIds,
143
+ weight: leftClue.weight + rightClue.weight
144
+ };
145
+ }
146
+ function normalizeClueWeights(clues) {
147
+ const totalWeight = clues.reduce((sum, clue) => sum + clue.weight, 0);
148
+ const normalizedClues = clues.map((clue) => ({
149
+ ...clue,
150
+ weight: totalWeight === 0 ? 0 : clue.weight / totalWeight
151
+ }));
152
+ normalizedClues.sort(compareClueByWeightDescending);
153
+ return normalizedClues;
154
+ }
155
+ export {
156
+ extractCluesFromDocument
157
+ };
158
+ //# sourceMappingURL=clue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/editor/clue.ts"],"sourcesContent":["import type {\n ChunkRecord,\n ReadonlyDocument,\n SnakeRecord,\n} from \"../document/index.js\";\n\ninterface Clue {\n readonly clueId: number;\n readonly chunks: readonly ChunkRecord[];\n readonly isMerged: boolean;\n readonly label: string;\n readonly sourceSnakeIds: readonly number[];\n readonly weight: number;\n}\n\nexport async function extractCluesFromDocument(input: {\n groupId: number;\n maxClues: number;\n serialId: number;\n document: ReadonlyDocument;\n}): Promise<readonly Clue[]> {\n const snakeIds = await input.document.snakes.listIdsByGroup(\n input.serialId,\n input.groupId,\n );\n const snakes = await Promise.all(\n snakeIds.map(\n async (snakeId) => await input.document.snakes.getById(snakeId),\n ),\n );\n const clues = await Promise.all(\n snakes\n .filter((snake): snake is SnakeRecord => snake !== undefined)\n .map(async (snake) => await convertSnakeToClue(snake, input.document)),\n );\n\n if (clues.length <= input.maxClues) {\n return normalizeClueWeights(clues);\n }\n\n let currentClues = [...clues];\n let mergedClueId = -1;\n\n while (currentClues.length > input.maxClues) {\n currentClues.sort(compareClueByWeightDescending);\n\n const cutoffRank = Math.floor(input.maxClues * 0.75);\n const candidates = currentClues.slice(cutoffRank);\n\n if (candidates.length < 2) {\n break;\n }\n\n const pair = findBestMergePair(candidates);\n const [leftClue, rightClue] =\n pair ?? [...currentClues].sort(compareClueByWeightAscending).slice(0, 2);\n\n if (leftClue === undefined || rightClue === undefined) {\n break;\n }\n\n currentClues = currentClues.filter(\n (clue) => clue !== leftClue && clue !== rightClue,\n );\n currentClues.push(mergeClues(leftClue, rightClue, mergedClueId));\n mergedClueId -= 1;\n }\n\n return normalizeClueWeights(currentClues);\n}\n\nfunction calculateSentenceReduction(leftClue: Clue, rightClue: Clue): number {\n const leftSentenceIndexes = collectSentenceIndexes(leftClue.chunks);\n const rightSentenceIndexes = collectSentenceIndexes(rightClue.chunks);\n const mergedSentenceIndexes = Object.create(null) as Record<string, true>;\n let mergedCount = 0;\n\n for (const sentenceIndex of leftSentenceIndexes) {\n mergedSentenceIndexes[String(sentenceIndex)] = true;\n mergedCount += 1;\n }\n\n for (const sentenceIndex of rightSentenceIndexes) {\n const sentenceKey = String(sentenceIndex);\n\n if (mergedSentenceIndexes[sentenceKey] === true) {\n continue;\n }\n\n mergedSentenceIndexes[sentenceKey] = true;\n mergedCount += 1;\n }\n\n return leftSentenceIndexes.length + rightSentenceIndexes.length - mergedCount;\n}\n\nfunction collectSentenceIndexes(chunks: readonly ChunkRecord[]): number[] {\n const sentenceIndexRecord = Object.create(null) as Record<string, true>;\n const sentenceIndexes: number[] = [];\n\n for (const chunk of chunks) {\n for (const sentenceId of chunk.sentenceIds) {\n const sentenceIndex = sentenceId[1];\n const sentenceKey = String(sentenceIndex);\n\n if (sentenceIndexRecord[sentenceKey] === true) {\n continue;\n }\n\n sentenceIndexRecord[sentenceKey] = true;\n sentenceIndexes.push(sentenceIndex);\n }\n }\n\n sentenceIndexes.sort(compareNumber);\n\n return sentenceIndexes;\n}\n\nfunction compareClueByWeightAscending(left: Clue, right: Clue): number {\n return left.weight - right.weight;\n}\n\nfunction compareClueByWeightDescending(left: Clue, right: Clue): number {\n return right.weight - left.weight;\n}\n\nfunction compareChunkBySentenceId(\n left: ChunkRecord,\n right: ChunkRecord,\n): number {\n const [leftSerialId, leftSentenceIndex] = left.sentenceId;\n const [rightSerialId, rightSentenceIndex] = right.sentenceId;\n\n if (leftSerialId !== rightSerialId) {\n return leftSerialId - rightSerialId;\n }\n\n return leftSentenceIndex - rightSentenceIndex;\n}\n\nfunction compareNumber(left: number, right: number): number {\n return left - right;\n}\n\nasync function convertSnakeToClue(\n snake: SnakeRecord,\n document: ReadonlyDocument,\n): Promise<Clue> {\n const chunkIds = await document.snakeChunks.listChunkIds(snake.id);\n const chunks = (\n await Promise.all(\n chunkIds.map(async (chunkId) => await document.chunks.getById(chunkId)),\n )\n ).filter((chunk): chunk is ChunkRecord => chunk !== undefined);\n\n return {\n clueId: snake.id,\n chunks,\n isMerged: false,\n label: `${snake.firstLabel} -> ${snake.lastLabel}`,\n sourceSnakeIds: [snake.id],\n weight: snake.weight,\n };\n}\n\nfunction findBestMergePair(\n clues: readonly Clue[],\n): readonly [Clue, Clue] | undefined {\n let bestPair: [Clue, Clue] | undefined;\n let bestReduction = -1;\n\n for (let leftIndex = 0; leftIndex < clues.length; leftIndex += 1) {\n const leftClue = clues[leftIndex];\n\n if (leftClue === undefined) {\n continue;\n }\n\n for (\n let rightIndex = leftIndex + 1;\n rightIndex < clues.length;\n rightIndex += 1\n ) {\n const rightClue = clues[rightIndex];\n\n if (rightClue === undefined) {\n continue;\n }\n\n const reduction = calculateSentenceReduction(leftClue, rightClue);\n\n if (reduction <= bestReduction) {\n continue;\n }\n\n bestReduction = reduction;\n bestPair = [leftClue, rightClue];\n }\n }\n\n return bestPair;\n}\n\nfunction mergeClues(leftClue: Clue, rightClue: Clue, clueId: number): Clue {\n const sourceSnakeIds = [\n ...leftClue.sourceSnakeIds,\n ...rightClue.sourceSnakeIds,\n ].sort(compareNumber);\n const chunks = [...leftClue.chunks, ...rightClue.chunks].sort(\n compareChunkBySentenceId,\n );\n\n return {\n clueId,\n chunks,\n isMerged: true,\n label: `Merged minor clues (${sourceSnakeIds.length})`,\n sourceSnakeIds,\n weight: leftClue.weight + rightClue.weight,\n };\n}\n\nfunction normalizeClueWeights(clues: readonly Clue[]): readonly Clue[] {\n const totalWeight = clues.reduce((sum, clue) => sum + clue.weight, 0);\n const normalizedClues = clues.map((clue) => ({\n ...clue,\n weight: totalWeight === 0 ? 0 : clue.weight / totalWeight,\n }));\n\n normalizedClues.sort(compareClueByWeightDescending);\n\n return normalizedClues;\n}\n\nexport type { Clue };\n"],"mappings":"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","names":[]}
@@ -0,0 +1,18 @@
1
+ import { LLM } from '../llm/client.js';
2
+ import '../llm/context.js';
3
+ import '../llm/cache.js';
4
+ import '../llm/types.js';
5
+ import 'ai';
6
+
7
+ declare class CompressionRequester<S extends string> {
8
+ #private;
9
+ constructor(llm: LLM<S>, scope: S, compressionRatio: number, userLanguage?: string);
10
+ request(input: {
11
+ markedText: string;
12
+ previousCompressedText?: string;
13
+ revisionFeedback?: string;
14
+ targetLength: number;
15
+ }): Promise<string>;
16
+ }
17
+
18
+ export { CompressionRequester };
@@ -0,0 +1,68 @@
1
+ import { TEXT_COMPRESSOR_PROMPT_TEMPLATE } from "./prompt-templates.js";
2
+ class CompressionRequester {
3
+ #compressionRatio;
4
+ #llm;
5
+ #scope;
6
+ #userLanguage;
7
+ constructor(llm, scope, compressionRatio, userLanguage) {
8
+ this.#compressionRatio = compressionRatio;
9
+ this.#llm = llm;
10
+ this.#scope = scope;
11
+ this.#userLanguage = userLanguage;
12
+ }
13
+ async request(input) {
14
+ const acceptableMin = Math.floor(input.targetLength * 0.85);
15
+ const acceptableMax = Math.floor(input.targetLength * 1.15);
16
+ const systemPrompt = this.#llm.loadSystemPrompt(
17
+ TEXT_COMPRESSOR_PROMPT_TEMPLATE,
18
+ {
19
+ acceptable_max: acceptableMax,
20
+ acceptable_min: acceptableMin,
21
+ compression_ratio: Math.floor(this.#compressionRatio * 100),
22
+ original_length: input.markedText.length,
23
+ target_length: input.targetLength,
24
+ user_language: this.#userLanguage
25
+ }
26
+ );
27
+ const messages = buildCompressionMessages(
28
+ {
29
+ markedText: input.markedText,
30
+ systemPrompt
31
+ },
32
+ input.previousCompressedText,
33
+ input.revisionFeedback
34
+ );
35
+ return (await this.#llm.request(messages, {
36
+ scope: this.#scope
37
+ })).trim();
38
+ }
39
+ }
40
+ function buildCompressionMessages(input, previousCompressedText, revisionFeedback) {
41
+ const messages = [
42
+ {
43
+ content: input.systemPrompt,
44
+ role: "system"
45
+ },
46
+ {
47
+ content: input.markedText,
48
+ role: "user"
49
+ }
50
+ ];
51
+ if (previousCompressedText !== void 0 && revisionFeedback !== void 0) {
52
+ messages.push(
53
+ {
54
+ content: previousCompressedText,
55
+ role: "assistant"
56
+ },
57
+ {
58
+ content: revisionFeedback,
59
+ role: "user"
60
+ }
61
+ );
62
+ }
63
+ return messages;
64
+ }
65
+ export {
66
+ CompressionRequester
67
+ };
68
+ //# sourceMappingURL=compressor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/editor/compressor.ts"],"sourcesContent":["import type { LLMessage, LLM } from \"../llm/index.js\";\nimport { TEXT_COMPRESSOR_PROMPT_TEMPLATE } from \"./prompt-templates.js\";\n\nexport class CompressionRequester<S extends string> {\n readonly #compressionRatio: number;\n readonly #llm: LLM<S>;\n readonly #scope: S;\n readonly #userLanguage: string | undefined;\n\n public constructor(\n llm: LLM<S>,\n scope: S,\n compressionRatio: number,\n userLanguage?: string,\n ) {\n this.#compressionRatio = compressionRatio;\n this.#llm = llm;\n this.#scope = scope;\n this.#userLanguage = userLanguage;\n }\n\n public async request(input: {\n markedText: string;\n previousCompressedText?: string;\n revisionFeedback?: string;\n targetLength: number;\n }): Promise<string> {\n const acceptableMin = Math.floor(input.targetLength * 0.85);\n const acceptableMax = Math.floor(input.targetLength * 1.15);\n const systemPrompt = this.#llm.loadSystemPrompt(\n TEXT_COMPRESSOR_PROMPT_TEMPLATE,\n {\n acceptable_max: acceptableMax,\n acceptable_min: acceptableMin,\n compression_ratio: Math.floor(this.#compressionRatio * 100),\n original_length: input.markedText.length,\n target_length: input.targetLength,\n user_language: this.#userLanguage,\n },\n );\n const messages = buildCompressionMessages(\n {\n markedText: input.markedText,\n systemPrompt,\n },\n input.previousCompressedText,\n input.revisionFeedback,\n );\n\n return (\n await this.#llm.request(messages, {\n scope: this.#scope,\n })\n ).trim();\n }\n}\n\nfunction buildCompressionMessages(\n input: {\n markedText: string;\n systemPrompt: string;\n },\n previousCompressedText?: string,\n revisionFeedback?: string,\n): LLMessage[] {\n const messages: LLMessage[] = [\n {\n content: input.systemPrompt,\n role: \"system\",\n },\n {\n content: input.markedText,\n role: \"user\",\n },\n ];\n\n if (previousCompressedText !== undefined && revisionFeedback !== undefined) {\n messages.push(\n {\n content: previousCompressedText,\n role: \"assistant\",\n },\n {\n content: revisionFeedback,\n role: \"user\",\n },\n );\n }\n\n return messages;\n}\n"],"mappings":"AACA,SAAS,uCAAuC;AAEzC,MAAM,qBAAuC;AAAA,EACzC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEF,YACL,KACA,OACA,kBACA,cACA;AACA,SAAK,oBAAoB;AACzB,SAAK,OAAO;AACZ,SAAK,SAAS;AACd,SAAK,gBAAgB;AAAA,EACvB;AAAA,EAEA,MAAa,QAAQ,OAKD;AAClB,UAAM,gBAAgB,KAAK,MAAM,MAAM,eAAe,IAAI;AAC1D,UAAM,gBAAgB,KAAK,MAAM,MAAM,eAAe,IAAI;AAC1D,UAAM,eAAe,KAAK,KAAK;AAAA,MAC7B;AAAA,MACA;AAAA,QACE,gBAAgB;AAAA,QAChB,gBAAgB;AAAA,QAChB,mBAAmB,KAAK,MAAM,KAAK,oBAAoB,GAAG;AAAA,QAC1D,iBAAiB,MAAM,WAAW;AAAA,QAClC,eAAe,MAAM;AAAA,QACrB,eAAe,KAAK;AAAA,MACtB;AAAA,IACF;AACA,UAAM,WAAW;AAAA,MACf;AAAA,QACE,YAAY,MAAM;AAAA,QAClB;AAAA,MACF;AAAA,MACA,MAAM;AAAA,MACN,MAAM;AAAA,IACR;AAEA,YACE,MAAM,KAAK,KAAK,QAAQ,UAAU;AAAA,MAChC,OAAO,KAAK;AAAA,IACd,CAAC,GACD,KAAK;AAAA,EACT;AACF;AAEA,SAAS,yBACP,OAIA,wBACA,kBACa;AACb,QAAM,WAAwB;AAAA,IAC5B;AAAA,MACE,SAAS,MAAM;AAAA,MACf,MAAM;AAAA,IACR;AAAA,IACA;AAAA,MACE,SAAS,MAAM;AAAA,MACf,MAAM;AAAA,IACR;AAAA,EACF;AAEA,MAAI,2BAA2B,UAAa,qBAAqB,QAAW;AAC1E,aAAS;AAAA,MACP;AAAA,QACE,SAAS;AAAA,QACT,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,MAAM;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;","names":[]}
@@ -0,0 +1,39 @@
1
+ import { Language } from '../common/language.js';
2
+ import { LLM } from '../llm/client.js';
3
+ import { ReadonlyDocument } from '../document/document.js';
4
+ import '../llm/context.js';
5
+ import '../llm/cache.js';
6
+ import '../llm/types.js';
7
+ import 'ai';
8
+ import '../source/meta.js';
9
+ import 'zod';
10
+ import '../source/toc.js';
11
+ import '../source/types.js';
12
+ import '../document/database.js';
13
+ import 'sqlite3';
14
+ import '../document/text-streams.js';
15
+ import '../document/types.js';
16
+ import '../document/stores.js';
17
+
18
+ interface EditorScopes<S extends string> {
19
+ readonly compress: S;
20
+ readonly review: S;
21
+ readonly reviewGuide: S;
22
+ }
23
+ interface EditorOptions<S extends string> {
24
+ readonly compressionRatio?: number;
25
+ readonly document?: ReadonlyDocument;
26
+ readonly groupId: number;
27
+ readonly llm: LLM<S>;
28
+ readonly logDirPath?: string;
29
+ readonly maxClues?: number;
30
+ readonly maxIterations?: number;
31
+ readonly scopes: EditorScopes<S>;
32
+ readonly serialId: number;
33
+ readonly userLanguage?: Language;
34
+ /** @deprecated Use `document` instead. */
35
+ readonly workspace?: ReadonlyDocument;
36
+ }
37
+ declare function compressText<S extends string>(options: EditorOptions<S>): Promise<string>;
38
+
39
+ export { type EditorOptions, type EditorScopes, compressText };