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,253 @@
1
+ import { extractCluesFromDocument } from "./clue.js";
2
+ import { CompressionRequester } from "./compressor.js";
3
+ import {
4
+ calculateScore,
5
+ createRevisionFeedback,
6
+ pickBestVersion
7
+ } from "./feedback.js";
8
+ import { checkOutputLanguage } from "./language-review.js";
9
+ import { CompressionLog } from "./log.js";
10
+ import { formatChunksAsBook } from "./markup.js";
11
+ import {
12
+ cleanChunkTags,
13
+ extractCompressedText,
14
+ extractThinkingText
15
+ } from "./response.js";
16
+ import { CompressionReviewer } from "./review.js";
17
+ async function compressText(options) {
18
+ return await new EditorOperation(options).run();
19
+ }
20
+ class EditorOperation {
21
+ #compressionRatio;
22
+ #groupId;
23
+ #llm;
24
+ #log;
25
+ #maxClues;
26
+ #maxIterations;
27
+ #compressor;
28
+ #reviewer;
29
+ #reviewScope;
30
+ #serialFragments;
31
+ #serialId;
32
+ #userLanguage;
33
+ #document;
34
+ constructor(options) {
35
+ const document = resolveDocument(options);
36
+ this.#compressionRatio = options.compressionRatio ?? 0.2;
37
+ this.#groupId = options.groupId;
38
+ this.#llm = options.llm;
39
+ this.#maxClues = options.maxClues ?? 10;
40
+ this.#maxIterations = options.maxIterations ?? 5;
41
+ this.#reviewScope = options.scopes;
42
+ this.#serialFragments = document.getSerialFragments(options.serialId);
43
+ this.#serialId = options.serialId;
44
+ this.#userLanguage = options.userLanguage;
45
+ this.#document = document;
46
+ this.#compressor = new CompressionRequester(
47
+ this.#llm,
48
+ options.scopes.compress,
49
+ this.#compressionRatio,
50
+ this.#userLanguage
51
+ );
52
+ this.#log = new CompressionLog(this.#serialId, this.#groupId, {
53
+ compressionRatio: this.#compressionRatio,
54
+ maxIterations: this.#maxIterations,
55
+ ...options.logDirPath === void 0 ? {} : {
56
+ logDirPath: options.logDirPath
57
+ }
58
+ });
59
+ this.#reviewer = new CompressionReviewer(
60
+ this.#llm,
61
+ this.#serialFragments,
62
+ {
63
+ review: this.#reviewScope.review,
64
+ reviewGuide: this.#reviewScope.reviewGuide
65
+ },
66
+ this.#userLanguage
67
+ );
68
+ }
69
+ async run() {
70
+ const groups = await this.#listTargetGroups();
71
+ const segmentStartIndexes = await this.#getGroupSegmentStartIndexes(groups);
72
+ if (segmentStartIndexes.length === 0) {
73
+ return "";
74
+ }
75
+ const clues = await extractCluesFromDocument({
76
+ document: this.#document,
77
+ groupId: this.#groupId,
78
+ maxClues: this.#maxClues,
79
+ serialId: this.#serialId
80
+ });
81
+ const originalText = await this.#getFullText(groups);
82
+ if (originalText.trim() === "") {
83
+ return "";
84
+ }
85
+ await this.#log.initialize(clues);
86
+ const markedOriginalText = await formatChunksAsBook({
87
+ chunks: listClueChunks(clues),
88
+ segmentStartIndexes,
89
+ serialFragments: this.#serialFragments,
90
+ wrapHighRetention: true
91
+ });
92
+ const clueReviewers = await this.#reviewer.generateClueReviewers(clues);
93
+ const targetLength = Math.floor(
94
+ originalText.length * this.#compressionRatio
95
+ );
96
+ const versions = [];
97
+ const reviewerHistories = /* @__PURE__ */ Object.create(null);
98
+ let previousCompressedText;
99
+ let revisionFeedback;
100
+ for (let iteration = 1; iteration <= this.#maxIterations; iteration += 1) {
101
+ await this.#log.appendIterationHeader(iteration, revisionFeedback);
102
+ const fullResponse = await this.#compressor.request({
103
+ markedText: markedOriginalText,
104
+ targetLength,
105
+ ...previousCompressedText === void 0 ? {} : {
106
+ previousCompressedText
107
+ },
108
+ ...revisionFeedback === void 0 ? {} : {
109
+ revisionFeedback
110
+ }
111
+ });
112
+ const compressedText = cleanChunkTags(
113
+ extractCompressedText(fullResponse)
114
+ );
115
+ const thinkingText = extractThinkingText(fullResponse);
116
+ await this.#log.appendCompressionResult({
117
+ compressedText,
118
+ thinkingText
119
+ });
120
+ const reviewOutput = await this.#reviewer.reviewCompression(
121
+ compressedText,
122
+ clueReviewers,
123
+ reviewerHistories
124
+ );
125
+ const reviews = [...reviewOutput.reviews];
126
+ const languageReview = checkOutputLanguage({
127
+ compressedText,
128
+ ...this.#userLanguage === void 0 ? {} : {
129
+ userLanguage: this.#userLanguage
130
+ }
131
+ });
132
+ if (languageReview !== void 0) {
133
+ reviews.push(languageReview.review);
134
+ await this.#log.appendLanguageMismatch({
135
+ detectedLanguageCode: languageReview.detectedLanguageCode,
136
+ review: languageReview.review,
137
+ targetLanguageCode: languageReview.targetLanguageCode,
138
+ userLanguage: this.#userLanguage
139
+ });
140
+ }
141
+ const score = calculateScore(reviews);
142
+ versions.push({
143
+ iteration,
144
+ reviews,
145
+ score,
146
+ text: compressedText
147
+ });
148
+ if (score === 0) {
149
+ break;
150
+ }
151
+ if (iteration >= this.#maxIterations) {
152
+ continue;
153
+ }
154
+ revisionFeedback = createRevisionFeedback({
155
+ llm: this.#llm,
156
+ reviews
157
+ });
158
+ previousCompressedText = compressedText;
159
+ for (const clueId of Object.keys(reviewOutput.rawResponses)) {
160
+ const rawResponse = reviewOutput.rawResponses[clueId];
161
+ if (rawResponse === void 0) {
162
+ continue;
163
+ }
164
+ reviewerHistories[clueId] = [compressedText, rawResponse];
165
+ }
166
+ }
167
+ const bestVersion = pickBestVersion(versions);
168
+ await this.#log.appendFinalSelection(bestVersion, originalText.length);
169
+ return bestVersion.text;
170
+ }
171
+ async #listTargetGroups() {
172
+ return (await this.#document.fragmentGroups.listBySerial(this.#serialId)).filter((record) => record.groupId === this.#groupId).map((record) => ({
173
+ endSentenceIndex: record.endSentenceIndex,
174
+ startSentenceIndex: record.startSentenceIndex
175
+ }));
176
+ }
177
+ async #getGroupSegmentStartIndexes(groups) {
178
+ const segmentStartIndexes = [
179
+ ...await this.#serialFragments.listFragmentIds()
180
+ ].sort(compareNumber);
181
+ const coveredStartIndexes = /* @__PURE__ */ new Set();
182
+ for (const group of groups) {
183
+ for (let index = 0; index < segmentStartIndexes.length; index += 1) {
184
+ const startSentenceIndex = segmentStartIndexes[index];
185
+ if (startSentenceIndex === void 0) {
186
+ continue;
187
+ }
188
+ const nextStartSentenceIndex = segmentStartIndexes[index + 1];
189
+ const endSentenceIndex = nextStartSentenceIndex === void 0 ? Infinity : nextStartSentenceIndex - 1;
190
+ if (startSentenceIndex <= group.endSentenceIndex && endSentenceIndex >= group.startSentenceIndex) {
191
+ coveredStartIndexes.add(startSentenceIndex);
192
+ }
193
+ }
194
+ }
195
+ return [...coveredStartIndexes].sort(compareNumber);
196
+ }
197
+ async #getFullText(groups) {
198
+ const fragments = await Promise.all(
199
+ groups.map(async (group) => ({
200
+ sentences: await this.#listGroupSentences(
201
+ group.startSentenceIndex,
202
+ group.endSentenceIndex
203
+ )
204
+ }))
205
+ );
206
+ return fragments.flatMap(
207
+ (fragment) => fragment.sentences.map((sentence) => sentence.text)
208
+ ).join(" ");
209
+ }
210
+ async #listGroupSentences(startSentenceIndex, endSentenceIndex) {
211
+ if (this.#serialFragments.listSentencesInRange !== void 0) {
212
+ return await this.#serialFragments.listSentencesInRange(
213
+ startSentenceIndex,
214
+ endSentenceIndex
215
+ );
216
+ }
217
+ const segmentStartIndexes = [
218
+ ...await this.#serialFragments.listFragmentIds()
219
+ ].sort(compareNumber);
220
+ const fragments = await Promise.all(
221
+ segmentStartIndexes.filter((segmentStartIndex, index) => {
222
+ const nextStartSentenceIndex = segmentStartIndexes[index + 1];
223
+ const segmentEndSentenceIndex = nextStartSentenceIndex === void 0 ? Infinity : nextStartSentenceIndex - 1;
224
+ return segmentStartIndex <= endSentenceIndex && segmentEndSentenceIndex >= startSentenceIndex;
225
+ }).map(
226
+ async (startSentenceIndex2) => await this.#serialFragments.getFragment(startSentenceIndex2)
227
+ )
228
+ );
229
+ return fragments.flatMap(
230
+ (fragment) => fragment.sentences.filter((_sentence, index) => {
231
+ const sentenceIndex = fragment.fragmentId + index;
232
+ return sentenceIndex >= startSentenceIndex && sentenceIndex <= endSentenceIndex;
233
+ })
234
+ );
235
+ }
236
+ }
237
+ function compareNumber(left, right) {
238
+ return left - right;
239
+ }
240
+ function listClueChunks(clues) {
241
+ return clues.flatMap((clue) => clue.chunks);
242
+ }
243
+ function resolveDocument(options) {
244
+ const document = options.document ?? options.workspace;
245
+ if (document === void 0) {
246
+ throw new Error("Editor requires a document");
247
+ }
248
+ return document;
249
+ }
250
+ export {
251
+ compressText
252
+ };
253
+ //# sourceMappingURL=editor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/editor/editor.ts"],"sourcesContent":["import type { Language } from \"../common/language.js\";\nimport type { LLM } from \"../llm/index.js\";\nimport type {\n ChunkRecord,\n ReadonlyDocument,\n ReadonlySerialFragments,\n} from \"../document/index.js\";\nimport { extractCluesFromDocument, type Clue } from \"./clue.js\";\nimport { CompressionRequester } from \"./compressor.js\";\nimport {\n calculateScore,\n createRevisionFeedback,\n pickBestVersion,\n} from \"./feedback.js\";\nimport { checkOutputLanguage } from \"./language-review.js\";\nimport { CompressionLog } from \"./log.js\";\nimport { formatChunksAsBook } from \"./markup.js\";\nimport {\n cleanChunkTags,\n extractCompressedText,\n extractThinkingText,\n} from \"./response.js\";\nimport { CompressionReviewer, type ReviewerHistories } from \"./review.js\";\nimport type { CompressionVersion } from \"./types.js\";\n\nexport interface EditorScopes<S extends string> {\n readonly compress: S;\n readonly review: S;\n readonly reviewGuide: S;\n}\n\nexport interface EditorOptions<S extends string> {\n readonly compressionRatio?: number;\n readonly document?: ReadonlyDocument;\n readonly groupId: number;\n readonly llm: LLM<S>;\n readonly logDirPath?: string;\n readonly maxClues?: number;\n readonly maxIterations?: number;\n readonly scopes: EditorScopes<S>;\n readonly serialId: number;\n readonly userLanguage?: Language;\n /** @deprecated Use `document` instead. */\n readonly workspace?: ReadonlyDocument;\n}\n\nexport async function compressText<S extends string>(\n options: EditorOptions<S>,\n): Promise<string> {\n return await new EditorOperation(options).run();\n}\n\nclass EditorOperation<S extends string> {\n readonly #compressionRatio: number;\n readonly #groupId: number;\n readonly #llm: LLM<S>;\n readonly #log: CompressionLog;\n readonly #maxClues: number;\n readonly #maxIterations: number;\n readonly #compressor: CompressionRequester<S>;\n readonly #reviewer: CompressionReviewer<S>;\n readonly #reviewScope: EditorScopes<S>;\n readonly #serialFragments: ReadonlySerialFragments;\n readonly #serialId: number;\n readonly #userLanguage: Language | undefined;\n readonly #document: ReadonlyDocument;\n\n public constructor(options: EditorOptions<S>) {\n const document = resolveDocument(options);\n\n this.#compressionRatio = options.compressionRatio ?? 0.2;\n this.#groupId = options.groupId;\n this.#llm = options.llm;\n this.#maxClues = options.maxClues ?? 10;\n this.#maxIterations = options.maxIterations ?? 5;\n this.#reviewScope = options.scopes;\n this.#serialFragments = document.getSerialFragments(options.serialId);\n this.#serialId = options.serialId;\n this.#userLanguage = options.userLanguage;\n this.#document = document;\n this.#compressor = new CompressionRequester(\n this.#llm,\n options.scopes.compress,\n this.#compressionRatio,\n this.#userLanguage,\n );\n this.#log = new CompressionLog(this.#serialId, this.#groupId, {\n compressionRatio: this.#compressionRatio,\n maxIterations: this.#maxIterations,\n ...(options.logDirPath === undefined\n ? {}\n : {\n logDirPath: options.logDirPath,\n }),\n });\n this.#reviewer = new CompressionReviewer(\n this.#llm,\n this.#serialFragments,\n {\n review: this.#reviewScope.review,\n reviewGuide: this.#reviewScope.reviewGuide,\n },\n this.#userLanguage,\n );\n }\n\n public async run(): Promise<string> {\n const groups = await this.#listTargetGroups();\n const segmentStartIndexes = await this.#getGroupSegmentStartIndexes(groups);\n\n if (segmentStartIndexes.length === 0) {\n return \"\";\n }\n\n const clues = await extractCluesFromDocument({\n document: this.#document,\n groupId: this.#groupId,\n maxClues: this.#maxClues,\n serialId: this.#serialId,\n });\n const originalText = await this.#getFullText(groups);\n\n if (originalText.trim() === \"\") {\n return \"\";\n }\n\n await this.#log.initialize(clues);\n\n const markedOriginalText = await formatChunksAsBook({\n chunks: listClueChunks(clues),\n segmentStartIndexes,\n serialFragments: this.#serialFragments,\n wrapHighRetention: true,\n });\n const clueReviewers = await this.#reviewer.generateClueReviewers(clues);\n const targetLength = Math.floor(\n originalText.length * this.#compressionRatio,\n );\n const versions: CompressionVersion[] = [];\n const reviewerHistories = Object.create(null) as ReviewerHistories;\n let previousCompressedText: string | undefined;\n let revisionFeedback: string | undefined;\n\n for (let iteration = 1; iteration <= this.#maxIterations; iteration += 1) {\n await this.#log.appendIterationHeader(iteration, revisionFeedback);\n\n const fullResponse = await this.#compressor.request({\n markedText: markedOriginalText,\n targetLength,\n ...(previousCompressedText === undefined\n ? {}\n : {\n previousCompressedText,\n }),\n ...(revisionFeedback === undefined\n ? {}\n : {\n revisionFeedback,\n }),\n });\n const compressedText = cleanChunkTags(\n extractCompressedText(fullResponse),\n );\n const thinkingText = extractThinkingText(fullResponse);\n\n await this.#log.appendCompressionResult({\n compressedText,\n thinkingText,\n });\n\n const reviewOutput = await this.#reviewer.reviewCompression(\n compressedText,\n clueReviewers,\n reviewerHistories,\n );\n const reviews = [...reviewOutput.reviews];\n const languageReview = checkOutputLanguage({\n compressedText,\n ...(this.#userLanguage === undefined\n ? {}\n : {\n userLanguage: this.#userLanguage,\n }),\n });\n\n if (languageReview !== undefined) {\n reviews.push(languageReview.review);\n await this.#log.appendLanguageMismatch({\n detectedLanguageCode: languageReview.detectedLanguageCode,\n review: languageReview.review,\n targetLanguageCode: languageReview.targetLanguageCode,\n userLanguage: this.#userLanguage,\n });\n }\n\n const score = calculateScore(reviews);\n\n versions.push({\n iteration,\n reviews,\n score,\n text: compressedText,\n });\n\n if (score === 0) {\n break;\n }\n\n if (iteration >= this.#maxIterations) {\n continue;\n }\n\n revisionFeedback = createRevisionFeedback({\n llm: this.#llm,\n reviews,\n });\n previousCompressedText = compressedText;\n\n for (const clueId of Object.keys(reviewOutput.rawResponses)) {\n const rawResponse = reviewOutput.rawResponses[clueId];\n\n if (rawResponse === undefined) {\n continue;\n }\n\n reviewerHistories[clueId] = [compressedText, rawResponse];\n }\n }\n\n const bestVersion = pickBestVersion(versions);\n\n await this.#log.appendFinalSelection(bestVersion, originalText.length);\n\n return bestVersion.text;\n }\n\n async #listTargetGroups(): Promise<readonly SentenceGroup[]> {\n return (await this.#document.fragmentGroups.listBySerial(this.#serialId))\n .filter((record) => record.groupId === this.#groupId)\n .map((record) => ({\n endSentenceIndex: record.endSentenceIndex,\n startSentenceIndex: record.startSentenceIndex,\n }));\n }\n\n async #getGroupSegmentStartIndexes(\n groups: readonly SentenceGroup[],\n ): Promise<number[]> {\n const segmentStartIndexes = [\n ...(await this.#serialFragments.listFragmentIds()),\n ].sort(compareNumber);\n const coveredStartIndexes = new Set<number>();\n\n for (const group of groups) {\n for (let index = 0; index < segmentStartIndexes.length; index += 1) {\n const startSentenceIndex = segmentStartIndexes[index];\n\n if (startSentenceIndex === undefined) {\n continue;\n }\n\n const nextStartSentenceIndex = segmentStartIndexes[index + 1];\n const endSentenceIndex =\n nextStartSentenceIndex === undefined\n ? Infinity\n : nextStartSentenceIndex - 1;\n\n if (\n startSentenceIndex <= group.endSentenceIndex &&\n endSentenceIndex >= group.startSentenceIndex\n ) {\n coveredStartIndexes.add(startSentenceIndex);\n }\n }\n }\n\n return [...coveredStartIndexes].sort(compareNumber);\n }\n\n async #getFullText(groups: readonly SentenceGroup[]): Promise<string> {\n const fragments = await Promise.all(\n groups.map(async (group) => ({\n sentences: await this.#listGroupSentences(\n group.startSentenceIndex,\n group.endSentenceIndex,\n ),\n })),\n );\n\n return fragments\n .flatMap((fragment) =>\n fragment.sentences.map((sentence) => sentence.text),\n )\n .join(\" \");\n }\n\n async #listGroupSentences(\n startSentenceIndex: number,\n endSentenceIndex: number,\n ): Promise<readonly { readonly text: string }[]> {\n if (this.#serialFragments.listSentencesInRange !== undefined) {\n return await this.#serialFragments.listSentencesInRange(\n startSentenceIndex,\n endSentenceIndex,\n );\n }\n\n const segmentStartIndexes = [\n ...(await this.#serialFragments.listFragmentIds()),\n ].sort(compareNumber);\n const fragments = await Promise.all(\n segmentStartIndexes\n .filter((segmentStartIndex, index) => {\n const nextStartSentenceIndex = segmentStartIndexes[index + 1];\n const segmentEndSentenceIndex =\n nextStartSentenceIndex === undefined\n ? Infinity\n : nextStartSentenceIndex - 1;\n\n return (\n segmentStartIndex <= endSentenceIndex &&\n segmentEndSentenceIndex >= startSentenceIndex\n );\n })\n .map(\n async (startSentenceIndex) =>\n await this.#serialFragments.getFragment(startSentenceIndex),\n ),\n );\n\n return fragments.flatMap((fragment) =>\n fragment.sentences.filter((_sentence, index) => {\n const sentenceIndex = fragment.fragmentId + index;\n\n return (\n sentenceIndex >= startSentenceIndex &&\n sentenceIndex <= endSentenceIndex\n );\n }),\n );\n }\n}\n\ninterface SentenceGroup {\n readonly endSentenceIndex: number;\n readonly startSentenceIndex: number;\n}\n\nfunction compareNumber(left: number, right: number): number {\n return left - right;\n}\n\nfunction listClueChunks(clues: readonly Clue[]): ChunkRecord[] {\n return clues.flatMap((clue) => clue.chunks);\n}\n\nfunction resolveDocument<S extends string>(\n options: EditorOptions<S>,\n): ReadonlyDocument {\n const document = options.document ?? options.workspace;\n\n if (document === undefined) {\n throw new Error(\"Editor requires a document\");\n }\n\n return document;\n}\n"],"mappings":"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","names":["startSentenceIndex"]}
@@ -0,0 +1,16 @@
1
+ import { LLM } from '../llm/client.js';
2
+ import { ReviewResult, CompressionVersion } from './types.js';
3
+ import '../llm/context.js';
4
+ import '../llm/cache.js';
5
+ import '../llm/types.js';
6
+ import 'ai';
7
+
8
+ declare function calculateScore(reviews: readonly ReviewResult[]): number;
9
+ declare function createRevisionFeedback<S extends string>(input: {
10
+ llm: LLM<S>;
11
+ reviews: readonly ReviewResult[];
12
+ }): string;
13
+ declare function formatIssuesForLog(reviews: readonly ReviewResult[]): string;
14
+ declare function pickBestVersion(versions: readonly CompressionVersion[]): CompressionVersion;
15
+
16
+ export { calculateScore, createRevisionFeedback, formatIssuesForLog, pickBestVersion };
@@ -0,0 +1,104 @@
1
+ import { REVISION_FEEDBACK_PROMPT_TEMPLATE } from "./prompt-templates.js";
2
+ import { ReviewSeverity } from "./types.js";
3
+ const REVIEW_SEVERITY_VALUE = Object.freeze({
4
+ [ReviewSeverity.Critical]: 9,
5
+ [ReviewSeverity.Major]: 3,
6
+ [ReviewSeverity.Minor]: 1
7
+ });
8
+ function calculateScore(reviews) {
9
+ let totalScore = 0;
10
+ for (const review of reviews) {
11
+ for (const issue of review.issues) {
12
+ totalScore += REVIEW_SEVERITY_VALUE[issue.severity] * review.weight;
13
+ }
14
+ }
15
+ return totalScore;
16
+ }
17
+ function createRevisionFeedback(input) {
18
+ const allIssues = collectIssues(input.reviews);
19
+ const visibleIssues = allIssues.slice(0, 9);
20
+ const hiddenCount = allIssues.length - visibleIssues.length;
21
+ const issueLines = [];
22
+ for (let index = 0; index < visibleIssues.length; index += 1) {
23
+ const issue = visibleIssues[index];
24
+ if (issue === void 0) {
25
+ continue;
26
+ }
27
+ issueLines.push(
28
+ `${index + 1}. [${issue.severity.toUpperCase()}]`,
29
+ ` Problem: ${issue.problem}`
30
+ );
31
+ if (issue.suggestion !== "") {
32
+ issueLines.push(` Suggestion: ${issue.suggestion}`);
33
+ }
34
+ issueLines.push("");
35
+ }
36
+ if (hiddenCount > 0) {
37
+ issueLines.push(
38
+ `... and ${hiddenCount} more issues hidden (lower priority)`
39
+ );
40
+ }
41
+ return input.llm.loadSystemPrompt(REVISION_FEEDBACK_PROMPT_TEMPLATE, {
42
+ issues_description: issueLines.join("\n")
43
+ });
44
+ }
45
+ function formatIssuesForLog(reviews) {
46
+ const issues = collectIssues(reviews);
47
+ if (issues.length === 0) {
48
+ return "No issues found - all reviewers are satisfied.\n";
49
+ }
50
+ const lines = [];
51
+ for (let index = 0; index < issues.length; index += 1) {
52
+ const issue = issues[index];
53
+ if (issue === void 0) {
54
+ continue;
55
+ }
56
+ lines.push(
57
+ `${index + 1}. [${issue.severity.toUpperCase()}]`,
58
+ ` Problem: ${issue.problem}`
59
+ );
60
+ if (issue.suggestion !== "") {
61
+ lines.push(` Suggestion: ${issue.suggestion}`);
62
+ }
63
+ lines.push("");
64
+ }
65
+ return lines.join("\n");
66
+ }
67
+ function pickBestVersion(versions) {
68
+ const bestVersion = versions.reduce(
69
+ (currentBest, version) => {
70
+ if (currentBest === void 0 || version.score < currentBest.score) {
71
+ return version;
72
+ }
73
+ return currentBest;
74
+ },
75
+ void 0
76
+ );
77
+ if (bestVersion === void 0) {
78
+ throw new Error("Compression failed: no versions generated");
79
+ }
80
+ return bestVersion;
81
+ }
82
+ function collectIssues(reviews) {
83
+ const issues = reviews.flatMap(
84
+ (review) => review.issues.map((issue) => ({
85
+ ...issue,
86
+ weight: review.weight
87
+ }))
88
+ );
89
+ issues.sort((left, right) => {
90
+ const severityDelta = REVIEW_SEVERITY_VALUE[right.severity] - REVIEW_SEVERITY_VALUE[left.severity];
91
+ if (severityDelta !== 0) {
92
+ return severityDelta;
93
+ }
94
+ return right.weight - left.weight;
95
+ });
96
+ return issues;
97
+ }
98
+ export {
99
+ calculateScore,
100
+ createRevisionFeedback,
101
+ formatIssuesForLog,
102
+ pickBestVersion
103
+ };
104
+ //# sourceMappingURL=feedback.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/editor/feedback.ts"],"sourcesContent":["import type { LLM } from \"../llm/index.js\";\nimport { REVISION_FEEDBACK_PROMPT_TEMPLATE } from \"./prompt-templates.js\";\nimport type { CompressionVersion, ReviewIssue, ReviewResult } from \"./types.js\";\nimport { ReviewSeverity } from \"./types.js\";\n\nconst REVIEW_SEVERITY_VALUE: Readonly<Record<ReviewSeverity, number>> =\n Object.freeze({\n [ReviewSeverity.Critical]: 9,\n [ReviewSeverity.Major]: 3,\n [ReviewSeverity.Minor]: 1,\n });\n\nexport function calculateScore(reviews: readonly ReviewResult[]): number {\n let totalScore = 0;\n\n for (const review of reviews) {\n for (const issue of review.issues) {\n totalScore += REVIEW_SEVERITY_VALUE[issue.severity] * review.weight;\n }\n }\n\n return totalScore;\n}\n\nexport function createRevisionFeedback<S extends string>(input: {\n llm: LLM<S>;\n reviews: readonly ReviewResult[];\n}): string {\n const allIssues = collectIssues(input.reviews);\n const visibleIssues = allIssues.slice(0, 9);\n const hiddenCount = allIssues.length - visibleIssues.length;\n const issueLines: string[] = [];\n\n for (let index = 0; index < visibleIssues.length; index += 1) {\n const issue = visibleIssues[index];\n\n if (issue === undefined) {\n continue;\n }\n\n issueLines.push(\n `${index + 1}. [${issue.severity.toUpperCase()}]`,\n ` Problem: ${issue.problem}`,\n );\n\n if (issue.suggestion !== \"\") {\n issueLines.push(` Suggestion: ${issue.suggestion}`);\n }\n\n issueLines.push(\"\");\n }\n\n if (hiddenCount > 0) {\n issueLines.push(\n `... and ${hiddenCount} more issues hidden (lower priority)`,\n );\n }\n\n return input.llm.loadSystemPrompt(REVISION_FEEDBACK_PROMPT_TEMPLATE, {\n issues_description: issueLines.join(\"\\n\"),\n });\n}\n\nexport function formatIssuesForLog(reviews: readonly ReviewResult[]): string {\n const issues = collectIssues(reviews);\n\n if (issues.length === 0) {\n return \"No issues found - all reviewers are satisfied.\\n\";\n }\n\n const lines: string[] = [];\n\n for (let index = 0; index < issues.length; index += 1) {\n const issue = issues[index];\n\n if (issue === undefined) {\n continue;\n }\n\n lines.push(\n `${index + 1}. [${issue.severity.toUpperCase()}]`,\n ` Problem: ${issue.problem}`,\n );\n\n if (issue.suggestion !== \"\") {\n lines.push(` Suggestion: ${issue.suggestion}`);\n }\n\n lines.push(\"\");\n }\n\n return lines.join(\"\\n\");\n}\n\nexport function pickBestVersion(\n versions: readonly CompressionVersion[],\n): CompressionVersion {\n const bestVersion = versions.reduce<CompressionVersion | undefined>(\n (currentBest, version) => {\n if (currentBest === undefined || version.score < currentBest.score) {\n return version;\n }\n\n return currentBest;\n },\n undefined,\n );\n\n if (bestVersion === undefined) {\n throw new Error(\"Compression failed: no versions generated\");\n }\n\n return bestVersion;\n}\n\nfunction collectIssues(\n reviews: readonly ReviewResult[],\n): Array<ReviewIssue & { readonly weight: number }> {\n const issues = reviews.flatMap((review) =>\n review.issues.map((issue) => ({\n ...issue,\n weight: review.weight,\n })),\n );\n\n issues.sort((left, right) => {\n const severityDelta =\n REVIEW_SEVERITY_VALUE[right.severity] -\n REVIEW_SEVERITY_VALUE[left.severity];\n\n if (severityDelta !== 0) {\n return severityDelta;\n }\n\n return right.weight - left.weight;\n });\n\n return issues;\n}\n"],"mappings":"AACA,SAAS,yCAAyC;AAElD,SAAS,sBAAsB;AAE/B,MAAM,wBACJ,OAAO,OAAO;AAAA,EACZ,CAAC,eAAe,QAAQ,GAAG;AAAA,EAC3B,CAAC,eAAe,KAAK,GAAG;AAAA,EACxB,CAAC,eAAe,KAAK,GAAG;AAC1B,CAAC;AAEI,SAAS,eAAe,SAA0C;AACvE,MAAI,aAAa;AAEjB,aAAW,UAAU,SAAS;AAC5B,eAAW,SAAS,OAAO,QAAQ;AACjC,oBAAc,sBAAsB,MAAM,QAAQ,IAAI,OAAO;AAAA,IAC/D;AAAA,EACF;AAEA,SAAO;AACT;AAEO,SAAS,uBAAyC,OAG9C;AACT,QAAM,YAAY,cAAc,MAAM,OAAO;AAC7C,QAAM,gBAAgB,UAAU,MAAM,GAAG,CAAC;AAC1C,QAAM,cAAc,UAAU,SAAS,cAAc;AACrD,QAAM,aAAuB,CAAC;AAE9B,WAAS,QAAQ,GAAG,QAAQ,cAAc,QAAQ,SAAS,GAAG;AAC5D,UAAM,QAAQ,cAAc,KAAK;AAEjC,QAAI,UAAU,QAAW;AACvB;AAAA,IACF;AAEA,eAAW;AAAA,MACT,GAAG,QAAQ,CAAC,MAAM,MAAM,SAAS,YAAY,CAAC;AAAA,MAC9C,eAAe,MAAM,OAAO;AAAA,IAC9B;AAEA,QAAI,MAAM,eAAe,IAAI;AAC3B,iBAAW,KAAK,kBAAkB,MAAM,UAAU,EAAE;AAAA,IACtD;AAEA,eAAW,KAAK,EAAE;AAAA,EACpB;AAEA,MAAI,cAAc,GAAG;AACnB,eAAW;AAAA,MACT,WAAW,WAAW;AAAA,IACxB;AAAA,EACF;AAEA,SAAO,MAAM,IAAI,iBAAiB,mCAAmC;AAAA,IACnE,oBAAoB,WAAW,KAAK,IAAI;AAAA,EAC1C,CAAC;AACH;AAEO,SAAS,mBAAmB,SAA0C;AAC3E,QAAM,SAAS,cAAc,OAAO;AAEpC,MAAI,OAAO,WAAW,GAAG;AACvB,WAAO;AAAA,EACT;AAEA,QAAM,QAAkB,CAAC;AAEzB,WAAS,QAAQ,GAAG,QAAQ,OAAO,QAAQ,SAAS,GAAG;AACrD,UAAM,QAAQ,OAAO,KAAK;AAE1B,QAAI,UAAU,QAAW;AACvB;AAAA,IACF;AAEA,UAAM;AAAA,MACJ,GAAG,QAAQ,CAAC,MAAM,MAAM,SAAS,YAAY,CAAC;AAAA,MAC9C,eAAe,MAAM,OAAO;AAAA,IAC9B;AAEA,QAAI,MAAM,eAAe,IAAI;AAC3B,YAAM,KAAK,kBAAkB,MAAM,UAAU,EAAE;AAAA,IACjD;AAEA,UAAM,KAAK,EAAE;AAAA,EACf;AAEA,SAAO,MAAM,KAAK,IAAI;AACxB;AAEO,SAAS,gBACd,UACoB;AACpB,QAAM,cAAc,SAAS;AAAA,IAC3B,CAAC,aAAa,YAAY;AACxB,UAAI,gBAAgB,UAAa,QAAQ,QAAQ,YAAY,OAAO;AAClE,eAAO;AAAA,MACT;AAEA,aAAO;AAAA,IACT;AAAA,IACA;AAAA,EACF;AAEA,MAAI,gBAAgB,QAAW;AAC7B,UAAM,IAAI,MAAM,2CAA2C;AAAA,EAC7D;AAEA,SAAO;AACT;AAEA,SAAS,cACP,SACkD;AAClD,QAAM,SAAS,QAAQ;AAAA,IAAQ,CAAC,WAC9B,OAAO,OAAO,IAAI,CAAC,WAAW;AAAA,MAC5B,GAAG;AAAA,MACH,QAAQ,OAAO;AAAA,IACjB,EAAE;AAAA,EACJ;AAEA,SAAO,KAAK,CAAC,MAAM,UAAU;AAC3B,UAAM,gBACJ,sBAAsB,MAAM,QAAQ,IACpC,sBAAsB,KAAK,QAAQ;AAErC,QAAI,kBAAkB,GAAG;AACvB,aAAO;AAAA,IACT;AAEA,WAAO,MAAM,SAAS,KAAK;AAAA,EAC7B,CAAC;AAED,SAAO;AACT;","names":[]}
@@ -0,0 +1,17 @@
1
+ export { EditorOptions, EditorScopes, compressText } from './editor.js';
2
+ import '../common/language.js';
3
+ import '../llm/client.js';
4
+ import '../llm/context.js';
5
+ import '../llm/cache.js';
6
+ import '../llm/types.js';
7
+ import 'ai';
8
+ import '../document/document.js';
9
+ import '../source/meta.js';
10
+ import 'zod';
11
+ import '../source/toc.js';
12
+ import '../source/types.js';
13
+ import '../document/database.js';
14
+ import 'sqlite3';
15
+ import '../document/text-streams.js';
16
+ import '../document/types.js';
17
+ import '../document/stores.js';
@@ -0,0 +1,5 @@
1
+ import { compressText } from "./editor.js";
2
+ export {
3
+ compressText
4
+ };
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/editor/index.ts"],"sourcesContent":["export { compressText } from \"./editor.js\";\nexport type { EditorOptions, EditorScopes } from \"./editor.js\";\n"],"mappings":"AAAA,SAAS,oBAAoB;","names":[]}
@@ -0,0 +1,14 @@
1
+ import { Language } from '../common/language.js';
2
+ import { ReviewResult } from './types.js';
3
+
4
+ interface LanguageReview {
5
+ readonly detectedLanguageCode: string;
6
+ readonly review: ReviewResult;
7
+ readonly targetLanguageCode: string;
8
+ }
9
+ declare function checkOutputLanguage(input: {
10
+ compressedText: string;
11
+ userLanguage?: Language;
12
+ }): LanguageReview | undefined;
13
+
14
+ export { type LanguageReview, checkOutputLanguage };
@@ -0,0 +1,35 @@
1
+ import {
2
+ detectLanguageCode,
3
+ getLanguageDetectionCode
4
+ } from "../common/tinyld-language.js";
5
+ import {} from "../common/language.js";
6
+ import { ReviewSeverity } from "./types.js";
7
+ function checkOutputLanguage(input) {
8
+ if (input.userLanguage === void 0) {
9
+ return void 0;
10
+ }
11
+ const targetLanguageCode = getLanguageDetectionCode(input.userLanguage);
12
+ const detectedLanguageCode = detectLanguageCode(input.compressedText);
13
+ if (detectedLanguageCode === void 0 || detectedLanguageCode === targetLanguageCode) {
14
+ return void 0;
15
+ }
16
+ return {
17
+ detectedLanguageCode,
18
+ review: {
19
+ clueId: -1,
20
+ issues: [
21
+ {
22
+ problem: `Output language error: detected ${detectedLanguageCode}, but ${targetLanguageCode} (${input.userLanguage}) is required.`,
23
+ severity: ReviewSeverity.Critical,
24
+ suggestion: `Please translate the entire compressed text to ${input.userLanguage}. Maintain all information integrity and ensure the translation sounds natural and native, not machine-translated.`
25
+ }
26
+ ],
27
+ weight: 1
28
+ },
29
+ targetLanguageCode
30
+ };
31
+ }
32
+ export {
33
+ checkOutputLanguage
34
+ };
35
+ //# sourceMappingURL=language-review.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/editor/language-review.ts"],"sourcesContent":["import {\n detectLanguageCode,\n getLanguageDetectionCode,\n} from \"../common/tinyld-language.js\";\nimport { type Language } from \"../common/language.js\";\nimport { ReviewSeverity, type ReviewResult } from \"./types.js\";\n\nexport interface LanguageReview {\n readonly detectedLanguageCode: string;\n readonly review: ReviewResult;\n readonly targetLanguageCode: string;\n}\n\nexport function checkOutputLanguage(input: {\n compressedText: string;\n userLanguage?: Language;\n}): LanguageReview | undefined {\n if (input.userLanguage === undefined) {\n return undefined;\n }\n\n const targetLanguageCode = getLanguageDetectionCode(input.userLanguage);\n\n const detectedLanguageCode = detectLanguageCode(input.compressedText);\n\n if (\n detectedLanguageCode === undefined ||\n detectedLanguageCode === targetLanguageCode\n ) {\n return undefined;\n }\n\n return {\n detectedLanguageCode,\n review: {\n clueId: -1,\n issues: [\n {\n problem: `Output language error: detected ${detectedLanguageCode}, but ${targetLanguageCode} (${input.userLanguage}) is required.`,\n severity: ReviewSeverity.Critical,\n suggestion: `Please translate the entire compressed text to ${input.userLanguage}. Maintain all information integrity and ensure the translation sounds natural and native, not machine-translated.`,\n },\n ],\n weight: 1,\n },\n targetLanguageCode,\n };\n}\n"],"mappings":"AAAA;AAAA,EACE;AAAA,EACA;AAAA,OACK;AACP,eAA8B;AAC9B,SAAS,sBAAyC;AAQ3C,SAAS,oBAAoB,OAGL;AAC7B,MAAI,MAAM,iBAAiB,QAAW;AACpC,WAAO;AAAA,EACT;AAEA,QAAM,qBAAqB,yBAAyB,MAAM,YAAY;AAEtE,QAAM,uBAAuB,mBAAmB,MAAM,cAAc;AAEpE,MACE,yBAAyB,UACzB,yBAAyB,oBACzB;AACA,WAAO;AAAA,EACT;AAEA,SAAO;AAAA,IACL;AAAA,IACA,QAAQ;AAAA,MACN,QAAQ;AAAA,MACR,QAAQ;AAAA,QACN;AAAA,UACE,SAAS,mCAAmC,oBAAoB,SAAS,kBAAkB,KAAK,MAAM,YAAY;AAAA,UAClH,UAAU,eAAe;AAAA,UACzB,YAAY,kDAAkD,MAAM,YAAY;AAAA,QAClF;AAAA,MACF;AAAA,MACA,QAAQ;AAAA,IACV;AAAA,IACA;AAAA,EACF;AACF;","names":[]}
@@ -0,0 +1,37 @@
1
+ import { Language } from '../common/language.js';
2
+ import { Clue } from './clue.js';
3
+ import { CompressionVersion, ReviewResult } from './types.js';
4
+ import '../document/types.js';
5
+ import '../document/document.js';
6
+ import '../source/meta.js';
7
+ import 'zod';
8
+ import '../source/toc.js';
9
+ import '../source/types.js';
10
+ import '../document/database.js';
11
+ import 'sqlite3';
12
+ import '../document/text-streams.js';
13
+ import '../document/stores.js';
14
+
15
+ declare class CompressionLog {
16
+ #private;
17
+ constructor(serialId: number, groupId: number, options: {
18
+ readonly compressionRatio: number;
19
+ readonly logDirPath?: string;
20
+ readonly maxIterations: number;
21
+ });
22
+ appendCompressionResult(input: {
23
+ compressedText: string;
24
+ thinkingText: string;
25
+ }): Promise<void>;
26
+ appendFinalSelection(bestVersion: CompressionVersion, originalLength: number): Promise<void>;
27
+ appendIterationHeader(iteration: number, revisionFeedback: string | undefined): Promise<void>;
28
+ appendLanguageMismatch(input: {
29
+ detectedLanguageCode: string;
30
+ review: ReviewResult;
31
+ targetLanguageCode: string;
32
+ userLanguage: Language | undefined;
33
+ }): Promise<void>;
34
+ initialize(clues: readonly Clue[]): Promise<void>;
35
+ }
36
+
37
+ export { CompressionLog };