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,78 @@
1
+ import { getLogger } from "../common/logging.js";
2
+ class LLMContext {
3
+ #cache;
4
+ #pendingCacheEntries = /* @__PURE__ */ new Map();
5
+ #requestFn;
6
+ #logFiles = [];
7
+ #finalized = false;
8
+ sessionId;
9
+ constructor(sessionId, requestFn, cache) {
10
+ this.sessionId = sessionId;
11
+ this.#cache = cache;
12
+ this.#requestFn = requestFn;
13
+ }
14
+ async request(messages, options = {}) {
15
+ this.#assertActive();
16
+ return await this.#requestFn({
17
+ logFiles: this.#logFiles,
18
+ messages,
19
+ options,
20
+ pendingCacheEntries: this.#pendingCacheEntries
21
+ });
22
+ }
23
+ async commit() {
24
+ if (this.#finalized) {
25
+ return;
26
+ }
27
+ for (const entry of this.#pendingCacheEntries.values()) {
28
+ if (this.#cache !== void 0) {
29
+ await this.#cache.write(entry);
30
+ }
31
+ }
32
+ this.#pendingCacheEntries.clear();
33
+ this.#finalized = true;
34
+ }
35
+ rollback() {
36
+ if (!this.#finalized) {
37
+ this.#pendingCacheEntries.clear();
38
+ this.#finalized = true;
39
+ }
40
+ return Promise.resolve();
41
+ }
42
+ async run(operation) {
43
+ try {
44
+ const result = await operation(this);
45
+ await this.commit();
46
+ return result;
47
+ } catch (error) {
48
+ await this.rollback();
49
+ this.#printLogFiles();
50
+ throw error;
51
+ }
52
+ }
53
+ #assertActive() {
54
+ if (this.#finalized) {
55
+ throw new Error("LLMContext is already finalized");
56
+ }
57
+ }
58
+ #printLogFiles() {
59
+ if (this.#logFiles.length === 0) {
60
+ return;
61
+ }
62
+ const logger = getLogger({
63
+ component: "llm-context",
64
+ sessionId: this.sessionId
65
+ });
66
+ logger.warn(
67
+ `
68
+ [LLMContext] Failed with ${this.#logFiles.length} log file(s):`
69
+ );
70
+ for (const [index, logFile] of this.#logFiles.entries()) {
71
+ logger.warn(` ${index + 1}. ${logFile}`);
72
+ }
73
+ }
74
+ }
75
+ export {
76
+ LLMContext
77
+ };
78
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/llm/context.ts"],"sourcesContent":["import { getLogger } from \"../common/logging.js\";\nimport type { LLMCache, PendingCacheEntry } from \"./cache.js\";\nimport type { LLMessage, LLMRequestOptions } from \"./types.js\";\n\nexport interface LLMContextRequestInput<S extends string> {\n messages: readonly LLMessage[];\n options: LLMRequestOptions<S>;\n pendingCacheEntries?: Map<string, PendingCacheEntry>;\n logFiles?: string[];\n}\n\ntype LLMContextRequest<S extends string> = (\n input: LLMContextRequestInput<S>,\n) => Promise<string>;\n\nexport class LLMContext<S extends string> {\n readonly #cache: LLMCache | undefined;\n readonly #pendingCacheEntries = new Map<string, PendingCacheEntry>();\n readonly #requestFn: LLMContextRequest<S>;\n readonly #logFiles: string[] = [];\n #finalized = false;\n public readonly sessionId: number;\n\n public constructor(\n sessionId: number,\n requestFn: LLMContextRequest<S>,\n cache?: LLMCache,\n ) {\n this.sessionId = sessionId;\n this.#cache = cache;\n this.#requestFn = requestFn;\n }\n\n public async request(\n messages: readonly LLMessage[],\n options: LLMRequestOptions<S> = {},\n ): Promise<string> {\n this.#assertActive();\n\n return await this.#requestFn({\n logFiles: this.#logFiles,\n messages,\n options,\n pendingCacheEntries: this.#pendingCacheEntries,\n });\n }\n\n public async commit(): Promise<void> {\n if (this.#finalized) {\n return;\n }\n\n for (const entry of this.#pendingCacheEntries.values()) {\n if (this.#cache !== undefined) {\n await this.#cache.write(entry);\n }\n }\n\n this.#pendingCacheEntries.clear();\n this.#finalized = true;\n }\n\n public rollback(): Promise<void> {\n if (!this.#finalized) {\n this.#pendingCacheEntries.clear();\n this.#finalized = true;\n }\n\n return Promise.resolve();\n }\n\n public async run<T>(\n operation: (context: LLMContext<S>) => Promise<T>,\n ): Promise<T> {\n try {\n const result = await operation(this);\n await this.commit();\n return result;\n } catch (error) {\n await this.rollback();\n this.#printLogFiles();\n throw error;\n }\n }\n\n #assertActive(): void {\n if (this.#finalized) {\n throw new Error(\"LLMContext is already finalized\");\n }\n }\n\n #printLogFiles(): void {\n if (this.#logFiles.length === 0) {\n return;\n }\n\n const logger = getLogger({\n component: \"llm-context\",\n sessionId: this.sessionId,\n });\n\n logger.warn(\n `\\n[LLMContext] Failed with ${this.#logFiles.length} log file(s):`,\n );\n\n for (const [index, logFile] of this.#logFiles.entries()) {\n logger.warn(` ${index + 1}. ${logFile}`);\n }\n }\n}\n"],"mappings":"AAAA,SAAS,iBAAiB;AAenB,MAAM,WAA6B;AAAA,EAC/B;AAAA,EACA,uBAAuB,oBAAI,IAA+B;AAAA,EAC1D;AAAA,EACA,YAAsB,CAAC;AAAA,EAChC,aAAa;AAAA,EACG;AAAA,EAET,YACL,WACA,WACA,OACA;AACA,SAAK,YAAY;AACjB,SAAK,SAAS;AACd,SAAK,aAAa;AAAA,EACpB;AAAA,EAEA,MAAa,QACX,UACA,UAAgC,CAAC,GAChB;AACjB,SAAK,cAAc;AAEnB,WAAO,MAAM,KAAK,WAAW;AAAA,MAC3B,UAAU,KAAK;AAAA,MACf;AAAA,MACA;AAAA,MACA,qBAAqB,KAAK;AAAA,IAC5B,CAAC;AAAA,EACH;AAAA,EAEA,MAAa,SAAwB;AACnC,QAAI,KAAK,YAAY;AACnB;AAAA,IACF;AAEA,eAAW,SAAS,KAAK,qBAAqB,OAAO,GAAG;AACtD,UAAI,KAAK,WAAW,QAAW;AAC7B,cAAM,KAAK,OAAO,MAAM,KAAK;AAAA,MAC/B;AAAA,IACF;AAEA,SAAK,qBAAqB,MAAM;AAChC,SAAK,aAAa;AAAA,EACpB;AAAA,EAEO,WAA0B;AAC/B,QAAI,CAAC,KAAK,YAAY;AACpB,WAAK,qBAAqB,MAAM;AAChC,WAAK,aAAa;AAAA,IACpB;AAEA,WAAO,QAAQ,QAAQ;AAAA,EACzB;AAAA,EAEA,MAAa,IACX,WACY;AACZ,QAAI;AACF,YAAM,SAAS,MAAM,UAAU,IAAI;AACnC,YAAM,KAAK,OAAO;AAClB,aAAO;AAAA,IACT,SAAS,OAAO;AACd,YAAM,KAAK,SAAS;AACpB,WAAK,eAAe;AACpB,YAAM;AAAA,IACR;AAAA,EACF;AAAA,EAEA,gBAAsB;AACpB,QAAI,KAAK,YAAY;AACnB,YAAM,IAAI,MAAM,iCAAiC;AAAA,IACnD;AAAA,EACF;AAAA,EAEA,iBAAuB;AACrB,QAAI,KAAK,UAAU,WAAW,GAAG;AAC/B;AAAA,IACF;AAEA,UAAM,SAAS,UAAU;AAAA,MACvB,WAAW;AAAA,MACX,WAAW,KAAK;AAAA,IAClB,CAAC;AAED,WAAO;AAAA,MACL;AAAA,2BAA8B,KAAK,UAAU,MAAM;AAAA,IACrD;AAEA,eAAW,CAAC,OAAO,OAAO,KAAK,KAAK,UAAU,QAAQ,GAAG;AACvD,aAAO,KAAK,KAAK,QAAQ,CAAC,KAAK,OAAO,EAAE;AAAA,IAC1C;AAAA,EACF;AACF;","names":[]}
@@ -0,0 +1,7 @@
1
+ declare class LLMPaymentRequiredError extends Error {
2
+ readonly isRetryable = false;
3
+ readonly statusCode = 402;
4
+ constructor(message?: string, options?: ErrorOptions);
5
+ }
6
+
7
+ export { LLMPaymentRequiredError };
@@ -0,0 +1,12 @@
1
+ class LLMPaymentRequiredError extends Error {
2
+ isRetryable = false;
3
+ statusCode = 402;
4
+ constructor(message = "LLM payment required.", options) {
5
+ super(message, options);
6
+ this.name = "LLMPaymentRequiredError";
7
+ }
8
+ }
9
+ export {
10
+ LLMPaymentRequiredError
11
+ };
12
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/llm/errors.ts"],"sourcesContent":["export class LLMPaymentRequiredError extends Error {\n public readonly isRetryable = false;\n public readonly statusCode = 402;\n\n public constructor(\n message = \"LLM payment required.\",\n options?: ErrorOptions,\n ) {\n super(message, options);\n this.name = \"LLMPaymentRequiredError\";\n }\n}\n"],"mappings":"AAAO,MAAM,gCAAgC,MAAM;AAAA,EACjC,cAAc;AAAA,EACd,aAAa;AAAA,EAEtB,YACL,UAAU,yBACV,SACA;AACA,UAAM,SAAS,OAAO;AACtB,SAAK,OAAO;AAAA,EACd;AACF;","names":[]}
@@ -0,0 +1,7 @@
1
+ export { LLM } from './client.js';
2
+ export { LLMContext } from './context.js';
3
+ export { LLMPaymentRequiredError } from './errors.js';
4
+ export { getScopeDefaults, resolveSamplingSetting, resolveTemperatureSetting } from './sampling.js';
5
+ export { LLMLazyRequestOperation, LLMModel, LLMOptions, LLMRequestFunction, LLMRequestOptions, LLMStreamProgressCallback, LLMTokenUsage, LLMTokenUsageCallback, LLMessage, SamplingProfile, SamplingScopeConfig, TemperatureSetting } from './types.js';
6
+ import './cache.js';
7
+ import 'ai';
@@ -0,0 +1,17 @@
1
+ import { LLM } from "./client.js";
2
+ import { LLMContext } from "./context.js";
3
+ import { LLMPaymentRequiredError } from "./errors.js";
4
+ import {
5
+ getScopeDefaults,
6
+ resolveSamplingSetting,
7
+ resolveTemperatureSetting
8
+ } from "./sampling.js";
9
+ export {
10
+ LLM,
11
+ LLMContext,
12
+ LLMPaymentRequiredError,
13
+ getScopeDefaults,
14
+ resolveSamplingSetting,
15
+ resolveTemperatureSetting
16
+ };
17
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/llm/index.ts"],"sourcesContent":["export { LLM } from \"./client.js\";\nexport { LLMContext } from \"./context.js\";\nexport { LLMPaymentRequiredError } from \"./errors.js\";\nexport {\n getScopeDefaults,\n resolveSamplingSetting,\n resolveTemperatureSetting,\n} from \"./sampling.js\";\nexport type {\n LLMessage,\n LLMLazyRequestOperation,\n LLMModel,\n LLMOptions,\n LLMRequestFunction,\n LLMRequestOptions,\n LLMStreamProgressCallback,\n LLMTokenUsage,\n LLMTokenUsageCallback,\n SamplingProfile,\n SamplingScopeConfig,\n TemperatureSetting,\n} from \"./types.js\";\n"],"mappings":"AAAA,SAAS,WAAW;AACpB,SAAS,kBAAkB;AAC3B,SAAS,+BAA+B;AACxC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;","names":[]}
@@ -0,0 +1,9 @@
1
+ declare class RequestLog {
2
+ #private;
3
+ constructor(filePath?: string);
4
+ get filePath(): string | undefined;
5
+ append(content: string): Promise<void>;
6
+ }
7
+ declare function createRequestLog(logDirPath?: string): RequestLog;
8
+
9
+ export { RequestLog, createRequestLog };
@@ -0,0 +1,35 @@
1
+ import { appendFile } from "fs/promises";
2
+ import { allocateArtifactPath } from "../common/logging.js";
3
+ class RequestLog {
4
+ #filePath;
5
+ constructor(filePath) {
6
+ this.#filePath = filePath;
7
+ }
8
+ get filePath() {
9
+ return this.#filePath;
10
+ }
11
+ async append(content) {
12
+ if (this.#filePath === void 0) {
13
+ return;
14
+ }
15
+ await appendFile(this.#filePath, content, "utf8");
16
+ }
17
+ }
18
+ function createRequestLog(logDirPath) {
19
+ if (logDirPath === void 0) {
20
+ return new RequestLog();
21
+ }
22
+ return new RequestLog(
23
+ allocateArtifactPath({
24
+ alwaysNumbered: true,
25
+ category: "llm",
26
+ logDirPath,
27
+ prefix: "request"
28
+ })
29
+ );
30
+ }
31
+ export {
32
+ RequestLog,
33
+ createRequestLog
34
+ };
35
+ //# sourceMappingURL=request-log.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/llm/request-log.ts"],"sourcesContent":["import { appendFile } from \"fs/promises\";\nimport { allocateArtifactPath } from \"../common/logging.js\";\n\nexport class RequestLog {\n readonly #filePath: string | undefined;\n\n public constructor(filePath?: string) {\n this.#filePath = filePath;\n }\n\n public get filePath(): string | undefined {\n return this.#filePath;\n }\n\n public async append(content: string): Promise<void> {\n if (this.#filePath === undefined) {\n return;\n }\n await appendFile(this.#filePath, content, \"utf8\");\n }\n}\n\nexport function createRequestLog(logDirPath?: string): RequestLog {\n if (logDirPath === undefined) {\n return new RequestLog();\n }\n\n return new RequestLog(\n allocateArtifactPath({\n alwaysNumbered: true,\n category: \"llm\",\n logDirPath,\n prefix: \"request\",\n }),\n );\n}\n"],"mappings":"AAAA,SAAS,kBAAkB;AAC3B,SAAS,4BAA4B;AAE9B,MAAM,WAAW;AAAA,EACb;AAAA,EAEF,YAAY,UAAmB;AACpC,SAAK,YAAY;AAAA,EACnB;AAAA,EAEA,IAAW,WAA+B;AACxC,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,MAAa,OAAO,SAAgC;AAClD,QAAI,KAAK,cAAc,QAAW;AAChC;AAAA,IACF;AACA,UAAM,WAAW,KAAK,WAAW,SAAS,MAAM;AAAA,EAClD;AACF;AAEO,SAAS,iBAAiB,YAAiC;AAChE,MAAI,eAAe,QAAW;AAC5B,WAAO,IAAI,WAAW;AAAA,EACxB;AAEA,SAAO,IAAI;AAAA,IACT,qBAAqB;AAAA,MACnB,gBAAgB;AAAA,MAChB,UAAU;AAAA,MACV;AAAA,MACA,QAAQ;AAAA,IACV,CAAC;AAAA,EACH;AACF;","names":[]}
@@ -0,0 +1,11 @@
1
+ import { SamplingScopeConfig, TemperatureSetting } from './types.js';
2
+ import 'ai';
3
+
4
+ declare function resolveSamplingSetting(value: TemperatureSetting | undefined, fieldName: string, retryIndex?: number, retryMax?: number): number | undefined;
5
+ declare function resolveTemperatureSetting(temperature: TemperatureSetting | undefined, retryIndex?: number, retryMax?: number): number | undefined;
6
+ declare function getScopeDefaults<S extends string>(scope: S | undefined, sampling: SamplingScopeConfig<S> | undefined, defaultTemperature: TemperatureSetting, defaultTopP: TemperatureSetting): {
7
+ temperature: TemperatureSetting;
8
+ topP: TemperatureSetting;
9
+ };
10
+
11
+ export { getScopeDefaults, resolveSamplingSetting, resolveTemperatureSetting };
@@ -0,0 +1,67 @@
1
+ function resolveSamplingSetting(value, fieldName, retryIndex, retryMax) {
2
+ if (value === void 0) {
3
+ return void 0;
4
+ }
5
+ if (typeof value === "number") {
6
+ return value;
7
+ }
8
+ if (value.length === 1) {
9
+ return value[0];
10
+ }
11
+ if (value.length !== 2) {
12
+ throw new RangeError(
13
+ `${fieldName} must be a number or a 2-item range like [0.6, 0.98]`
14
+ );
15
+ }
16
+ const [start, end] = value;
17
+ if (start === void 0 || end === void 0) {
18
+ throw new RangeError(
19
+ `${fieldName} must be a number or a 2-item range like [0.6, 0.98]`
20
+ );
21
+ }
22
+ if (retryIndex === void 0 || retryMax === void 0 || retryMax <= 0) {
23
+ return start;
24
+ }
25
+ const boundedRetryIndex = Math.min(Math.max(retryIndex, 0), retryMax);
26
+ const progress = boundedRetryIndex / retryMax;
27
+ return start + (end - start) * progress;
28
+ }
29
+ function resolveTemperatureSetting(temperature, retryIndex, retryMax) {
30
+ return resolveSamplingSetting(
31
+ temperature,
32
+ "temperature",
33
+ retryIndex,
34
+ retryMax
35
+ );
36
+ }
37
+ function getScopeDefaults(scope, sampling, defaultTemperature, defaultTopP) {
38
+ if (scope === void 0) {
39
+ return {
40
+ temperature: defaultTemperature,
41
+ topP: defaultTopP
42
+ };
43
+ }
44
+ if (sampling === void 0) {
45
+ return {
46
+ temperature: defaultTemperature,
47
+ topP: defaultTopP
48
+ };
49
+ }
50
+ const profile = sampling[scope];
51
+ if (profile === void 0) {
52
+ return {
53
+ temperature: defaultTemperature,
54
+ topP: defaultTopP
55
+ };
56
+ }
57
+ return {
58
+ temperature: profile.temperature ?? defaultTemperature,
59
+ topP: profile.topP ?? defaultTopP
60
+ };
61
+ }
62
+ export {
63
+ getScopeDefaults,
64
+ resolveSamplingSetting,
65
+ resolveTemperatureSetting
66
+ };
67
+ //# sourceMappingURL=sampling.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/llm/sampling.ts"],"sourcesContent":["import type { SamplingScopeConfig, TemperatureSetting } from \"./types.js\";\n\nexport function resolveSamplingSetting(\n value: TemperatureSetting | undefined,\n fieldName: string,\n retryIndex?: number,\n retryMax?: number,\n): number | undefined {\n if (value === undefined) {\n return undefined;\n }\n\n if (typeof value === \"number\") {\n return value;\n }\n\n if (value.length === 1) {\n return value[0];\n }\n\n if (value.length !== 2) {\n throw new RangeError(\n `${fieldName} must be a number or a 2-item range like [0.6, 0.98]`,\n );\n }\n const [start, end] = value;\n\n if (start === undefined || end === undefined) {\n throw new RangeError(\n `${fieldName} must be a number or a 2-item range like [0.6, 0.98]`,\n );\n }\n\n if (retryIndex === undefined || retryMax === undefined || retryMax <= 0) {\n return start;\n }\n const boundedRetryIndex = Math.min(Math.max(retryIndex, 0), retryMax);\n const progress = boundedRetryIndex / retryMax;\n\n return start + (end - start) * progress;\n}\n\nexport function resolveTemperatureSetting(\n temperature: TemperatureSetting | undefined,\n retryIndex?: number,\n retryMax?: number,\n): number | undefined {\n return resolveSamplingSetting(\n temperature,\n \"temperature\",\n retryIndex,\n retryMax,\n );\n}\n\nexport function getScopeDefaults<S extends string>(\n scope: S | undefined,\n sampling: SamplingScopeConfig<S> | undefined,\n defaultTemperature: TemperatureSetting,\n defaultTopP: TemperatureSetting,\n): {\n temperature: TemperatureSetting;\n topP: TemperatureSetting;\n} {\n if (scope === undefined) {\n return {\n temperature: defaultTemperature,\n topP: defaultTopP,\n };\n }\n\n if (sampling === undefined) {\n return {\n temperature: defaultTemperature,\n topP: defaultTopP,\n };\n }\n\n const profile = sampling[scope];\n\n if (profile === undefined) {\n return {\n temperature: defaultTemperature,\n topP: defaultTopP,\n };\n }\n\n return {\n temperature: profile.temperature ?? defaultTemperature,\n topP: profile.topP ?? defaultTopP,\n };\n}\n"],"mappings":"AAEO,SAAS,uBACd,OACA,WACA,YACA,UACoB;AACpB,MAAI,UAAU,QAAW;AACvB,WAAO;AAAA,EACT;AAEA,MAAI,OAAO,UAAU,UAAU;AAC7B,WAAO;AAAA,EACT;AAEA,MAAI,MAAM,WAAW,GAAG;AACtB,WAAO,MAAM,CAAC;AAAA,EAChB;AAEA,MAAI,MAAM,WAAW,GAAG;AACtB,UAAM,IAAI;AAAA,MACR,GAAG,SAAS;AAAA,IACd;AAAA,EACF;AACA,QAAM,CAAC,OAAO,GAAG,IAAI;AAErB,MAAI,UAAU,UAAa,QAAQ,QAAW;AAC5C,UAAM,IAAI;AAAA,MACR,GAAG,SAAS;AAAA,IACd;AAAA,EACF;AAEA,MAAI,eAAe,UAAa,aAAa,UAAa,YAAY,GAAG;AACvE,WAAO;AAAA,EACT;AACA,QAAM,oBAAoB,KAAK,IAAI,KAAK,IAAI,YAAY,CAAC,GAAG,QAAQ;AACpE,QAAM,WAAW,oBAAoB;AAErC,SAAO,SAAS,MAAM,SAAS;AACjC;AAEO,SAAS,0BACd,aACA,YACA,UACoB;AACpB,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAEO,SAAS,iBACd,OACA,UACA,oBACA,aAIA;AACA,MAAI,UAAU,QAAW;AACvB,WAAO;AAAA,MACL,aAAa;AAAA,MACb,MAAM;AAAA,IACR;AAAA,EACF;AAEA,MAAI,aAAa,QAAW;AAC1B,WAAO;AAAA,MACL,aAAa;AAAA,MACb,MAAM;AAAA,IACR;AAAA,EACF;AAEA,QAAM,UAAU,SAAS,KAAK;AAE9B,MAAI,YAAY,QAAW;AACzB,WAAO;AAAA,MACL,aAAa;AAAA,MACb,MAAM;AAAA,IACR;AAAA,EACF;AAEA,SAAO;AAAA,IACL,aAAa,QAAQ,eAAe;AAAA,IACpC,MAAM,QAAQ,QAAQ;AAAA,EACxB;AACF;","names":[]}
@@ -0,0 +1,50 @@
1
+ import { LanguageModel, ModelMessage } from 'ai';
2
+
3
+ type LLMessage = ModelMessage;
4
+ type LLMModel = LanguageModel;
5
+ type TemperatureSetting = number | readonly number[];
6
+ interface SamplingProfile {
7
+ readonly temperature?: TemperatureSetting;
8
+ readonly topP?: TemperatureSetting;
9
+ }
10
+ type SamplingScopeConfig<S extends string> = {
11
+ readonly [scope in S]: SamplingProfile;
12
+ };
13
+ interface LLMRequestOptions<S extends string> {
14
+ readonly signal?: AbortSignal;
15
+ readonly temperature?: TemperatureSetting;
16
+ readonly topP?: TemperatureSetting;
17
+ readonly scope?: S;
18
+ readonly useCache?: boolean;
19
+ readonly retryIndex?: number;
20
+ readonly retryMax?: number;
21
+ }
22
+ type LLMRequestFunction<S extends string> = (messages: readonly LLMessage[], options?: LLMRequestOptions<S>) => Promise<string>;
23
+ type LLMLazyRequestOperation<S extends string, T> = (request: LLMRequestFunction<S>) => Promise<T>;
24
+ type LLMStreamProgressCallback = (event: {
25
+ readonly outputCharacters: number;
26
+ }) => void | Promise<void>;
27
+ interface LLMTokenUsage {
28
+ readonly cacheReadTokens?: number;
29
+ readonly inputTokens?: number;
30
+ readonly outputTokens?: number;
31
+ }
32
+ type LLMTokenUsageCallback = (usage: LLMTokenUsage) => void | Promise<void>;
33
+ interface LLMOptions<S extends string> {
34
+ readonly model: LLMModel;
35
+ readonly dataDirPath: string;
36
+ readonly logDirPath?: string;
37
+ readonly cacheDirPath?: string;
38
+ readonly concurrent?: number;
39
+ readonly stream?: boolean;
40
+ readonly timeout?: number;
41
+ readonly temperature?: TemperatureSetting;
42
+ readonly topP?: TemperatureSetting;
43
+ readonly sampling?: SamplingScopeConfig<S>;
44
+ readonly retryTimes?: number;
45
+ readonly retryIntervalSeconds?: number;
46
+ readonly onStreamProgress?: LLMStreamProgressCallback;
47
+ readonly onTokenUsage?: LLMTokenUsageCallback;
48
+ }
49
+
50
+ export type { LLMLazyRequestOperation, LLMModel, LLMOptions, LLMRequestFunction, LLMRequestOptions, LLMStreamProgressCallback, LLMTokenUsage, LLMTokenUsageCallback, LLMessage, SamplingProfile, SamplingScopeConfig, TemperatureSetting };
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,9 @@
1
+ import { SourceAsset } from '../../source/types.js';
2
+ import { EpubBook } from './model.js';
3
+ import '../../source/meta.js';
4
+ import 'zod';
5
+
6
+ declare function writeEpubArchive(path: string, book: EpubBook): Promise<void>;
7
+ declare function createCoverImageHref(cover: SourceAsset): string;
8
+
9
+ export { createCoverImageHref, writeEpubArchive };
@@ -0,0 +1,81 @@
1
+ import { createWriteStream } from "fs";
2
+ import { dirname, extname } from "path";
3
+ import { finished } from "stream/promises";
4
+ import { mkdir } from "fs/promises";
5
+ import { ZipFile } from "yazl";
6
+ import { normalizeLanguage } from "./shared.js";
7
+ import { renderCoverPage } from "./templates.js";
8
+ const EPUB_CONTAINER_XML = `<?xml version="1.0" encoding="UTF-8"?>
9
+ <container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
10
+ <rootfiles>
11
+ <rootfile full-path="OEBPS/package.opf" media-type="application/oebps-package+xml"/>
12
+ </rootfiles>
13
+ </container>
14
+ `;
15
+ async function writeEpubArchive(path, book) {
16
+ await mkdir(dirname(path), { recursive: true });
17
+ const zip = new ZipFile();
18
+ zip.addBuffer(Buffer.from("application/epub+zip"), "mimetype", {
19
+ compress: false
20
+ });
21
+ zip.addBuffer(
22
+ Buffer.from(EPUB_CONTAINER_XML, "utf8"),
23
+ "META-INF/container.xml"
24
+ );
25
+ zip.addBuffer(Buffer.from(book.packageOpf, "utf8"), "OEBPS/package.opf");
26
+ zip.addBuffer(Buffer.from(book.navXhtml, "utf8"), "OEBPS/nav.xhtml");
27
+ for (const section of book.sections) {
28
+ zip.addBuffer(Buffer.from(section.xhtml, "utf8"), `OEBPS/${section.href}`);
29
+ }
30
+ if (book.cover !== void 0) {
31
+ const coverImageHref = createCoverImageHref(book.cover);
32
+ const language = normalizeLanguage(book.meta.language);
33
+ zip.addBuffer(Buffer.from(book.cover.data), `OEBPS/${coverImageHref}`);
34
+ zip.addBuffer(
35
+ Buffer.from(createCoverPage(book.meta, coverImageHref, language), "utf8"),
36
+ "OEBPS/text/cover.xhtml"
37
+ );
38
+ }
39
+ zip.end();
40
+ const output = createWriteStream(path);
41
+ const outputDone = finished(output);
42
+ const zipDone = finished(zip.outputStream);
43
+ zip.outputStream.pipe(output);
44
+ await Promise.all([outputDone, zipDone]);
45
+ }
46
+ function createCoverImageHref(cover) {
47
+ return `images/cover${normalizeCoverExtension(cover)}`;
48
+ }
49
+ function createCoverPage(meta, coverImageHref, language) {
50
+ const title = meta.title?.trim() || "Untitled";
51
+ return renderCoverPage({
52
+ coverImageHref,
53
+ language,
54
+ title
55
+ });
56
+ }
57
+ function normalizeCoverExtension(cover) {
58
+ const pathExtension = extname(cover.path).toLowerCase();
59
+ if (pathExtension !== "") {
60
+ return pathExtension;
61
+ }
62
+ switch (cover.mediaType) {
63
+ case "image/gif":
64
+ return ".gif";
65
+ case "image/jpeg":
66
+ return ".jpg";
67
+ case "image/png":
68
+ return ".png";
69
+ case "image/svg+xml":
70
+ return ".svg";
71
+ case "image/webp":
72
+ return ".webp";
73
+ default:
74
+ return ".bin";
75
+ }
76
+ }
77
+ export {
78
+ createCoverImageHref,
79
+ writeEpubArchive
80
+ };
81
+ //# sourceMappingURL=archive.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/output/epub/archive.ts"],"sourcesContent":["import { createWriteStream } from \"fs\";\nimport { dirname, extname } from \"path\";\nimport { finished } from \"stream/promises\";\n\nimport { mkdir } from \"fs/promises\";\nimport { ZipFile } from \"yazl\";\n\nimport type { BookMeta, SourceAsset } from \"../../source/index.js\";\n\nimport type { EpubBook } from \"./model.js\";\nimport { normalizeLanguage } from \"./shared.js\";\nimport { renderCoverPage } from \"./templates.js\";\n\nconst EPUB_CONTAINER_XML = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<container version=\"1.0\" xmlns=\"urn:oasis:names:tc:opendocument:xmlns:container\">\n <rootfiles>\n <rootfile full-path=\"OEBPS/package.opf\" media-type=\"application/oebps-package+xml\"/>\n </rootfiles>\n</container>\n`;\n\nexport async function writeEpubArchive(\n path: string,\n book: EpubBook,\n): Promise<void> {\n await mkdir(dirname(path), { recursive: true });\n\n const zip = new ZipFile();\n\n zip.addBuffer(Buffer.from(\"application/epub+zip\"), \"mimetype\", {\n compress: false,\n });\n zip.addBuffer(\n Buffer.from(EPUB_CONTAINER_XML, \"utf8\"),\n \"META-INF/container.xml\",\n );\n zip.addBuffer(Buffer.from(book.packageOpf, \"utf8\"), \"OEBPS/package.opf\");\n zip.addBuffer(Buffer.from(book.navXhtml, \"utf8\"), \"OEBPS/nav.xhtml\");\n\n for (const section of book.sections) {\n zip.addBuffer(Buffer.from(section.xhtml, \"utf8\"), `OEBPS/${section.href}`);\n }\n\n if (book.cover !== undefined) {\n const coverImageHref = createCoverImageHref(book.cover);\n const language = normalizeLanguage(book.meta.language);\n\n zip.addBuffer(Buffer.from(book.cover.data), `OEBPS/${coverImageHref}`);\n zip.addBuffer(\n Buffer.from(createCoverPage(book.meta, coverImageHref, language), \"utf8\"),\n \"OEBPS/text/cover.xhtml\",\n );\n }\n\n zip.end();\n\n const output = createWriteStream(path);\n const outputDone = finished(output);\n const zipDone = finished(zip.outputStream);\n\n zip.outputStream.pipe(output);\n await Promise.all([outputDone, zipDone]);\n}\n\nexport function createCoverImageHref(cover: SourceAsset): string {\n return `images/cover${normalizeCoverExtension(cover)}`;\n}\n\nfunction createCoverPage(\n meta: BookMeta,\n coverImageHref: string,\n language: string,\n): string {\n const title = meta.title?.trim() || \"Untitled\";\n\n return renderCoverPage({\n coverImageHref,\n language,\n title,\n });\n}\n\nfunction normalizeCoverExtension(cover: SourceAsset): string {\n const pathExtension = extname(cover.path).toLowerCase();\n\n if (pathExtension !== \"\") {\n return pathExtension;\n }\n\n switch (cover.mediaType) {\n case \"image/gif\":\n return \".gif\";\n case \"image/jpeg\":\n return \".jpg\";\n case \"image/png\":\n return \".png\";\n case \"image/svg+xml\":\n return \".svg\";\n case \"image/webp\":\n return \".webp\";\n default:\n return \".bin\";\n }\n}\n"],"mappings":"AAAA,SAAS,yBAAyB;AAClC,SAAS,SAAS,eAAe;AACjC,SAAS,gBAAgB;AAEzB,SAAS,aAAa;AACtB,SAAS,eAAe;AAKxB,SAAS,yBAAyB;AAClC,SAAS,uBAAuB;AAEhC,MAAM,qBAAqB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQ3B,eAAsB,iBACpB,MACA,MACe;AACf,QAAM,MAAM,QAAQ,IAAI,GAAG,EAAE,WAAW,KAAK,CAAC;AAE9C,QAAM,MAAM,IAAI,QAAQ;AAExB,MAAI,UAAU,OAAO,KAAK,sBAAsB,GAAG,YAAY;AAAA,IAC7D,UAAU;AAAA,EACZ,CAAC;AACD,MAAI;AAAA,IACF,OAAO,KAAK,oBAAoB,MAAM;AAAA,IACtC;AAAA,EACF;AACA,MAAI,UAAU,OAAO,KAAK,KAAK,YAAY,MAAM,GAAG,mBAAmB;AACvE,MAAI,UAAU,OAAO,KAAK,KAAK,UAAU,MAAM,GAAG,iBAAiB;AAEnE,aAAW,WAAW,KAAK,UAAU;AACnC,QAAI,UAAU,OAAO,KAAK,QAAQ,OAAO,MAAM,GAAG,SAAS,QAAQ,IAAI,EAAE;AAAA,EAC3E;AAEA,MAAI,KAAK,UAAU,QAAW;AAC5B,UAAM,iBAAiB,qBAAqB,KAAK,KAAK;AACtD,UAAM,WAAW,kBAAkB,KAAK,KAAK,QAAQ;AAErD,QAAI,UAAU,OAAO,KAAK,KAAK,MAAM,IAAI,GAAG,SAAS,cAAc,EAAE;AACrE,QAAI;AAAA,MACF,OAAO,KAAK,gBAAgB,KAAK,MAAM,gBAAgB,QAAQ,GAAG,MAAM;AAAA,MACxE;AAAA,IACF;AAAA,EACF;AAEA,MAAI,IAAI;AAER,QAAM,SAAS,kBAAkB,IAAI;AACrC,QAAM,aAAa,SAAS,MAAM;AAClC,QAAM,UAAU,SAAS,IAAI,YAAY;AAEzC,MAAI,aAAa,KAAK,MAAM;AAC5B,QAAM,QAAQ,IAAI,CAAC,YAAY,OAAO,CAAC;AACzC;AAEO,SAAS,qBAAqB,OAA4B;AAC/D,SAAO,eAAe,wBAAwB,KAAK,CAAC;AACtD;AAEA,SAAS,gBACP,MACA,gBACA,UACQ;AACR,QAAM,QAAQ,KAAK,OAAO,KAAK,KAAK;AAEpC,SAAO,gBAAgB;AAAA,IACrB;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACH;AAEA,SAAS,wBAAwB,OAA4B;AAC3D,QAAM,gBAAgB,QAAQ,MAAM,IAAI,EAAE,YAAY;AAEtD,MAAI,kBAAkB,IAAI;AACxB,WAAO;AAAA,EACT;AAEA,UAAQ,MAAM,WAAW;AAAA,IACvB,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT;AACE,aAAO;AAAA,EACX;AACF;","names":[]}
@@ -0,0 +1,15 @@
1
+ import { ReadonlyDocument } from '../../document/document.js';
2
+ import { EpubBook } from './model.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/types.js';
11
+ import '../../document/stores.js';
12
+
13
+ declare function buildEpubBook(document: ReadonlyDocument): Promise<EpubBook>;
14
+
15
+ export { buildEpubBook };
@@ -0,0 +1,76 @@
1
+ import { createCoverImageHref } from "./archive.js";
2
+ import { createFallbackSection, createSectionDocument } from "./content.js";
3
+ import { buildNavItems, createNavDocument } from "./navigation.js";
4
+ import { createPackageOpf } from "./package.js";
5
+ import { normalizeLanguage } from "./shared.js";
6
+ async function buildEpubBook(document) {
7
+ const [meta, toc, cover] = await Promise.all([
8
+ document.readBookMeta(),
9
+ document.readToc(),
10
+ document.readCover()
11
+ ]);
12
+ if (meta === void 0) {
13
+ throw new Error("Archive metadata is missing");
14
+ }
15
+ if (toc === void 0) {
16
+ throw new Error("Document TOC is missing");
17
+ }
18
+ const sectionMap = /* @__PURE__ */ new Map();
19
+ const language = normalizeLanguage(meta.language);
20
+ const sections = await collectSections(
21
+ document,
22
+ language,
23
+ toc.items,
24
+ sectionMap
25
+ );
26
+ const navItems = buildNavItems(toc.items, sectionMap);
27
+ if (sections.length === 0) {
28
+ sections.push(createFallbackSection(meta, language));
29
+ }
30
+ const coverImageHref = cover === void 0 ? void 0 : createCoverImageHref(cover);
31
+ const coverPageHref = cover === void 0 ? void 0 : "text/cover.xhtml";
32
+ return {
33
+ cover,
34
+ meta,
35
+ navXhtml: createNavDocument(meta, language, navItems),
36
+ packageOpf: createPackageOpf({
37
+ coverImageHref,
38
+ coverMediaType: cover?.mediaType,
39
+ coverPageHref,
40
+ language,
41
+ meta,
42
+ modifiedAt: (/* @__PURE__ */ new Date()).toISOString().replace(/\.\d{3}Z$/u, "Z"),
43
+ sections
44
+ }),
45
+ sections
46
+ };
47
+ }
48
+ async function collectSections(document, language, items, sectionMap) {
49
+ const sections = [];
50
+ for (const item of items) {
51
+ if (item.serialId !== void 0) {
52
+ const summary = await document.readSummary(item.serialId);
53
+ if (summary === void 0) {
54
+ throw new Error(
55
+ `Chapter ${item.serialId} summary is missing. Run \`wg wikg://local/job add --input <chapter-uri> --task reading-summary --accept-cost\` before export, or inspect the archive with \`wg <archive-uri>/chapter/tree get\`.`
56
+ );
57
+ }
58
+ const section = createSectionDocument(
59
+ item.serialId,
60
+ language,
61
+ item.title,
62
+ summary
63
+ );
64
+ sectionMap.set(item.serialId, section);
65
+ sections.push(section);
66
+ }
67
+ sections.push(
68
+ ...await collectSections(document, language, item.children, sectionMap)
69
+ );
70
+ }
71
+ return sections;
72
+ }
73
+ export {
74
+ buildEpubBook
75
+ };
76
+ //# sourceMappingURL=book.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/output/epub/book.ts"],"sourcesContent":["import type { ReadonlyDocument } from \"../../document/index.js\";\nimport type { TocItem } from \"../../source/index.js\";\n\nimport { createCoverImageHref } from \"./archive.js\";\nimport { createFallbackSection, createSectionDocument } from \"./content.js\";\nimport type { EpubBook, EpubSection } from \"./model.js\";\nimport { buildNavItems, createNavDocument } from \"./navigation.js\";\nimport { createPackageOpf } from \"./package.js\";\nimport { normalizeLanguage } from \"./shared.js\";\n\nexport async function buildEpubBook(\n document: ReadonlyDocument,\n): Promise<EpubBook> {\n const [meta, toc, cover] = await Promise.all([\n document.readBookMeta(),\n document.readToc(),\n document.readCover(),\n ]);\n\n if (meta === undefined) {\n throw new Error(\"Archive metadata is missing\");\n }\n if (toc === undefined) {\n throw new Error(\"Document TOC is missing\");\n }\n\n const sectionMap = new Map<number, EpubSection>();\n const language = normalizeLanguage(meta.language);\n const sections = await collectSections(\n document,\n language,\n toc.items,\n sectionMap,\n );\n const navItems = buildNavItems(toc.items, sectionMap);\n\n if (sections.length === 0) {\n sections.push(createFallbackSection(meta, language));\n }\n\n const coverImageHref =\n cover === undefined ? undefined : createCoverImageHref(cover);\n const coverPageHref = cover === undefined ? undefined : \"text/cover.xhtml\";\n\n return {\n cover,\n meta,\n navXhtml: createNavDocument(meta, language, navItems),\n packageOpf: createPackageOpf({\n coverImageHref,\n coverMediaType: cover?.mediaType,\n coverPageHref,\n language,\n meta,\n modifiedAt: new Date().toISOString().replace(/\\.\\d{3}Z$/u, \"Z\"),\n sections,\n }),\n sections,\n };\n}\n\nasync function collectSections(\n document: ReadonlyDocument,\n language: string,\n items: readonly TocItem[],\n sectionMap: Map<number, EpubSection>,\n): Promise<EpubSection[]> {\n const sections: EpubSection[] = [];\n\n for (const item of items) {\n if (item.serialId !== undefined) {\n const summary = await document.readSummary(item.serialId);\n\n if (summary === undefined) {\n throw new Error(\n `Chapter ${item.serialId} summary is missing. Run \\`wg wikg://local/job add --input <chapter-uri> --task reading-summary --accept-cost\\` before export, or inspect the archive with \\`wg <archive-uri>/chapter/tree get\\`.`,\n );\n }\n\n const section = createSectionDocument(\n item.serialId,\n language,\n item.title,\n summary,\n );\n\n sectionMap.set(item.serialId, section);\n sections.push(section);\n }\n\n sections.push(\n ...(await collectSections(document, language, item.children, sectionMap)),\n );\n }\n\n return sections;\n}\n"],"mappings":"AAGA,SAAS,4BAA4B;AACrC,SAAS,uBAAuB,6BAA6B;AAE7D,SAAS,eAAe,yBAAyB;AACjD,SAAS,wBAAwB;AACjC,SAAS,yBAAyB;AAElC,eAAsB,cACpB,UACmB;AACnB,QAAM,CAAC,MAAM,KAAK,KAAK,IAAI,MAAM,QAAQ,IAAI;AAAA,IAC3C,SAAS,aAAa;AAAA,IACtB,SAAS,QAAQ;AAAA,IACjB,SAAS,UAAU;AAAA,EACrB,CAAC;AAED,MAAI,SAAS,QAAW;AACtB,UAAM,IAAI,MAAM,6BAA6B;AAAA,EAC/C;AACA,MAAI,QAAQ,QAAW;AACrB,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC3C;AAEA,QAAM,aAAa,oBAAI,IAAyB;AAChD,QAAM,WAAW,kBAAkB,KAAK,QAAQ;AAChD,QAAM,WAAW,MAAM;AAAA,IACrB;AAAA,IACA;AAAA,IACA,IAAI;AAAA,IACJ;AAAA,EACF;AACA,QAAM,WAAW,cAAc,IAAI,OAAO,UAAU;AAEpD,MAAI,SAAS,WAAW,GAAG;AACzB,aAAS,KAAK,sBAAsB,MAAM,QAAQ,CAAC;AAAA,EACrD;AAEA,QAAM,iBACJ,UAAU,SAAY,SAAY,qBAAqB,KAAK;AAC9D,QAAM,gBAAgB,UAAU,SAAY,SAAY;AAExD,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,UAAU,kBAAkB,MAAM,UAAU,QAAQ;AAAA,IACpD,YAAY,iBAAiB;AAAA,MAC3B;AAAA,MACA,gBAAgB,OAAO;AAAA,MACvB;AAAA,MACA;AAAA,MACA;AAAA,MACA,aAAY,oBAAI,KAAK,GAAE,YAAY,EAAE,QAAQ,cAAc,GAAG;AAAA,MAC9D;AAAA,IACF,CAAC;AAAA,IACD;AAAA,EACF;AACF;AAEA,eAAe,gBACb,UACA,UACA,OACA,YACwB;AACxB,QAAM,WAA0B,CAAC;AAEjC,aAAW,QAAQ,OAAO;AACxB,QAAI,KAAK,aAAa,QAAW;AAC/B,YAAM,UAAU,MAAM,SAAS,YAAY,KAAK,QAAQ;AAExD,UAAI,YAAY,QAAW;AACzB,cAAM,IAAI;AAAA,UACR,WAAW,KAAK,QAAQ;AAAA,QAC1B;AAAA,MACF;AAEA,YAAM,UAAU;AAAA,QACd,KAAK;AAAA,QACL;AAAA,QACA,KAAK;AAAA,QACL;AAAA,MACF;AAEA,iBAAW,IAAI,KAAK,UAAU,OAAO;AACrC,eAAS,KAAK,OAAO;AAAA,IACvB;AAEA,aAAS;AAAA,MACP,GAAI,MAAM,gBAAgB,UAAU,UAAU,KAAK,UAAU,UAAU;AAAA,IACzE;AAAA,EACF;AAEA,SAAO;AACT;","names":[]}
@@ -0,0 +1,9 @@
1
+ import { BookMeta } from '../../source/meta.js';
2
+ import { EpubSection } from './model.js';
3
+ import 'zod';
4
+ import '../../source/types.js';
5
+
6
+ declare function createFallbackSection(meta: BookMeta, language: string): EpubSection;
7
+ declare function createSectionDocument(serialId: number, language: string, title: string | null | undefined, summary: string): EpubSection;
8
+
9
+ export { createFallbackSection, createSectionDocument };
@@ -0,0 +1,35 @@
1
+ import { renderSectionDocument } from "./templates.js";
2
+ function createFallbackSection(meta, language) {
3
+ const title = meta.title?.trim() || "Untitled";
4
+ return {
5
+ href: "text/section-1.xhtml",
6
+ id: "section-1",
7
+ title,
8
+ xhtml: renderSectionDocument({
9
+ language,
10
+ paragraphs: [],
11
+ title
12
+ })
13
+ };
14
+ }
15
+ function createSectionDocument(serialId, language, title, summary) {
16
+ const normalizedTitle = title?.trim() || `Section ${serialId}`;
17
+ return {
18
+ href: `text/serial-${serialId}.xhtml`,
19
+ id: `serial-${serialId}`,
20
+ title: normalizedTitle,
21
+ xhtml: renderSectionDocument({
22
+ language,
23
+ paragraphs: splitParagraphs(summary.trim()),
24
+ title: normalizedTitle
25
+ })
26
+ };
27
+ }
28
+ function splitParagraphs(summary) {
29
+ return summary.split(/\n\s*\n/gu).map((paragraph) => paragraph.replace(/\s*\n\s*/gu, " ").trim()).filter((paragraph) => paragraph !== "");
30
+ }
31
+ export {
32
+ createFallbackSection,
33
+ createSectionDocument
34
+ };
35
+ //# sourceMappingURL=content.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/output/epub/content.ts"],"sourcesContent":["import type { BookMeta } from \"../../source/index.js\";\n\nimport type { EpubSection } from \"./model.js\";\nimport { renderSectionDocument } from \"./templates.js\";\n\nexport function createFallbackSection(\n meta: BookMeta,\n language: string,\n): EpubSection {\n const title = meta.title?.trim() || \"Untitled\";\n\n return {\n href: \"text/section-1.xhtml\",\n id: \"section-1\",\n title,\n xhtml: renderSectionDocument({\n language,\n paragraphs: [],\n title,\n }),\n };\n}\n\nexport function createSectionDocument(\n serialId: number,\n language: string,\n title: string | null | undefined,\n summary: string,\n): EpubSection {\n const normalizedTitle = title?.trim() || `Section ${serialId}`;\n\n return {\n href: `text/serial-${serialId}.xhtml`,\n id: `serial-${serialId}`,\n title: normalizedTitle,\n xhtml: renderSectionDocument({\n language,\n paragraphs: splitParagraphs(summary.trim()),\n title: normalizedTitle,\n }),\n };\n}\n\nfunction splitParagraphs(summary: string): string[] {\n return summary\n .split(/\\n\\s*\\n/gu)\n .map((paragraph) => paragraph.replace(/\\s*\\n\\s*/gu, \" \").trim())\n .filter((paragraph) => paragraph !== \"\");\n}\n"],"mappings":"AAGA,SAAS,6BAA6B;AAE/B,SAAS,sBACd,MACA,UACa;AACb,QAAM,QAAQ,KAAK,OAAO,KAAK,KAAK;AAEpC,SAAO;AAAA,IACL,MAAM;AAAA,IACN,IAAI;AAAA,IACJ;AAAA,IACA,OAAO,sBAAsB;AAAA,MAC3B;AAAA,MACA,YAAY,CAAC;AAAA,MACb;AAAA,IACF,CAAC;AAAA,EACH;AACF;AAEO,SAAS,sBACd,UACA,UACA,OACA,SACa;AACb,QAAM,kBAAkB,OAAO,KAAK,KAAK,WAAW,QAAQ;AAE5D,SAAO;AAAA,IACL,MAAM,eAAe,QAAQ;AAAA,IAC7B,IAAI,UAAU,QAAQ;AAAA,IACtB,OAAO;AAAA,IACP,OAAO,sBAAsB;AAAA,MAC3B;AAAA,MACA,YAAY,gBAAgB,QAAQ,KAAK,CAAC;AAAA,MAC1C,OAAO;AAAA,IACT,CAAC;AAAA,EACH;AACF;AAEA,SAAS,gBAAgB,SAA2B;AAClD,SAAO,QACJ,MAAM,WAAW,EACjB,IAAI,CAAC,cAAc,UAAU,QAAQ,cAAc,GAAG,EAAE,KAAK,CAAC,EAC9D,OAAO,CAAC,cAAc,cAAc,EAAE;AAC3C;","names":[]}
@@ -0,0 +1,20 @@
1
+ import { ReadonlyDocument } from '../../document/document.js';
2
+ export { EPUB_OUTPUT_VERSION } from './package.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/types.js';
11
+ import '../../document/stores.js';
12
+ import './model.js';
13
+
14
+ interface WriteEpubOptions {
15
+ readonly document: ReadonlyDocument;
16
+ readonly path: string;
17
+ }
18
+ declare function writeEpub(options: WriteEpubOptions): Promise<void>;
19
+
20
+ export { type WriteEpubOptions, writeEpub };
@@ -0,0 +1,14 @@
1
+ import { writeEpubArchive } from "./archive.js";
2
+ import { buildEpubBook } from "./book.js";
3
+ import { EPUB_OUTPUT_VERSION } from "./package.js";
4
+ async function writeEpub(options) {
5
+ const book = await options.document.openSession(async (document) => {
6
+ return await buildEpubBook(document);
7
+ });
8
+ await writeEpubArchive(options.path, book);
9
+ }
10
+ export {
11
+ EPUB_OUTPUT_VERSION,
12
+ writeEpub
13
+ };
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/output/epub/index.ts"],"sourcesContent":["import type { ReadonlyDocument } from \"../../document/index.js\";\n\nimport { writeEpubArchive } from \"./archive.js\";\nimport { buildEpubBook } from \"./book.js\";\nimport { EPUB_OUTPUT_VERSION } from \"./package.js\";\n\nexport interface WriteEpubOptions {\n readonly document: ReadonlyDocument;\n readonly path: string;\n}\n\nexport async function writeEpub(options: WriteEpubOptions): Promise<void> {\n const book = await options.document.openSession(async (document) => {\n return await buildEpubBook(document);\n });\n\n await writeEpubArchive(options.path, book);\n}\n\nexport { EPUB_OUTPUT_VERSION };\n"],"mappings":"AAEA,SAAS,wBAAwB;AACjC,SAAS,qBAAqB;AAC9B,SAAS,2BAA2B;AAOpC,eAAsB,UAAU,SAA0C;AACxE,QAAM,OAAO,MAAM,QAAQ,SAAS,YAAY,OAAO,aAAa;AAClE,WAAO,MAAM,cAAc,QAAQ;AAAA,EACrC,CAAC;AAED,QAAM,iBAAiB,QAAQ,MAAM,IAAI;AAC3C;","names":[]}